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の連絡先Step 1リストデータピルをContactsフィールドにマッピングします。 ContactsフィールドをFormulaモードに切り替えない限り、このデータピルはマッピングできません。
連絡先Step 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の有効な連絡先Step 2データピルをマッピングします。
有効な連絡先Step 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の不正な連絡先Step 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のログStep 2データピルをメッセージフィールドにマッピングします。
メッセージを設定
保存をクリックします。
Salesforceの連絡先情報をJavaScriptで検証し、Snowflakeにアップサートするレシピは、テストと実装の準備ができています。
レシピ設定の例。
JavaScriptを使用してSalesforceの連絡先情報を検証し、Snowflakeにアップサートするレシピ
Last updated:
Add step > IF conditionをクリック