GetMapData()
This code sample describes how to display the Step Definition page for this step type when the creator of a workflow map edits the step in the Workflow Designer.
function Assoc GetMapData( \ Object prgCtx, \ Integer mapID, \ Integer taskID, \ Record mapRec, \ Record request ) Assoc a Assoc paneData Assoc performerInfo Assoc retVal Assoc tabPaneInfo Dynamic tmp Integer whichTab List tabList Object obj Record p String label Boolean knownUser = False Integer i = 1 Record taskInfo = mapRec.TASKS[ taskID ] String gif = 'guy.gif' String name = [WebWFP_HTMLLabel.User] String objName = .OSName whichTab = ( RecArray.IsColumn( request, 'PaneIndex' ) ) ? \ Str.StringToInteger( request.PaneIndex ) : 1 //Specify the commonedittask.html file as the HTML file to //display when the creator of a workflow map edits a custom //display step in the Workflow Designer. Specify the location of //the commonedittask.html file (that is, the webwfp module). retVal.HTMLFile = "commonedittask.html" retVal.ModuleName = 'webwfp' //Create an Assoc named retVal.Data and populate it with the step //and map information, including the ID of the workflow map, the //ID of the step, the URL of the next page to display, and the //header information for the step. retVal.Data = Assoc.CreateAssoc() retVal.Data.MapID = mapID retVal.Data.TaskID = taskID retVal.Data.NextURL = request.NextURL retVal.Data.HeaderArgs = $WebWork.WFPkg.GetHeaderTypeArgs( \ 'PAINT', $WebWork.WFPkg.GetMapName( prgCtx, mapID, \ mapRec ) ) retVal.Data.HeaderLabel = [WebWFP_HTMLLabel.StartStepDefinition] //Create an Assoc named tmp that stores all of the data required //to paint the first tab that appears when the creator of a //workflow map edits the custom display step in the Workflow //Painter (that is, the General tab). tmp = Assoc.CreateAssoc() tmp.Label = [WebWork_HTMLLabel.General] tmp.URL = $WebWork.WFPkg.SetPaneIndexArg( \ $WebDSP.HTMLPkg.ArgsToURL( request ), i ) tmp.HelpKey = objName tmp.Active = FALSE //This step type uses the commonedittask.html file. This HTML //file expects to be passed a list of tab names, along with a //list of the data to be displayed on each tab. TabList is a list //of Assocs that identifies each tab to be displayed. There is //another list of Assocs that lists the panes to be displayed //with each tab. This second list of Assocs contains the HTML //information and all other information that the pane needs to //draw itself. tabPaneInfo.TabList = { tmp } a = Assoc.CreateAssoc() a.TaskInfo = taskInfo a.MapID = mapID a.TaskID = taskID - 1 a.NextURL = request.NextURL //Retrieves the name of the performer of the step and a .gif file //that represents the performer type (that is, a user or a //group). If the step is assigned to the initiator of the //workflow, then >Initiator< is returned as the performer's name. if ( IsDefined( taskInfo.PERFORMERID ) ) if ( taskInfo.PERFORMERID == 0 ) name = [WebWFP_Label.LtInitiatorGt] else tmp = UAPI.GetByID( prgCtx.USession().fSession, \ taskInfo.PERFORMERID ) if ( !IsError( tmp ) ) knownUser = True name = tmp[ 1 ].NAME if ( tmp[ 1 ].TYPE != UAPI.USER ) gif = '2-guys.gif' end end end end if ( gif == '2-guys.gif' ) a.Gif = '16group.gif' else a.Gif = '16user.gif' end performerInfo.Name = name performerInfo.Gif = gif performerInfo.KnownUser = knownUser performerInfo.ID = taskInfo.PERFORMERID a.PerformerInfo = performerInfo //Create an Assoc named tmp that stores the name of your custom //module, the HTML file to display, and the data that appears on //the General tab. tmp = Assoc.CreateAssoc() tmp.ModuleName = 'custmod' tmp.HTMLFile = 't_user.html' tmp.Data = a //Set the name of the Step Definition page for this step type. //This page is displayed when the creator of a workflow map edits //a custom display step in the Workflow Designer. retVal.Data.HeaderLabel = 'Custom Display Step Definition' tabPaneInfo.PaneList = { tmp } i += 1 //Create the Permissions tab that appears on the Custom Display //Step Definition page for this step type. tmp = Assoc.CreateAssoc() tmp.Label = [WebWFP_Label.Permissions] tmp.URL = $WebWork.WFPkg.SetPaneIndexArg( \ $WebDSP.HTMLPkg.ArgsToURL( request ), i ) tmp.HelpKey = objName + "." + 'Permissions' // do not XLATE tmp.Active = FALSE tabPaneInfo.TabList = { @tabPaneInfo.TabList, tmp } a = Assoc.CreateAssoc() a.Permissions = taskInfo.USERFLAGS //Create an Assoc named tmp that stores the name of your custom //module, the HTML file to display, and the data that appears on //the Permissions tab. tmp = Assoc.CreateAssoc() tmp.ModuleName = 'webwfp' tmp.HTMLFile = 't_perms.html' tmp.Data = a tabPaneInfo.PaneList = { @tabPaneInfo.PaneList, tmp } i += 1 //Set up any data type information that is required for this type //of step. for p in mapRec.WORK_PACKAGES obj = $WebWFP.WFPackageSubsystem.GetItem( { p.TYPE, \ p.SUBTYPE } ) if ( IsDefined( obj ) && IsDefined( p.USERDATA ) ) a = obj.GetTabInfo( prgCtx, request, p.USERDATA, i ) a.Active = FALSE if IsDefined( a.HelpKey ) a.HelpKey = objName + "." + a.HelpKey else a.HelpKey = objName end paneData = obj.GetMapData( prgCtx, taskInfo, p.USERDATA ) if ( IsDefined( paneData ) ) i += 1 tabPaneInfo.TabList = { @tabPaneInfo.TabList, a } tabPaneInfo.PaneList = { @tabPaneInfo.PaneList, paneData } end end end i = Length( tabPaneInfo.TabList ) + 1 //List the callback scripts that fire, if applicable. AssoceventInfo List fields = { 'PERFORMERCB', 'READYCB', 'DONECB', 'KILLCB', \ 'RESURRECTCB' } List events = { [WebWFP_HTMLLabel.AssignStepPerformer], \ [WebWFP_HTMLLabel.StepBecomesReady], \ [WebWFP_HTMLLabel.StepIsDone], \ [WebWFP_HTMLLabel.StepIsKilled], \ [WebWFP_HTMLLabel.StepIsResurrected] } eventInfo.Events = events eventInfo.FieldNames = fields eventInfo = $WFMain.WFMapPkg.GetValidEvents( prgCtx, eventInfo ) if ( eventInfo.NumberOfEvents > 0 ) tmp = Assoc.CreateAssoc() tmp.Label = [WebWFP_HTMLLabel.EventScripts] tmp.URL = $WebWork.WFPkg.SetPaneIndexArg( \ $WebDSP.HTMLPkg.ArgsToURL( request ), i ) tmp.HelpKey = objName + "." + 'EventScripts' tmp.Active = FALSE tabPaneInfo.TabList = { @tabPaneInfo.TabList, tmp } a = Assoc.CreateAssoc() a.EventInfo = eventInfo a.DataRec = taskInfo tmp = Assoc.CreateAssoc() tmp.ModuleName = 'webwfp' tmp.HTMLFile = 't_events.html' tmp.Data = a tabPaneInfo.PaneList = { @tabPaneInfo.PaneList, tmp } end //Store the pane information for the tabs in the data Assoc. Then //set the active tab. By default, the active tab is 1 (or //whichever tab was originally passed into the script). if ( ( whichTab > 2 ) || ( whichTab > Length( \ tabPaneInfo.TabList ) ) ) whichTab = 1 end tabPaneInfo.TabList[ whichTab ].Active = True retVal.Data.TabInfo = tabPaneInfo retVal.Data.Tab = whichTab return( retVal ) end