树形数据的设置

在bizData组件上,有关树形数据的设置,主要是以下属性: 1、is-tree,这个属性决定数据是否以树形存储和展现 2、tree-option -> parent-relation,设置父子树的父字段 3、tree-option -> root-filter,设置树的根节点过滤条件 4、limit,因为树形没有办法分页显示,所以limit必须设置为-1 这里容易出问题的主要是root-filter,一般情况下,数据根节点的父字段值一般是null或者-1,那么root-filter的值就应该是"sParent is null"或者"sParent = -1"; 如果有特殊的显示需要,例如只显示某个节点下的数据,那么root-filter也可以是"SA_OPOrg = 'org02'",甚至可以通过root-filter过滤出多个需要的根节点,例如"SA_OPOrg = 'org02' or SA_OPOrg = 'org03'"; 最后要注意,一般设置了root-filter的情况下,树形数据是逐级加载的,只有当用户点加号时才会加载下一级的数据; 但是当没有设置root-filter时,数据集会一次性加载全部数据到页面,然后再按照parent-relation构造成树形,如果数据量很大时,这时非常容易出现延迟、假死等现象,建议大家当数据量不确定的情况下不要使用这种模式。 本文由WeX5君整理,WeX5一款开源免费的html5开发工具,H5 App开发就用WeX5! 阅读其他app 开发相关文章:http://doc.wex5.com/?p=3443

使用数据库的临时表

需求:使用oracle的session级的临时表,每个人登录系统后,使用自己的临时表,数据不互相干扰 实现:自己写代码建立jdbc连接,将这个连接存入session,下次使用时,从session中获取这个连接,这样使用同一个连接访问临时表,最后在注销的时候,关闭这个连接。 1 建立jdbc连接、访问session代码 <pre>public static void tempTable(){ java.sql.Connection conn = null; java.sql.PreparedStatement pstmt = null; try { HttpSession session = ContextHelper.getSessionContext().getSession();//获得session conn = (java.sql.Connection) session.getAttribute("conn");//从session中取值 if(conn == null){ java.lang.System.out.println("-----------new"); Class.forName("oracle.jdbc.driver.OracleDriver"); conn = DriverManager.getConnection("jdbc:oracle:thin:@oracle-10.justep.com:1521:orcl", [...]

KSQL、SQL使用说明

1  在平台中使用KSQL——推荐 在X5的Java开发中,可以使用KSQL进行数据操作。KSQL与SQL在语法上相近,区别在于KSQL操作的是“概念”,SQL操作的是“数据库表”。KSQL使用平台事务,因此不需要关心事务。 在Java中,使用KSQL进行查询数据操作,使用select方法,例如: import Java.util.Iterator; import com.justep.system.data.KSQL; import com.justep.system.data.Row; public class DynamicFun { static public String getCustomerMaxCode(){ try { //定义查询ksql,在KSQL中必须使用别名,概念标识和关系标识是大小写敏感的 String kSql="select max(X5_Customer.fCustomerCode) as fCustomerCode from X5_Customer X5_Customer"; //执行select取得数据。Table是返回的数据集 com.justep.system.data.Table table = KSQL.select(kSql, [...]

概念使用Integer主键

有些数据表使用数据库的自增列作为主键,这种表如何定义为概念呢? Wex5概念的主键是必须有默认值的,不能空着,等到保存到数据表里时,由数据库计算出新的主键值,因此不能使用数据库的自增列的能力了。 取而代之,使用x5提供的nextSeq函数作为概念的主键的默认值,在新增记录时,计算出新的主键值 概念的定义如下图,在主键默认值中使用nextSeq函数,nextSeq函数的参数可以使用概念名 在映射设置中将主键的数据类型改为Integer 这样设置之后,就可以使用Integer的字段作为主键了。 上面的方法,有一个缺点,就是在新增记录时获取流水号,如果不保存记录,会导致数据表中的主键值不连续。 如果没有必须连续的要求,这样就可以。 如果要求必须连续,参考 新增数据时,数据库中产生连续不间断的序号 http://bbs.justep.com/forum.php?mod=viewthread&tid=50156 帖子中使用String类型的值作为序号,使用了方法 BizUtils.createNextSequenceString("CDRS"+date,"0000"); 我们这里要使用Integer类型的值作为序号,因此使用 BizUtils.getNextSequence(key); 方法,其中key不能和主键默认值里面的key一样 代码如下 public static void buyProcessBeforeSaveER_CGSQZBAction() { //获得table参数 Table table = (Table)ContextHelper.getActionContext().getParameter("table"); //获得所有新增的行 Iterator&lt;Row&gt; rows = table.iterator(com.justep.system.data.ModifyState.NEW ); while [...]

树形主从表级联删除问题

多级主从表可以设置级联删除,在建表时主表子关联的字段后边有个“高级”,设置级联删除,如图: 当一个从表的上级主表为普通级联关系时,删除上级主表时系统会自动删除这个表对应的数据。 当一个从表的上级主表为树形级联关系时,删除上级的主表时不会把这个从表在数据库的数据删除并且会发生异常,如果您的需求要求设置一个从表的上级主表为树形,只能自己在java中写代码删除子表,同时要去掉系统的级联删除设置,如图: java代码要写在第一级的主表的saveAction的执行前事件中 例如主表为树形:级联删从表: public static void mainActivityBeforeSaveMY_YJBAction() { //找到需要删除的数据 Table table = (Table) ContextHelper.getActionContext().getParameter("table"); //获得所有被删除的行 Iterator&lt;Row&gt; rows = table.iterator(com.justep.system.data.ModifyState.DELETE); Row row; //判断是否删除数据? if (rows.hasNext()) { //从表删除数据的ksql语句 String deleteKsql = "DELETE FROM MY_CB [...]

BIZ层调试方法

配置控制台的调试信息显示 配置文件 \runtime\BusinessServer\WEB-INF\justep.log.properties 配置项 # log level : ALL DEBUG INFO WARN ERROR OFF log4j.rootLogger=DEBUG, Console, X5 默认是INFO,一般改成DEBUG就可以 Java代码的调试 设置tomcat a) 设置用调试模式启动 b) 设置源文件路径 在代码中设置断点 执行功能,自动进入断点 注意事项 1. tomcat设置源代码的时候,不要有重复,例如UIServer和UI都作为工程了,那不要两个都选,打开的是UI设置断点的,要设置UI 2. 必须都用模型视图设置断点,用包视图设置断点,会导致classes在web-inf\classes下面生成,结果调试看不到变量值 配置控制台输出执行的KSQL和SQL语句 配置文件 [...]

使用外部系统的jar包

1、把外部系统的jar放在logic/code/lib目录下(推荐使用) 其它模块如果也需要使用,引用logic/code目录即可 推荐原因:jar包在应用目录下,换版本时不用单独复制,比较方便。 2、也可以放在BusinessServer/WEB-INF/lib下(不推荐) 放在这里需要配置构建路径。方法是:切换到java页,右键点BIZ,在弹出的菜单中选择构建路径,再选择配置构建路径,弹出Java构建路径对话框,选择库,点添加JAR按钮。 本文由WeX5君整理,WeX5一款开源免费的html5开发工具,H5 App开发就用WeX5! 阅读其他app 开发相关文章:http://doc.wex5.com/?p=3443

java中用json获取附件字段中docName的值

java中用json获取附件字段中docName的值 final String DATA_MODEL = "/demo/misc/data"; String ksql = "Select sendDoc.* from DEMO_SendDoc sendDoc"; Table table = KSQL.select(ksql, null, DATA_MODEL, null); Row row = table.getRow("sendDoc", "CB2ED0E4FBBF421583CE48D7B6E74A4A"); String attachmentInfo = row.getString("fAttachment"); JSONArray jsonArray = new [...]

概念使用编码字段作为主键

Wex5建议概念使用无业务含义的值作为主键,因此主键是不需要被看到的,这体现在grid组件中主键值显示不出来。 如果希望使用有业务含义的值,例如编码字段作为主键,也是可以的,设置主键关系即可。 下面以物品信息为例,不使用guid作为主键,使用物品编码作为主键 在主键关系中选择物品编码作为主键关系,并且给物品编码关系设置默认值(''),因为主键不能没有默认值 主键的默认值不能重复,因此在新增记录之后,要写代码给主键赋一个不会重复的值 mainActivity.dataMainAfterNew = function(event){       var oldID = justep.xbl("dataMain").getID();       var newID = new UUID().valueOf();        justep.xbl("dataMain").setID(oldID,newID); }; 在这里有一个需要理解的东西,就是在bizData中的主键和物品编码关系是两个东西,此时给主键赋值,不等于给物品编码赋值,主键在bizData中必须唯一。 现在,你可以在界面上输入物品编码,并且作为主键保存到数据库中了。 本文由WeX5君整理,WeX5一款开源免费的html5开发工具,H5 App开发就用WeX5! 阅读其他app 开发相关文章:http://doc.wex5.com/?p=3443