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); } } }
/// <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; }
/// <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); }
/// <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)); }
/// <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); }
/// <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); }
//数据同步 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); }
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); }
}//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
}//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); }
}//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
/// <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); }
/// <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]; } } }
/// <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); }
/// <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; } }
/// <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; } }