使用 Workday API 编辑工作人员附加数据
Posted
技术标签:
【中文标题】使用 Workday API 编辑工作人员附加数据【英文标题】:Edit worker additional data using Workday API 【发布时间】:2017-11-03 03:23:14 【问题描述】:我想在 Workday 中使用他们的 API 编辑自定义员工数据,但文档中未指定实际的自定义数据格式。此外,我无法找到检索其他工作人员数据的方法。谷歌没有找到任何使用他们的 API 的例子(Edit_Worker_Additional_Data 函数)。
【问题讨论】:
【参考方案1】:这就是 SOAP 请求的样子,包括所有可选参数。
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope
xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<env:Body>
<wd:Edit_Worker_Additional_Data_Request
xmlns:wd="urn:com.workday/bsvc"
wd:version="v28.0">
<wd:Business_Process_Parameters>
<wd:Auto_Complete>true</wd:Auto_Complete>
<wd:Run_Now>true</wd:Run_Now>
<wd:Comment_Data>
<wd:Comment>abcdef</wd:Comment>
<wd:Worker_Reference>
<wd:ID wd:type="Contingent_Worker_ID">abcdef</wd:ID>
</wd:Worker_Reference>
</wd:Comment_Data>
</wd:Business_Process_Parameters>
<wd:Worker_Custom_Object_Data>
<wd:Effective_Date>2017-07-20</wd:Effective_Date>
<wd:Worker_Reference>
<wd:ID wd:type="Contingent_Worker_ID">abcdef</wd:ID>
</wd:Worker_Reference>
<wd:Business_Object_Additional_Data></wd:Business_Object_Additional_Data>
</wd:Worker_Custom_Object_Data>
</wd:Edit_Worker_Additional_Data_Request>
</env:Body>
</env:Envelope>
您必须在
中定义自定义对象(或附加数据)元素<wd:Business_Object_Additional_Data></wd:Business_Object_Additional_Data>
例如,如果您的自定义对象被定义为“TestObject”,您将需要对象和字段引用 ID,它看起来像这样:
<wd:Business_Object_Additional_Data>
<cus:TestObject>
<cus:TestObjectField>Value</cus:TestObjectField>
</cus:TestObject>
</wd:Business_Object_Additional_Data>
【讨论】:
【参考方案2】:如果您使用的是 Java,以下是使用 Workday API 更新工作人员数据的示例。 这不是 Edit_Worker_Additional_Data,但它们的工作原理都非常相似,也许这段代码 sn-p 可以帮助某人入门。这里所有的 Java 类都是使用 jaxws-maven-plugin 从 wsdl 生成的,除了 WorkdayCredentials 类,请参阅Workday Soap API - User Name/Password。
public void updateWorkerContactInfo(Worker worker) throws WorkerDataException,
WorkerDataInvalidException
HumanResourcesPort hrPort = hrService.getHumanResources();
BindingProvider bp = (BindingProvider) hrPort;
WorkdayCredentials.addWorkdayCredentials(bp,
config.getWdIntegrationUsername(),
config.getWdIntegrationPassword());
MaintainContactInformationForPersonEventRequestType body
= new MaintainContactInformationForPersonEventRequestType();
body.setAddOnly(false);
BusinessProcessParametersType params = new BusinessProcessParametersType();
params.setAutoComplete(false);
params.setRunNow(false);
body.setBusinessProcessParameters(params);
ContactInformationForPersonEventDataType contactData
= new ContactInformationForPersonEventDataType();
edu.bowdoin.workdayservice.data.hr.WorkerObjectType workerObjectType
= new edu.bowdoin.workdayservice.data.hr.WorkerObjectType();
edu.bowdoin.workdayservice.data.hr.WorkerObjectIDType idType
= new edu.bowdoin.workdayservice.data.hr.WorkerObjectIDType();
idType.setType("Employee_ID");
idType.setValue(worker.getWorkerId());
workerObjectType.getID().add(idType);
contactData.setWorkerReference(workerObjectType);
Date effectiveDate = new Date();
// set the effective date to the hire date + 1 day, this has to be
// greater than any other change to the worker address data, for
// example during the new hire process
if (worker.getHireDate() != null)
DateTime hireDate = new DateTime(worker.getHireDate());
DateTime hireDatePlus1Day = hireDate.plusDays(1);
DateTime today = DateTime.now();
// only use hire date plus 1 if it is after today's date
if (hireDatePlus1Day.isAfter(today))
effectiveDate = hireDatePlus1Day.toDate();
contactData.setEffectiveDate(dateToXMLGregorian(effectiveDate));
ContactInformationDataType contactDataType
= new ContactInformationDataType();
EmailAddressInformationDataType emailAddressDataType
= new EmailAddressInformationDataType();
emailAddressDataType.setEmailAddress(worker.getPrimaryWorkEmail());
CommunicationMethodUsageInformationDataType usageDataType
= new CommunicationMethodUsageInformationDataType();
usageDataType.setPublic(true);
CommunicationUsageTypeDataType usageTypeData
= new CommunicationUsageTypeDataType();
usageTypeData.setPrimary(true);
CommunicationUsageTypeObjectType usageTypeObjectType
= new CommunicationUsageTypeObjectType();
CommunicationUsageTypeObjectIDType usageTypeObjectID
= new CommunicationUsageTypeObjectIDType();
usageTypeObjectID.setType("Communication_Usage_Type_ID");
usageTypeObjectID.setValue("WORK");
usageTypeObjectType.getID().add(usageTypeObjectID);
usageTypeData.setTypeReference(usageTypeObjectType);
usageDataType.getTypeData().add(usageTypeData);
emailAddressDataType.getUsageData().add(usageDataType);
contactDataType.getEmailAddressData().add(emailAddressDataType);
contactData.setWorkerContactInformationData(contactDataType);
body.setMaintainContactInformationData(contactData);
try
hrPort.maintainContactInformation(body);
catch (edu.bowdoin.workdayservice.data.hr.ProcessingFaultMsg e)
throw new WorkerDataException(e.getMessage(), e);
catch (edu.bowdoin.workdayservice.data.hr.ValidationFaultMsg e)
throw new WorkerDataInvalidException(e.getMessage(), e);
finally
【讨论】:
以上是关于使用 Workday API 编辑工作人员附加数据的主要内容,如果未能解决你的问题,请参考以下文章
Workday - SOAP API - Create_Requisition_Request SOAP 负载
Workday Human Resources API - 请求服务版本无效