视图跳转按钮复制数据¶
本文档内容来源于 http://doc.myapps.cn/docs/common-script/common-script-1f1oqfkh286ep
脚本说明¶
该脚本用于在视图跳转按钮中复制数据。当从视图跳转到表单时,可以将视图选中记录的数据复制到目标表单中。
常见实现方式¶
方式1:基本复制数据¶
(function(){
var selectId = getParameter("_selects");
if(selectId == null || selectId.trim().length == 0){
return "请选择数据";
}
var sourceDocId = selectId.split(";")[0];
var docProcess = getDocumentProcess();
var sourceDoc = docProcess.doView(sourceDocId);
if(sourceDoc != null){
var currentDoc = getCurrentDocument();
// 复制字段值
currentDoc.findItem("字段1").setValue(sourceDoc.getItemValueAsString("字段1"));
currentDoc.findItem("字段2").setValue(sourceDoc.getItemValueAsString("字段2"));
currentDoc.findItem("字段3").setValue(sourceDoc.getItemValueAsDouble("字段3"));
return "数据复制成功";
}
return "数据复制失败";
})();
方式2:复制多个字段¶
(function(){
var selectId = getParameter("_selects");
if(selectId == null || selectId.trim().length == 0){
return "请选择数据";
}
var sourceDocId = selectId.split(";")[0];
var docProcess = getDocumentProcess();
var sourceDoc = docProcess.doView(sourceDocId);
if(sourceDoc != null){
var currentDoc = getCurrentDocument();
// 定义要复制的字段列表
var fields = ["字段1", "字段2", "字段3", "字段4", "字段5"];
for(var i = 0; i < fields.length; i++){
var fieldName = fields[i];
var fieldValue = sourceDoc.getItemValueAsString(fieldName);
if(fieldValue != null && fieldValue.trim().length > 0){
currentDoc.findItem(fieldName).setValue(fieldValue);
}
}
return "数据复制成功";
}
return "数据复制失败";
})();
方式3:复制并转换数据¶
(function(){
var selectId = getParameter("_selects");
if(selectId == null || selectId.trim().length == 0){
return "请选择数据";
}
var sourceDocId = selectId.split(";")[0];
var docProcess = getDocumentProcess();
var sourceDoc = docProcess.doView(sourceDocId);
if(sourceDoc != null){
var currentDoc = getCurrentDocument();
// 复制并转换数据
var sourceValue1 = sourceDoc.getItemValueAsString("源字段1");
currentDoc.findItem("目标字段1").setValue(sourceValue1);
var sourceValue2 = sourceDoc.getItemValueAsDouble("源字段2");
currentDoc.findItem("目标字段2").setValue(sourceValue2 * 1.1); // 转换计算
var sourceDate = sourceDoc.getItemValueAsDate("源日期");
currentDoc.findItem("目标日期").setValue(format(sourceDate, "yyyy-MM-dd"));
return "数据复制成功";
}
return "数据复制失败";
})();
方式4:复制子表数据¶
(function(){
var selectId = getParameter("_selects");
if(selectId == null || selectId.trim().length == 0){
return "请选择数据";
}
var sourceDocId = selectId.split(";")[0];
var docProcess = getDocumentProcess();
var sourceDoc = docProcess.doView(sourceDocId);
if(sourceDoc != null){
var currentDoc = getCurrentDocument();
// 复制主表字段
currentDoc.findItem("字段1").setValue(sourceDoc.getItemValueAsString("字段1"));
// 复制子表数据
var sourceSubTable = sourceDoc.getSubTable("源子表名");
if(sourceSubTable != null && sourceSubTable.size() > 0){
var targetSubTable = currentDoc.getSubTable("目标子表名");
for(var i = 0; i < sourceSubTable.size(); i++){
var sourceRow = sourceSubTable.get(i);
var targetRow = targetSubTable.addRow();
targetRow.findItem("字段1").setValue(sourceRow.getItemValueAsString("字段1"));
targetRow.findItem("字段2").setValue(sourceRow.getItemValueAsString("字段2"));
}
}
return "数据复制成功";
}
return "数据复制失败";
})();
扩展示例¶
示例1:复制数据并设置默认值¶
(function(){
var selectId = getParameter("_selects");
if(selectId == null || selectId.trim().length == 0){
return "请选择数据";
}
var sourceDocId = selectId.split(";")[0];
var docProcess = getDocumentProcess();
var sourceDoc = docProcess.doView(sourceDocId);
if(sourceDoc != null){
var currentDoc = getCurrentDocument();
// 复制数据
currentDoc.findItem("字段1").setValue(sourceDoc.getItemValueAsString("字段1"));
currentDoc.findItem("字段2").setValue(sourceDoc.getItemValueAsString("字段2"));
// 设置默认值
currentDoc.findItem("状态").setValue("新建");
currentDoc.findItem("创建时间").setValue(format(new Date(), "yyyy-MM-dd HH:mm:ss"));
currentDoc.findItem("创建人").setValue(getWebUser().getName());
return "数据复制成功";
}
return "数据复制失败";
})();
示例2:批量复制多条数据¶
(function(){
var selectIds = getParameter("_selects");
if(selectIds == null || selectIds.trim().length == 0){
return "请选择数据";
}
var ids = selectIds.split(";");
var successCount = 0;
var failCount = 0;
for(var i = 0; i < ids.length; i++){
var sourceDocId = ids[i];
if(sourceDocId == null || sourceDocId.trim().length == 0){
continue;
}
try{
var docProcess = getDocumentProcess();
var sourceDoc = docProcess.doView(sourceDocId);
if(sourceDoc != null){
// 创建新文档
var formProcess = getFormProcess();
var form = formProcess.doViewByFormName("目标表单名", getApplication());
var newDoc = docProcess.doNew(form, getWebUser(), createParamsTable());
// 复制数据
newDoc.findItem("字段1").setValue(sourceDoc.getItemValueAsString("字段1"));
newDoc.findItem("字段2").setValue(sourceDoc.getItemValueAsString("字段2"));
// 保存文档
docProcess.doCreate(newDoc);
successCount++;
}else{
failCount++;
}
}catch(e){
failCount++;
}
}
return "成功:" + successCount + ",失败:" + failCount;
})();
示例3:复制数据并关联原文档¶
(function(){
var selectId = getParameter("_selects");
if(selectId == null || selectId.trim().length == 0){
return "请选择数据";
}
var sourceDocId = selectId.split(";")[0];
var docProcess = getDocumentProcess();
var sourceDoc = docProcess.doView(sourceDocId);
if(sourceDoc != null){
var currentDoc = getCurrentDocument();
// 复制数据
currentDoc.findItem("字段1").setValue(sourceDoc.getItemValueAsString("字段1"));
currentDoc.findItem("字段2").setValue(sourceDoc.getItemValueAsString("字段2"));
// 关联原文档ID
currentDoc.findItem("源文档ID").setValue(sourceDocId);
currentDoc.findItem("源文档名称").setValue(sourceDoc.getItemValueAsString("名称"));
return "数据复制成功";
}
return "数据复制失败";
})();
示例4:根据条件选择性复制¶
(function(){
var selectId = getParameter("_selects");
if(selectId == null || selectId.trim().length == 0){
return "请选择数据";
}
var sourceDocId = selectId.split(";")[0];
var docProcess = getDocumentProcess();
var sourceDoc = docProcess.doView(sourceDocId);
if(sourceDoc != null){
var currentDoc = getCurrentDocument();
var sourceStatus = sourceDoc.getItemValueAsString("状态");
// 根据条件决定是否复制
if(sourceStatus != null && sourceStatus === "已审核"){
// 复制数据
currentDoc.findItem("字段1").setValue(sourceDoc.getItemValueAsString("字段1"));
currentDoc.findItem("字段2").setValue(sourceDoc.getItemValueAsString("字段2"));
return "数据复制成功";
}else{
return "源数据状态不符合要求,无法复制";
}
}
return "数据复制失败";
})();
示例5:复制数据并计算¶
(function(){
var selectId = getParameter("_selects");
if(selectId == null || selectId.trim().length == 0){
return "请选择数据";
}
var sourceDocId = selectId.split(";")[0];
var docProcess = getDocumentProcess();
var sourceDoc = docProcess.doView(sourceDocId);
if(sourceDoc != null){
var currentDoc = getCurrentDocument();
// 复制基础数据
currentDoc.findItem("字段1").setValue(sourceDoc.getItemValueAsString("字段1"));
// 复制并计算
var sourceAmount = sourceDoc.getItemValueAsDouble("金额");
var discount = 0.9; // 折扣
currentDoc.findItem("金额").setValue(sourceAmount * discount);
// 复制日期并计算
var sourceDate = sourceDoc.getItemValueAsDate("日期");
var targetDate = new Date(sourceDate.getTime() + 7 * 24 * 60 * 60 * 1000); // 加7天
currentDoc.findItem("日期").setValue(format(targetDate, "yyyy-MM-dd"));
return "数据复制成功";
}
return "数据复制失败";
})();
关键函数说明¶
getParameter("_selects"): 获取视图中选中的记录IDgetCurrentDocument(): 获取当前文档对象(目标文档)docProcess.doView(docId): 根据文档ID查看文档(源文档)doc.findItem("字段名"): 查找文档中的字段setValue(value): 设置字段值getItemValueAsString("字段名"): 获取字符串类型字段值getItemValueAsDouble("字段名"): 获取数字类型字段值getItemValueAsDate("字段名"): 获取日期类型字段值doc.getSubTable("子表名"): 获取子表对象subTable.addRow(): 添加子表行
数据复制说明¶
- 源文档: 从视图选中的文档,通过
doView()获取 - 目标文档: 当前打开的文档,通过
getCurrentDocument()获取 - 字段映射: 源文档字段和目标文档字段的对应关系
- 数据类型: 注意字段类型匹配,字符串、数字、日期等
注意事项¶
- ⚠️ 选中数据: 需要判断
_selects参数是否存在 - ⚠️ 字段名称: 源字段和目标字段名称需要正确匹配
- ⚠️ 字段类型: 注意字段类型匹配,确保数据类型正确
- ⚠️ 空值处理: 源字段可能为空,需要判断
- ⚠️ 子表复制: 复制子表时需要先获取子表对象,然后逐行复制
- 视图选择框选的值不能在末尾有空字符,否则选不上
- 建议在复制前先判断源文档是否存在
- 可以结合条件判断,选择性复制数据
使用场景¶
- 视图选择数据复制到表单
- 数据模板复制
- 批量数据复制
- 数据关联复制
- 数据转换复制
如需查看完整脚本代码,请访问源文档链接。