Node.js Salesforce Rest API-将值插入查找字段

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

使用Salesforce REST API一次将200条记录(JSON数组)插入到自定义对象中。一条记录的示例:

{
  "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}"
        }
    }]
}