EAS 扩展类开发

来源:互联网 发布:淘宝助手没有销售属性 编辑:程序博客网 时间:2024/05/16 06:10

eas开发过程中如果没有源码的情况下修改标准产品的功能需要通过扩展类的方式来做,下面具体讲解下:

1.客户端ui界面的扩展类:

该方式比较简单,只需要将扩展类的CTEx结尾即可

2.服务端扩展类(XXXcontrollerBean类)有两种方法:

方法一:

BOS中如何扩展标准产品的功能
如何扩展标准产品的功能:

1.       服务端controllerbean扩展方式:服务端需要进行标准产品的扩展需要修改两处内容:在实体上增加扩展属性并重新发布、新增扩展类并从controlbean实现类继承。


a.       修改实体或facade

需要在实体或facade的元数据中手工添加如下部分内容,添加完成后需要发布此实体元数据
          <rs key="entityObject[com.kingdee.eas.scm.sm.pur.app.PurOrder].extendedProperty.controllerBeanEx">
                <lang locale="en_US" value="com.kingdee.eas.scm.sm.pur.app.PurOrderControllerBeanEx" />
                <lang locale="zh_CN" value="com.kingdee.eas.scm.sm.pur.app.PurOrderControllerBeanEx" />
                <lang locale="zh_TW" value="com.kingdee.eas.scm.sm.pur.app.PurOrderControllerBeanEx" />
   </rs>
例2:
<resource>
        <rs key="entityObject[com.kingdee.eas.scm.sm.pur.app.PurOrder].extendedProperty.controllerBeanEx">
            <lang locale="zh_CN" value="com.kingdee.eas.scm.sm.pur.app.PurOrderControllerBeanEx" />
            <lang locale="zh_TW" value="com.kingdee.eas.scm.sm.pur.app.PurOrderControllerBeanEx" />
            <lang locale="en_US" value="com.kingdee.eas.scm.sm.pur.app.PurOrderControllerBeanEx" />


com.kingdee.eas.scm.sm.pur.app.PurOrderControllerBeanEx是你的扩展类的全路径名称,名称可以任意



如果是需要对实体进行扩展,还可以通过如下方式:在bim工具中找到此实体对应的业务单元,打开并在“业务单元”菜单增加“功能”,增加一个空的功能后进行发布,即可自动生成类似上面的扩展属性部分内容。


b.       新增扩展类


按照第一步配置的扩展类名,从标准产品的ctrollerBean继承,进行相关方法和实现的覆写即可。如果发现父类中某些方法或属性是私有,则可以通过反射并修改访问属性来访问。


2.       客户端UI扩展方式:直接新增类比如VoucherEditUICTEx,从VoucherEditUI实现类继承,覆写其中方法,如果发现父类中某些方法或属性是私有,则可以通过反射并修改访问属性来访问。


注意:*CTEx ,前面的类名必须和标准产品的UI实现类名完全一致,并从此实现类继承过来。 


方法二:

1、在 app 下新建 MetaDataFacade.Facade元数据,新增方法 registerExControllerBean(BOSObjectType bostype, String beanName) 。
2、发布,重写 MetaDataFacadeControllerBean  中的 _registerExControllerBean 方法:
protected boolean _registerExControllerBean(Context ctx,BOSObjectType bostype, String beanName) throws BOSException {
     if(bostype == null || StringUtils.isEmpty(beanName)){
     return false;
     }
     
     try {
Class.forName(beanName);
} catch (ClassNotFoundException e) {
e.printStackTrace();
return false;
}
     
     IMetaDataLoader loader = MetaDataLoaderFactory.getLocalMetaDataLoader(ctx);
     BusinessObjectInfo biz = loader.getBusinessObject(bostype);
     if(biz == null){
     return false;
     }
     biz.setExtendedProperty(ConvertUtils.CONTROLLERBEANEX, beanName);     
         return true;
       }
3、在 client 代码调用,在onLoad方法里面注册: 
//注册后台扩展类
MetaDataFacadeFactory.getRemoteInstance().registerExControllerBean(BOSObjectType.create("29F55EA6"), "com.kingdee.eas.scm.sd.sale.app.SaleContractControllerBeanEx");






注:注册后台的扩展类,就是你前台哪里需要用,就在哪里注册

原创粉丝点击