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)
}
}