مشاركة عبر


نسخ البيانات من وإلى Salesforce V1 باستخدام Azure Data Factory أو Azure Synapse Analytics

ينطبق على: Azure Data Factory Azure Synapse Analytics

تلميح

جرب Data Factory في Microsoft Fabric، وهو حل تحليلي متكامل للمؤسسات. يغطي Microsoft Fabric كل شيء بدءا من حركة البيانات إلى علم البيانات والتحليلات في الوقت الحقيقي والمعلومات المهنية وإعداد التقارير. تعرف على كيفية بدء إصدار تجريبي جديد مجانا!

توضح هذه المقالة كيفية استخدام نشاط النسخ في Azure Data Factory ومسارات Azure Synapse لنسخ البيانات من وإلى Salesforce. وهو يستند إلى مقالة نظرة عامة حول نشاط النسخ التي تعرض نظرة عامة حول نشاط النسخ.

هام

يوفر موصل Salesforce V2 دعما محسنا ل Salesforce الأصلي. إذا كنت تستخدم موصل Salesforce V1 في الحل الخاص بك، فمن المستحسن ترقية موصل Salesforce في أقرب وقت ممكن. راجع هذا القسم للحصول على تفاصيل حول الفرق بين V2 وV1.

القدرات المدعومة

موصل Salesforce هذا مدعوم للإمكانيات التالية:

القدرات المدعومة IR
Copy activity (المصدر/المتلق) (1) (2)
نشاط البحث (1) (2)

① وقت تشغيل تكامل Azure ② وقت تشغيل التكامل المستضاف ذاتيًا

للحصول على قائمة مخازن البيانات المدعومة من نشاط النسخ كمصادر ومتلقين، راجع جدول مخازن البيانات المدعومة.

وبشكل خاص، يدعم موصل Salesforce هذا:

  • إصدارات مطور Salesforce Developer أو المحترفة أو المؤسسات أو الإصدارات غير المحدودة.
  • نسخ البيانات من وإلى Salesforce production وبيئة الاختبار المعزولة والمجال المُخصص.

إشعار

تدعم هذه الدالة نسخة من أي مخطط من بيئات Salesforce المذكورة أعلاه، بما في ذلك حزمة النجاح غير الربحية (NPSP).

تم تصميم موصل Salesforce على قمة واجهة برمجة تطبيقات Salesforce REST/Bulk. عند نسخ البيانات من Salesforce، يختار الموصل تلقائيا بين REST وواجهات برمجة التطبيقات المجمعة استنادا إلى حجم البيانات - عندما تكون مجموعة النتائج كبيرة، يتم استخدام واجهة برمجة التطبيقات المجمعة لأداء أفضل؛ يمكنك تعيين إصدار واجهة برمجة التطبيقات المستخدم لقراءة/كتابة البيانات بشكل صريح عبر apiVersion خاصية في الخدمة المرتبطة. عند نسخ البيانات إلى Salesforce، يستخدم الموصل BULK API v1.

إشعار

لم يعد الموصل يُعين الإصدار الافتراضي لواجهة برمجة التطبيقات Salesforce. للتوافق مع الإصدارات السابقة، إذا تم تعيين إصدار واجهة برمجة تطبيقات افتراضي من قبل، فإنه يستمر في العمل. القيمة الافتراضية هي 45.0 للمصدر و40.0 للمتلقي.

المتطلبات الأساسية

يجب تمكين إذن API في Salesforce.

حدود طلب Salesforce

لدى Salesforce حدود لكل من إجمالي طلبات API وطلبات API المتزامنة. لاحظ النقاط التالية:

  • في حال تجاوز عدد الطلبات المتزامنة الحد، يحدث تقييد وسترى فشلاً عشوائيًا.
  • في حال تجاوز العدد الإجمالي للطلبات الحد، يُمنع حساب Salesforce من العمل لمدة 24 ساعة.

من الممكن أن تتلقى أيضًا رسالة الخطأ "REQUEST_LIMIT_EXCEEDED" في كلا السيناريوهين. لمزيدٍ من المعلومات، انظر قسم "حدود طلبات API" في حدود مطور Salesforce.

الشروع في العمل

لتنفيذ نشاط النسخ باستخدام أحد المسارات، يمكنك استخدام إحدى الأدوات أو عدد تطوير البرامج التالية:

إنشاء خدمة مرتبطة بـ Salesforce باستخدام واجهة المستخدم

استخدم الخطوات التالية لإنشاء خدمة مرتبطة بـ Salesforce في واجهة مستخدم مدخل Azure.

  1. استعرض للوصول إلى علامة التبويب "Manage" في مصنع بيانات Azure أو مساحة عمل Synapse، وحدد "Linked Services"، ثم انقر فوق "New":

  2. ابحث عن Salesforce وحدد موصل Salesforce.

    لقطة شاشة لموصل Salesforce.

  3. قم بتكوين تفاصيل الخدمة، واختبر الاتصال، وأنشئ الخدمة المرتبطة الجديدة.

    لقطة شاشة لتكوين الخدمة المرتبطة لـ Salesforce.

تفاصيل تكوين الموصل

توفر الأقسام التالية تفاصيل حول الخصائص المستخدمة لتعريف الكيانات الخاصة بموصل Salesforce.

خصائص الخدمة المرتبطة

يتم اعتماد الخصائص التالية للخدمة المرتبطة لـ Salesforce.

الخاصية الوصف مطلوب
النوع يجب تعيين خاصية النوع إلى Salesforce. ‏‏نعم‬
environmentUrl حدد عنوان URL لمثيل Salesforce.
الرقم الافتراضي هو "https://login.salesforce.com".
- لنسخ البيانات من بيئة الاختبار المعزولة، قم بتحديد"https://test.salesforce.com".
- لنسخ البيانات من المجال المخصص، قم بتحديد، على سبيل المثال، "https://[domain].my.salesforce.com".
لا
اسم المستخدم حدد اسم مستخدم لحساب المستخدم. ‏‏نعم‬
كلمة المرور حدد كلمة مرور لحساب المستخدم.

ضع علامة على هذا الحقل باعتباره SecureString لتخزينه بشكل آمن، أو قم بالإشارة إلى بيانات سرية مخزنة في Azure Key Vault.
‏‏نعم‬
securityToken تحديد رمز أمان لحساب المستخدم.

للتعرف على رموز الأمان المميزة بشكل عام، انظر الأمان وAPI. يمكن تخطي رمز الأمان المميز فقط إذا قمت بإضافة IP الخاص بـ Microsoft Integration Runtime إلى قائمة عناوين IP الموثوق بها على Salesforce. عند استخدام Microsoft Azure Integration Runtime، انظر عناوين IP الخاصة بـ Microsoft Azure Integration Runtime.

للحصول على إرشادات حول كيفية الحصول على رمز أمان مميز وإعادة تعيينه، انظر الحصول على رمز أمان مميز. ضع علامة على هذا الحقل باعتباره SecureString لتخزينه بشكل آمن، أو قم بالإشارة إلى بيانات سرية مخزنة في Azure Key Vault.
لا
apiVersion حدد إصدار واجهة برمجة التطبيقات Salesforce REST/Bulk لاستخدامه، على سبيل المثال 52.0. لا
connectVia يُستخدم وقت تشغيل التكامل للاتصال بمخزن البيانات. إذا لم يتم تحديده، فإنه يستخدم Azure Integration Runtime الافتراضي. لا

مثال: تخزين معلومات تسجيل الدخول

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

مثال: تخزين بيانات الاعتماد في Azure Key Vault

{
    "name": "SalesforceLinkedService",
    "properties": {
        "type": "Salesforce",
        "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"
        }
    }
}

مثال: تخزين بيانات الاعتماد في Key Vault، بالإضافة إلى environmentUrl واسم المستخدم

لاحظ أنه من خلال القيام بذلك، لن تتمكن من استخدام واجهة المستخدم لتحرير الإعدادات. سيتم تحديد خانة الاختيار تحديد المحتويات الديناميكية بتنسيق JSON، وسيتعين عليك تحرير هذا التكوين بالكامل يدويا. الميزة هي أنه يمكنك اشتقاق جميع إعدادات التكوين من Key Vault بدلا من تحديد معلمات لأي شيء هنا.

{
    "name": "SalesforceLinkedService",
    "properties": {
        "type": "Salesforce",
        "typeProperties": {
            "environmentUrl": {
                "type": "AzureKeyVaultSecret",
                "secretName": "<secret name of environment URL in AKV>",
                "store": {
                    "referenceName": "<Azure Key Vault linked service>",
                    "type": "LinkedServiceReference"
                },
            },
            "username": {
                "type": "AzureKeyVaultSecret",
                "secretName": "<secret name of username in AKV>",
                "store": {
                    "referenceName": "<Azure Key Vault linked service>",
                    "type": "LinkedServiceReference"
                },
            },
            "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.

لنسخ البيانات من وإلى Salesforce، قم بتعيين خاصية نوع مجموعة البيانات إلى SalesforceObject. تدعم الخصائص التالية.

الخاصية الوصف مطلوب
النوع يجب تعيين خاصية النوع إلى SalesforceObject. ‏‏نعم‬
objectApiName اسم عنصر Salesforce لاسترداد البيانات منه. لا للمصدر، نعم للمتلقي

هام

جزء "__c" من اسم API مطلوب لأي عنصر مخصص.

لقطة شاشة تعرض اسم واجهة برمجة تطبيقات اتصال Salesforce.

مثال:

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

إشعار

للتوافق مع الإصدارات السابقة: عند نسخ البيانات من Salesforce، إذا كنت تستخدم مجموعة بيانات نوع "RelationalTable" السابقة، فإنها تستمر في العمل أثناء رؤية اقتراح للتبديل إلى نوع "SalesforceObject" الجديد.

الخاصية الوصف مطلوب
النوع يلزم تعيين خاصية نوع مجموعة البيانات إلى RelationalTable. ‏‏نعم‬
اسم الجدول اسم الجدول في Salesforce. لا (إذا تم تحديد "الاستعلام" في مصدر النشاط)

انسخ خصائص النشاط

للحصول على قائمة كاملة بالأقسام والخصائص المتوفرة لتعريف الأنشطة، راجع مقالة التدفقات. يوفر هذا القسم قائمة بالخصائص التي يدعمها مصدر Salesforce والملتقي.

Salesforce كنوع مصدر

لنسخ البيانات من Salesforce، قم بتعيين نوع المصدر في نشاط النسخ إلى SalesforceSource. يتم دعم الخصائص التالية في قسم المصدر لنشاط النسخ.

الخاصية الوصف مطلوب
النوع يجب تعيين خاصية نوع مصدر نشاط النسخ إلى SalesforceSource. ‏‏نعم‬
استعلام قم باستخدام الاستعلام المخصص لقراءة البيانات. يمكنك استخدام استعلام لغة استعلام عنصر Salesforce (SOQL) أو استعلام SQL-92. راجع المزيد من التلميحات في قسم تلميحات الاستعلام. إذا لم يتم تحديد الاستعلام، فسيتم استرداد جميع البيانات الخاصة بالكائن Salesforce المحدد في "objectApiName" في مجموعة البيانات. لا (إذا تم تحديد "objectApiName" في مجموعة البيانات)
readBehavior يشير إلى ما إذا كان يلزم الاستعلام عن السجلات الموجودة أو الاستعلام عن كافة السجلات بما في ذلك السجلات المحذوفة. إذا لم يُحدد، يكون السلوك الافتراضي هو السلوك السابق.
القيم المسموح بها: استعلام (افتراضي)، queryAll.
لا

هام

جزء "__c" من اسم API مطلوب لأي عنصر مخصص.

لقطة شاشة تعرض قائمة اسم واجهة برمجة تطبيقات اتصال Salesforce.

مثال:

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

إشعار

للتوافق مع الإصدارات السابقة: عند نسخ البيانات من Salesforce، إذا كنت تستخدم نسخة النوع "RelationalSource" السابقة، يستمر المصدر في العمل أثناء رؤية اقتراح للتبديل إلى نوع "SalesforceSource" الجديد.

إشعار

لا يدعم مصدر Salesforce إعدادات الخادم الوكيل في وقت تشغيل التكامل المستضاف ذاتياً، ولكنه يدعم ذلك.

Salesforce كنوع متلقي

لنسخ البيانات إلى Salesforce، قم بتعيين نوع المتلقي في نشاط النسخ إلى SalesforceSink. تُدعم الخصائص التالية في قسم متلقي نشاط النسخ.

الخاصية الوصف مطلوب
النوع يجب تعيين خاصية نوع متلقي نشاط النسخ إلى SalesforceSink. ‏‏نعم‬
writeBehavior أسلوب الكتابة للعملية.
القيم المسموح بها هي إدراج و Upsert.
لا (إذا كانت القيمة الافتراضية هي إدراج)
externalIdFieldName اسم حقل معرف خارجي لعملية upsert. يجب تعريف الحقل المحدد بـ "حقل مُعرف خارجي" في كائن Salesforce. لا يمكن أن تكون "القيم الفارغة" في بيانات الإدراج المطابق. نعم لقيمة "Upsert"
writeBatchSize عدد الصفوف من البيانات المكتوبة إلى Salesforce في كل دفعة. لا (الافتراضي هو 5,000)
ignoreNullValues يشير إلى ما إذا كان سيتم تجاهل القيم الفارغة من بيانات الإدراج أثناء عملية الكتابة أم لا.
القيم المسموح بها صواب و خطأ.
- صواب: ترك البيانات في عنصر الوجهة دون تغيير عند إجراء عملية upsert أو تحديث. إدراج قيمة افتراضية معرفة عند القيام بعملية إدراج.
- خطأ: تحديث البيانات في عنصر الوجهة الفارغة عند القيام بعملية upsert أو تحديث. أدرج قيمة فارغة عند القيام بعملية إدراج.
لا (إذا كانت القيمة الافتراضية خطأ)
 maxConcurrentConnections الحد الأعلى للاتصالات المتزامنة التي تم إنشاؤها إلى مخزن البيانات أثناء تشغيل النشاط. حدد قيمة فقط عندما تريد تحديد الاتصالات المتزامنة.  لا

مثال: متلقي Salesforce في نشاط النسخ

"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": "SalesforceSink",
                "writeBehavior": "Upsert",
                "externalIdFieldName": "CustomerId__c",
                "writeBatchSize": 10000,
                "ignoreNullValues": true
            }
        }
    }
]

التلميحات المتعلقة بالاستعلام

استرداد البيانات من تقرير Salesforce

يمكنك استرداد البيانات من تقارير Salesforce عن طريق تحديد استعلام مثل {call "<report name>"}. مثال على ذلك "query": "{call \"TestReport\"}" .

استرداد السجلات المحذوفة من سلة محذوفات Salesforce

للاستعلام عن السجلات المحذوفة مبدئياً من سلة المحذوفات Salesforce، يمكنك تحديد readBehavior كـ queryAll.

الاختلاف بين SOQL وبناء جملة استعلام SQL

عند نسخ البيانات من Salesforce، يمكنك استخدام استعلام SOQL أو استعلام SQL. لاحظ أن هذين الاثنين لديهما بناء جملة مختلف ودعم وظائف، لا تخلطهما. يتم اقتراح استخدام استعلام SOQL، الذي يتم دعمه من قِبل Salesforce. ترد الاختلافات الرئيسية في الجدول التالي:

بناء الجملة وضع 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. ‏‏غير مدعومة.

قم باسترداد البيانات باستخدام عبارة على العمود التاريخ والوقت

عند تحديد استعلام SOQL أو استعلام SQL، لاحظ اختلافات تنسيق التاريخ والوقت. على سبيل المثال:

  • عينة 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: تم اقتطاعه

إذا تلقيت خطأ من "MALFORMED_QUERY: تم اقتطاعه"، عادةً ما يكون بسبب أن لديك عمودًا من نوع JunctionIdList في البيانات ويكون لدى Salesforce قيود على دعم مثل هذه البيانات مع عدد كبير من الصفوف. للتخفيف، حاول استثناء عمود JunctionIdList أو تحديد عدد الصفوف المراد نسخها (يمكنك التقسيم إلى عدة عمليات تشغيل نشاط النسخ).

تعيين نوع البيانات لـ Salesforce

عند نسخ البيانات من Salesforce، يتم استخدام التعيينات التالية من أنواع بيانات Salesforce إلى أنواع البيانات المؤقتة داخل الخدمة داخلياً. لمعرفة كيفية تعيين نشاط النسخ للمخطط المصدر ونوع البيانات إلى المتلقي، راجع تعيينات المخطط ونوع البيانات.

نوع بيانات Salesforce نوع بيانات مؤقتة للخدمة
الرقم التلقائي السلسلة‬
خانة اختيار Boolean
‏‏العملة عدد عشري
التاريخ DateTime
التاريخ/الوقت DateTime
بريد إلكتروني السلسلة‬
المعرف السلسلة‬
علاقة البحث السلسلة‬
قائمة الخيارات متعددة الاختيارات السلسلة‬
الرقم‬ عشري
نسبة مئوية عدد عشري
هاتف السلسلة‬
قائمة انتقاء السلسلة‬
نص السلسلة‬
جزء نص السلسلة‬
مساحة النص (طويل) السلسلة‬
مساحة النص (منسق) السلسلة‬
النص (مشفر) السلسلة‬
عنوان URL السلسلة‬

إشعار

يتم تعيين نوع رقم Salesforce إلى النوع العشري في Azure Data Factory ومسارات Azure Synapse كنوع بيانات مؤقت للخدمة. النوع العشري يحترم الدقة والمقياس المحددين. بالنسبة للبيانات التي تتجاوز منازلها العشرية المقياس المحدد، سيتم تقريب قيمتها في معاينة البيانات ونسخها. لتجنب فقدان الدقة في Azure Data Factory ومسارات Azure Synapse، ضع في اعتبارك زيادة المنازل العشرية إلى قيمة كبيرة إلى حد معقول في صفحة تحرير تعريف الحقل المخصص في Salesforce.

بحث عن خصائص النشاط

لمعرفة تفاصيل حول الخصائص، تحقق من نشاط البحث.

الخطوات التالية

للحصول على قائمة بمخازن البيانات المدعومة كمصادر ومتلقين من خلال نشاط النسخ، انظر مخازن البيانات المدعومة .