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__c
like:
对于自定义查找/主详细信息字段,如果字段 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 上传文件