public override OutputData DoAction(IInputData input) { try { string docId = input.QueryString["DocId"]; using (TaxDocumentResolver destResolver = new TaxDocumentResolver(this)) { DataRow row = destResolver.TrySelectRowWithParam("SourceId", docId); if (row != null) { throw new WebPostException("已经复制过该文档!"); } var toolSource = new EmptyDbDataSource() { Context = DbContextUtil.CreateDbContext("Tools") }; using (toolSource) using (var srcResolver = new TaxDocumentResolver(toolSource)) using (var srcAttachResolver = new DocAttachmentResolver(toolSource)) using (var destAttachResolver = new DocAttachmentResolver(this)) { srcResolver.SelectWithKeys(docId); srcAttachResolver.SelectWithParam("DocId", docId); DataSetUtil.CopyDataTable(srcResolver.HostTable, destResolver.HostTable); destResolver.SetCommands(AdapterCommand.Insert); string id = null; string keyField = destResolver.KeyField; foreach (DataRow destRow in destResolver.HostTable.Rows) { id = destResolver.CreateUniId(); destRow.BeginEdit(); destRow["SourceId"] = destRow[keyField]; destRow[keyField] = id; destRow.EndEdit(); } DataTable attachTable = srcAttachResolver.HostTable; if (attachTable == null) { UpdateUtil.UpdateTableResolvers(null, destResolver); } else { DataTable destAttachTable = destAttachResolver.SelectTableStructure(); DataSetUtil.CopyDataTable(attachTable, destAttachTable); foreach (DataRow attachRow in destAttachTable.Rows) { attachRow.BeginEdit(); attachRow["AttId"] = destAttachResolver.CreateUniId(); attachRow["DocId"] = id; attachRow.EndEdit(); } destAttachResolver.SetCommands(AdapterCommand.Insert); UpdateUtil.UpdateTableResolvers(null, destResolver, destAttachResolver); } return(OutputData.CreateToolkitObject(destResolver.CreateKeyData())); } } } catch (WebPostException ex) { return(OutputData.CreateToolkitObject(ex.CreateErrorResult())); } }