Salesforceの連絡先情報をJavaScriptで検証し、Snowflakeにアップサートするレシピ
このユースケースでは、Salesforce、JavaScript snippets by Workato、Snowflake、Email by Workatoを接続して、強力な自動化を作成する方法を説明します。
このレシピの機能
このレシピは、新しいSalesforce連絡先をバッチで取得し、JavaScriptを使用して各電話番号を検証し、有効な連絡先をSnowflakeテーブルにアップサートします。無効な電話番号を持つ連絡先はアップサートから除外され、レシピはこれらの無効な連絡先を一覧表示したメールを送信します。
レシピの作成
新しいSalesforce連絡先をバッチで取得し、JavaScriptを使用して各電話番号を検証し、Snowflakeテーブルの行を挿入または更新するレシピを作成するには、次の手順を完了します:
ユースケースは例示のみを目的としています
このユースケースは一例です。このレシピをワークフローに合わせて適応させるには、トリガー、アクション、または条件ロジックの変更が必要になる場合があります。
Workatoにサインインします。
レシピを作成する予定のプロジェクトを選択します。
SalesforceとSnowflakeのコネクションを作成します:
Workatoユーティリティコネクターにはセットアップが不要です
JavaScript snippets by WorkatoおよびEmail by Workatoコネクターでは、コネクションのセットアップは不要です。
Salesforceコネクションを作成します。
Salesforceコネクションの作成
この手順では、WorkatoとSalesforceアカウント間のコネクションを作成します。
作成 > コネクションをクリックするか、Cを2回押します。
新規コネクションページでSalesforceを検索して選択します。
コネクション名フィールドにコネクションの名前を入力します。
Salesforceコネクションのセットアップ
ロケーションドロップダウンメニューを使用して、コネクションを保存するプロジェクトを選択します。
Auth typeドロップダウンメニューを使用して認証方法を選択します。デフォルトはOAuth 2.0です。
サンドボックスドロップダウンメニューを使用して、Salesforceアカウントがサンドボックスアカウントかどうかを指定します。
任意です。詳細設定を展開して、高度なコネクションオプションを設定します。
任意です。 Custom OAuth profileドロップダウンメニューを使用して、コネクション用のCustom OAuth profileを選択します。
- このCustom OAuth profileにより、コネクションは、そのプロファイルを使用するすべてのユーザーに対して選択した同じスコープセットに制限され、認証フローではCustom OAuth profileにリンクされたクライアントアプリが使用されます。
接続をクリックします。
Salesforceアカウントの認証情報を入力し、Log Inをクリックします。
Salesforceアカウントにログインする
Snowflakeコネクションを作成します。
Snowflakeコネクションの作成
このステップでは、WorkatoとSnowflakeアカウント間のコネクションを作成します。
作成 > コネクションをクリックするか、Cを2回押します。
新規コネクションページでSnowflakeを検索して選択します。
コネクション名フィールドにコネクションの名前を入力します。
Snowflakeコネクションのセットアップ
ロケーションドロップダウンメニューを使用して、コネクションを保存するプロジェクトを選択します。
アカウント識別子フィールドにアカウント識別子を入力します。 Snowflakeには、アカウントを識別する複数の方法があります。 Workatoはすべての方法をサポートしています:
- アカウント名:
https://{org.name}-{account_name} - コネクション名:
https://{org.name}-{connectionname} - アカウントロケーター:
https://{account.locator}.{region}.{cloud}
アカウントロケーターを使用している場合、{region}と{cloud}は特定のロケーションでのみ必要であることに注意してください。例:
- アカウントがAWS US West(Oregon)でホストされている場合は、
your-account-locatorを使用します。 - アカウントがAWS US East(Ohio)でホストされている場合は、
your-account-locator.us-east-2を使用します。 - アカウントがAzure West Europeでホストされている場合は、
your-account-locator.west-europe.azureを使用します。
ウェアハウスフィールドに、このコネクションのすべてのオペレーションを実行する予定のウェアハウスのフルネームを入力します。例: compute_wh。
データベース名フィールドに、レシピコネクションで使用する予定のデータベースを入力します。
認証タイプドロップダウンメニューを使用して、認証タイプを選択します。
- ユーザー名/パスワード: このオプションを選択した場合は、ユーザー名とパスワードを入力します。
- OAuth 2.0: このオプションを選択した場合は、Client IDとClient Secretを入力します。
接続をクリックします。
プロジェクトに戻り、Create > Recipeをクリックするか、C+Rを押します。
新しいレシピを作成
Nameフィールドにレシピの名前を入力します。
Locationドロップダウンメニューから、レシピを保存する予定のプロジェクトを選択します。
ビルドを開始をクリックします。
レシピの構築を開始
Pick a starting pointをクリックし、Trigger from an appを選択します。
Select an app and trigger eventをクリックします。
Salesforce New recordsバッチトリガーをセットアップします。
Salesforce New recordsバッチトリガーのセットアップ
このトリガーは、新しい連絡先レコードがないかSalesforceを毎日監視し、新しい連絡先が見つかると特定のフィールドを取得します。
Salesforceを検索し、アプリとして選択します。
Salesforceを選択
New recordsトリガーを選択します。
New recordsバッチトリガーを選択
前の手順で作成したSalesforceコネクションを選択します。
Objectドロップダウンメニューを使用して、新しいレコードを監視するSalesforceオブジェクトとしてContactを選択します。
任意です。 Fields to retrieveドロップダウンメニューを使用して、取得するフィールドを指定します。この例では、次のフィールドを選択します。
- 連絡先ID
- アカウントID
- 姓
- 名
- 勤務先電話
- メール
取得するフィールドを指定
Batch sizeフィールドにバッチサイズを入力します。デフォルトは100で、最大値はバッチあたり2000レコードです。
任意です。 Show optional fieldsをクリックし、Trigger poll intervalを選択して、Apply changesをクリックします。
Trigger poll intervalを設定
任意です。 Trigger poll intervalドロップダウンメニューを使用して、このレシピがSalesforceの新しい連絡先をチェックする頻度を指定します。この例では1 dayを選択します。
保存をクリックします。
+ Add stepをクリックし、Action in appを選択します。
Add step > Add action in appをクリック
JavaScript snippets by WorkatoのExecute codeアクションを設定します。
JavaScript snippets by WorkatoのExecute codeアクションを設定する
このステップでは、各レコードに有効な電話番号が含まれているかどうかを確認して、連絡先を検証します。このアクションは、次の出力フィールドを返します: val_contacts(有効な連絡先のリスト)、bad_contacts(無効な連絡先のリスト)、およびlog。ログメッセージは、バッチ内のすべてのSalesforce連絡先が有効か、無効な電話番号を持つものがあるかによって異なります。
JavaScript snippets by Workatoを検索し、アプリとして選択します。
JavaScript snippets by Workatoを選択
Execute codeアクションを選択します。
Execute codeアクションを選択
NameフィールドにValidate contactsと入力します。これにより、レシピエディター内のアクション名が変更されます。
Nameフィールドを設定
Input fieldsに移動し、Add fieldを選択します。
Nameフィールドにcontactsと入力します。
フィールドを追加をクリックします。
Execute codeアクションを選択
ContactsフィールドをFormulaモードに切り替えます。
Salesforceの連絡先ステップ 1リストデータピルをContactsフィールドにマッピングします。 ContactsフィールドをFormulaモードに切り替えない限り、このデータピルはマッピングできません。
連絡先ステップ 1データピルをマッピング
Output fieldsに移動し、プレースホルダーフィールドを作成します。
Edit schemaをクリックします。
次のJSONスキーマをコピーして貼り付け、既存のスキーマを置き換えます:
[
{
"name": "val_contacts",
"type": "array",
"of": "object",
"label": "Val contacts",
"properties": [
{
"properties": [
{
"control_type": "text",
"label": "Type",
"type": "string",
"name": "type"
},
{
"control_type": "text",
"label": "URL",
"type": "string",
"name": "url"
}
],
"label": "Attributes",
"type": "object",
"name": "attributes"
},
{
"control_type": "text",
"label": "Account ID",
"type": "string",
"name": "AccountId"
},
{
"control_type": "text",
"label": "Phone",
"type": "string",
"name": "Phone"
},
{
"control_type": "text",
"label": "ID",
"type": "string",
"name": "Id"
},
{
"control_type": "text",
"label": "Email",
"type": "string",
"name": "Email"
},
{
"control_type": "text",
"label": "First name",
"type": "string",
"name": "FirstName"
},
{
"control_type": "text",
"label": "Last name",
"type": "string",
"name": "LastName"
},
{
"control_type": "text",
"label": "Valid",
"render_input": {},
"parse_output": {},
"toggle_hint": "Select from option list",
"toggle_field": {
"label": "Valid",
"control_type": "text",
"toggle_hint": "Use custom value",
"type": "boolean",
"name": "valid"
},
"type": "boolean",
"name": "valid"
}
]
},
{
"name": "bad_contacts",
"type": "array",
"of": "object",
"label": "Bad contacts",
"properties": [
{
"properties": [
{
"control_type": "text",
"label": "Type",
"type": "string",
"name": "type"
},
{
"control_type": "text",
"label": "URL",
"type": "string",
"name": "url"
}
],
"label": "Attributes",
"type": "object",
"name": "attributes"
},
{
"control_type": "text",
"label": "Account ID",
"type": "string",
"name": "AccountId"
},
{
"control_type": "text",
"label": "Phone",
"type": "string",
"name": "Phone"
},
{
"control_type": "text",
"label": "ID",
"type": "string",
"name": "Id"
},
{
"control_type": "text",
"label": "Email",
"type": "string",
"name": "Email"
},
{
"control_type": "text",
"label": "First name",
"type": "string",
"name": "FirstName"
},
{
"control_type": "text",
"label": "Last name",
"type": "string",
"name": "LastName"
},
{
"control_type": "text",
"label": "Valid",
"render_input": {},
"parse_output": {},
"toggle_hint": "Select from option list",
"toggle_field": {
"label": "Valid",
"control_type": "text",
"toggle_hint": "Use custom value",
"type": "boolean",
"name": "valid"
},
"type": "boolean",
"name": "valid"
}
]
},
{
"control_type": "text",
"label": "Log",
"type": "string",
"name": "log"
}
]Updateをクリックして、新しいJSONスキーマを適用します。 Output fieldsの下の一覧をスクロールして、新しく適用されたスキーマ出力を確認できます:
Output fields
Salesforceから取得してSnowflakeにアップサートするフィールドに基づいて、このスキーマを変更できます。
Codeフィールドの内容をクリアします。
次のJavaScriptコードをコピーして、Codeフィールドに貼り付けます:
const _ = require("lodash");
class ContactValidator {
static validContact = (phone) => {
return this.validPhoneNumber(phone);
};
static validPhoneNumber = (phone) => {
let phone_regex = /^\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}$/;
return phone ? phone_regex.test(phone) : false;
};
static validate = function(contacts) {
const bad_contacts = [];
const val_contacts = _.filter(contacts, (contact) => {
let phone = _.get(contact, 'Phone');
const isValid = this.validContact(phone);
contact['valid'] = isValid;
if (!isValid) {
bad_contacts.push(contact); // Add invalid contact to the array
return false; // Don't include invalid contacts in val_contacts
}
return true; // Include only valid contacts in val_contacts
});
// Create a log message based on the bad contacts
const logMessage = bad_contacts.length > 0
? `The following contacts were not replicated due to invalid phone numbers: ${bad_contacts.map(c => `${c.FirstName} ${c.LastName} (${c.Phone})`).join(', ')}`
: 'All contacts were valid and successfully replicated.';
return { val_contacts, bad_contacts, log: logMessage };
};
}
exports.main = ({ contacts }) => {
return ContactValidator.validate(contacts);
};保存をクリックします。
+ Add stepをクリックし、Action in appを選択します。
Snowflake Replicate rowsバッチアクションをセットアップします。
Snowflake Replicate rowsバッチアクションのセットアップ
このステップでは、有効な連絡先リストのレコードをSnowflakeテーブルに挿入または更新します。
Snowflakeを検索し、アプリとして選択します。
Snowflakeを選択
Replicate rowsアクションを選択します。
Replicate rowsバッチアクションを選択
前の手順で作成したSnowflakeコネクションを選択します。
Tableドロップダウンメニューを使用して、行をレプリケートするSnowflakeテーブルを選択します。
行フィールドがFormulaモードに切り替わっていることを確認し、JavaScript snippets by Workatoの有効な連絡先ステップ 2データピルをマッピングします。
有効な連絡先ステップ 2データピルをマッピング
Flatten columnsドロップダウンメニューを使用して、Yesを選択します。
Flatten levelフィールドに1と入力します。
Unique keysドロップダウンメニューを使用して、重複する行を識別する1つ以上の一意キーを選択します。この例では、一意キーとしてID(連絡先ID)を選択します。
一意キーを選択
任意です。 Exclude columnsドロップダウンメニューを使用して、行のレプリケート時に除外する列を選択します。この例ではAttributesとValidを選択します。
アップサートから除外する列を選択
保存をクリックします。
JavaScript snippets by WorkatoとSalesforceのIF条件を設定します。
JavaScript snippets by WorkatoとSalesforceのIF条件を設定する
このステップでは、不正な連絡先リストのサイズが0より大きいかどうかを確認します。この条件がtrueの場合、バッチには無効な電話番号を持つ連絡先が1つ以上含まれていることを意味します。
Data fieldをFormulaモードに切り替えます。
JavaScript snippets by Workatoの不正な連絡先ステップ 2データピルをデータフィールドにマッピングします。
.length Formulaを追加します。
Conditionドロップダウンメニューを使用して、greater thanを選択します。
ValueフィールドをFormulaモードに切り替え、0と入力します。
IF条件を設定
保存をクリックします。
Select an app and actionをクリックします。
Email by WorkatoのSend emailアクションを設定します。
Email by WorkatoのSend emailアクションを設定する
不正な連絡先リストのサイズが0より大きい場合、Workatoは、無効な電話番号が原因でSnowflakeにレプリケートされなかったSalesforce連絡先を詳述したメールを、指定した受信者に送信します。
Email by Workatoを検索し、アプリとして選択します。
Email by Workatoを選択
メールを送信アクションを選択します。
Send emailアクションを選択
Toフィールドに受信者のメールアドレスを入力します。
Subjectフィールドに件名を入力します。例: Salesforce Contacts Not Replicated into Snowflake Due to Invalid Data
Email typeドロップダウンメニューを使用して、テキストを選択します。
JavaScript snippets by Workatoのログステップ 2データピルをメッセージフィールドにマッピングします。
メッセージを設定
保存をクリックします。
Salesforceの連絡先情報をJavaScriptで検証し、Snowflakeにアップサートするレシピは、テストと実装の準備ができています。
レシピ設定の例。
JavaScriptを使用してSalesforceの連絡先情報を検証し、Snowflakeにアップサートするレシピ
最終更新日:
Add step > IF conditionをクリック