Azure 数据工厂上传到 Salesforce 并在另一个对象上引用字段

Posted

技术标签:

【中文标题】Azure 数据工厂上传到 Salesforce 并在另一个对象上引用字段【英文标题】:Azure Datafactory Upload to Salesforce and reference field on another object 【发布时间】:2019-05-06 12:19:00 【问题描述】:

这就是场景 - 我们正在使用 Azure DataFactoryV2 运行一系列管道,这些管道从本地数据源获取帐户数据,对其进行转换并上传到 Salesforce。

目前我们想要导入一个帐户并将其与另一个帐户相关联。客户有标准的父/子关系(例如,经销商帐户和子帐户),这是使用内部 Salesforce ID。

我们还使用外部 ID 来进行更新插入,并且此 ID 对于每条记录都是唯一的。

根据 SF 文档:Here - 当您手动调用 API 并将其传递给 JSON 文件时,您可以在 JSON 中添加关系:

    
   "Name" : "NewAccount",
   "account__r" :
   
       "Ext_UID__c" : 123
   


但是,这在 Azure DataFactoryV2 中似乎无法在代码中指定查找关系,或者如果是,我不知道该怎么做。

供参考 - 这是管道 JSON 代码:


"name": "Import_to_Salesforce",
"properties": 
    "activities": [
        
            "name": "Load_to_Salesforce",
            "type": "Copy",
            "policy": 
                "timeout": "7.00:00:00",
                "retry": 0,
                "retryIntervalInSeconds": 30,
                "secureOutput": false,
                "secureInput": false
            ,
            "userProperties": [
                
                    "name": "Source",
                    "value": "[dbo].[Account]"
                ,
                
                    "name": "Destination",
                    "value": "Account"
                
            ],
            "typeProperties": 
                "source": 
                    "type": "SqlSource"
                ,
                "sink": 
                    "type": "SalesforceSink",
                    "writeBatchSize": 5000,
                    "writeBehavior": "upsert",
                    "externalIdFieldName": "Ext_UID__c",
                    "ignoreNullValues": false
                ,
                "enableStaging": false,
                "enableSkipIncompatibleRow": true,
                "dataIntegrationUnits": 0,
                "translator": 
                    "type": "TabularTranslator",
                    "columnMappings": 
                        "Name": "Name",
                        "ParentId": "ParentId",
                        "BillingStreet": "BillingStreet",
                        "BillingCity": "BillingCity",
                        "BillingPostalCode": "BillingPostalCode",
                        "BillingCountry": "BillingCountry",
                        "ShippingStreet": "ShippingStreet",
                        "ShippingCity": "ShippingCity",
                        "ShippingPostalCode": "ShippingPostalCode",
                        "ShippingCountry": "ShippingCountry",
                        "Phone": "Phone",
                        "AccountNumber": "AccountNumber",
                        "Brand__c": "Brand__c",
                        "Account_Status__c": "Account_Status__c",
                        "Account_Type__c": "Account_Type__c",
                        "Preferred_Payment_Method__c": "Preferred_Payment_Method__c",
                        "Last_Account_Login__c": "Last_Account_Login__c",
                        "Ext_UID__c": "Ext_UID__c",
                        "Auto_Renew_Status__c": "Auto_Renew_Status__c",
                        "Account_Balance__c": "Account_Balance__c",
                        "Outstanding_Amount_30_days__c": "Outstanding_Amount_30_days__c",
                        "Outstanding_Amount_60_days__c": "Outstanding_Amount_60_days__c",
                        "Outstanding_Amount_90_days__c": "Outstanding_Amount_90_days__c",
                        "Account_Priority__c": "Account_Priority__c",
                        "Reseller__c": "Reseller__c",
                        "Last_Payment__c": "Last_Payment__c"
                    
                
            ,
            "inputs": [
                
                    "referenceName": "Staging_Source",
                    "type": "DatasetReference"
                
            ],
            "outputs": [
                
                    "referenceName": "Destination_Load_to_Salesforce",
                    "type": "DatasetReference"
                
            ]
        
    ]
,
"type": "Microsoft.DataFactory/factories/pipelines"

任何意见将不胜感激。

【问题讨论】:

【参考方案1】:

您使用的是哪种 SF 连接器?如果没有有意义的名称,请查看您的 API 用户在 Salesforce 中的登录历史记录。它可能被列为“Simba Technologies”或类似的东西?

对于标准关系,您应该可以在此联系人加载中键入 Account.Ext_UID__c Parent.Ext_UID__clike:

对于自定义查找/主详细信息字段,如果字段 API 名称为 Account__c,您可以将其映射为 Account__r.Ext_UID__c

只需确保父帐户在子帐户引用它们之前就存在...也许您在以前的工作中加载了它们,也许最好分两个阶段加载:

    没有父映射的所有帐户的平面插入/更新插入 仅映射此记录的分机 ID 和父分机的重新父级更新/更新插入。身份证

【讨论】:

先生,您既是学者又是绅士!这就像一个绝对的魅力! 很高兴我能帮上忙!我只是“幸运”,最近我不得不帮助我的同事调查它。老实说,我对那个连接器没有印象。它是 1 年的 API 版本(例如,在 SF 数据库中看不到 Individual 表),不允许您指定批量大小(一次要加载多少条记录)或 API 类型(这是 SOAP,比 REST + OAuth2 安全性稍差。另外,理想情况下,我可以选择使用 SF 批量 API (developer.salesforce.com/docs/atlas.en-us.api_bulk_v2.meta/…)。希望他们能尽快改进插件。【参考方案2】:

查找活动在 ADF v2 中可用:

您可以在此处选择要查找的数据集和行。

希望这会有所帮助!

【讨论】:

如果我错了,请纠正我 - 但查找只是查询 Salesforce 对象,以返回 Salesforce ID,然后我们需要将其存储在某个地方并映射到我们现有的对象 - 这是不是我们所追求的。我们希望在 ADFv2 中使用 SF API 的现有本机功能

以上是关于Azure 数据工厂上传到 Salesforce 并在另一个对象上引用字段的主要内容,如果未能解决你的问题,请参考以下文章

触发 Azure 数据工厂管道 - Blob 上传 ADLS Gen2(以编程方式)

如何在 Azure 数据工厂触发时检查是不是正在上传某些文件(允许在 ADF 中上传时读取文件)

Azure 数据工厂使用 REST Multipart/form-data 上传文件

使用参数在 Azure 数据工厂中导入架构

使用 Azure 数据块从 FileServer 上传到 Azure 存储容器

有没有办法在 Azure 数据工厂中使用 cURL 命令?