③秘密信息严禁泄露金蝶s-HR组织人事方法参数说明金蝶软件(中国)有限公司2021年7月1/52③秘密信息严禁泄露文档记录序号操作人操作描述时间1付前文补充开发示例2022.08.112/52③秘密信息严禁泄露目录金蝶s-HR组织人事方法参数说明..................................................................................................1文档记录...........................................................................................................................................2目录..................................................................................................................................................3第一部分二开osf集成单据基础...................................................................................................51.开发基础....................................................................................................................................52.参考资料....................................................................................................................................53.常见问题....................................................................................................................................5第二部分OSF开发示例..................................................................................................................51.OSF服务配置.............................................................................................................................62.OSF单点登录配置.....................................................................................................................63.OSF服务开发.............................................................................................................................74.OSF服务调用.............................................................................................................................9第三部分单据详细参数...............................................................................................................111、组织.......................................................................................................................................111.1组织新增&修改................................................................................................................111.2同公司内组织上级变更...................................................................................................141.3组织跨公司移动...............................................................................................................141.4组织变更...........................................................................................................................141.5组织封存&反封存............................................................................................................151.6组织删除...........................................................................................................................161.7组织附表使用多行表.......................................................................................................162、职位.......................................................................................................................................172.1职位新增&修改................................................................................................................172.2职位变更...........................................................................................................................192.3职位禁用&启用&删除......................................................................................................213、员工.......................................................................................................................................223.1员工修改变更&修改.........................................................................................................223.2员工预入职单据新增&编辑.............................................................................................263/52③秘密信息严禁泄露3.3员工入职单据新增&编辑.................................................................................................283.4员工调动单据新增&编辑.................................................................................................343.5员工职等调整单据新增&编辑.........................................................................................373.6员工转正单据新增&编辑.................................................................................................403.7员工离职单据新增&编辑.................................................................................................433.8员工兼职单据新增&编辑(任命).................................................................................453.9员工兼职单据新增&编辑(终止).................................................................................463.10员工退休单据新增&编辑...............................................................................................483.11员工返聘单据新增&编辑(任命)...............................................................................503.12员工返聘终止单据新增&编辑(终止).......................................................................524/52③秘密信息严禁泄露第一部分二开osf集成单据基础1.开发基础熟悉s-HR开发模式、框架、工具;了解osf配置、运行过程;熟悉单据的相关元数据及业务逻辑;搭建s-HR开发环境;2.参考资料s-HR与第三方集成https://vip.kingdee.com/article/345616446195667456?fromAction=POST_ARTICLE&productLineId=103.常见问题(1)单点登录时返回状态301状态异常。检查单点登录的地址和s-HR系统地址是否协议一致,如果单点登录设置的地址为http地址,但实际系统地址为https地址,此时会强制跳转https,返回301状态。(2)引用了单点登录相关jar包后,系统编译失败。单点登录的jar包引用了其它开放工具jar包,如httpClient等,检查是否是jar包版本冲突导致编译失败。(3)单点登录成功,但返回失败数据。在二开的osf服务类中添加日志埋点,便于排查单点登录成功后是否进入服务类。排查s-HR系统中apusic日志,解决发生的业务异常。(4)osf服务类部署路径不对,调用时找不到相关服务。先确认单点登录是否成功,检查apusic日志,若osf服务没有部署在addon/custom目录下,则会报classDefNotFound异常;若调用的服务名称错误,则会报classNotFound异常。(5)集成单据失败,生成的单据数据异常。由于osf服务中是直接调用单据的后台保存或提交生效方法,没有经过handler中的相关校验或补充逻辑,因此生成的单据可能有数据异常。需要了解单据的业务逻辑,有时需要将handler的相关逻辑补充到osf服务中调用单据保存方法前。5/52③秘密信息严禁泄露第二部分OSF开发示例以保存预入职单据到系统为例,大致需要经过以下步骤:1.二开建立osf服务类,实现IHRMsfService接口,重写其process方法,在内调用controllerBean的保存,并可根据业务需要,进行保存前的数据校验或保存后的其它处理;2.在开发平台—>OSF配置服务中创建服务,指向所创建的服务类;3.在系统设置—>单点登录中配置白名单等策略。1.OSF服务配置在开发平台—>OSF配置服务中创建服务,指向所创建的服务类。服务名称可以自己定义,但class指向一定是所创建的服务类的全限定地址;参数及子参数名称需要与调用服务时所传的参数一致。OSF服务创建后需要重启服务。2.OSF单点登录配置单点登录有多种方式,详见二开培训-单点登录资料,根据业务需要选择合适的登录方式。本例通过http方式保存数据到S-HR系统。6/52③秘密信息严禁泄露3.OSF服务开发新建服务类,实现IHRMsfService接口,具体逻辑可根据业务需求处理,调用相应的controllerBean中的方法,本例用于保存预入职的数据。保存前后的校验逻辑等可参考系统原处理逻辑。示例为基本逻辑,仅供参考,根据现场实际需求,在osf服务中补充逻辑。importjava.util.HashMap;importjava.util.Map;importorg.apache.log4j.Logger;importcom.kingdee.bos.BOSException;importcom.kingdee.bos.Context;importcom.kingdee.bos.bsf.service.app.IHRMsfService;importcom.kingdee.bos.dao.IObjectPK;importcom.kingdee.bos.dao.ormapping.ObjectUuidPK;importcom.kingdee.bos.dao.ormapping.SQLAccessException;importcom.kingdee.bos.metadata.entity.SelectorItemCollection;importcom.kingdee.bos.metadata.entity.SelectorItemInfo;importcom.kingdee.bos.util.BOSUuid;importcom.kingdee.eas.base.attachment.AttachmentFactory;importcom.kingdee.eas.base.attachment.AttachmentInfo;importcom.kingdee.eas.base.attachment.BoAttchAssoFactory;importcom.kingdee.eas.base.attachment.BoAttchAssoInfo;importcom.kingdee.eas.base.attachment.IAttachment;importcom.kingdee.eas.base.attachment.IBoAttchAsso;importcom.kingdee.eas.base.permission.UserFactory;importcom.kingdee.eas.base.permission.UserInfo;importcom.kingdee.eas.common.EASBizException;7/52③秘密信息严禁泄露importcom.kingdee.eas.framework.CoreBaseInfo;importcom.kingdee.eas.util.app.DbUtil;importcom.kingdee.jdbc.rowset.IRowSet;importcom.kingdee.util.StringUtils;importcom.kingdee.shr.attachment.AttachmentState;importcom.kingdee.shr.attachment.AttachmentTypeEnum;importcom.kingdee.shr.attachment.SHRAttachmentExtFactory;importcom.kingdee.shr.attachment.SHRAttachmentExtInfo;importcom.kingdee.shr.base.syssetting.app.filter.HRFilterUtils;importcom.kingdee.shr.base.syssetting.exception.SHRWebException;importcom.kingdee.shr.base.syssetting.util.MetaDataUtil;importcom.kingdee.shr.preentry.PreEntryFactory;importnet.sf.json.JSONArray;importcom.kingdee.shr.base.syssetting.web.json.JSONUtils;publicclassStuOSFTestServiceimplementsIHRMsfService{privatestaticLoggerlogger=Logger.getLogger(StudentOSFTestService.class);@OverridepublicObjectprocess(Contextctx,Mapparam)throwsEASBizException,BOSException{if(logger.isDebugEnabled()){logger.info("--进入StuOSFTestService--");logger.info("AdviseOutTrainInteService.process-param:"+param==null?"":param.toString());}StringdataStr=(String)param.get("obj");if(StringUtils.isEmpty(dataStr)){return"数据为空!";}StringentityName="com.kingdee.shr.preentry.app.PreEntry";try{Classclazz=MetaDataUtil.getObjectValueClass(entityName);CoreBaseInfomodel=(CoreBaseInfo)JSONUtils.convertJsonToObject(ctx,dataStr,clazz);IObjectPKobjectPK=PreEntryFactory.getLocalInstance(ctx).save(model);model.setId(BOSUuid.read(objectPK.toString()));ObjectresponseData=generateResponseDataAfterSave(model);returnresponseData;}catch(SQLAccessExceptione){if(e.getCause()instanceofcom.kingdee.bos.dao.DataLimitExceedException){thrownewBOSException("字段长度超过系统设定的最大长度,无法保存成功",e);}else{thrownewBOSException(e.getMessage(),e);}8/52③秘密信息严禁泄露}catch(SHRWebExceptione){thrownewBOSException(e.getMessage(),e);}catch(EASBizExceptione){thrownewBOSException(e.getMessage(),e);}catch(BOSExceptione){thrownewBOSException(e.getMessage(),e);}catch(Exceptione){thrownewBOSException(e.getMessage(),e);}}protectedObjectgenerateResponseDataAfterSave(CoreBaseInfomodel){returnmodel.getId().toString();}}4.OSF服务调用调用单点登录的jar包,根据地址调用OSF服务,如图:packageOSFTest;importjava.io.IOException;importjava.util.HashMap;importjava.util.Map;importorg.apache.commons.httpclient.HttpException;importcom.kingdee.shr.api.OSFWSClient;importcom.kingdee.shr.api.Response;importcom.kingdee.shr.api.SHRClient;importcom.kingdee.shr.osf.webservice.client.UserInfo;publicclassosfWebServiceTest{publicstaticvoidmain(String[]args)throwsHttpException,IOException{StringSHR_CU="http://172.19.108.119:6888/shr";Map<String,Object>param=newHashMap<String,Object>();StringdataStr="{\r\n"+"\"hrOrgUnit\":\"00000000-0000-0000-0000-000000000000CCE7AED4\",\r\n"+"\"isMultiEntry\":\"1\",\r\n"+"\"entrys\":{\r\n"+"\"person\":\"8r0AAAAIkTKA733t\",\r\n"+"\"enrollDate\":\"2018-01-01\",\r\n"+9/52③秘密信息严禁泄露"\"probation\":\"0\",\r\n"+"\"planFormalDate\":\"\",\r\n"+"\"bizDate\":\"2021-07-29\",\r\n"+"\"oldPosition\":\"+UO5M67VSLeMl7zNJDgkMHSuYS4=\",\r\n"+"\"position\":\"+UO5M67VSLeMl7zNJDgkMHSuYS4=\",\r\n"+"\"oldJob\":\"\",\r\n"+"\"job\":\"\",\r\n"+"\"oldJobLevel\":\"\",\r\n"+"\"jobLevel\":\"\",\r\n"+"\"oldJobGrade\":\"\",\r\n"+"\"jobGrade\":\"\",\r\n"+"\"oldAdminOrg\":\"00000000-0000-0000-0000-000000000000CCE7AED4\",\r\n"+"\"adminOrg\":\"00000000-0000-0000-0000-000000000000CCE7AED4\",\r\n"+"\"oldCompany\":\"00000000-0000-0000-0000-000000000000CCE7AED4\",\r\n"+"\"company\":\"00000000-0000-0000-0000-000000000000CCE7AED4\",\r\n"+"\"grade\":\"\",\r\n"+"\"oldSalary\":\"\",\r\n"+"\"summary\":\"\",\r\n"+"\"description\":\"222\",\r\n"+"\"oldEmpType\":\"2JNc5qoSR7mPF3oNZeqB/qKehbM=\",\r\n"+"\"empType\":\"00000000-0000-0000-0000-000000000001A29E85B3\",\r\n"+"\"hrBizDefine\":\"txN4H4vbR/uhwmMw9MzJoeZovtk=\",\r\n"+"\"affairActionReason\":\"B04uacuHSmax085zRUPjoZYRae4=\",\r\n"+"\"variationReason\":\"\",\r\n"+"\"id\":\"\"\r\n"+"},\r\n"+"\"billState\":\"0\",\r\n"+"\"personId\":\"\",\r\n"+"\"number\":\"20210729-00036\",\r\n"+"\"applyDate\":\"2021-07-29\",\r\n"+"\"applier\":\"8r0AAAAIZHCA733t\",\r\n"+"\"id\":\"\",\r\n"+"\"_entityName\":\"com.kingdee.eas.hr.affair.app.EmpHireBizBill\"\r\n"+"}";param.put("obj",dataStr);UserInfous=newUserInfo();us.setDcName("sHR8611_DEV");us.setPassword("");us.setUserName("suying_li");10/52③秘密信息严禁泄露us.setDbType(0);us.setLanguage("L2");us.setSlnName("eas");Stringos=newOSFWSClient().proceedOSF(SHR_CU,"saveEmpHireBizBillDataService",param,us);//可以选择通过http方式或者webService方式调用//SHRClientshrClient=newSHRClient();//Responseresp=shrClient.executeService(SHR_CU,"saveEmpHireBizBillDataService",param);System.out.println(os);}}注意:示例仅供参考,具体情况以实际环境为准。第三部分单据详细参数1、组织1.1组织新增&修改方法通过视图可以知道,组织新增/编辑的Handler为OrgUnitEditHandler,当使用组织新增/编辑时,将调用该Handler的saveAction方法,osf的逻辑便是要根据该saveAction方法去实现。以下是实现步骤:1)osf服务新增一个用于保存组织信息的服务,接口的业务逻辑参考OrgUnitEditHandler的saveAction方法进行实现;2)若是新增,saveAction最终会调用bean的addNewAdminOrg实现;3)若是修改,saveAction最终会调用bean的updateAdminOrg实现;4)osf服务的传参与需要同调用Handler的saveAction方法时保持一致,这样做的目的是可以直接使用框架中的序列化和反序列类进行类型转换;OrgUnitOptFacadeFactory.getLocalInstance(ctx).addNewAdminOrg()11/52③秘密信息严禁泄露OrgUnitOptFacadeFactory.getLocalInstance(ctx).updateAdminOrg()参数描述参数类型是否必填描述hrOrgUnitstring是业务组织idEFFDTstring是生效时间idstring否如果新增,则不用填idnumberstring否行政组织编码namestring是行政组织名称parentstring是上级行政组织idresponPositionstring否负责职位unitLayerTypestring是行政组织类型orgPropertystring否业务板块simpleNamestring否行政组织简称orgFunctionstring否行政组织职能adminorgext_depdisplaynamestring否部门长名称companystring否所属公司departmentstring否所属部门adminorgext_citystring否城市adminorgext_enterpriseNaturestring否企业性质adminorgext_hrIndustrystring否行业quickAddFlagint是是否连续新增indexstring是顺序码sortCodestring否排序码isSealUpint是状态,默认0isJuridicalCompanyint否法人公司registTypestring否登记注册类型juridicalPersonstring否法人代表setupDatestring否成立日期endupDatestring否营业有效期taxNumberstring否纳税人识别号_entityNamestring是com.kingdee.eas.basedata.org.app.AdminOrgUnit备注:EFFDT:如果传入的生效日期比当前版本的生效日期早,会删除生效日期之后的所有版本记录如果传入的生效日期比当前版本的生效日期晚,需要调用组织变更方法12/52③秘密信息严禁泄露参考样例{"hrOrgUnit":"00000000-0000-0000-0000-000000000000CCE7AED4","EFFDT":"","id":"","number":"","name":"测试","parent":"00000000-0000-0000-0000-000000000000CCE7AED4","responPosition":"","unitLayerType":"8r0AAAAI6XhigkmI","orgProperty":"","simpleName":"","orgFunction":"","adminorgext_depdisplayname":"","company":"","department":"","adminorgext_city":"","adminorgext_enterpriseNature":"","adminorgext_hrIndustry":"","quickAddFlag":1,"index":"0","sortCode":"","isSealUp":0,"isJuridicalCompany":0,"registType":"","juridicalPerson":"","setupDate":"","endupDate":"","taxNumber":"","_entityName":"com.kingdee.eas.basedata.org.app.AdminOrgUnit"}修订注意事项:13/52③秘密信息严禁泄露1.2同公司内组织上级变更同1.1组织更新方法,但是人员和职位不会生成历史1.3组织跨公司移动原来的下级组织和职位,并且复制新增一套,人员做调动,原来组织和职位会禁用。组织和职位的编码、命名,是否使用原编码。方法//组织新增//职位新增//人员移动//职位禁用//组织封存参数描述14/52③秘密信息严禁泄露参考样例1.4组织变更方法同1.1OrgUnitOptFacadeFactory.getRemoteInstance().updateAdminOrg(pk,(AdminOrgUnitInfo)model);参数描述同1.1注意historyOperateState和model中的effdt值参考样例同1.115/52③秘密信息严禁泄露1.5组织封存&反封存方法通过视图可以知道,组织封存/反封存的Handler为OrgUnitListHandler,当使用组织封存/反封存时,将调用该Handler的sealUpAction/unSealUpAction方法,osf的逻辑便是要根据该sealUpAction/unSealUpAction方法去实现。以下是实现步骤:1)osf服务新增一个用于组织封存/反封存的服务,接口的业务逻辑参考OrgUnitListHandler的sealUpAction/unSealUpAction方法进行实现;2)osf服务的传参与需要同调用Handler的sealUpAction/unSealUpAction方法时保持一致,这样做的目的是可以直接使用框架中的序列化和反序列类进行类型转换;com.kingdee.eas.hr.org.app.OrgUnitOptFacadeControllerBean._sealUpOrg(Context,String)com.kingdee.eas.hr.org.app.OrgUnitOptFacadeControllerBean._unSealUpOrg(Context,String)参数描述参数类型是否必填描述billIdstring是待封存/反封存组织的id参考样例billId:MnfjPiOYQWOsfpUiQ1IZ3HSuYS4=,Mr9uxsxfTPGA3liAZply+nSuYS4=,rbpND5RiSieFN8UAj9l6k3SuYS4=1.6组织删除方法通过视图可以知道,组织删除的Handler为OrgUnitListHandler,当使用组织删除时,将调用该Handler的deletePosition方法,osf的逻辑便是要根据该deletePosition方法去实现。以下是实现步骤:16/52③秘密信息严禁泄露3)osf服务新增一个用于组织删除的服务,接口的业务逻辑参考OrgUnitListHandler的deletePositionAction方法进行实现;4)osf服务的传参与需要同调用Handler的deletePositionAction方法时保持一致,这样做的目的是可以直接使用框架中的序列化和反序列类进行类型转换;com.kingdee.eas.hr.org.app.OrgUnitOptFacadeControllerBean._delete(Context,String)参数描述参数类型是否必填描述billIdstring是待删除组织的id参考样例billId:MnfjPiOYQWOsfpUiQ1IZ3HSuYS4=,Mr9uxsxfTPGA3liAZply+nSuYS4=,rbpND5RiSieFN8UAj9l6k3SuYS4=1.7组织附表使用多行表没有接口,所有附表可以构建SQL插入s-HR.2、职位2.1职位新增&修改方法通过视图可以知道,职位新增/编辑的Handler为PositionEditHandler,当使用职位新增/编辑时,将调用该Handler的saveAction方法,osf的逻辑便是要根据该saveAction方法去实现。以下是实现步骤:1)osf服务新增一个用于保存职位单的服务,接口的业务逻辑参考PositionEditHandler的saveAction方法进行实现;2)osf服务的传参与需要同调用Handler的saveAction方法时保持一致,这样做的目的是可以直17/52③秘密信息严禁泄露接使用框架中的序列化和反序列类进行类型转换;PositionOptFacadeFactory.getLocalInstance(ctx).addNewPosition();PositionOptFacadeFactory.getLocalInstance(ctx).updatePosition();参数描述参数类型是否必填描述EFFDTstring是生效日期isEnableReviseOrgstring否isEnableReviseEffdtstring否hrOrgUnitstring否业务组织isUserPositionStandstring否numberstring是编码positionStandardLibstring职位模板namestring是职位名称adminOrgUnitstring是所属行政组织companystring是所属公司HRJobstring否所属职务lowJobLevelstring否最低职层highJobLevelstring否最高职层lowJobGradestring否最低职等highJobGradestring否最高职等parentstring是上级职位productLinestring否产品线domainstring否领域isRespPositionstring是是否负责人positionext_isshowinorgchartstring否indexstring否deletedStatusstring否状态purposestring否职位设置目的descriptionstring否备注CUobjectidstring是职位所在cuIdstring否_entityName是com.kingdee.eas.basedata.org.app.Position18/52③秘密信息严禁泄露参考样例{"EFFDT":"1900-01-01","isEnableReviseOrg":"","isEnableReviseEffdt":"","hrOrgUnit":"83hQUBxEQo+AuDxLVL4LSMznrtQ=","isUserPositionStand":"false","isUserHrjob":"false","number":"100000-0064-100000","positionStandardLib":"","name":"test职位","adminOrgUnit":"83hQUBxEQo+AuDxLVL4LSMznrtQ=","company":"83hQUBxEQo+AuDxLVL4LSMznrtQ=","HRJob":"","lowJobLevel":"","highJobLevel":"","lowJobGrade":"","highJobGrade":"","parent":"7qZD5IMBTHO/GsWq8rYfO3SuYS4=","productLine":"","domain":"","isRespPosition":0,"positionext_isshowinorgchart":0,"quickAddFlag":1,"index":"0","deletedStatus":"","purpose":"","description":"","CU":{"id":"00000000-0000-0000-0000-000000000000CCE7AED4"},"id":"","_entityName":"com.kingdee.eas.basedata.org.app.Position"}19/52③秘密信息严禁泄露2.2职位变更方法通过视图可以知道,职位新增/编辑的Handler为PositionEditHandler,当使用职位新增/编辑时,将调用该Handler的saveAction方法,osf的逻辑便是要根据该saveAction方法去实现。以下是实现步骤:3)osf服务新增一个用于保存职位变更单的服务,接口的业务逻辑参考PositionEditHandler的saveAction方法进行实现;4)osf服务的传参与需要同调用Handler的saveAction方法时保持一致,这样做的目的是可以直接使用框架中的序列化和反序列类进行类型转换;参数描述参数类型是否必填描述EFFDTstring是生效日期isEnableReviseOrgstring否isEnableReviseEffdtstring否hrOrgUnitstring否业务组织isUserPositionStandstring否numberstring是编码positionStandardLibstring职位模板namestring是职位名称adminOrgUnitstring是所属行政组织companystring是所属公司HRJobstring否所属职务lowJobLevelstring否最低职层highJobLevelstring否最高职层lowJobGradestring否最低职等highJobGradestring否最高职等parentstring是上级职位productLinestring否产品线domainstring否领域isRespPositionstring是是否负责人positionext_isshowinorgchartstring否indexstring否deletedStatusstring否状态20/52③秘密信息严禁泄露purposestring否职位设置目的descriptionstring否备注CUobjectidstring是职位所在cuIdstring否_entityName是com.kingdee.eas.basedata.org.app.Position参考样例{"EFFDT":"2021-07-22","isEnableReviseOrg":"","isEnableReviseEffdt":"","hrOrgUnit":"83hQUBxEQo+AuDxLVL4LSMznrtQ=","isUserPositionStand":"false","isUserHrjob":"false","number":"100000-0064-100000","positionStandardLib":"","name":"test职位","adminOrgUnit":"83hQUBxEQo+AuDxLVL4LSMznrtQ=","company":"83hQUBxEQo+AuDxLVL4LSMznrtQ=","HRJob":"","lowJobLevel":"","highJobLevel":"","lowJobGrade":"","highJobGrade":"","parent":"7qZD5IMBTHO/GsWq8rYfO3SuYS4=","productLine":"","domain":"","isRespPosition":0,"positionext_isshowinorgchart":0,"quickAddFlag":0,"index":"6","deletedStatus":"1","purpose":"","description":"","CU":{"id":"83hQUBxEQo+AuDxLVL4LSMznrtQ="},"id":"MnfjPiOYQWOsfpUiQ1IZ3HSuYS4=","_entityName":"com.kingdee.eas.basedata.org.app.Position"21/52③秘密信息严禁泄露}2.3职位禁用&启用&删除方法通过视图可以知道,职位禁用/启用/删除的Handler为PositionListHandler,当使用职位禁用/启用/删除时,将调用该Handler的disableAction/enableAction/deletePositionAction方法,osf的逻辑便是要根据对应的disableAction/enableAction/deletePositionAction方法去实现。以下是实现步骤:5)osf服务新增一个职位禁用/启用/删除的服务,接口的业务逻辑参考PositionListHandler的saveAction方法进行实现;6)osf服务的传参与需要同调用Handler的对应的disableAction/enableAction/deletePositionAction方法时保持一致,这样做的目的是可以直接使用框架中的序列化和反序列类进行类型转换;com.kingdee.eas.hr.org.app.PositionOptFacadeControllerBean._enable(Context,String)com.kingdee.eas.hr.org.app.PositionOptFacadeControllerBean._disable(Context,String)com.kingdee.eas.hr.org.app.PositionOptFacadeControllerBean._delete(Context,String)参数描述参数类型是否必填描述billIdstring是待禁用/启用的职位id参考样例billId:MnfjPiOYQWOsfpUiQ1IZ3HSuYS4=,Mr9uxsxfTPGA3liAZply+nSuYS4=,rbpND5RiSieFN8UAj9l6k3SuYS4=22/52③秘密信息严禁泄露3、员工3.1员工修改变更&修改方法通过视图可以知道,员工新增/编辑的Handler为EmployeeEditHandler,当使用员工新增/编辑时,将调用该Handler的saveAction方法,osf的逻辑便是要根据该saveAction方法去实现。以下是实现步骤:5)osf服务新增一个用于保存员工信息的服务,接口的业务逻辑参考EmployeeEditHandler的saveAction方法进行实现;6)saveAction最终会调用bean的personUpdate实现;7)osf服务的传参与需要同调用Handler的saveAction方法时保持一致,这样做的目的是可以直接使用框架中的序列化和反序列类进行类型转换;PersonOptFacadeFactory.getLocalInstance(ctx).personUpdate(personInfo.getEFFDT(),personOptBaseInfo);如:PersonInfopersonInfo=model;personInfo.setExtendedProperty("historyOperateState","revise");PersonOptBaseInfopersonOptBaseInfo=newPersonOptBaseInfo();PersonInfopersonInfo=(PersonInfo)model;personOptBaseInfo.setPerson(personInfo);Contextctx=SHRContext.getInstance().getContext();PersonOptFacadeFactory.getLocalInstance(ctx).personUpdate(personInfo.getEFFDT(),personOptBaseInfo);参数描述参数类型是否必填描述EFFDTstring是生效日期namestring是姓名numberstring是员工编码idCardNOstring身份证号码或护照必输入一个身份证号码23/52③秘密信息严禁泄露passportNOstring护照号码birthdaystring否出生日期agestring是年龄employeeTypestring是用工关系状态idgenderstring否性别idCardAddressstring否身份证地址idCardBeginDatestring否身份证有效期开始idCardEndDatestring否身份证有效期结束idCardLongEffectstring否身份证长期有效idCardIssueOrgstring否身份证签发机关standingstring否个人性质idjobStartDatestring是参加工作日期adjustSerValint是调整值socialServiceYearsint否社会工龄retireDatestring是退休日期nationalitystring是调动后用工关系idnativePlacestring是变动操作idfolkstring是变动类型idregresidencestring是变动原因idhjAddressstring否单据分录id,新增时值传空homeplacestring是单据状态,新增时默认为0wedstring是婚姻状况wedDatestring否结婚登记日期applyDatestring是申请日期politicalFacestring是政治面貌healthstring否健康状况bloodTypestring是血型heightstring是身高(cm)isDisabilityint是是否残疾disabilityNostring否残疾证号isMartyrFamilyint是是否烈属martyrFamilyNostring否烈属证号isLonelyint是是否孤老indexOfstring顺序码protocolstring否协议descriptionstring否备注scalestring是小数位数roundModestring是取舍规则idstring新增不需要填值单据id_entityNamestring是com.kingdee.eas.basedata.person.app.Person24/52③秘密信息严禁泄露参考样例{"EFFDT":"1996-01-01","name":"李小一","number":"2019092600000136","idCardNO":"","passportNO":"2019092600000136","birthday":"","age":"0","employeeType":"00000000-0000-0000-0000-000000000001A29E85B3","gender":"","idCardAddress":"","idCardBeginDate":"","idCardEndDate":"","idCardLongEffect":0,"idCardIssueOrg":"","standing":"","jobStartDate":"","adjustSerVal":"0","socialServiceYears":"","retireDate":"","nationality":"","nativePlace":"","folk":"","regresidence":"","hjAddress":"","homeplace":"","wed":"","wedDate":"","politicalFace":"","health":"","bloodType":"0","height":"0","isDisability":0,"disabilityNo":"","isMartyrFamily":0,"martyrFamilyNo":"","isLonely":0,"indexOf":"10000436",25/52③秘密信息严禁泄露"protocol":"","description":"","scale":"2","roundMode":"ROUND_HALF_UP","id":"8r0AAAAOpm+A733t","_entityName":"com.kingdee.eas.basedata.person.app.Person"}3.2员工预入职单据新增&编辑方法通过视图可以知道,预入职新增/编辑的Handler为EmpPreEntryEditHandler,当使用预入职新增/编辑时,将调用该Handler的saveAction方法,osf的逻辑便是要根据该saveAction方法去实现。以下是实现步骤:7)osf服务新增一个用于保存预入职单的服务,接口的业务逻辑参考EmpPreEntryEditHandler的saveAction方法进行实现;8)osf服务的传参与需要同调用Handler的saveAction方法时保持一致,这样做的目的是可以直接使用框架中的序列化和反序列类进行类型转换;参数描述参数类型是否必填描述hrOrgUnitstring是人事业务组织idnamestring是姓名cellPhonestring是手机号码talentobject是单据分录personstring是预入职员工idfileStatestring是默认“0”idCardNOstring是身份证、护照至少输入一项passportNOstring是身份证、护照至少输入一项genderstring否性别folkstring否民族birthdaystring否出生日期idCardAddressstring否身份证地址idCardLongEffectstring否身份证长期有效idCardBeginDatestring否身份证开始日期idCardEndDatestring否身份证结束日期26/52③秘密信息严禁泄露idCardIssueOrgstr...