Menyalin data dari dan ke Salesforce Service Cloud menggunakan Azure Data Factory atau Synapse Analytics (warisan)
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 alur Azure Data Factory dan Azure Synapse Analytics untuk menyalin data dari dan ke Salesforce Service Cloud. Artikel tersebut dibuat berdasarkan artikel Gambaran umum Salin Aktivitas yang menyajikan gambaran umum aktivitas salin.
Penting
Layanan ini telah merilis konektor Salesforce Service Cloud baru yang menyediakan dukungan Salesforce Service Cloud asli yang lebih baik, lihat artikel konektor Salesforce Service Cloud tentang detailnya.
Kemampuan yang didukung
Konektor Salesforce Service Cloud ini didukung untuk kemampuan berikut ini:
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 Service Cloud ini mendukung:
- Pengembang Salesforce, Profesional, Enterprise, atau edisi Unlimited.
- Menyalin data dari dan ke produksi Salesforce, kotak pasir, dan domain kustom.
Konektor Salesforce dibangun di atas Salesforce REST/Bulk API. Secara default, saat menyalin data dari Salesforce, konektor menggunakan v45 dan secara otomatis memilih antara REST dan API Massal berdasarkan ukuran data - ketika kumpulan hasil besar, API Massal digunakan untuk performa yang lebih baik; saat menulis data ke Salesforce, konektor menggunakan v40 API Massal. Anda juga dapat secara eksplisit menyetel versi API yang digunakan untuk membaca/menulis data melalui apiVersion
properti di layanan tertaut.
Prasyarat
Izin API harus diaktifkan di Salesforce.
Batas permintaan Salesforce
Salesforce memiliki batasan untuk permintaan API total dan permintaan API bersamaan. Perhatikan poin berikut:
- Jika jumlah permintaan bersama melebihi batas, pembatasan terjadi dan Anda melihat kegagalan acak.
- Jika jumlah total permintaan melebihi batas, akun Salesforce diblokir selama 24 jam.
Anda mungkin juga menerima pesan kesalahan "REQUEST_LIMIT_EXCEEDED" di kedua skenario. Untuk informasi selengkapnya, lihat bagian “API request limits” di Salesforce developer limits.
Memulai
Untuk melakukan aktivitas Salin dengan alur, Anda dapat menggunakan salah satu alat atau SDK berikut:
- Alat Penyalinan Data
- Portal Microsoft Azure
- SDK .NET
- SDK Python
- Azure PowerShell
- REST API
- Templat Azure Resource Manager
Membuat layanan tertaut ke Salesforce Service Cloud menggunakan UI
Gunakan langkah-langkah berikut untuk membuat layanan tertaut ke Salesforce Service Cloud di UI portal Azure.
Telusuri ke tab Kelola di ruang kerja Azure Data Factory atau Synapse Anda dan pilih Layanan Tertaut, lalu klik Baru:
Cari Salesforce dan pilih konektor Salesforce Service Cloud.
Konfigurasikan detail layanan, uji koneksi, dan buat layanan tertaut baru.
Detail konfigurasi konektor
Bagian berikut ini menyediakan detail tentang properti yang digunakan untuk menentukan entitas Azure Data Factory khusus untuk konektor Salesforce Service Cloud.
Properti layanan tertaut
Properti berikut ini didukung untuk layanan tertaut Salesforce.
Properti | Deskripsi | Wajib |
---|---|---|
jenis | Properti jenis harus diatur ke SalesforceServiceCloud. | Ya |
environmentUrl | Tentukan URL instans Salesforce Service Cloud. - Defaultnya adalah "https://login.salesforce.com" . - Untuk menyalin data dari kotak pasir, tentukan "https://test.salesforce.com" . - Untuk menyalin data dari domain kustom, tentukan, misalnya, "https://[domain].my.salesforce.com" . |
No |
Nama pengguna | Tentukan nama pengguna untuk akun pengguna. | Ya |
kata sandi | Tentukan kata sandi untuk akun pengguna. Tandai bidang ini sebagai SecureString untuk menyimpannya dengan aman, atau mereferensikan rahasia yang disimpan di Azure Key Vault. |
Ya |
keamananToken | Tentukan token keamanan untuk akun pengguna. Untuk mempelajari tentang token keamanan secara umum, lihat Keamanan dan API. Token hanya dapat dilewati jika Anda menambahkan IP Integration Runtime ke daftar alamat IP tepercaya di Salesforce. Saat menggunakan Azure runtime integrasi, lihat Alamat IP Azure Integration Runtime. Untuk petunjuk tentang cara mendapatkan dan mengatur ulang token, lihat Mendapatkan token. Tandai bidang ini sebagai SecureString untuk menyimpannya dengan aman di Data Factory, atau referensikan rahasia yang disimpan di Azure Key Vault. |
No |
apiVersion | Tentukan versi Salesforce REST/Bulk API yang akan digunakan, misalnya 48.0 . Secara default, konektor menggunakan v45 untuk menyalin data dari Salesforce, dan menggunakan v40 untuk menyalin data ke Salesforce. |
No |
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": "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"
}
}
}
Menyimpan info masuk di 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"
}
}
}
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 Service Cloud.
Untuk menyalin data dari dan ke Salesforce Service Cloud, properti berikut ini didukung.
Properti | Deskripsi | Wajib |
---|---|---|
jenis | Properti jenis harus diatur ke SalesforceServiceCloudObject. | Ya |
objectApiName | Nama objek Salesforce untuk diambil datanya. | Tidak untuk sumber, Ya untuk sink |
Penting
Bagian "__c" dari Nama API diperlukan untuk objek kustom apa pun.
Contoh:
{
"name": "SalesforceServiceCloudDataset",
"properties": {
"type": "SalesforceServiceCloudObject",
"typeProperties": {
"objectApiName": "MyTable__c"
},
"schema": [],
"linkedServiceName": {
"referenceName": "<Salesforce Service Cloud linked service name>",
"type": "LinkedServiceReference"
}
}
}
Properti | Deskripsi | Wajib |
---|---|---|
jenis | Properti jenis himpunan data harus disetel ke RelationalTable. | Ya |
tableName | Nama tabel di Salesforce Service Cloud. | Tidak (jika "kueri" dalam sumber aktivitas ditentukan) |
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 Service Cloud.
Salesforce Service Cloud sebagai jenis sumber
Untuk menyalin data dari Salesforce Service Cloud, properti berikut ini didukung di bagian aktivitas salin sumber.
Properti | Deskripsi | Wajib |
---|---|---|
jenis | Properti jenis sumber aktivitas salin harus diatur ke SalesforceServiceCloudSource. | Ya |
pertanyaan | Gunakan kueri kustom untuk membaca data. Anda bisa menggunakan kueri Salesforce Object Query Language (SOQL) atau kueri SQL-92. Lihat tips lainnya di bagian tips kueri. Jika kueri tidak ditentukan, semua data objek Salesforce Service Cloud yang ditentukan dalam "objectApiName" dalam himpunan data akan diambil. | Tidak (jika "objectApiName" dalam himpunan data ditentukan) |
readBehavior | Menunjukkan apakah akan mengkueri rekaman yang sudah ada, atau mengkueri semua rekaman termasuk yang dihapus. Jika tidak ditentukan, perilaku default adalah yang pertama. Nilai yang diperbolehkan: kueri (default), semuaKueri. |
No |
Penting
Bagian "__c" dari Nama API diperlukan untuk objek kustom apa pun.
Contoh:
"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>"
}
}
}
]
Catatan
Sumber Salesforce Service Cloud tidak mendukung pengaturan proksi di runtime integrasi yang dihost sendiri, tetapi sink mendukungnya.
Salesforce Service Cloud sebagai jenis sink
Untuk menyalin data dari Salesforce Service Cloud, properti berikut ini didukung di bagian aktivitas salin sink.
Properti | Deskripsi | Wajib |
---|---|---|
jenis | Properti jenis sink aktivitas salin harus disetel ke SalesforceServiceCloudSink. | 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 Service Cloud. Ini tidak dapat memiliki nilai NULL dalam data input yang sesuai. | Ya untuk "Upsert" |
writeBatchSize | Jumlah baris data yang ditulis ke Salesforce Service Cloud di setiap batch. | Tidak (defaultnya adalah 5.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:
"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
}
}
}
]
Tips kueri
Mengambil data dari laporan Salesforce Service Cloud
Anda dapat mengambil data dari laporan Salesforce Service Cloud dengan menentukan kueri sebagai {call "<report name>"}
. Contohnya "query": "{call \"TestReport\"}"
.
Mengambil rekaman yang dihapus dari Keranjang Sampah Salesforce Service Cloud
Untuk mengkueri rekaman yang dihapus sementara dari Keranjang Sampah Salesforce Service Cloud, Anda bisa menentukan readBehavior
sebagai queryAll
.
Perbedaan antara SOQL dan SQL sintaks kueri
Saat menyalin data dari Salesforce Service Cloud, Anda dapat menggunakan kueri SOQL atau kueri SQL. Perhatikan bahwa keduanya memiliki dukungan sintaks dan fungsionalitas yang berbeda, jangan mencampurnya. Anda disarankan untuk menggunakan kueri SOQL, yang secara asli didukung oleh Salesforce Service Cloud. Tabel berikut ini mencantumkan perbedaan utama:
Sintaks | Mode SOQL | Mode SQL |
---|---|---|
Pilihan kolom | Perlu menghitung bidang yang akan disalin dalam kueri, misalnya SELECT field1, filed2 FROM objectname |
SELECT * didukung selain pilihan kolom. |
Tanda kutip | Nama berkas/objek tak bisa dikutip. | Nama bidang/objek dapat dikutip, misalnya SELECT "id" FROM "Account" |
Format tanggalwaktu | Lihat detail di sini dan sampel di bagian berikutnya. | Lihat detail di sini dan sampel di bagian berikutnya. |
Nilai Boolean | Diwakili sebagai False dan True , misalnya SELECT … WHERE IsDeleted=True . |
Diwakili sebagai 0 atau 1, misalnya SELECT … WHERE IsDeleted=1 . |
Penggantian nama kolom | Tidak didukung. | Didukung, misalnya: SELECT a AS b FROM … . |
Hubungan | Didukung, misalnya Account_vod__r.nvs_Country__c . |
Tidak didukung. |
Mengambil data dengan menggunakan klausul di kolom TanggalWaktu
Saat Anda menentukan kueri SOQL atau SQL, perhatikan perbedaan format TanggalWaktu. Contohnya:
- Sampel 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')}
- Sampel 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')}'}
Kesalahan MALFORMED_QUERY: Truncated
Jika Anda menekan kesalahan "MALFORMED_QUERY: Truncated", biasanya karena Anda memiliki kolom jenis JunctionIdList dalam data dan Salesforce memiliki batasan untuk mendukung data tersebut dengan jumlah baris yang besar. Untuk mengurangi, coba kecualikan kolom JunctionIdList atau batasi jumlah baris yang akan disalin (Anda dapat mempartisi ke beberapa aktivitas salin yang dijalankan).
Pemetaan jenis data untuk Salesforce Service Cloud
Saat Anda menyalin data dari Salesforce Service Cloud, pemetaan berikut digunakan dari jenis data Salesforce Service Cloud ke jenis data sementara yang digunakan secara internal dalam layanan. Untuk mempelajari bagaimana aktivitas salin memetakan skema sumber dan jenis data ke sink, lihat Pemetaan skema dan jenis data.
Jenis data Salesforce Service Cloud | Jenis data sementara layanan |
---|---|
Nomor Otomatis | String |
Kotak centang | Boolean |
Mata Uang | Decimal |
Tanggal | DateTime |
Tanggal/Waktu | DateTime |
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 Cloud Layanan Salesforce memetakan ke Jenis desimal di 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 di alur Azure Data Factory dan Azure Synapse, pertimbangkan untuk meningkatkan tempat desimal ke nilai yang cukup besar di halaman Edit Definisi Bidang Kustom salesforce Service Cloud.
Properti aktivitas pencarian
Untuk mempelajari detail tentang properti, lihat Aktivitas pencarian.
Langkah berikutnya
Untuk daftar penyimpanan data yang didukung sebagai sumber dan sink oleh aktivitas salin, lihat Penyimpanan data yang didukung.