使用Workday API编辑工作人员附加数据

时间:2017-06-01 20:35:42

标签: api integration workday-api

我想使用API在Workday中编辑自定义员工数据,但文档中未指定实际的自定义数据格式。此外,我无法找到检索其他工作人员数据的方法。 Google没有找到任何使用其API的示例(Edit_Worker_Additional_Data函数)。

2 个答案:

答案 0 :(得分:2)

如果您使用的是Java,以下是使用Workday API更新工作人员数据的示例。 这不是Edit_Worker_Additional_Data,但它们都非常相似,也许这段代码片段可以帮助有人入门。这里的所有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 {

        }
    }

答案 1 :(得分:2)

这是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>