谢谢回复。此帖可结。不过用的另外的方法,因为这个问题比你理解的可能复杂一点,所以用你提供的脚本还不够。
此处分享一下:
正如我所说,我的表单都建立在数据源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);
}
}
}
|