Skip to main content

Workflows

Establish a System for Resolving Support Tickets

The basic Support Ticket application can only create and edit tickets. Now we can add a mechanism to see the progress of a ticket and identify who is working on it.

NOTE: This tutorial is built upon the foundation of the Support Ticket application.

1. Define Ticket Status codebook

  • Type Ctrl + Shift + C; click Codebook
  • Set Name to: Ticket Status
  • Verify that Create Display Attribute is set to: Name
  • Click Finish
  • On the Ticket Status codebook, click Edit Entries
  • Copy and paste the entries from the table below (without table headers)
CodeName
NEWNew
IN_PROGRESSIn Progress
CLOSEDClosed
  • Click OK
  • Save changes: Ctrl + S

2. Update your Ticket entity

  • Go to Data > Entities and double-click Ticket
  • In Data Definition > References, click Add New Reference
  • Set Reference Type to: Codebook
  • Set Target to: TicketStatus
  • Set Please select default values to: NEW
  • Click Create References
  • In Data Definition > Attributes, click Add New Attribute
  • Set the following new attributes (i.e., Attribute name — Type):
    Date In Progress — Date and Time (mark Allow null)
    Date Closed — Date and Time (mark Allow null)
    Assigned To — User
    Description Of Resolution — Rich-text Markdown
  • Click Create Attributes
  • Save changes: Ctrl + S

3. Add Workflow

State machines represent workflow transitions and conditions.

  • Go to Business > State Machines, click (+) OR Click Ctrl + Shift + C and, in the Business section, click State Machine
  • Set Name to: Ticket Status
  • Set Entity to: Ticket
  • Set Codebook Representing States to: TicketStatus
  • Click Finish

4. Add Transitions

In the Ticket Status state machine,

  • Click Add New Transition
  • Set Origin State to NEW.
  • Set Destination State to IN_PROGRESS
  • Mark Transition Handler. Click in the box. Copy and paste:
(ticket, db, ctx) =>
{
ticket.DateInProgress = DateTime.Now;
}
  • Click OK

    Follow the same steps to establish each additional transition.
  • Click Add New Transition
  • Set Origin State to: IN_PROGRESS.
  • Set Destination State to: CLOSED
  • Mark Transition Handler. Copy and paste:
(ticket, db, ctx) =>
{
ticket.DateInProgress = DateTime.Now;
}
  • Click OK

    Only a ticket with a Description of Resolution can be closed. Under the IN_PROGRESS->CLOSED transition, click Add New Transition Condition
  • Set Title of Condition to Description of Resolution Provided
  • Verify that Severity is set to: Error
  • Click in the Condition box. Copy and paste:
(ticket, db, ctx) => !string.IsNullOrEmpty(ticket.DescriptionOfResolution)
  • Click OK
  • Click OK
  • Save changes: Ctrl + S

5. Add State Machine to Ticket Entity

  • Open the Ticket entity (Go to Data > Entities and double-click Ticket.)
  • Click the Settings tab. In the User Interface section, set State Machine to: Ticket Status
  • Set State Codebook Reference to: TicketStatus (TicketStatus)
  • Save changes: Ctrl + S

6. Modify your Ticket Detail Page

  • Go to UI > Entity Pages and double-click Ticket Detail
  • In the top Layout section, click Edit Layout
  • Add the following data fields: Ticket Status, Created Date, Date In Progress, Date Closed, Assigned To, Created By and Description of Resolution.
  • Drag and drop the data fields around inside the two columns to the desired layout

    Set all of the Date data fields to Read Only. Click on each of the following titles one at a time: Created Date, Date In Progress, Date Closed
  • Mark Enabled Expression and type: false
  • Click OK

    Establish that Date In Progress and Date Closed must have values.
  • Click Date In Progress
  • Set Visible Expression to:
(ticket, db, ctx) => ticket.DateInProgress.HasValue
  • Click OK
  • Click Date Closed
  • Set Visible Expression to:
 (ticket, db, ctx) => ticket.DateClosed.HasValue
  • Click OK

    Click DescriptionOfResolution
  • In the Validations section, click the Magic Wand; select: Not empty string
  • On the Can’t be empty entry, click the Edit icon
  • Verify that Valid Condition shows the following: !String.IsNullOrEmpty(ticket.DescriptionOfResolution)
  • Mark Is Applicable. Copy and paste:
ticket.TicketStatus == TicketStatus.IN_PROGRESS
  • Click OK
  • Click OK
  • Save changes: Ctrl + S

7. Show State Machine Buttons

  • Continue on the Ticket Detail page (UI > Entity Pages, double-click Ticket Detail.)
  • Click the Settings tab. In the UI section, click Show State Change Toolbar
  • Change the value to: True
  • Save changes: Ctrl + S

8. Update List page

The main list page should include this new information.

  • In UI > Entity Pages, double-click Ticket list
  • Click the Columns tab (if necessary).
  • Add TicketStatus (TicketStatus)
  • Add other new columns and organize the columns for the desired layout
  • Click Close
  • Save changes: Ctrl + S

9. Deploy and Run the App