PutMapData()
This code sample describes how to save the data that the creator of a workflow map enters on the Custom Display Step Definition page.
function assoc PutMapData( \ Object prgCtx, \ Record mapRec, \ Record taskInfo, \ Record r ) Assoc paneData Assoc retVal Integer defaultDispo Integer flags Integer i Integer permAndDispositionFlags List dispositions List emptyDispos Object obj Real time Record p Integer count = 0 retVal.OK = TRUE if ( ( r.PaneIndex == 1 ) || ( r.PaneIndex == 0 ) ) //Save the step name. if ( RecArray.IsColumn( r, 'Title' ) ) taskInfo.Title = $LLIAPI.FormatPkg.ValToString( r.title ) end //Save the start date. if ( RecArray.IsColumn( r, 'StartDate' ) ) taskInfo.StartDate = ._CrackDate( r.StartDate ) end //Save the instructions. if ( RecArray.IsColumn( r, 'Instructions' ) ) taskInfo.Instructions = \ $LLIAPI.FormatPkg.ValToString( r.Instructions ) end //Save the callback script that the creator of the workflow map //selects from the Script to run field. if ( IsFeature( r, 'CustTaskScript' ) && ( \ r.CustTaskScript != [WebWFP_HTMLLabel._None_] ) ) taskInfo.ExAtts.CustTaskScript = r.CustTaskScript //Save the information about when to execute the callback //script (that is, the workflow event that triggers the //callback script). taskInfo.ExAtts.RunScript = r.RunScript else taskInfo.ExAtts.CustTaskScript = Undefined end //Save the template that the creator of the workflow map //selects from the Template to use field. if ( IsFeature( r, 'CustTaskTemplate' ) && ( \ r.CustTaskTemplate != [WebWFP_HTMLLabel._None_] ) ) taskInfo.CustomData.CustTaskTemplate = r.CustTaskTemplate else taskInfo.CustomData.CustTaskTemplate = Undefined end //Save the duration. if ( RecArray.IsColumn( r, 'Duration' ) ) if IsDefined( r.Duration ) && Length( r.Duration ) Boolean inDays = ( r.DurationUnits == "Days" ) time = $LLIAPI.FormatPkg.StringToVal( r.Duration, \ RealType ) if ( Type( time ) != RealType ) retVal.OK = FALSE if inDays retVal.ErrMsg = \ [WebWork_ErrMsg.DurationMustBeANumberOfDays] else retVal.ErrMsg = \ [WebWork_ErrMsg.DurationMustBeANumberOfHours] end else taskInfo.DueDuration = \ $LLIAPI.FormatPkg.ConvertToSeconds( inDays, time ) end else taskInfo.DueDuration = Undefined end end //Save the group options. if RecArray.IsColumn( r, "GroupFlags" ) taskInfo.EXATTS.GroupFlags = Str.StringToInteger( \ r.GROUPFLAGS ) end elseif ( r.PaneIndex == 2 ) //Save the disposition types. for i = 1 to 5 if ( RecArray.IsColumn( r, Str.Format( "disposition_%1", \ i ) ) ) && \ Length( r.( Str.Format( "disposition_%1", i ) ) ) dispositions = { @dispositions, r.( Str.Format( \ "disposition_%1", i ) ) } else emptyDispos = { @emptyDispos, i } end end if RecArray.IsColumn( r, "disposition_selected" ) defaultDispo = $LLIAPI.FormatPkg.StringToVal( \ r.disposition_selected, integerType ) //Retrieve the disposition settings from the Permissions tab //for this step. Ignore those fields in which no values have //been specified. for i in emptyDispos if ( i > defaultDispo ) count += 1 end end defaultDispo -= count If ( Length( dispositions ) > defaultDispo ) retVal.OK = FALSE retVal.ErrMsg = \ [WebWork_ErrMsg.DefaultDispositionMustHaveAName] end else defaultDispo = 1 end if RecArray.IsColumn( r, "RequireDisposition") flags |= $WFPDisposition else dispositions = { 'Approve', 'Reject' } end //Save the permissions settings. if RecArray.IsColumn( r, "SeeAllComments" ) flags |= $WFPComments end if RecArray.IsColumn( r, "SendForReview" ) flags |= $WFPReview end if RecArray.IsColumn( r,"Delegate" ) flags |= $WFPDelegate end taskInfo.USERFLAGS = { flags, { { @dispositions }, \ defaultDispo } } else //Determine whether the data types that are attached to the //workflow need to display anything before setting up the data //for a particular step. For example, the custom display step //type needs to display a tab that allows the creator of a //workflow map to specify whether certain workflow attributes //are editable, required, or read-only. i = 3 for p in mapRec.WORK_PACKAGES obj = $WebWFP.WFPackageSubsystem.GetItem( { p.TYPE, \ p.SUBTYPE } ) if ( IsDefined( obj ) && IsDefined( p.USERDATA ) ) paneData = obj.GetMapData( prgCtx, taskInfo, p.USERDATA ) if ( IsDefined( paneData ) ) if ( i == r.PaneIndex ) retVal = obj.PutMapData( prgCtx, taskInfo, \ p.USERDATA, r ) break else i += 1 end end end end //Save any callback data. $WEBWFP.WFContentManager.StoreCallbackData( taskInfo, \ r ) end return retVal end