Sample User Delegate script

This is a sample script for UserDelegate:

import com.workbrain2.ion.publ.api.bod.BodProcessorContext
import com.workbrain2.ion.publ.api.bod.BodChangePubl
import com.workbrain2.ion.publ.api.bod.BodProcessorException
import com.workbrain2.ion.publ.api.bod.BodProcessorRetryException
import com.workbrain2.ion.publ.api.bod.BodProcessorScriptable
import com.workbrain2.platform.publ.api.SystemPublicServiceAccess
import com.workbrain2.platform.publ.api.WorkbrainUserDelegatePublService
import com.workbrain2.platform.publ.api.WorkbrainUserPublService
import com.workbrain2.platform.publ.api.domain.WorkbrainUserDelegatePubl
import com.workbrain2.platform.publ.api.domain.WorkbrainUserDelegatePublBuilder

import java.text.SimpleDateFormat

class BodProcessorUserDelegateSample extends BodProcessorScriptable {

    WorkbrainUserDelegatePublService workbrainUserDelegateService = SystemPublicServiceAccess.getWorkbrainUserDelegatePublService()
    WorkbrainUserDelegatePublBuilder workbrainUserDelegatePublBuilder = workbrainUserDelegateService.getWorkbrainUserDelegatePublBuilder()
    WorkbrainUserPublService workbrainUserPublService = SystemPublicServiceAccess.getWorkbrainUserPublService()

    private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd")

    static final String EMPLOYEE_NAME = 'Employee Name'
    static final String DELEGATE_ID = 'Delegate Id'
    static final String USER_NAME_XPATH = "/SyncSecurityUserMaster/DataArea/SecurityUserMaster/DistinguishedName"
    static final String SAMPLE_BOD_ACTION_XPATH = "/SyncSecurityUserMaster/DataArea/Sync/ActionCriteria/ActionExpression/@actionCode"

    @Override
    def void processBodInScript(BodProcessorContext context) {
         throw new BodProcessorException("unknow error , expecting mingle error bod page - CannotFindUserNameXPath", "Cannot find distinguished name in XML!")
        def doc = context.getBodPubl().getXmlDocument()
        def bodActionString = context.findXPath(doc, SAMPLE_BOD_ACTION_XPATH)
        List<BodChangePubl> changes = []

        def userName = context.findXPath(doc, USER_NAME_XPATH)
        if (userName == null) throw new BodProcessorException("CannotFindUserNameXPath", "Cannot find distinguished name in XML!")
        def user = workbrainUserPublService.getWorkbrainUserByUserName(userName)
        if (user == null) throw new BodProcessorRetryException("CannotFindUser", "Cannot find user $userName, retrying.", "Timed out trying to find user $userName")

        if (bodActionString == "Replace") {
            WorkbrainUserDelegatePubl delegate = workbrainUserDelegatePublBuilder
                    .setUserId(3)
                    .setRoleId(0)
                    .setDelegateUserId(user.id)
                    .setDelegateTypeId(3)
                    .setStartDate(
                            dateFormat.parse("1900/01/01")
                    )
                    .setEndDate(
                            dateFormat.parse("2000/01/01")
                    )
                    .setComment("Delegates work")
                    .build()
            workbrainUserDelegateService.saveWorkbrainUserDelegate(delegate)
            context.getBodLogger().info("User delegate has been saved for ${userName}", null)
            changes.add(new BodChangePubl("Added new workbrain user delegate", [
                    (EMPLOYEE_NAME): userName,
                    (DELEGATE_ID)  : user.id.toString()
            ]))
            context.setResults(changes)
        }
    }
}

UserDelegate2 sample script:

import com.workbrain2.ion.publ.api.bod.BodProcessorContext
import com.workbrain2.ion.publ.api.bod.BodChangePubl
import com.workbrain2.ion.publ.api.bod.BodProcessorException
import com.workbrain2.ion.publ.api.bod.BodProcessorScriptable
import com.workbrain2.platform.publ.api.SystemPublicServiceAccess
import com.workbrain2.platform.publ.api.WorkbrainUserDelegatePublService
import com.workbrain2.platform.publ.api.WorkbrainUserPublService
import com.workbrain2.platform.publ.api.domain.WorkbrainUserDelegatePubl
import com.workbrain2.platform.publ.api.domain.WorkbrainUserDelegatePublBuilder

import java.text.SimpleDateFormat

class BodProcessorUserDelegateSample2 extends BodProcessorScriptable {

    WorkbrainUserDelegatePublService workbrainUserDelegateService =
            SystemPublicServiceAccess.getWorkbrainUserDelegatePublService()
    WorkbrainUserDelegatePublBuilder workbrainUserDelegatePublBuilder =
            workbrainUserDelegateService.getWorkbrainUserDelegatePublBuilder()
    WorkbrainUserPublService workbrainUserPublService =
            SystemPublicServiceAccess.getWorkbrainUserPublService()

    private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd")

    static final String EMPLOYEE_NAME = 'Employee Name'
    static final String DELEGATE_USERNAME = 'Delegate Username'
    static final String EMP_NAME_XPATH = "/SyncHRPersonnel/DataArea/HRPersonnel/ID"
    static final String SAMPLE_BOD_ACTION_XPATH = "/SyncHRPersonnel/DataArea/Sync/ActionCriteria/ActionExpression/@actionCode"
    static final String TITLE_VALID_FROM_XPATH = "/SyncHRPersonnel/DataArea/HRPersonnel/Title/@validFrom"
    static final String MULTIPLE_CODES_XPATH = "//Classification/Codes/Code"

    @Override
    def void processBodInScript(BodProcessorContext context) {
        def doc = context.getBodPubl().getXmlDocument()

        def bodActionString = context.findXPath(doc, SAMPLE_BOD_ACTION_XPATH)

        def codesXPathAsString = context.findXPathAsStringList(doc, MULTIPLE_CODES_XPATH)
        context.getBodLogger().info("findXPathAsStringList: " + codesXPathAsString.toString(), null)

        List<BodChangePubl> changes = []

        def multipleCodesNodeList = context.findXPathAsNodeList(doc, MULTIPLE_CODES_XPATH)
        for (int i = 0; i < multipleCodesNodeList.getLength(); i++) {
            def codeDoc = context.createDocumentFromNode(multipleCodesNodeList.item(i))
            def listId = context.findXPath(codeDoc, "*/@listID")
            context.getBodLogger().info("listID: " + listId, null)

            if (listId == "FinanceDimension1" || listId == "FinanceEnterpriseGroup") {
                def innerText = context.findXPath(codeDoc, "*/text()")
                if (innerText == null || innerText.equals("")) {
                    throw new BodProcessorException("innerTextError", "Expected to find inner text")
                } else {
                    context.getBodLogger().info("Inner text: " + innerText, null)
                }

                def validFrom = context.findXPath(codeDoc, "*/@validFrom")
                if (validFrom == null || !validFrom.startsWith("2026")) {
                    throw new BodProcessorException("validFromError", "Expected to find validFrom attribute")
                }

                changes.add(new BodChangePubl("Testing123 Code - " + innerText, new HashMap()))
            }
        }

        def titleValidFromString = context.findXPath(doc, TITLE_VALID_FROM_XPATH)
        def titleValidFromDate = context.toDateOrThrow(titleValidFromString)
        context.getBodLogger().info(titleValidFromString.toString(), null)
        context.getBodLogger().info(titleValidFromDate.toString(), null)

        def userAndEmpName = context.findXPath(doc, EMP_NAME_XPATH)
        def user = workbrainUserPublService.getWorkbrainUserByName(userAndEmpName)

            if (bodActionString == "Replace") {

                WorkbrainUserDelegatePubl delegate = workbrainUserDelegatePublBuilder
                        .setUserId(3)
                        .setRoleId(0)
                        .setDelegateUserId(user.id)
                        .setDelegateTypeId(3)
                        .setStartDate(dateFormat.parse("1900/01/01"))
                        .setEndDate(dateFormat.parse("2027/01/01"))
                        .setComment("Delegates work")
                        .build()

                workbrainUserDelegateService.saveWorkbrainUserDelegate(delegate)

                changes.add(new BodChangePubl("Added new workbrain user delegate", [
                        (EMPLOYEE_NAME)     : userAndEmpName,
                        (DELEGATE_USERNAME) : user.getUsername()
                ]))
            }

            context.setResults(changes)
        }
       
}