}//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);
        }
Esempio n. 3
0
        /// <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;
            }
        }
Esempio n. 5
0
        /// <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);
        }