CreateReviewMapRec()
This code sample returns the workflow map definition that is used when a step is sent to a Livelink user or group for review. This workflow map definition is created on-the-fly and is initiated as a Sub-workflow step.
Function Record CreateReviewMapRec( \ Object prgCtx, \ Record user, \ Integer groupFlags, \ Assoc taskData, \ RecArray packages ) Boolean expandFlag Dynamic userRecords List fields Integer i Record r Record newTask String fieldName Integer taskID = 1 Point pos = Point( 100, 50 ) //Create a generic map record that contains all of the workflow //map information. Record mapRec = $WFMain.WFMapPkg.CreateMapRec() //Add a Start step and a User step to the workflow map //definition. AddNewTask( \ prgCtx, \ mapRec, \ $WFMain.WFTaskSubsystem.GetItemByName( 'WFStartTask' ), \ Undefined, \ Point( 20, 50 ) ) //Determine whether this step is assigned to a group. If it is, //determine whether the step should be assigned to each member of //the group or to the group as a whole. If the step is assigned //to the group as a whole, the first group member to accept the //step is responsible for completing it. if ( ( user.TYPE != UAPI.USER ) && ( IsSet( groupFlags ) ) && \ ( IsDefined( groupFlags ) ) && ( groupFlags != \ $WFMain.WFConst.kWFGroupStandard ) ) expandFlag = ( groupFlags == \ $WFMain.WFConst.kWFGroupExpandFull ) userRecords = $LLIAPI.UsersPkg.ExpandGroup( prgCtx, user, \ expandFlag ) if ( userRecords.OK ) userRecords = userRecords.Members else userRecords = { user } end else userRecords = { user } end if ( Length( userRecords ) > 1 ) newTask = user else newTask = userRecords[ 1 ] end //Assign a custom display step to each workflow participant to //which the information must be sent for review. newTask = AddNewTask( \ prgCtx, \ mapRec, \ $WFMain.WFTaskSubsystem.GetItemByname( \ 'CustomDisplay' ), \ newTask, \ pos ) //Set the Group Options value to Member Accept (standard). taskData.EXATTS.GroupFlags = $WFMain.WFConst.kWFGroupStandard //Copy the data fields from the original step to the new sub- //workflow step. The allows the Sub-workflow step to be able to //modify the data in the same way that the original step could //modify the data. fields = { 'PAINTER', 'USERDATA' } for fieldName in Assoc.Keys( taskData ) if ( RecArray.IsColumn( newTask, fieldName ) && !( Str.Upper( \ fieldName ) in fields ) ) newTask.( fieldName ) = taskData.( fieldName ) end end newTask.PERFORMERID = userRecords[ 1 ].ID for i = 2 to Length( userRecords ) newTask = $LLIAPI.RecArrayPkg.CopyRec( mapRec.TASKS[ 2 ] ) //Generate a new position for the next step. pos += Point( 0, 75 ) newTask.PAINTER = { pos, newTask.PAINTER[ 2 ] } newTask.PERFORMERID = userRecords[ i ].ID RecArray.AddRecord( mapRec.TASKS, \ RecArray.GetRecord( newTask ) ) end //Add a link between the two tasks. for r in mapRec.TASKS if ( taskID > 1 ) $WFMain.WFMapPkg.AddLinkRecord( \ mapRec.TASKS, \ mapRec.LINKS, \ mapRec.TASKS[ 1 ], \ mapRec.TASKS[ taskID ], \ 0 ) end taskID += 1 end //Add the work package from the main workflow to the sub- //workflow. for r in packages RecArray.AddRecord( mapRec.WORK_PACKAGES, \ RecArray.GetRecord( r ) ) end return( mapRec ) end Function Record AddNewTask( \ Object prgCtx, \ Record mapRec , \ Object taskType, \ Dynamic context, \ Point iconPos ) Dynamic val List data Record taskRec //Add a new Record to the tasks RecArray. taskRec = $LLIAPI.RecArrayPkg.NewRecord( mapRec.TASKS ) taskType.SetTaskDefaults( prgCtx, taskRec, context ) val = taskType.GetPainterInfo( prgCtx, taskRec, context ) taskRec.PAINTER = { iconPos, val } return( taskRec ) end