如何添加EAS BOS 实体扩展属性

如何添加EAS BOS 实体扩展属性,第1张

经研究发现,BOS默认提供的系统扩展属性是在如下的配置文件中定义的

BOS_HOME\BOSModular\boscommon\eclipse\plugins\com.kingdee.bos.toolcommon_6.1.0\bosconfig.xml

配置项的结构为:

<configitem name="ExtendProperty">

<configitem name="isVerifyNumberInControllerBean"><!--扩展属性名称-->

<attribute key="group" value="userDefine"/><!--扩展属性所在组-->

<attribute key="required" value="false"/><!--扩展属性是否必填-->

<attribute key="defaultvalue" value="true"/><!--扩展属性默认值-->

<attribute key="alias" value="是否在服务端校验编码"/><!--扩展属性别名-->

<attribute key="type" value="boolean"/><!--扩展属性值类型-->

<attribute key="isMultiLanguage" value="false"/><!--扩展属性是否为多语言配置-->

<attribute key="object" value="entity"/><!--扩展属性应用目标-->

<attribute key="filter" value="com.kingdee.eas.framework.app.ObjectBase"/><!--扩展属性过滤条件-->

<attribute key="description" value="是否在服务端校验编码"/><!--扩展属性描述信息-->

</configitem>

</configitem>

以上内容为一个扩展属性的完整配置,添加自定义扩展属性只需要将配置项添加到

<configitem name="ExtendProperties">自定义</configitem>中即可。

添加完之后,重新启动BOS,就可以在图2“可供选择的扩展属性”列表中看到自定义的扩展属性。

以上的配置是为了支持“所见所得”的需要,另外一种方式就是直接修改实体元数据文件,这里就不详细描述了。

扩展类和扩展方法的使用场景

作为C#程序员,我们一直要跟.net自带类库(BCL - Base class Library)或者第三方类库打交道,有时候我们无法查看他们的代码,但是我们需要一些新的功能,Helper类就应运而生了,我们开发出一个个的静态方法以方便调用,C#3.0之后微软为我们提供了扩展类,以实现对原有类的扩展,这是一个非常好的替代Helper类的途径。

扩展类和扩展方法的使用方法

首先举一个扩展类的例子,假定我们需要string类实现一个新的功能,通过属性名字获取属性的值,我们可以通过扩展类的扩展方法实现。

/// <summary>

/// 扩展类和扩展方法必须是静态的,扩展方法的第一个参数必须为原有类自身,this关键字是必须的

/// </summary>

public static class StringExtension

{

public static object GetValueByName(this object self, string propertyName)

{

if (self == null)

{

return self

}

Type t = self.GetType()

PropertyInfo p = t.GetProperty(propertyName)

return p.GetValue(self, null)

}

}

原有类可以直接调用扩展方法,string str = "123"int len = str.GetValueByName("Length")怎么样,方便吧。

扩展方法必须遵守以下规则:

1.扩展类必须是静态的;

2.扩展方法必须是静态的

3.扩展方法的第一个参数必须以this开头,参数必须是原有类的类型,如果我们扩展decimal类,第一个参数必须为decimal

为什么扩展类和扩展方法必须为静态的

让我们看一看编译之后的MSIL代码吧,是不是很像我们曾经写过的Helper类调用方法,看来str.GetValueByName("Length")等效于StringExtension.GetValueByName(str,"Length").

这是微软对编译器做的一个优化,使之更人性化,使用更方便。微软的出发点可能只是希望对原有类做方法扩展,不希望把扩展类作为实体类来使用,所以从设计上就已经做了处理,杜绝这种情况发生,静态类是不允许被实例化的。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11630776.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存