ChangeAttribute()

This code sample describes how to update an attribute in a workflow.

	Function Boolean ChangeAttribute( \
		Object prgCtx, \
		WAPIWORK work, \
		Integer workID, \
		Integer subWorkID, \
		Integer taskID, \
		Integer returnSubWorkID, \
		Integer returnTaskID, \
		Dynamic extraData = Undefined )

		//The following variable declarations are taken from the
		//prototype for the general event trigger scripts. This
		//information is stored in the 0Documentation() script
		//that is contained in the GeneralCallbackScripts object in your
		//custom module.

		RecArray attribs
		Record r

		Boolean found = False
		Boolean success = True

		//The following variable declaration references the attributes
		//API object. This object contains the scripts that store data in
		//the database, retrieve data from the database, and delete data
		//in the database. All of the different types of data that pass
		//through a workflow have an attributes API object. The
		//attributes API objects are all children or orphans of
		//WFMain:WFRoot:WFObjectTypes:WFDataTypes.

		Object obj = $WFMain.WFPackageSubsystem.GetItemByName( \
		'WFAttributes' )

		//The following variable declaration calls the script that loads
		//the different types of data that are flowing through the
		//workflow.

		RecArray array = $WFMain.WAPIPkg.LoadWorkData( prgCtx, work )

		//Walk through all the different types of data that are flowing
		//through this workflow, (for example, comments, attachments,
		//forms, attributes) and locate the workflow attributes.

		if ( IsDefined( obj ) )
			for r in array
				if ( { r.TYPE, r.SUBTYPE } == { obj.fType, obj.fSubType } )
					found = True
					break
				end
			end
		
		//When the attribute's RecArray is found, store it in attribs.
		//Then reset the found variable so that it can be used again.

			if ( found )
				attribs = r.USERDATA
				found = False

				//Walk through the attributes and locate the one that you
				//want to update. Then update its value.

				for r in attribs
					if ( r.Name == 'desired attribute' )
						r.Value = 'Some new value'
						found = True
						break
					end
				end

				//When the attribute is updated, save the new workflow data.
				
				if ( found )
					success = obj.SaveWorkData( prgCtx, work, Undefined, \
					attribs )
				end
			end
		end
		return( success )
	end