Compound Action Examples

These examples show how data moves between slots and actions.

Get Salesforce Accounts by Name (Single Action, Return)

Slots

  • account_name

Compound Action

steps:
  - action:
      output_key: account_info
      action_name: get_account_info # the action that fetches accounts by name
      progress_updates:
        on_complete: Found info for {{data.account_name}}
        on_pending: Searching Salesforce for {{data.account_name}}
      input_args:
        account_name: data.account_name
  - return:
      output_mapper:
      	# if no results are returned the values will evaluate to ""
        description: data.account_info.records[0].Description
        account_id: data.account_info.records[0].Id

Create Salesforce Case & Sync to JIRA

Slots

  • description
  • subject
  • account_id
  • type

Compound Action

steps:
  - action:
      output_key: case_info
      action_name: create_sfdc_case
      progress_updates:
        on_complete: Created a new case in Salesforce
        on_pending: Creating a new case in Salesforce
      input_args:
        description: data.description
        subject: data.subject
        account_id: data.account_id
        type: data.type
  - action:
      output_key: jira_issue
      action_name: create_jira_issue
      progress_updates:
        on_complete: Added Issue to JIRA
        on_pending: Adding Issue to JIRA
      input_args:
        description: data.description
        subject: data.subject
  - action:
      output_key: case_update
      action_name: update_sfdc_case
      progress_updates:
        on_complete: Updated Case Object
        on_pending: Adding JIRA Link to Case Comment
      input_args:
        case_id: data.case_info.id
        jira_link: $CONCAT(["https://deep-nets-team.atlassian.net/browse/",
          data.jira_issue.key])

Onboard Users (Multi Action, Switch, Return)

Slots

  • username
  • firstName
  • lastName
  • companyName
  • groupName
  • managerName
  • managerEmail

Compound Action

steps:
  - action:
      output_key: msgraph_user
      action_name: add_username_to_azure
      progress_updates:
        on_complete: Added {{data.username}} to Azure
        on_pending: Attempting to add {{data.username}} to Azure
      input_args:
        companyName: data.companyName
        fullName: $CONCAT([data.firstName, data.lastName], " ", TRUE)
        firstName: data.firstName
        username: IF data.username THEN $CONCAT([data.username,
          "@moveworksai.onmicrosoft.com"]) ELSE NULL
  - switch:
      cases:
        - steps:
            - action:
                output_key: group_info
                action_name: get_group_info
                progress_updates:
                  on_complete: Found {{data.groupName}} in Azure
                  on_pending: Looking up group in Azure by name
                input_args:
                  groupName: data.groupName
            - action:
                output_key: add_user_to_group_result
                action_name: add_user_to_group
                progress_updates:
                  on_complete: Added {{data.username}} to Azure Group
                  on_pending: Adding user to group
                input_args:
                  groupId: data.group_info.value[0].id
                  userId: data.msgraph_user.id
          condition: data.groupName
  - action:
      output_key: jira_customer
      action_name: add_username_to_jira
      progress_updates:
        on_complete: Added {{data.username}} to JIRA
        on_pending: Attempting to add {{data.username}} to JIRA
      input_args:
        email: IF data.username THEN $CONCAT([data.username,
          "@moveworksai.onmicrosoft.com"]) ELSE NULL
        displayName: $CONCAT([data.firstName, data.lastName], " ", TRUE)
  - action:
      output_key: okta_user
      action_name: add_username_to_okta
      progress_updates:
        on_complete: Added {{data.username}} to Okta
        on_pending: Attempting to add {{data.username}} to Okta
      input_args:
        username: IF data.username THEN $CONCAT([data.username,
          "@moveworksai.onmicrosoft.com"]) ELSE NULL
        lastName: data.lastName
        firstName: data.firstName
        managerEmail: data.managerEmail
        managerName: data.managerName
  - return:
      output_mapper:
        lastName: data.lastName
        firstName: data.firstName

Lookup Gcal Events (Action, Script Action, Return)

Slots

  • start_date
  • end_date

Compound Action

steps:
  - action:
      action_name: 9f3062bc-5ed1-4b56-aaa4-022d1514bb0c
      input_args:
        timeMin: data.start_date
        timeMax: data.end_date
      output_key: gcal_output
  - script:
      output_key: cleaned_events
      input_args:
        events: data.gcal_output.items
      code: "[{'htmlLink': event.get('htmlLink'), 'description':
        event.get('description'), 'summary': event.get('summary')} for event in
        events]"
  - return:
      output_mapper:
        final_events: data.cleaned_events