s-HR 二开调试过程中的问题及解法

栏目:s-hr cloud知识作者:金蝶来源:金蝶云社区发布:2024-09-16浏览:1

s-HR 二开调试过程中的问题及解法

背景:二开调试过程出现一些问题,提供一些常见的分析方法

场景:二开 Facade  自动生成源代码  无法正常使用  报  未登录(errorCode:500) com.kingdee.bos.rpc.RPCException: java.lang.IllegalStateException: Please login first!

分析过程:

1、获取apusic日志,从日志中分析,看看错误是哪里报出来的,重点观察错误栈

Image_20230823095412.webp

根据日志提示,错误发生在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换成真实的即可,然后回车键,找到类加载信息查询区域,输入完整的类路径,回车即可查询出来类的加载路径如下:

Image_20230823100011.webp

如果是其他版本,也可以使用eas的工具,

http://ip:port/easportal/tools/getclassurl.jsp?className=com.kingdee.eas.custom.shrExtend.TimerTaskExtendFacadeControllerBean


从上面结果看,当前这个类加载的路径如上图,在二开的本地java的工作空间中,可以根据路径去找到对应class,使用反编译工具(常用:jd-gui.exe)反编译可以看到如下图:

Image_20230823100317.webp


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

image.webp

2、找到F:/develop/sHR860/dev/server-user.liblist这个文件,打开看看,如果这个配置内容的路径不是自己目前二开的java工作空间的编译字节码文件存放的目录,则修改正确,然后重启服务进行调试

image.webp

s-HR 二开调试过程中的问题及解法

背景:二开调试过程出现一些问题,提供一些常见的分析方法场景:二开 Facade 自动生成源代码 无法正常使用 报 未登录(errorCode:5...
点击下载文档
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息