/// <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; }
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="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> /// 读取第三方物料信息,存入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="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="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"])); } }
/// <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); }
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); }
/// <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); }
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)); }
}//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
// 物料动态换算新增单据 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 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="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> /// 创建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="e"></param> public override void EndOperationTransaction(EndOperationTransactionArgs e) { // 取到需要自动提交、审核的单据内码 object[] pkArray = (from p in e.DataEntitys select p[0]).ToArray(); // 设置提交参数 // using Kingdee.BOS.Orm; OperateOption submitOption = OperateOption.Create(); submitOption.SetIgnoreWarning(this.Option.GetIgnoreWarning()); submitOption.SetInteractionFlag(this.Option.GetInteractionFlag()); submitOption.SetIgnoreInteractionFlag(this.Option.GetIgnoreInteractionFlag()); // 创建提交服务:using Kingdee.BOS.Contracts; using Kingdee.BOS.App; ISubmitService submitService = ServiceHelper.GetService <ISubmitService>(); IOperationResult submitResult = submitService.Submit( this.Context, this.BusinessInfo, pkArray, "Submit", submitOption); // 判断提交结果,如果失败,则内部会抛出错误,回滚代码 if (CheckOpResult(submitResult) == false) { return; } // 构建操作可选参数对象 OperateOption auditOption = OperateOption.Create(); auditOption.SetIgnoreWarning(this.Option.GetIgnoreWarning()); auditOption.SetInteractionFlag(this.Option.GetInteractionFlag()); auditOption.SetIgnoreInteractionFlag(this.Option.GetIgnoreInteractionFlag()); // 构建单据主键参数 List <KeyValuePair <object, object> > pkEntityIds = new List <KeyValuePair <object, object> >(); foreach (var pkValue in pkArray) { pkEntityIds.Add(new KeyValuePair <object, object>(pkValue, "")); } List <object> paras = new List <object>(); paras.Add("1"); paras.Add(""); // 调用审核操作 ISetStatusService setStatusService = ServiceHelper.GetService <ISetStatusService>(); // 如下调用方式,需显示交互信息 IOperationResult auditResult = setStatusService.SetBillStatus(this.Context, this.BusinessInfo, pkEntityIds, paras, "Audit", auditOption); // 判断审核结果,如果失败,则内部会抛出错误,回滚代码 if (CheckOpResult(auditResult) == false) { return; } }
public void AutomationInvalid(Context ctx) { DateTime Date = new DateTime(); Date = DateTime.Now; string sql = string.Format(@"select * from T_SAL_QUOTATION t1 inner join T_SAL_QUOTATIONENTRY t2 on t1.FID=t2.FID where datediff(day,FMODIFYDATE,'{0}')>=10 and FDOCUMENTSTATUS <>'C'", Date); //未审核超过十天的数据 DynamicObjectCollection obj = DBUtils.ExecuteDynamicObject(ctx, sql, null, null, CommandType.Text, null); if (obj.Count <= 0) { return; } List <int> list = new List <int>(); int id = 0; foreach (DynamicObject item in obj) { //单据类型为定价单 if (Convert.ToString(item["FBILLTYPEID"]) == "dde3ab8a6b714e9fa7039d065a169f92") { continue; } id = Convert.ToInt32(item["fid"]); list.Add(id); } string Sql = string.Format("update T_SAL_QUOTATION set FINVALIDSTATUS='B' where fid in ({0})", string.Join(",", list.ToArray())); DBUtils.Execute(ctx, Sql); FormMetadata metaData = (FormMetadata)AppServiceContext.MetadataService.Load(ctx, "SAL_QUOTATION", true); var Buinfo = metaData.BusinessInfo; var billGroups = obj.GroupBy(o => Convert.ToString(o["FBillTypeId"])); List <int> lstNewMtrlId = new List <int>(); List <int> lstNewBomId = new List <int>(); foreach (var billGroup in billGroups) { var billTypeParaObj = AppServiceContext.GetService <ISysProfileService>().LoadBillTypeParameter(ctx, "SAL_QUOTATION", billGroup.Key); if (billTypeParaObj == null) { continue; } bool bSupportNoMtrlQuote = Convert.ToBoolean(billTypeParaObj["F_JN_NoMtrlIdQuotation"]); if (bSupportNoMtrlQuote) { ExtendedDataEntitySet dataEntitySet = new ExtendedDataEntitySet(); dataEntitySet.Parse(billGroup.ToArray(), Buinfo); var quoteEntryRows = dataEntitySet.FindByEntityKey("FBillHead"); var Entryobj = quoteEntryRows.Where(o => !o["F_JN_ProductName"].IsEmptyPrimaryKey()).ToArray(); if (Entryobj.Any() == false) { continue; } lstNewMtrlId.AddRange(Entryobj.Select(o => (int)o["FMATERIALID"]) .Distinct() .Where(o => o > 0)); lstNewBomId.AddRange(Entryobj.Select(o => (int)o["FBOMID"]) .Distinct() .Where(o => o > 0)); } } //禁用关联的物料及物料清单 if (lstNewMtrlId.Count > 0) { OperateOption mtrlOption = OperateOption.Create(); mtrlOption.SetVariableValue("IsList", true); FormMetadata mtrlMetadata = AppServiceContext.MetadataService.Load(ctx, "BD_MATERIAL") as FormMetadata; var mtrlOpRet = AppServiceContext.SetStatusService.SetBillStatus(ctx, mtrlMetadata.BusinessInfo, lstNewMtrlId.Select(o => new KeyValuePair <object, object>(o, null)).ToList(), null, "Forbid", mtrlOption); } if (lstNewBomId.Count > 0) { OperateOption bomOption = OperateOption.Create(); bomOption.SetVariableValue("IsList", true); FormMetadata bomMetadata = AppServiceContext.MetadataService.Load(ctx, "ENG_BOM") as FormMetadata; var bomOpRet = AppServiceContext.SetStatusService.SetBillStatus(ctx, bomMetadata.BusinessInfo, lstNewBomId.Select(o => new KeyValuePair <object, object>(o, null)).ToList(), null, "Forbid", bomOption); } }
private void SetBillValue(Context context, DynamicObject orgobj, string WhereSql, IBillView view, int erow) { string XQty = Convert.ToString(this.Model.GetValue("F_SZXY_BoxQty"));//获取输入的箱数 if (!WhereSql.IsNullOrEmptyOrWhiteSpace()) { long orgid = Convert.ToInt64(orgobj["Id"]); string SQL = "/*dialect*/select t1.F_SZXY_MATERIAL,t1.F_SZXY_PLY,t1.F_SZXY_WIDTH,t1.F_SZXY,t1.F_SZXY_MANDREL,T5.F_SZXY_Text '客户订单号', " + "t1.F_SZXY_CUSTID,t1.F_SZXY_PUDNO,t1.F_SZXY_CUSTNO,t1.F_SZXY_CUSTBACTH,t1.F_SZXY_PUDLINENO,T1.F_SZXY_CTNNO,t3.F_SZXY_MOID, " + "t1.F_SZXY_SOSEQ1,t1.F_SZXY_SOENTRYID1,sum(t1.F_SZXY_AREA1) Area , " + "sum(t1.F_SZXY_JQTY) BOXCount ,T5.F_SZXY_SALER '销售员',T1.F_SZXY_DATE '包装日期',T5.F_SZXY_XSCUST '客户' " + "from SZXY_t_BZDHEntry t1 " + "join SZXY_t_BZD t3 on t1.FID = t3.FID " + "left join T_PRD_MO T4 on T4.FBILLNO = t1.F_SZXY_PUDNO " + "left join T_PRD_MOENTRY T5 on t5.FSEQ = t1.F_SZXY_PUDLINENO " + $" where {WhereSql} " + " group by t1.F_SZXY_MATERIAL,t1.F_SZXY_PLY,t1.F_SZXY_WIDTH,F_SZXY_CTNNO,t1.F_SZXY, " + " t1.F_SZXY_MANDREL,t1.F_SZXY_CUSTID,t1.F_SZXY_PUDNO,t1.F_SZXY_CUSTNO, " + " t1.F_SZXY_CUSTBACTH,t1.F_SZXY_PUDLINENO,t3.F_SZXY_MOID,t1.F_SZXY_SOSEQ1,t1.F_SZXY_SOENTRYID1 " + ",T5.F_SZXY_SALER ,T5.F_SZXY_SALER ,T5.F_SZXY_TEXT,T1.F_SZXY_DATE,T5.F_SZXY_XSCUST"; //客户订单号获取客户PO号、日期获取包装日期、业务员、客户 Logger.Debug("客户回签单", SQL); DataSet fillData = DBServiceHelper.ExecuteDataSet(this.Context, SQL); DateTime dt = DateTime.Now; if (fillData != null && fillData.Tables.Count > 0 && fillData.Tables[0].Rows.Count > 0) { string value = ""; int mm = 0; for (int i = 0; i < fillData.Tables[0].Rows.Count; i++) { mm = erow + i; this.Model.BatchCreateNewEntryRow("F_SZXY_KHHQDEntity", 1); this.View.UpdateView("F_SZXY_KHHQDEntity"); this.View.GetControl <EntryGrid>("F_SZXY_KHHQDEntity").SetEnterMoveNextColumnCell(true); this.Model.SetValue("F_SZXY_CBNO1", Convert.ToString(this.Model.GetValue("F_SZXY_CBNO")), mm); this.Model.SetValue("F_SZXY_BoxNo", Convert.ToString(fillData.Tables[0].Rows[i]["F_SZXY_CTNNO"]), mm); IViewService viewService = ServiceHelper.GetService <IViewService>(); //物料编码 value = Convert.ToString(fillData.Tables[0].Rows[i][0]); if (!value.IsNullOrEmptyOrWhiteSpace()) { string RMat = Utils.GetRootMatId(value, orgid.ToString(), Context); DynamicObjectCollection entry1 = this.Model.DataObject["SZXY_KHHQDEntry"] as DynamicObjectCollection; DynamicObject F_SZXY_Material = this.Model.GetValue("F_SZXY_Material", mm) as DynamicObject; Utils.SetBaseDataValue(viewService, entry1[mm], (BaseDataField)this.View.BusinessInfo.GetField("F_SZXY_MATERIAL"), Convert.ToInt64(RMat), ref F_SZXY_Material, Context); } this.View.UpdateView("F_SZXY_Material", mm); //客户代码 value = Convert.ToString(fillData.Tables[0].Rows[i]["客户"]); if (!value.IsNullOrEmptyOrWhiteSpace()) { //this.Model.SetValue("F_SZXY_Cust", value, mm); string CustId = Utils.GetRootCustId(value, orgid.ToString(), Context); this.Model.SetValue("F_SZXY_Cust", CustId, mm); this.View.UpdateView("F_SZXY_Cust", mm); } this.Model.SetValue("F_SZXY_Date", Convert.ToString(fillData.Tables[0].Rows[i]["包装日期"]), mm); value = Convert.ToString(fillData.Tables[0].Rows[i]["销售员"]); if (!value.IsNullOrEmptyOrWhiteSpace()) { this.Model.SetValue("F_SZXY_salesman", value, mm); } this.View.UpdateView("F_SZXY_salesman", mm); //客户订单号 value = Convert.ToString(fillData.Tables[0].Rows[i]["客户订单号"]); if (!value.IsNullOrEmptyOrWhiteSpace()) { this.Model.SetValue("F_SZXY_CustOrderNo1", value, mm); } //卷数 value = Convert.ToString(fillData.Tables[0].Rows[i]["BOXCount"]); if (!value.IsNullOrEmptyOrWhiteSpace()) { this.Model.SetValue("F_SZXY_volume", value, mm); } //客户批号 value = Convert.ToString(fillData.Tables[0].Rows[i]["F_SZXY_CUSTBACTH"]); if (!value.IsNullOrEmptyOrWhiteSpace()) { this.Model.SetValue("F_SZXY_CustBacthNo", value, mm); } //生产订单编号 value = Convert.ToString(fillData.Tables[0].Rows[i]["F_SZXY_PUDNO"]); if (!value.IsNullOrEmptyOrWhiteSpace()) { this.Model.SetValue("F_SZXY_MONOE", value, mm); } //生产订单行号 value = Convert.ToString(fillData.Tables[0].Rows[i]["F_SZXY_PUDLINENO"]); if (!value.IsNullOrEmptyOrWhiteSpace()) { this.Model.SetValue("F_SZXY_MOLineNOE", value, mm); } //厚度 value = Convert.ToString(fillData.Tables[0].Rows[i][1]); if (!value.IsNullOrEmptyOrWhiteSpace()) { this.Model.SetValue("F_SZXY_Ply", value, mm); } //宽度 value = Convert.ToString(fillData.Tables[0].Rows[i][2]); if (!value.IsNullOrEmptyOrWhiteSpace()) { this.Model.SetValue("F_SZXY_Width", value, mm); } //长度 value = Convert.ToString(fillData.Tables[0].Rows[i]["F_SZXY"]); if (!value.IsNullOrEmptyOrWhiteSpace()) { this.Model.SetValue("F_SZXY_Len", value, mm); } //面积 value = Convert.ToString(fillData.Tables[0].Rows[i]["Area"]); if (!value.IsNullOrEmptyOrWhiteSpace()) { this.Model.SetValue("F_SZXY_Area", value, mm); } if (mm > 0 && (mm % Convert.ToInt32(XQty)) == 0) { string KBNO = GenNo(Context, this.View.BusinessInfo.GetForm().Id, orgobj, Convert.ToDateTime(this.Model.GetValue("FDate"))); if (!KBNO.IsNullOrEmptyOrWhiteSpace()) { this.Model.SetValue("F_SZXY_CBNO", KBNO); this.Model.SetValue("F_SZXY_CBNO1", KBNO, mm); //单据体卡板号 } } if (erow == 0 && mm == 0) { string KBNO = GenNo(Context, this.View.BusinessInfo.GetForm().Id, orgobj, Convert.ToDateTime(this.Model.GetValue("FDate"))); if (!KBNO.IsNullOrEmptyOrWhiteSpace()) { this.Model.SetValue("F_SZXY_CBNO", KBNO); this.Model.SetValue("F_SZXY_CBNO1", KBNO, erow); } } this.View.SetEntityFocusRow("F_SZXY_KHHQDEntity", mm + 1); } OperateOption saveOption = OperateOption.Create(); view.Model.DataObject["FFormID"] = View.BillBusinessInfo.GetForm().Id; var saveResult = BusinessDataServiceHelper.Save(this.View.Context, View.BusinessInfo, view.Model.DataObject, saveOption, "Save"); this.View.UpdateView("F_SZXY_KHHQDEntity"); } else { this.View.ShowWarnningMessage("没有匹配到数据!"); return; } } }
private void SetBillValue(Context context, DataSet fillData, IBillView view, int erow, DynamicObject orgobj, string NoType) { DateTime dt = DateTime.Now; if (fillData != null && fillData.Tables.Count > 0 && fillData.Tables[0].Rows.Count > 0) { string value = ""; DynamicObjectCollection entry1 = this.Model.DataObject["SZXY_XYCPJYEntry"] as DynamicObjectCollection; for (int i = 0; i < fillData.Tables[0].Rows.Count; i++) { int index = erow + i; //if (!Convert.ToString(fillData.Tables[0].Rows[i]["性能等级"]).IsNullOrEmptyOrWhiteSpace() && Convert.ToInt32(fillData.Tables[0].Rows[i]["性能等级"]) > 0) //{ this.Model.CreateNewEntryRow("F_SZXY_XYCPJYEntity"); this.View.GetControl <EntryGrid>("F_SZXY_XYCPJYEntity").SetEnterMoveNextColumnCell(true); IViewService viewService = ServiceHelper.GetService <IViewService>(); //物料编码 value = Convert.ToString(fillData.Tables[0].Rows[i]["产品型号"]); if (!value.IsNullOrEmptyOrWhiteSpace()) { string RMat = Utils.GetRootMatId(value, orgobj["Id"].ToString(), Context); DynamicObject F_SZXY_Material = this.Model.GetValue("F_SZXY_Material", index) as DynamicObject; if (RMat != "") { Utils.SetBaseDataValue(viewService, entry1[index], (BaseDataField)this.View.BusinessInfo.GetField("F_SZXY_Material"), Convert.ToInt64(RMat), ref F_SZXY_Material, Context); } } if (this.Model.GetValue("F_SZXY_QAINSPECTOH") is DynamicObject opDo) { value = Convert.ToString(opDo["Id"]); if (!value.IsNullOrEmptyOrWhiteSpace()) { this.Model.SetValue("F_SZXY_QAInspecto", value, index); } } this.Model.SetValue("F_SZXY_Date", Convert.ToDateTime(this.Model.GetValue("FDate")), index); entry1[index]["F_SZXY_BarCode"] = Convert.ToString(fillData.Tables[0].Rows[i]["分切编号"]); if (!Convert.ToString(fillData.Tables[0].Rows[i]["分切机"]).IsNullOrEmptyOrWhiteSpace()) { this.Model.SetValue("F_SZXY_MNo", Convert.ToString(fillData.Tables[0].Rows[i]["分切机"]), index); } if (!Convert.ToString(fillData.Tables[0].Rows[i]["流延机"]).IsNullOrEmptyOrWhiteSpace()) { this.Model.SetValue("F_SZXY_LYMac", Convert.ToString(fillData.Tables[0].Rows[i]["流延机"]), index); } if (!Convert.ToString(fillData.Tables[0].Rows[i]["产品编号"]).IsNullOrEmptyOrWhiteSpace()) { this.Model.SetValue("F_SZXY_HNO", Convert.ToString(fillData.Tables[0].Rows[i]["产品编号"]), index); } //班组 value = Convert.ToString(fillData.Tables[0].Rows[i]["班组"]); if (!value.IsNullOrEmptyOrWhiteSpace()) { this.Model.SetValue("F_SZXY_Team", value, index); } value = Convert.ToString(fillData.Tables[0].Rows[i]["班次"]); if (!value.IsNullOrEmptyOrWhiteSpace()) { this.Model.SetValue("F_SZXY_Class", value, index); } //工位 value = Convert.ToString(fillData.Tables[0].Rows[i]["工位"]); if (!value.IsNullOrEmptyOrWhiteSpace()) { this.Model.SetValue("F_SZXY_Station", value, index); } value = Convert.ToString(fillData.Tables[0].Rows[i]["特殊标志"]); if (!value.IsNullOrEmptyOrWhiteSpace()) { this.Model.SetValue("F_SZXY_SpecialMark", value, index); } //性能等级 value = Convert.ToString(fillData.Tables[0].Rows[i]["性能等级"]); if (!value.IsNullOrEmptyOrWhiteSpace()) { this.Model.SetValue("F_SZXY_XNDJ1", value, index); } //厚度 value = Convert.ToString(fillData.Tables[0].Rows[i]["厚度"]); if (!value.IsNullOrEmptyOrWhiteSpace()) { this.Model.SetValue("F_SZXY_Ply", value, index); } //宽度 value = Convert.ToString(fillData.Tables[0].Rows[i]["宽度"]); if (!value.IsNullOrEmptyOrWhiteSpace()) { this.Model.SetValue("F_SZXY_Width", value, index); } //长度 value = Convert.ToString(fillData.Tables[0].Rows[i]["长度"]); if (!value.IsNullOrEmptyOrWhiteSpace()) { this.Model.SetValue("F_SZXY_LENGTH", Convert.ToDecimal(value), index); } //面积 value = Convert.ToString(fillData.Tables[0].Rows[i]["面积"]); if (!value.IsNullOrEmptyOrWhiteSpace()) { this.Model.SetValue("F_SZXY_Area", value, index); } //else //{ // this.View.ShowWarnningMessage("此编号没有性能等级!"); return; //} this.View.UpdateView("F_SZXY_XYCPJYEntity"); this.View.SetEntityFocusRow("F_SZXY_XYCPJYEntity", index + 1); } OperateOption saveOption = OperateOption.Create(); view.Model.DataObject["FFormID"] = View.BillBusinessInfo.GetForm().Id; var saveResult = BusinessDataServiceHelper.Save(this.View.Context, View.BusinessInfo, view.Model.DataObject, saveOption, "Save"); } else { this.View.ShowWarnningMessage("没有匹配到数据!"); return; } }
private string SubmitWorkflow(Context ctx, string formId, string pKValue, string receiverName, string actionResult, string disposition, bool isApprovalFlow) { string reason = ""; DataSet ds = DBUtils.ExecuteDataSet(ctx, @"select b.FASSIGNID,b.FAPPROVALASSIGNID,a.FACTINSTID,a.FRECEIVERNAMES from t_wf_assign a join T_WF_APPROVALASSIGN b on a.fassignid=b.fassignid where b.Fobjecttypeid=@FormID and b.Fkeyvalue=@pKValue and a.FSTATUS=0", new List <SqlParam> { new SqlParam("@FormID", DbType.String, formId), new SqlParam("@pKValue", DbType.String, pKValue) }); DataRow row = ds.Tables[0].Rows.Cast <DataRow>().FirstOrDefault(dr => dr["FRECEIVERNAMES"].ToString().Split(',').Any(r => r == receiverName)); if (row == null) { reason = "未找到待办任务"; return(reason); } string assignId = row["FASSIGNID"].ToString(); string approvalAssignId = row["FAPPROVALASSIGNID"].ToString(); string _approvalItemId = AssignmentServiceHelper.OpenApprovalItem(ctx, ctx.UserId, assignId, false); FormMetadata formMetadata = MetaDataServiceHelper.GetFormMetaData(ctx, formId); DynamicObject ObjData = BusinessDataServiceHelper.LoadSingle(ctx, pKValue, formMetadata.BusinessInfo.GetDynamicObjectType()); BusinessInfo businessInfo = formMetadata.BusinessInfo; var _approvalItem = AssignmentServiceHelper.GetApprovalItemById(ctx, _approvalItemId); if (_approvalItem == null) { reason = "待办任务所在的流程实例不在运行中,不能进行处理!"; return(reason); } _approvalItem.ObjData = ObjData; _approvalItem.ReceiverPostId = 0; _approvalItem.ActionResult = actionResult; _approvalItem.Disposition = disposition.ToString(); AssignResult assignResult = _approvalItem.Actions != null?_approvalItem.Actions.FirstOrDefault(i => i.Id == actionResult) : null; AssignResultApprovalType approvalType = assignResult != null ? assignResult.ApprovalType : AssignResultApprovalType.None; _approvalItem.ActionResultType = approvalType; _approvalItem.Status = ApprovalItemStatus.Completed; DateTime timeNow = TimeServiceHelper.GetSystemDateTime(ctx); _approvalItem.CompletedTime = timeNow; ObjectActivityInstance _activityInstance = AssignmentServiceHelper.ConvertActivityModel( ctx, businessInfo, approvalAssignId, _approvalItem); var option = OperateOption.Create(); if (isApprovalFlow) { ApprovalAssignmentContext assignCtx = new ApprovalAssignmentContext() { ApprovalItems = new List <ApprovalItem>() { _approvalItem }, Info = businessInfo, Option = option }; assignCtx.NextActHandler = null; assignCtx.RejectReturn = false; assignCtx.ActivityInstance = _activityInstance; if (actionResult == AssignResultApprovalType.Reject.ToString()) { var _policy = AssignmentServiceHelper.GetApprovalAssignByAssignId(ctx, assignId); var nextHandleWrapper = new Kingdee.BOS.ApprovalFlow.PlugIns.Mobile.MobNextHandleWrapper(assignId, ctx, _policy); assignCtx.Target = nextHandleWrapper.RejectActivityModel.ActivityId; } ApprovalAssignmentServiceHelper.SubmitApprovalItem(ctx, assignCtx); reason = ""; return(reason); } else { ApprovalAssignmentContext assignCtx = new ApprovalAssignmentContext() { ApprovalItems = new List <ApprovalItem>() { _approvalItem }, Info = businessInfo, Option = option }; assignCtx.NextActHandler = null; assignCtx.RejectReturn = false; assignCtx.ActivityInstance = _activityInstance; ApprovalAssignmentServiceHelper.SubmitApprovalItem(ctx, assignCtx); reason = ""; return(reason); } //if (actionResult == AssignResultApprovalType.Reject.ToString()) //{ // string actInstId = row["FACTINSTID"].ToString(); // Kingdee.BOS.Workflow.App.Core.ProcInstService procInstService = new Kingdee.BOS.Workflow.App.Core.ProcInstService(); // var rejectActivityIds = procInstService.GetBackActInstList(ctx, actInstId, true).Select(r => r.ActivityId); // if (!rejectActivityIds.Any()) // { // reason = "无驳回节点"; // return reason; // } // assignCtx.Target = rejectActivityIds.FirstOrDefault(); //} }
/// <summary> /// 自动下推并保存 /// </summary> /// <param name="sourceFormId">源单FormId</param> /// <param name="targetFormId">目标单FormId</param> /// <param name="sourceBillIds">源单内码</param> private IOperationResult DoPush(string sourceFormId, string targetFormId, long targetOrgId, List <long> sourceBillIds) { IOperationResult result = new OperationResult(); result.IsSuccess = false; // 获取源单与目标单的转换规则 IConvertService convertService = Kingdee.BOS.App.ServiceHelper.GetService <IConvertService>(); var rules = convertService.GetConvertRules(this.Context, sourceFormId, targetFormId); if (rules == null || rules.Count == 0) { throw new KDBusinessException("", string.Format("未找到{0}到{1}之间,启用的转换规则,无法自动下推!", sourceFormId, targetFormId)); } // 取勾选了默认选项的规则 var rule = rules.FirstOrDefault(t => t.IsDefault); //var rule = rules. // 如果无默认规则,则取第一个 if (rule == null) { rule = rules[0]; } // 开始构建下推参数: // 待下推的源单数据行 List <ListSelectedRow> srcSelectedRows = new List <ListSelectedRow>(); foreach (var billId in sourceBillIds) {// 把待下推的源单内码,逐个创建ListSelectedRow对象,添加到集合中 srcSelectedRows.Add(new ListSelectedRow(billId.ToString(), string.Empty, 0, sourceFormId)); // 特别说明:上述代码,是整单下推; // 如果需要指定待下推的单据体行,请参照下句代码,在ListSelectedRow中,指定EntryEntityKey以及EntryId //srcSelectedRows.Add(new ListSelectedRow(billId.ToString(), entityId, 0, sourceFormId) { EntryEntityKey = "FEntity" }); } // 指定目标单单据类型:情况比较复杂,没有合适的案例做参照,示例代码暂略,直接留空,会下推到默认的单据类型 string targetBillTypeId = string.Empty; // 指定目标单据主业务组织:情况更加复杂,需要涉及到业务委托关系,缺少合适案例,示例代码暂略 // 建议在转换规则中,配置好主业务组织字段的映射关系:运行时,由系统根据映射关系,自动从上游单据取主业务组织,避免由插件指定 //long targetOrgId = 0; // 自定义参数字典:把一些自定义参数,传递到转换插件中;转换插件再根据这些参数,进行特定处理 Dictionary <string, object> custParams = new Dictionary <string, object>(); // 组装下推参数对象 PushArgs pushArgs = new PushArgs(rule, srcSelectedRows.ToArray()) { TargetBillTypeId = targetBillTypeId, TargetOrgId = targetOrgId, CustomParams = custParams }; // 调用下推服务,生成下游单据数据包 ConvertOperationResult operationResult = convertService.Push(this.Context, pushArgs, OperateOption.Create()); // 开始处理下推结果: // 获取下推生成的下游单据数据包 DynamicObject[] targetBillObjs = (from p in operationResult.TargetDataEntities select p.DataEntity).ToArray(); if (targetBillObjs.Length == 0) { // 未下推成功目标单,抛出错误,中断审核 throw new KDBusinessException("", string.Format("由{0}自动下推{1},没有成功生成数据包,自动下推失败!", sourceFormId, targetFormId)); } // 对下游单据数据包,进行适当的修订,以避免关键字段为空,自动保存失败 // 示例代码略 // 读取目标单据元数据 IMetaDataService metaService = Kingdee.BOS.App.ServiceHelper.GetService <IMetaDataService>(); var targetBillMeta = metaService.Load(this.Context, targetFormId) as FormMetadata; // 构建保存操作参数:设置操作选项值,忽略交互提示 OperateOption saveOption = OperateOption.Create(); // 忽略全部需要交互性质的提示,直接保存; saveOption.SetIgnoreWarning(true); // 忽略交互提示 saveOption.SetInteractionFlag(this.Option.GetInteractionFlag()); // 如果有交互,传入用户选择的交互结果 // using Kingdee.BOS.Core.Interaction; saveOption.SetIgnoreInteractionFlag(this.Option.GetIgnoreInteractionFlag()); // 调用保存服务,自动保存 ISaveService saveService = Kingdee.BOS.App.ServiceHelper.GetService <ISaveService>(); var saveResult = saveService.Save(this.Context, targetBillMeta.BusinessInfo, targetBillObjs, saveOption, "Save"); // 判断自动保存结果:只有操作成功,才会继续 if (saveResult.SuccessDataEnity != null) { var submitRet = AppServiceContext.SubmitService.Submit(this.Context, targetBillMeta.BusinessInfo, saveResult.SuccessDataEnity.Select(o => o["Id"]).ToArray(), "Submit", saveOption); result.MergeResult(submitRet); if (submitRet.SuccessDataEnity != null) { var auditResult = AppServiceContext.SetStatusService.SetBillStatus(this.Context, targetBillMeta.BusinessInfo, submitRet.SuccessDataEnity.Select(o => new KeyValuePair <object, object>(o["Id"], 0)).ToList(), new List <object> { "1", "" }, "Audit", saveOption); result.MergeResult(auditResult); } } if (this.CheckOpResult(saveResult, saveOption)) { return(result); } return(result); }
/// <summary> /// 根据单据唯一标识下推单据 /// </summary> private void PushFormByFormId() { string status = this.View.BillModel.GetValue("FDocumentStatus").ToString(); if (status == "Z") { return; } string formId = this.View.BillView.GetFormId(); string targetFormId = "k0c6b452fa8154c4f8e8e5f55f96bcfac"; // 个人资金 var rules = ConvertServiceHelper.GetConvertRules(this.View.Context, formId, targetFormId); var rule = rules.FirstOrDefault(t => t.IsDefault); string fid = this.View.BillModel.GetPKValue().ToString(); ListSelectedRow[] selectedRows; if (formId == "k0c30c431418e4cf4a60d241a18cb241c") // 出差申请 { int count = this.View.BillModel.GetEntryRowCount("FEntity"); selectedRows = new ListSelectedRow[count]; for (int i = 0; i < count; i++) { string entryId = this.View.BillModel.GetEntryPKValue("FEntryID", i).ToString(); selectedRows[i] = new ListSelectedRow(fid, entryId, i, formId); } } else { ListSelectedRow row = new ListSelectedRow(fid, string.Empty, 0, formId); selectedRows = new ListSelectedRow[] { row }; } // 调用下推服务,生成下游单据数据包 ConvertOperationResult operationResult = null; PushArgs pushArgs = new PushArgs(rule, selectedRows) { TargetBillTypeId = "", TargetOrgId = 0, }; try { //执行下推操作,并获取下推结果 operationResult = ConvertServiceHelper.Push(this.View.Context, pushArgs, OperateOption.Create()); } catch (KDExceptionValidate ex) { this.View.ShowErrMessage(ex.Message, ex.ValidateString); return; } catch (Exception ex) { this.View.ShowErrMessage(ex.Message); return; } // 获取生成的目标单据数据包 DynamicObject[] objs = operationResult.TargetDataEntities.Select(p => p.DataEntity).ToArray(); // 读取目标单据元数据 var targetBillMeta = MetaDataServiceHelper.Load(this.View.Context, targetFormId) as FormMetadata; OperateOption option = OperateOption.Create(); // 忽略全部需要交互性质的提示 option.SetIgnoreWarning(true); // 暂存数据 var saveResult = BusinessDataServiceHelper.Draft(this.View.Context, targetBillMeta.BusinessInfo, objs, option); string targetId = saveResult.SuccessDataEnity.Select(item => item["Id"].ToString()).Distinct().FirstOrDefault(); // 打开目标单据 if (targetId != null) { MobileShowParameter param = new MobileShowParameter(); param.Caption = "个人资金申请"; param.FormId = "ora_GRZJJZ"; param.PKey = targetId; param.ParentPageId = this.View.PageId; param.Status = OperationStatus.EDIT; param.OpenStyle.ShowType = ShowType.Default; this.View.ShowForm(param); } }
/// <summary> /// 后台调用单据转换生成目标单 /// </summary> /// <param name="ctx"></param> /// <param name="option"></param> /// <returns></returns> public static IOperationResult ConvertBills(Context ctx, BillConvertOption option) { IOperationResult result = new OperationResult(); List <DynamicObject> list = new List <DynamicObject>(); ConvertRuleElement rule = AppServiceContext.ConvertService.GetConvertRules(ctx, option.sourceFormId, option.targetFormId) .FirstOrDefault(w => w.Id == option.ConvertRuleKey); FormMetadata metaData = (FormMetadata)AppServiceContext.MetadataService.Load(ctx, option.targetFormId, true); if ((rule != null) && option.BizSelectRows != null && option.BizSelectRows.Count() > 0) { PushArgs serviceArgs = new PushArgs(rule, option.BizSelectRows); serviceArgs.CustomParams.Add("CustomConvertOption", option); serviceArgs.CustomParams.Add("CustomerTransParams", option.customParams); OperateOption operateOption = OperateOption.Create(); operateOption.SetVariableValue("ValidatePermission", true); ConvertOperationResult convertOperationResult = AppServiceContext.ConvertService.Push(ctx, serviceArgs, operateOption); if (!convertOperationResult.IsSuccess) { result = convertOperationResult as IOperationResult; return(result); } DynamicObject[] collection = convertOperationResult.TargetDataEntities .Select(s => s.DataEntity).ToArray(); list.AddRange(collection); } if (list.Count > 0) { AppServiceContext.DBService.LoadReferenceObject(ctx, list.ToArray(), metaData.BusinessInfo.GetDynamicObjectType(), false); } if (option.IsDraft && list.Count > 0) { result = AppServiceContext.DraftService.Draft(ctx, metaData.BusinessInfo, list.ToArray()); } if (!result.IsSuccess) { return(result); } if (option.IsSave && !option.IsDraft && list.Count > 0) { OperateOption operateOption = OperateOption.Create(); operateOption.SetVariableValue("ValidatePermission", true); operateOption.SetIgnoreWarning(true); result = AppServiceContext.SaveService.Save(ctx, metaData.BusinessInfo, list.ToArray(), operateOption); //result = AppServiceContext.SaveService.Save(ctx, metaData.BusinessInfo, list.ToArray()); } if (!result.IsSuccess) { return(result); } if (option.IsSubmit && list.Count > 0) { result = AppServiceContext.SubmitService.Submit(ctx, metaData.BusinessInfo, list.Select(item => ((Object)(Convert.ToInt64(item["Id"])))).ToArray(), "Submit"); } if (!result.IsSuccess) { return(result); } if (option.IsAudit && list.Count > 0) { result = AppServiceContext.SubmitService.Submit(ctx, metaData.BusinessInfo, list.Select(item => ((Object)(Convert.ToInt64(item["Id"])))).ToArray(), "Submit"); if (!result.IsSuccess) { return(result); } List <KeyValuePair <object, object> > keyValuePairs = new List <KeyValuePair <object, object> >(); list.ForEach(item => { keyValuePairs.Add(new KeyValuePair <object, object>(item.GetPrimaryKeyValue(), item)); } ); List <object> auditObjs = new List <object>(); auditObjs.Add("1"); auditObjs.Add(""); //Kingdee.BOS.Util.OperateOptionUtils oou = null; OperateOption ooption = OperateOption.Create(); ooption.SetIgnoreWarning(false); ooption.SetIgnoreInteractionFlag(true); ooption.SetIsThrowValidationInfo(false); result = AppServiceContext.SetStatusService.SetBillStatus(ctx, metaData.BusinessInfo, keyValuePairs, auditObjs, "Audit", ooption); option.BillStatusOptionResult = ooption; if (!result.IsSuccess) { return(result); } } return(result); }
/// <summary> /// 整单下推 /// </summary> /// <param name="ctx"></param> /// <param name="SourceFormId"></param> /// <param name="TargetFormId"></param> /// <param name="sourceBillIds"></param> /// <returns></returns> public ConvertOperationResult ConvertBills(Context ctx, string SourceFormId, string TargetFormId, List <long> sourceBillIds) { // 获取源单与目标单的转换规则 IConvertService convertService = ServiceHelper.GetService <IConvertService>(); var rules = convertService.GetConvertRules(ctx, SourceFormId, TargetFormId); if (rules == null || rules.Count == 0) { throw new KDBusinessException("", string.Format("未找到{0}到{1}之间,启用的转换规则,无法自动下推!", SourceFormId, TargetFormId)); } // 取勾选了默认选项的规则 var rule = rules.FirstOrDefault(t => t.IsDefault); // 如果无默认规则,则取第一个 if (rule == null) { rule = rules[0]; } // 开始构建下推参数: // 待下推的源单数据行 List <ListSelectedRow> srcSelectedRows = new List <ListSelectedRow>(); int rowkey = -1; foreach (long billId in sourceBillIds) { //把待下推的源单内码,逐个创建ListSelectedRow对象,添加到集合中 srcSelectedRows.Add(new ListSelectedRow(billId.ToString(), string.Empty, rowkey++, SourceFormId)); } // 指定目标单单据类型:情况比较复杂,直接留空,会下推到默认的单据类型 string targetBillTypeId = string.Empty; // 指定目标单据主业务组织:情况更加复杂, // 建议在转换规则中,配置好主业务组织字段的映射关系:运行时,由系统根据映射关系,自动从上游单据取主业务组织,避免由插件指定 long targetOrgId = 0; // 自定义参数字典:把一些自定义参数,传递到转换插件中;转换插件再根据这些参数,进行特定处理 Dictionary <string, object> custParams = new Dictionary <string, object>(); //custParams.Add("1", 1); //custParams.Add("2", 2); // 组装下推参数对象 PushArgs pushArgs = new PushArgs(rule, srcSelectedRows.ToArray()) { TargetBillTypeId = targetBillTypeId, TargetOrgId = targetOrgId, CustomParams = custParams }; // 调用下推服务,生成下游单据数据包 ConvertOperationResult operationResult = convertService.Push(ctx, pushArgs, OperateOption.Create()); return(operationResult); }