Q:需求:主表中有一个字段为“姓名”,子表中有一个字段为“曾用名”。主表输入姓名后,自动向子表插入一条“曾用名”字段值与“姓名”字段值相同的记录。该如何实现?
A:在主表中添加一个隐藏字段。“姓名”字段要勾选“刷新”,隐藏字段和包含元素要勾选“重计算”。
在隐藏字段的值脚本中写类似如下脚本,作用为“自动向子表添加记录”。- var value =getItemValueAsString("姓名");
- var name ;
- var docid = getId();
- var parentid = getCurrentDocument().getId();
- var sql = "select * from tlk_主表 where ID = '" + parentid+ "' ";
- var datas = queryBySQL(sql);
- if(datas!=null){//获取主表当前文档“姓名”字段的值
- for(var iterator = datas.iterator();iterator.hasNext();){
- var doc = iterator.next();
- name= doc.getItemValueAsString("姓名");
- }
- }
- var process = getDocumentProcess();
- var formProcess = getFormProcess();
- var subform = formProcess.doView("11e1-9e7e-b6fd0ad9-90ed-ad9fb08997f8");//子表的formid
- var doc = process.doNew(subform,getWebUser(),createParamsTable());
- doc.setParent(parentid);
- doc.addStringItem("曾用名",value);
- if(value!=""){//如果主表“姓名”字段不为空,且主表“姓名”字段与子表“曾用名”字段的值不相等,则添加一条记录
- if(!(value.equals(name))){
- process.doCreate(doc);
- }
- }
复制代码 由于点击表单保存按钮,会自动向子表添加两条相同的记录。所以还需要在保存按钮的动作执行后脚本写脚本删除相同的记录。脚本类似:- var value = getItemValueAsString("姓名");//主表中的“姓名”字段
- var sql = "select * from tlk_曾用名 where item_曾用名='"+value+"'";//tlk_曾用名是子表
- println("sql===="+sql);
- var num = countBySQL(sql);//主表保存后,子表中的“曾用名”字段值与主表当前记录“姓名”字段值相等的记录数
- println("num===="+num);
- var datas = queryBySQL(sql);
- if(num!=0&&datas!=null){
- for(var iterator = datas.iterator();iterator.hasNext();){
- var doc = iterator.next();
- var time = doc.getLastmodified();
- if(num==1){//由于进行保存操作后会自动添加两条相同的记录,这两条记录的最后修改时间是一样的,所以可以根据记录的最后修改时间删除多余的两条记录
- var sql1 = "delete from tlk_曾用名 where LASTMODIFIED='"+time+"'";
- deleteByDSName("myApps功能示例_DS",sql1);
- break;
- }
- num--;
- }
- }
复制代码 |