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
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