Некоторое время назад я начал использовать Python с Pandas и Simple-Salesforce для переноса данных в организации Salesforce. Я хочу вставить записи учетной записи и записи контактов, которые имеют поиск по записям учетной записи. Вместо идентификатора связанной записи Salesforce я хочу использовать внешний идентификатор для связывания/подключения записей. Когда я выполняю такую ​​операцию вставки для записей контактов с помощью Salesforce Inspector, вместо использования поля AccountId я могу использовать Account.ExternalId__c, а с помощью Data Loader это Account:ExternalId__c.

Какую нотацию следует использовать для simple-salesforce? Когда я использую Account.ExternalId__c или Account:ExternalId__c, я получаю эту ошибку:

simple_salesforce.exceptions.SalesforceMalformedRequest: некорректный запрос _https ://xxx.my.salesforce.com/services/async/42.0/job/some_id/batch/some_id2/result. Содержимое ответа: {'exceptionCode': 'InvalidBatch', 'exceptionMessage': 'Записи не обработаны'}

Я использую этот метод simple-salesforce для вставки записей:

sf.bulk.Account.insert(data_json, batch_size=100, use_serial=False)

Конечно, когда я пытаюсь импортировать связанные записи с помощью Data Loader или Salesforce Inspector, все работает нормально, поэтому я предполагаю, что это проблема с обозначениями в Simple-Salesforce.

1
David Reed 5 Дек 2021 в 17:59
1
Спасибо @identigral! Вы правы - это похоже и дало мне дополнительную идею для решения моей проблемы. Я вставлю объяснение в отдельный ответ. Это слишком долго, чтобы включить это здесь.
 – 
gcalikpl
5 Дек 2021 в 21:39

1 ответ

Ниже решение и объяснение, если кто-то будет искать это в будущем.

Предыдущая версия моего data_json:

data_json = {'FirstName': 'Test 1', 
             'LastName': 'Name 1', 
             'Email': 'test01@test.com', 
             'AccountId': 'someAccountId'}

Мне пришлось:

  • переименуйте ключ «AccountId» в «Учетная запись»
  • создать новый словарь: extIdDict = {'ExternalId__c': 'someExternalId'}
  • добавить словарь extIdDict в качестве значения для ключа «Учетная запись»: row['Account'] = extIdDict

Наконец, у меня есть data_json:

data_json = {'FirstName': 'Test 1', 
             'LastName': 'Name 1', 
             'Email': 'test01@test.com', 
             'Account': {'ExternalId__c': 'someExternalId'}}

С помощью такого типа json я смог использовать его в качестве параметра в методе вставки, упомянутом в моем исходном вопросе, и успешно вставить записи контактов, связанные с записями учетной записи.

1
gcalikpl 5 Дек 2021 в 21:45