private void SaveCheckBill(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.IsSuccess)
            {
                object[] primaryKeys = saveResult.SuccessDataEnity.Select(u => u.GetPrimaryKeyValue()).ToArray();

                // 提交
                OperateOption    submitOption = OperateOption.Create();
                IOperationResult submitResult = BusinessDataServiceHelper.Submit(this.Context, billView.BillBusinessInfo, primaryKeys, "Submit", submitOption);
                if (submitResult.IsSuccess)
                {
                    // 审核
                    OperateOption    auditOption = OperateOption.Create();
                    IOperationResult auditResult = BusinessDataServiceHelper.Audit(this.Context, billView.BillBusinessInfo, primaryKeys, auditOption);
                }
            }
        }
Beispiel #2
0
 /// <summary>
 /// 构造方法。
 /// </summary>
 /// <param name="rule">单据转换规则。</param>
 /// <param name="dataEntities">数据包。</param>
 /// <param name="argument">生成目标单据参数。</param>
 /// <param name="option">操作额外参数。</param>
 public BeforeUploadTargetDataEventArgs(ConvertRuleElement rule, DynamicObject[] dataEntities, GenTargetArgs argument, OperateOption option)
 {
     this.Rule         = rule;
     this.DataEntities = dataEntities;
     this.Argument     = argument;
     this.Option       = option;
 }
Beispiel #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="option">选项对象。</param>
        /// <returns>返回操作编码。</returns>
        public static string GetCutoffOperation(this OperateOption option)
        {
            string number = string.Empty;

            option.TryGetVariableValue(UploadOption.Instance.CutoffOperation(), out number);
            return(number);
        }
        /// <summary>
        /// 获取是否在事务外执行的逻辑值。
        /// </summary>
        /// <param name="option">选项对象。</param>
        /// <returns>返回逻辑值。</returns>
        public static bool GetOutOfTransaction(this OperateOption option)
        {
            bool logic = default(bool);

            option.TryGetVariableValue(UploadOption.Instance.OutOfTransaction(), out logic);
            return(logic);
        }
Beispiel #6
0
        /// <summary>
        /// 配方单转库存检验单
        /// </summary>
        /// <param name="ctx">上下文</param>
        /// <param name="FID">源单ID</param>
        /// <param name="FPKID">源单单据体ID</param>
        /// <param name="row">单据体行号</param>
        public IOperationResult ConvertRule(Context ctx, int FID, int FPKID, int row)
        {
            List <ListSelectedRow> ListSalReSelect = new List <ListSelectedRow>();
            ListSelectedRow        convertItem     = new ListSelectedRow(
                Convert.ToString(FID),
                Convert.ToString(FPKID),
                Convert.ToInt32(row),
                "PRD_PPBOM");

            ListSalReSelect.Add(convertItem);
            if (ListSalReSelect.Count <= 0)
            {
                return(null);
            }
            BillConvertOption convertOption = new BillConvertOption();

            convertOption.sourceFormId   = "PRD_PPBOM";
            convertOption.targetFormId   = "QM_STKAPPInspect";
            convertOption.ConvertRuleKey = "UseFormToSTKAPPInspect";
            convertOption.Option         = OperateOption.Create();
            convertOption.BizSelectRows  = ListSalReSelect.ToArray();
            convertOption.IsDraft        = true;
            convertOption.IsSave         = false;
            return(AppServiceContext.ConvertBills(ctx, convertOption));
        }
Beispiel #7
0
        /// <summary>
        /// 生成应付单
        /// </summary>
        /// <param name="ctx"></param>
        /// <param name="souObj"></param>
        /// <returns></returns>
        private static IOperationResult ToTransferSalseBill(Context ctx, DynamicObject souObj,string billtype)
        {
            IOperationResult convertResult = new OperationResult();
            DynamicObjectCollection dyCollection = souObj["PUR_ReceiveEntry"] as DynamicObjectCollection;

          

            List<ListSelectedRow> ListSalReSelect = new List<ListSelectedRow>();
            dyCollection.ToList().ForEach(entiyItem =>
            {
                ListSelectedRow convertItem = new ListSelectedRow(
                       Convert.ToString(souObj["Id"]),
                       Convert.ToString(entiyItem["Id"]),
                       Convert.ToInt32(entiyItem["Seq"]),
                       "PUR_ReceiveBill");
                ListSalReSelect.Add(convertItem); 
            });

            if (ListSalReSelect.Count <= 0)
            {
                return convertResult;
            }
            BillConvertOption convertOption = new BillConvertOption();
            convertOption.sourceFormId = "PUR_ReceiveBill";
            convertOption.targetFormId = "AP_Payable";
            convertOption.ConvertRuleKey = "AP_ReceiveToPayableMap";
            convertOption.Option = OperateOption.Create();
            convertOption.Option.SetIgnoreWarning(false);
            convertOption.BizSelectRows = ListSalReSelect.ToArray();
            convertOption.IsDraft = false;
            convertOption.IsSave = true;
            convertOption.IsAudit = true;
            convertResult = ConvertBills(ctx, convertOption,billtype);
            return convertResult;
        }
        /// <summary>
        /// 提交
        /// </summary>
        /// <param name="ctx"></param>
        /// <param name="FormID"></param>
        /// <param name="ids"></param>
        /// <returns></returns>
        public IOperationResult SubmitBill(Context ctx, string FormID, object[] ids)
        {
            IMetaDataService metaService  = ServiceHelper.GetService <IMetaDataService>(); //元数据服务
            FormMetadata     Meta         = metaService.Load(ctx, FormID) as FormMetadata; //获取元数据
            OperateOption    submitOption = OperateOption.Create();
            IOperationResult submitResult = BusinessDataServiceHelper.Submit(ctx, Meta.BusinessInfo, ids, "Submit", submitOption);

            return(submitResult);

            //IMetaDataService metaService = ServiceHelper.GetService<IMetaDataService>();
            //FormMetadata targetBillMeta = metaService.Load(ctx, FormID) as FormMetadata;
            //// 构建保存操作参数:设置操作选项值,忽略交互提示
            //OperateOption submitOption = OperateOption.Create();
            //// 忽略全部需要交互性质的提示,直接保存;
            ////saveOption.SetIgnoreWarning(true);              // 忽略交互提示
            ////saveOption.SetInteractionFlag(this.Option.GetInteractionFlag());        // 如果有交互,传入用户选择的交互结果
            //// using Kingdee.BOS.Core.Interaction;
            ////saveOption.SetIgnoreInteractionFlag(this.Option.GetIgnoreInteractionFlag());
            ////// 如下代码,强制要求忽略交互提示(演示案例不需要,注释掉)
            //submitOption.SetIgnoreWarning(true);
            ////// using Kingdee.BOS.Core.Interaction;
            //submitOption.SetIgnoreInteractionFlag(true);
            //// 调用保存服务,自动保存
            //ISubmitService submitService = ServiceHelper.GetService<ISubmitService>();
            //IOperationResult submitResult = submitService.Submit(ctx, targetBillMeta.BusinessInfo, ids, "Submit", submitOption);
            //return submitResult;
        }
        /// <summary>
        /// 读取第三方物料信息,存入K/3 Cloud物料
        /// </summary>
        private void ImportMaterial()
        {
            // 构建一个IBillView实例,通过此实例,可以方便的填写物料各属性
            IBillView billView = this.CreateMaterialView();

            // 新建一个空白物料
            // billView.CreateNewModelData();
            ((IBillViewService)billView).LoadData();


            // 触发插件的OnLoad事件:
            // 组织控制基类插件,在OnLoad事件中,对主业务组织改变是否提示选项进行初始化。
            // 如果不触发OnLoad事件,会导致主业务组织赋值不成功
            DynamicFormViewPlugInProxy eventProxy = billView.GetService <DynamicFormViewPlugInProxy>();

            eventProxy.FireOnLoad();


            // 记载指定的单据进行修改
            // this.ModifyBill(billView, "100001"); // 本代码演示新建物料,把调用修改的代码,注释掉

            // 填写物料各属性
            this.FillMaterialPropertys(billView);
            // 保存物料
            OperateOption saveOption = OperateOption.Create();

            this.SaveMaterial(billView, saveOption);
        }
Beispiel #10
0
        /// <summary>
        /// 操作执行后逻辑处理
        /// </summary>
        /// <param name="e"></param>
        public override void EndOperationTransaction(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.EndOperationTransactionArgs e)
        {
            var         billGroups   = e.DataEntitys.GroupBy(o => Convert.ToString(o["BillTypeId_Id"]));
            List <long> lstNewMtrlId = new List <long>();
            List <long> lstNewBomId  = new List <long>();

            foreach (var billGroup in billGroups)
            {
                var billTypeParaObj = AppServiceContext.GetService <ISysProfileService>().LoadBillTypeParameter(this.Context, this.BusinessInfo.GetForm().Id, billGroup.Key);
                if (billTypeParaObj == null)
                {
                    continue;
                }

                bool bSupportNoMtrlQuote = Convert.ToBoolean(billTypeParaObj["F_JN_NoMtrlIdQuotation"]);

                if (bSupportNoMtrlQuote)
                {
                    ExtendedDataEntitySet dataEntitySet = new ExtendedDataEntitySet();
                    dataEntitySet.Parse(billGroup.ToArray(), this.BusinessInfo);

                    var quoteEntryRows = dataEntitySet.FindByEntityKey("FQUOTATIONENTRY")
                                         .Where(o => !o["F_JN_ProductName"].IsEmptyPrimaryKey())
                                         .ToArray();
                    if (quoteEntryRows.Any() == false)
                    {
                        continue;
                    }

                    lstNewMtrlId.AddRange(quoteEntryRows.Select(o => (long)o["MaterialId_Id"])
                                          .Distinct()
                                          .Where(o => o > 0));
                    lstNewBomId.AddRange(quoteEntryRows.Select(o => (long)o["BomId_Id"])
                                         .Distinct()
                                         .Where(o => o > 0));
                }
            }

            //反禁用关联的物料及物料清单
            OperateOption mtrlOption = OperateOption.Create();

            mtrlOption.SetVariableValue("IsList", true);
            FormMetadata mtrlMetadata = AppServiceContext.MetadataService.Load(this.Context, "BD_MATERIAL") as FormMetadata;
            var          mtrlOpRet    = AppServiceContext.SetStatusService.SetBillStatus(this.Context, mtrlMetadata.BusinessInfo,
                                                                                         lstNewMtrlId.Select(o => new KeyValuePair <object, object>(o, null)).ToList(),
                                                                                         null, "Enable", mtrlOption);

            this.OperationResult.MergeResult(mtrlOpRet);

            OperateOption bomOption = OperateOption.Create();

            bomOption.SetVariableValue("IsList", true);
            FormMetadata bomMetadata = AppServiceContext.MetadataService.Load(this.Context, "ENG_BOM") as FormMetadata;
            var          bomOpRet    = AppServiceContext.SetStatusService.SetBillStatus(this.Context, bomMetadata.BusinessInfo,
                                                                                        lstNewBomId.Select(o => new KeyValuePair <object, object>(o, null)).ToList(),
                                                                                        null, "Enable", bomOption);

            this.OperationResult.MergeResult(bomOpRet);
        }
        /// <summary>
        /// 禁用单据
        /// </summary>
        /// <param name="ctx"></param>
        /// <param name="FormID">单据标识</param>
        /// <param name="ids">禁用单据内码集合</param>
        /// <param name="pkId">表主键列</param>
        /// <param name="tableName">表名</param>
        /// <param name="fieldName">禁用状态列</param>
        /// <param name="fieldValue">禁用值</param>
        /// <returns></returns>
        public void SetState(Context ctx, string FormID, object[] ids, string pkId, string tableName, string fieldName, string fieldValue)
        {
            IMetaDataService metaService = ServiceHelper.GetService <IMetaDataService>(); //元数据服务
            FormMetadata     Meta        = metaService.Load(ctx, FormID) as FormMetadata; //获取元数据
            OperateOption    AuditOption = OperateOption.Create();

            BusinessDataServiceHelper.SetState(ctx, tableName, fieldName, fieldValue, pkId, ids);
        }
Beispiel #12
0
        //数据同步
        public void dataSync(DynamicObject obj)
        {
            IBillView billView = this.CreateBillView(this.Context);

            ((IBillViewService)billView).LoadData();
            DynamicFormViewPlugInProxy eventProxy = billView.GetService <DynamicFormViewPlugInProxy>();

            eventProxy.FireOnLoad();
            this.FillBillPropertys(this.Context, billView, obj);
            IOperationResult saveResult = null;

            object[]         primaryKeys = null;
            IOperationResult auditResult = null;

            if (this.FormOperation.Operation.Equals("Save"))//保存
            {
                if (isExsit(Convert.ToInt64(obj["Id"])))
                {
                    updateAssistData(Convert.ToInt64(obj["Id"]), Convert.ToString(obj["Number"]), Convert.ToString(obj["Name"]));  //存在则修改
                }
                else  //不存则新增
                      // 调用保存操作
                {
                    OperateOption saveOption = OperateOption.Create();
                    // 调用保存操作
                    saveResult = BusinessDataServiceHelper.Save(this.Context, billView.BillBusinessInfo, billView.Model.DataObject, saveOption, "Save");
                }
            }
            else if (this.FormOperation.Operation.Equals("Submit"))//提交
            {
                updateAssistDataStatus(Convert.ToInt64(obj["Id"]), "B");
            }
            else if (this.FormOperation.Operation.Equals("Audit"))//审核
            {
                updateAssistDataStatus(Convert.ToInt64(obj["Id"]), "C");
            }
            else if (this.FormOperation.Operation.Equals("UnAudit"))          //反审核
            {
                if (getExsitOldData(Convert.ToString(obj["Number"])) != null) //判断辅助资料表是否有对应的老数据
                {
                    DynamicObject oo = getExsitOldData(Convert.ToString(obj["Number"]));
                    updateAssistDataOld(Convert.ToString(oo["fentryid"]), Convert.ToString(obj["Number"]));//如果存在则把外键编码字段关联上
                }
                updateAssistDataStatus(Convert.ToInt64(obj["Id"]), "D");
            }
            else if (this.FormOperation.Operation.Equals("Forbid"))//禁用
            {
                updateAssistForbidStatus(Convert.ToInt64(obj["Id"]), "B");
            }
            else if (this.FormOperation.Operation.Equals("Enable"))//反禁用
            {
                updateAssistForbidStatus(Convert.ToInt64(obj["Id"]), "A");
            }
            else if (this.FormOperation.Operation.Equals("Delete"))//删除
            {
                deleteData(Convert.ToInt64(obj["Id"]));
            }
        }
        public IOperationResult AuditBill(Context ctx, string FormID, object[] ids)
        {
            IMetaDataService metaService = ServiceHelper.GetService <IMetaDataService>(); //元数据服务
            FormMetadata     Meta        = metaService.Load(ctx, FormID) as FormMetadata; //获取元数据
            OperateOption    AuditOption = OperateOption.Create();
            IOperationResult AuditResult = BusinessDataServiceHelper.Audit(ctx, Meta.BusinessInfo, ids, AuditOption);

            return(AuditResult);
        }
        }//end static method

        public static void MergeFromOption(this IOperationResult result, OperateOption option)
        {
            var inner = option.GetVariableValue <IOperationResult>(BOSConst.CST_KEY_OperationResultKey);

            if (inner != null)
            {
                result.MergeResult(inner);
            }
        }//end static method
        /// <summary>
        /// 暂存单据
        /// </summary>
        /// <param name="ctx"></param>
        /// <param name="FormID"></param>
        /// <param name="dyObject"></param>
        /// <returns></returns>
        public IOperationResult DraftBill(Context ctx, string FormID, DynamicObject[] dyObject)
        {
            IMetaDataService metaService = ServiceHelper.GetService <IMetaDataService>(); //元数据服务
            FormMetadata     Meta        = metaService.Load(ctx, FormID) as FormMetadata; //获取元数据
            OperateOption    DraftOption = OperateOption.Create();
            IOperationResult DraftResult = BusinessDataServiceHelper.Draft(ctx, Meta.BusinessInfo, dyObject, DraftOption, "Draft");

            return(DraftResult);
        }
        /// <summary>
        /// 另一种保存服务
        /// </summary>
        /// <param name="ctx"></param>
        /// <param name="FormID"></param>
        /// <param name="dyObject"></param>
        /// <returns></returns>
        public IOperationResult BatchSaveBill(Context ctx, string FormID, DynamicObject[] dyObject)
        {
            IMetaDataService metaService = ServiceHelper.GetService <IMetaDataService>(); //元数据服务
            FormMetadata     Meta        = metaService.Load(ctx, FormID) as FormMetadata; //获取元数据
            OperateOption    SaveOption  = OperateOption.Create();
            IOperationResult SaveResult  = BusinessDataServiceHelper.Save(ctx, Meta.BusinessInfo, dyObject, SaveOption, "Save");

            return(SaveResult);
        }
        /// <summary>
        /// 获取失败时抛出异常的逻辑值。
        /// </summary>
        /// <param name="option">选项对象。</param>
        /// <returns>返回逻辑值。</returns>
        public static bool GetThrowWhenUnSuccess(this OperateOption option)
        {
            bool logic = default(bool);

            if (!option.TryGetVariableValue(UploadOption.Instance.ThrowWhenUnSuccess(), out logic))
            {
                logic = true;
            }
            return(logic);
        }
Beispiel #18
0
        private void SaveBillInfo()
        {
            IBillView billView = this.CreateBillView();

            ((IBillViewService)billView).LoadData();
            this.FillFormPropertys(billView);
            OperateOption saveOption = OperateOption.Create();

            this.SaveFormData(billView, saveOption);
        }
        /// <summary>
        /// 加载引用属性
        /// </summary>
        /// <param name="ctx"></param>
        /// <param name="dt"></param>
        /// <param name="pkValue"></param>
        /// <returns></returns>
        private DynamicObject LoadReferenceData(Context ctx, DynamicObjectType dt, object pkValue)
        {
            if (pkValue.IsEmptyPrimaryKey())
            {
                return(null);
            }
            OperateOption option = OperateOption.Create();

            option.SetThrowExceptionWhenNotFind(false);
            return(Kingdee.BOS.ServiceHelper.BusinessDataServiceHelper.LoadSingle(ctx, pkValue, dt, option));
        }
        // 物料动态换算新增单据
        private void createNewConvertBill(String lotNo, long materialId, String unit, double rate)
        {
            IBillView billView = this.CreateBillView();

            ((IBillViewService)billView).LoadData();
            DynamicFormViewPlugInProxy eventProxy = billView.GetService <DynamicFormViewPlugInProxy>();

            eventProxy.FireOnLoad();
            this.FillBillPropertys(billView, lotNo, materialId, unit, rate);
            OperateOption saveOption = OperateOption.Create();

            this.SaveCheckBill(billView, saveOption);
        }
Beispiel #21
0
        }//end method

        public static IOperationResult DoNothing(this IEnumerable <DynamicObject> dataObject, Context ctx, BusinessInfo businessInfo, string operationNumber, OperateOption option = null)
        {
            if (option == null)
            {
                option = OperateOption.Create();
            }
            option.SetIgnoreWarning(true);
            option.SetIgnoreInteractionFlag(true);

            IOperationResult result = BusinessDataServiceHelper.DoNothingWithDataEntity(ctx, businessInfo, dataObject.ToArray(), operationNumber, option);

            return(result);
        } //end method
Beispiel #22
0
        }//end method

        public static IOperationResult Submit(this IEnumerable <DynamicObject> dataObject, Context ctx, BusinessInfo businessInfo, OperateOption option = null, Func <DynamicObject, object> selector = null)
        {
            if (option == null)
            {
                option = OperateOption.Create();
            }
            option.SetIgnoreWarning(true);
            option.SetIgnoreInteractionFlag(true);

            object[] pkIds = selector != null?dataObject.Select(selector).ToArray() : dataObject.Select(data => data.PkId()).ToArray();

            IOperationResult result = BusinessDataServiceHelper.Submit(ctx, businessInfo, pkIds, "Submit", option);

            return(result);
        }//end method
        /// <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="ctx"></param>
        /// <param name="FormID"></param>
        /// <param name="ids"></param>
        /// <returns></returns>
        public IOperationResult SubmitWorkFlowBill(Context ctx, string FormID, string billId)
        {
            IMetaDataService metaService = ServiceHelper.GetService <IMetaDataService>(); //元数据服务
            FormMetadata     Meta        = metaService.Load(ctx, FormID) as FormMetadata; //获取元数据
            // 首先判断单据是否已经有未完成的工作流
            IProcInstService procInstService = Kingdee.BOS.Workflow.Contracts.ServiceFactory.GetProcInstService(ctx);
            bool             isExist         = procInstService.CheckUnCompletePrcInstExsit(ctx, FormID, billId);

            if (isExist)
            {
                throw new KDBusinessException("AutoSubmit-001", "该单据已经启动了流程,不允许重复提交!");
            }
            // 读取单据的工作流配置模板
            IWorkflowTemplateService wfTemplateService  = Kingdee.BOS.Workflow.Contracts.ServiceFactory.GetWorkflowTemplateService(ctx);
            List <FindPrcResult>     findProcResultList = wfTemplateService.GetPrcListByFormID(
                FormID, new string[] { billId }, ctx);

            if (findProcResultList == null || findProcResultList.Count == 0)
            {
                throw new KDBusinessException("AutoSubmit-002", "查找单据适用的流程模板失败,不允许提交工作流!");
            }

            // 设置提交参数:忽略操作过程中的警告,避免与用户交互
            OperateOption submitOption = OperateOption.Create();

            submitOption.SetIgnoreWarning(true);
            IOperationResult submitResult = null;

            FindPrcResult findProcResult = findProcResultList[0];

            if (findProcResult.Result == TemplateResultType.Error)
            {
                throw new KDBusinessException("AutoSubmit-003", "单据不符合流程启动条件,不允许提交工作流!");
            }
            else if (findProcResult.Result != TemplateResultType.Normal)
            {    // 本单无适用的流程图,直接走传统审批
                ISubmitService submitService = ServiceHelper.GetService <ISubmitService>();
                submitResult = submitService.Submit(ctx, Meta.BusinessInfo,
                                                    new object[] { billId }, "Submit", submitOption);
            }
            else
            {    // 走工作流
                IBOSWorkflowService wfService = Kingdee.BOS.Workflow.Contracts.ServiceFactory.GetBOSWorkflowService(ctx);
                submitResult = wfService.ListSubmit(ctx, Meta.BusinessInfo,
                                                    0, new object[] { billId }, findProcResultList, submitOption);
            }
            return(submitResult);
        }
Beispiel #25
0
        }//end method

        public static IOperationResult Forbid(this IEnumerable <DynamicObject> dataObject, Context ctx, BusinessInfo businessInfo, OperateOption option = null, Func <DynamicObject, object> selector = null)
        {
            if (option == null)
            {
                option = OperateOption.Create();
            }
            option.SetIgnoreWarning(true);
            option.SetIgnoreInteractionFlag(true);

            var pkIds = dataObject.Select(data => new KeyValuePair <object, object>(selector != null ? selector(data) : data.PkId(), ""))
                        .ToList();

            IOperationResult result = BusinessDataServiceHelper.SetBillStatus(ctx, businessInfo, pkIds, null, OperationNumberConst.OperationNumber_Forbid, option);

            return(result);
        }//end method
Beispiel #26
0
        /// <summary>
        /// 判断操作结果是否成功,如果不成功,则直接抛错中断进程
        /// </summary>
        /// <param name="opResult">操作结果</param>
        /// <param name="opOption">操作参数</param>
        /// <returns></returns>
        private bool CheckOpResult(IOperationResult opResult, OperateOption opOption)
        {
            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;
                    // 抛出交互错误,把交互信息传递给前端
                    new KDInteractionException(opOption, opResult.Sponsor);
                }
                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);
        }
Beispiel #27
0
 /// <summary>
 /// 创建文件夹
 /// </summary>
 /// <param name="DirFullPath">文件夹全路径.</param>
 /// <param name="DirOperateOption">操作方式</param>
 /// <returns></returns>
 public static bool CreateDir(string DirFullPath, OperateOption DirOperateOption)
 {
     try
     {
         if (Directory.Exists(DirFullPath))
         {
             Directory.CreateDirectory(DirFullPath);
         }
         else if (DirOperateOption == OperateOption.ExistDelete)
         {
             Directory.Delete(DirFullPath, true);
         }
         return(true);
     }
     catch
     {
         return(false);
     }
 }
 /// <summary>
 /// 创建文件夹
 /// </summary>
 /// <param name="dirFullPath">文件夹路径</param>
 /// <param name="dirOperateOption">文件夹操作选项</param>
 /// <returns>True/False</returns>
 public bool CreateDirOperate(string dirFullPath, OperateOption dirOperateOption)
 {
     try
     {
         if (!Directory.Exists(dirFullPath))
         {
             Directory.CreateDirectory(dirFullPath);
         }
         else if (dirOperateOption == OperateOption.ExistDelete)
         {
             Directory.Delete(dirFullPath, true);
             Directory.CreateDirectory(dirFullPath);
         }
         return true;
     }
     catch
     {
         return false;
     }
 }
        public override void OnAfterCreateLink(CreateLinkEventArgs e)
        {
            base.OnAfterCreateLink(e);
            OperateOption  Option = base.Option;
            List <decimal> amount = new List <decimal>();

            if (Option.TryGetVariableValue <List <decimal> >("OutStockAmount", out amount))
            {
                List <int> srcbillseq = Option.GetVariableValue <List <int> >("srcbillseq");
                DateTime   FDATE      = Option.GetVariableValue <DateTime>("FDATE");
                (e.TargetExtendedDataEntities.FindByEntityKey("FBillHead"))[0].DataEntity["Date"] = FDATE;
                for (int i = 0; i < e.TargetExtendedDataEntities.FindByEntityKey("FEntity").Count(); i++)
                {
                    (e.TargetExtendedDataEntities.FindByEntityKey("FEntity"))[i].DataEntity["SALBASEQTY"]   = amount[i];
                    (e.TargetExtendedDataEntities.FindByEntityKey("FEntity"))[i].DataEntity["BaseUnitQty"]  = amount[i];
                    (e.TargetExtendedDataEntities.FindByEntityKey("FEntity"))[i].DataEntity["PRICEBASEQTY"] = amount[i];
                    (e.TargetExtendedDataEntities.FindByEntityKey("FEntity"))[i].DataEntity["Fsrcbillseq"]  = srcbillseq[i];
                }
            }
        }
Beispiel #30
0
        /// <summary>
        /// 创建CRM联系人
        /// </summary>
        /// <param name="CRMLinkIds">线索id</param>
        private void CreateCRMLink(List <long> CRMLinkIds)
        {
            //下推CRM联系人CRM_CUST_Contact
            ConvertOperationResult operationContactResult = CRMServiceHelper.ConvertBills(base.Context, this.BusinessInfo.GetForm().Id, "CRM_CUST_Contact", CRMLinkIds);

            //获取下推生成的下游单据数据包
            DynamicObject[] targetContactBillObjs = (from p in operationContactResult.TargetDataEntities select p.DataEntity).ToArray();
            if (targetContactBillObjs.Length == 0)
            {
                // 未下推成功目标单,抛出错误,中断审核
                throw new KDBusinessException("", string.Format("由{0}自动下推{1},没有成功生成数据包,自动下推失败!", this.BusinessInfo.GetForm().Id, "CRM_CUST_Contact"));
            }
            // 对下游单据数据包,进行适当的修订,以避免关键字段为空,自动保存失败
            // 示例代码略
            //var saveResult = CRMServiceHelper.Save(base.Context, "CRM_OPP_Opportunity", targetBillObjs);
            var saveContactResult = CRMServiceHelper.Save(base.Context, "CRM_CUST_Contact", targetContactBillObjs);

            // 判断自动保存结果:只有操作成功,才会继续
            if (this.CheckOpResult(saveContactResult, OperateOption.Create()))
            {
                object[] ids = (from c in saveContactResult.SuccessDataEnity
                                select c[0]).ToArray();//保存成功的结果
                if (ids.Count() > 0)
                {
                    IOperationResult submitContactResult = CRMServiceHelper.Submit(base.Context, "CRM_CUST_Contact", ids);
                    if (this.CheckOpResult(submitContactResult, OperateOption.Create()))
                    {
                        object[] ips = (from c in submitContactResult.SuccessDataEnity
                                        select c[0]).ToArray();//提交成功的结果
                        if (ips.Count() > 0)
                        {
                            IOperationResult auditContactResult = CRMServiceHelper.Audit(base.Context, "CRM_CUST_Contact", ips);
                            if (this.CheckOpResult(auditContactResult, OperateOption.Create()))
                            {
                            }
                        }
                    }
                }
            }
        }
        /// <summary>
        /// 保存
        /// </summary>
        /// <param name="ctx"></param>
        /// <param name="FormID">业务对象标识</param>
        /// <param name="dyObject">保存业务对象集合</param>
        /// <returns></returns>
        public IOperationResult SaveBill(Context ctx, string FormID, DynamicObject[] dyObject)
        {
            IMetaDataService metaService    = ServiceHelper.GetService <IMetaDataService>();
            FormMetadata     targetBillMeta = metaService.Load(ctx, FormID) as FormMetadata;
            // 构建保存操作参数:设置操作选项值,忽略交互提示
            OperateOption saveOption = OperateOption.Create();

            // 忽略全部需要交互性质的提示,直接保存;
            //saveOption.SetIgnoreWarning(true);              // 忽略交互提示
            //saveOption.SetInteractionFlag(this.Option.GetInteractionFlag());        // 如果有交互,传入用户选择的交互结果
            // using Kingdee.BOS.Core.Interaction;
            //saveOption.SetIgnoreInteractionFlag(this.Option.GetIgnoreInteractionFlag());
            //// 如下代码,强制要求忽略交互提示(演示案例不需要,注释掉)
            saveOption.SetIgnoreWarning(true);
            //// using Kingdee.BOS.Core.Interaction;
            saveOption.SetIgnoreInteractionFlag(true);
            // 调用保存服务,自动保存
            ISaveService     saveService  = ServiceHelper.GetService <ISaveService>();
            IOperationResult saveResult   = saveService.Save(ctx, targetBillMeta.BusinessInfo, dyObject, saveOption, "Save");
            ISubmitService   save1Service = ServiceHelper.GetService <ISubmitService>();


            return(saveResult);
        }
Beispiel #32
0
 /// <summary>
 /// 创建文件夹
 /// </summary>
 /// <param name="DirFullPath">要创建的文件夹全路径</param>
 /// <param name="Option">创建文件夹时的操作选项</param>
 /// <returns>bool 是否创建成功</returns>
 public static bool CreateDir(string DirFullPath, OperateOption Option)
 {
     try
     {
         if (Directory.Exists(DirFullPath) == false) //判断文件夹是否存在
         {
             Directory.CreateDirectory(DirFullPath);
         }
         else if (Option == OperateOption.ExistDelete) //如果存在且选项为“存在删除”
         {
             Directory.Delete(DirFullPath); //删除目录,并删除此目录下的所以子目录
             Directory.CreateDirectory(DirFullPath); //创建目录
         }
         return true;
     }
     catch
     {
         return false;
     }
 }
Beispiel #33
0
 /// <summary>
 /// 创建文件夹
 /// </summary>
 /// <param name="DirFullPath">文件夹全路径.</param>
 /// <param name="DirOperateOption">操作方式</param>
 /// <returns></returns>
 public static bool CreateDir(string DirFullPath, OperateOption DirOperateOption)
 {
     try
     {
         if (Directory.Exists(DirFullPath))
         {
             Directory.CreateDirectory(DirFullPath);
         }
         else if (DirOperateOption == OperateOption.ExistDelete)
         {
             Directory.Delete(DirFullPath, true);
         }
         return true;
     }
     catch
     {
         return false;
     }
 }