Регистрация  |  Вход

Как залить пачку записей в SF через API

Народ расскажите какие методы API вы используете для того чтобы создать на орге пачку записей.
Не буду выкладывать пока те способы что я нашел, хочу сперва услышать про реальный опыт.

Народ расскажите какие методы API вы используете для того чтобы создать на орге пачку записей.
Не буду выкладывать пока те способы что я нашел, хочу сперва услышать про реальный опыт.

Dmitry Shnyrev
Народ расскажите какие методы API вы используете для того чтобы создать на орге пачку записей.
Не буду выкладывать пока те способы что я нашел, хочу сперва услышать про реальный опыт.

BulkApi
RestApi

ExecuteAnonimous

[quote="Dmitry Shnyrev"]Народ расскажите какие методы API вы используете для того чтобы создать на орге пачку записей.
Не буду выкладывать пока те способы что я нашел, хочу сперва услышать про реальный опыт.[/quote]

BulkApi
RestApi

ExecuteAnonimous

Ок.

С Bulk API все понятно - работает асинхронно, лишний оверхед

Rest API
я нашел https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_composite_sobject_tree_flat.htm
Но там лимит 200 записей за один запрос.

ExecuteAnonimous
Вот здесь про него тема
https://salesforce-developer.ru/forum/topic-execute-anonymous-chere-api

Ок.

С Bulk API все понятно - работает асинхронно, лишний оверхед

Rest API 
я нашел https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/dome_composite_sobject_tree_flat.htm
Но там лимит 200 записей за один запрос.

ExecuteAnonimous
Вот здесь про него тема
https://salesforce-developer.ru/forum/topic-execute-anonymous-chere-api

Я к тому что мне например надо синхронно (не через Bulk API) залить 10k записей.
Это вообще можно сделать?

Я к тому что мне например надо синхронно (не через Bulk API) залить 10k записей.
Это вообще можно сделать?

пачками по 200 заливай.
через execute anonymous все равно нужно будет дробить на части, ибо вылетишь за пределы cpu size и dml rows.

пачками по 200 заливай. 
через execute anonymous все равно нужно будет дробить на части, ибо вылетишь за пределы cpu size и dml rows. 

На счет CPU time и DML rows пока сомневаюсь.
Десереализировать скажем 1k записей - одна команда, должно пройти быстро
DML rows у нас лимит в 10к.

Просто как то не сталкивался раньше и сейчас немного в прострации от того что нет варианта синхронно выполнить insert для 10k записей через API.

Но способ с execute anonymous все равно не дает покоя.

Скажем я хочу в одном запросе передать сам скрипт который мне десериализирует json в структуру данных и произведет insert + сами данные в виде json.

Я полагаю что есть вероятность упереться в размер самого запроса. Как к примеру remote action кушает 3mb. НО в 3mb можно запихнуть гораздо больше чем 200 записей и к тому же это могут быть записи для разных объектов, которые разберет сам скрипт.

Короче надо будет на досуге поэкспериментировать!

На счет CPU time и DML rows пока сомневаюсь.
Десереализировать скажем 1k записей - одна команда, должно пройти быстро
DML rows у нас лимит в 10к.

Просто как то не сталкивался раньше и сейчас немного в прострации от того что нет варианта синхронно выполнить insert для 10k записей через API.

Но способ с execute anonymous все равно не дает покоя.

Скажем я хочу в одном запросе передать сам скрипт который мне десериализирует json в структуру данных и произведет insert + сами данные в виде json.

Я полагаю что есть вероятность упереться в размер самого запроса. Как к примеру remote action кушает 3mb. НО в 3mb можно запихнуть гораздо больше чем 200 записей и к тому же это могут быть записи для разных объектов, которые разберет сам скрипт.

Короче надо будет на досуге поэкспериментировать!

так в чем проблема загрузить чанками по 200 записей?

со стороны форса это число взялось не просто так, даже при инсерте 10к записей форс это дробит на чанки по 200 записей.

cpu лимит тратится не только на десериализацию, но и на сам инсерт, который может идти через триггеры, бп, и валидация.

так в чем проблема загрузить чанками по 200 записей? 

со стороны форса это число взялось не просто так, даже при инсерте 10к записей форс это дробит на чанки по 200 записей. 

cpu лимит тратится не только на десериализацию, но и на сам инсерт, который может идти через триггеры, бп, и валидация. 

То что сам форс дробит это его проблемы.
в одну DML операцию можно запихнуть до 10k. А 1 dml операция это одна транзакция.
Чет не очень хочется заморачиваться с проверкой и откатом изменений при ошибке.
Если дробить по 200 то что тогда делать если за 499 запросе отвалится insert?
А мне надо либо все, либо ничего. - придется писать еще такой же скрипт который после неудачной загрузке мне все откатит (удалит).

То что сам форс дробит это его проблемы. 
в одну DML операцию можно запихнуть до 10k. А 1 dml операция это одна транзакция.
Чет не очень хочется заморачиваться с проверкой и откатом изменений при ошибке. 
Если дробить по 200 то что тогда делать если за 499 запросе отвалится insert? 
А мне надо либо все, либо ничего. - придется писать еще такой же скрипт который после неудачной загрузке мне все откатит (удалит). 

Чет wilder куда-то испарился. Тема 100% его и он должен был уже сталкиваться с этим вопросом
Не хочет делиться опытом?

Чет wilder куда-то испарился. Тема 100% его и он должен был уже сталкиваться с этим вопросом :D
Не хочет делиться опытом?

Dmitry Shnyrev
Чет wilder куда-то испарился. Тема 100% его и он должен был уже сталкиваться с этим вопросом
Не хочет делиться опытом?

Никуда не испарился Я это делаю через свой пакет. Мне обычно хватало 2000 записей для тестов. У меня не предусмотрен откат в случае не удачи. У меня просто все визуально отображается.

Никто не мешает сделать то же самое через execute anonimous и вернуть текстовый лог. Или даже сразу послать его на мыло.

[quote="Dmitry Shnyrev"]Чет wilder куда-то испарился. Тема 100% его и он должен был уже сталкиваться с этим вопросом :D
Не хочет делиться опытом?[/quote]

Никуда не испарился :) Я это делаю через свой пакет. Мне обычно хватало 2000 записей для тестов. У меня не предусмотрен откат в случае не удачи. У меня просто все визуально отображается.

Никто не мешает сделать то же самое через execute anonimous и вернуть текстовый лог. Или даже сразу послать его на мыло.

Dmitry Shnyrev
Я к тому что мне например надо синхронно (не через Bulk API) залить 10k записей.
Это вообще можно сделать?

а где может пригодиться синхронно залить 10к записей? Когда мне что то нужно залить в больших объёмах я всегда использую PHP toolkit, удобно можно какуюто предподготовку провести, отследить выполнилось ли, обработать ошибки, красота.

ace
[quote="Dmitry Shnyrev"]Я к тому что мне например надо синхронно (не через Bulk API) залить 10k записей.
Это вообще можно сделать?[/quote]

а где может пригодиться синхронно залить 10к записей? Когда мне что то нужно залить в больших объёмах я всегда использую PHP toolkit, удобно можно какуюто предподготовку провести, отследить выполнилось ли, обработать ошибки, красота.

ace
объёмах я всегда использую PHP toolkit

А PHP toolkit через что работает? Не через API?

ace
а где может пригодиться синхронно залить 10к записей?

Там же где и синхронно залить 201 или 1000 записей

[quote="ace"] объёмах я всегда использую PHP toolkit[/quote]
А PHP toolkit через что работает? Не через API?

[quote="ace"]а где может пригодиться синхронно залить 10к записей?[/quote]
Там же где и синхронно залить 201 или 1000 записей

Dmitry Shnyrev
А PHP toolkit через что работает? Не через API?

Bulk API

Dmitry Shnyrev
Там же где и синхронно залить 201 или 1000 записей

с детства нелюблю синхронную передачу данных, както это не аккуратненько, хотя сейчас это можно нормально организовывать.

ace
[quote="Dmitry Shnyrev"] А PHP toolkit через что работает? Не через API?[/quote]
Bulk API

[quote="Dmitry Shnyrev"]Там же где и синхронно залить 201 или 1000 записей[/quote]
с детства нелюблю синхронную передачу данных, както это не аккуратненько, хотя сейчас это можно нормально организовывать.

ace
Bulk API

Ничего не имею против Bulk API
Просто я не использую сторонние toolkits, а предпочитаю напрямую использовать API.
Пока проще послать одну команду и получить ответ чем писать обертки над асинхронной обработкой загрузки.

Как бы данная тема не проблема - я уже скрипт запилил. Просто я почему-то был уверен что есть способ синхронной загрузки. А оказалось что и нет его! Столько разных API а тупо залить 201 запись одним запросом нельзя - как-то в голове трудно улеглось. Понятно что можно написать обработчик любой сложности и он будет не только заливать, но и одновременно проигрывать mp3. Но чет много оверхеда для простой операции.

[quote="ace"]Bulk API[/quote]
Ничего не имею против Bulk API
Просто я не использую сторонние toolkits, а предпочитаю напрямую использовать API.
Пока проще послать одну команду и получить ответ чем писать обертки над асинхронной обработкой загрузки. 

Как бы данная тема не проблема - я уже скрипт запилил. Просто я почему-то был уверен что есть способ синхронной загрузки. А оказалось что и нет его! Столько разных API а тупо залить 201 запись одним запросом нельзя - как-то в голове трудно улеглось. Понятно что можно написать обработчик любой сложности и он будет не только заливать, но и одновременно проигрывать mp3. Но чет много оверхеда :D для простой операции.

Dmitry Shnyrev
Как бы данная тема не проблема - я уже скрипт запилил. Просто я почему-то был уверен что есть способ синхронной загрузки. А оказалось что и нет его! Столько разных API а тупо залить 201 запись одним запросом нельзя - как-то в голове трудно улеглось. Понятно что можно написать обработчик любой сложности и он будет не только заливать, но и одновременно проигрывать mp3. Но чет много оверхеда для простой операции.

кстати а магиическое число 200 кто-нибудь знает почему они выбрали именно его?

ace
[quote="Dmitry Shnyrev"]
Как бы данная тема не проблема - я уже скрипт запилил. Просто я почему-то был уверен что есть способ синхронной загрузки. А оказалось что и нет его! Столько разных API а тупо залить 201 запись одним запросом нельзя - как-то в голове трудно улеглось. Понятно что можно написать обработчик любой сложности и он будет не только заливать, но и одновременно проигрывать mp3. Но чет много оверхеда :D для простой операции.[/quote]

кстати а магиическое число 200 кто-нибудь знает почему они выбрали именно его?

Ну через Exec Anon можно залить больше 200 записей, но все зависит от текущей логики на объекте.

Ну через Exec Anon можно залить больше 200 записей, но все зависит от текущей логики на объекте.

Да, это обсуждается в соседней ветке.
https://salesforce-developer.ru/forum/topic-execute-anonymous-chere-api

Да, это обсуждается в соседней ветке.
https://salesforce-developer.ru/forum/topic-execute-anonymous-chere-api