Menyalin data dari dan ke Salesforce menggunakan Azure Data Factory atau Azure Synapse Analytics

BERLAKU UNTUK:Azure Data Factory Azure Synapse Analytics

Tip

Cobalah Data Factory di Microsoft Fabric, solusi analitik all-in-one untuk perusahaan. Microsoft Fabric mencakup semuanya mulai dari pergerakan data hingga ilmu data, analitik real time, kecerdasan bisnis, dan pelaporan. Pelajari cara memulai uji coba baru secara gratis!

Artikel ini menguraikan cara menggunakan Aktivitas Salin di Azure Data Factory dan alur Azure Synapse untuk menyalin data dari dan ke Salesforce. Artikel tersebut dibuat berdasarkan artikel Gambaran umum Salin Aktivitas yang menyajikan gambaran umum aktivitas salin.

Penting

Konektor Salesforce baru menyediakan dukungan Salesforce asli yang ditingkatkan. Jika Anda menggunakan konektor Salesforce warisan dalam solusi Anda, didukung apa adanya untuk kompatibilitas mundur saja, lihat artikel konektor Salesforce (warisan).

Kemampuan yang didukung

Konektor Salesforce ini didukung untuk kemampuan berikut:

Kemampuan yang didukung IR
Salin aktivitas (sumber/sink) (1) (2)
Aktivitas pencarian (1) (2)

① Runtime integrasi Azure ② Runtime integrasi yang dihost sendiri

Untuk daftar penyimpanan data yang didukung sebagai sumber dan sink, lihat tabel penyimpanan data yang didukung.

Secara khusus, konektor Salesforce ini mendukung:

  • Pengembang Salesforce, Profesional, Enterprise, atau edisi Unlimited.
  • Menyalin data dari dan ke domain kustom (Domain kustom dapat dikonfigurasi di lingkungan produksi dan kotak pasir).

Anda dapat secara eksplisit mengatur versi API yang digunakan untuk membaca/menulis data melalui apiVersion properti di layanan tertaut. Saat menyalin data ke Salesforce, konektor menggunakan BULK API 2.0.

Prasyarat

  • Izin API harus diaktifkan di Salesforce.

  • Anda perlu mengonfigurasi Aplikasi Koneksi di portal Salesforce yang mengacu pada dokumen resmi ini atau panduan langkah demi langkah kami dalam rekomendasi dalam artikel ini.

    Penting

    • Pengguna eksekusi harus memiliki izin API Only.
    • Waktu kedaluwarsa Token Akses dapat diubah melalui kebijakan sesi alih-alih token refresh.

Batas Salesforce Bulk API 2.0

Kami menggunakan Salesforce Bulk API 2.0 untuk mengkueri dan menyerap data. Di API Massal 2.0, batch dibuat untuk Anda secara otomatis. Anda dapat mengirimkan hingga 15.000 batch per periode 24 jam bergulir. Jika batch melebihi batas, Anda akan melihat kegagalan.

Dalam API Massal 2.0, hanya pekerjaan penyerapan yang mengonsumsi batch. Pekerjaan kueri tidak. Untuk detailnya, lihat Cara Permintaan Diproses di Panduan Pengembang API 2.0 Massal.

Untuk informasi selengkapnya, lihat bagian "Batas Umum" di batas pengembang Salesforce.

Memulai

Untuk melakukan aktivitas Salin dengan alur, Anda dapat menggunakan salah satu alat atau SDK berikut:

Membuat layanan tertaut ke Salesforce menggunakan antarmuka pengguna

Gunakan langkah-langkah berikut untuk membuat layanan tertaut ke Salesforce di antarmuka pengguna portal Microsoft Azure.

  1. Telusuri ke tab Kelola di ruang kerja Azure Data Factory atau Synapse Anda dan pilih Layanan Tertaut, lalu klik Baru:

  2. Cari Salesforce dan pilih konektor Salesforce.

    Cuplikan layar konektor Salesforce.

  3. Konfigurasikan detail layanan, uji koneksi, dan buat layanan tertaut baru.

    Cuplikan layar konfigurasi layanan tertaut untuk Salesforce.

Detail konfigurasi konektor

Bagian berikut memberikan detail tentang properti yang digunakan untuk menentukan entitas khusus untuk konektor Salesforce.

Properti layanan tertaut

Properti berikut ini didukung untuk layanan tertaut Salesforce.

Properti Deskripsi Wajib
jenis Properti jenis harus diatur ke SalesforceV2. Ya
environmentUrl Tentukan URL instans Salesforce.
Misalnya, tentukan "https://<domainName>.my.salesforce.com" untuk menyalin data dari domain kustom. Pelajari cara mengonfigurasi atau menampilkan domain kustom Anda yang merujuk ke artikel ini.
Ya
authenticationType Jenis autentikasi yang digunakan untuk menyambungkan ke Salesforce.
Nilai yang diizinkan adalah OAuth2ClientCredentials.
Ya
clientId Tentukan ID klien Aplikasi Koneksi Salesforce OAuth 2.0. Untuk informasi selengkapnya, buka artikel ini Ya
clientSecret Tentukan rahasia klien Aplikasi Koneksi Salesforce OAuth 2.0. Untuk informasi selengkapnya, buka artikel ini Ya
apiVersion Tentukan versi Salesforce Bulk API 2.0 untuk digunakan, misalnya 52.0. API Massal 2.0 hanya mendukung versi >API = 47.0. Untuk mempelajari tentang versi 2.0 API Massal, lihat artikel. Jika Anda menggunakan versi API yang lebih rendah, itu akan mengakibatkan kegagalan. Ya
connectVia Runtime integrasi yang akan digunakan untuk menyambungkan ke penyimpanan data. Jika tidak ditentukan, Azure Integration Runtime default akan digunakan. No

Contoh: Info masuk Microsoft Store

{
    "name": "SalesforceLinkedService",
    "properties": {
        "type": "SalesforceV2",
        "typeProperties": {
            "environmentUrl": "<environment URL>",
            "authenticationType": "OAuth2ClientCredentials",
            "clientId": "<client ID>",
            "clientSecret": {
                "type": "SecureString",
                "value": "<client secret>"
            },
            "apiVersion": "<API Version>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Menyimpan info masuk di Key Vault

{
    "name": "SalesforceLinkedService",
    "properties": {
        "type": "SalesforceV2",
        "typeProperties": {
            "environmentUrl": "<environment URL>",
            "authenticationType": "OAuth2ClientCredentials",
            "clientId": "<client ID>",
            "clientSecret": {
                "type": "AzureKeyVaultSecret",
                "secretName": "<secret name of client secret in AKV>",
                "store":{
                    "referenceName": "<Azure Key Vault linked service>",
                    "type": "LinkedServiceReference"
                }
            },
            "apiVersion": "<API Version>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Contoh: Menyimpan kredensial di Key Vault, serta environmentUrl dan clientId

Perhatikan bahwa dengan melakukannya, Anda tidak akan lagi dapat menggunakan UI untuk mengedit pengaturan. Kotak centang Tentukan konten dinamis dalam format JSON akan dicentang, dan Anda harus mengedit konfigurasi ini sepenuhnya dengan tangan. Keuntungannya adalah Anda dapat memperoleh semua pengaturan konfigurasi dari Key Vault alih-alih membuat parameter apa pun di sini.

{
    "name": "SalesforceLinkedService",
    "properties": {
        "type": "SalesforceV2",
        "typeProperties": {
            "environmentUrl": {
                "type": "AzureKeyVaultSecret",
                "secretName": "<secret name of environment URL in AKV>",
                "store": {
                    "referenceName": "<Azure Key Vault linked service>",
                    "type": "LinkedServiceReference"
                },
            },
            "authenticationType": "OAuth2ClientCredentials",
            "clientId": {
                "type": "AzureKeyVaultSecret",
                "secretName": "<secret name of client ID in AKV>",
                "store": {
                    "referenceName": "<Azure Key Vault linked service>",
                    "type": "LinkedServiceReference"
                },
            },
            "clientSecret": {
                "type": "AzureKeyVaultSecret",
                "secretName": "<secret name of client secret in AKV>",
                "store":{
                    "referenceName": "<Azure Key Vault linked service>",
                    "type": "LinkedServiceReference"
                }
            },
            "apiVersion": "<API Version>"
        },
        "connectVia": {
            "referenceName": "<name of Integration Runtime>",
            "type": "IntegrationRuntimeReference"
        }
    }
}

Properti himpunan data

Untuk daftar lengkap bagian dan properti yang tersedia untuk menentukan himpunan data, lihat artikel Himpunan Data. Bagian ini menyediakan daftar properti yang didukung oleh himpunan data Salesforce.

Untuk menyalin data dari dan ke Salesforce, atur properti jenis himpunan data ke SalesforceV2Object. Properti berikut ini didukung.

Properti Deskripsi Wajib
jenis Properti jenis harus diatur ke SalesforceV2Object. Ya
objectApiName Nama objek Salesforce untuk diambil datanya. Tidak untuk sumber (jika "SOQLQuery" di sumber ditentukan), Ya untuk sink
reportId ID laporan Salesforce untuk mengambil data. Ini tidak didukung di sink. Perhatikan bahwa ada batasan saat Anda menggunakan laporan. Tidak untuk sumber (jika "SOQLQuery" di sumber ditentukan), tidak mendukung sink

Penting

Bagian "__c" dari Nama API diperlukan untuk objek kustom apa pun.

Nama API koneksi Salesforce

Contoh:

{
    "name": "SalesforceDataset",
    "properties": {
        "type": "SalesforceV2Object",
        "typeProperties": {
            "objectApiName": "MyTable__c"
        },
        "schema": [],
        "linkedServiceName": {
            "referenceName": "<Salesforce linked service name>",
            "type": "LinkedServiceReference"
        }
    }
}

Properti aktivitas salin

Untuk daftar lengkap bagian dan properti yang tersedia untuk menentukan aktivitas, lihat artikel Alur. Bagian ini menyediakan daftar properti yang didukung oleh sumber dan sink Salesforce.

Salesforce sebagai jenis sumber

Untuk menyalin data dari Salesforce, atur jenis sumber dalam aktivitas salin ke SalesforceV2Source. Properti berikut ini didukung di bagian sumber aktivitas salin.

Properti Deskripsi Wajib
jenis Properti jenis sumber aktivitas salin harus diatur ke SalesforceV2Source. Ya
SOQLQuery Gunakan kueri kustom untuk membaca data. Anda hanya bisa menggunakan kueri Salesforce Object Query Language (SOQL) dengan batasan. Untuk batasan SOQL, lihat artikel ini. Jika kueri tidak ditentukan, semua data objek Salesforce yang ditentukan dalam "ObjectApiName/reportId" dalam himpunan data akan diambil. Tidak (jika "ObjectApiName/reportId" dalam himpunan data ditentukan)
includeDeletedObjects Menunjukkan apakah akan mengkueri rekaman yang sudah ada, atau mengkueri semua rekaman termasuk yang dihapus. Jika tidak ditentukan, perilaku defaultnya adalah false.
Nilai yang diizinkan: false (default), true.
No

Penting

Bagian "__c" dari Nama API diperlukan untuk objek kustom apa pun.

Daftar Nama API koneksi Salesforce

Contoh:

"activities":[
    {
        "name": "CopyFromSalesforce",
        "type": "Copy",
        "inputs": [
            {
                "referenceName": "<Salesforce input dataset name>",
                "type": "DatasetReference"
            }
        ],
        "outputs": [
            {
                "referenceName": "<output dataset name>",
                "type": "DatasetReference"
            }
        ],
        "typeProperties": {
            "source": {
                "type": "SalesforceV2Source",
                "SOQLQuery": "SELECT Col_Currency__c, Col_Date__c, Col_Email__c FROM AllDataType__c",
                "includeDeletedObjects": false
            },
            "sink": {
                "type": "<sink type>"
            }
        }
    }
]

Salesforce sebagai jenis sink

Untuk menyalin data ke Salesforce, atur jenis sink dalam aktivitas salin ke SalesforceV2Sink. Properti berikut ini didukung di bagian sink aktivitas salin.

Properti Deskripsi Wajib
jenis Properti jenis sink aktivitas salin harus diatur ke SalesforceV2Sink. Ya
writeBehavior Perilaku penulisan untuk operasi.
Nilai yang diperbolehkan Sisipkan dan Upsert.
Tidak (defaultnya adalah sisipkan)
NamaBidangEksternal Nama bidang ID eksternal untuk operasi upsert. Bidang yang ditentukan harus didefinisikan sebagai "External ID Field" di objek Salesforce. Ini tidak dapat memiliki nilai NULL dalam data input yang sesuai. Ya untuk "Upsert"
writeBatchSize Jumlah baris data yang ditulis ke Salesforce di setiap batch. Sarankan tetapkan nilai ini dari 10.000 hingga 200.000. Baris yang terlalu sedikit di setiap batch akan mengurangi performa penyalinan. Terlalu banyak baris di setiap batch dapat menyebabkan batas waktu API. Tidak (defaultnya adalah 100.000)
ignoreNullValues Menunjukkan apakah akan mengabaikan nilai NULL dari data input selama operasi tulis.
Nilai yang diperbolehkan adalah true dan false.
- Benar: Biarkan data di objek tujuan tanpa perubahan saat Anda melakukan operasi upsert atau pembaruan. Sisipkan nilai default yang ditentukan saat Anda melakukan operasi sisipan.
- Salah: Perbarui data di objek tujuan ke nilai NULL saat Anda melakukan operasi upsert atau pembaruan. Sisipkan nilai NULL saat Anda melakukan operasi sisipan.
Tidak (default adalah salah)
 maxConcurrent Koneksi ions Batas atas koneksi bersamaan yang ditetapkan ke penyimpanan data selama eksekusi aktivitas. Menentukan nilai hanya saat Anda ingin membatasi koneksi bersamaan.  Tanpa

Contoh: Sink Salesforce dalam aktivitas salin

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

Pemetaan jenis data untuk Salesforce

Saat Anda menyalin data dari Salesforce, pemetaan berikut digunakan dari jenis data Salesforce ke jenis data sementara dalam layanan secara internal. Untuk mempelajari bagaimana aktivitas salin memetakan skema sumber dan jenis data ke sink, lihat Pemetaan skema dan jenis data.

Jenis data Salesforce Jenis data sementara layanan
Nomor Otomatis String
Kotak centang Boolean
Mata Uang Decimal
Tanggal DateTime
Tanggal/Waktu DateTime
Email String
ID String
Hubungan Pencarian String
Multi-Select Picklist String
Angka Decimal
Persen Decimal
Nomor String
Daftar pilihan String
SMS String
Bidang Teks String
Area Teks (Panjang) String
Area Teks (Kaya) String
Teks (Terenkripsi) String
URL String

Catatan

Jenis Nomor Salesforce adalah pemetaan ke Jenis desimal dalam alur Azure Data Factory dan Azure Synapse sebagai jenis data sementara layanan. Jenis desimal menggunakan presisi dan skala yang ditentukan. Untuk data yang tempat desimalnya melebihi skala yang ditentukan, nilainya akan dibulatkan dalam data pratinjau dan salinan. Untuk menghindari kehilangan presisi tersebut dalam alur Azure Data Factory dan Azure Synapse, pertimbangkan untuk meningkatkan tempat desimal ke nilai yang cukup besar di halaman Edit Definisi Bidang Kustom Salesforce.

Properti aktivitas pencarian

Untuk mempelajari detail tentang properti, lihat Aktivitas pencarian.

Meningkatkan layanan tertaut Salesforce

Berikut adalah langkah-langkah yang membantu Anda meningkatkan layanan tertaut dan kueri terkait:

  1. Konfigurasikan aplikasi yang terhubung di portal Salesforce dengan merujuk ke Prasyarat.

  2. Buat layanan tertaut Salesforce baru dan konfigurasikan dengan merujuk ke Properti layanan tertaut.

  3. Jika Anda menggunakan kueri SQL di sumber aktivitas salin atau aktivitas pencarian yang mengacu pada layanan tertaut warisan, Anda perlu mengonversinya ke kueri SOQL. Pelajari selengkapnya tentang kueri SOQL dari Salesforce sebagai jenis sumber dan Salesforce Object Query Language (SOQL).

  4. readBehavior diganti dengan includeDeletedObjects di sumber aktivitas salin atau aktivitas pencarian. Untuk konfigurasi terperinci, lihat Salesforce sebagai jenis sumber.

Perbedaan antara Salesforce dan Salesforce (warisan)

Konektor Salesforce menawarkan fungsionalitas baru dan kompatibel dengan sebagian besar fitur konektor Salesforce (warisan). Tabel di bawah ini menunjukkan perbedaan fitur antara Salesforce dan Salesforce (warisan).

Salesforce Salesforce (warisan)
Mendukung SOQL dalam Salesforce Bulk API 2.0.
Untuk kueri SOQL:
• Klausa GROUP BY, LIMIT, ORDER BY, OFFSET, atau TYPEOF tidak didukung.
• Fungsi Agregat seperti COUNT() tidak didukung, Anda dapat menggunakan laporan Salesforce untuk mengimplementasikannya.
• Fungsi tanggal dalam klausul GROUP BY tidak didukung, tetapi didukung dalam klausa WHERE.
• Bidang alamat majemuk atau bidang geolokasi majemuk tidak didukung. Sebagai alternatif, kueri masing-masing komponen bidang senyawa.
• Kueri hubungan induk ke anak tidak didukung, sedangkan kueri hubungan turunan ke induk didukung.
Mendukung sintaks SQL dan SOQL.
Objek yang berisi bidang biner tidak didukung. Objek yang berisi bidang biner didukung, seperti objek Lampiran.
Mendukung objek dalam API Massal. Untuk informasi selengkapnya, lihat artikel ini. Objek dukungan yang tidak didukung oleh API Massal, seperti CaseStatus.
Laporan dukungan dengan memilih ID laporan. Mendukung sintaks kueri laporan, seperti {call "<report name>"}.

Untuk daftar penyimpanan data yang didukung sebagai sumber dan sink oleh aktivitas salin, lihat Penyimpanan data yang didukung.