Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 14 Next »

What is an Email Action?

 Email actions send emails to specified addresses.

The Email action can be used to send one or multiple emails. If 100 records are pushed into the Actionflow then 100 emails will be sent, unless a phase is used to send a single email. 

Creating Email Actions

  1. Click and drag the  Email icon from the toolbar onto the canvas
  2. Enter a name for the Email action, then select Create Action
  3. In the Email action  Properties on the right, populate the following details:
FieldDescriptionExample
NameName given to the Email Node. This will be displayed on the Actionflow canvas.MyEmailer
From

The email address the email will be sent from. This should match the email address specified as the login email in your Outbound Emailer.

 How can I find this?

In the  Full Repository, expand the  Email Accounts and double-click on  Outbound emailer.

notifications@phixflow.com
ToThe email address(es) the email will be sent to. Multiple addresses must be comma separated, if an expression evaluates to a list of email addresses then this will be converted automatically to the correct format.sale@phixflow.com
CC

The CC email addresses. Provided as a comma-separated list if multiple values are required. If an expression evaluates to a list then this will be converted automatically to the correct format.

This is an optional field.

info@phixflow.com, marketing@phixflow.com
BCC

The BCC email addresses. Provided as a comma-separated list if multiple values are required. If an expression evaluates to a list then this will be converted automatically to the correct format.

This is an optional field.

info@phixflow.com, marketing@phixflow.com
Subject

The email's subject.

This accepts JEP expressions in the format ${Connector.AttributeName} and ${Function}.

// Send the message followed by a timestamp

MyEmailer has run successsfully at ${now()}

is HTML

 Treat the Message as HTML.

 Treat the Message as plain text.

The default setting is plain text. This accepts JEP expressions in the format ${Connector.AttributeName} and ${Function}.


MessageThe content of the email. This can be text or JEP expressions. 

// Sends the content of the attribute MyMessage from the in pipe

${in.MyMessage}

All fields can be either literal values or expressions encapsulated within ${} syntax, for example ${in.MyValue}.

Verifying Emails

It is possible to check an email has successfully been sent using the Email tab at the top of the system console. System Console → Email Tab. See System Console

Attachments

Currently unsupported in Actionflows. To send an email with an attachment, see Sending Emails.

Built-in Error Handling

Basic validation is performed to ensure that email addresses are well-formed. If they are not this will cause the Actionflow to fail immediately. Other errors, such as email addresses for accounts that don’t exist, won’t cause a failure of the Actionflow but they will result in an unsuccessful email send.

Opening an Email Client

The  Open URL can be used to open an email client where the user can send an email.

 Show more

Use the open URL node to send an email. A valid email address must be mapped to the URL attribute in the format:

'mailto:' + in.EmailAddress

The function 'mailto:' causes the browser to open an appropriate email web client and sets the email address to the one provided.

Provide different URL expressions to populate the email:

  • subject
  • cc
  • bcc
  • body text

Subject

'mailto:' + in.EmailAddress + "?subject=" + in.Subject

//or

'mailto:' + in.EmailAddress + "?subject=Email Subject"

CC

'mailto:' + in.EmailAddress + "?cc=" + in.cc1 + "," + in.cc2

//or

'mailto:' + in.EmailAddress + "?cc=someoneelse@email.com, another@email.com"

BCC

'mailto:' + in.EmailAddress + "?bcc=" + in.cc1 + "," + in.cc2

//or

'mailto:' + in.EmailAddress + "?bcc=someoneelse@email.com, another@email.com"

Body Text

'mailto:' + in.EmailAddress + "?body=" + in.Body

//or

'mailto:' + in.EmailAddress + "?body=This is the body of the email."

Adding Body Text Lines

The body is by default one line, that will wordwrap according to the email client settings. In order to split the body over multiple lines or paragraphs, use: %0d%0a

For example, to generate t he following email body text:

This is the body of the email.

This is the second line of the body of the email.

specify:

// use %0d%0a to start a new line

'mailto:' + in.EmailAddress + "?body=This is the body of the email.%0d%0aThis is the second line of the body of the email."

Combining Fields

The following expression shows how to create all the different email fields using one expression:

"mailto: " + in.EmailAddress + "?cc=" + in.cc1 + "," + in.cc2 + "&bcc=" + in.bcc + "&subject=" + in.Subject + "&body=" + in.Body


Worked Examples

Here are worked examples using the Shop Data (available from the Learning Centre).

In this example, we are using:  

  • Shop Staff Form screen containing blank input fields, set up to create a new staff member  - this screen was created using the Edit Form template
  • A Shop Orders screen containing a grid of the Shop Orders data, Order Status filters buttons and a card container of the Shop Order Lines data  - this screen was created using the Multi-Tile template

If you are completing this chapter as part of the Actionflow course and using a training instance, the data and screens have already been pre-loaded into the Actionflow Intermediate Application. For these example, we'll be working on the Save button on the Shop Staff Form, and creating a button on the Shop Orders screen

GIF/SCREENSHOT OF FINISHED RESULT   

Example 1: Send One Email For One Record

In this example, we'll modify the Actionflow on the Save button for when a new staff member is created. We'll configure this Actionflow to send an email to the Team Leader (i.e. you) with a reminder to complete a full induction.

  1. On the Shop New Staff Form screen, open the Actionflow on the Save button
  2. Create a new  Gateway action to ensure an email is only sent when a new employee is saved but not when an existing employee is saved, and insert this between the  input node and  Save action

     How?

    • Ensure that staffID is mapped into the Gateway action from the input
  3. Create an additional Save action, with the same setup as the existing Save action
  4. Map the Gateway action to both Save actions 
    1. You should now have a Gateway action, followed by two Save actions
  5. Hover over the Save action on the canvas that you will use for new employees (i.e. that will save and send an email) and select, out
  6. Click onto any blank canvas space and choose the 

     icon
    1. Enter a suitable name for the node and select Create Action
  7. Click on the Email Action to open its Properties and pin the tab
  8. For the From field, we need to use the email address specified as the login email in your Outbound Emailer; to find this, in the  Full Repository, expand  Email Accounts
    1. Double-click on  Outbound emailer and copy the login email 
  9. Paste this into the From field on your pinned  Email properties, and enter the following:
    1. To: enter your email address
      1. This way you can see if the Actionflow is working
    2. Subject:

      New Employee: ${in.firstName} ${in.lastName}
    3. is HTML: Toggle on  
    4. Message:

      Here are ${in.firstName} ${in.lastName}'s details:
      
      ID Number: ${in.staffID}
      
      Start Date: ${in.startDate} 
      
      toString(_fromDate,"dd MMMM yyyy")
      
      Department: ${in.departmentIDdepartmentName}
      
      Contract Type: ${in.employmentType}
      
      Please ensure ${in.firstName} ${in.lastName} completes full induction training and all training sign offs are completed by dateAdd(${in.startDate},_WEEK_OF_YEAR, 2).
      1. Leave all other fields blank
    5.  Apply and Close

Example 2: Send One Email For Multiple Records

In this example, we'll configure a button to run a processing check of all order lines for all incomplete orders. This will check for any incomplete orders where all order lines are marked as 'Closed'. Where an order's order lines are all closed, the order will be updated to Completed and an email will be sent detailing how many orders have been updated to completed that day.

To send one email for multiple records, an additional phase will be required.

Setup the Views and Calculate Action

  1. On the Shop Orders screen, use the palette to create a button that will initiate the Actionflow
  2. Right-click on the button and  Add Actionflow 
  3. On the Actionflow canvas, configure an Input of On Click
  4. Add a   View Action and set the Primary Table to the Orders data

  5. Filter on the View Action to only retrieve the incomplete orders

    1.  How?

      Add a Filter with the filter conditions:

      1. Status not equals Completed 

      Add Output Attributes:

      1. OrderID
      2. Status
  6. Connect the input to this View Action

  7. Add a  Calculate Action from the toolbar

    1. This Calculate Action will be to used in a lookup

  8. Connect the View Action to the Calculate Action
  9. Add another   View Action from the toolbar to the canvas and set the Primary Table to the Order Lines data

  10. Filter on the View Action to only retrieve Open order lines, and where the orderID from the Orders data equals the orderID from the Order Lines data
    1.  How?

      Add a Filter with two filter conditions:

      1. Where ALL of the following are true:
        1. LineStatus not equals Closed
        2. OrderID equals OrderID
  11. Hover over the Calculate Action and choose Add Lookup, then click on the lookup connector

  12. Configure the Incoming Mappings:
    1. OrderID
  13. Configure the Outgoing Mappings:
    1. LineStatus
    2. OrderID
    3. OrderLineID
    4. OrderLineNumber
  14. Click on the Calculate Action and using the function countElements, add two Output Attributes:
    1. add an Output Attribute that counts the records coming from the lookup and where this is more than zero, returns the Order Status that is currently set but where this is zero, returns the string, "Completed"
      1. zero records means that all Order Lines are Closed
      2. the "Completed" string will be mapped to the Order Status
    2. add an Output Attribute that counts the records coming from the lookup and where this is more than zero, returns NULL but where this is zero, returns today's date 

       How?

      Add an Output Attribute for the status:

      if(
          countElements(lu) > 0, in.status, 
          
          //flag record as Completed if all order lines Closed
          "Completed"
      )

       Add an Output Attribute for the completion date:

      if(
          countElements(lu) > 0, _NULL, 
          
          //return today's date for complete orders
          now()
      )
  15. Add a  Save Action to the canvas that saves data back to the Orders dataset, and map across:
    1. The Completion Date Output Attribute onto the CompletionDate in the data
    2. The Status Output Attribute onto the Status in the data
    3. The OrderID from the Orders View onto the OrderID in the data
    4. Toggle on Auto Save Attributes in the Save Action Properties

Setup the Email Phase

Create an additional phase in the Actionflow to send an email in. This is required to ensure only one email is sent regardless of the amount of records passing through the Actionflow.

As data cannot be passed between phases, this Actionflow will include a lookup to the Orders data, specifically to the data that was saved as part of the first phase of the Actionflow.

  1. Add a  Start Phase to the canvas and create an additional phase to send the email in
  2. Open the Emailing Phase and configure an Input of On Phase Start
  3. Add a  Calculate Action that will be used for a lookup
  4. Connect the input to the Calculate Action
  5. Add a   View Action with the Orders data as the Primary Table
  6. Filter on the View Action to only retrieve Orders with a Completion Date of today 
    1.  How?

      Add a Filter with the filter condition:

      1. CompletionDate equals today()
  7. Hover over the Calculate Action and choose Add Lookup, then click on the lookup connector
  8. Configure the Outgoing Mappings:
    1. CompletionDate
    2. OrderID
  9. Click on the Calculate Action and using the function countElements, add an Output Attribute that counts the records coming from the lookup connector 

     How?

    Add an Output Attribute:

    1. Type: Integer
    2. Expression: 

      countElements(lu)
  10. Add a  Email Action to the canvas and connect the Calculate Action to this
    1. Map across the above Output Attribute from the Calculate Action
  11. Click on the Email Action to open its Properties, and enter the following:
    1. From: use the email address you used in Example 1
    2. To: enter your email address
      1. This way you can see if the Actionflow is working
    3. Subject:

      Order Completion Check
    4. is HTML: Toggle off  
    5. Message:

      Overnight order processing run finished at ${toString(now(),"dd MM yyyy")}.
      ${in.CountCompletedToday} order(s) now completed.
      1. Leave all other fields blank
    6.  Apply and Close

Test the Actionflow

To test the Actionflow we need an Open or Processing order that has all of its order lines set to Status of Closed. 

  1. On the Shop Orders screen, use the filers to find an Open or Processing order
  2. Change all of its Order Lines to Closed and Save each change
    1. ZB THIS IS A ROUGH GIF, NOT FINAL 
  3. Click on the button you created on the screen to initiate the Actionflow


  • No labels