关于元数据实体和元数据facade中的方法的java调用方式原创
金蝶云社区-杨天罡
杨天罡
1人赞赏了该文章 553次浏览 未经作者许可,禁止转载编辑于2023年08月11日 11:41:30

一、直接调用方式,通过对应的工厂模式类获取对应接口进行调用

对于元数据实体,比如:com.kingdee.eas.basedata.person.app.Person.entity,需要调用其对应的save方法

本地调用,即不走tcp/ip协议的,eas这边通过rpc框架实现,需要直接获取到上下文,服务端一般采用此调用方式

PersonFactory.getLocalInstance(ctx).save(model);

远程调用,一般是gui客户端的调用方式,走tcp/ip协议的,客户端没服务端直接上下


PersonFactory.getRemoteInstance().save(model);

参数,由实体方法上的定义时候参数个数和类型决定


对于facade元数据,同理,比如:com.kingdee.shr.base.syssetting.MSFServiceFacade.facade,需要调用对应的processService方法

本地调用,即不走tcp/ip协议的,eas这边通过rpc框架实现,需要直接获取到上下文,服务端一般采用此调用方式

MSFServiceFacadeFactory.getLocalInstance(ctx).processService(serviceName, cleanMap);

远程调用,一般是gui客户端的调用方式,走tcp/ip协议的,客户端没服务端直接上下文

MSFServiceFacadeFactory.getRemoteInstance().processService(serviceName, cleanMap);

参数,由实体方法上的定义时候参数个数和类型决定



二、抽象调用方式,通过BOS抽象工厂模式获取接口进行调用

本地调用,即不走tcp/ip协议的,eas这边通过rpc框架实现,需要直接获取到上下文,服务端一般采用此调用方式

com.kingdee.bos.BOSObjectFactory.createCommonBOSObject(Context, IMetaDataPK)
//如:
com.kingdee.eas.basedata.person.IPerson iperson = com.kingdee.bos.BOSObjectFactory.createCommonBOSObject(ctx,com.kingdee.bos.metadata.MetaDataPK.create("com.kingdee.eas.basedata.person.app.Person"));
iperson.save(model);

com.kingdee.shr.base.syssetting.IMSFServiceFacade iMSFServiceFacade=com.kingdee.bos.BOSObjectFactory.createCommonBOSObject(ctx,com.kingdee.bos.metadata.MetaDataPK.create("com.kingdee.shr.base.syssetting.MSFServiceFacade"));
iMSFServiceFacade.processService(serviceName, cleanMap);

远程调用,一般是gui客户端的调用方式,走tcp/ip协议的,客户端没服务端直接上下文

com.kingdee.bos.BOSObjectFactory.createRemoteCommonBOSObject(IMetaDataPK)
//如:
com.kingdee.eas.basedata.person.IPerson iperson =com.kingdee.bos.BOSObjectFactory.createRemoteCommonBOSObject(com.kingdee.bos.metadata.MetaDataPK.create("com.kingdee.eas.basedata.person.app.Person"));
iperson.save(model);

com.kingdee.shr.base.syssetting.IMSFServiceFacade iMSFServiceFacade=com.kingdee.bos.BOSObjectFactory.createRemoteCommonBOSObject(com.kingdee.bos.metadata.MetaDataPK.create("com.kingdee.shr.base.syssetting.MSFServiceFacade"));
iMSFServiceFacade.processService(serviceName, cleanMap);

参数,由实体方法上的定义时候参数个数和类型决定


三、在handler中调用一般都是服务端调用,建议直接进行本地服务调用,获取上下方法如下

com.kingdee.bos.Context ctx = com.kingdee.shr.base.syssetting.context.SHRContext.getInstance().getContext();


四、s-HR的handler根据handler的继承体系来建立,视图需要进行对应配置

image.png

handler中增加前端调用方法一般为:


public String xxxxxxAction(HttpServletRequest request, HttpServletResponse response, ModelMap modelMap) throws SHRWebException {
    //add your biz logic here
    return null;
}



对应视图配置的按钮:<button name="xxxxx" caption="按钮名称"/>

对应视图在<header>节点配置handler:<handler class="com.kingdee.shr.xxx.xxx.XxxxxHandler"/>

对应js中,如果有前端按钮的逻辑需要写function来实现:

如:

xxxxxxAction:function(){
    //add your biz logic here
}

视图中配置引入二开的js:<script src="${appPath}/${appCode}/web/js/shr/xxx/xxxx.js" />    ,其中变量${appPath},自动转换为/shr;变量${appCode},根据视图变量栏位的appCode取,如果是二开固定目录或者视图变量栏位的appCode为空,可以直接写死固定目录

视图中配置js的类名: <jsClass name="shr.xxx.xxxx" />


附上js继承体系

image.png


附上视图配置按钮、js中方法、和handler中的方法调用关系,以删除按钮为例子:

image.png



另外附上视图添加按钮的demo文章:

https://vip.kingdee.com/article/453641356976342016?productLineId=10


赞 1