代碼示例:css
public override void EndOperationTransaction(BOS.Core.DynamicForm.PlugIn.Args.EndOperationTransactionArgs e) { base.EndOperationTransaction(e); ////////////////////////////// 轉換 ////////////////////////////// ConvertRuleElement ruleElement = AppServiceContext.ConvertService.GetConvertRules(this.Context, "srcFormId", "destFormId").Where(o => o.IsDefault == true).FirstOrDefault(); ListSelectedRowCollection rows = new ListSelectedRowCollection(); int i = 0; foreach (var srcData in e.DataEntitys) { ListSelectedRow row = new ListSelectedRow(srcData.GetDynamicObjectItemValue<string>("Id"), string.Empty, i++,"srcFormId"); rows.Add(row); } OperateOption option = OperateOption.Create(); option.SetVariableValue(BOSConst.CST_ConvertValidatePermission, true); PushArgs pushArgs = new PushArgs(ruleElement, rows.ToArray()); // 轉換生成目標單 ConvertOperationResult convResult = AppServiceContext.ConvertService.Push(this.Context, pushArgs, option); DynamicObject[] destObjs = convResult.TargetDataEntities.Select(r => r.DataEntity).ToArray(); // 目標單元數據 FormMetadata destFormMetadata = AppMetadataContext.LoadWithNoVerCheck(this.Context, "destFormId") as FormMetadata; // 操做選項 option = OperateOption.Create(); option.SetIgnoreWarning(false); // 上一步操做成功的目標單 List<object> lastSuccessIdLst = new List<object>(); // 本操做成功的目標單 List<object> successIdLst = new List<object>(); // 操做失敗的目標單 List<DynamicObject> failedobjs = new List<DynamicObject>(); // 操做結果 IOperationResult result = new OperationResult(); // 錯誤信息 List<ValidationErrorInfo> errorLst = new List<ValidationErrorInfo>(); ////////////////////////////// 暫存 ////////////////////////////// IDraftService service = Kingdee.BOS.Contracts.ServiceFactory.GetService<IDraftService>(this.Context); IOperationResult innerResult = service.Draft(this.Context, destFormMetadata.BusinessInfo, destObjs); // 暫存成功的目標單 successIdLst = innerResult.OperateResult.Select(o => o.PKValue).Distinct().ToList(); // 暫存不經過的目標單 failedobjs = destObjs.Where(o => !successIdLst.Contains(o.GetDynamicObjectItemValue<object>("Id"))).ToList(); if (failedobjs != null && !failedobjs.IsEmpty()) { errorLst.Add(new ValidationErrorInfo("", "Id", 0, 0, "DraftError", string.Format("{0}暫存失敗:{1}", string.Join(",", failedobjs.Select(o => o.GetDynamicObjectItemValue<string>("BillNo"))), string.Join("\n", innerResult.ValidationErrors.Select(o => o.Message))), "", ErrorLevel.Error)); } // 暫存不經過,則操做失敗 if (successIdLst.IsEmpty()) { result.IsSuccess = false; } e.DataEntitys = e.DataEntitys.Where(o => successIdLst.Contains(o.GetDynamicObjectItemValue<object>("Id"))).ToArray(); ////////////////////////////// 保存 ////////////////////////////// if (!successIdLst.IsEmpty()) { lastSuccessIdLst = successIdLst; innerResult = AppServiceContext.SaveService.Save(this.Context, destFormMetadata.BusinessInfo, destObjs.Where(o => successIdLst.Contains(o.GetDynamicObjectItemValue<object>("Id"))).ToArray(), option); // 保存成功的目標單 successIdLst = innerResult.OperateResult.Select(o => o.PKValue).Distinct().ToList(); // 校驗不經過的目標單 failedobjs = destObjs.Where(o => lastSuccessIdLst.Contains(o.GetDynamicObjectItemValue<object>("Id")) && !successIdLst.Contains(o.GetDynamicObjectItemValue<object>("Id"))).ToList(); if (failedobjs != null && !failedobjs.IsEmpty()) { errorLst.Add(new ValidationErrorInfo("", "Id", 0, 0, "SaveError", string.Format("{0}保存失敗,已暫存:{1}", string.Join(",", failedobjs.Select(o => o.GetDynamicObjectItemValue<string>("BillNo"))), string.Join("\n", innerResult.ValidationErrors.Select(o => o.Message))), "", ErrorLevel.Error)); } } ////////////////////////////// 提交 ////////////////////////////// if (!successIdLst.IsEmpty()) { lastSuccessIdLst = successIdLst; innerResult = AppServiceContext.SubmitService.Submit(this.Context, destFormMetadata.BusinessInfo, successIdLst.ToArray(), "Submit", option); // 提交成功的目標單 successIdLst = innerResult.OperateResult.Select(o => o.PKValue).Distinct().ToList(); // 校驗不經過的目標單 failedobjs = destObjs.Where(o => lastSuccessIdLst.Contains(o.GetDynamicObjectItemValue<object>("Id")) && !successIdLst.Contains(o.GetDynamicObjectItemValue<object>("Id"))).ToList(); if (failedobjs != null && !failedobjs.IsEmpty()) { errorLst.Add(new ValidationErrorInfo("", "Id", 0, 0, "SubmitError", string.Format("{0}提交失敗,已保存:{1}", string.Join(",", failedobjs.Select(o => o.GetDynamicObjectItemValue<string>("BillNo"))), string.Join("\n", innerResult.ValidationErrors.Select(o => o.Message))), "", ErrorLevel.Error)); } } ////////////////////////////// 審覈 ////////////////////////////// if (!successIdLst.IsEmpty()) { lastSuccessIdLst = successIdLst; List<KeyValuePair<object, object>> pkIds = new List<KeyValuePair<object, object>>(); foreach (var o in successIdLst) { pkIds.Add(new KeyValuePair<object, object>(o, "")); } //審覈 List<object> paraAudit = new List<object>(); //1審覈經過 paraAudit.Add("1"); //審覈意見 paraAudit.Add(""); innerResult = AppServiceContext.SetStatusService.SetBillStatus(this.Context, destFormMetadata.BusinessInfo, pkIds, paraAudit, "Audit", option); // 審覈成功的目標單 successIdLst = innerResult.OperateResult.Select(o => o.PKValue).Distinct().ToList(); // 審覈不經過的目標單 failedobjs = destObjs.Where(o => lastSuccessIdLst.Contains(o.GetDynamicObjectItemValue<object>("Id")) && !successIdLst.Contains(o.GetDynamicObjectItemValue<object>("Id"))).ToList(); if (failedobjs != null && !failedobjs.IsEmpty()) { errorLst.Add(new ValidationErrorInfo("", "Id", 0, 0, "AuditError", string.Format("{0}審覈失敗,已提交:{1}", string.Join(",", failedobjs.Select(o => o.GetDynamicObjectItemValue<string>("BillNo"))), string.Join("\n", innerResult.ValidationErrors.Select(o => o.Message))), "", ErrorLevel.Error)); } } ////////////////////////////// 構造錯誤信息 ////////////////////////////// if (!errorLst.IsNullOrEmpty()) { result.ValidationErrors.AddRange(errorLst); } // 將操做結果合併到空操做結果中 this.OperationResult.IsSuccess = result.IsSuccess; if (!this.OperationResult.IsSuccess) { this.OperationResult.ValidationErrors.Add(new ValidationErrorInfo("", "Id", 0, 0, "Error", string.Format("自動轉換失敗"), "", ErrorLevel.Error)); } this.OperationResult.MergeResult(result); }