About wex5

该作者尚未填入任何详情
So far wex5 has created 155 blog entries.

group by的数据分页显示

概念的标准queryAction里面不支持group by,需要自定义action实现group by,但是自定义action之后,数据的分页需要自己实现。 下面介绍一种方法,使用系统提供的分页能力,分页显示group by的数据 系统在实现分页的时候,是在调用queryAction的时候,传入了两个参数,分别是offset和limit,这两个参数说明了从第几条记录开始取几条数据。 例如,分页取数据,每页显示20条数据 取第一页数据,offset=0,limit=20 取第二页数据,offset=20,limit=20 取第三页数据,offset=40,limit=20 系统提供的工具条可以获得正确的offset和limit,有了这两个参数就可以实现分页了。这两个参数,系统会传给bizdata组件reader属性对应的action,因此,还是要使用这里的action,只是这个action不再使用bizQueryProcedure,而是使用自定义的procedure,这样就可以既接收到offset和limit参数,也可以通过自己写java实现group by了。注意,这个action的参数必须包含bizQueryProcedure里面的全部参数,当然还可以增加新的参数。 特别说明,group by之后的数据一般情况下只做浏览用,不能修改。如果需要修改,不能使用系统提供的bizSaveProcedure,需要使用自定义的procedure,自己写java实现保存。 一个简单的例子 在ontology文件中,添加一个queryAction,例如:queryER_WPXX1Action,保存后点生成按钮,再点代码按钮 下面是具体的代码,这里的参数虽然多,但是,最主要是要使用offset和limit public static Table queryER_WPXX1(String concept,String select,String from,String aggregate,String dataModel, String fnModel,String condition,List range,Boolean distinct,String idColumn,String filter,Integer limit, [...]

树形数据的设置

在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 [...]