Node.js Salesforce Rest API-将值插入查找字段
使用Salesforce REST API一次将200条记录(JSON数组)插入到自定义对象中。一条记录的示例:Node.js Salesforce Rest API-将值插入查找字段,node.js,rest,salesforce,Node.js,Rest,Salesforce,使用Salesforce REST API一次将200条记录(JSON数组)插入到自定义对象中。一条记录的示例: { "records": [ { "attributes" : {"type" : "Timecard__c"}, "Project__c": "a9S1F0000004LHDUA2", "Milestone
{
"records": [
{
"attributes" : {"type" : "Timecard__c"},
"Project__c": "a9S1F0000004LHDUA2",
"Milestone__c": "a9F1F00000007GOUAY",
"Resource__c": "0031F00000TApKqQAL",
"Date__c": "2020-08-16",
"Hours__c": 7,
"Notes__c": "Did some work"
},
]
}
前三个字段是对其他对象的查找。我要插入的数据具有查找字段的名称(例如Project\uu c=“Canoe reconstruction”、Milestone\uu c=“Rebuild gunwales”、Resource\uu c=“John Smith”)
我目前的计划是生成包含ID和名称的项目、里程碑和资源数组,然后修补我必须加载的JSON
Salesforce REST API是否提供了一种方法来设置文本名称的查找值,以便它能够自己找到Id,还是我目前的方法是处理此问题的最有效方法
这是我用于处理数据加载的代码
const submitTimecards = async() => {
const token = await getAccessToken()
const data = JSON.parse(fs.readFileSync('timecards.json', 'utf-8'))
const response = await axios({
method: 'post',
url: `${salesforceUrl}/composite/sobjects`,
data,
headers: {
'Authorization': `OAuth ${token}`,
'Content-Type': 'application/json'
}
})
return response
}
通过
Name
这有点棘手。SF“自然”的方法是指定一个标记为外部id的助手字段(理想情况下,它也标记为唯一),然后您可以使用引用。“亲爱的Salesforce,我不在乎你需要链接的账户记录的内部主键是什么,在我这边是12345,去发挥你的魔力,自己查一下。”
例如,在中显示“上传记录并与外部ID关联”。这可能不是很清楚,但如果团队中有SF管理员,他/她应该知道如何使用“上传”“在Data Loader中操作,同样的原则也适用。我有一个例子,一次完成多个对象,这有点太疯狂了,但请尝试阅读它:
或者,您可以将多个请求批处理为一个“全部”或“无”API调用。这类似于SF的一系列指令,而不是多次往返于您,并且必须将结果缓存到某个位置。在该调用中,您可以运行查询,然后在最终请求中使用它们的临时结果。它看起来有点像或(滚动到“一个简单的示例,现在使用复合!”部分)
缺点是使用composite
无法一次完成所有200项
一次呼叫最多可以有25个子请求。其中最多有5个子请求
子请求可以是sObject集合或查询操作,包括
查询和查询请求
{
"compositeRequest" : [{
"method" : "POST",
"url" : "/services/data/v38.0/sobjects/Account",
"referenceId" : "refAccount",
"body" : {
"Name" : "My New Account"
}
},{
"method" : "GET",
"url" : "/services/data/v38.0/query/?q=select+id+from+contact+where+name='Howard+Jones'",
"referenceId" : "refContact"
},{
"method" : "PATCH",
"url" : "/services/data/v38.0/sobjects/Contact/@{refContact.records[0].Id}",
"referenceId" : "refContactUpdated",
"body" : {
"AccountId" : "@{refAccount.id}"
}
}]
}