找回密码
 注册成为天翎用户
楼主: 心诚碎123

[已解决] 视图选择框选择自动生成表单

[复制链接]
 楼主| 心诚碎123 发表于 2017-11-8 20:52:48 | 显示全部楼层
JavaScriptRunning:[Form.仪器领用信息.Field(11e7-7f17-4205f007-a270-4fa1b358b6af).仪器选择.OkScript]: Wrapped com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'obpm_oa.ä»a器领用信æ�ˉ' doesn't exist (baselib#1247),这是报错
 楼主| 心诚碎123 发表于 2017-11-8 20:53:54 | 显示全部楼层
   (function(){
    var flag =true;
    var selectId = getParameterAsText("_selects");
    var relate = getParentDocument();
    var curDoc = getCurrentDocument();
    var docProcess = getDocumentProcess();
    var formProcess = getFormProcess();
    var newForm = formProcess.doViewByFormName("仪器领用信息",getApplication());//调货单是你的表单名
    var sel=selectId.replace(";","','");
    sel="('"+sel+"')";
    if(selectId !=null || selectId.length>0){        
    var sql = "select  * from 仪器领用信息 where id in "+sel;//tlk_fm_client这个表单是你包含元素对应视图的表单名,根据你的业务逻辑修改即可
    var datas = queryBySQL(sql);
    if(datas!=null || datas.size()>0){
    for(var iter = datas.iterator();iter.hasNext();){
    var data = iter.next();
    var sinNum = data.getId();
    var parentId = relate.getId();
    var sqlChard ="select * from 仪器领用信息 where parent ='"+sinNum+"'";//tlk_fm_client这个表单是你包含元素对应视图的表单名,根据你的业务逻辑修改即可
    var dataChard = findBySQL(sqlChard);
    if(dataChard==null){
    var newDoc = docProcess.doNew(newForm,getWebUser(),createParamsTable());
    newDoc.setParent(parentId);
    newDoc.setAuthor(getWebUser().getId());
    newDoc.setIstmp(false);
    newDoc.setApplicationid(getApplication());
    newDoc.setDomainid(getWebUser().getDomainid());
    newDoc.addStringItem("出厂编号",data.getItemValueAsString("出厂编号"));
    docProcess.doCreate(newDoc);
    return flag;
    }
    }
    }
    }
    })();
这是我的确定条件
 楼主| 心诚碎123 发表于 2017-11-8 20:56:10 | 显示全部楼层
选择视图框里面选择的数据的表单名字是井下仪器信息登入,包含元素里面的视图的表单是仪器领用信息
meiji 发表于 2017-11-8 21:13:59 | 显示全部楼层
问题点:软件后台表单名叫a,这个表单在数据库存储会加上前缀tlk_,所以sql语句用到表单名都是tlk_a。修改地方如截图红下划线:

对我.jpg
 楼主| 心诚碎123 发表于 2017-12-4 15:10:18 | 显示全部楼层
qq:1982184523
问题,之前所给的方法无法在添加仪器后自动构建表单,需要继续跟进
meiji 发表于 2017-12-11 10:26:12 | 显示全部楼层
您好,请根据您的实际情况修改了下面脚本后放进您的视图选择框确定脚本中,在视图选择框勾选--多选和刷新。在包含元素中勾选重计算即可实现您的需求。此方案是我测试过的,是可行的。

  1. (function(){
  2. var pdoc=getParentDocument();
  3. //得到选中的数据,插入数据到表单
  4. var params = getParameter("_selects");
  5. var docids = splitText(params,";");
  6. var process = getDocumentProcess();//申明文档业务处理类
  7. var formName ="用户表";//插入包含元素子表的表单名
  8. var formProcess = getFormProcess();       
  9. var form = formProcess.doViewByFormName(formName,getApplication());//得到表单的对象
  10. for(var i=0;i<docids.length;i++){
  11. var doc = process.doView(docids[i]);
  12. var name=doc.getItemValueAsString("姓名");//获取你视图选择框选中记录对应的字段值
  13. var age=doc.getItemValueAsString("学号");//获取你视图选择框选中记录对应的字段值
  14. var bir=doc.getItemValueAsString("生日");//获取你视图选择框选中记录对应的字段值
  15. var doc1 = process.doNew(form,getWebUser(),new Packages.cn.myapps.base.action.ParamsTable());//创建记录
  16. //插入数据
  17. println("名字-------->"+name);
  18. println("年龄-------->"+age);
  19. println("生日-------->"+bir);
  20. doc1.addStringItem("姓名",name);//将刚刚获取的name值插入到包含元素子表中姓名字段中
  21. doc1.addStringItem("学号",age);//同上
  22. doc1.addStringItem("生日",bir);//同上
  23. println("111111");
  24. doc1.setParent(pdoc.getId());
  25. println("22222");
  26. process.doCreate(doc1);
  27. println("33333");
  28. }
  29. })()
复制代码
 楼主| 心诚碎123 发表于 2017-12-12 09:43:51 | 显示全部楼层
meiji 发表于 2017-12-11 10:26
您好,请根据您的实际情况修改了下面脚本后放进您的视图选择框确定脚本中,在视图选择框勾选--多选和刷新。 ...


通过使用该代码出现了一些问题,但是经过改进问题已经解决,谢谢客服技术人员的赖心解答晚上加班给我做的demo,十分感谢。
我想说一下运用这个代码的问题,也便给与其他观看此帖的人省去不必要的一些麻烦。
在运用此帖最后的脚本时,需要在你所要多选的表单之中加入三个字段(使用单行文本框即可)三个字段我与以上的脚本中插入的,也就是最后的那三个姓名,学号,生日保持一致就可以了,这样无论在那个页面多选都是可以的。。
meiji 发表于 2017-12-12 10:00:07 | 显示全部楼层
感谢您的反馈&#10084;

本版积分规则

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

GMT+8, 2026-9-28 20:25

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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