客户端调用服务器端代码的方式(非entity、facade方式)
来源:互联网 发布:淘宝开店一个月没生意 编辑:程序博客网 时间:2024/05/01 17:58
实EAS中开发中,在client端调用server端代码是再平常不过的事,比如我们要更新数据,或者进行数据库查询等~~方法大家也都知道,利用entity或是facade发布生成的 XXXXFactory 或是 XXXXFacadeFactory 去调用。。
但是,不知道大家有没有发现,无论哪种方式,都是在一个前提下才能调用:User已经login了,就是用户已经登陆了。那么没有登录之前,我怎么调用服务器等方法呢?这就是我今天要说的内容!
应用项目:鑫苑项目。
应用场景:客户用一个安全系统,可以动态的控制某些用户能登录, 有些用户不能登录。并且不能利用修改EAS数据库的方式!
解决方案:在打开eas的client端时,把所有能登陆的用户名(加密后)取到客户端,当用户填写用户名后,在focusout事件里去校验此用户是否可以登录。
关键问题:在客户端程序启动时,怎样取到可以登录的用户的List。因为此时在用户登录之前,不能通过entity或是facade发布生成的类去调用,否则会报未登录的错误。
下面就是怎样通过其他手段来调用服务器端的代码的方法:
首先,要建一个接口 IUserListGetter,这个接口要继承 com.kingdee.bos.orm.IORMModel 接口,比如:
public interface IUserListGetter extends IORMModel {
public List getUserList();
}
IUserListGetter 这个接口很简单,就一个方法,就是取得UserList。
然后定义这个 IUserListGetter 接口的实现类:UserListGetter,这个类同时要继承 com.kingdee.bos.orm.template.ORMObject。代码如下:
public class UserListGetter extends ORMObject implements IUserListGetter {
// 定义一个名称。
public String name;
public UserGetter(String name) {
super(null);
this.name = name;
super.registerInterface(IUserListGetter.class, this);
}
public UserGetter() {
super.registerInterface(IUserListGetter.class, this);
}
public String getName() throws ORMCoreException {
return name;
}
public List getUserList() {
// 以下为服务器端取得UserList的代码
............
}
}
注:上面的 UserListGetter类中的 name 看逻辑应该不是必须的。最重要的应该是 super.registerInterface(IUserListGetter.class, this); 注册接口这一句。不过我没试过删掉 name 所有的相关代码。
这样,我们要实现的接口和类就做完了,还有一个关键点:这两个类和接口放在哪?(IUserListGetter 和 UserListGetter)。同entity或是facade发布的XXXXFactory或是XXXXFacade一样,我们两个类也放在同app和client同级的包下,如:
com.kingdee.fdc.tools
|--app
|--client
|--IUserListGetter
|--UserListGetter
我想大家一定知道为什么要这么放了,因为这样放,就是保证我们客户端也好,服务器端也好,都有 IUserListGetter 和 UserListGetter 编译成的class。(注:UserListGetter 也许这样是不必要的,我没试过,但是IUserListGetter 必须是这样的。)
好了,剩下的就是客户端怎样调用了,其实很简单:
// 关于UIConfig.getUrl()应该是取服务器的URL,这里要注意哪个是类名,哪个是接口。他们名字比较像,只差前面的一个I。
IUserListGetter userListGetter = (IUserListGetter) RPCEngineFactory.getEngine(UIConfig.getUrl()).createObject("com.kingdee.fdc.tools.UserListGetter", IUserListGetter.class);
List userList = userListGetter.getUserList();
好了,这样就可以了。就像上面客户端调用的代码中:com.kingdee.fdc.tools.UserListGetter 这个字符串,他如果只是向服务器传去一个字符串,那么 UserListGetter 类就没必要与 IUserListGetter 接口同级,并且保持在客户端有 UserListGetter.class。但是如果不是简单的一个字符串,那么可能就必须保证客户端也有 UserListGetter.class 存在了。
但是,不知道大家有没有发现,无论哪种方式,都是在一个前提下才能调用:User已经login了,就是用户已经登陆了。那么没有登录之前,我怎么调用服务器等方法呢?这就是我今天要说的内容!
应用项目:鑫苑项目。
应用场景:客户用一个安全系统,可以动态的控制某些用户能登录, 有些用户不能登录。并且不能利用修改EAS数据库的方式!
解决方案:在打开eas的client端时,把所有能登陆的用户名(加密后)取到客户端,当用户填写用户名后,在focusout事件里去校验此用户是否可以登录。
关键问题:在客户端程序启动时,怎样取到可以登录的用户的List。因为此时在用户登录之前,不能通过entity或是facade发布生成的类去调用,否则会报未登录的错误。
下面就是怎样通过其他手段来调用服务器端的代码的方法:
首先,要建一个接口 IUserListGetter,这个接口要继承 com.kingdee.bos.orm.IORMModel 接口,比如:
public interface IUserListGetter extends IORMModel {
public List getUserList();
}
IUserListGetter 这个接口很简单,就一个方法,就是取得UserList。
然后定义这个 IUserListGetter 接口的实现类:UserListGetter,这个类同时要继承 com.kingdee.bos.orm.template.ORMObject。代码如下:
public class UserListGetter extends ORMObject implements IUserListGetter {
// 定义一个名称。
public String name;
public UserGetter(String name) {
super(null);
this.name = name;
super.registerInterface(IUserListGetter.class, this);
}
public UserGetter() {
super.registerInterface(IUserListGetter.class, this);
}
public String getName() throws ORMCoreException {
return name;
}
public List getUserList() {
// 以下为服务器端取得UserList的代码
............
}
}
注:上面的 UserListGetter类中的 name 看逻辑应该不是必须的。最重要的应该是 super.registerInterface(IUserListGetter.class, this); 注册接口这一句。不过我没试过删掉 name 所有的相关代码。
这样,我们要实现的接口和类就做完了,还有一个关键点:这两个类和接口放在哪?(IUserListGetter 和 UserListGetter)。同entity或是facade发布的XXXXFactory或是XXXXFacade一样,我们两个类也放在同app和client同级的包下,如:
com.kingdee.fdc.tools
|--app
|--client
|--IUserListGetter
|--UserListGetter
我想大家一定知道为什么要这么放了,因为这样放,就是保证我们客户端也好,服务器端也好,都有 IUserListGetter 和 UserListGetter 编译成的class。(注:UserListGetter 也许这样是不必要的,我没试过,但是IUserListGetter 必须是这样的。)
好了,剩下的就是客户端怎样调用了,其实很简单:
// 关于UIConfig.getUrl()应该是取服务器的URL,这里要注意哪个是类名,哪个是接口。他们名字比较像,只差前面的一个I。
IUserListGetter userListGetter = (IUserListGetter) RPCEngineFactory.getEngine(UIConfig.getUrl()).createObject("com.kingdee.fdc.tools.UserListGetter", IUserListGetter.class);
List userList = userListGetter.getUserList();
好了,这样就可以了。就像上面客户端调用的代码中:com.kingdee.fdc.tools.UserListGetter 这个字符串,他如果只是向服务器传去一个字符串,那么 UserListGetter 类就没必要与 IUserListGetter 接口同级,并且保持在客户端有 UserListGetter.class。但是如果不是简单的一个字符串,那么可能就必须保证客户端也有 UserListGetter.class 存在了。
- 客户端调用服务器端代码的方式(非entity、facade方式)
- 客户端调用服务器端代码的方式(非entity、facade方式)
- java代码webservice客户端的两种调用方式
- webservice的axis2客户端调用方式和xfire调用方式
- thrift客户端调用不支持多线程方式,非线程安全
- JavaScript客户端与服务器端的五种通信方式
- java中,客户端与服务器端跳转的几种方式
- HDFS的API调用,创建Maven工程,创建一个非Maven工程,HDFS客户端操作数据代码示例,文件方式操作和流式操作
- webservice客户端调用方式
- webservice客户端调用方式
- entity framework 6.0 复杂条件的两种调用方式
- 客户端调用WebServices的3种方式
- WebService客户端的几种调用方式
- 通过客户端编程的方式调用webservice
- WCF客户端调用的几种方式
- 通过客户端编程的方式调用webservice
- WebService的两种客户端调用方式
- WebService的两种客户端调用方式
- memcpy和strcpy的区别
- Android Canvas 保存为图片
- 一个计算机爱好者的不完整回忆外传——网上的MM们(二)
- uva 846 - Steps
- C# 获取Internet时间
- 客户端调用服务器端代码的方式(非entity、facade方式)
- ctype.h字符处理函数
- waves5.0插件在win7 64bit上的安装使用问题
- 一个计算机爱好者的不完整回忆外传——网上的MM们(三)
- 后台调用编码规则
- 71道经典Android面试题和答案--重要知识点都涉及到了
- Apache进程池模型
- Android 的启动流程
- emca配置-Enterprise Manager configuration assistant