Народ, вопрос смотрится конечно нубский, но не в этом контексте.
Я давно уже не работал с 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
А какой у тебя контекст? Что за идея?
А какой у тебя контекст? Что за идея?
могли бы уже замутить какой Database.commitAsync()
[quote="ilya leshchuk"]Всё в силе и всё просто - DML стартует транзакцию, а callout может залипнуть на 120 секунд, соответственно транзакция тогда тоже залипнет на 120 секунд что не есть хорошо, поэтому низзя и думаю что это вряд ли поменяется, если только не появятся методы управления транзакциями вроде Database.commit, или какого-нибудь Database.disableTransaction[/quote] могли бы уже замутить какой Database.commitAsync()
Когда-то давно обещали асинхронные дмл операции...
Когда-то давно обещали асинхронные дмл операции...
Да вот хочу запилить свою реализацию 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?
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'ов.