Ruby / Rails: как я могу создать несколько записей в salesforce с помощью одного вызова API через гем rforce? - PullRequest
4 голосов
/ 14 января 2012

Я использую гем rforce для создания записей в моей базе данных 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

Вызов API Salesforce create() позволяет создать несколько объектов одновременно, но я изо всех сил пытаюсь выполнитьэтот.Я пробовал следующий вызов:

binding.create :sObject => array_of_opportunities

Где array_of_opportunities - массив массивов, подобных opportunity в приведенном выше примере.

, но выдает ошибку:

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

Буду признателен за любую помощь.

1 Ответ

4 голосов
/ 30 января 2012

Чтобы объединить операции 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 выходит из себя, поэтому убедитесь, что они на самом деле являются отдельными объектами. Это, вероятно, ошибка в платформе, но в реальных производственных ситуациях это настолько редкий случай, который можно считать серьезным, нобудьте внимательны, пока вы тестируете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...