コード例 #1
0
        public static string GetFilterString(this FilterScheme scheme, Context ctx, FormMetadata metadata)
        {
            if (scheme.Scheme.IsNullOrEmptyOrWhiteSpace())
            {
                return(string.Empty);
            }

            //字段比较条件元数据。
            var filterMetadata = FormMetaDataCache.GetCachedFilterMetaData(ctx);

            //过滤模型:解析过滤方案
            ListFilterModel filterModel = new ListFilterModel();

            filterModel.FilterObject.FilterMetaData = filterMetadata;
            filterModel.SetContext(ctx, metadata.BusinessInfo, metadata.BusinessInfo.GetForm().GetFormServiceProvider());
            filterModel.InitFieldList(metadata, null);

            //把过滤方案的XML内容,反序列化为对象
            DcxmlSerializer dcxmlSerializer = new DcxmlSerializer(new PreInsertDataDcxmlBinder());
            SchemeEntity    schemeEntity    = dcxmlSerializer.DeserializeFromString(scheme.Scheme) as SchemeEntity;

            //利用ListFilterModel, 翻译过滤条件
            filterModel.FilterObject.Setting = schemeEntity.FilterSetting;
            string statement = filterModel.FilterObject.GetFilterSQLString(ctx, TimeServiceHelper.GetSystemDateTime(ctx));

            return(statement);
        } //end metthod
コード例 #2
0
        private QueryBuilderParemeter GetQBPara(CheckPara para, string formKey)
        {
            FormMetadata          formMetadata = FormMetaDataCache.GetCachedFormMetaData(this.Context, formKey);
            QueryBuilderParemeter qbPara       = new QueryBuilderParemeter();

            qbPara.FormId = formKey;
            if (formKey == "STK_TransferDirect")
            {
                qbPara.FilterClauseWihtKey = string.Format(" FJNUnitEnzymes <> {0} And FSTOCKORGID ={1} And {2} = {3} And {4}={5} And {6} = '{7}' ",
                                                           para.unitEnzymes, para.orgId, matFldKey, para.matId, "FAuxPropId", para.auxPropId, "FLot.FNumber", para.lotNumber);
            }
            else
            {
                qbPara.FilterClauseWihtKey = string.Format(" FJNUnitEnzymes <> {0} And {1} ={2} And {3} = {4} And {5}={6} And {7} = '{8}' ",
                                                           para.unitEnzymes, formMetadata.BusinessInfo.MainOrgField.FieldName, para.orgId, matFldKey, para.matId, "FAuxPropId", para.auxPropId, "FLot.FNumber", para.lotNumber);
            }

            if (para.currFormKey.EqualsIgnoreCase(formKey))
            {
                qbPara.FilterClauseWihtKey += string.Format(" And {0} <> {1} ", para.currEnFldName, para.currentEntryId);
            }

            qbPara.SelectItems = SelectorItemInfo.CreateItems("FBillNo,FMaterialId.FNumber as FMatNumber,FMaterialId.FName as FMatName,FJNUnitEnzymes");

            return(qbPara);
        }
コード例 #3
0
        }//end static method

        public static Context CreateInstanceFromCache(this Context ctx, string dataCenterId, long userId)
        {
            Context contextByDataCenterId = DataCenterService.GetDataCenterContextFromCache(dataCenterId);

            //处理用户登录名
            {
                FormMetadata metadata     = FormMetaDataCache.GetCachedFormMetaData(contextByDataCenterId, FormIdConst.SEC_User);
                BusinessInfo businessInfo = metadata.BusinessInfo.GetSubBusinessInfo(new List <string> {
                    "FNumber", "FUserAccount", "FName"
                });
                DynamicObject dataObject = BusinessDataServiceHelper.LoadFromCache(contextByDataCenterId, new object[] { userId }, businessInfo.GetDynamicObjectType()).FirstOrDefault();
                contextByDataCenterId.UserId = dataObject.PkId <long>();
                if (businessInfo.GetField("FNumber") != null)
                {
                    contextByDataCenterId.LoginName = dataObject.FieldProperty <string>(businessInfo.GetField("FNumber"));
                }
                if (businessInfo.GetField("FUserAccount") != null)
                {
                    contextByDataCenterId.LoginName = dataObject.FieldProperty <string>(businessInfo.GetField("FUserAccount"));
                }
                contextByDataCenterId.UserName = dataObject.FieldProperty <string>(businessInfo.GetField("FName"));
            }

            return(contextByDataCenterId);
        }//end static method
コード例 #4
0
        public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e)
        {
            var viewService = ServiceHelper.GetService <IViewService>();
            var saveService = ServiceHelper.GetService <ISaveService>();

            var mirrorField     = this.BusinessInfo.GetField("FMirrorId").AsType <BaseDataField>();
            var supMetadata     = FormMetaDataCache.GetCachedFormMetaData(this.Context, mirrorField.LookUpObject.FormId);
            var supBusinessInfo = supMetadata.BusinessInfo.GetSubBusinessInfo("FPHMXContactId");
            var supField        = supBusinessInfo.GetField("FPHMXContactId").AsType <BaseDataField>();

            //获取物料数据包。
            var dataEntities = e.SelectedRows.Select(data => data.DataEntity)
                               .Where(data => data.FieldProperty <DynamicObject>(mirrorField) != null)
                               .Where(data => !data.PkId <string>().IsNullOrEmptyOrWhiteSpace())
                               .Where(data => !data.PkId <string>().EqualsIgnoreCase(data.FieldProperty <DynamicObject>(mirrorField).FieldRefProperty <DynamicObject>(mirrorField, "FPHMXContactId").PkId <string>()))
                               .Select(data =>
            {
                var sup = data.FieldProperty <DynamicObject>(mirrorField);
                supField.RefIDDynamicProperty.SetValue(sup, data.PkId <string>());                   //先把对应的主键赋值过去。
                return(sup);
            }).ToArray();

            if (!dataEntities.Any())
            {
                return;
            }

            //获取分配的数据包
            var masterIds = dataEntities.Select(data => data.MasterId()).Distinct().ToList();

            if (!masterIds.Any())
            {
                masterIds.Add(0);
            }
            var para = new QueryBuilderParemeter();

            para.FormId = mirrorField.LookUpObject.FormId;
            para.FilterClauseWihtKey = "FMasterId in (Select FID From TABLE(fn_StrSplit(@MasterIds,',',1))) and FSUPPLIERID <> FMasterId";
            para.SqlParams.Add(new SqlParam("@MasterIds", KDDbType.udt_inttable, masterIds));
            var allocateEntities = viewService.LoadFromCache(this.Context, mirrorField.RefFormDynamicObjectType, para);

            //为分配的数据包关联赋值。
            dataEntities.Join(allocateEntities,
                              left => left.MasterId <int>(),
                              right => right.MasterId <int>(),
                              (left, right) =>
            {
                supField.RefIDDynamicProperty.SetValue(right, left.FieldRefIdProperty <string>(supField));
                return(right);
            }).ToArray();
            //合并两个数据包,再补充里面字段数据包并无事务保存。
            var merge = dataEntities.Concat(allocateEntities).ToArray();

            if (merge.Any())
            {
                saveService.Save(this.Context, merge);
            }

            base.AfterExecuteOperationTransaction(e);
        } //end method
コード例 #5
0
        public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e)
        {
            base.AfterExecuteOperationTransaction(e);
            if (!e.DataEntitys.Any())
            {
                return;
            }
            var metas = this.FormOperation.AppBusinessService.Where(item => item.IsEnabled)
                        .Where(item => !item.IsForbidden)
                        .Where(item => item is AutoPushBusinessServiceMeta)
                        .Cast <AutoPushBusinessServiceMeta>()
                        .Where(item => item.RealSourceFormId.EqualsIgnoreCase(this.BusinessInfo.GetForm().Id))
                        .Where(item => item.TargetFormId.EqualsIgnoreCase(PIWMSFormPrimaryKey.Instance.InNotice()))
                        .ToArray();

            if (!metas.Any())
            {
                return;
            }
            var convertService   = ServiceHelper.GetService <IConvertService>();
            var doNothingService = ServiceHelper.GetService <IDoNothingService>();

            foreach (var meta in metas)
            {
                var rule = convertService.GetConvertRules(this.Context, meta.RealSourceFormId, meta.TargetFormId)
                           .Where(item => item.Status)
                           .Where(item => meta.ConvertRuleKey.IsNullOrEmptyOrWhiteSpace() ? item.IsDefault : meta.ConvertRuleKey.EqualsIgnoreCase(item.Key))
                           .FirstOrDefault();
                if (rule == null)
                {
                    continue;
                }

                var entryKey     = rule.GetDefaultConvertPolicyElement().SourceEntryKey;
                var selectedRows = e.DataEntitys.SelectMany(data => data.EntryProperty(this.BusinessInfo.GetEntity(entryKey))
                                                            .Where(entry => entry.FieldProperty <bool>(this.BusinessInfo.GetField(this.AutoPushFieldKey)))
                                                            .Select(entry => new { EntryId = entry.PkId().ToChangeTypeOrDefault <string>(), BillId = data.PkId().ToChangeTypeOrDefault <string>() }))
                                   .Select(a => new ListSelectedRow(a.BillId, a.EntryId, 0, rule.SourceFormId).Adaptive(row =>
                {
                    row.EntryEntityKey = entryKey;
                    return(row);
                })).ToArray();
                if (!selectedRows.Any())
                {
                    continue;
                }

                PushArgs pushArgs   = new PushArgs(rule, selectedRows);
                var      pushResult = convertService.Push(this.Context, pushArgs);
                this.OperationResult.MergeResult(pushResult);
                if (pushResult.IsSuccess)
                {
                    rule.TargetFormMetadata = FormMetaDataCache.GetCachedFormMetaData(this.Context, rule.TargetFormId);
                    var dataEntities = pushResult.TargetDataEntities.Select(data => data.DataEntity).ToArray();
                    var uploadResult = doNothingService.DoNothingWithDataEntity(this.Context, rule.TargetFormMetadata.BusinessInfo, dataEntities, "Upload");
                    this.OperationResult.MergeResult(uploadResult);
                } //end if
            }     //end foreach
        }         //end method
コード例 #6
0
        public override void OnPreparePropertys(PreparePropertysEventArgs e)
        {
            base.OnPreparePropertys(e);
            var metadata     = FormMetaDataCache.GetCachedFormMetaData(this.Context, this.BusinessInfo.GetForm().Id);
            var businessInfo = metadata.BusinessInfo;

            foreach (var field in businessInfo.GetFieldList())
            {
                e.FieldKeys.Add(field.Key);
            }
        }
コード例 #7
0
        /// <summary>
        /// 获取收货通知数据
        /// </summary>
        /// <param name="billno">收货通知单编号</param>
        /// <returns>返回服务结果。</returns>
        public ServiceResult ExecuteService(string billno)
        {
            var result = new ServiceResult <JSONObject>();
            var ctx    = this.KDContext.Session.AppContext;

            // 检查上下文对象
            if (this.IsContextExpired(result))
            {
                return(result);
            }
            // 检查传入参数
            if (string.IsNullOrWhiteSpace(billno))
            {
                result.Code    = (int)ResultCode.Fail;
                result.Message = "收货通知单编号不能为空!";
                return(result);
            }
            //获取相关信息
            try
            {
                //TODO:通过平台动态引擎获取数据
                var metadata       = FormMetaDataCache.GetCachedFormMetaData(ctx, "BAH_WMS_InNotice");
                var businessInfo   = metadata.BusinessInfo;
                var queryParameter = new QueryBuilderParemeter();
                queryParameter.FormId = businessInfo.GetForm().Id;
                queryParameter.FilterClauseWihtKey = "FDOCUMENTSTATUS = @FDOCUMENTSTATUS";
                queryParameter.SqlParams.Add(new SqlParam("@FDOCUMENTSTATUS", KDDbType.String, "C"));
                queryParameter.FilterClauseWihtKey = "FBillNo = @BillNo";
                queryParameter.SqlParams.Add(new SqlParam("@BillNo", KDDbType.String, billno));

                var               dataObjectCollection = BusinessDataServiceHelper.Load(ctx, businessInfo.GetDynamicObjectType(), queryParameter);
                JSONObject        Finaldata            = new JSONObject();
                List <JSONObject> return_data          = new List <JSONObject>();
                foreach (DynamicObject dataObject in dataObjectCollection)
                {
                    JSONObject data = new JSONObject();
                    data.Add("FID", dataObject["Id"].ToString());
                    data.Add("FNUMBER", dataObject["Number"].ToString());
                    data.Add("FName", dataObject["Name"].ToString());
                    return_data.Add(data);
                }
                Finaldata.Add("WareHouse", return_data);
                //返回数据
                result.Code    = (int)ResultCode.Success;
                result.Data    = Finaldata;
                result.Message = "成功返回数据!";
            }
            catch (Exception ex)
            {
                result.Code    = (int)ResultCode.Fail;
                result.Message = ex.Message;
            }
            return(result);
        }
コード例 #8
0
        /// <summary>
        /// 输入货主分类(组织、供应商、客户),获取货主数据
        /// </summary>

        /// <returns>返回服务结果。</returns>
        public ServiceResult ExecuteService(string formid)
        {
            var result = new ServiceResult <List <JSONObject> >();
            var ctx    = this.KDContext.Session.AppContext;

            // 检查上下文对象
            if (this.IsContextExpired(result))
            {
                return(result);
            }


            //获取相关信息
            try
            {
                //TODO:通过平台动态引擎获取数据
                var metadata       = FormMetaDataCache.GetCachedFormMetaData(ctx, "BAH_BD_Owner");
                var businessInfo   = metadata.BusinessInfo;
                var queryParameter = new QueryBuilderParemeter();
                queryParameter.FormId               = businessInfo.GetForm().Id;
                queryParameter.SelectItems          = SelectorItemInfo.CreateItems("FID,FNUMBER,FName");
                queryParameter.FilterClauseWihtKey  = "FDOCUMENTSTATUS = 'C' and FFORBIDSTATUS = 'A' and FFormId LIKE '%" + formid + "%' ";
                queryParameter.OrderByClauseWihtKey = "FNUMBER";
                var dataObjectCollection = QueryServiceHelper.GetDynamicObjectCollection(ctx, queryParameter);


                //queryParameter.FilterClauseWihtKey = "FDOCUMENTSTATUS = @FDOCUMENTSTATUS";
                //queryParameter.SqlParams.Add(new SqlParam("@FDOCUMENTSTATUS", KDDbType.String, "C"));
                //queryParameter.FilterClauseWihtKey = "FFORBIDSTATUS = @FFORBIDSTATUS";
                //queryParameter.SqlParams.Add(new SqlParam("@FFORBIDSTATUS", KDDbType.String, "A"));
                //var dataObjectCollection = BusinessDataServiceHelper.Load(ctx, businessInfo.GetDynamicObjectType(), queryParameter);
                JSONObject        Finaldata   = new JSONObject();
                List <JSONObject> return_data = new List <JSONObject>();
                foreach (DynamicObject dataObject in dataObjectCollection)
                {
                    JSONObject data = new JSONObject();
                    data.Add("FID", dataObject["FId"].ToString());
                    data.Add("FNUMBER", dataObject["FNumber"].ToString());
                    data.Add("FName", dataObject["FName"].ToString());
                    return_data.Add(data);
                }
                Finaldata.Add("Owner", return_data);
                //返回数据
                result.Code    = (int)ResultCode.Success;
                result.Data    = return_data;
                result.Message = "成功返回数据!";
            }
            catch (Exception ex)
            {
                result.Code    = (int)ResultCode.Fail;
                result.Message = ex.Message;
            }
            return(result);
        }
コード例 #9
0
        public override void AfterCreatePushArgs(AfterCreatePushArgsEventArgs e)
        {
            if (e.Rule.SourceFormId.EqualsIgnoreCase("PRD_PPBOM") && e.Rule.TargetFormId.EqualsIgnoreCase("PRD_PickMtrl"))
            {
                if (e.Rule.TargetFormMetadata == null)
                {
                    e.Rule.TargetFormMetadata = FormMetaDataCache.GetCachedFormMetaData(this.Context, e.Rule.TargetFormId);
                }//end if

                //给生产领料单默认的单据类型。
                e.PushArgs.TargetBillTypeId = e.Rule.TargetFormMetadata.BusinessInfo.GetBillTypeField().GetDefaultBillTypeInfo().PkId <string>();
            }//end if
        }
コード例 #10
0
        private void SelectDimensionValue(string formid, BeforeF7SelectEventArgs e, DimentionScopeType scopetype)
        {
            ListShowParameter parameter2 = new ListShowParameter {
                FormId             = formid,
                ParentPageId       = this.View.PageId,
                MultiSelect        = true,
                SyncCallBackAction = true,
                IsShowQuickFilter  = false,
                IsLookUp           = true
            };
            ListShowParameter param = parameter2;
            long iD = base.Context.CurrentOrganizationInfo.ID;

            if (this.GetBaseDataType("FCtrlDimensionEntry", e.Row, "Dimension") == "10")
            {
                param.FormId = "BOS_ASSISTANTDATA_SELECT";
                string str2 = string.Format("FID='{0}'", formid);
                if (str2.IsNullOrEmptyOrWhiteSpace())
                {
                    param.ListFilterParameter.Filter = str2;
                }
                else
                {
                    param.ListFilterParameter.Filter = param.ListFilterParameter.Filter.JoinFilterString(str2, "AND");
                }
                param.IsIsolationOrg = true;
                param.UseOrgId       = base.Context.CurrentOrganizationInfo.ID;
            }
            else if (OrganizationServiceHelper.GetBaseDataType(base.Context, formid) == 2)
            {
                FormMetadata cachedFormMetaData = FormMetaDataCache.GetCachedFormMetaData(base.Context, formid);
                string       pkFieldName        = cachedFormMetaData.BusinessInfo.GetForm().PkFieldName;
                string       masterPKFieldName  = cachedFormMetaData.BusinessInfo.GetForm().MasterPKFieldName;
                string       tableName          = cachedFormMetaData.BusinessInfo.Entrys[0].TableName;
                string       useOrgFieldKey     = cachedFormMetaData.BusinessInfo.GetForm().UseOrgFieldKey;
                param.ListFilterParameter.Filter = param.ListFilterParameter.Filter.JoinFilterString(string.Format(" {0}={1} and {1} in (select distinct {1} from {2} where  FDOCUMENTSTATUS='C' AND FFORBIDSTATUS='A' AND {3} ={4}) ", new object[] { pkFieldName, masterPKFieldName, tableName, useOrgFieldKey, iD }), "AND");
                param.IsIsolationOrg             = false;
            }
            else
            {
                param.IsIsolationOrg = true;
                param.UseOrgId       = base.Context.CurrentOrganizationInfo.ID;
            }
            param.OpenStyle.ShowType = ShowType.Modal;
            this.View.ShowForm(param, delegate(Kingdee.BOS.Core.DynamicForm.FormResult formResult) {
                if (formResult != null)
                {
                    this.FillSelectedDatas(formResult, e, scopetype);
                }
            });
        }
コード例 #11
0
        private void ReadData()
        {
            var    formMetaData   = FormMetaDataCache.GetCachedFormMetaData(this.Context, "PAE_ZyDemoBase3");
            var    dynamicObjType = formMetaData.BusinessInfo.GetDynamicObjectType();
            string result         = "";

            //根据内码来查询单据数据
            //DynamicObject dynamicObj= BusinessDataServiceHelper.LoadSingle(this.Context, "100001", dynamicObjType);
            //if (dynamicObj != null)
            //{
            //    this.View.ShowMessage(dynamicObj["BILLNO"].ToString());
            //}

            //根据内码查询多条数据
            //DynamicObject[] dynamicObjs = BusinessDataServiceHelper.Load(this.Context, new object[] { "100001","100002" }, dynamicObjType);
            //foreach (var obj in dynamicObjs)
            //{
            //    result += obj["BILLNO"].ToString() + ",";
            //}
            //this.View.ShowMessage(result);

            //根据自定义的查询条件来查询单据数据

            //QueryBuilderParemeter query = new QueryBuilderParemeter();
            //query.FormId = "PAE_ZyDemoBase3";
            //query.FilterClauseWihtKey = "FBillNo='F001'";
            //query.BusinessInfo = formMetaData.BusinessInfo;
            ////query.SelectItems.Add(new Kingdee.BOS.Core.Metadata.SelectorItemInfo("BillNo"));
            //DynamicObject[] dynamicObjs = BusinessDataServiceHelper.Load(this.Context, dynamicObjType, query);
            //foreach (var obj in dynamicObjs)
            //{
            //    result += obj["BILLNO"].ToString() + ",";
            //}
            //this.View.ShowMessage(result);

            //自定义查询条件以及查询列
            //List<SelectorItemInfo> selectItems = new List<SelectorItemInfo>();
            //selectItems.Add(new SelectorItemInfo("FBillNo"));
            //selectItems.Add(new SelectorItemInfo("F_PAE_Base"));
            //OQLFilter oFilter = new OQLFilter();
            //oFilter.Add(new OQLFilterHeadEntityItem() { FilterString = "FBillNo='F001'" });
            //oFilter.Add(new OQLFilterHeadEntityItem() { EntityKey="FEntity" ,FilterString="F_PAE_Base=110958" });
            //oFilter.Add(new OQLFilterHeadEntityItem() { EntityKey="FEntity" ,FilterString="F_PAE_Base.FNumber='CH4441'" });
            //DynamicObject[] dynamicObjs = BusinessDataServiceHelper.Load(this.Context,"PAE_ZyDemoBase3", selectItems, oFilter);
            //foreach (var obj in dynamicObjs)
            //{
            //    result += obj["BILLNO"].ToString() + ",";
            //}
            //this.View.ShowMessage(result);
        }
コード例 #12
0
        }//end method

        public static DynamicObject[] LoadFromCache(this IEnumerable <DynamicObject> dataObject, Context ctx, string formId, Func <DynamicObject, object> selector = null, params string[] fieldKeys)
        {
            var metadata     = FormMetaDataCache.GetCachedFormMetaData(ctx, formId);
            var businessInfo = metadata.BusinessInfo.Adaptive(info =>
            {
                if (fieldKeys != null && fieldKeys.Length > 0)
                {
                    return(info.GetSubBusinessInfo(fieldKeys.ToList()));
                }
                else
                {
                    return(info);
                }
            });

            return(LoadFromCache(dataObject, ctx, businessInfo.GetDynamicObjectType(), selector));
        }//end method
コード例 #13
0
        public override void EndOperationTransaction(EndOperationTransactionArgs e)
        {
            base.EndOperationTransaction(e);
            if (!e.DataEntitys.Any())
            {
                return;
            }

            var metadata     = FormMetaDataCache.GetCachedFormMetaData(this.Context, this.BusinessInfo.GetForm().Id);
            var businessInfo = metadata.BusinessInfo;
            var saveService  = ServiceHelper.GetService <ISaveService>();

            var option = this.Option.Copy();

            option.SetIgnoreWarning(true);
            option.SetIgnoreInteractionFlag(true);
            saveService.Save(this.Context, businessInfo, e.DataEntitys, option)
            .ThrowWhenUnSuccess(op => op.GetResultMessage());
        }
コード例 #14
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
コード例 #15
0
        private QueryBuilderParemeter GetQBPara(CheckPara para, string formKey, string tableName, string entryFormKey)
        {
            FormMetadata          formMetadata = FormMetaDataCache.GetCachedFormMetaData(this.Context, formKey);
            QueryBuilderParemeter qbPara       = new QueryBuilderParemeter();

            qbPara.FormId = formKey;
            qbPara.FilterClauseWihtKey = string.Format(" FJNUnitEnzymes <> {0} And {1} ={2} And {3} = {4} And {5}={6} And {7} = '{8}' ",
                                                       para.unitEnzymes, formMetadata.BusinessInfo.MainOrgField.FieldName, para.orgId, matFldKey, para.matId, "FAuxPropId", para.auxPropId, "FLOT_TEXT", para.lotNumber);
            if (para.currFormKey.EqualsIgnoreCase(formKey))
            {
                qbPara.FilterClauseWihtKey += string.Format(" And {2}_{0} <> {1} ", para.currEnFldName, para.currentEntryId, entryFormKey);
            }
            if (para.tableName == tableName)
            {
                qbPara.FilterClauseWihtKey += string.Format(" And FID not in ({0})", para.linkId);
            }
            qbPara.SelectItems = SelectorItemInfo.CreateItems("FBillNo,FMaterialId.FNumber as FMatNumber,FMaterialId.FName as FMatName,FJNUnitEnzymes");

            return(qbPara);
        }
コード例 #16
0
        public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e)
        {
            var mirrorField  = this.BusinessInfo.GetField("FMirrorId").AsType <BaseDataField>();
            var orgMetadata  = FormMetaDataCache.GetCachedFormMetaData(this.Context, mirrorField.LookUpObject.FormId);
            var orgFieldKeys = mirrorField.GetRefPropertyKeys();

            if (orgFieldKeys.Any(key => !key.EqualsIgnoreCase("FPHMXContactId")))
            {
                orgFieldKeys.Add("FPHMXContactId");
            }
            var orgBusinessInfo = orgMetadata.BusinessInfo.GetSubBusinessInfo(orgFieldKeys);
            var orgField        = orgBusinessInfo.GetField("FPHMXContactId").AsType <BaseDataField>();

            //获取物料数据包。
            var dataEntities = e.SelectedRows.Select(data => data.DataEntity)
                               .Where(data => data.FieldProperty <DynamicObject>(mirrorField) != null)
                               .Where(data => !data.PkId <string>().IsNullOrEmptyOrWhiteSpace())
                               .Where(data => !data.PkId <string>().EqualsIgnoreCase(data.FieldProperty <DynamicObject>(mirrorField).FieldRefProperty <DynamicObject>(mirrorField, "FPHMXContactId").PkId <string>()))
                               .Select(data =>
            {
                var org = data.FieldProperty <DynamicObject>(mirrorField);
                orgField.RefIDDynamicProperty.SetValue(org, data.PkId <string>());                   //先把对应的主键赋值过去。
                return(org);
            }).ToArray();

            //再补充里面字段数据包并无事务保存。
            if (dataEntities.Any())
            {
                var viewService = ServiceHelper.GetService <IViewService>();
                dataEntities.Mend(orgField, ids => viewService.LoadFromCache(this.Context, ids, this.BusinessInfo.GetSubBusinessInfo(orgField.GetRefPropertyKeys()).GetDynamicObjectType()));

                var saveSevice = ServiceHelper.GetService <ISaveService>();
                saveSevice.Save(this.Context, dataEntities);
            }

            base.AfterExecuteOperationTransaction(e);
        } //end method
コード例 #17
0
        /// <summary>
        /// 在检验单的保存或审核时,会把酶活相关数据反写到收料单,导致收料单上的酶活量跟批次号主档资料里面的跟踪信息对不上,这里重新保存一下收料单以便刷新批号主档资料
        /// </summary>
        /// <param name="e"></param>
        public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e)
        {
            base.AfterExecuteOperationTransaction(e);

            if (e.DataEntitys.IsEmpty())
            {
                return;
            }

            string sql = @"/*dialect*/   
                        update t set t.FSECQTY =x.FACTRECEIVEQTY * x.FJNUnitEnzymes 
	                    from  T_QM_INSPECTBILL a   
	                    inner join T_QM_INSPECTBILLENTRY b on a.fid=b.fid
	                    inner join  T_QM_INSPECTBILLENTRY_LK c on b.FENTRYID =c.FENTRYID  and c.FRULEID ='QM_PURReceive2Inspect'  
	                    inner join  T_PUR_ReceiveEntry x on x.FENTRYID =c.fsid and x.fid =c.FSBILLID 
	                    inner join  T_PUR_Receive y on x.FID =y.fid  
	                    inner join T_BD_LOTMASTERBILLTRACE t on FBILLFORMID ='PUR_ReceiveBill'  and t.fbillid=x.FID and t.FBILLENTRYID =x.FENTRYID  
	                    inner join T_BD_LOTMASTER tt on t.FLOTID =tt.FLOTID 
	                    where  a.fid ={0} ;"    ;

            List <string> sqlLst           = new List <string>();
            FormMetadata  billTypeFormMeta = FormMetaDataCache.GetCachedFormMetaData(this.Context, "PUR_ReceiveBill");
            var           dyType           = billTypeFormMeta.BusinessInfo.GetDynamicObjectType();

            foreach (var item in e.DataEntitys)
            {
                sqlLst.Add(string.Format(sql, item["Id"]));
            }
            if (sqlLst.Count > 0)
            {
                DBUtils.ExecuteBatch(this.Context, sqlLst, 50);
            }

            CacheUtil.ClearCache(this.Context.DBId, "PUR_ReceiveBill");
            CacheUtil.ClearCache(this.Context.DBId, "BD_BatchMainFile");
        }
コード例 #18
0
        }//end method

        /// <summary>
        /// 执行上查删除目标单据。
        /// </summary>
        /// <param name="ctx">上下文对象。</param>
        /// <param name="genArgs">生成目标单据参数。</param>
        /// <param name="filter">过滤条件。</param>
        /// <param name="sqlParam">SQL参数。</param>
        /// <returns>返回操作结果。</returns>
        public IOperationResult Pull(Context ctx, GenTargetArgs[] genArgs)
        {
            var operationResult = new OperationResult();

            if (!genArgs.Any())
            {
                return(operationResult);
            }

            var viewService      = ServiceHelper.GetService <IViewService>();
            var saveService      = ServiceHelper.GetService <ISaveService>();
            var doNothingService = ServiceHelper.GetService <IDoNothingService>();
            var unloadOption     = default(OperateOption);

            var group = genArgs.GroupBy(g => new { g.ObjectTypeId, g.TargetFormId }).Select(g => new
            {
                Key     = g.Key,
                BillIds = g.Select(b => b.BillId).Distinct().ToArray()
            }).ToArray();


            foreach (var g in group)
            {
                var metadata     = FormMetaDataCache.GetCachedFormMetaData(ctx, g.Key.TargetFormId);
                var businessInfo = metadata.BusinessInfo;
                var dataEntities = viewService.Load(ctx, businessInfo.GetDynamicObjectType(), new QueryBuilderParemeter().Adaptive(para =>
                {
                    para.FormId = g.Key.TargetFormId;
                    para.FilterClauseWihtKey = "FPHMXWMSFormId <> '' AND FPHMXWMSFormId = @FormId AND FPHMXWMSBillId IN (SELECT FID FROM TABLE(fn_StrSplit(@BillIds,',',1)))";
                    para.SqlParams.Add(new SqlParam("@FormId", KDDbType.String, g.Key.ObjectTypeId));
                    para.SqlParams.Add(new SqlParam("@BillIds", KDDbType.udt_inttable, g.BillIds));
                }));
                if (!dataEntities.Any())
                {
                    continue;
                }

                //在回撤之前,把仓网单据类型设为空,
                //如果不设置,单据无法删除。
                foreach (var data in dataEntities)
                {
                    businessInfo.GetField("FPHMXWMSFormId").AsType <BaseDataField>().Adaptive(field =>
                    {
                        field.RefIDDynamicProperty.SetValue(data, string.Empty);
                        field.DynamicProperty.SetValue(data, null);
                    });
                }//end foreach
                saveService.Save(ctx, dataEntities);

                //调用回撤操作完成反审核、撤销、删除一系列操作。
                var uploadOperation = metadata.BusinessInfo.GetForm().FormOperations.Where(operation => operation.Operation.Contains("Unload")).FirstOrDefault();
                if (uploadOperation == null)
                {
                    throw new KDBusinessException(string.Empty, "未配置有效的回撤操作!");
                }//end if

                unloadOption = OperateOption.Create();
                unloadOption.SetIgnoreWarning(true);
                unloadOption.SetIgnoreInteractionFlag(true);
                unloadOption.SetThrowWhenUnSuccess(false);
                try
                {
                    var unloadResult = doNothingService.DoNothingWithDataEntity(ctx, metadata.BusinessInfo, dataEntities, uploadOperation.Operation, unloadOption);
                    operationResult.MergeResult(unloadResult);
                }
                catch
                {
                    var inner = unloadOption.GetVariableValue <IOperationResult>(BOSConst.CST_KEY_OperationResultKey);
                    if (inner != null)
                    {
                        operationResult.MergeResult(inner);
                    }
                    else
                    {
                        throw;
                    }
                }
            }//end foreach

            return(operationResult);
        }//end method
コード例 #19
0
ファイル: SPPickMtrlBench.cs プロジェクト: chuandongwang/Star
        public override void AfterCreateTargetData(AfterCreateTargetDataEventArgs e)
        {
            if (!e.Rule.TargetFormId.EqualsIgnoreCase("SP_PickMtrl"))
            {
                return;
            }


            var billService  = this.View.AsDynamicFormViewService();
            var businessInfo = this.View.Model.BillBusinessInfo;



            //匹配源数据。
            var entryKey = e.Rule.Policies.Where(p => p is DefaultConvertPolicyElement)
                           .Select(p => p.ToType <DefaultConvertPolicyElement>())
                           .FirstOrDefault().TargetEntryKey;

            entryKey = entryKey.IsNullOrEmptyOrWhiteSpace() ? "FBillHead" : entryKey;
            var entryLinkKey = businessInfo.GetForm().LinkSet.LinkEntitys.FirstOrDefault().Key;

            var entryCollection = this.View.Model.GetEntityDataObject(businessInfo.GetEntity(entryKey));
            var entryArray      = entryCollection.ToArray();
            var materialField   = businessInfo.GetField("FMaterialId").AsType <BaseDataField>();
            var stockField      = businessInfo.GetField("FStockId").AsType <BaseDataField>();

            var rows = e.Rows.ToList();

            foreach (var entry in entryArray)
            {
                var sources = rows.Join(entry.Property <DynamicObjectCollection>(entryLinkKey),
                                        left => new { SourceEntryId = left.SId, SourceBillId = left.SBillId },
                                        right => new { SourceEntryId = right.Property <long>("SId"), SourceBillId = right.Property <long>("SBillId") },
                                        (left, right) => left).ToArray();
                if (!sources.Any())
                {
                    entryCollection.Remove(entry);
                    continue;
                }//end if

                for (int i = 0; i < sources.Count(); i++)
                {
                    var entryIndex = entryCollection.IndexOf(entry);
                    var rowIndex   = entryIndex + i;
                    if (i > 0)
                    {
                        this.View.Model.CopyEntryRow(entryKey, entryIndex, rowIndex, true);
                    }//end if

                    var item = sources.ElementAt(i);

                    //库存单位。
                    if (this.View.Model.GetValue("FUnitID", rowIndex).AsType <DynamicObject>().PkId <int>() != this.View.Model.GetValue("FBaseUnitId", rowIndex).AsType <DynamicObject>().PkId <int>())
                    {
                        billService.SetItemValueByID("FUnitID", this.View.Model.GetValue("FBaseUnitId", rowIndex).AsType <DynamicObject>().PkId <int>(), rowIndex);
                    }//end if

                    //实发数量。
                    billService.UpdateValue("FActualQty", rowIndex, item.Cty > 0 ? item.Cty : item.Qty);

                    //库存辅单位。
                    if (materialField.Adaptive(field => this.View.Model.GetValue(field, rowIndex).AsType <DynamicObject>().FieldRefProperty <DynamicObject>(field, "FAuxUnitId")) != null &&
                        materialField.Adaptive(field => this.View.Model.GetValue(field, rowIndex).AsType <DynamicObject>().FieldRefProperty <DynamicObject>(field, "FAuxUnitId")).PkId <int>() != this.View.Model.GetValue("FSecUnitId", rowIndex).AsType <DynamicObject>().PkId <int>())
                    {
                        billService.SetItemValueByID("FSecUnitId", materialField.Adaptive(field => this.View.Model.GetValue(field, rowIndex).AsType <DynamicObject>().FieldRefProperty <DynamicObject>(field, "FAuxUnitId")), rowIndex);
                    }//end if

                    //库存辅单位数量
                    if (materialField.Adaptive(field => this.View.Model.GetValue(field, rowIndex).AsType <DynamicObject>().FieldRefProperty <DynamicObject>(field, "FAuxUnitId")) != null)
                    {
                        billService.UpdateValue("FSecActualQty", rowIndex, item.Qty);
                    }//end if

                    //仓库
                    if (this.View.Model.GetValue("FStockId", rowIndex) == null)
                    {
                        billService.SetItemValueByID("FStockId", this.View.Model.GetValue(materialField, rowIndex).AsType <DynamicObject>().FieldRefProperty <DynamicObject>(materialField, "FStockId").PkId <int>(), rowIndex);
                    }//end if

                    //仓位
                    if (stockField.Adaptive(field => this.View.Model.GetValue(field, rowIndex).AsType <DynamicObject>().FieldRefProperty <bool>(field, "FIsOpenLocation")) &&
                        this.View.Model.GetValue("FStockLocId", rowIndex) == null)
                    {
                        billService.SetItemValueByID("FStockLocId", this.View.Model.GetValue(materialField, rowIndex).AsType <DynamicObject>().FieldRefProperty <DynamicObject>(materialField, "FStockPlaceId").PkId <int>(), rowIndex);
                    }//end if

                    //批号
                    if (materialField.Adaptive(field => this.View.Model.GetValue(field, rowIndex).AsType <DynamicObject>().FieldRefProperty <bool>(field, "FIsBatchManage")))
                    {
                        billService.UpdateValue("FLot", rowIndex, item.LotNo);
                    }//end if

                    //生产日期+有效期至
                    if (materialField.Adaptive(field => this.View.Model.GetValue(field, rowIndex).AsType <DynamicObject>().FieldRefProperty <bool>(field, "FIsKFPeriod")))
                    {
                        billService.UpdateValue("FProduceDate", rowIndex, item.ProduceDate.Value);
                        billService.UpdateValue("FExpiryDate", rowIndex, item.ExpiryDate.Value);
                    }//end if

                    //匹配完成后,从待处理列表中移除。
                    rows.Remove(item);
                } //end for
            }     //end foreach

            //如果匹配结束后,列表里仍有数据,说明只下推了部分行,必须抛出异常进行阻止。
            if (rows.Any())
            {
                if (e.Rule.SourceFormMetadata == null)
                {
                    e.Rule.SourceFormMetadata = FormMetaDataCache.GetCachedFormMetaData(this.Context, e.Rule.SourceFormId);
                }
                if (e.Rule.TargetFormMetadata == null)
                {
                    e.Rule.TargetFormMetadata = FormMetaDataCache.GetCachedFormMetaData(this.Context, e.Rule.TargetFormId);
                }

                var attention = e.Rows.Select(row => new
                {
                    FormId = row.Parent.ObjectTypeId,
                    BillNo = row.Parent.BillNo
                })
                                .Distinct()
                                .Select(a => new
                {
                    FormName = FormMetaDataCache.GetCachedFormMetaData(this.Context, a.FormId).Name,
                    a.BillNo
                })
                                .Select(a => string.Concat(a.FormName, a.BillNo))
                                .ToArray()
                                .Adaptive(array => string.Join("、", array));

                //准备反馈的抱错信息。
                var message = string.Format("从{0}下推{1}出现未完全下推的现象,请检查{2}上游单据的状态。",
                                            e.Rule.SourceFormMetadata.Name.Value(this.Context),
                                            e.Rule.TargetFormMetadata.Name.Value(this.Context),
                                            attention);
                throw new KDBusinessException(string.Empty, message);
            } //end if
        }     //end method
コード例 #20
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
コード例 #21
0
        public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e)
        {
            //(列表中批量审核场景下)取出所有数据包
            var queryService = ServiceHelper.GetService <IQueryService>();
            var viewService  = ServiceHelper.GetService <IViewService>();
            var dataEntites  = e.SelectedRows
                               .Select(data => data.DataEntity)
                               .ToArray();

            if (!dataEntites.Any())
            {
                return;
            }

            //取出所有的MasterId
            var    OrgIds       = dataEntites.Select(data => data.PkId <int>()).ToArray();
            string targetFormId = "BAH_BD_Organization";

            //找到对应普华物料的主键
            QueryBuilderParemeter para = new QueryBuilderParemeter();

            para.FormId              = targetFormId;
            para.SelectItems         = SelectorItemInfo.CreateItems("FID", "FMIRRORID");
            para.FilterClauseWihtKey = "FMirrorId in (Select FID From TABLE(fn_StrSplit(@OrgIds,',',1)))";
            para.SqlParams.Add(new SqlParam("@OrgIds", KDDbType.udt_inttable, OrgIds));
            var ids       = queryService.GetDynamicObjectCollection(this.Context, para).Select(data => data.Property <object>("FID")).ToArray();
            var mirrorids = queryService.GetDynamicObjectCollection(this.Context, para).Select(data => data.Property <int>("FMIRRORID")).ToArray();

            //用得到的主键去获取普华物料数据包
            var targetMetadata    = FormMetaDataCache.GetCachedFormMetaData(this.Context, targetFormId);
            var targetBillView    = targetMetadata.CreateBillView(this.Context);
            var targetBillService = targetBillView.AsDynamicFormViewService();
            var targetDataObjects = viewService.LoadFromCache(this.Context, ids, targetMetadata.BusinessInfo.GetDynamicObjectType()).ToList();

            //如果两边的数据包可以被关联,那么直接对应修改。
            dataEntites.Join(targetDataObjects,
                             left => left.PkId <int>(),
                             right => right.FieldProperty <DynamicObject>(targetMetadata.BusinessInfo.GetField("FMirrorId")).PkId <int>(),
                             (left, right) =>
            {
                targetBillView.Edit(right);
                targetBillService.UpdateValue("FNumber", -1, left.BDNumber());
                targetBillService.UpdateValue("FName", -1, new LocaleValue(left.BDName(this.Context)));
                return(right);
            }).ToArray();

            //如果数据包没有关联,则新增
            var unmatchDataEntities = dataEntites.Where(data => (mirrorids.Contains(data.PkId <int>()) == false))
                                      .ToArray();
            var addDataObjects = new List <DynamicObject>();

            foreach (var data in unmatchDataEntities)
            {
                targetBillView.AddNew();
                targetBillService.UpdateValue("FNumber", -1, data.BDNumber());
                targetBillService.UpdateValue("FName", -1, new LocaleValue(data.BDName(this.Context)));
                targetBillService.SetItemValueByID("FMirrorId", data.PkId <int>(), -1);
                addDataObjects.Add(targetBillView.Model.DataObject);
            }
            //合并待操作数据
            targetDataObjects.AddRange(addDataObjects);
            if (targetDataObjects.Any())
            {
                targetDataObjects.DoNothing(this.Context, targetMetadata.BusinessInfo, "Upload").Adaptive(op => this.OperationResult.MergeResult(op));
            }

            base.AfterExecuteOperationTransaction(e);
        }
コード例 #22
0
ファイル: YDLCommService.cs プロジェクト: gordonjie/VTRERP
        private string GetOrgFldKey(Context ctx, string formKey)
        {
            FormMetadata md = FormMetaDataCache.GetCachedFormMetaData(ctx, formKey);

            return(md.BusinessInfo.MainOrgField.Key);
        }
コード例 #23
0
        /// <summary>
        /// 获取收货通知数据
        /// </summary>
        /// <param name="billno">收货通知单编号</param>
        /// <returns>返回服务结果。</returns>
        public ServiceResult ExecuteService(string billno)
        {
            var result = new ServiceResult <JSONObject>();
            var ctx    = this.KDContext.Session.AppContext;

            // 检查上下文对象
            if (this.IsContextExpired(result))
            {
                return(result);
            }
            // 检查传入参数
            if (string.IsNullOrWhiteSpace(billno))
            {
                result.Code    = (int)ResultCode.Fail;
                result.Message = "收货通知单编号不能为空!";
                return(result);
            }
            //获取相关信息
            try
            {
                //TODO:通过平台动态引擎获取数据
                var metadata       = FormMetaDataCache.GetCachedFormMetaData(ctx, "BAH_WMS_InNotice");
                var businessInfo   = metadata.BusinessInfo;
                var queryParameter = new QueryBuilderParemeter();
                queryParameter.FormId = businessInfo.GetForm().Id;
                queryParameter.FilterClauseWihtKey = "FDOCUMENTSTATUS = @FDOCUMENTSTATUS";
                queryParameter.SqlParams.Add(new SqlParam("@FDOCUMENTSTATUS", KDDbType.String, "C"));
                queryParameter.FilterClauseWihtKey = "FBillNo = @BillNo";
                queryParameter.SqlParams.Add(new SqlParam("@BillNo", KDDbType.String, billno));
                var        dataObject  = BusinessDataServiceHelper.Load(ctx, businessInfo.GetDynamicObjectType(), queryParameter).FirstOrDefault();
                JSONObject return_data = new JSONObject();
                //表头单据号信息
                return_data.Add("FBillNo", billno);
                //表头仓库信息
                return_data.Add("FBatchWHId", dataObject.FieldProperty <DynamicObject>(businessInfo.GetField("FBatchWHId")).PkId <String>());
                return_data.Add("FBatchWHNumber", businessInfo.GetField("FBatchWHId").AsType <BaseDataField>().Adaptive(field => dataObject.FieldProperty <DynamicObject>(field).FieldRefProperty <string>(field, "Number")));
                return_data.Add("FBatchWHName", dataObject.FieldProperty <DynamicObject>(businessInfo.GetField("FBatchWHId")).BDName(ctx));
                //表头货主信息
                return_data.Add("FBatchOwnerId", dataObject.FieldProperty <DynamicObject>(businessInfo.GetField("FBatchOwnerId")).PkId <String>());
                return_data.Add("FBatchOwnerNumber", businessInfo.GetField("FBatchOwnerId").AsType <BaseDataField>().Adaptive(field => dataObject.FieldProperty <DynamicObject>(field).FieldRefProperty <string>(field, "Number")));
                return_data.Add("FBatchOwnerName", dataObject.FieldProperty <DynamicObject>(businessInfo.GetField("FBatchOwnerId")).BDName(ctx));
                //表头供应商信息
                return_data.Add("FContactId", dataObject.FieldProperty <DynamicObject>(businessInfo.GetField("FContactId")).PkId <String>());
                return_data.Add("FContactNumber", businessInfo.GetField("FContactId").AsType <BaseDataField>().Adaptive(field => dataObject.FieldProperty <DynamicObject>(field).FieldRefProperty <string>(field, "Number")));
                return_data.Add("FContactName", dataObject.FieldProperty <DynamicObject>(businessInfo.GetField("FContactId")).BDName(ctx));
                return_data.Add("FContactFormName", businessInfo.GetField("FContactId").AsType <BaseDataField>().Adaptive(field => dataObject.FieldProperty <DynamicObject>(field).FieldRefProperty <DynamicObject>(field, "FFormId")).BDName(ctx));


                DynamicObjectCollection mat_objc    = dataObject.EntryProperty(businessInfo.GetEntity("FEntity"));
                List <JSONObject>       detail_list = new List <JSONObject>();
                //获取明细信息数据
                foreach (DynamicObject data in mat_objc)
                {
                    JSONObject each_detail = new JSONObject();
                    //each_detail.Add("FCUSTMATNUMBER", businessInfo.GetField("FCUSTMATID").AsType<BaseDataField>().Adaptive(field => data.FieldProperty<DynamicObject>(field).FieldRefProperty<string>(field, "Number")));
                    each_detail.Add("FTrackNo", data["TrackNo"].ToString());
                    each_detail.Add("FWrapNo", data["WrapNo"].ToString());
                    each_detail.Add("FOwnerId", data.FieldProperty <DynamicObject>(businessInfo.GetField("FOwnerId")).BDName(ctx));
                    each_detail.Add("FWHId", data.FieldProperty <DynamicObject>(businessInfo.GetField("FWHId")).BDName(ctx));
                    each_detail.Add("FAreaId", businessInfo.GetField("FLocId").AsType <BaseDataField>().Adaptive(field => data.FieldProperty <DynamicObject>(field).FieldRefProperty <DynamicObject>(field, "FAreaId")).BDName(ctx));
                    each_detail.Add("FLocId", data.FieldProperty <DynamicObject>(businessInfo.GetField("FLocId")).BDName(ctx));
                    //each_detail.Add("FMATERIALID", data.FieldProperty<DynamicObject>(businessInfo.GetField("FMATERIALID")).PkId<int>());
                    //each_detail.Add("FMATERIALNUMBER", businessInfo.GetField("FMATERIALID").AsType<BaseDataField>().Adaptive(field => data.FieldProperty<DynamicObject>(field).FieldRefProperty<String>(field, "Number")));
                    //each_detail.Add("FMATERIALNAME", data.FieldProperty<DynamicObject>(businessInfo.GetField("FMATERIALID")).BDName(ctx));
                    //each_detail .Add("FSPECIFICATION", businessInfo.GetField("FMATERIALID").AsType<BaseDataField>().Adaptive(field => data.FieldProperty<DynamicObject>(field).FieldRefProperty<LocaleValue>(field, "Specification").Value(ctx)));
                    detail_list.Add(each_detail);
                }
                return_data.Add("DetailList", detail_list);
                //返回数据
                result.Code    = (int)ResultCode.Success;
                result.Data    = return_data;
                result.Message = "成功返回数据!";
            }
            catch (Exception ex)
            {
                result.Code    = (int)ResultCode.Fail;
                result.Message = ex.Message;
            }
            return(result);
        }
コード例 #24
0
        public static IRptParams CreateFromSysReportFilterScheme(this IRptParams rpt, Context ctx, FormMetadata reportMetadata, Func <ICommonFilterModelService, string> schemeSelector)
        {
            //字段比较条件元数据。
            var filterMetadata = FormMetaDataCache.GetCachedFilterMetaData(ctx);

            //账表元数据。
            var reportFormId = reportMetadata.BusinessInfo.GetForm().Id;

            //过滤条件元数据。
            var reportFilterFormId          = reportMetadata.BusinessInfo.GetForm().FilterObject;
            var reportFilterMetadata        = FormMetaDataCache.GetCachedFormMetaData(ctx, reportFilterFormId);
            var reportFilterServiceProvider = reportFilterMetadata.BusinessInfo.GetForm().GetFormServiceProvider();

            //过滤方案元数据。
            var schemeFormId   = FormIdConst.BOS_FilterScheme;
            var schemeMetadata = FormMetaDataCache.GetCachedFormMetaData(ctx, schemeFormId);

            //用户参数元数据。
            var parameterDataFormId   = reportMetadata.BusinessInfo.GetForm().ParameterObjectId;
            var parameterDataMetadata = FormMetaDataCache.GetCachedFormMetaData(ctx, parameterDataFormId);

            var model = new SysReportFilterModel();

            model.SetContext(ctx, reportFilterMetadata.BusinessInfo, reportFilterServiceProvider);
            model.FormId = reportFilterFormId;
            model.FilterObject.FilterMetaData = filterMetadata;
            model.InitFieldList(reportMetadata, reportFilterMetadata);
            model.GetSchemeList();

            //方案加载,返回选中的过滤方案主键。
            schemeSelector = schemeSelector != null ? schemeSelector : s => { model.LoadDefaultScheme(); return(string.Empty); };
            var schemeId = schemeSelector(model);

            //打开参数,暂时不指定任何项。
            var openParameter = new Dictionary <string, object>();

            //如果指定了过滤方案,则根据过滤方案查找创建用户。
            long userId = -1L;

            if (!string.IsNullOrWhiteSpace(schemeId))
            {
                var schemeBusinessInfo = schemeMetadata.BusinessInfo.GetSubBusinessInfo(new List <string> {
                    "FUserID"
                });
                userId = BusinessDataServiceHelper.LoadSingle(ctx, schemeId, schemeBusinessInfo.GetDynamicObjectType())
                         .FieldProperty <long>(schemeBusinessInfo.GetField("FUserID"));
            }//end if

            //加载用户参数数据包。
            var parameterData = UserParamterServiceHelper.Load(ctx, parameterDataMetadata.BusinessInfo, userId, reportFormId, KeyConst.USERPARAMETER_KEY);

            IRptParams p = new RptParams();

            p.CustomParams.Add(KeyConst.OPENPARAMETER_KEY, openParameter);
            p.FormId          = reportFilterFormId;
            p.StartRow        = 1;
            p.EndRow          = int.MaxValue;//StartRow和EndRow是报表数据分页的起始行数和截至行数,一般取所有数据,所以EndRow取int最大值。
            p.FilterParameter = model.GetFilterParameter();
            p.FilterFieldInfo = model.FilterFieldInfo;
            p.BaseDataTempTable.AddRange(PermissionServiceHelper.GetBaseDataTempTable(ctx, reportFormId));
            p.ParameterData = parameterData;

            return(p);
        }//end static method
コード例 #25
0
        public override void AfterExecuteOperationTransaction(AfterExecuteOperationTransaction e)
        {
            base.AfterExecuteOperationTransaction(e);

            //TODO:
            //0.泛亚场景,当Id和MasterId相同时,才触发同步事件。
            //1.准备物料的数据包,e.DataEntities,取物料MasterId。
            //2.用MasterId关联查询普华智造里物料MirrorId,通过这个步骤知道,哪些需要修改(调用Save方法),哪些需要新增(调用Draft方法)。
            //3.需要修改的,直接关联同步修改。
            //4.需要新增的,通过表单代理直接创建新数据包。
            //5.统一调用上传操作。

            //(列表中批量审核场景下)取出所有数据包
            var queryService = ServiceHelper.GetService <IQueryService>();
            var viewService  = ServiceHelper.GetService <IViewService>();
            var dataEntites  = e.SelectedRows
                               .Select(data => data.DataEntity)
                               .Where(data => data.FieldProperty <bool>(this.BusinessInfo.GetField("FPHMXEnablePHManagement")))
                               .Where(data => data.PkId <int>() == data.MasterId <int>())
                               .ToArray();

            if (!dataEntites.Any())
            {
                return;
            }

            //取出所有的MasterId
            var    masterIds    = dataEntites.Select(data => data.PkId <int>()).ToArray();
            string targetFormId = PIBDFormPrimaryKey.Instance.Material();

            //找到对应普华物料的主键
            QueryBuilderParemeter para = new QueryBuilderParemeter();

            para.FormId              = targetFormId;
            para.SelectItems         = SelectorItemInfo.CreateItems("FID", "FMIRRORID");
            para.FilterClauseWihtKey = "FMirrorId in (Select FID From TABLE(fn_StrSplit(@MasterIds,',',1)))";
            para.SqlParams.Add(new SqlParam("@MasterIds", KDDbType.udt_inttable, masterIds));
            var ids       = queryService.GetDynamicObjectCollection(this.Context, para).Select(data => data.Property <object>("FID")).ToArray();
            var mirrorids = queryService.GetDynamicObjectCollection(this.Context, para).Select(data => data.Property <int>("FMIRRORID")).ToArray();

            //用得到的主键去获取普华物料数据包
            var targetMetadata     = FormMetaDataCache.GetCachedFormMetaData(this.Context, targetFormId);
            var targetBusinessInfo = targetMetadata.BusinessInfo;
            var targetBillView     = targetMetadata.CreateBillView(this.Context);
            var targetBillService  = targetBillView.AsDynamicFormViewService();
            var targetDataObjects  = viewService.LoadFromCache(this.Context, ids, targetBusinessInfo.GetDynamicObjectType()).ToList();

            //如果两边的数据包可以被关联,那么直接对应修改。
            dataEntites.Join(targetDataObjects,
                             left => left.MasterId <int>(),
                             right => right.FieldProperty <DynamicObject>(targetMetadata.BusinessInfo.GetField("FMirrorId")).MasterId <int>(),
                             (left, right) =>
            {
                targetBillView.Edit(right);
                targetBillService.UpdateValue("FNumber", -1, left.BDNumber());
                targetBillService.UpdateValue("FName", -1, new LocaleValue(left.BDName(this.Context)));
                targetBillService.UpdateValue("FSpecification", -1, new LocaleValue(left.FieldProperty <LocaleValue>(this.BusinessInfo.GetField("FSpecification")).Value(this.Context)));

                //基本
                left.SubHeadProperty(this.BusinessInfo.GetEntity("SubHeadEntity"))
                .Adaptive(sub =>
                {
                    this.BusinessInfo.GetField("FBaseUnitId").AsType <BaseDataField>()
                    .Adaptive(field =>
                    {
                        if (!sub.FieldProperty <DynamicObject>(field).FieldRefProperty <bool>(field, "FPHMXEA") ||
                            left.SubHeadProperty(this.BusinessInfo.GetEntity("SubHeadEntity1")).FieldProperty <decimal>(this.BusinessInfo.GetField("FPHMXStdCty")) > 0M)
                        {
                            targetBillService.UpdateValue("FEnableCapacity", -1, true);
                            targetBillService.UpdateValue("FCapacityUnit", -1, new LocaleValue(sub.FieldProperty <DynamicObject>(field).BDName(this.Context)));
                            targetBillService.UpdateValue("FCapacityScale", -1, sub.FieldProperty <DynamicObject>(field).FieldRefProperty <int>(field, "FPrecision"));
                        }                            //end if
                    });
                });

                //库存
                var pkgId = left.SubHeadProperty(this.BusinessInfo.GetEntity("SubHeadEntity1")).FieldProperty <DynamicObject>(this.BusinessInfo.GetField("FPHMXPkgId")).PkId <string>();
                if (!pkgId.IsNullOrEmptyOrWhiteSpace())
                {
                    var entries = targetBillView.Model.GetEntityDataObject(targetBusinessInfo.GetEntity("FPackageEntry"));
                    if (entries.Any(entry => entry.FieldProperty <DynamicObject>(targetBusinessInfo.GetField("FEntryPackageId")).PkId <string>().EqualsIgnoreCase(pkgId)) == false)
                    {
                        targetBillView.Model.InsertEntryRow("FPackageEntry", 0);
                        targetBillService.SetItemValueByID("FEntryPackageId", pkgId, 0);
                    }                    //end if

                    //设置标准容量。
                    entries.Where(entry => targetBillView.Model.GetValue("FEnableCapacity").ToType <bool>() && entry.FieldProperty <DynamicObject>(targetBusinessInfo.GetField("FEntryPackageId")).PkId <string>().EqualsIgnoreCase(pkgId))
                    .FirstOrDefault()
                    .Adaptive(pkg =>
                    {
                        if (pkg != null)
                        {
                            var index = entries.IndexOf(pkg);
                            targetBillService.UpdateValue("FStdCty", index, left.SubHeadProperty(this.BusinessInfo.GetEntity("SubHeadEntity1")).FieldProperty <decimal>(this.BusinessInfo.GetField("FPHMXStdCty")));
                        }                           //end if
                    });

                    //设置默认包装。
                    targetBillService.SetItemValueByID("FPackageId", pkgId, -1);
                }                    //end if

                //设置有效期。
                if (targetBillView.Model.GetValue("FEnableExpiry").ToType <bool>())
                {
                    targetBillService.UpdateValue("FExpPeriod", -1, left.SubHeadProperty(this.BusinessInfo.GetEntity("SubHeadEntity1")).FieldProperty <int>(this.BusinessInfo.GetField("FExpPeriod")));
                    targetBillService.UpdateValue("FExpUnit", -1, left.SubHeadProperty(this.BusinessInfo.GetEntity("SubHeadEntity1")).FieldProperty <string>(this.BusinessInfo.GetField("FExpUnit")));
                }                    //end if
                return(right);
            }).ToArray();

            //如果数据包没有关联,则新增
            var unmatchDataEntities = dataEntites.Where(data => (mirrorids.Contains(data.MasterId <int>()) == false))
                                      .ToArray();

            foreach (var data in unmatchDataEntities)
            {
                targetBillView.AddNew();
                targetBillService.UpdateValue("FNumber", -1, data.BDNumber());
                targetBillService.UpdateValue("FName", -1, new LocaleValue(data.BDName(this.Context)));
                targetBillService.UpdateValue("FSpecification", -1, new LocaleValue(data.FieldProperty <LocaleValue>(this.BusinessInfo.GetField("FSpecification")).Value(this.Context)));

                //基本
                data.SubHeadProperty(this.BusinessInfo.GetEntity("SubHeadEntity"))
                .Adaptive(sub =>
                {
                    this.BusinessInfo.GetField("FBaseUnitId").AsType <BaseDataField>()
                    .Adaptive(field =>
                    {
                        if (!sub.FieldProperty <DynamicObject>(field).FieldRefProperty <bool>(field, "FPHMXEA"))
                        {
                            targetBillService.UpdateValue("FEnableCapacity", -1, true);
                            targetBillService.UpdateValue("FCapacityUnit", -1, new LocaleValue(sub.FieldProperty <DynamicObject>(field).BDName(this.Context)));
                            targetBillService.UpdateValue("FCapacityScale", -1, sub.FieldProperty <DynamicObject>(field).FieldRefProperty <int>(field, "FPrecision"));
                        }        //end if
                    });
                });

                //库存
                data.SubHeadProperty(this.BusinessInfo.GetEntity("SubHeadEntity1"))
                .Adaptive(sub =>
                {
                    //设置分录包装。
                    var pkgId = sub.FieldProperty <DynamicObject>(this.BusinessInfo.GetField("FPHMXPkgId")).PkId <string>();
                    if (targetBusinessInfo.GetEntity("FPackageEntry").DefaultRows < 1)
                    {
                        targetBillView.Model.InsertEntryRow("FPackageEntry", 0);
                    }
                    targetBillService.SetItemValueByID("FEntryPackageId", pkgId, 0);

                    if (targetBillView.Model.GetValue("FEnableCapacity").ToType <bool>())
                    {
                        targetBillService.UpdateValue("FStdCty", 0, sub.FieldProperty <decimal>(this.BusinessInfo.GetField("FPHMXStdCty")));
                    }    //end if

                    //设置默认包装。
                    targetBillService.SetItemValueByID("FPackageId", pkgId, -1);
                });
                targetBillService.UpdateValue("FEnableLot", -1, data.SubHeadProperty(this.BusinessInfo.GetEntity("SubHeadEntity1")).FieldProperty <bool>(this.BusinessInfo.GetField("FIsBatchManage")));
                targetBillService.UpdateValue("FEnableExpiry", -1, data.SubHeadProperty(this.BusinessInfo.GetEntity("SubHeadEntity1")).FieldProperty <bool>(this.BusinessInfo.GetField("FIsKFPeriod")));
                targetBillService.UpdateValue("FExpPeriod", -1, data.SubHeadProperty(this.BusinessInfo.GetEntity("SubHeadEntity1")).FieldProperty <int>(this.BusinessInfo.GetField("FExpPeriod")));
                targetBillService.UpdateValue("FExpUnit", -1, data.SubHeadProperty(this.BusinessInfo.GetEntity("SubHeadEntity1")).FieldProperty <string>(this.BusinessInfo.GetField("FExpUnit")));
                targetBillService.UpdateValue("FLotExpiryUnique", -1, data.SubHeadProperty(this.BusinessInfo.GetEntity("SubHeadEntity1")).FieldProperty <bool>(this.BusinessInfo.GetField("FIsExpParToFlot")));
                targetBillService.SetItemValueByID("FMirrorId", data.PkId <int>(), -1);
                targetDataObjects.Add(targetBillView.Model.DataObject);
            }//end foreach

            //统一调用上传操作。
            if (targetDataObjects.Any())
            {
                var op = targetDataObjects.DoNothing(this.Context, targetBusinessInfo, "Upload");
                this.OperationResult.MergeResult(op);
            } //end if
        }     //end method
コード例 #26
0
        }//end method

        /// <summary>
        /// 执行下推生成目标单据。
        /// </summary>
        /// <param name="ctx">上下文对象。</param>
        /// <param name="args">生成目标单据参数。</param>
        /// <returns>返回操作结果。</returns>
        public IOperationResult Push(Context ctx, GenTargetArgs[] genArgs)
        {
            var operationResult = new OperationResult();

            if (!genArgs.Any())
            {
                return(operationResult);
            }

            var convertService   = ServiceHelper.GetService <IConvertService>();
            var doNothingService = ServiceHelper.GetService <IDoNothingService>();
            var uploadOption     = default(OperateOption);

            var proxy = new BillBenchPlugInProxy();

            foreach (var arg in genArgs)
            {
                //初始化单据工作台代理。
                var metadata       = FormMetaDataCache.GetCachedFormMetaData(ctx, arg.TargetFormId);
                var billView       = metadata.CreateBillView(ctx);
                var executeContext = new BOSActionExecuteContext(billView);
                proxy.Initialize(ctx, billView);

                var rule = convertService.GetConvertRule(ctx, arg.ConvertRuleId, true).Adaptive(item => item == null ? default(ConvertRuleElement) : item.Rule);
                if (rule == null)
                {
                    throw new KDBusinessException(string.Empty, "未配置有效的单据转换规则!");
                }

                var sourceEntryKey = rule.Policies.Where(p => p is DefaultConvertPolicyElement)
                                     .Select(p => p.ToType <DefaultConvertPolicyElement>())
                                     .FirstOrDefault().SourceEntryKey;
                var selectedRows = arg.DataRows.Select(row => new ListSelectedRow(row.SBillId.ToString(), row.SId.ToString(), 0, arg.SourceFormId)
                {
                    EntryEntityKey = sourceEntryKey
                }).ToArray();
                PushArgs pushArgs = new PushArgs(rule, selectedRows);
                proxy.FireAfterCreatePushArgs(new AfterCreatePushArgsEventArgs(rule, pushArgs));
                var pushResult = convertService.Push(ctx, pushArgs);
                operationResult.MergeResult(pushResult);

                //整理下推生成的数据包。
                var dataEntities = pushResult.TargetDataEntities.Select(data => data.DataEntity).ToArray();

                //逐行赋值。
                foreach (var data in dataEntities)
                {
                    billView.Edit(data);
                    billView.RuleContainer.Suspend();
                    billView.Model.SetValue("FDate", arg.Date);
                    billView.Model.SetItemValueByID("FPHMXWMSFormId", arg.ObjectTypeId, -1);
                    billView.Model.SetValue("FPHMXWMSBillId", arg.BillId.ToString());
                    billView.Model.SetValue("FPHMXWMSBillNo", arg.BillNo);
                    proxy.FireAfterCreateTargetData(new AfterCreateTargetDataEventArgs(rule, operationResult, arg.DataRows));
                    billView.RuleContainer.Resume(executeContext);
                }//end foreach

                //调用上传操作完成暂存、保存、提交、审核一系列操作。
                var uploadOperation = metadata.BusinessInfo.GetForm().FormOperations.Where(operation => operation.Operation.Contains("Upload")).FirstOrDefault();
                if (uploadOperation == null)
                {
                    throw new KDBusinessException(string.Empty, "未配置有效的上传操作!");
                }//end if

                uploadOption = OperateOption.Create();
                uploadOption.SetIgnoreWarning(true);
                uploadOption.SetIgnoreInteractionFlag(true);
                uploadOption.SetThrowWhenUnSuccess(false);
                proxy.FireBeforeUploadTargetData(new BeforeUploadTargetDataEventArgs(rule, dataEntities, arg, uploadOption));

                try
                {
                    var uploadResult = doNothingService.DoNothingWithDataEntity(ctx, metadata.BusinessInfo, dataEntities, uploadOperation.Operation, uploadOption);
                    operationResult.MergeResult(uploadResult);
                }
                catch
                {
                    var inner = uploadOption.GetVariableValue <IOperationResult>(BOSConst.CST_KEY_OperationResultKey);
                    if (inner != null)
                    {
                        operationResult.MergeResult(inner);
                    }
                    else
                    {
                        throw;
                    }
                } //end catch
            }     //end foreach

            return(operationResult);
        }//end method
コード例 #27
0
        public ServiceResult ExecuteService(string data)
        {
            ServiceResult result = new ServiceResult();

            if (data.IsNullOrEmptyOrWhiteSpace())
            {
                return(result);
            }
            String EnableCapacity;
            var    ctx = this.KDContext.Session.AppContext;

            // 检查传入字符串数据
            if (this.IsContextExpired(result))
            {
                return(result);
            }
            // 检查传入参数
            if (string.IsNullOrWhiteSpace(data))
            {
                result.Code    = (int)ResultCode.Fail;
                result.Message = "传入表单数据不能为空!";
                return(result);
            }
            try
            {
                //序列化
                JavaScriptSerializer Serializer = new JavaScriptSerializer();
                //List<InputData> input = JsonConvert.DeserializeObject<List<InputData>>(data);
                List <FinalInputData> FinalInput = new List <FinalInputData>();
                List <InputData>      Input      = Serializer.Deserialize <List <InputData> >(data);
                FinalInput = Input.GroupBy(x => x.FCONTACTID).Select(x => new FinalInputData {
                    FCONTACTID = x.Key, FinalInputDataGroupByContactId = x.ToList()
                }).ToList();

                foreach (var items in FinalInput)
                {
                    var formId      = "BAH_WMS_OutNotice";
                    var metadata    = FormMetaDataCache.GetCachedFormMetaData(ctx, formId);
                    var billView    = metadata.CreateBillView(ctx);
                    var billService = billView.AsDynamicFormViewService();
                    billView.AddNew();

                    billService.SetItemValueByNumber("FBillTypeId", items.FinalInputDataGroupByContactId.FirstOrDefault().FBillTypeNumber, -1);

                    billService.SetItemValueByID("FPHMXTargetFormId", items.FinalInputDataGroupByContactId.FirstOrDefault().FPHMXTargetFormId, -1); //



                    billService.SetItemValueByNumber("FPHMXConvertRuleId", items.FinalInputDataGroupByContactId.FirstOrDefault().FPHMXConvertRuleNumber, -1);

                    billService.SetItemValueByID("FBatchWHId", items.FinalInputDataGroupByContactId.FirstOrDefault().FWHID, -1);
                    billService.SetItemValueByID("FBatchOwnerId", items.FinalInputDataGroupByContactId.FirstOrDefault().FOWNERID, -1);
                    billService.SetItemValueByID("FContactId", items.FCONTACTID, -1);
                    billService.SetItemValueByNumber("FPHMXProduceId", items.FinalInputDataGroupByContactId.FirstOrDefault().FPHMXProduceId, -1);

                    billView.Model.BatchCreateNewEntryRow("FEntity", items.FinalInputDataGroupByContactId.Count());
                    for (int i = 0; i < items.FinalInputDataGroupByContactId.Count(); i++)
                    {
                        JSONObject datas = new JSONObject();
                        billView.Model.SetItemValueByID("FMaterialId", items.FinalInputDataGroupByContactId[i].FMaterialId, i);
                        billView.Model.SetItemValueByID("FLocId", items.FinalInputDataGroupByContactId[i].FFromLocId, i);
                        billView.Model.SetItemValueByID("FTrackNo", items.FinalInputDataGroupByContactId[i].FTrackNo, i);

                        DynamicObject           FMaterialId  = billView.Model.GetValue("FMaterialId", i) as DynamicObject;
                        DynamicObjectCollection WarehouseSub = FMaterialId["WarehouseSub"] as DynamicObjectCollection;
                        EnableCapacity = WarehouseSub.FirstOrDefault()["EnableCapacity"].ToString();
                        billView.Model.SetItemValueByID("FPackageId", items.FinalInputDataGroupByContactId[i].FPackageId, i);
                        //billView.Model.SetValue("FDirectionForQty", input[i].FDirectionForQty, i);
                        if (EnableCapacity == "False")
                        {
                            billView.Model.SetValue("FQty", items.FinalInputDataGroupByContactId[i].FQty, i);
                            billView.Model.SetItemValueByID("FUnitId", items.FinalInputDataGroupByContactId[i].FUnitId, i);
                        }
                        else
                        {
                            if (items.FinalInputDataGroupByContactId[i].FAvgCty == 0)
                            {
                                billView.Model.SetValue("FAvgCty", items.FinalInputDataGroupByContactId[i].FAvgCty, i);
                                billView.Model.SetValue("FCty", items.FinalInputDataGroupByContactId[i].FCty, i);
                            }
                            else
                            {
                                billView.Model.SetValue("FAvgCty", items.FinalInputDataGroupByContactId[i].FAvgCty, i);
                                billView.Model.SetValue("FQty", items.FinalInputDataGroupByContactId[i].FQty, i);
                                billView.Model.SetItemValueByID("FUnitId", items.FinalInputDataGroupByContactId[i].FUnitId, i);
                            }
                        }
                    } //
                    billView.Model.ClearNoDataRow();
                    //var op = billView.Model.DataObject.DoNothing(ctx, billView.BillBusinessInfo, "Upload");
                    bool op  = billView.InvokeFormOperation("Save");
                    bool op1 = billView.InvokeFormOperation("Submit");
                    bool op2 = billView.InvokeFormOperation("Audit");
                    List <OutboundDetailLinkInDetailDto.OutboundDetailEntryLinkInNotice> pushdatas = new List <OutboundDetailLinkInDetailDto.OutboundDetailEntryLinkInNotice>();

                    for (int i = 0; i < items.FinalInputDataGroupByContactId.Count(); i++)
                    {
                        OutboundDetailLinkInDetailDto.OutboundDetailEntryLinkInNotice pushdata = new OutboundDetailLinkInDetailDto.OutboundDetailEntryLinkInNotice();
                        pushdata.SourceEntryId = (long)billView.Model.GetEntryPKValue("FEntity", i);
                        pushdata.PHMXWgt       = items.FinalInputDataGroupByContactId[i].FPHMXWgt;
                        pushdatas.Add(pushdata);
                    }
                    var back = CreateNewBillsFromInNoticeEntities(ctx, pushdatas);
                    //foreach (var entry in billView.Model.)
                    //{

                    //}
                    result.Code    = op2 == true ? 1 : 0;
                    result.Message = op2 == true ? "成功生成" : "生成失败";
                    billView.Close();
                }
            }
            catch (Exception ex)
            {
                result.Code    = (int)ResultCode.Fail;
                result.Message = ex.Message;
                Logger.Error(this.GetType().AssemblyQualifiedName, ex.Message, ex);
            }
            return(result);
        }
コード例 #28
0
ファイル: MoveInventory.cs プロジェクト: chuandongwang/Star
        public ServiceResult ExecuteService(string data)
        {
            ServiceResult result = new ServiceResult();
            String        EnableCapacity;

            if (data.IsNullOrEmptyOrWhiteSpace())
            {
                return(result);
            }

            var ctx = this.KDContext.Session.AppContext;

            // 检查传入字符串数据
            if (this.IsContextExpired(result))
            {
                return(result);
            }
            // 检查传入参数
            if (string.IsNullOrWhiteSpace(data))
            {
                result.Code    = (int)ResultCode.Fail;
                result.Message = "传入表单数据不能为空!";
                return(result);
            }
            try
            {
                //序列化
                JavaScriptSerializer Serializer = new JavaScriptSerializer();
                List <Ajust>         input      = Serializer.Deserialize <List <Ajust> >(data);
                //
                var formId      = "BAH_WMS_Move";
                var metadata    = FormMetaDataCache.GetCachedFormMetaData(ctx, formId);
                var billView    = metadata.CreateBillView(ctx);
                var billService = billView.AsDynamicFormViewService();
                billView.AddNew();
                var items = input[0];
                billService.SetItemValueByID("FBatchFromWHId", items.FFROMWHID, -1);
                billService.SetItemValueByID("FBatchFromOwnerId", items.FFROMOWNERID, -1);
                //
                billView.Model.ClearNoDataRow();
                billView.Model.BatchCreateNewEntryRow("FEntity", input.Count());
                for (int i = 0; i < input.Count(); i++)
                {
                    billView.Model.SetItemValueByID("FMaterialId", input[i].FMaterialId, i);
                    DynamicObject FMaterialId = billView.Model.GetValue("FMaterialId", i) as DynamicObject;
                    if (FMaterialId == null)
                    {
                        result.Code    = (int)ResultCode.Fail;
                        result.Message = "该物料不存在或已禁用!";
                        return(result);
                    }
                    else
                    {
                        DynamicObjectCollection WarehouseSub = FMaterialId["WarehouseSub"] as DynamicObjectCollection;
                        EnableCapacity = WarehouseSub.FirstOrDefault()["EnableCapacity"].ToString();
                    }

                    billView.Model.SetValue("FFromTrackNo", input[i].FFROMTrackNo, i);
                    billView.Model.SetItemValueByID("FFromLocId", input[i].FFROMLocId, i);
                    billView.Model.SetItemValueByID("FToLocId", input[i].FTOLocId, i);
                    billView.Model.SetValue("FToTrackNo", input[i].FTOTrackNo, i);
                    //billView.Model.SetItemValueByID("FPackageId",input[i].FPackageId, i);
                    billView.Model.SetItemValueByID("FFromPackageId", input[i].FFromPackageId, i);
                    billView.Model.SetValue("FExpPeriod", input[i].FExpPeriod, i);
                    billView.Model.SetValue("FExpUnit", input[i].FExpUnit, i);
                    if (EnableCapacity == "False")
                    {
                        billView.Model.SetValue("FFromQty", input[i].FFromQty, i);
                        billView.Model.SetItemValueByID("FFromUnitId", input[i].FFromUnitId, i);
                    }
                    else
                    {
                        if (input[i].FFromAvgCty > 0)
                        {
                            billView.Model.SetValue("FFromAvgCty", input[i].FFromAvgCty, i);
                            billView.Model.SetValue("FFromQty", input[i].FFromQty, i);
                            billView.Model.SetItemValueByID("FFromUnitId", input[i].FFromUnitId, i);
                        }
                        else
                        {
                            billView.Model.SetValue("FFromAvgCty", input[i].FFromAvgCty, i);
                            billView.Model.SetValue("FFromQty", input[i].FFromQty, i);
                            billView.Model.SetValue("FFromCty", input[i].FFromCty, i);
                        }
                    }
                    billView.Model.SetValue("FLotNo", input[i].FLotNo, i);
                    if (input[i].FProduceDate != null)
                    {
                        billView.Model.SetValue("FProduceDate", input[i].FProduceDate, i);
                    }
                }
                billView.Model.ClearNoDataRow();
                var op = billView.Model.DataObject.DoNothing(ctx, billView.BillBusinessInfo, "Upload");
                result.Code    = op.IsSuccess ? (int)ResultCode.Success : (int)ResultCode.Fail;
                result.Message = op.GetResultMessage();
            }
            catch (Exception ex)
            {
                result.Code    = (int)ResultCode.Fail;
                result.Message = ex.Message;
                Logger.Error(this.GetType().AssemblyQualifiedName, ex.Message, ex);
            }
            return(result);
        }