天翎MyApps技术社区 - 低代码平台 | 流程管理系统 | BPM软件

 找回密码
 注册成为天翎用户
查看: 4843|回复: 10

[整合] 插入表单数据问题

[复制链接]
lovesun000 发表于 2011-9-14 19:26:17 | 显示全部楼层 |阅读模式
我想在“保存”按钮的动作执行后脚本中,写一段实现向很多表中插入数据的操作,但是不成功,只有第一个中插入了,我是循环插入的,循环到第二次的时候就出错
代码如下:
  var process = getDocProcess(getApplication());
var currentdoc=getCurrentDocument();
var sql1 = "select id as item_id,* from tlk_fm_油务监督春检模版_nor";
var subdocs1 = queryBySQL(sql1);
if(subdocs1 != null && subdocs1.size() > 0) {
   for (var iter1 = subdocs1.iterator(); iter1.hasNext();) {
      var doc = iter1.next();
      var formProcess = new Packages.cn.myapps.core.dynaform.form.ejb.FormProcessBean();
           var formname=doc.getItemValueAsString("表单名称");
           var formname1="fm_"+formname+"_nor";
           var sql3="select formid as item_formid,* from T_document where formname like '技术监督/油务监督/"+formname1+"%'";
        $PRINTER.println("```````````````````````````````````````````````````````````````````````````````"+sql3);  
         var subdocs3=queryBySQL(sql3);
           var str="";
           if(subdocs3!= null && subdocs3.size() > 0 && subdocs3.iterator().hasNext())
                  { var doc3 = subdocs3.iterator().next();
                        str=doc3.getItemValueAsString("formid");       
                  }
                else
                {$PRINTER.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$");  }
           var did=doc.getItemValueAsString("id");
                $PRINTER.println("```````````````````````````````````````````````````````````````````````````````"+did);  
           var sql="select * from TLK_FM_油务监督设备记录_SUB where parent='"+did+"'";
      var subdocs2=queryBySQL(sql);
           var user=getWebUser();
      if(subdocs2 != null && subdocs2.size() > 0) {
      for (var iter2 = subdocs2.iterator(); iter2.hasNext();) {
             var doc1 = iter2.next();
                //var form = formProcess.doView(did);
                //var params = new Packages.cn.myapps.base.action.ParamsTable();       
                //var newdoc = process.doNew(form,getWebUser(),createParamsTable());
                var newdoc = new Packages.cn.myapps.core.dynaform.document.ejb.Document();
                newdoc.setIstmp(false);
             newdoc.setParent(did);
newdoc.setFormid(str);
newdoc.setFormname("技术监督/油务监督/"+formname1);
newdoc.setAuthor(user.getId());
newdoc.setApplicationid(getApplication());
newdoc.setDomainid(user.getDomainid());           
               newdoc.addStringItem("年份",currentdoc.getItemValueAsString("年份选择"));
                     newdoc.addStringItem("试验性质","春检");
               newdoc.addStringItem("油种",doc1.getItemValueAsString("油种"));
               // newdoc.addStringItem("电压等级",doc1.getItemValueAsString("电压等级"));
                 newdoc.addStringItem("设备名称",doc1.getItemValueAsString("设备名称"));
               newdoc.addStringItem("变电所",doc1.getItemValueAsString("变电所名称"));
                newdoc.addStringItem("是否完成","");
                $PRINTER.println("77777777777777777777777777777777777777777777777777777777"+newdoc);
                 process.doCreate(newdoc);
        }
   }
}
}
结果是:
报空指针的异常,插入的结果是我循环中需要插入的第一个表单的数据都插入了,向第二个表单插入时就出错了,空指针异常,第二次执行到
$PRINTER.println("```````````````````````````````````````````````````````````````````````````````"+sql3);  
输出了,下面就错误了,求管理员看看代码,不胜感激
 楼主| lovesun000 发表于 2011-9-15 10:23:21 | 显示全部楼层
管理没人看吗
bonnie 发表于 2011-9-15 11:12:00 | 显示全部楼层
不好意思,刚有事去了。现在就跟进。。
polo 发表于 2011-9-15 16:08:41 | 显示全部楼层
tomcat 后台是报什么错?
polo 发表于 2011-9-15 16:08:57 | 显示全部楼层
/**创建新对象,把数据插入另外一张表里
*formName 表单名
*formId 表单id
*fieldNames 字段名,数组或字符串
*fieldValues 字段值,数组或字符串
*parentDoc 父文档,可不传
*isDateNames date类型的字段名(可不传)(string类型)
*isDateValues date 类型的值 (可不传)(date类型)
*/
function InsertDataOnOtherDoc(formName, formId, fieldNames, fieldValues, parentDoc,isDateNames,isDateValues) {
        var doc = getCurrentDocument();
        var domain = getDomainid();
        var application = getApplication();
        var process = getDocProcess($WEB.getApplication());
        var uuid = new Packages.cn.myapps.util.sequence.Sequence();
        var child = new Packages.cn.myapps.core.dynaform.document.ejb.Document();
        child.setId(uuid.getSequence());
        if(parentDoc) child.setParent(parentDoc);
        child.setFormname(formName);
        child.setAuthor(getWebUser());
        child.setFormid(formId);
        child.setIstmp(false);
        child.setApplicationid(application);
        child.setLastmodifier(getWebUser().getId());
        child.setDomainid(domain);
        child.setMappingId(child.getId());
        var count = 1;
        var fieldName = "";
        var fieldValue = "";
        if (fieldNames.constructor == Array) {
                count = fieldNames.length;
        } else {
                fieldName = fieldNames;
        }
        if (fieldValues.constructor != Array) {
                fieldValue = fieldValues;
                child.addStringItem(fieldName, fieldValue);
        } else {
                for (var i = 0; i < count; i++) {
                        child.addStringItem(fieldNames[i], fieldValues[i]);
                }
        }
        if(isDateNames && isDateValues){
                var datecount = 1;
        var dateName = "";
                var dateValue = "";
                if (isDateNames.constructor == Array) {
                        datecount = isDateNames.length;
                } else {
                        dateName = isDateNames;
                }
                if (isDateValues.constructor != Array) {
                        dateValue = isDateValues;
                        child.addDateItem(dateName, dateValue);
                } else {
                        for (var i = 0; i < datecount; i++) {
                                child.addDateItem(isDateNames[i], isDateValues[i]);
                        }
                }
        }
        process.doCreate(child);
}
polo 发表于 2011-9-15 16:09:51 | 显示全部楼层
这个是,我们封装的一个函数库
 楼主| lovesun000 发表于 2011-9-15 16:33:37 | 显示全部楼层
回复 6# polo


    这个和我写的有什么区别吗
polo 发表于 2011-9-15 17:26:03 | 显示全部楼层
我们不清楚您插入的逻辑,这个方法只是把插入的过程封装起来

相当于,你们写的这段脚本,但是用函数调用更有效率

   var newdoc = new Packages.cn.myapps.core.dynaform.document.ejb.Document();
                newdoc.setIstmp(false);
             newdoc.setParent(did);
newdoc.setFormid(str);
newdoc.setFormname("技术监督/油务监督/"+formname1);
newdoc.setAuthor(user.getId());
newdoc.setApplicationid(getApplication());
newdoc.setDomainid(user.getDomainid());           
               newdoc.addStringItem("年份",currentdoc.getItemValueAsString("年份选择"));
                     newdoc.addStringItem("试验性质","春检");
               newdoc.addStringItem("油种",doc1.getItemValueAsString("油种"));
               // newdoc.addStringItem("电压等级",doc1.getItemValueAsString("电压等级"));
                 newdoc.addStringItem("设备名称",doc1.getItemValueAsString("设备名称"));
               newdoc.addStringItem("变电所",doc1.getItemValueAsString("变电所名称"));
                newdoc.addStringItem("是否完成","");
                $PRINTER.println("77777777777777777777777777777777777777777777777777777777"+newdoc);
                 process.doCreate(newdoc);
 楼主| lovesun000 发表于 2011-9-15 18:49:23 | 显示全部楼层
回复 8# polo


    var process = getDocProcess(getApplication());
var currentdoc=getCurrentDocument();
var sql1 = "select id as item_id,* from tlk_fm_油务监督春检模版_nor";
var subdocs1 = queryBySQL(sql1);
if(subdocs1 != null && subdocs1.size() > 0) {
   for (var iter1 = subdocs1.iterator(); iter1.hasNext();) {
      var doc = iter1.next();
      var formProcess = new Packages.cn.myapps.core.dynaform.form.ejb.FormProcessBean();
           var formname=doc.getItemValueAsString("表单名称");
           var formname1="fm_"+formname+"_nor";
           var sql3="select domainid,id,formid as item_formid  from T_document where formname like '技术监督/油务监督/"+formname1+"%'";
        $PRINTER.println("---------------------------------------------------------------------------------"+formname1);
           var subdocs3=queryBySQL(sql3);
           $PRINTER.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@"+sql3);
        var str="";
           if(subdocs3!= null && subdocs3.size() > 0 && subdocs3.iterator().hasNext())
                  { var doc3 = subdocs3.iterator().next();
                        str=doc3.getItemValueAsString("formid");       
                  }
           var did=doc.getItemValueAsString("id");
           var sql="select * from TLK_FM_油务监督设备记录_SUB where parent='"+did+"'";
      var subdocs2=queryBySQL(sql);
           var user=getWebUser();
        var formname2="技术监督/油务监督/"+formname1;
        var formid=doc3.getItemValueAsString("formid");
        var fieldnames=new Array();
        var fieldvalues=new Array();
      if(subdocs2 != null && subdocs2.size() > 0) {
      for (var iter2 = subdocs2.iterator(); iter2.hasNext();) {
             var doc1 = iter2.next();
        fieldnames[0]="年份";
        fieldnames[1]="试验性质";
        fieldnames[2]="油种";
        fieldnames[3]="设备名称";
        fieldnames[4]="变电所";
        fieldnames[5]="是否完成";
        fieldvalues[0]=currentdoc.getItemValueAsString("年份选择");
        fieldvalues[1]="春检";
        fieldvalues[2]=doc1.getItemValueAsString("油种");
        fieldvalues[3]=doc1.getItemValueAsString("设备名称");
        fieldvalues[4]=doc1.getItemValueAsString("变电所名称");
        fieldvalues[5]="";       
        $PRINTER.println("$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$"+formid);
        #include "actionlib";
        InsertDataOnOtherDoc(formname2,formid,fieldnames,fieldvalues,did);
        }
   }
}
}
我将脚本改写成这样了,还是报错,只生成一条数据
 楼主| lovesun000 发表于 2011-9-16 13:52:44 | 显示全部楼层
var process = getDocProcess(getApplication());
var currentdoc=getCurrentDocument();
var sql1 = "select id as item_id,* from tlk_fm_油务监督春检模版_nor";
var subdocs1 = queryBySQL(sql1);
var user=getWebUser();
$PRINTER.println("//////////////////////////////////////////////////////////////////////////////////////////////////////////////////"+subdocs1);
if(subdocs1 != null && subdocs1.size() > 0) {
   for (var iter1 = subdocs1.iterator(); iter1.hasNext();) {
      var doc = iter1.next();
           var formname=doc.getItemValueAsString("表单名称");
           var formid=doc.getItemValueAsString("表单ID");
           var formname1="fm_"+formname+"_nor";
        $PRINTER.println("```````````````````````````````````````````````````````````````````````````````"+formname1);  
           var did=doc.getItemValueAsString("id");
           var sql="select * from TLK_FM_油务监督设备记录_SUB where parent='"+did+"'";
$PRINTER.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"+did);  
      var subdocs2=queryByDSName("htsjsdSQL",sql);
        $PRINTER.println("--------------------------------------------------------------------------------------------"+sql);  
      if(subdocs2 != null && subdocs2.size() > 0) {
      for (var iter2 = subdocs2.iterator(); iter2.hasNext();) {
             var doc1 = iter2.next();
                var newdoc = new Packages.cn.myapps.core.dynaform.document.ejb.Document();
                newdoc.setIstmp(false);
             newdoc.setParent(did);
                newdoc.setFormid(formid);
                newdoc.setFormname("技术监督/油务监督/"+formname1);
                newdoc.setAuthor(user.getId());
                newdoc.setApplicationid(getApplication());
                newdoc.setDomainid(user.getDomainid());           
               newdoc.addStringItem("年份",currentdoc.getItemValueAsString("年份选择"));
                  newdoc.addStringItem("试验性质","春检");
                newdoc.addStringItem("电压等级",doc1.get("item_电压等级"));
               newdoc.addStringItem("油种",doc1.get("item_油种"));
                 newdoc.addStringItem("设备名称",doc1.get("item_设备名称"));
               newdoc.addStringItem("变电所",doc1.get("item_变电所名称"));
                newdoc.addStringItem("是否完成","");
                $PRINTER.println("77777777777777777777777777777777777777777777777777777777"+newdoc);
                 process.doCreate(newdoc);
        }
   }
}
}

这个代码是好用的,分享给大家,希望可以帮助其他人

本版积分规则

QQ|手机版|天翎MyApps技术社区 ( 粤ICP备11093750号 )

GMT+8, 2026-8-12 15:21

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表