}//end static method public static string GetResultMessage(this IOperationResult result, string separator = "\r\n") { result.MergeValidateErrors(); StringBuilder msg = new StringBuilder(); if (result.InteractionContext != null && result.InteractionContext.Option.GetInteractionFlag().Any()) { var text = result.InteractionContext.SimpleMessage.IsNullOrEmptyOrWhiteSpace() ? "因交互性提示而操作中断!" : result.InteractionContext.SimpleMessage; msg.Append(text); msg.Append(separator); } /* * foreach (var error in result.ValidationErrors) * { * msg.AppendLine(error.Message); * } * foreach (var error in result.GetFatalErrorResults()) * { * msg.AppendLine(error.Message); * } */ foreach (var operate in result.OperateResult) { if (!operate.Message.IsNullOrEmptyOrWhiteSpace()) { msg.Append(operate.Message); msg.Append(separator); }//end if } return(msg.ToString()); }//end static method
/// <summary> /// 判断操作结果是否成功,如果不成功,则直接抛错中断进程 /// </summary> /// <param name="opResult"></param> /// <returns></returns> private bool CheckOpResult(IOperationResult opResult) { bool isSuccess = false; if (opResult.IsSuccess == true) { // 操作成功 isSuccess = true; } else { // 操作失败,拼接失败原因,然后抛出中断 opResult.MergeValidateErrors(); if (opResult.OperateResult == null) { throw new KDBusinessException("DeleteTargetBill-001", "未知原因导致自动删除下游单据失败!"); } else { StringBuilder sb = new StringBuilder(); sb.AppendLine("自动删除下游单据失败,失败原因:"); foreach (var operateResult in opResult.OperateResult) { sb.AppendLine(operateResult.Message); } throw new KDBusinessException("DeleteTargetBill-002", sb.ToString()); } } return(isSuccess); }
/// <summary> /// 创建商业机会 /// </summary> /// <param name="CRMOppIds">线索ID</param> private void CreateCRMOpp(List <long> CRMOppIds) { //下推商业机会CRM_OPP_Opportunity ConvertOperationResult operationOppResult = CRMServiceHelper.ConvertBills(base.Context, this.BusinessInfo.GetForm().Id, "CRM_OPP_Opportunity", CRMOppIds); //获取下推生成的下游单据数据包 DynamicObject[] targetOppBillObjs = (from p in operationOppResult.TargetDataEntities select p.DataEntity).ToArray(); if (targetOppBillObjs.Length == 0) { // 未下推成功目标单,抛出错误,中断审核 throw new KDBusinessException("", string.Format("由{0}自动下推{1},没有成功生成数据包,自动下推失败!", this.BusinessInfo.GetForm().Id, "CRM_OPP_Opportunity")); } // 对下游单据数据包,进行适当的修订,以避免关键字段为空,自动保存失败 // 示例代码略 //var saveResult = CRMServiceHelper.Save(base.Context, "CRM_OPP_Opportunity", targetBillObjs); //var draftOppResult = CRMServiceHelper.Draft(base.Context, "CRM_OPP_Opportunity", targetOppBillObjs); var saveOppResult = CRMServiceHelper.Save(base.Context, "CRM_OPP_Opportunity", targetOppBillObjs); // 判断自动保存结果:只有操作成功,才会继续 //if (this.CheckOpResult(draftOppResult, OperateOption.Create())) //{ //} if (this.CheckOpResult(saveOppResult, OperateOption.Create())) { object[] ids = (from c in saveOppResult.SuccessDataEnity select c[0]).ToArray();//保存成功的结果 if (ids.Count() > 0) { foreach (object item in ids) { string id = Convert.ToString(item); IOperationResult submitOppResult = CRMServiceHelper.SubmitWorkFlow(base.Context, "CRM_OPP_Opportunity", id); // 判断提交结果 if (submitOppResult.IsSuccess == true) { // 自动提交成功,显示空操作本身的成功提示即可 } else { submitOppResult.MergeValidateErrors(); if (submitOppResult.OperateResult == null) {// 未知原因导致提交失败 throw new KDBusinessException("AutoSubmit-004", "未知原因导致自动提交失败!"); } else { StringBuilder sb = new StringBuilder(); sb.AppendLine("自动提交失败,失败原因:"); foreach (var operateResult in submitOppResult.OperateResult) { sb.AppendLine(operateResult.Message); } throw new KDBusinessException("AutoSubmit-005", sb.ToString()); } } } } } }
/// <summary> /// 保存物料,并显示保存结果 /// </summary> /// <param name="billView"></param> /// <returns></returns> private void SaveMaterial(IBillView billView, OperateOption saveOption) { // 设置FormId Form form = billView.BillBusinessInfo.GetForm(); if (form.FormIdDynamicProperty != null) { form.FormIdDynamicProperty.SetValue(billView.Model.DataObject, form.Id); } // 调用保存操作 IOperationResult saveResult = BusinessDataServiceHelper.Save( this.Context, billView.BillBusinessInfo, billView.Model.DataObject, saveOption, "Save"); // 显示处理结果 if (saveResult == null) { this.View.ShowErrMessage("未知原因导致保存物料失败!"); return; } else if (saveResult.IsSuccess == true) {// 保存成功,直接显示 this.View.ShowOperateResult(saveResult.OperateResult); return; } else if (saveResult.InteractionContext != null && saveResult.InteractionContext.Option.GetInteractionFlag().Count > 0) {// 保存失败,需要用户确认问题 InteractionUtil.DoInteraction(this.View, saveResult, saveOption, new Action <FormResult, IInteractionResult, OperateOption>(( formResult, opResult, option) => { // 用户确认完毕,重新调用保存处理 this.SaveMaterial(billView, option); })); } // 保存失败,显示错误信息 if (saveResult.IsShowMessage) { saveResult.MergeValidateErrors(); this.View.ShowOperateResult(saveResult.OperateResult); return; } }
/// <summary> /// 判断操作结果是否成功,如果不成功,则直接抛错中断进程 /// </summary> /// <param name="opResult"></param> /// <returns></returns> private bool CheckOpResult(IOperationResult opResult) { bool isSuccess = false; if (opResult.IsSuccess == true) { // 操作成功 isSuccess = true; } else { if (opResult.InteractionContext != null && opResult.InteractionContext.Option.GetInteractionFlag().Count > 0) {// 有交互性提示 // 传出交互提示完整信息对象 this.OperationResult.InteractionContext = opResult.InteractionContext; // 传出本次交互的标识, // 用户在确认继续后,会重新进入操作; // 将以此标识取本交互是否已经确认过,避免重复交互 this.OperationResult.Sponsor = opResult.Sponsor; // 抛出错误,终止本次操作 throw new KDBusinessException("", "本次操作需要用户确认是否继续,暂时中断"); } else { // 操作失败,拼接失败原因,然后抛出中断 opResult.MergeValidateErrors(); if (opResult.OperateResult == null) {// 未知原因导致提交失败 throw new KDBusinessException("", "未知原因导致自动提交、审核失败!"); } else { StringBuilder sb = new StringBuilder(); sb.AppendLine("自动提交、审核失败,失败原因:"); foreach (var operateResult in opResult.OperateResult) { sb.AppendLine(operateResult.Message); } throw new KDBusinessException("", sb.ToString()); } } } return(isSuccess); }