= Advanced Ticket Workflow Plugin = == Description == AdvancedTicketWorkflowPlugin provides a number of advanced operations for customizable workflows that are similar to the operations provided in the customizeable workflow of the core system. Currently provided operations are: * set_owner_to_reporter * set_owner_to_component_owner * set_owner_to_field * set_owner_to_previous * set_status_to_previous * run_external * triage * xref (File requests for additional operations as enhancement tickets.) == Bugs/Feature Requests == Existing bugs and feature requests for AdvancedTicketWorkflowPlugin are [query:status!=closed&component=AdvancedTicketWorkflowPlugin&order=priority here]. If you have any issues, create a [/newticket?component=AdvancedTicketWorkflowPlugin&owner=retracile new ticket]. == Download and Source == Download the [download:advancedticketworkflowplugin zipped source], check out [/svn/advancedticketworkflowplugin using Subversion], or [source:advancedticketworkflowplugin browse the source] with Trac. == Example == Enable the plugin with: {{{ [components] advancedworkflow.* = enabled }}} (or by copying the egg to the `plugins` directory) Add the individual controller to the workflow controller list: {{{ [ticket] workflow = ConfigurableTicketWorkflow,TicketWorkflowOpOwnerReporter }}} (The individual controller name is listed in parenthesis after the operation name in the documentation section below.) And use the operation in your custom workflow: {{{ [ticket-workflow] needinfo = * -> needinfo needinfo.name = Need info needinfo.operations = set_owner_to_reporter }}} == Documentation == * set_owner_to_reporter (!TicketWorkflowOpOwnerReporter) Sets the owner to the ticket reporter. {{{ .operations = set_owner_to_reporter }}} * set_owner_to_component_owner (!TicketWorkflowOpOwnerComponent) Sets the owner to the ticket's component owner. {{{ .operations = set_owner_to_component_owner }}} * set_owner_to_field (!TicketWorkflowOpOwnerField) Sets the owner to the value of a ticket field. {{{ .operations = set_owner_to_field .set_owner_to_field = mycustomfield }}} * set_owner_to_previous (!TicketWorkflowOpOwnerPrevious) Sets the owner to the previous owner. If there is no previous owner, the owner will be deleted. {{{ .operations = set_owner_to_previous }}} * set_status_to_previous (!TicketWorkflowOpStatusPrevious) Sets the status to the previous status. If there is no previous status, this is a no-op. {{{ .operations = set_status_to_previous }}} * run_external (!TicketWorkflowOpRunExternal) Runs an external script `/hooks/` passing the ticket number and the username as parameters. '''Security warning: If you have account registration available, your hook script ''must'' treat the username as user input.''' {{{ .operations = run_external .run_external = Hint to tell the user. }}} * triage (!TicketWorkflowOpTriage) Sets the next status based on mapping the value of a field to a status value. For example, this can be used for a "triage" action that splits a workflow based on the ticket type. {{{ = somestatus -> * .operations = triage .triage_field = type .triage_split = defect->new_defect,task->new_task,enhancement->new_enhancement }}} * xref (TicketWorkflowOpXRef) Adds a comment to the ticket specified in the text field. Enter either the bare ticket number or '#' + ticket number. The format of the comment to be added to the other ticket is given as a python string with a single `%s` in it. That format string defaults to `'Ticket %s is related to this ticket'`. {{{ ;displays as "close as duplicate [_________]" dup = * -> closed dup.name = close dup.operations = set_resolution,xref dup.set_resolution = duplicate dup.xref = Ticket %s has been marked as a duplicate of this ticket. }}} == Recent Changes == [[ChangeLog(advancedticketworkflowplugin, 3)]] == Author/Contributors == '''Author:''' [wiki:retracile] [[BR]] '''Contributors:'''