GetTaskEditData()
This code sample describes how to retrieve the information that is displayed when a workflow participant clicks the step name on the Tasks page in their Personal Workspace.
function Assoc GetTaskEditData( \
Object prgCtx, \
Record taskInfo, \
Record r )
Assoc a
Assoc data
Assoc paneData
Assoc retVal
Assoc tabPaneInfo
Assoc tmp
Dynamic status
Integer whichTab
List tabList
Object obj
RecArray packages
Record p
WAPIWORK work
Boolean ok = true
Boolean groupStep = False
Integer flags = WAPI.STARTTASK_FLAG_REEXECUTE
Integer i = 1
tmp = GetCustomData( taskinfo.subworktask_customdata )
if ( IsDefined( tmp ) && IsDefined( tmp.CustTaskTemplate ) )
data.HTMLFile = 'redirect.html'
data.CustTaskTemplate = tmp.CustTaskTemplate
data.ModuleName = 'custmod'
else
whichTab = ( RecArray.IsColumn( r, 'PaneIndex' ) ) ? \
Str.StringToInteger( r.PaneIndex ) : Undefined
//If a workflow participant has accessed the step but is just
//viewing the tabs and not actually entering data, do not add
//rows to the audit trail for these operations.
if ( IsDefined( whichTab ) )
if ( whichTab > 0 )
flags = flags | WAPI.STARTTASK_FLAG_NOAUDIT
end
data.HTMLFile = 'tgeneric.html'
data.ModuleName = 'webwork'
data.TaskInfo = taskInfo
//Set the masthead information.
data.HeaderArgs = $WebWork.WFPkg.GetHeaderTypeArgs( \
'WORK', taskInfo.SUBWORK_TITLE )
//Determine whether the step has been assigned to a Livelink
//user or a group.
if !( $WFMain.WAPIPkg.CheckTaskAssignedToUser( prgCtx, \
taskInfo ) )
groupStep = True
end
//Set up the information required to draw the first tab
//(General).
tmp = Assoc.CreateAssoc()
tmp.Label = [WebWork_HTMLLabel.General]
tmp.URL = $WebWork.WFPkg.SetPaneIndexArg( \
$WebDSP.HTMLPkg.ArgsToURL( r ), i )
tmp.Active = FALSE
tabPaneInfo.TabList = { tmp }
a.TaskInfo = taskInfo
a.GroupStep = groupStep
//Use the standard General tab that lets a group member
//accept the step and add it to their step list. This is the
//same General tab that is used for a User step type.
tmp = Assoc.CreateAssoc()
tmp.ModuleName = 'webwork'
tmp.HTMLFile = 'taskgeneralpane.html'
tmp.Data = a
tabPaneInfo.PaneList = { tmp }
if ( !groupStep )
//Get a work handle.
work = prgCtx.WSession().AllocWork()
if ( !IsError( work ) )
//Use the StartTask() script to verify that the
//performer of this step can access the data associated
//with the step. This script sets up the work object so
//that it can be used to access the work package. You
//can also use the StartTask() script to make sure that
//this step is ready to be complete (and was not
//completed already).
status = WAPI.StartTask( \
work, \
r.WorkID, \
r.SubWorkID, \
r.TaskID, \
flags )
if ( !IsError( status ) )
//Retrieve the current work package.
packages = $WFMain.WAPIPkg.GetWorkPackages( \
prgCtx, work, taskInfo )
if ( !IsError( packages ) )
i += 1
for p in packages
obj = \
$WebWork.WFPackageSubsystem.GetItem( \
{ p.TYPE, p.SUBTYPE } )
if ( IsDefined( obj ) && IsDefined( \
p.USERDATA ) )
a = obj.GetTabInfo( prgCtx, r, \
p.USERDATA, i )
a.Active = FALSE
paneData = obj.GetData( \
prgCtx, taskInfo, p.USERDATA, \
r )
if ( IsDefined( paneData ) )
i += 1
paneData.IsEditable = \
True
tabPaneInfo.TabList = { \
@tabPaneInfo.TabList, a }
tabPaneInfo.PaneList = \
{@tabPaneInfo.PaneList, \
paneData }
end
end
end
//If the data was not retrieved correctly
//(OK=FALSE), return an error message.
else
ok = False
retVal.ApiError = work
retVal.ErrMsg = \
[Web_ErrMsg2.CouldNotAccessWorkpackage]
end
//If the data was not retrieved correctly
//(OK=FALSE), return an error message.
else
ok = False
retVal.ApiError = work
retVal.ErrMsg = [Web_ErrMsg2.CouldNotAccessWork]
end
WAPI.FreeWork( work )
else
ok = False
retVal.ApiError = work
retVal.ErrMsg = [Web_ErrMsg2.CouldNotAllocwork]
end
end
if ( ok )
if ( ( whichTab < 2 ) || ( whichTab > Length( \
tabPaneInfo.TabList ) ) )
whichTab = 1
end
tabPaneInfo.TabList[ whichTab ].Active = True
end
data.TabInfo = tabPaneInfo
data.Tab = whichTab
else
ok = False
retVal.ErrMsg = \
[WebWork_ErrMsg.TheArgumentPaneIndexIsRequired]
end
end
retVal.OK = ok
retVal.Data = data
return( retVal )
end
Function Dynamic GetCustomData( Dynamic val )
Dynamic retVal = val
while ( Type( retVal ) == StringType )
retVal = Str.StringToValue( retVal )
end
return( retVal )
end