Setting up an Event-based Trigger
Triggered based on the user defined event such as Tailor DB record creation EventType: "tailordb.type_record.created".
Tutorial steps
To create an event based trigger, you'll need to:
- Activate the Executor service
- Add the trigger in executorconfiguration file
- Enable PublishRecordEventssettings
- Apply the change
- Verify the trigger
1. Activate the Executor service
To activate the Executor service, add an executor.tf file to the root folder of the application. Define the trigger as shown below.
<span><span style="color: var(--shiki-token-function)">resource</span><span style="color: var(--shiki-color-text)"> "tailor_executor" "webhook_starship" {</span></span>
<span><span style="color: var(--shiki-color-text)">  workspace_id </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> tailor_workspace.ims.id</span></span>
<span><span style="color: var(--shiki-color-text)">  name         </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"<trigger-name>"</span></span>
<span></span>
<span><span style="color: var(--shiki-color-text)">  trigger </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)">	event </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> {}</span></span>
<span><span style="color: var(--shiki-color-text)">  }</span></span>
<span></span>
<span><span style="color: var(--shiki-color-text)">  operation </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> {}</span></span>
<span><span style="color: var(--shiki-color-text)">}</span></span>
<span></span>Learn more about executor properties in the Tailor Platform Provider documentation.
2. Add the trigger in executor configuration file
<span><span style="color: var(--shiki-token-function)">resource</span><span style="color: var(--shiki-color-text)"> "tailor_executor" "event_based_executor" {</span></span>
<span><span style="color: var(--shiki-color-text)">  workspace_id </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> tailor_workspace.ims.id</span></span>
<span><span style="color: var(--shiki-color-text)">  name         </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"event-based-executor"</span></span>
<span><span style="color: var(--shiki-color-text)">  description  </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"Execute query based on an event"</span></span>
<span></span>
<span><span style="color: var(--shiki-color-text)">  trigger </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)">    event </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)">  	type      </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"tailordb.type_record.created"</span></span>
<span><span style="color: var(--shiki-color-text)">  	condition </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)"><<EOF</span></span>
<span><span style="color: var(--shiki-token-string)">  	  args.namespaceName == "ims" && args.typeName == "Category"</span></span>
<span><span style="color: var(--shiki-token-keyword)">  	EOF</span></span>
<span><span style="color: var(--shiki-color-text)">    }</span></span>
<span><span style="color: var(--shiki-color-text)">  }</span></span>
<span></span>
<span><span style="color: var(--shiki-color-text)">  operation </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)">    tailor_graphql </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)">  	app_name </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> tailor_application.ims.name</span></span>
<span><span style="color: var(--shiki-color-text)">  	invoker </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)">  	  event_user </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">true</span></span>
<span><span style="color: var(--shiki-color-text)">  	}</span></span>
<span><span style="color: var(--shiki-color-text)">  	query </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)"><<EOF</span></span>
<span><span style="color: var(--shiki-token-string)">  	  mutation createProduct($categoryID: ID!, $title: String!) {</span></span>
<span><span style="color: var(--shiki-token-string)">  		createProduct(input: {</span></span>
<span><span style="color: var(--shiki-token-string)">  		  categoryID: $categoryID</span></span>
<span><span style="color: var(--shiki-token-string)">  		  title: $title</span></span>
<span><span style="color: var(--shiki-token-string)">  		}) {</span></span>
<span><span style="color: var(--shiki-token-string)">  		  id</span></span>
<span><span style="color: var(--shiki-token-string)">  		}</span></span>
<span><span style="color: var(--shiki-token-string)">  	  }</span></span>
<span><span style="color: var(--shiki-token-keyword)">  	EOF</span></span>
<span><span style="color: var(--shiki-color-text)">  	variables </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-keyword)"><<EOF</span></span>
<span><span style="color: var(--shiki-token-string)">  	  ({</span></span>
<span><span style="color: var(--shiki-token-string)">  		"categoryID": args.newRecord.id,</span></span>
<span><span style="color: var(--shiki-token-string)">  		"title": args.newRecord.name + "Product"</span></span>
<span><span style="color: var(--shiki-token-string)">  	  })</span></span>
<span><span style="color: var(--shiki-token-keyword)">  	EOF</span></span>
<span><span style="color: var(--shiki-color-text)">    }</span></span>
<span><span style="color: var(--shiki-color-text)">  }</span></span>
<span><span style="color: var(--shiki-color-text)">}</span></span>
<span></span>3. Enable PublishRecordEvents settings
To ensure that a Product record is created through the trigger for every Category type record created, you'll need to enable PublishRecordEvents in the settings.
<span><span style="color: var(--shiki-token-function)">resource</span><span style="color: var(--shiki-color-text)"> "tailor_tailordb_type" "category" {</span></span>
<span><span style="color: var(--shiki-color-text)">  workspace_id </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> tailor_workspace.ims.id</span></span>
<span><span style="color: var(--shiki-color-text)">  namespace    </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> tailor_tailordb.ims.namespace</span></span>
<span><span style="color: var(--shiki-color-text)">  name         </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"Category"</span></span>
<span><span style="color: var(--shiki-color-text)">  description  </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string-expression)">"Contains information about categories of products."</span></span>
<span></span>
<span><span style="color: var(--shiki-color-text)">  settings </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)">	publish_record_events </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-constant)">true</span><span style="color: var(--shiki-color-text)">,</span></span>
<span><span style="color: var(--shiki-color-text)">  }</span></span>
<span></span>
<span><span style="color: var(--shiki-color-text)">  fields </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)">	</span><span style="color: var(--shiki-token-keyword)">...</span></span>
<span><span style="color: var(--shiki-color-text)">  }</span></span>
<span></span>
<span><span style="color: var(--shiki-color-text)">  type_permission </span><span style="color: var(--shiki-token-keyword)">=</span><span style="color: var(--shiki-color-text)"> local.permission_everyone</span></span>
<span><span style="color: var(--shiki-color-text)">}</span></span>
<span></span>4. Apply the change
Run the following command to apply the changes.
<span><span style="color: var(--shiki-token-function)">terraform</span><span style="color: var(--shiki-color-text)"> </span><span style="color: var(--shiki-token-string)">apply</span></span>
<span></span>5. Verify the trigger
Click on the application and select Executors from the navigation to view the created executor in the Console.

View the executor details by clicking the Open Details button in the Details column of the overview table.

In the console, select GraphQL Playground to create a new sales order.
<span><span style="color: var(--shiki-token-keyword)">mutation</span><span style="color: var(--shiki-color-text)"> {</span></span>
<span><span style="color: var(--shiki-color-text)">  createSalesOrder(input:{ </span><span style="color: var(--shiki-token-string)">orderNumber</span><span style="color: var(--shiki-color-text)">: </span><span style="color: var(--shiki-token-constant)">987</span><span style="color: var(--shiki-color-text)"> }) {</span></span>
<span><span style="color: var(--shiki-color-text)">    id</span></span>
<span><span style="color: var(--shiki-color-text)">  }</span></span>
<span><span style="color: var(--shiki-color-text)">}</span></span>
<span></span>After executing the query, view the job created for that executor by selecting the Jobs tab and choosing the executor from the dropdown menu.

Clicking Open Attempts displays details of job execution attempts made by the Executor. When the Target execution fails with a status code other than 2xx, the Tailor Platform retries the job execution. However, retries are not performed for certain errors, such as incorrect executor configuration or script errors.
Upon successful completion of the job, a new Shipment record is created.
