次の方法で共有


Azure Data Factory または Synapse Analytics を使用して Salesforce Service Cloud V1 との間でデータをコピーする

適用対象: Azure Data Factory Azure Synapse Analytics

ヒント

企業向けのオールインワン分析ソリューション、Microsoft Fabric の Data Factory をお試しください。 Microsoft Fabric は、データ移動からデータ サイエンス、リアルタイム分析、ビジネス インテリジェンス、レポートまで、あらゆるものをカバーしています。 無料で新しい試用版を開始する方法について説明します。

この記事では、Azure Data Factory と Synapse Analytics パイプラインの Copy アクティビティを使用して、Salesforce Service Cloud 間でデータをコピーする方法について説明します。 この記事は、コピー アクティビティの概要を示しているコピー アクティビティの概要に関する記事に基づいています。

重要

Salesforce Service Cloud V2 コネクタでは、Salesforce Service Cloud のネイティブ サポートが強化されています。 ソリューションで Salesforce Service Cloud V1 コネクタを使用している場合は、できるだけ早く Salesforce Service クラウド コネクタをアップグレードすることをお勧めします。 V2 と V1 の違いの詳細については、このセクションを参照してください。

サポートされる機能

この Salesforce Service Cloud コネクタは、次の機能でサポートされます。

サポートされる機能 IR
Copy アクティビティ (ソース/シンク) ① ②
Lookup アクティビティ ① ②

① Azure 統合ランタイム ② セルフホステッド統合ランタイム

ソースまたはシンクとしてサポートされているデータ ストアの一覧については、サポートされるデータ ストアに関する表を参照してください。

具体的には、この Salesforce Service Cloud コネクタは以下をサポートします。

  • Salesforce Developer、Professional、Enterprise、または Unlimited エディション。
  • Salesforce 運用環境、サンドボックス、およびカスタム ドメインをコピー先またはコピー元とするデータのコピー。

Salesforce コネクタは、Salesforce REST/Bulk API 上に構築されます。 コネクタは、Salesforce からデータをコピーするとき、既定では v45 を使用し、データ サイズに基づいて REST または Bulk API を自動的に選択します。結果セットが大きい場合は、パフォーマンス向上のために Bulk API が使用されます。コネクタは、Salesforce にデータを書き込むとき、Bulk API の v40 を使用します。 また、リンクされたサービスで apiVersion プロパティ を使用して、データの読み取りまたは書き込みに使用する API バージョンを明示的に設定することもできます。

前提条件

Salesforce で API アクセス許可を有効にする必要があります。

Salesforce の要求の制限

Salesforce では、API 要求数の合計と、API の同時要求数に上限が設けられています。 以下の点に注意してください。

  • 同時要求数が上限を超えると調整が発生し、ランダムにエラーが表示されます。
  • 要求数の合計が上限を超えると、Salesforce アカウントが 24 時間ブロックされます。

また、どちらのシナリオでも、"REQUEST_LIMIT_EXCEEDED" エラー メッセージが表示されることがあります。 詳細については、Salesforce Developer の制限に関する資料の「API Request Limits」(API 要求の制限) をご覧ください。

はじめに

パイプラインでコピー アクティビティを実行するには、次のいずれかのツールまたは SDK を使用します。

UI を使用して Salesforce Service Cloud のリンク サービスを作成する

次の手順を使用して、Azure portal UI で Salesforce Service Cloud のリンク サービスを作成します。

  1. Azure Data Factory または Synapse ワークスペースの [管理] タブに移動し、[リンクされたサービス] を選択して、[新規] をクリックします。

  2. Salesforce を検索し、Salesforce Service Cloud コネクタを選択します。

    Salesforce Service Cloud コネクタを選択します。

  3. サービスの詳細を構成し、接続をテストして、新しいリンク サービスを作成します。

    Salesforce Service Cloud のリンク サービスを構成します。

コネクタの構成の詳細

次のセクションでは、Salesforce Service Cloud コネクタに固有の Data Factory エンティティを定義するために使用されるプロパティについて詳しく説明します。

リンクされたサービスのプロパティ

Salesforce のリンクされたサービスでは、次のプロパティがサポートされます。

プロパティ 内容 必須
type type プロパティは SalesforceServiceCloud に設定する必要があります。 はい
environmentUrl Salesforce Service Cloud インスタンスの URL を指定します。
既定値は "https://login.salesforce.com" です。
- サンドボックスからデータをコピーするには、"https://test.salesforce.com" を指定します。
- カスタム ドメインからデータをコピーするには、"https://[domain].my.salesforce.com"のように指定します。
いいえ
username ユーザー アカウントのユーザー名を指定します。 はい
password ユーザー アカウントのパスワードを指定します。

このフィールドを SecureString とマークして安全に保存するか、Azure Key Vault に保存されているシークレットを参照します。
はい
securityToken ユーザー アカウントのセキュリティ トークンを指定します。

セキュリティ トークンの概要については、「Security and the API (セキュリティと API)」をご覧ください。 セキュリティ トークンをスキップできるのは、Salesforce で信頼済み IP アドレスの一覧に Integration Runtime の IP を追加した場合のみです。 Azure IR を使用する場合は、「Azure Integration Runtime の IP アドレス」を参照してください。

セキュリティ トークンの取得およびリセット方法については、セキュリティ トークンの取得に関する記事を参照してください。 このフィールドを SecureString としてマークして Data Factory に安全に保管するか、Azure Key Vault に格納されているシークレットを参照します。
いいえ
apiVersion 48.0 など、使用する Salesforce の REST または Bulk API バージョンを指定します。 既定では、コネクタによって、Salesforce からデータをコピーするには v45 が、Salesforce にデータをコピーするには v40 が使用されます。 いいえ
connectVia データ ストアに接続するために使用される統合ランタイム。 指定されていない場合は、既定の Azure 統合ランタイムが使用されます。 いいえ

例: 資格情報を格納する

{
    "name": "SalesforceServiceCloudLinkedService",
    "properties": {
        "type": "SalesforceServiceCloud",
        "typeProperties": {
            "username": "<username>",
            "password": {
                "type": "SecureString",
                "value": "<password>"
            },
            "securityToken": {
                "type": "SecureString",
                "value": "<security token>"
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

例:Key Vault に資格情報を格納する

{
    "name": "SalesforceServiceCloudLinkedService",
    "properties": {
        "type": "SalesforceServiceCloud",
        "typeProperties": {
            "username": "<username>",
            "password": {
                "type": "AzureKeyVaultSecret",
                "secretName": "<secret name of password in AKV>",
                "store":{
                    "referenceName": "<Azure Key Vault linked service>",
                    "type": "LinkedServiceReference"
                }
            },
            "securityToken": {
                "type": "AzureKeyVaultSecret",
                "secretName": "<secret name of security token in AKV>",
                "store":{
                    "referenceName": "<Azure Key Vault linked service>",
                    "type": "LinkedServiceReference"
                }
            }
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

データセットのプロパティ

データセットを定義するために使用できるセクションとプロパティの完全な一覧については、データセットに関する記事をご覧ください。 このセクションでは、Salesforce Service Cloud データセットでサポートされるプロパティの一覧を示します。

Salesforce Service Cloud との間でのデータ コピーについては、次のプロパティがサポートされています。

プロパティ 内容 必須
type type プロパティは SalesforceServiceCloudObject に設定する必要があります。 はい
objectApiName データの取得元の Salesforce オブジェクト名。 ソースの場合はいいえ、シンクの場合ははい

重要

カスタム オブジェクトには、API 名の "__c" の部分が必要となります。

Salesforce 接続 API 名

例:

{
    "name": "SalesforceServiceCloudDataset",
    "properties": {
        "type": "SalesforceServiceCloudObject",
        "typeProperties": {
            "objectApiName": "MyTable__c"
        },
        "schema": [],
        "linkedServiceName": {
            "referenceName": "<Salesforce Service Cloud linked service name>",
            "type": "LinkedServiceReference"
        }
    }
}
プロパティ 内容 必須
type データセットの type プロパティは RelationalTable に設定する必要があります。 はい
tableName Salesforce Service Cloud のテーブル名。 いいえ (アクティビティ ソースの "query" が指定されている場合)

コピー アクティビティのプロパティ

アクティビティの定義に利用できるセクションとプロパティの完全な一覧については、パイプラインに関する記事を参照してください。 このセクションでは、Salesforce Service Cloud ソースとシンクでサポートされるプロパティの一覧を示します。

ソースの種類としての Salesforce Service Cloud

Salesforce Service Cloud からデータをコピーするために、コピー アクティビティの source セクションでは次のプロパティがサポートされています。

プロパティ 内容 必須
type コピー アクティビティのソースの type プロパティは SalesforceServiceCloudSource に設定する必要があります。 はい
query カスタム クエリを使用してデータを読み取ります。 Salesforce オブジェクト クエリ言語 (SOQL) クエリまたは SQL-92 クエリを使用できます。 その他のヒントについては、「クエリのヒント」セクションをご覧ください。 クエリが指定されていない場合は、データセット内の "objectApiName"で指定された Salesforce Service Cloud オブジェクトのすべてのデータが取得されます。 いいえ (データセットの "objectApiName" が指定されている場合)
readBehavior 既存のレコード、または削除されたものを含むすべてのレコードの、どちらのクエリを行うかを示します。 指定しない場合の既定の動作は前者です。
使用可能な値: query (既定値)、queryAll.
いいえ

重要

カスタム オブジェクトには、API 名の "__c" の部分が必要となります。

Salesforce 接続 API 名一覧

例:

"activities":[
    {
        "name": "CopyFromSalesforceServiceCloud",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<Salesforce Service Cloud input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "SalesforceServiceCloudSource",
                "query": "SELECT Col_Currency__c, Col_Date__c, Col_Email__c FROM AllDataType__c"
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

注意

Salesforce Service Cloud ソースでは、セルフホステッド統合ランタイムのプロキシ設定はサポートされていませんが、シンクではサポートされます。

シンクの種類としての Salesforce Service Cloud

Salesforce Service Cloud にデータをコピーするために、コピー アクティビティの sink セクションでは次のプロパティがサポートされています。

プロパティ 内容 必須
type コピー アクティビティのシンクの type プロパティは SalesforceServiceCloudSink に設定する必要があります。 はい
writeBehavior 操作の書き込み動作。
使用可能な値: Insert および Upsert
いいえ (既定値は Insert)
externalIdFieldName Upsert 操作の外部 ID フィールドの名前。 指定するフィールドは、Salesforce Service Cloud オブジェクトに "External ID Field" として定義されている必要があります。 対応する入力データに NULL 値を持つことはできません。 "Upsert" の場合ははい
writeBatchSize 各バッチで Salesforce Service Cloud に書き込まれたデータの行数。 いいえ (既定値は 5,000)
ignoreNullValues 書き込み操作時に入力データからの NULL 値を無視するかどうかを示します。
使用可能な値: true および false
- True:upsert または更新操作を行うときに、対象オブジェクト内のデータが変更されないようにします。 挿入操作を実行するときに、定義済みの既定値を挿入します。
- False:upsert または更新操作を行うときに、対象オブジェクト内のデータを NULL に更新します。 挿入操作を実行するときに、NULL 値を挿入します。
いいえ (既定値は false)
 maxConcurrentConnections アクティビティの実行中にデータ ストアに対して確立されたコンカレント接続数の上限。 コンカレント接続を制限する場合にのみ、値を指定します。   なし

例:

"activities":[
    {
        "name": "CopyToSalesforceServiceCloud",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<Salesforce Service Cloud output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "<source type>"
            },
            "sink": {
                "type": "SalesforceServiceCloudSink",
                "writeBehavior": "Upsert",
                "externalIdFieldName": "CustomerId__c",
                "writeBatchSize": 10000,
                "ignoreNullValues": true
            }
        }
    }
]

クエリのヒント

Salesforce Service Cloud レポートからデータを取得する

クエリを {call "<report name>"} と指定することで、Salesforce Service Cloud レポートからデータを取得できます。 たとえば "query": "{call \"TestReport\"}" です。

Salesforce Service Cloud のごみ箱から削除済みレコードを取得する

論理的に削除されたレコードを Salesforce Service Cloud のごみ箱から検索するには、readBehaviorqueryAll と指定できます。

SOQL クエリと SQL クエリの構文の違い

Salesforce Service Cloud からデータをコピーするときは、SOQL クエリまたは SQL クエリのいずれかを使用できます。 これら 2 つのクエリでは構文と機能のサポートが異なるので、混在させないでください。 Salesforce Service Cloud でネイティブにサポートされている SOQL クエリを使用することをお勧めします。 次の表に、主な違いを示します。

構文 SOQL モード SQL モード
列の選択 コピーするフィールドをクエリで列挙する必要があります (例: SELECT field1, filed2 FROM objectname) 列の選択に加えて、SELECT * がサポートされています。
引用符 フィールド/オブジェクト名を引用符で囲むことはできません。 フィールド/オブジェクト名を引用符で囲むことができます (例: SELECT "id" FROM "Account")
日時の形式 こちらの詳細と次のセクションのサンプルをご覧ください。 こちらの詳細と次のセクションのサンプルをご覧ください。
ブール値 False および True と表されます (例: SELECT … WHERE IsDeleted=True)。 0 または 1 と表されます (例: SELECT … WHERE IsDeleted=1)。
列の名前変更 サポートされていません。 サポートされています (例: SELECT a AS b FROM …)。
リレーションシップ サポートされています (例: Account_vod__r.nvs_Country__c)。 サポートされていません。

DateTime 列で where 句を使用してデータを取得する

SOQL クエリまたは SQL クエリを指定する場合は、DateTime 形式の違いに注意してください。 次に例を示します。

  • SOQL サンプル: SELECT Id, Name, BillingCity FROM Account WHERE LastModifiedDate >= @{formatDateTime(pipeline().parameters.StartTime,'yyyy-MM-ddTHH:mm:ssZ')} AND LastModifiedDate < @{formatDateTime(pipeline().parameters.EndTime,'yyyy-MM-ddTHH:mm:ssZ')}
  • SQL の例: SELECT * FROM Account WHERE LastModifiedDate >= {ts'@{formatDateTime(pipeline().parameters.StartTime,'yyyy-MM-dd HH:mm:ss')}'} AND LastModifiedDate < {ts'@{formatDateTime(pipeline().parameters.EndTime,'yyyy-MM-dd HH:mm:ss')}'}

MALFORMED_QUERY:Truncated のエラー

"MALFORMED_QUERY:Truncated" のエラーが発生した場合、通常は、データ内に JunctionIdList 型の列があり、Salesforce において行数が多いデータなどのサポートに対して制限があることが原因です。 移行するには、JunctionIdList 列の除外か、またはコピーする行数の制限を試みます (パーティション分割して複数のコピー アクティビティの実行にすることが可能です)。

Salesforce Service Cloud のデータ型マッピング

Salesforce Service Cloud からデータをコピーするとき、Salesforce Service Cloud のデータ型からサービス内部で使用されている中間データ型へのマッピングは、以下を使用して行われます。 コピー アクティビティでソースのスキーマとデータ型がシンクにマッピングされるしくみについては、スキーマとデータ型のマッピングに関する記事を参照してください。

Salesforce Service Cloud のデータ型 サービスの中間データ型
Auto Number String
Checkbox Boolean
Currency Decimal
Date DateTime
日付/時刻 DateTime
メール String
id String
Lookup Relationship String
Multi-Select Picklist String
Number Decimal
Percent Decimal
Phone String
Picklist String
テキスト String
Text Area String
Text Area (Long) String
Text Area (Rich) String
Text (Encrypted) String
URL String

Note

Salesforce Service Cloud の Number 型は、サービスの中間データ型として、Azure Data Factory および Azure Synapse パイプラインの Decimal 型にマッピングされます。 Decimal 型では、定義された有効桁数と小数点以下桁数が適用されます。 小数点以下の桁数が定義された小数点以下桁数を超えるデータの場合、その値はプレビュー データで端数が丸められ、コピーされます。 Azure Data Factory および Azure Synapse パイプラインでこのような精度の損失が発生しないようにするには、Salesforce Service Cloud の [カスタム フィールド定義の編集] ページで小数点以下の桁数をかなり大きな値に増やすことを検討してください。

Lookup アクティビティのプロパティ

プロパティの詳細については、Lookup アクティビティに関するページを参照してください。

次のステップ

コピー アクティビティによってソース、シンクとしてサポートされるデータ ストアの一覧については、サポートされるデータ ストアに関するセクションを参照してください。