ChooseUser()
This code sample describes how to identify the user to which the next step in a workflow is assigned.
Function Integer ChooseUser( \ Object prgCtx, \ WAPIWORK work, \ Integer workID, \ Integer subWorkID, \ Integer taskID, \ Integer returnSubWorkID, \ Integer returnTaskID, \ Integer performerID = Undefined ) //The following variable declarations are taken from the //prototype for performer event trigger scripts. This //information is stored in the ODocumentation() script associated //with the PerformerCallbackScripts object in your custom module. Dynamic userID RecArray attribs RecArray performer Record r String userName Boolean found = False Boolean success = True //The following variable declaration references the attributes //API object. This object contains the scripts that store data in //the database, retrieve data from the database, and delete data //in the database. All of the different types of data that pass //through a workflow have an attributes API object. The //attributes API objects are all children or orphans of //WFMain:WFRoot:WFObjectTypes:WFDataTypes. Object obj = $WFMain.WFPackageSubsystem.GetItemByName( \ 'WFAttributes' ) Object uSession = prgCtx.USession() Object wSession = prgCtx.WSession() //Call the script that loads the different types of data that are //flowing through the workflow (for example, comments, //attachments, forms, attributes). RecArray array = $WFMain.WAPIPkg.LoadWorkData( prgCtx, work ) //Walk through all the different types of data that are flowing //through this workflow, (for example, comments, attachments, //forms, attributes) and locate the workflow attributes. if ( IsDefined( obj ) ) for r in array if ( { r.TYPE, r.SUBTYPE } == { obj.fType, obj.fSubType } ) found = True break end end //When the attributes RecArray is found, store it in attribs. //Then reset the found variable so that it can be used again. if ( found ) attribs = r.USERDATA found = False //Walk through the attribute's RecArray looking for the //UserName attribute. for r in attribs if ( r.Name == 'UserName' ) userName = r.Value found = True break end end //When the UserName attribute is found, retrieve the UserID //variable. if ( found ) performer = UAPI.GetUser( uSession.fSession, userName ) //When the UserID variable is found, set its value. if ( IsNotError( performer ) ) userID = performer[ 1 ].ID else userID = performer end end end end //If the userID variable is not found, return an error. You can //set the error to Error.Get( 600 ), which is a generic workflow //error. If you want to display a more specific error message, //you can set fErrorMsg in the WSession object. if ( !IsDefined( userID ) ) userID = Error.Get( 600 ) wSession.fErrorMsg = "Could not find the attribute UserName" +\ "to determine user." end return( userID ) end