复制一条列表数据
功能描述
点击列表的自定义按钮 复制数据 将选中的数据复制出来,包含以下内容
- 主表内容
- 子表内容
- 附件
若当前表单为流程表单,将自动创建流程实例。
编写代码前,需在列表设计页面添加 自定义按钮 并将 自定义按钮 编码设置为 DataCopy。
列表前端代码
- 判断点击的按钮是否为
复制数据时执行逻辑。 - 判断是否选中数据,且一次仅允许复制一条数据。
- 调用后端接口执行复制操作,并展示复制结果。
/*
* $.ListView.GetSelected()获取选中的记录
* $.ListView.RefreshView()刷新列表
* $.ListView.Post()请求后台
* $.ListView.InitQueryItems()修改过滤条件
* $.ListView.RefreshView()刷新页面
* $.ListView.ActionPreDo() 按钮执行之前的事件
*/
$.ListView.ActionPreDo = function(actionCode){
if(actionCode=="DataCopy"){
//点击复制按钮时检查是否选中数据
var objects=$.ListView.GetSelected();
if(objects==null||objects==undefined||objects==""){
$.IShowWarn("您还未勾选数据,请勾选!");
return;
}
//判断选中数据是否大于1条
else if(objects.length>1){
$.IShowWarn("仅允许勾选一条数据");
return;
}
else {
//调用后台逻辑执行复制
$.ListView.Post("DataCopy",{objectId:objects[0].ObjectId},
function(data){
if(data.ReturnData==null||!data.ReturnData.Message){
//刷新列表
$.ListView.RefreshView();
$.IShowSuccess("复制完成!");
}
else if(data.ReturnData!=null&&data.ReturnData.Message){
$.IShowError(data.ReturnData.Message);
}
else{
$.IShowError("复制失败!");
}
},
function(data){
$.IShowError(data.Errors[0]);
},
false);
}
}
};
列表后端自定义代码
- 判断是
复制按钮的请求时执行逻辑。 - 接收选中的数据,若无选中的数据则提示,若有选中的数据则读取数据内容。
- 构造新数据,复制附件及子表数据。
- 判断是否为流程表单,若是流程表单则发起流程实例。
```javascript using System; using System.Collections.Generic; using System.Text; using H3;
public class D00018smd5b25f5649c74c5d8cd971864ee82c2b_ListViewController : H3.SmartForm.ListViewController { public D00018smd5b25f5649c74c5d8cd971864ee82c2b_ListViewController(H3.SmartForm.ListViewRequest request) : base(request) { }
protected override void OnLoad(H3.SmartForm.LoadListViewResponse response)
{
base.OnLoad(response);
}
protected override void OnSubmit(string actionName, H3.SmartForm.ListViewPostValue postValue, H3.SmartForm.SubmitListViewResponse response)
{
if(actionName == "DataCopy")
{
response.ReturnData = new Dictionary<string, object>();
string objectId = this.Request["objectId"];
string schemaCode = "D00018smd5b25f5649c74c5d8cd971864ee82c2b";
if(!string.IsNullOrEmpty(objectId))
{
H3.DataModel.BizObject accountBo = H3.DataModel.BizObject.Load(this.Request.UserContext.UserId, this.Engine, "D00018smd5b25f5649c74c5d8cd971864ee82c2b", objectId, false);
if(accountBo != null)
{
H3.DataModel.BizObjectSchema schema = this.Request.Engine.BizObjectManager.GetPublishedSchema("D00018smd5b25f5649c74c5d8cd971864ee82c2b");
H3.DataModel.BizObject obj = new H3.DataModel.BizObject(this.Request.Engine, schema, this.Request.UserContext.UserId); //主表对象
obj["F0000001"] = accountBo["F0000001"];
obj["F0000004"] = DateTime.Now;
//附件
this.Request.Engine.BizObjectManager.CopyFiles(
schemaCode,
"",
"F0000008",
accountBo.ObjectId,
schemaCode,
"",
"F0000008",
obj.ObjectId,
true,
true);
string childSchemaCode = "D00018462171ae21c34058a6d166a5bc04572d";
//子表数据不为空
if(accountBo[childSchemaCode] != null)
{
//得到子表数据
H3.DataModel.BizObject[] zibiao = (H3.DataModel.BizObject[]) accountBo[childSchemaCode];
//创建存新子表数据集合
List < H3.DataModel.BizObject > zibiaoList = new List<H3.DataModel.BizObject>();
//循环复制数据
foreach(H3.DataModel.BizObject zb in zibiao)
{
H3.DataModel.BizObjectSchema newSch = this.Request.Engine.BizObjectManager.GetPublishedSchema(childSchemaCode);
H3.DataModel.BizObject newzb = new H3.DataModel.BizObject(this.Request.Engine, newSch, this.Request.UserContext.UserId);
newzb["F0000005"] = zb["F0000005"];
zibiaoList.Add(newzb);
}
obj[childSchemaCode] = zibiaoList.ToArray();
}
obj.Status = accountBo.Status;
if(string.IsNullOrEmpty(obj.WorkflowInstanceId))
{
obj.WorkflowInstanceId = System.Guid.NewGuid().ToString();
}
//创建对象
H3.ErrorCode createResult = obj.Create();
//判断是否成功创建数据对象
if(createResult != H3.ErrorCode.Success)
{
response.ReturnData.Add("Message", createResult.ToString());
}
else
{
if(accountBo.Status == H3.DataModel.BizObjectStatus.Running)
{
obj.Status = H3.DataModel.BizObjectStatus.Draft;
H3.Workflow.Instance.WorkflowInstance wfInstance = this.Request.Engine.WorkflowInstanceManager.GetWorkflowInstance(obj.WorkflowInstanceId);
if(wfInstance == null)
{
//启动流程
string workItemID = string.Empty;
string errorMsg = string.Empty;
H3.Workflow.Template.WorkflowTemplate wfTemp = this.Request.Engine.WorkflowTemplateManager.GetDefaultWorkflow(obj.Schema.SchemaCode);
this.Request.Engine.Interactor.OriginateInstance(this.Request.UserContext.UserId,
obj.Schema.SchemaCode,
wfTemp.WorkflowVersion,
obj.ObjectId,
obj.WorkflowInstanceId,
H3.Workflow.WorkItem.AccessMethod.Web,
true,
string.Empty,
true,
out workItemID,
out errorMsg);
}
}
}
}
else
{
response.ReturnData.Add("Message", "数据对象未获取到!");
}
}
else
{
response.ReturnData.Add("Message", "无数据对象ID!");
}
}
base.OnSubmit(actionName, postValue, response);
}
}