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

DML are not allowed before API callouts?

Народ, вопрос смотрится конечно нубский, но не в этом контексте.

Я давно уже не работал с Salesforce и появилась одна идейка для реализации, но вспомнил про данное ограничение.
DML are not allowed before API callouts.
Поменялось ли что-нибудь сейчас с этим ограничением? Если оно в силе, то существуют ли какие-нибудь интересные способы его обойти его без использования асинхронные способов (типа future).

Народ, вопрос смотрится конечно нубский, но не в этом контексте.

Я давно уже не работал с Salesforce и появилась одна идейка для реализации, но вспомнил про данное ограничение.
DML are not allowed before API callouts.
Поменялось ли что-нибудь сейчас с этим ограничением? Если оно в силе, то существуют ли какие-нибудь интересные способы его обойти его без использования асинхронные способов (типа future).

Всё в силе и всё просто - DML стартует транзакцию, а callout может залипнуть на 120 секунд, соответственно транзакция тогда тоже залипнет на 120 секунд что не есть хорошо, поэтому низзя и думаю что это вряд ли поменяется, если только не появятся методы управления транзакциями вроде Database.commit, или какого-нибудь Database.disableTransaction

Всё в силе и всё просто - DML стартует транзакцию, а callout может залипнуть на 120 секунд, соответственно транзакция тогда тоже залипнет на 120 секунд что не есть хорошо, поэтому низзя и думаю что это вряд ли поменяется, если только не появятся методы управления транзакциями вроде Database.commit, или какого-нибудь Database.disableTransaction

А какой у тебя контекст? Что за идея?

А какой у тебя контекст? Что за идея?

ilya leshchuk
Всё в силе и всё просто - DML стартует транзакцию, а callout может залипнуть на 120 секунд, соответственно транзакция тогда тоже залипнет на 120 секунд что не есть хорошо, поэтому низзя и думаю что это вряд ли поменяется, если только не появятся методы управления транзакциями вроде Database.commit, или какого-нибудь Database.disableTransaction

могли бы уже замутить какой Database.commitAsync()

[quote="ilya leshchuk"]Всё в силе и всё просто - DML стартует транзакцию, а callout может залипнуть на 120 секунд, соответственно транзакция тогда тоже залипнет на 120 секунд что не есть хорошо, поэтому низзя и думаю что это вряд ли поменяется, если только не появятся методы управления транзакциями вроде Database.commit, или какого-нибудь Database.disableTransaction[/quote]
могли бы уже замутить какой Database.commitAsync()

Когда-то давно обещали асинхронные дмл операции...

Когда-то давно обещали асинхронные дмл операции...

Gres
А какой у тебя контекст? Что за идея?

Да вот хочу запилить свою реализацию Remote Object, но по логике работы таких вещей они должны работать как до других DML операций так и после. И вот тут засада. Получается что придется использовать всегда до или гарадить async методы который не гарантируют успешность выполнения операций в текущем контексте.

Вот кстати интересно, а родные Remote Objects работают независимо от DML операций? Они же тоже работают поверх запросов к внешним сервисам? Не было шанса проверить это. Может кто знает?

[quote="Gres"]А какой у тебя контекст? Что за идея?[/quote]
Да вот хочу запилить свою реализацию Remote Object, но по логике работы таких вещей они должны работать как до других DML операций так и после. И вот тут засада. Получается что придется использовать всегда до или гарадить async методы который не гарантируют успешность выполнения операций в текущем контексте. 

Вот кстати интересно, а родные Remote Objects работают независимо от DML операций? Они же тоже работают поверх запросов к внешним сервисам? Не было шанса проверить это. Может кто знает?

Вот кстати если придираться к тексту сообщения!!!

System.CalloutException: You have uncommitted work pending. Please commit or rollback before calling out.

Значит все-таки SF сам себе противоречит? Вот я значит хочу сделать commit и продолжить работу с callout. Как я это могу сделать?

Вот кстати если придираться к тексту сообщения!!!

System.CalloutException: You have uncommitted work pending. [b]Please commit or rollback[/b] before calling out.

Значит все-таки SF сам себе противоречит? Вот я значит хочу сделать commit и продолжить работу с callout. Как я это могу сделать?

Вопросы кстати по родным Remote Objects из Salesforce пополняются.
1. (тот что выше упоминал) работают ли они вперемешку с обычными DML операциями?
2. на них действуют те же принципы что и на обычные DML операции, то есть изменения откатываются в случае исключения в коде / вызова rollback?

Вопросы кстати по родным Remote Objects из Salesforce пополняются.
1. (тот что выше упоминал) работают ли они вперемешку с обычными DML операциями?
2. на них действуют те же принципы что и на обычные DML операции, то есть изменения откатываются в случае исключения в коде / вызова rollback?

Dmitry Shnyrev
Вот кстати если придираться к тексту сообщения!!!

System.CalloutException: You have uncommitted work pending. Please commit or rollback before calling out.

Значит все-таки SF сам себе противоречит? Вот я значит хочу сделать commit и продолжить работу с callout. Как я это могу сделать?


Пока никак, из инструментов работы с транзакциями пока что есть только setSavepoint и rollback, никаких commit'ов.

[quote="Dmitry Shnyrev"]Вот кстати если придираться к тексту сообщения!!!

System.CalloutException: You have uncommitted work pending. [b]Please commit or rollback[/b] before calling out.

Значит все-таки SF сам себе противоречит? Вот я значит хочу сделать commit и продолжить работу с callout. Как я это могу сделать?[/quote]
Пока никак, из инструментов работы с транзакциями пока что есть только setSavepoint и rollback, никаких commit'ов.