1基础扩展开发HR产品事业部2018-09-072纲要01s-HR框架技术体系02BIM基础DEP平台基础权限项菜单0304050607OSF08091011信息集导入配置报表部署&调试3s-HR框架技术体系4章节概述本章节培训内容s-HR开发框架技术体系本章节预期目标了解s-HR开发框架技术体系5相同底层的bos平台是一样的,包括元数据引擎、数据库引擎、消息引擎等都使用apusic中间件不同WebServer层不一样应用架构不一样核心应用不一样s-HR框架-与eas框架差别6s-HR框架-部署架构图利用开源软件作为反向代理和负载均衡、前端缓存装置。WebServer高可用:会话状态的持久化支持。7s-HR框架-技术架构图人事服务云薪酬服务云培训服务云时间管理云招聘服务云行业方案云组织档案岗位档案员工档案人事事务薪酬核算考勤管理人力效能人力成本人力发展扩展应用绩效流程扩展插件档案扩展插件烟草行业组件国资委组件考勤机二代身份证读卡器扩展行业设备核心应用元数据引擎数据库引擎规则引擎消息引擎国际化引擎工作流引擎数据转换引擎安全引擎WIF(WebInteractionFramework)前端交互框架OSF(OpenServiceFramework)开放服务框架S-HR应用架构BOS平台8s-HR框架-J2EE架构J2EE服务器J2EE服务器DBDBORM-RPCServer业务POJOOrmappingBussinessInterfaceSwingClientSwingClient界面框架ORM-RPCClientWebClientWebClientWeb框架WebServerJMSJMS基础服务组件基础服务组件工作流……EJBContainer…事务SessionBeanEJB容器EJB容器CacheDBCacheDB业务开发切入点业务开发切入点9JVMs-HR框架-基本调用结构HTTPWebServerRPC-Server(EJB)httpclientGuiclient操作系统Apusic10s-HR框架-ORM-RPCRPC层对象Proxy本地对象JDK通讯层RPC层对象stub远程对象接口JDK通讯层TCP/IPTCP/IPRPCRPCCallCallMarshalMarshal11s-HR框架-面向伙伴的开放平台服务开放:OSF提供标准、安全的系统信息及业务服务,可通过任何第三方系统调用,支持用户级扩展;前端开放:WIF提供前端页面集成框架,能够通过自定义视图方式嵌入任意html页面;应用开放:通过应用规范约束的系统应用和第三方应用能够方便得在系统中安装和卸载,并支持热部署;作为企业组织、人员信息来源,HR系统如何更小成本得为其它系统提供信息服务?伙伴如何更加方便得进行系统扩展?OSFOpenServiceFrameworkWIFWebInterationFramework列表视图表单视图搜索视图核心视图视图管理、解析引擎主框架XHTML*.jsCrossFilter*.cssLessBootStrap服务注册、OpenAPI服务监控、安全管理员工信息服务薪酬服务…….人事变更服务云之家集成服务…….组织信息服务第三方服务12s-HR框架-WIF前端交互框架13s-HR框架-技术架构AppServerWebServerClientDBKSQLO/RMappingBusinessModelBusinessModelExtendBusiness/QueryInterfaceBusinessPOJO/ExtendORM-RPCServerMetadataEngineActionViewFormViewListViewKanbanView…ViewExtendTextFieldWidgetEventDateFieldSearch…F7/TagFieldEnumFieldORM-RPCJSONServiceDelegateContainerLayoutServiceDefineSHRURLThird-PartyRequestHTTPJSONQueryEngine纯正的EASBOS血统融合DEP优秀设计确保稳定性与大并发成果复用独创OSF与WIF体系确保系统开放性与开发效率保障前端扩展的灵活性基于Html5保障体验与交互性能移动应用14s-HR框架-OSF开放服务框架15s-HR框架-业务开发切入点WIF(视图)业务界面使用OSF数据接口使用handlerWebserver使用Controllerbeanappserver使用dep动态扩展使用Js、cssWeb界面使用16BIM基础17章节概述本章节培训内容认识BOS设计工具如何使用BOS设计工具注意事项本章节预期目标能够运用BOS设计工具进行设计18BIM基础-简介BIMBOS设计开发工具,生成元数据和核心代码;工作流配置等。19BIM基础-方案引入20BIM基础-可创建元数据种类entity,实体table,数据表façade,功能relation,实体关系query,查询exception,异常enum,枚举ui,GUI的界面function,函数permission,权限…21BIM基础-继承体系CoreBase,所有实体基类ObjectBase,对象基类CoreBillBase,业务单据基类CoreBillEntryBase,业务单据分录基类DataBase,基础资料基类TreeBase,树形基础资料基类HRBillBase,s-HR业务单据基类HRBillBaseEntry,s-HR业务单据分录基类22BIM基础-扩展属性23扩展属性,支持工作流在web的portal上打开和审批pureWFBillUrl:/shr/dynamic.do?uipk={单据视图uipk}&isShrBill=trueisSupportWeb:truewebEditUI:/dynamic.do?uipk={单据视图uipk}编码规则:codingRuleEnabled,true开启编码规则组织属性:OrgType,业务单据HRO,其他看情况配置其他属性看说明工作流参考实体:CmpWorkFlowMainBillBIM基础-扩展属性(续)24BIM基础-发布&部署25BIM基础-注意事项s-HR自定义元数据开发的服务端目录com.kingdee.shr.custom.app下s-HR自定义元数据开发的客户端目录com.kingdee.shr.custom.client下注意添加逻辑键注意元数据检查方法事务的定义26DEP27章节概述本章节培训内容认识DEP本章节预期目标能够运用DEP进行元数据扩展28DEP-介绍动态元数据扩展平台路径:业务员登录,企业建模->动态扩展平台高级版29平台基础介绍30章节概述本章节培训内容了解平台核心功能了解一个session整个生命周期视图配置自定义业务逻辑本章节预期目标基本能够进行二次开发31shr_syssetting:s-HR平台功能基础的元数据和服务端代码shr_syssetting_web:s-HR平台webserver核心工程shr_system_web:s-HR登录,单点登录等commonplate:通用逻辑处理commonservice:通用逻辑处理businesssetting:平台业务处理shr_report:报表元数据和服务端代码report:报表web端处理平台基础-平台工程认识32平台基础-执行顺序1、拦截器:ShrDispatcherInterceptorlicense验权、权限项验权、部分上下文处理,ShrServiceInjectInterceptorBOS服务注入,如Controller层的远程BO对象的自动获取与注入,DynamicWebInterceptor用户上下文、对象转换(将前端的json串转换成对应元数据对象)2、视图解析:DBTemplateLoader,ITemplateTranslator,负责视图解析成freemarker模板并写入缓存3、spring的servlet:DispatcherServlet,负责控制跳转4、s-HR核心的控制器:DynamicController,DispatcherServlet转给DynamicController,指定给对应的XXXXHandler,调试的主要入口(DynamicController.executeAction())5、s-HR处理器的类加载器:MsfClassLoaderFactory,负责通过视图配置,找到对应的处理器XXXXHandler,只有{安装目录}\eas\server\lib\addon\*.*的所有jar,通过此类加载器加载6、s-HR的所有处理器:ICoreHandler,对应是各个功能的具体处理器,在此处理里面调用BIMBOS设计器的EJB业务处理逻辑,并返回处理结果33平台基础-处理器体系各领域处理器,需根据需要分层继承平台处理器列表:继承ListHandler,表单:继承EditHandler,树形表单:继承TreeEditHandler34视图配置
视图配置的js里的方法deleteAction:function(){}或者defaultActionHandle:function(option){}Handler的publicStringdeleteAction(HttpServletRequestrequest,HttpServletResponseresponse,ModelMapmodelMap)throwsSHRWebException{}方法触发事件调用对应的js方法如果js没有设置对应的xxAction方法则js框架默认调用defaultActionHandle方法,然后调用视图配置对应的handler处理调用handler平台基础-js和handler方法映射35处理器对服务端异常处理:平台异常处理器:ShrExceptionHandlerResolver-对BOSException处理,不显示具体错误-对EASBizException处理,显示业务错误-对SHRWebException处理,不显示具体错误-对ShrWebBizException处理,显示业务错误服务器端抛出BOSException,捕获后抛出SHRWebException服务器端抛出EASBizException,捕获后抛出ShrWebBizException其他错误根据业务场景对用抛出平台基础-异常处理36平台基础-视图37平台基础-视图配置管理员登录s-HR->开发平台->视图用户信息帮助界面下载系统指南参阅s-HR个性化配置指南-视图修改视图拷贝标准视图内容到扩展区域修改扩展区域内容保存视图重新访问业务功能④内部公开请勿外传s-HR个性化配置指南-视图目录s-HR个性化配置指南-视图..........................................................................................................1视图配置..................................................................................................................................6列表字段配置.......................................................................................................................6表单字段配置.......................................................................................................................7列表排序配置.......................................................................................................................9多行表排序设置.................................................................................................................10F7视图配置........................................................................................................................11F7屏蔽创建按钮配置.........................................................................................................12列表界面搜索配置.............................................................................................................131、管理员登陆s-HR,点击开发平台-视图进入2、视图界面点击创建,在模型字段输入步骤1中记录下的PK对应的值,视图类型选中列表。3838Administrator配置页面Translator解析配置s-HRWidget组件加载DB存储配置Freemarker页面加载HTML5最终页面STEP01STEP02STEP03STEP06STEP05STEP04平台基础-视图解析流程3939其他常用配置项•表单字段分组:
•列表过滤条件:•列表配置搜索视图:•列表默认过滤方案:列表配置•排序:sorterItems=“numberdesc”•是否多选:multiselect="true“•横向滚动条:shrinkToFit=“false"•分页:hasPager=“false“•查询:query=""•可选择行数:rowList="[50,100,200]"字段配置表单:•隐藏:type=“hidden”•显示文字:label=“xx”•只读:readonly=“true”•必录:required=“true”•文本域:ctrl=“textArea”colspan=“2”rows=“3”•最大长度:max_length=“”•F7显示字段:displayFormat=“”列表:•宽度:width="50“•格式化:formatter="yy-mm-ddhh:mm:ss“•冻结列:frozen=“true”附:配置参考视图com.kingdee.eas.basedata.person.app.Person.list平台基础-视图常用配置项4040业务jsorgEdit.jscmpItemList.jsatsLeaveBillEdit.js工具jsshr.js组件jss-HRWidget核心平台复用业务领域功能实现核心平台封装&效率聚焦服务迭代复用扩展js体系平台jsedit.js&系424201shr.jsshr.showError({message:“”});//错误提示shr.getUrlParam(“”);//获取参数shr.getContextPath();//工程目录shrshr.callService({});//调用OSFshr.callHandler({});//调用指定handler02s-HRWidget(F7)•$(“#xx”).shrPromptBox(“enable”);//F7可编辑•$(“#xx”).shrPromptBox(required:true});//F7必录•$(“#xx”).shrPromptBox(“setFilter”,"");//过滤条件•$(“#xx”).shrPromptBox(“getValue”);//获取值•$(“#xx”).shrPromptBox(“setValue”,{});//设置值03core.js&edit.js&list.jsgetRealId(“”);//获取真实元素idremoteCall({});//调用本页面handlergetOperateState();//获取操作状态verify()//保存单据前校验getCustomFilterItems();//列表自定义过滤条件平台基础-js常用方法43权限项44章节概述本章节培训内容认识权限项权限项配置权限项使用本章节预期目标能配置权限项,对页面或者按钮做权限控制45权限跟人员,角色有关。是该角色的人员拥有该角色的权限菜单权限配置菜单时,如果权限项为空则默认显示,不为空,则按照该员工,角色拥有的权限项来显示按钮权限根据页面的uipk和按钮方法,匹配权限项中的url另外通过权限现实按钮显示不显示(这需要写代码实现)权限项-介绍46--员工信息初始化--员工信息维护--员工其他变动--员工变动管理--人事事务单据--员工明细查询--员工任职变动查询--人事统计分析报表--劳动合同--其他合同使用系统管理员登陆GUI页面,通过用户管理,可以查看以及分配权限权限项-GUI授权47--员工信息初始化--员工信息维护--员工其他变动--员工变动管理--人事事务单据--员工明细查询--员工任职变动查询--人事统计分析报表--劳动合同--其他合同权限配置一个权限项可以控制多个操作入口权限项-web端定义和修改48权限配置与组织关系•无•管理单元•HR组织类型•系统管理功能•业务管理功能•业务功能•综合功能操作类型•读•新增•修改•删除•执行•其他——按任意组织分配——按管理单元分配——按HR组织分配——系统管理员默认拥有,不支持分配——系统管理员和授权权用户默认拥有——分配使用——系统管理员默认拥有,同时支持分配二次开发使用HR组织使用业务功能使用读操作权限项-属性说明49权限配置一般操作都是有一个视图+操作构成的,权限的定义就是url的一部分,控制能否打开某个url权限项-配置方法50按钮权限拦截器,对请求进行校验菜单权限登陆页面,serviceMenu.do缓存(localStorage)到浏览器端权限项-使用51菜单52章节概述本章节培训内容认识菜单菜单配置本章节预期目标自己能够配置菜单53菜单-简介54OSF55章节概述本章节培训内容认识OSF配置和开发OSF调用OSF本章节预期目标开发OSF使用OSF56梳理OSF业务需求分析业务需求,了解OSF需要哪些参数,返回数据格式要求创建OSFadministrator用户登录s-HR系统,开发平台基础设置OSF配置->创建编写OSF实现类根据配置的实现类名称编写OSF实现类配置OSF(8个字段)编号、服务类型、名称、服务级别、所属领域、服务名称、类别、配置保存OSFOSF配置信息保存到数据库中启用OSFOSF运行引擎只会加载已启用的OSF重启s-HR服务器重新加载OSF类信息OSF-定义57OSF-创建配置说明编码:从10000开始,依次累加,不可重复名称:符合业务语义,一般是中文服务类型:本地服务服务级别:模块节本所属领域:根据业务,EMP-员工,ORG-组织,CMP-薪酬,ATS-考勤,PERF-绩效,TRAIN-培训服务名称:英文字符类型,调用的服务名,后缀为Ext,如:getPersonInfoExt类别:根据业务选择配置:参考OSF配置模板(可参考系统任意一个OSF作为模板)58OSF-配置示例OSF基本信息OSF描述信息59OSF-配置描述60如何编写OSF实现类定义一个java类,实现com.kingdee.bos.bsf.service.app.IHRMsfService接口实现process方法编写业务逻辑构造数据结构原则:java.util.Map对应js的对象,java.util.List对应js数组返回构造的数据,通常是java.util.Map对象OSF-编写实现类61OSF-自定义实现类1231.实现IHRMsfService接口2.实现process方法3.编写业务逻辑代码4.组装返回对象(按照需求构造数据结构,java.util.Map对应js的对象,java.util.List对应js数组)62OSF-执行流程逻辑写在这里631、服务端调用Objectcom.kingdee.eas.rpts.ctrlreport.osf.OSFExecutor.executeOSF(Contextctx,HashMapparam,StringserviceName)2、web端调用shr.js中callService方法shr.callService({serviceName:'GetWFNextPersonService',param:{param1:param1,param2:param2}});3、外部调用,需单点登录OSF-调用方式64OSF-常见问题请求流程未到达OSF实现类报错的可能原因OSF没有启用服务名称与传入的值不相同配置中的class属性值与实现类不匹配实现类有没有加载到虚拟机请求流程执行到OSF实现类报错业务实现代码检查,如参数、非空校验等65OSF-总结OSF什么是OSFOSF解决什么问题什么时候使用OSF如何定义OSF配置OSF开发OSF实现类OSF工作流程OSF开发规范66信息集67章节概述本章节培训内容认识结构配置和查询配置能够自己配置使用结构配置和查询配置本章节预期目标配置结构配置和查询配置使用结构配置和查询配置68定义:信息集是结构配置和查询配置的简称,又称查询结构配置,是s-HR系统定义的,基于BOS实体元数据的关联逻辑,通过对定义的父节点和关联属性将一些元数据关联起来。在运行期基于查询结构配置中的关联关系解析成sql语句解决什么问题:查询多个有关联的实体元数据的时候,可以动态增加查询字段根据业务要求自定义数据源信息集-介绍69信息集-查询配置70配置方案1、员工信息综合查询2、薪酬信息综合查询3、考勤信息综合查询4、组织岗位信息综合查询5、流入流出信息综合查(应用于流入流出报表)以关联主对象进行区分信息集-配置方案71结构配置是信息集应用的基础,实体与实体之间的引用关系。正向关联:父对象实体上保存子对象的id,从而与子对象进行关联信息集-结构配置72反向关联:子对象实体上保存父对象实体的id,从而实现关联信息集-结构配置(续)73信息集-配置步骤74动态列表导出模板s-HR报表工具注意:通过查询结构配置生成的SQL语句只支持左连接信息集-何时使用75信息集打开报空白等错使用信息集的动态列表,添加某些字段就会导致查询不到数据下载模板,一点下载模板就变成空白界面导出没有数据或者数据不对报表数据源报sql错误信息集-常见错误76什么是查询结构配置解决什么问题何时使用查询结构配置怎么用查询结构配置信息集-总结77导入配置78章节概述本章节培训内容配置导入模板使用导入功能本章节预期目标能够自行配置导入模板使用导入模板导入数据79导入配置-介绍80ImportInfoHandler中importDataAction,视图界面配置button“importData”,名字不同,需js自行处理导入配置-使用81报表82章节概述本章节培训内容认识报表配置报表使用报表本章节预期目标配置报表使用报表83报表-介绍84报表-发布和授权85部署&调试86本章节内容应用的目录结构认识怎么部署调试代码部署调试过程中有那些配置信息和注意事项解决生产环境启动集群,提示非法组件目标知道怎么部署知道怎么调试有不同的部署方式章节概述87部署&调试-二开开发模式配置1、{安装目录}\eas\server\bin\common.pm,以F:/develop/sHR为安装目录说明26行切换开发模式将$DEVELOP_MODE=“false”改为$DEVELOP_MODE=“true”188行$EAS_USER_LIB_FILE=“XXX”改成自己的配置文件路径,如:$EAS_USER_LIB_FILE="F:/develop/sHR/dev/server-user.liblist";192行$METAS_PATH=.$METAS_PATH;修改成前缀为自己元数据发布目录,如:$METAS_PATH=F:/develop/sHR/work/SHR820SP2/deployed_metas;=.$METAS_PATH;2、配置classes输出目录位置的文件server-user.liblist内容配置,如:F:\develop\sHR\dev\server-user.liblist,classes输出目录位置:F:\develop\sHR\workspace\dev\bin88部署&调试-二开开发模式配置(续){安装目录}\eas\server\profiles\server1\config\vm.properties添加前缀为自己元数据发布目录,用分号隔开,如:F:/develop/sHR/work/SHR820SP2/deployed_metas;(F:/develop/sHR/work为元数据工作空间目录)89部署&调试-二开开发模式配置(续)s-HR8.2版本及以下版本,需要替换bsf.jar{安装目录}\eas\server\lib\common\bos\bsf.jarbsf.jar见附件不替换的话,自定义的handler,在debug时候,可能报ClassNotFoundException如果替换后还有错误将{安装目录}\eas\server\lib\addon\里面所有jar放到{安装目录}\eas\server\lib\sp目录下bsf.jar90部署&调试-二次开发工程结构dev.zipdemo-metas.zip1、dev.zip解压后,可用eclipse导入,形成二开工程,里面含有一个简单的二开工程demo2、demo-metas.zip包含了二开demo的元数据,解压后可以直接复制到{元数据工作空间}/{导入方案名称}/metadata下,并进行发布91部署&调试-userlib生成和引入1、将generateliberary.bat文件,复制到本地s-HR的{安装目录}下,如图1,图中安装目录为sHR2、运行generateliberary.bat文件,会生成devlib_for_user.userlibraries,如图23、将devlib_for_user.userlibraries复制到{安装目录}\dev下,图中安装目录为sHR4、eclipse引入userlib,如图35、js等资源文件构建脚本,build.xml图1图2图3build.xmlgenerateliberary.bat92部署&调试-目录介绍1、lib/sp/下部署的是元数据发布生成的代码jar2、metas/lib/下部署元数据3、addon目录存放的是webserver应用包的class文件jar包4、\eas\server\deploy\easweb.ear\shr_web.war\addon\customer\web\下部署js,css,资源文件二开*Handler.class字节码jar放置目录二开js,css,图片等资源文件放置目录93什么时候使用customer包形式部署?,什么时候使用sp目录部署?如果没有新增、修改元数据或者修改ControllerBean等appserver层内容的情况下使用webserver应用包形式在有修改元数据或者ControllerBean等appserver层内容是是必须要sp部署的,如果没有js、handler等webserver层内容时,可以不包含webserver应用包部署,否则就要保护webserver应用包部署方式部署&调试-方式选择94部署&调试-apusic9从apusic9开始第三方登录s-HR,需要添加白名单信任配置文件路径:{安装目录}\apusic\domains\server1\config\web.xml找到节点serverNameWhiteList,配置param-value,多个三方信任,用“,”隔开如:serverNameWhiteListhttp://kdweibo.com/,http://kingdee.yunzhijia.com/95部署&调试-Eclipse96部署&调试-Browser{安装目录}\eas\server\deploy\easweb.ear\shr_web.war\addon\customer\web以上路径为s-HR二次开发webserver工程调试和运行时js、css、资源文件的部署位置,调试时在浏览器地址的url后面加上debug=true,使环境js处于调试模式注意:不建议修改系统标准的js、css等资源文件,避免出现补丁更新或者环境更新导致标准产品的内容覆盖客户化修改的内容97部署&调试-集群启动98部署&调试-问题解决启动集群提示非法组件:检查管理控制台,是否安装补丁PT110929,如果未安装就安装检查管理控制台,配置参数,路径:{安装目录}\eas\admin\config\admin.vmoptions,如果没有isDetectIllegalComponents参数,如果没有添加参数isDetectIllegalComponents=false重启管理控制台启动集群99Thanksterimakasih感謝谢谢ありがとうขอบคุ�ณ