找回密码
 注册成为天翎用户
楼主: 大大大文丽

[已解决] 一表包含多个子视图,视图自动填充数据(来自第三方数据源)

[复制链接]
meiji 发表于 2017-7-21 16:33:11 | 显示全部楼层
可以把您的软件整个导出来给我们吗?我们这边可以直接帮您运行软件,能更加快速准确的找出问题根源所在并给您一个解决方案❤具体导出步骤如下:
进入软件—在左边点击右键—选择导入/导出—导出数据—选择软件—点击导出即可
 楼主| 大大大文丽 发表于 2017-7-21 16:53:04 | 显示全部楼层
meiji 发表于 2017-7-21 16:33
可以把您的软件整个导出来给我们吗?我们这边可以直接帮您运行软件,能更加快速准确的找出问题根源所在并给 ...

导出软件如下:
20170721045021.zip (33.4 KB, 下载次数: 290)
meiji 发表于 2017-7-26 11:29:02 | 显示全部楼层
不好意思,这么晚才给您回复,解决您显示不了ECO_Record子表的具体操作步骤如下:
进入ECO_Record表单的视图,点击数列,用我下面这段代码覆盖您之前的脚本代码—
var parentdoc=getParentDocument();
var SN=parentdoc.getItemValueAsString("SN");
println("eco_record");
println(SN);
  var sql="select * from tlk_ECO_Record where item_Eco_No='"+SN+"'";
  println(sql);
     sql;
meiji 发表于 2017-7-26 11:35:02 | 显示全部楼层
要父表SN字段跟ECO子表单中的ECO_No字段联动,还要进行如下设置:
进入FA_Report父表单,点击格式,右键ECO_Record包含元素,点击包含元素属性框,取消勾选"是否为父子关系",点击保存即可

 楼主| 大大大文丽 发表于 2017-7-29 14:54:49 | 显示全部楼层
meiji 发表于 2017-7-26 11:35
要父表SN字段跟ECO子表单中的ECO_No字段联动,还要进行如下设置:
进入FA_Report父表单,点击格式,右键EC ...

谢谢回复。此帖可结。不过用的另外的方法,因为这个问题比你理解的可能复杂一点,所以用你提供的脚本还不够。
此处分享一下:
正如我所说,我的表单都建立在数据源A中,但表单中有三个包含视图需要从另一个数据库B中抓取资料(表单中的关键字段为SN,三个包含视图都是根据SN去数据库B中抓取对应数据的)。
我的步骤如下:
1.在软件中建立另一个数据源CRC,对应的数据库即数据库B
2.在表单字段SN旁添加按钮,操作为自定义,在动作执行后脚本中写上以下脚本,只要输入SN,点击按钮,视图就会自动出现数据啦
var sub =getCurrentDocument();
println("sub="+sub);
var id = sub.getId();
println("id="+id);
var SN=sub.getItemValueAsString("SN");
println("SN="+SN);
var user=getWebUser();
println("user="+user);
var uuidd=new Packages.cn.myapps.util.sequence.Sequence();
var uuid=uuidd.getSequence();
var process=new Packages.cn.myapps.core.dynaform.document.ejb.DocumentProcessBean(getApplication());
println("process="+process);

var doc1 = new Packages.cn.myapps.core.dynaform.document.ejb.Document();

var sql="select   ITEM_REFERENCE_NUMBER, ITEM_REPAIR_ACTION,ITEM_REPAIR_TIME,[ITEM_DEFECT_LOCATION]=stuff((select ','+[ITEM_DEFECT_LOCATION] from TLK_RMA2R_RMA2_R_RDE_T as b where b. ITEM_REFERENCE_NUMBER = a. ITEM_REFERENCE_NUMBER  and  b. ITEM_REPAIR_ACTION = a. ITEM_REPAIR_ACTION and  b. ITEM_REPAIR_TIME = a. ITEM_REPAIR_TIME  and ITEM_REPAIR_ACTION!='NONE'  for xml path('')),1,1,'' )  from TLK_RMA2R_RMA2_R_RDE_T as a where ITEM_REPAIR_ACTION!='NONE' and ITEM_UUT_SERIAL_NUMBER='"+SN+"'";
//根据自己需要从数据库中抓数据,只要能在数据库中执行出来就没问题
datas=queryByDSName("CRC",sql);//因为不在同一个数据源,所以这里用queryByDSName,把CRC替换为所建的数据源名称即可
println("datas="+datas);
var i=1;
if(datas!=null&&datas.size()>0)
{  for(var iter=datas.iterator();iter.hasNext();)
   {var docxj=iter.next();
           if(docxj!=null)
{doc1.setFormid("11e7-604f-5af6675a-949a-0798d9d3b954");//要把数据插入到哪个表就写哪个表的formid
doc1.setFormname("CRC/FA_Report/ECO_Record");//要把数据插入到哪个表就写哪个表的formname
doc1.setAuthor(user.getId());
doc1.setIstmp(false);
doc1.setCreated(getToday());
doc1.setApplicationid(getApplication());
doc1.setDomainid(user.getDomainid());
doc1.setParent(id);
var uuidd1=new Packages.cn.myapps.util.sequence.Sequence();
var uuid1=uuidd.getSequence();
doc1.setId(uuid1);

doc1.addStringItem("ECO_NO",docxj.get("reference_number"));
//千万注意这里用get,不要用getItemValueAsString,因为前面是queryByDSName()而不是queryBySQL()

doc1.addStringItem("action",docxj.get("repair_action"));
doc1.addStringItem("location",docxj.get("DEFECT_LOCATION"));
doc1.addStringItem("execute_date",docxj.get("repair_time"));
process.doCreate(doc1);

}
}
}



唐翔 发表于 2017-8-4 15:04:54 | 显示全部楼层
我也需要这样做,这个分享很强
meiji 发表于 2017-8-6 12:20:36 | 显示全部楼层
感谢反馈,此贴可结❤

本版积分规则

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

GMT+8, 2026-9-29 09:59

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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