Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Edit worker additional data using Workday API

I'd like to edit custom employee data in Workday using their API but the actual custom data format is not specified in the documentation. Also, I was not able to find a way to retrieve additional worker data. Google doesn't find any examples of using their API for this (Edit_Worker_Additional_Data function).

like image 883
Konstantin Tikhonov Avatar asked Mar 18 '26 20:03

Konstantin Tikhonov


2 Answers

This is how the SOAP request would look like, including all optional parameters.

<?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>

You have to define the Custom Object (or Additional Data) elements within

<wd:Business_Object_Additional_Data></wd:Business_Object_Additional_Data>

If your Custom Object is defined as "TestObject" for example, you would need both the Object and Field Reference IDs, and it would look like this:

<wd:Business_Object_Additional_Data>
          <cus:TestObject>
              <cus:TestObjectField>Value</cus:TestObjectField>
          </cus:TestObject>
</wd:Business_Object_Additional_Data>
like image 199
Yavor Avatar answered Mar 22 '26 20:03

Yavor


If you are using Java, here is an example usage of the Workday API to update worker data. This is not the Edit_Worker_Additional_Data, but they all work very similar and maybe this code snippet will help someone get started. All of the Java classes here are generated from the wsdl using jaxws-maven-plugin, except for WorkdayCredentials class, see Workday Soap API - User Name/Password for that.

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 {

        }
    }
like image 45
Erik Pearson Avatar answered Mar 22 '26 20:03

Erik Pearson