根据实体全称、公私有段、段序号、私有段的名称值、组织ID、数据中心组织ID查找出这个私有段(值集)
SQL执行存储过程
因为很多时候调用存储过程都是通用代码调用,所以需要当前登录组织跟数据中心组织两个组织编码,因为私有段是实体值集类型的时候,对应实体可能不维护在当前组织而是在数据中心
比如供应商值集很多时候都是在数据中心,存储过程SH_GetFlexFieldCodeByName内部会先按照当前组织ID查找,没找到就按照数据中心查找
DECLARE @ResultCode NVARCHAR(500) -- 用于接收返回的编码
DECLARE @Name NVARCHAR(500) = N'维生素EC颗粒'
EXEC [dbo].[SH_GetFlexFieldCodeByName]
@FullName = 'UFIDA.U9.CBO.SCM.Item.ItemMaster', -- 实体全称
@ContextValue = 'Private', -- 上下文: 'Public' (公有段) 或 'Private' (私有段)
@DNumber = 14, -- 段号: 对应 PrivateDescSeg14
@Name = @Name, -- 要查找的显示名称 (注意加 N 前缀防止乱码)
@Org = 1002406210000526, -- 当前组织
@CenterOrg = 1002406210000054, -- 数据中心组织 (需要数据中心组织是因为比如供应商档案可能不在当前组织,在数据中心)
@ResultCode = @ResultCode OUTPUT -- 标记为输出参数
SELECT @ResultCode AS [FoundCode] --如果不为NULL,说明找到了对应的编码
示例(自定义值集)
料品私有段14,自定义值集项目大类


示例(实体值集)
料品私有段15,实体类型值集项目


示例(自定义枚举)
部门私有段1,枚举类型的值集


代码调用存储过程
orgID可以赋值Base.Context.LoginOrg.ID
centerOrgId可以读取配置也可以写死(一般数据中心ID不会发生变化)
fullName可以使用实体.EntityRes.BE_FullName,比如 ItemMaster.EntityRes.BE_FullName
/// <summary>
/// 根据扩展字段的显示名称反向获取编码
/// </summary>
public static string GetCodeFromSP(string fullName, string context, int dNumber, string name, long orgId, long centerOrgId)
{
DataParamList pars = new DataParamList
{
DataParamFactory.CreateInput("FullName", fullName),
DataParamFactory.CreateInput("ContextValue", context),
DataParamFactory.CreateInput("DNumber", dNumber, DbType.Int32),
DataParamFactory.CreateInput("Name", name),
DataParamFactory.CreateInput("Org", orgId, DbType.Int64),
DataParamFactory.CreateInput("CenterOrg", centerOrgId, DbType.Int64),
DataParamFactory.CreateOutput("ResultCode", DbType.String)
};
DataAccessor.RunSP("SH_GetFlexFieldCodeByName", pars);
if (pars["ResultCode"].Value != null && pars["ResultCode"].Value != DBNull.Value)
{
return pars["ResultCode"].Value.ToString();
}
return null;
}
调用示例
long orgId = Base.Context.LoginOrg.ID; // 当前登录组织ID
long centerOrgId = OpenApiConfig.GetInt64("CenterOrgId", 0); // 数据中心ID(读取配置)
string 值集值编码 = GetCodeFromSP(ItemMaster.EntityRes.BE_FullName, "Private", 14, "值集值名称", orgId, centerOrgId);
存储过程SH_GetFlexFieldCodeByName
/****** Object: StoredProcedure [dbo].[SH_GetFlexFieldCodeByName] Script Date: 2026/01/30 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF EXISTS (SELECT 1 FROM sysobjects WHERE id = object_id(N'[dbo].[SH_GetFlexFieldCodeByName]') AND xtype = 'P' )
BEGIN
DROP PROCEDURE [dbo].[SH_GetFlexFieldCodeByName]
END
GO
/*
功能:根据扩展字段的显示名称反向获取存储编码 (Name -> Code)
应用场景:接口传入“名称”,系统自动转换为“编码”存入 Pub/Pri 字段
*/
CREATE PROC [dbo].[SH_GetFlexFieldCodeByName]
(
@FullName VARCHAR(100), -- 宿主实体的全名 (如 UFIDA.U9.CBO.SCM.Item.ItemMaster)
@ContextValue VARCHAR(80), -- 上下文 (Public 或 Global/Private)
@DNumber INT, -- 段号 (1-50 或 1-30)
@Name NVARCHAR(500), -- 要查找的名称值
@Org BIGINT = 0, -- 当前组织ID
@CenterOrg BIGINT = 0, -- 数据中心组织ID (用于兜底查找)
@ResultCode NVARCHAR(500) OUTPUT -- 【输出参数】找到的编码
)
AS
BEGIN
SET NOCOUNT ON;
SET @ResultCode = NULL;
-- 如果名称为空,无需查找
IF ISNULL(@Name, '') = '' RETURN;
-- 0. 参数标准化处理
IF @ContextValue = 'Private' SET @ContextValue = 'Global';
-- 1. 变量定义
DECLARE @IsPublicSeg BIT
DECLARE @RealNumber INT
IF @ContextValue = 'Public'
BEGIN
SET @IsPublicSeg = 1
SET @RealNumber = @DNumber
END
ELSE
BEGIN
SET @IsPublicSeg = 0
SET @RealNumber = @DNumber
END
-- 2. 获取该段的定义信息
DECLARE @ValidateEnum INT
DECLARE @ValueType INT
DECLARE @ValueSetDefID BIGINT
SELECT
@ValidateEnum = E.ValidateType,
@ValueType = E.ValueType,
@ValueSetDefID = E.ID
FROM UBF_MD_Class A
INNER JOIN Base_DescFlexFieldDef B ON A.Local_ID = B.EntityType
INNER JOIN Base_DescFlexContext C ON B.ID = C.DescFlexFieldDef
INNER JOIN Base_DescFlexSegment D ON C.ID = D.DescFlexContext
INNER JOIN base_valuesetdef E ON D.ValueSetDef = E.ID
WHERE A.FullName = @FullName
AND C.ContextValue = @ContextValue
AND D.Number = @DNumber
IF @ValidateEnum IS NULL RETURN;
-- 3. 根据校验类型分别处理
----------------------------------------------------------------
-- 类型 1: 实体引用 (Entity) - 包含回退逻辑
----------------------------------------------------------------
IF @ValidateEnum = 1
BEGIN
DECLARE @TargetTableName NVARCHAR(100)
DECLARE @CodeColName NVARCHAR(100)
DECLARE @NameColName NVARCHAR(100)
DECLARE @NameIsGlob BIT
DECLARE @HasOrgColumn INT
DECLARE @BaseSQL NVARCHAR(MAX) -- 基础查询语句
DECLARE @FinalSQL NVARCHAR(MAX)
DECLARE @ParamDef NVARCHAR(500)
-- 获取目标实体对应的表名、编码列、名称列信息
SELECT
@TargetTableName = cc.DefaultTableName,
@CodeColName = codeAtt.Name,
@NameColName = NameAtt.Name,
@NameIsGlob = NameAtt.IsGlobalization
FROM base_valuesetdef a
LEFT JOIN UBF_MD_Class cc ON a.EntityType = cc.Local_ID
LEFT JOIN UBF_MD_Attribute codeAtt ON a.CodeAttribute = codeAtt.Local_ID
LEFT JOIN UBF_MD_Attribute NameAtt ON a.NameAttribute = NameAtt.Local_ID
WHERE a.ID = @ValueSetDefID
IF @TargetTableName IS NOT NULL AND @CodeColName IS NOT NULL AND @NameColName IS NOT NULL
BEGIN
-- 检查目标表是否有 Org 字段
SELECT @HasOrgColumn = COUNT(1) FROM sys.columns WHERE object_id = OBJECT_ID(@TargetTableName) AND name = 'Org'
-- 构建基础查询 SQL (不包含 Org 条件)
SET @BaseSQL = 'SELECT TOP 1 @Out = A.[' + @CodeColName + '] FROM ' + @TargetTableName + ' A '
IF @NameIsGlob = 1
BEGIN
SET @BaseSQL = @BaseSQL + ' INNER JOIN ' + @TargetTableName + '_Trl B ON A.ID = B.ID '
SET @BaseSQL = @BaseSQL + ' WHERE B.[' + @NameColName + '] = @InName '
END
ELSE
BEGIN
SET @BaseSQL = @BaseSQL + ' WHERE A.[' + @NameColName + '] = @InName '
END
SET @ParamDef = N'@InName NVARCHAR(500), @InOrg BIGINT, @Out NVARCHAR(500) OUTPUT';
-- A. 尝试在当前组织查找
IF @HasOrgColumn > 0 AND @Org > 0
BEGIN
SET @FinalSQL = @BaseSQL + ' AND A.Org = @InOrg '
EXEC sp_executesql @FinalSQL, @ParamDef, @InName = @Name, @InOrg = @Org, @Out = @ResultCode OUTPUT;
END
ELSE
BEGIN
-- 如果表没有Org字段,直接查即可,不需要过滤组织
EXEC sp_executesql @BaseSQL, @ParamDef, @InName = @Name, @InOrg = 0, @Out = @ResultCode OUTPUT;
END
-- B. 兜底逻辑:如果没找到,且表有Org字段,且提供了不同的中心组织ID
IF @ResultCode IS NULL AND @HasOrgColumn > 0 AND @CenterOrg > 0 AND @CenterOrg <> @Org
BEGIN
SET @FinalSQL = @BaseSQL + ' AND A.Org = @InOrg '
-- 这里传入 @CenterOrg 作为 @InOrg 参数
EXEC sp_executesql @FinalSQL, @ParamDef, @InName = @Name, @InOrg = @CenterOrg, @Out = @ResultCode OUTPUT;
END
END
END
----------------------------------------------------------------
-- 类型 4: 枚举 (Enum)
----------------------------------------------------------------
ELSE IF @ValidateEnum = 4
BEGIN
SELECT TOP 1 @ResultCode = ev.Code
FROM base_valuesetdef a
INNER JOIN UBF_MD_Class cc ON a.EnumType = cc.Local_ID
INNER JOIN UBF_Sys_ExtEnumType extType ON extType.UID = cc.ID
INNER JOIN UBF_Sys_ExtEnumValue ev ON extType.ID = ev.ExtEnumType
INNER JOIN UBF_Sys_ExtEnumValue_Trl evt ON ev.ID = evt.ID
WHERE a.ID = @ValueSetDefID
AND evt.Name = @Name
END
----------------------------------------------------------------
-- 类型 3: 自定义值集 (Custom)
----------------------------------------------------------------
ELSE IF @ValidateEnum = 3
BEGIN
DECLARE @CustomSQL NVARCHAR(MAX)
DECLARE @CustomParam NVARCHAR(500)
SET @CustomSQL = N'SELECT TOP 1 @Out = Code FROM dbo.f_getdefinevalue(@InFull, @InNum, @InCtx) WHERE Name = @InName'
SET @CustomParam = N'@InFull VARCHAR(100), @InNum INT, @InCtx VARCHAR(80), @InName NVARCHAR(500), @Out NVARCHAR(500) OUTPUT'
EXEC sp_executesql @CustomSQL, @CustomParam,
@InFull = @FullName, @InNum = @DNumber, @InCtx = @ContextValue, @InName = @Name,
@Out = @ResultCode OUTPUT
END
----------------------------------------------------------------
-- 类型 2: 无档案/简单值 (Simple)
----------------------------------------------------------------
ELSE IF @ValidateEnum = 2
BEGIN
IF @ValueType = 5
BEGIN
IF @Name = '是' OR @Name = '√' OR @Name = 'Yes' OR @Name = 'True' OR @Name = '1'
SET @ResultCode = 'True'
ELSE
SET @ResultCode = 'False'
END
ELSE
BEGIN
SET @ResultCode = @Name
END
END
END
GO
扩展 - 接口自动查询并赋值
配置文件读取:【069】配置文件读取 - 月光一线
调用示例
reqInfo.PubPriDt是PubPriSVData
// 客户
var cusDto = new ISV.Customer.CustomerDTOData();
// ......客户Dto赋值
cusDto.DescFlexField = Utils.SetDescFlex(cusDto.DescFlexField, reqInfo.PubPriDt, Customer.EntityRes.BE_FullName);
// 客户位置
var siteDto = new ISV.Customer.CustomerSiteDTOData();
// ......客户位置Dto赋值
siteDto.DescFlexField = Utils.SetDescFlex(siteDto.DescFlexField, siteInfo.PubPriDt, CustomerSite.EntityRes.BE_FullName);
Utils
using System.Collections.Generic;
using UFIDA.U9.Base.FlexField.DescFlexField;
using UFIDA.U9.Base.Profile;
using UFIDA.U9.Base.Profile.Proxy;
using UFIDA.U9.SH.LogServiceBP.Proxy;
using UFIDA.U9.SH.OPENAPISV.Model;
using UFSoft.UBF.Util.Context;
namespace UFIDA.U9.SH.OPENAPISV.Common
{
/// <summary>
/// 工具类
/// </summary>
public static class Utils
{
/// <summary>
/// 扩展字段赋值
/// </summary>
/// <param name="descFlexField"></param>
/// <param name="pubPriDt"></param>
/// <param name="entityFullName">设置扩展段的实体名称</param>
/// <returns></returns>
public static DescFlexSegments SetDescFlex(DescFlexSegments descFlexField, PubPriSVData pubPriDt, string entityFullName)
{
long orgId = Base.Context.LoginOrg.ID; // 当前登录组织ID
long centerOrgId = OpenApiConfig.GetInt64("CenterOrgId", 0); // 数据中心ID
return FlexFieldExtensions.SetDescFlexSmart(descFlexField, pubPriDt, entityFullName, orgId, centerOrgId);
}
/// <summary>
/// 扩展字段赋值
/// </summary>
/// <param name="descFlexField"></param>
/// <param name="pubPriDt"></param>
/// <param name="entityFullName">设置扩展段的实体名称</param>
/// <returns></returns>
public static DescFlexSegmentsData SetDescFlex(DescFlexSegmentsData descFlexField, PubPriSVData pubPriDt, string entityFullName)
{
long orgId = Base.Context.LoginOrg.ID; // 当前登录组织ID
long centerOrgId = OpenApiConfig.GetInt64("CenterOrgId", 0); // 数据中心ID
return FlexFieldExtensions.SetDescFlexSmart(descFlexField, pubPriDt, entityFullName, orgId, centerOrgId);
}
FlexFieldExtensions
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Data;
using System.Linq.Expressions;
using UFIDA.U9.SH.OPENAPISV.Model;
using UFSoft.UBF.Util.DataAccess;
namespace UFIDA.U9.SH.OPENAPISV.Common
{
/// <summary>
/// 扩展字段赋值工具类 (性能优化版)
/// </summary>
public static class FlexFieldExtensions
{
// 缓存编译后的赋值委托 (T target, PubPriSVData source)
private static readonly ConcurrentDictionary<Type, Action<object, PubPriSVData>> _assignmentCache
= new ConcurrentDictionary<Type, Action<object, PubPriSVData>>();
// [核心优化] 缓存名称解析的元数据和访问器,避免运行时的 GetProperty 反射
private static readonly List<FlexFieldResolver> _resolvers = new List<FlexFieldResolver>();
/// <summary>
/// 静态构造函数,初始化所有字段的访问委托 (只执行一次)
/// </summary>
static FlexFieldExtensions()
{
InitializeResolvers();
}
#region 内部结构定义
/// <summary>
/// 字段解析器元数据
/// </summary>
private class FlexFieldResolver
{
public string Context { get; set; } // "Public" or "Private"
public int Number { get; set; }
public string FullName { get; set; } // 字段描述,用于报错
// 快速访问委托
public Func<PubPriSVData, string> GetCode { get; set; } // 读取 Code (用于优先判断)
public Func<PubPriSVData, string> GetName { get; set; } // 读取 _Name
public Action<PubPriSVData, string> SetCode { get; set; } // 写入 Code
}
#endregion
#region 静态初始化逻辑
private static void InitializeResolvers()
{
// 预编译 50 个公有段
for (int i = 1; i <= 50; i++)
{
_resolvers.Add(BuildResolver("Public", i));
}
// 预编译 30 个私有段
for (int i = 1; i <= 30; i++)
{
_resolvers.Add(BuildResolver("Private", i));
}
}
private static FlexFieldResolver BuildResolver(string context, int index)
{
string prefix = context == "Public" ? "Pub" : "Pri";
var sourceParam = Expression.Parameter(typeof(PubPriSVData), "s");
var valueParam = Expression.Parameter(typeof(string), "v");
// 1. 构建 GetCode 委托: (s) => s.Pub1
var codeProp = typeof(PubPriSVData).GetProperty($"{prefix}{index}");
var getCodeFunc = Expression.Lambda<Func<PubPriSVData, string>>(
Expression.Property(sourceParam, codeProp), sourceParam).Compile();
// 2. 构建 GetName 委托: (s) => s.Pub1_Name
var nameProp = typeof(PubPriSVData).GetProperty($"{prefix}{index}_Name");
var getNameFunc = Expression.Lambda<Func<PubPriSVData, string>>(
Expression.Property(sourceParam, nameProp), sourceParam).Compile();
// 3. 构建 SetCode 委托: (s, v) => s.Pub1 = v
var setCodeAction = Expression.Lambda<Action<PubPriSVData, string>>(
Expression.Assign(Expression.Property(sourceParam, codeProp), valueParam),
sourceParam, valueParam).Compile();
return new FlexFieldResolver
{
Context = context,
Number = index,
FullName = $"{context}DescSeg{index}",
GetCode = getCodeFunc,
GetName = getNameFunc,
SetCode = setCodeAction
};
}
#endregion
#region 公开方法
/// <summary>
/// 智能扩展字段赋值核心方法 (泛型)
/// </summary>
public static T SetDescFlexSmart<T>(T target, PubPriSVData source) where T : class, new()
{
if (source == null) return target;
if (target == null) target = new T();
var action = _assignmentCache.GetOrAdd(typeof(T), t => BuildMapper(t));
action(target, source);
return target;
}
/// <summary>
/// 智能扩展字段赋值核心方法 (带名称解析功能)
/// </summary>
public static T SetDescFlexSmart<T>(T target, PubPriSVData source, string entityFullName, long orgId, long centerOrgId = 0) where T : class, new()
{
if (source == null) return target;
// 1. 执行名称解析 (使用优化后的逻辑)
ResolveFlexFieldCodes(source, entityFullName, orgId, centerOrgId);
// 2. 调用原有逻辑进行赋值
return SetDescFlexSmart(target, source);
}
#endregion
#region 解析逻辑 (优化版)
/// <summary>
/// 解析 PubPriSVData 中的 Name 字段
/// </summary>
private static void ResolveFlexFieldCodes(PubPriSVData source, string entityFullName, long orgId, long centerOrgId)
{
// 直接读取一次全局配置
bool ignoreCheck = source.IgnoreNameCheck;
// 直接遍历预编译好的解析器列表
foreach (var resolver in _resolvers)
{
// 1. 优先检查 Code 是否已有值 (如果有,直接跳过解析,以Code为准)
string existingCode = resolver.GetCode(source);
if (!string.IsNullOrEmpty(existingCode)) continue;
// 2. 快速读取 Name (委托调用)
string nameVal = resolver.GetName(source);
// 3. 如果 Name 为空,立即跳过
if (string.IsNullOrEmpty(nameVal)) continue;
// 4. 只有当确实有值且无Code时,才执行数据库调用
string code = GetCodeFromSP(entityFullName, resolver.Context, resolver.Number, nameVal, orgId, centerOrgId);
// 5. 回填 Code
if (!string.IsNullOrEmpty(code))
{
resolver.SetCode(source, code);
}
else
{
// 6. 校验逻辑 (根据全局 IgnoreNameCheck 决定)
if (!ignoreCheck)
{
throw new SHApiCustException($"扩展字段解析失败: 无法根据名称 '{nameVal}' 找到对应的编码。\n字段: {resolver.FullName}\n实体: {entityFullName}\n组织: {orgId}{(centerOrgId > 0 ? "/" + centerOrgId : "")}");
}
}
}
}
/// <summary>
/// 使用 U9 DataAccessor 调用存储过程
/// </summary>
private static string GetCodeFromSP(string fullName, string context, int dNumber, string name, long orgId, long centerOrgId)
{
DataParamList pars = new DataParamList
{
DataParamFactory.CreateInput("FullName", fullName),
DataParamFactory.CreateInput("ContextValue", context),
DataParamFactory.CreateInput("DNumber", dNumber, DbType.Int32),
DataParamFactory.CreateInput("Name", name),
DataParamFactory.CreateInput("Org", orgId, DbType.Int64),
DataParamFactory.CreateInput("CenterOrg", centerOrgId, DbType.Int64),
DataParamFactory.CreateOutput("ResultCode", DbType.String)
};
// 注意:DataAccessor.RunSP 内部通常会管理连接池
DataAccessor.RunSP("SH_GetFlexFieldCodeByName", pars);
if (pars["ResultCode"].Value != null && pars["ResultCode"].Value != DBNull.Value)
{
return pars["ResultCode"].Value.ToString();
}
return null;
}
#endregion
#region 赋值逻辑 (原有的表达式树构建)
private static Action<object, PubPriSVData> BuildMapper(Type targetType)
{
var targetParam = Expression.Parameter(typeof(object), "target");
var sourceParam = Expression.Parameter(typeof(PubPriSVData), "source");
var castTarget = Expression.Convert(targetParam, targetType);
var statements = new List<Expression>();
for (int i = 1; i <= 30; i++)
{
AddMapping(statements, castTarget, sourceParam, targetType, $"Pri{i}", $"PrivateDescSeg{i}");
}
for (int i = 1; i <= 50; i++)
{
AddMapping(statements, castTarget, sourceParam, targetType, $"Pub{i}", $"PubDescSeg{i}");
}
var block = Expression.Block(statements);
return Expression.Lambda<Action<object, PubPriSVData>>(block, targetParam, sourceParam).Compile();
}
private static void AddMapping(List<Expression> statements, Expression target, ParameterExpression source, Type targetType, string sourcePropName, string targetPropName)
{
var sourceProp = typeof(PubPriSVData).GetProperty(sourcePropName);
var targetProp = targetType.GetProperty(targetPropName);
if (sourceProp != null && targetProp != null)
{
var sourceValue = Expression.Property(source, sourceProp);
var isNullOrEmptyMethod = typeof(string).GetMethod(nameof(string.IsNullOrEmpty));
var check = Expression.Not(Expression.Call(isNullOrEmptyMethod, sourceValue));
var assign = Expression.Assign(Expression.Property(target, targetProp), sourceValue);
statements.Add(Expression.IfThen(check, assign));
}
}
#endregion
}
}
公私有段定义Model文件PubPriSVData
namespace UFIDA.U9.SH.OPENAPISV.Model
{
/// <summary>
/// 公私扩展字段 (带名称解析支持)
/// </summary>
public class PubPriSVData
{
/// <summary>
/// 全局控制:是否忽略名称校验
/// <para>True: 当根据Name查不到Code时,忽略错误继续执行 (结果可能为空)</para>
/// <para>False (默认): 当根据Name查不到Code时,抛出异常</para>
/// </summary>
public bool IgnoreNameCheck { get; set; }
#region 共有段 (Pub1 - Pub50)
/// <summary>共有段1</summary>
public string Pub1 { get; set; }
/// <summary>共有段1-名称</summary>
public string Pub1_Name { get; set; }
public string Pub2 { get; set; }
public string Pub2_Name { get; set; }
public string Pub3 { get; set; }
public string Pub3_Name { get; set; }
public string Pub4 { get; set; }
public string Pub4_Name { get; set; }
public string Pub5 { get; set; }
public string Pub5_Name { get; set; }
public string Pub6 { get; set; }
public string Pub6_Name { get; set; }
public string Pub7 { get; set; }
public string Pub7_Name { get; set; }
public string Pub8 { get; set; }
public string Pub8_Name { get; set; }
public string Pub9 { get; set; }
public string Pub9_Name { get; set; }
public string Pub10 { get; set; }
public string Pub10_Name { get; set; }
public string Pub11 { get; set; }
public string Pub11_Name { get; set; }
public string Pub12 { get; set; }
public string Pub12_Name { get; set; }
public string Pub13 { get; set; }
public string Pub13_Name { get; set; }
public string Pub14 { get; set; }
public string Pub14_Name { get; set; }
public string Pub15 { get; set; }
public string Pub15_Name { get; set; }
public string Pub16 { get; set; }
public string Pub16_Name { get; set; }
public string Pub17 { get; set; }
public string Pub17_Name { get; set; }
public string Pub18 { get; set; }
public string Pub18_Name { get; set; }
public string Pub19 { get; set; }
public string Pub19_Name { get; set; }
public string Pub20 { get; set; }
public string Pub20_Name { get; set; }
public string Pub21 { get; set; }
public string Pub21_Name { get; set; }
public string Pub22 { get; set; }
public string Pub22_Name { get; set; }
public string Pub23 { get; set; }
public string Pub23_Name { get; set; }
public string Pub24 { get; set; }
public string Pub24_Name { get; set; }
public string Pub25 { get; set; }
public string Pub25_Name { get; set; }
public string Pub26 { get; set; }
public string Pub26_Name { get; set; }
public string Pub27 { get; set; }
public string Pub27_Name { get; set; }
public string Pub28 { get; set; }
public string Pub28_Name { get; set; }
public string Pub29 { get; set; }
public string Pub29_Name { get; set; }
public string Pub30 { get; set; }
public string Pub30_Name { get; set; }
public string Pub31 { get; set; }
public string Pub31_Name { get; set; }
public string Pub32 { get; set; }
public string Pub32_Name { get; set; }
public string Pub33 { get; set; }
public string Pub33_Name { get; set; }
public string Pub34 { get; set; }
public string Pub34_Name { get; set; }
public string Pub35 { get; set; }
public string Pub35_Name { get; set; }
public string Pub36 { get; set; }
public string Pub36_Name { get; set; }
public string Pub37 { get; set; }
public string Pub37_Name { get; set; }
public string Pub38 { get; set; }
public string Pub38_Name { get; set; }
public string Pub39 { get; set; }
public string Pub39_Name { get; set; }
public string Pub40 { get; set; }
public string Pub40_Name { get; set; }
public string Pub41 { get; set; }
public string Pub41_Name { get; set; }
public string Pub42 { get; set; }
public string Pub42_Name { get; set; }
public string Pub43 { get; set; }
public string Pub43_Name { get; set; }
public string Pub44 { get; set; }
public string Pub44_Name { get; set; }
public string Pub45 { get; set; }
public string Pub45_Name { get; set; }
public string Pub46 { get; set; }
public string Pub46_Name { get; set; }
public string Pub47 { get; set; }
public string Pub47_Name { get; set; }
public string Pub48 { get; set; }
public string Pub48_Name { get; set; }
public string Pub49 { get; set; }
public string Pub49_Name { get; set; }
public string Pub50 { get; set; }
public string Pub50_Name { get; set; }
#endregion
#region 私有段 (Pri1 - Pri30)
/// <summary>私有段1</summary>
public string Pri1 { get; set; }
/// <summary>私有段1-名称</summary>
public string Pri1_Name { get; set; }
public string Pri2 { get; set; }
public string Pri2_Name { get; set; }
public string Pri3 { get; set; }
public string Pri3_Name { get; set; }
public string Pri4 { get; set; }
public string Pri4_Name { get; set; }
public string Pri5 { get; set; }
public string Pri5_Name { get; set; }
public string Pri6 { get; set; }
public string Pri6_Name { get; set; }
public string Pri7 { get; set; }
public string Pri7_Name { get; set; }
public string Pri8 { get; set; }
public string Pri8_Name { get; set; }
public string Pri9 { get; set; }
public string Pri9_Name { get; set; }
public string Pri10 { get; set; }
public string Pri10_Name { get; set; }
public string Pri11 { get; set; }
public string Pri11_Name { get; set; }
public string Pri12 { get; set; }
public string Pri12_Name { get; set; }
public string Pri13 { get; set; }
public string Pri13_Name { get; set; }
public string Pri14 { get; set; }
public string Pri14_Name { get; set; }
public string Pri15 { get; set; }
public string Pri15_Name { get; set; }
public string Pri16 { get; set; }
public string Pri16_Name { get; set; }
public string Pri17 { get; set; }
public string Pri17_Name { get; set; }
public string Pri18 { get; set; }
public string Pri18_Name { get; set; }
public string Pri19 { get; set; }
public string Pri19_Name { get; set; }
public string Pri20 { get; set; }
public string Pri20_Name { get; set; }
public string Pri21 { get; set; }
public string Pri21_Name { get; set; }
public string Pri22 { get; set; }
public string Pri22_Name { get; set; }
public string Pri23 { get; set; }
public string Pri23_Name { get; set; }
public string Pri24 { get; set; }
public string Pri24_Name { get; set; }
public string Pri25 { get; set; }
public string Pri25_Name { get; set; }
public string Pri26 { get; set; }
public string Pri26_Name { get; set; }
public string Pri27 { get; set; }
public string Pri27_Name { get; set; }
public string Pri28 { get; set; }
public string Pri28_Name { get; set; }
public string Pri29 { get; set; }
public string Pri29_Name { get; set; }
public string Pri30 { get; set; }
public string Pri30_Name { get; set; }
#endregion
}
}
评论 (0)