Salesforceの連絡先情報をJavaScriptで検証し、Snowflakeにアップサートするレシピ

このページは機械翻訳により提供されています。翻訳内容と英語版に相違がある場合は、英語版が優先されます。

このユースケースでは、SalesforceJavaScript snippets by WorkatoSnowflakeEmail by Workatoを接続して、強力な自動化を作成する方法を説明します。

このレシピの機能

このレシピは、新しいSalesforce連絡先をバッチで取得し、JavaScriptを使用して各電話番号を検証し、有効な連絡先をSnowflakeテーブルにアップサートします。 無効な電話番号を持つ連絡先はアップサートから除外され、レシピはこれらの無効な連絡先を一覧表示したメールを送信します。

レシピの作成

新しいSalesforce連絡先をバッチで取得し、JavaScriptを使用して各電話番号を検証し、Snowflakeテーブルの行を挿入または更新するレシピを作成するには、次の手順を完了します:

ユースケースは例示のみを目的としています

このユースケースは一例です。 このレシピをワークフローに合わせて適応させるには、トリガー、アクション、または条件ロジックの変更が必要になる場合があります。

1

Workatoにサインインします。

2

レシピを作成する予定のプロジェクトを選択します。

3

SalesforceとSnowflakeのコネクションを作成します:

Workatoユーティリティコネクターにはセットアップが不要です

JavaScript snippets by WorkatoおよびEmail by Workatoコネクターでは、コネクションのセットアップは不要です。

Salesforceコネクションを作成します。

Salesforceコネクションの作成

この手順では、WorkatoとSalesforceアカウント間のコネクションを作成します。

1

作成 > コネクションをクリックするか、Cを2回押します。

2

新規コネクションページでSalesforceを検索して選択します。

3

コネクション名フィールドにコネクションの名前を入力します。

SalesforceコネクションのセットアップSalesforceコネクションのセットアップ

4

ロケーションドロップダウンメニューを使用して、コネクションを保存するプロジェクトを選択します。

5

Auth typeドロップダウンメニューを使用して認証方法を選択します。 デフォルトはOAuth 2.0です。

6

サンドボックスドロップダウンメニューを使用して、Salesforceアカウントがサンドボックスアカウントかどうかを指定します。

7

任意です。 詳細設定を展開して、高度なコネクションオプションを設定します。

8

任意です。 Custom OAuth profileドロップダウンメニューを使用して、コネクション用のCustom OAuth profileを選択します。

  • このCustom OAuth profileにより、コネクションは、そのプロファイルを使用するすべてのユーザーに対して選択した同じスコープセットに制限され、認証フローではCustom OAuth profileにリンクされたクライアントアプリが使用されます。
9

接続をクリックします。

10

Salesforceアカウントの認証情報を入力し、Log Inをクリックします。

Salesforceコネクション設定Salesforceアカウントにログインする

Snowflakeコネクションを作成します。

Snowflakeコネクションの作成

このステップでは、WorkatoとSnowflakeアカウント間のコネクションを作成します。

1

作成 > コネクションをクリックするか、Cを2回押します。

2

新規コネクションページでSnowflakeを検索して選択します。

3

コネクション名フィールドにコネクションの名前を入力します。

SnowflakeコネクションのセットアップSnowflakeコネクションのセットアップ

4

ロケーションドロップダウンメニューを使用して、コネクションを保存するプロジェクトを選択します。

5

アカウント識別子フィールドにアカウント識別子を入力します。 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を使用します。
6

ウェアハウスフィールドに、このコネクションのすべてのオペレーションを実行する予定のウェアハウスのフルネームを入力します。 例: compute_wh

7

データベース名フィールドに、レシピコネクションで使用する予定のデータベースを入力します。

8

認証タイプドロップダウンメニューを使用して、認証タイプを選択します。

  • ユーザー名/パスワード: このオプションを選択した場合は、ユーザー名とパスワードを入力します。
  • OAuth 2.0: このオプションを選択した場合は、Client IDとClient Secretを入力します。
9

接続をクリックします。

4

プロジェクトに戻り、Create > Recipeをクリックするか、C+Rを押します。

新しいレシピを作成新しいレシピを作成

5

Nameフィールドにレシピの名前を入力します。

6

Locationドロップダウンメニューから、レシピを保存する予定のプロジェクトを選択します。

7

ビルドを開始をクリックします。

レシピの構築を開始レシピの構築を開始

8

Pick a starting pointをクリックし、Trigger from an appを選択します。

9

Select an app and trigger eventをクリックします。

10
Salesforce New recordsバッチトリガーをセットアップします。

Salesforce New recordsバッチトリガーのセットアップ

このトリガーは、新しい連絡先レコードがないかSalesforceを毎日監視し、新しい連絡先が見つかると特定のフィールドを取得します。

1

Salesforceを検索し、アプリとして選択します。

Salesforceを選択Salesforceを選択

2

New recordsトリガーを選択します。

New recordsバッチトリガーを選択New recordsバッチトリガーを選択

3

前の手順で作成したSalesforceコネクションを選択します。

4

Objectドロップダウンメニューを使用して、新しいレコードを監視するSalesforceオブジェクトとしてContactを選択します。

5

任意です。 Fields to retrieveドロップダウンメニューを使用して、取得するフィールドを指定します。 この例では、次のフィールドを選択します。

  • 連絡先ID
  • アカウントID
  • 勤務先電話
  • メール

取得するフィールドを指定取得するフィールドを指定

6

Batch sizeフィールドにバッチサイズを入力します。 デフォルトは100で、最大値はバッチあたり2000レコードです。

7

任意です。 Show optional fieldsをクリックし、Trigger poll intervalを選択して、Apply changesをクリックします。

Trigger poll intervalを設定Trigger poll intervalを設定

8

任意です。 Trigger poll intervalドロップダウンメニューを使用して、このレシピがSalesforceの新しい連絡先をチェックする頻度を指定します。 この例では1 dayを選択します。

9

保存をクリックします。

11

+ Add stepをクリックし、Action in appを選択します。

アクションを追加Add step > Add action in appをクリック

12
JavaScript snippets by WorkatoのExecute codeアクションを設定します。

JavaScript snippets by WorkatoのExecute codeアクションを設定する

このステップでは、各レコードに有効な電話番号が含まれているかどうかを確認して、連絡先を検証します。 このアクションは、次の出力フィールドを返します: val_contacts(有効な連絡先のリスト)、bad_contacts(無効な連絡先のリスト)、およびlog。 ログメッセージは、バッチ内のすべてのSalesforce連絡先が有効か、無効な電話番号を持つものがあるかによって異なります。

1

JavaScript snippets by Workatoを検索し、アプリとして選択します。

JavaScript snippets by Workatoを選択JavaScript snippets by Workatoを選択

2

Execute codeアクションを選択します。

Execute codeアクションを選択Execute codeアクションを選択

3

NameフィールドにValidate contactsと入力します。 これにより、レシピエディター内のアクション名が変更されます。

Nameフィールドを設定Nameフィールドを設定

4

Input fieldsに移動し、Add fieldを選択します。

1

Nameフィールドにcontactsと入力します。

2

フィールドを追加をクリックします。

Execute codeアクションを選択Execute codeアクションを選択

5

ContactsフィールドをFormulaモードに切り替えます。

6

Salesforceの連絡先Step 1リストデータピルをContactsフィールドにマッピングします。 ContactsフィールドをFormulaモードに切り替えない限り、このデータピルはマッピングできません。

Contactsデータピルをマッピング連絡先Step 1データピルをマッピング

7

Output fieldsに移動し、プレースホルダーフィールドを作成します。

8

Edit schemaをクリックします。

9

次のJSONスキーマをコピーして貼り付け、既存のスキーマを置き換えます:

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"
  }
]
10

Updateをクリックして、新しいJSONスキーマを適用します。 Output fieldsの下の一覧をスクロールして、新しく適用されたスキーマ出力を確認できます:

Output fieldsOutput fields

Salesforceから取得してSnowflakeにアップサートするフィールドに基づいて、このスキーマを変更できます。

11

Codeフィールドの内容をクリアします。

12

次のJavaScriptコードをコピーして、Codeフィールドに貼り付けます:

javascript
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);
};
13

保存をクリックします。

13

+ Add stepをクリックし、Action in appを選択します。

14
Snowflake Replicate rowsバッチアクションをセットアップします。

Snowflake Replicate rowsバッチアクションのセットアップ

このステップでは、有効な連絡先リストのレコードをSnowflakeテーブルに挿入または更新します。

1

Snowflakeを検索し、アプリとして選択します。

Snowflakeを選択Snowflakeを選択

2

Replicate rowsアクションを選択します。

Replicate rowsバッチアクションを選択Replicate rowsバッチアクションを選択

3

前の手順で作成したSnowflakeコネクションを選択します。

4

Tableドロップダウンメニューを使用して、行をレプリケートするSnowflakeテーブルを選択します。

5

フィールドがFormulaモードに切り替わっていることを確認し、JavaScript snippets by Workatoの有効な連絡先Step 2データピルをマッピングします。

Val contactsデータピルをマッピング有効な連絡先Step 2データピルをマッピング

6

Flatten columnsドロップダウンメニューを使用して、Yesを選択します。

7

Flatten levelフィールドに1と入力します。

8

Unique keysドロップダウンメニューを使用して、重複する行を識別する1つ以上の一意キーを選択します。 この例では、一意キーとしてID(連絡先ID)を選択します。

一意キーを選択一意キーを選択

9

任意です。 Exclude columnsドロップダウンメニューを使用して、行のレプリケート時に除外する列を選択します。 この例ではAttributesValidを選択します。

アップサートから除外する列を選択アップサートから除外する列を選択

10

保存をクリックします。

15

+ Add stepをクリックし、IF conditionを選択します。

IF条件を追加Add step > IF conditionをクリック

IF条件の仕組み

SnowflakeとSalesforceのIF条件の例

IF条件を使用すると、特定の条件に基づいて判断できます。 指定した条件がtrueかfalseかに応じて異なるアクションを実行することで、レシピのワークフローを制御できます。

16
JavaScript snippets by WorkatoとSalesforceのIF条件を設定します。

JavaScript snippets by WorkatoとSalesforceのIF条件を設定する

このステップでは、不正な連絡先リストのサイズが0より大きいかどうかを確認します。 この条件がtrueの場合、バッチには無効な電話番号を持つ連絡先が1つ以上含まれていることを意味します。

1

Data fieldをFormulaモードに切り替えます。

2

JavaScript snippets by Workatoの不正な連絡先Step 2データピルをデータフィールドにマッピングします。

3

.length Formulaを追加します。

4

Conditionドロップダウンメニューを使用して、greater thanを選択します。

5

ValueフィールドをFormulaモードに切り替え、0と入力します。

IF条件を設定IF条件を設定

6

保存をクリックします。

17

Select an app and actionをクリックします。

18
Email by WorkatoのSend emailアクションを設定します。

Email by WorkatoのSend emailアクションを設定する

不正な連絡先リストのサイズが0より大きい場合、Workatoは、無効な電話番号が原因でSnowflakeにレプリケートされなかったSalesforce連絡先を詳述したメールを、指定した受信者に送信します。

1

Email by Workatoを検索し、アプリとして選択します。

Email by Workatoを選択Email by Workatoを選択

2

メールを送信アクションを選択します。

Send emailアクションを選択Send emailアクションを選択

3

Toフィールドに受信者のメールアドレスを入力します。

4

Subjectフィールドに件名を入力します。 例: Salesforce Contacts Not Replicated into Snowflake Due to Invalid Data

5

Email typeドロップダウンメニューを使用して、テキストを選択します。

6

JavaScript snippets by WorkatoのログStep 2データピルをメッセージフィールドにマッピングします。

メッセージを設定メッセージを設定

7

保存をクリックします。

Salesforceの連絡先情報をJavaScriptで検証し、Snowflakeにアップサートするレシピは、テストと実装の準備ができています。

レシピ設定の例。

Salesforce、JavaScript snippets by Workato、Snowflake、Email by WorkatoのレシピJavaScriptを使用してSalesforceの連絡先情報を検証し、Snowflakeにアップサートするレシピ

Last updated: