一、直接调用方式,通过对应的工厂模式类获取对应接口进行调用
对于元数据实体,比如: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的继承体系来建立,视图需要进行对应配置
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继承体系
附上视图配置按钮、js中方法、和handler中的方法调用关系,以删除按钮为例子:
另外附上视图添加按钮的demo文章:
https://vip.kingdee.com/article/453641356976342016?productLineId=10
推荐阅读