示例#1
0
        /// <summary>
        /// 配方单转库存检验单
        /// </summary>
        /// <param name="ctx">上下文</param>
        /// <param name="FID">源单ID</param>
        /// <param name="FPKID">源单单据体ID</param>
        /// <param name="row">单据体行号</param>
        public IOperationResult ConvertRule(Context ctx, int FID, int FPKID, int row)
        {
            List <ListSelectedRow> ListSalReSelect = new List <ListSelectedRow>();
            ListSelectedRow        convertItem     = new ListSelectedRow(
                Convert.ToString(FID),
                Convert.ToString(FPKID),
                Convert.ToInt32(row),
                "PRD_PPBOM");

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

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

          

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

            if (ListSalReSelect.Count <= 0)
            {
                return convertResult;
            }
            BillConvertOption convertOption = new BillConvertOption();
            convertOption.sourceFormId = "PUR_ReceiveBill";
            convertOption.targetFormId = "AP_Payable";
            convertOption.ConvertRuleKey = "AP_ReceiveToPayableMap";
            convertOption.Option = OperateOption.Create();
            convertOption.Option.SetIgnoreWarning(false);
            convertOption.BizSelectRows = ListSalReSelect.ToArray();
            convertOption.IsDraft = false;
            convertOption.IsSave = true;
            convertOption.IsAudit = true;
            convertResult = ConvertBills(ctx, convertOption,billtype);
            return convertResult;
        }
        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
示例#5
0
        /// <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
示例#6
0
        ///// <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
示例#7
0
        /// <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);
            }
        }
示例#8
0
        /// <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
示例#12
0
        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, "生成预测单成功", "生成预测单失败");
        }