s-HR 二开调试过程中的问题及解法
背景:二开调试过程出现一些问题,提供一些常见的分析方法
场景:二开 Facade 自动生成源代码 无法正常使用 报 未登录(errorCode:500) com.kingdee.bos.rpc.RPCException: java.lang.IllegalStateException: Please login first!
分析过程:
1、获取apusic日志,从日志中分析,看看错误是哪里报出来的,重点观察错误栈
根据日志提示,错误发生在at com.kingdee.eas.custom.shrExtend.TimerTaskExtendFacadeControllerBean._autoCreateUserByToday(TimerTaskExtendFacadeControllerBean.java:176) ~[shushr-private-wsk/:?]这个二开的方法之后
此时可以看出该class来自目录shushr-private-wsk
可以用工具确认下,8.5版本及以上,可以使用ces.jsp工具进行确认,url:http://ip:port/shr/ces.jsp;在浏览器中输入此url,将ip和port换成真实的即可,然后回车键,找到类加载信息查询区域,输入完整的类路径,回车即可查询出来类的加载路径如下:
如果是其他版本,也可以使用eas的工具,
http://ip:port/easportal/tools/getclassurl.jsp?className=com.kingdee.eas.custom.shrExtend.TimerTaskExtendFacadeControllerBean
从上面结果看,当前这个类加载的路径如上图,在二开的本地java的工作空间中,可以根据路径去找到对应class,使用反编译工具(常用:jd-gui.exe)反编译可以看到如下图:
176行,在服务端(app)目录下使用了
远程XxxxxFactory.getRemoteInstance().xxx()调用,这里只能使用本地调用XxxxxFactory.getLocalInstance(ctx).xxx()导致的错误
这里也埋藏了一个知识点,就是金蝶PRC框架代码调用方式:
1、如果是客户端代码,com.kingdee.xxx.[projectName].client下的java调用必须使用
远程XxxxxFactory.getRemoteInstance().xxx()调用
2、如果是服务端代码,com.kingdee.xxx.[projectName].app下的java调用必须使用
本地调用XxxxxFactory.getLocalInstance(ctx).xxx()
从上面分析,此二开的本地二开代码加载路径配置不对,可以通过如下方式进行检查
1、找到服务上配置文件{install_home}\eas\server\bin\common.pm,查看二开配置的类加载配置文件,如下图则是配置在 F:/develop/sHR860/dev/server-user.liblist
2、找到F:/develop/sHR860/dev/server-user.liblist这个文件,打开看看,如果这个配置内容的路径不是自己目前二开的java工作空间的编译字节码文件存放的目录,则修改正确,然后重启服务进行调试
s-HR 二开调试过程中的问题及解法
本文2024-09-16 23:44:40发表“s-hr cloud知识”栏目。
本文链接:https://wenku.my7c.com/article/kingdee-shr-56515.html