/// <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; }
private void GetF8Value(string strFormId, string strFieldOfName, string strFieldOfId, string strFilter) { ListShowParameter param = new ListShowParameter { FormId = strFormId, MultiSelect = false, IsShowApproved = false, IsShowUsed = true, IsLookUp = true }; FormMetadata metadata = (FormMetadata)MetaDataServiceHelper.Load(base.Context, strFormId, true); BusinessInfo businessInfo = metadata.BusinessInfo; //string str = CRMAllocationServiceHelper.GetFilter(base.Context, businessInfo, param.SqlParams); string str = CRMAllocationServiceHelper.GetFilter(base.Context, businessInfo); if (str.Length > 0) { if (strFilter.Length > 0) { strFilter = strFilter + " AND " + str; } else { strFilter = str; } } param.ListFilterParameter.Filter = strFilter; param.PageId = Guid.NewGuid().ToString(); param.ParentPageId = base.View.PageId; param.ListType = 2; base.View.ShowForm(param, delegate(FormResult result) { if (result.ReturnData != null) { ListSelectedRowCollection returnData = result.ReturnData as ListSelectedRowCollection; if (returnData.Count != 0) { ListSelectedRow row = returnData[0]; this.View.Model.SetValue(strFieldOfId, row.PrimaryKeyValue); this.View.Model.BeginIniti(); this.View.Model.SetValue(strFieldOfName, row.Name); this.View.Model.EndIniti(); this.View.UpdateView(strFieldOfName); if (strFieldOfName.ToUpperInvariant() == "FCUSTOMERNAME") { this.GetCustInfo(Convert.ToInt64(row.PrimaryKeyValue)); } else if (strFieldOfName.ToUpperInvariant() == "FCONTACTNAME") { this.GetContactInfo(Convert.ToInt64(row.PrimaryKeyValue)); } } } }); }
}//end method /// <summary> /// 将信息转换成字典形式并赋给FieldValues。 /// </summary> /// <param name="row">列表选中的行对象。</param> /// <returns>返回原对象。</returns> public static ListSelectedRow ExtraFieldValues(this ListSelectedRow row) { if (row.FieldValues == null) { row.FieldValues = new Dictionary <string, string>(); } row.FieldValues.Add(Appearance.BILL_HEAD, row.PrimaryKeyValue); if (!row.EntryEntityKey.IsNullOrEmptyOrWhiteSpace()) { row.FieldValues.Add(row.EntryEntityKey, row.EntryPrimaryKeyValue); } return(row); }//end method
/// <summary> /// 关联发货明细批量新增发货明细。 /// </summary> /// <param name="ctx">上下文对象。</param> /// <param name="dataArray">发货明细关联发货通知数据实体数组。</param> /// <returns>返回新建保存事务结果。</returns> public IOperationResult CreateNewBillsFromInNoticeEntities(Context ctx, DynamicObjectCollection dataArray) { //取默认转换规则。 var rule = ConvertServiceHelper.GetConvertRules(ctx, "BAH_WMS_Pickup", "BAH_WMS_Outbound") .Where(element => element.IsDefault) .FirstOrDefault(); if (rule == null) { throw new KDBusinessException("RuleNotFound", "未找到拣货明细至发货明细之间,启用的转换规则,无法自动下推!"); } ListSelectedRowCollection listSelectedRowCollection = new ListSelectedRowCollection(); foreach (var data in dataArray) { var row = new ListSelectedRow(data["SourceBillId"].ToString(), data["SourceEntryId"].ToString(), 0, rule.SourceFormId) { EntryEntityKey = "FEntity" }; listSelectedRowCollection.Add(row); }//end foreach //将需要传入的数量作为参数传递进下推操作,并执行下推操作。 PushArgs args = new PushArgs(rule, listSelectedRowCollection.ToArray()); var inDetailDataObjects = ConvertServiceHelper.Push(ctx, args) .Adaptive(result => result.ThrowWhenUnSuccess(op => op.GetResultMessage())) .Adaptive(result => result.TargetDataEntities.Select(entity => entity.DataEntity).ToArray()); //修改明细行数据包。 var inDetailMetadata = FormMetaDataCache.GetCachedFormMetaData(ctx, rule.TargetFormId); var inDetailBillView = inDetailMetadata.CreateBillView(ctx); var inDetailDynamicFormView = inDetailBillView as IDynamicFormViewService; var inDetailBusinessInfo = inDetailMetadata.BusinessInfo; var inDetailEntryEntity = inDetailBusinessInfo.GetEntity("FEntity"); var inDetailEntryLink = inDetailBusinessInfo.GetForm().LinkSet.LinkEntitys.FirstOrDefault(); //调用上传操作,将暂存、保存、提交、审核操作放置在同一事务中执行。 return(inDetailDataObjects.DoNothing(ctx, inDetailBusinessInfo, "Upload")); }//end method
///// <summary> ///// 关联到货通知新增收货明细。 ///// </summary> ///// <param name="ctx">上下文对象。</param> ///// <param name="data">收货明细关联到货通知数据实体。</param> ///// <returns>返回新建保存事务结果。</returns>s //public IOperationResult CreateNewBillFromInNoticeEntry(Context ctx, PutDetailLinkInDetailDto.InDetailEntryLinkInNotice data) //{ // return this.CreateNewBillsFromInNoticeEntities(ctx, new PutDetailLinkInDetailDto.InDetailEntryLinkInNotice[] { data }); //}//end method /// <summary> /// 关联收货明细批量新增上架明细。 /// </summary> /// <param name="ctx">上下文对象。</param> /// <param name="dataArray">上架明细关联收货通知数据实体数组。</param> /// <returns>返回新建保存事务结果。</returns> public IOperationResult CreateNewBillsFromInNoticeEntities(Context ctx, IEnumerable <PutDetailLinkInDetailDto.PutDetailEntryLinkInNotice> dataArray) { //取默认转换规则。 var rule = ConvertServiceHelper.GetConvertRules(ctx, "BAH_WMS_Inbound", "BAH_WMS_Putaway") .Where(element => element.IsDefault) .FirstOrDefault(); if (rule == null) { throw new KDBusinessException("RuleNotFound", "未找到收货明细至上架明细之间,启用的转换规则,无法自动下推!"); } ListSelectedRowCollection listSelectedRowCollection = new ListSelectedRowCollection(); foreach (var data in dataArray) { var row = new ListSelectedRow(data.SourceBillId.ToString(), data.SourceEntryId.ToString(), 0, rule.SourceFormId) { EntryEntityKey = "FEntity" }; listSelectedRowCollection.Add(row); }//end foreach //将需要传入的数量作为参数传递进下推操作,并执行下推操作。 PushArgs args = new PushArgs(rule, listSelectedRowCollection.ToArray()); var inDetailDataObjects = ConvertServiceHelper.Push(ctx, args) .Adaptive(result => result.ThrowWhenUnSuccess(op => op.GetResultMessage())) .Adaptive(result => result.TargetDataEntities.Select(entity => entity.DataEntity).ToArray()); //修改明细行数据包。 var inDetailMetadata = FormMetaDataCache.GetCachedFormMetaData(ctx, rule.TargetFormId); var inDetailBillView = inDetailMetadata.CreateBillView(ctx); var inDetailDynamicFormView = inDetailBillView as IDynamicFormViewService; var inDetailBusinessInfo = inDetailMetadata.BusinessInfo; var inDetailEntryEntity = inDetailBusinessInfo.GetEntity("FEntity"); var inDetailEntryLink = inDetailBusinessInfo.GetForm().LinkSet.LinkEntitys.FirstOrDefault(); foreach (var data in inDetailDataObjects) { //新建并加载已有数据包。 inDetailBillView.AddNew(data); //逐行检索,并关联复制行。 var entryCollection = inDetailBillView.Model.GetEntityDataObject(inDetailEntryEntity); var entryMirrorArray = entryCollection.ToArray(); foreach (var entry in entryMirrorArray) { var sources = dataArray.Join(entry.Property <DynamicObjectCollection>(inDetailEntryLink.Key), left => new { SourceEntryId = left.SourceEntryId, SourceBillId = left.SourceBillId }, right => new { SourceEntryId = right.Property <long>("SId"), SourceBillId = right.Property <long>("SBillId") }, (left, right) => left).ToArray(); for (int i = 0; i < sources.Count(); i++) { var entryIndex = entryCollection.IndexOf(entry); var rowIndex = entryIndex + i; if (i > 0) { inDetailBillView.Model.CopyEntryRow("FEntity", entryIndex, rowIndex, true); }//end if var item = sources.ElementAt(i); inDetailDynamicFormView.UpdateValue("FFromTrackNo", rowIndex, item.FromTrackNo); inDetailDynamicFormView.UpdateValue("FToTrackNo", rowIndex, item.ToTrackNo); inDetailDynamicFormView.SetItemValueByID("FToLocId", item.ToLocId, rowIndex); if (item.ToAvgCty == 0) { inDetailDynamicFormView.UpdateValue("FFromCty", rowIndex, item.ToCty); inDetailDynamicFormView.SetItemValueByID("FFromUnitId", item.ToUnitId, rowIndex); inDetailDynamicFormView.UpdateValue("FFromQty", rowIndex, item.ToQty); } else { inDetailDynamicFormView.UpdateValue("FFromAvgCty", rowIndex, item.ToAvgCty); inDetailDynamicFormView.SetItemValueByID("FFromUnitId", item.ToUnitId, rowIndex); inDetailDynamicFormView.UpdateValue("FFromQty", rowIndex, item.ToQty); } //inDetailDynamicFormView.SetItemValueByID("FStockId", item.StockId, rowIndex); //inDetailDynamicFormView.SetItemValueByID("FStockPlaceId", item.StockPlaceId, rowIndex); //inDetailDynamicFormView.UpdateValue("FLotNo", rowIndex, item.BatchNo); //inDetailDynamicFormView.UpdateValue("FProduceDate", rowIndex, item.KFDate); //inDetailDynamicFormView.UpdateValue("FExpPeriod", rowIndex, item.ExpPeriod); //inDetailDynamicFormView.UpdateValue("FSerialNo", rowIndex, item.SerialNo); //inDetailDynamicFormView.UpdateValue("FTrayNo", rowIndex, item.TrayNo); //inDetailDynamicFormView.UpdateValue("FEntryRemark", rowIndex, item.Remark); } //end for } //end foreach } //end foreach //调用上传操作,将暂存、保存、提交、审核操作放置在同一事务中执行。 return(inDetailDataObjects.DoNothing(ctx, inDetailBusinessInfo, "Upload")); }//end method
/// <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="e"></param> public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e) { base.AfterExecuteOperationTransaction(e); try { string sql = string.Empty; if (e.DataEntitys != null && e.DataEntitys.Count <DynamicObject>() > 0) { foreach (DynamicObject item in e.DataEntitys) { //收款单id string Fid = item["Id"].ToString(); string sql2 = ""; //收款单源单明细 DynamicObjectCollection RECEIVEBILLSRCENTRYList = item["RECEIVEBILLSRCENTRY"] as DynamicObjectCollection; foreach (var entry in RECEIVEBILLSRCENTRYList) { //销售订单明细内码 string FORDERENTRYID = entry["FSRCORDERENTRYID"].ToString(); //本次收款金额 decimal FREALRECAMOUNT = Convert.ToDecimal(entry["REALRECAMOUNT"].ToString()); if (!string.IsNullOrEmpty(FORDERENTRYID)) { //查询采购订单 sql = string.Format(@"select a.FBILLNO,b.FENTRYID as 采购订单明细内码 ,f.F_YBG_BUSINESSMODEL as 业务模式 from t_PUR_POOrder a inner join t_PUR_POOrderEntry b on a.fID=b.FID inner join T_PUR_POORDERENTRY_LK c on c.FENTRYID=b.FENTRYID left join T_SAL_ORDERENTRY d on d.FENTRYID=c.FSID left join T_SAL_ORDER f on f.FID=d.FID where FSID='{0}'", FORDERENTRYID); DataSet ds = DBServiceHelper.ExecuteDataSet(this.Context, sql); DataTable dt = ds.Tables[0]; if (dt.Rows.Count > 0) { for (int i = 0; i < dt.Rows.Count; i++) { string F_YBG_BUSINESSMODEL = dt.Rows[i]["采购订单明细内码"].ToString(); if (F_YBG_BUSINESSMODEL == "01" || F_YBG_BUSINESSMODEL == "04") //挂靠的采用自动生成付款申请单 { string POFENTRYID = dt.Rows[i]["采购订单明细内码"].ToString(); if (string.IsNullOrEmpty(sql2)) { sql2 += " FPAYABLEENTRYID='" + POFENTRYID + "' "; } else { sql2 += " or FPAYABLEENTRYID='" + POFENTRYID + "' "; } } } } } } if (!string.IsNullOrEmpty(sql2)) { #region 应付单下推付款申请单 string srcFormId = "AP_Payable"; //应付单 string destFormId = "CN_PAYAPPLY"; //付款申请单 IMetaDataService mService = Kingdee.BOS.App.ServiceHelper.GetService <IMetaDataService>(); IViewService vService = Kingdee.BOS.App.ServiceHelper.GetService <IViewService>(); FormMetadata destmeta = mService.Load(this.Context, destFormId) as FormMetadata; //转换规则的唯一标识 string ruleKey = "AP_PayableToPayApply"; //var rules = ConvertServiceHelper.GetConvertRules(Context, srcFormId, destFormId); //var rule = rules.FirstOrDefault(t => t.IsDefault); ConvertRuleElement rule = GetDefaultConvertRule(Context, srcFormId, destFormId, ruleKey); List <ListSelectedRow> lstRows = new List <ListSelectedRow>(); string strsql = "select a.FID , a.FENTRYID from T_AP_PAYABLEPLAN a left join T_AP_PAYABLE b on a.FID=b.FID where b.FDOCUMENTSTATUS='C' and (" + sql2 + ") "; DataSet ds2 = DBServiceHelper.ExecuteDataSet(Context, strsql); if (ds2.Tables[0].Rows.Count > 0) { HashSet <string> hasset = new HashSet <string>(); for (int j = 0; j < ds2.Tables[0].Rows.Count; j++) { hasset.Add(ds2.Tables[0].Rows[j]["FID"].ToString()); long entryId = Convert.ToInt64(ds2.Tables[0].Rows[j]["FENTRYID"]); //源单单据标识 ListSelectedRow row = new ListSelectedRow(ds2.Tables[0].Rows[j]["FID"].ToString(), entryId.ToString(), 0, "AP_Payable"); //源单单据体标识 row.EntryEntityKey = "FEntityPlan"; lstRows.Add(row); } PushArgs pargs = new PushArgs(rule, lstRows.ToArray()); IConvertService cvtService = Kingdee.BOS.App.ServiceHelper.GetService <IConvertService>(); OperateOption option = OperateOption.Create(); option.SetIgnoreWarning(true); option.SetVariableValue("ignoreTransaction", false); option.SetIgnoreInteractionFlag(true); #region 提交审核 //OperateOption option2 = OperateOption.Create(); //option2.SetIgnoreWarning(true); //option2.SetVariableValue("ignoreTransaction", true); //foreach (var hid in hasset) //{ // //如果应付单没有提交先提交审核 // IMetaDataService BomService = Kingdee.BOS.App.ServiceHelper.GetService<IMetaDataService>(); // //应付单元素包 // FormMetadata APMeta = BomService.Load(Context, "AP_Payable") as FormMetadata; // IViewService APVService = Kingdee.BOS.App.ServiceHelper.GetService<IViewService>(); // //应付单数据包 // DynamicObject APmd = APVService.LoadSingle(Context, hid, APMeta.BusinessInfo.GetDynamicObjectType()); // DynamicObject[] dy = new DynamicObject[] { APmd }; // object[] items = dy.Select(p => p["Id"]).ToArray(); // ISubmitService submitService = Kingdee.BOS.App.ServiceHelper.GetService<ISubmitService>(); // IOperationResult submitresult = submitService.Submit(Context, APMeta.BusinessInfo, items, "Submit", option2); // IAuditService auditService = Kingdee.BOS.App.ServiceHelper.GetService<IAuditService>(); // IOperationResult auditresult = auditService.Audit(Context, APMeta.BusinessInfo, items, option2); //} #endregion ConvertOperationResult cvtResult = cvtService.Push(Context, pargs, option, false); if (cvtResult.IsSuccess) { DynamicObject[] dylist = (from p in cvtResult.TargetDataEntities select p.DataEntity).ToArray(); //修改应收单里面数据 for (int K = 0; K < dylist.Length; K++) { //付款原因 dylist[K]["F_YBG_Remarks"] = "供应商付款"; //明细信息 DynamicObjectCollection RECEIVEBILLENTRYList = dylist[K]["FPAYAPPLYENTRY"] as DynamicObjectCollection; foreach (var Entry in RECEIVEBILLENTRYList) { //结算方式 BaseDataField FSETTLETYPEID = destmeta.BusinessInfo.GetField("FSETTLETYPEID") as BaseDataField; Entry["FSETTLETYPEID_Id"] = 4; Entry["FSETTLETYPEID"] = vService.LoadSingle(Context, 4, FSETTLETYPEID.RefFormDynamicObjectType); } } //保存 ISaveService saveService = Kingdee.BOS.App.ServiceHelper.GetService <ISaveService>(); IOperationResult saveresult = saveService.Save(Context, destmeta.BusinessInfo, dylist, option); bool reult = CheckResult(saveresult, out string mssg); if (!reult) { throw new Exception("收款款单审核成功,生成付款申请单失败:"); } else { //纪录核销的纪录 OperateResultCollection operateResults = saveresult.OperateResult; string fnmber = operateResults[0].Number; string fid = operateResults[0].PKValue.ToString(); } } } else { throw new KDException("", "应付单不存在或者未审核,下推付款申请单失败"); } #endregion } } } } catch (Exception ex) { throw new KDException("", "应付单下推付款申请单失败:" + ex.ToString()); } }
public DynamicObject[] ConvertBillsWithEntry(Context ctx, List <ConvertOption> options, string SourceFormId, string TargetFormId, string targetBillTypeId, string SourceEntryEntityKey, OperateOption operateOption) { //List<DynamicObject[]> result = new List<DynamicObject[]>(); List <DynamicObject> before = new List <DynamicObject>(); //IEnumerable<DynamicObject> targetDatas = null; IConvertService convertService = ServiceHelper.GetService <IConvertService>(); var rules = convertService.GetConvertRules(ctx, SourceFormId, TargetFormId); string rulekey = operateOption.GetVariableValue("ruleKey", string.Empty);//单据转换规则 key 指定 ID var rule = rules.FirstOrDefault(t => t.IsDefault); if (rules == null || rules.Count == 0) { throw new KDBusinessException("", string.Format("未找到{0}到{1}之间,启用的转换规则,无法自动下推!", SourceFormId, TargetFormId)); } //如果指定 规则 if (rulekey.Equals(string.Empty) == false) { foreach (var ervryrule in rules) { if (ervryrule.Key.Equals(rulekey)) { rule = ervryrule; break; } } } if (rule == null) { rule = rules[0]; } foreach (ConvertOption option in options) { // 开始构建下推参数: // 待下推的源单数据行 List <ListSelectedRow> srcSelectedRows = new List <ListSelectedRow>(); // Dictionary<long, List<Tuple<string, int>>> dic = new Dictionary<long, List<Tuple<string, int>>>(); foreach (long billId in option.SourceBillIds) { srcSelectedRows = new List <ListSelectedRow>(); int rowKey = -1; for (int i = 0; i < option.SourceBillEntryIds.Count(); i++) { ListSelectedRow row = new ListSelectedRow(billId.ToString(), option.SourceBillEntryIds[i].ToString(), rowKey++, SourceFormId); row.EntryEntityKey = SourceEntryEntityKey; Dictionary <string, string> fieldValues = new Dictionary <string, string>(); fieldValues.Add(SourceEntryEntityKey, option.SourceBillEntryIds[i].ToString()); row.FieldValues = fieldValues; srcSelectedRows.Add(row); //dic.Add(option.SourceBillEntryIds[i], new List<Tuple<string, int>> { new Tuple<string, int>(" ", option.mount[i]) }); } } // 指定目标单单据类型:情况比较复杂,直接留空,会下推到默认的单据类型 if (targetBillTypeId == null) { 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 }; // 调用下推服务,生成下游单据数据包 //OperateOption option1 = OperateOption.Create(); //option1.SetVariableValue("OutStockAmount", option.mount); //option1.SetVariableValue("srcbillseq", option.srcbillseq); //option1.SetVariableValue("FDATE", Convert.ToDateTime(option.FDATE)); ConvertOperationResult operationResult = convertService.Push(ctx, pushArgs, operateOption); // 开始处理下推结果: // 获取下推生成的下游单据数据包 DynamicObject[] targetBillObjs = (from p in operationResult.TargetDataEntities select p.DataEntity).ToArray(); foreach (DynamicObject cc in targetBillObjs) { DynamicObjectCollection rpt = cc["FPAYAPPLYENTRY"] as DynamicObjectCollection; foreach (DynamicObject item in rpt) { // item["FDETABLEINID"] = option.dic[Convert.ToString(item["SoorDerno"]) + Convert.ToString(item["Fsrcbillseq"])]; } before.Add(cc); } if (targetBillObjs.Length == 0) { // 未下推成功目标单,抛出错误,中断审核 throw new KDBusinessException("", string.Format("由{0}自动下推{1},没有成功生成数据包,自动下推失败!", SourceFormId, TargetFormId)); } } DynamicObject[] aa = before.Select(p => p).ToArray() as DynamicObject[]; return(aa); }
}//end method /// <summary> /// 如果源单数据里有子单据体,需指定父级单据体。 /// </summary> /// <param name="row">列表选中的行对象。</param> /// <param name="parentEntryKey">父单据体实体主键。</param> /// <param name="parentEntryId">父单据体数据主键。</param> /// <returns>返回原对象。</returns> public static ListSelectedRow ExtraFieldValues(this ListSelectedRow row, string parentEntryKey, string parentEntryId) { row.ExtraFieldValues(); row.FieldValues.Add(parentEntryKey, parentEntryId); return(row); } //end method
/// <summary> /// 设定单据体实体主键。 /// </summary> /// <param name="row">列表选中的行对象。</param> /// <param name="entryKey">要赋值的单据体实体主键。</param> /// <returns>返回原对象。</returns> public static ListSelectedRow SetEntryKey(this ListSelectedRow row, string entryKey) { row.EntryEntityKey = entryKey; return(row); }//end method
public override void EndOperationTransaction(Kingdee.BOS.Core.DynamicForm.PlugIn.Args.EndOperationTransactionArgs e) { base.EndOperationTransaction(e); if (e.DataEntitys == null || e.DataEntitys.Count() <= 0) { return; } List <long> lstFids = new List <long>(); List <ListSelectedRow> lstSelect = new List <ListSelectedRow>(); List <long> AddSelect = new List <long>();//下推增加预测选择 foreach (DynamicObject data in e.DataEntitys) { lstFids.Add(Convert.ToInt64(data["ID"])); DynamicObjectCollection dycEntitys = data["FEntity"] as DynamicObjectCollection; string FDirection = Convert.ToString(data["FDirection"]); if (dycEntitys == null || dycEntitys.Count() <= 0) { continue; } foreach (var dycEntity in dycEntitys) { ListSelectedRow convertItem = new ListSelectedRow( Convert.ToString(data["ID"]), Convert.ToString(dycEntity["ID"]), Convert.ToInt32(dycEntity["ID"]), "BillHead"); convertItem.EntryEntityKey = "FEntity"; lstSelect.Add(convertItem); if (FDirection == "A") { AddSelect.Add(Convert.ToInt32(convertItem.PrimaryKeyValue)); } // 更新销售结余后台表 12月20日赵成杰 string entityid = Convert.ToString(dycEntity["ID"]); string sql = string.Format(@"Update JN_T_SAL_ForecastBack as t0 set (FQTY)=(select case when b.FDirection='A' then a.FQTY+c.FJNBaseUnitQty else a.FQTY-c.FJNBaseUnitQty end from JN_T_SAL_ForecastBack a inner join JN_T_SAL_ForecastChange b on a.FSALEORGID=b.FJNSALEORGID and a.FSALERID=b.FJNSALERID and a.FSaleDeptId=b.FJNSaleDeptId inner join JN_T_SAL_ForecastChangeEntry c on b.FID=c.FID and a.FMATERIALID=c.FJNMATERIALID and c.FEntryID={0} and a.FAUXPROPID=c.FJNAUXPROP and a.FUnitID=c.FJNBASEUNITID where a.FID=t0.FID )", entityid); DBUtils.Execute(this.Context, sql); } } if (lstFids.Count() <= 0) { return; } SqlParam param = new SqlParam("@FID", KDDbType.udt_inttable, lstFids.ToArray()); //更新销售结余后台表 DynamicObjectCollection dycInsertForecastBack = UpdateForecastBack(param); //插入销售结余日志表 DynamicObjectCollection dycInsertForecastLog = UpdateForecastLog(param); //调用插入方法 JNCommonServices.UpdateForecastBackAndLog(this.Context, dycInsertForecastBack, dycInsertForecastLog); if (AddSelect == null || AddSelect.Count <= 0) { return; } //审核自动生成预测单 //销售预测单变更单-预测单 List <IOperationResult> results = new List <IOperationResult>(); IOperationResult result = new OperationResult(); result = this.DoPushNotAudit("JN_YDL_SAL_ForecastChange", "PLN_FORECAST", AddSelect); results.Add(result); InItOperateResult(results, "生成预测单成功", "生成预测单失败"); }