ReadyTaskForInitiation()
This code sample describes how to prepare a custom display step for initiation in Livelink. It stores callback scripts and any other additional data that is required by the custom display step type throughout the execution of a workflow.
Function Boolean ReadyTaskForInitiation( \ Object prgCtx, \ Record r, \ RecArray workPkg ) Assoc expandInfo List cbInfo List prevCBs RecArray user Boolean initiatorStep = False Boolean success = True Object const = $WFMain.WFConst Object uSession = prgCtx.USession() Record userData = $WFMain.WFMapPkg.CreateTaskUserDataRec() userData.TYPE = r.TYPE userData.SUBTYPE = r.SUBTYPE userData.PERMFLAGS = r.USERFLAGS //Add a standard Done callback script. This callback script is //called when the step is completed and the workflow is routed to //the next workflow participant. The Done callback script //instructs all of the data types in the workflow to make a copy //of the information that was entered for the step. The data type //stores the information in a separate table so that each version //is available at the end of a workflow. if ( IsDefined( r.DONECB ) ) cbInfo = { @r.DONECB, { const.kCBSetTaskDoneData, Undefined } } else cbInfo = { { const.kCBSetTaskDoneData, Undefined } } end //If the creator of the workflow map has selected a callback //script from the Script to run field on the Custom Display Step //Definition page for this step, add the callback script to the //appropriate workflow event (Step Becomes Ready or Step Is Done). if ( IsDefined( r.EXATTS.CustTaskScript ) ) if ( r.EXATTS.RunScript == 'DoneCB' ) cbInfo = { @r.DONECB, { 500, r.EXATTS.CustTaskScript } } else prevCBs = r.READYCB prevCBs = ( IsDefined( prevCBs ) ) ? prevCBs : {} prevCBs = { @prevCBs, { 500, r.EXATTS.CustTaskScript } } r.READYCB = prevCBs end end r.DONECB = cbInfo r.USERDATA = userData //If the performer of the step is a group, add a callback script //that identifies the group name. Then, if the group step is //part of a loopback, the step is reassigned to the whole group //when the route loops back (and not to the individual group //member who initially accepted the step). if ( IsDefined( r.PERFORMERID ) && ( r.PERFORMERID > 0 ) ) user = UAPI.GetByID( uSession.fSession, r.PERFORMERID ) if ( !IsError( user ) ) if ( user[ 1 ].TYPE != UAPI.USER ) prevCBs = r.PERFORMERCB prevCBs = ( IsDefined( prevCBs ) ) ? prevCBs : {} r.PERFORMERCB = { { const.kCBSetGrpStepPerformer, \ r.PERFORMERID }, @prevCBs } end end //If the performer is Undefined, add a callback script that //assigns the step to the initiator of the workflow. elseif ( r.PERFORMERID == 0 ) r.PERFORMERCB = { { const.kCBGetInitiator, Undefined } } initiatorStep = True end //If the performer of the step is a group, and that group should //be expanded so that the step is assigned to all members of the //group, add a Submap callback script. This Submap callback script //creates a Sub-workflow that expands the members of the group. if ( !initiatorStep ) if ( IsSet( r.EXATTS.GroupFlags ) && \ ( r.EXATTS.GroupFlags != const.kWFGroupStandard ) ) expandInfo.Type = r.TYPE expandInfo.SubType = r.SUBTYPE expandInfo.Flag = r.EXATTS.GroupFlags r.SUBMAPIDCB = { { const.kCBExpandGroup, expandInfo } } end end return( success ) end