Ruby / Rails:我如何通过rforce gem用一个API调用在salesforce中创建多个记录?[英] Ruby / Rails: how can I create multiple records in salesforce with one API call via the rforce gem?

本文是小编为大家收集整理的关于Ruby / Rails:我如何通过rforce gem用一个API调用在salesforce中创建多个记录?的处理方法,想解了Ruby / Rails:我如何通过rforce gem用一个API调用在salesforce中创建多个记录?的问题怎么解决?Ruby / Rails:我如何通过rforce gem用一个API调用在salesforce中创建多个记录?问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我正在使用 rforce gem 在我的 salesforce 数据库中创建记录.

rforce 文档中创建记录的例子是:

  opportunity = [
                 :type,      'Opportunity',
                 :accountId, account_id,
                 :amount,    '10.00',
                 :name,      'Fakey McFakerson',
                 :closeDate, '2008-07-04',
                 :stageName, 'Closed Won'
                ]

  binding.create :sObject => opportunity

salesforce API 调用 create() 允许一次创建多个对象,但我很难做到这一点.我尝试了以下调用:

binding.create :sObject => array_of_opportunities

其中 array_of_opportunities 是一个数组数组,如上例中的 opportunity .

但这会引发错误:

NoMethodError (undefined method `to_sym' for #<Array:0x00000004ba5488>)

如果有任何帮助,我将不胜感激.

推荐答案

为了扩大 API 操作,将请求包装在另一个数组中,并使用一些一致的符号(即 :sObjects)作为每个值的键.应该在每个值之前重复相同的符号,因为这会转换为重复的 XML 子元素.例如,如果您想创造两个机会,请执行以下操作:

opportunity1 = [
    :type,      'Opportunity',
    :amount,    '10.00',
    :name,      'OPP1',
    :closeDate, '2008-07-04',
    :stageName, 'Closed Won'
]

opportunity2 = [
    :type,      'Opportunity',
    :amount,    '10.00',
    :name,      'OPP2',
    :closeDate, '2008-07-04',
    :stageName, 'Closed Won'
]

puts binding.create([:sObjects, opportunity1, :sObjects, opportunity2])

此 XML 在幕后创建并发送到 SFDC:

<create xmlns="urn:partner.soap.sforce.com">
  <sObjects>
    <type>Opportunity</type>
    <amount>10.00</amount>
    <name>OPP1</name>
    <closeDate>2008-07-04</closeDate>
    <stageName>Closed Won</stageName>
  </sObjects>
  <sObjects>
    <type>Opportunity</type>
    <amount>10.00</amount>
    <name>OPP2</name>
    <closeDate>2008-07-04</closeDate>
    <stageName>Closed Won</stageName>
  </sObjects>
</create>

这是对同时创造的两个机会的回应:

{:createResponse=>{:result=>[{:id=>"0066000000KNMrOAAX", :success=>"true"}, {:id=>"0066000000KNMrPAAX", :success=>"true"}]}}

请注意,您一次最多可以创建 200 条记录.

另外,我注意到,如果这两个值是同一个对象(即执行类似 binding.create([:sObjects, opportunity1, :sObjects, opportunity1]) 的操作,XML 转换器会出错,所以请确保它们实际上是单独的对象.这可能是框架中的一个错误,但在实际生产情况下这种情况很少被认为是严重的,但在测试时要小心.

本文地址:https://www.itbaoku.cn/post/786637.html