Предположим, что я настроил действие сервера A на модели stock.inventory
. Это действие просто регистрирует значение, а затем вызывает Sever Action B (с идентификатором базы данных 366). Код питона в действии просто:Одуо автоматическое действие сервера для запуска другого действия сервера
log('running server action a')
value = {
"type": "ir.actions.server",
"id": 366,
}
Затем в сервер действий B, который находится на product.product
модели, код питон просто:
log('running server aciton b')
Теперь, когда я добавляю Действие сервера A в меню «Дополнительно» и вручную запустить его из браузера на объекте stock.inventory
, оба действия успешно выполняются. Другими словами, в журналах я вижу как «выполняемое действие сервера a», так и «запуск действия сервера b».
Теперь я создаю автоматическое действие для запуска действия сервера A при обновлении или создании объекта stock.inventory
. После этого и обновления или создания объекта stock.inventory
через пользовательский интерфейс я вижу только «выполнение действия сервера a» в журналах. Другими словами, действие Server B никогда не запускается, как это было, когда я запускал один и тот же эксперимент вручную из меню «Дополнительно».
Итак, мой вопрос в том, можно ли инициировать действие второго сервера с первого действия сервера, если действие первого сервера инициируется автоматическим действием.
Как вы называете действие? Я думаю, что из контекста автоматизированного действия вам нужно вызвать метод, который не возвращает действие. Семантика этих проблем может показаться странной. Я вызывал действие сервера, которое возвращало действие окна, и ничего не работало, пока я не присвоил действию значение возвращаемого действия окна. Однако при нормальных обстоятельствах я бы просто вернул действие окна и ожидал, что он загрузит представление. –
Я не уверен, но мне интересно, если действия, возвращаемые из функций, обрабатываются по-разному при вызове из браузера, а не из кода. Возможно, вам придется вызвать другой метод напрямую, а не возвращать действие, которое действительно просто вызывает метод в любом случае. –
@PhillipStack Я думаю, что вы правы. Похоже, когда вы «возвращаете действие», это то, что понимает браузер. Он знает, что нужно вызвать сервер и выполнить возвращенное действие. Я хотел бы просто вызвать метод, как вы предлагаете, но, к сожалению, я делаю все это в версии Odoo Online, то есть у меня нет доступа к исходному коду. Я добавляю эти действия через пользовательский интерфейс и не могу определить способ запуска действия с другой серверной стороны. – flyingL123