OpenERP 7 - Создать автоматическое сообщение журнала в поле "Записать заметку" как запись журнала истории
Сейчас я создаю модуль настройки для целей лабораторных испытаний в OpenERP 7. Пользователям потребуется ввести свои компоненты лабораторных испытаний и результаты здесь.
Теперь у меня есть поле, которое называется "Причина перемен". Я хотел бы знать метод, как я могу зарегистрировать ввод этого содержимого в виде сообщения "Записать заметку" для отображения внизу через mail.thread?
Шаг будет:
Причина изменений (ROC) как обязательное поле
Любые изменения в других моих полях будут вызывать мой метод onchange для очистки содержимого поля ROC.
Если пользователь что-то изменил без ввода текста в поле ROC, а затем нажмите кнопку "Сохранить", появится сообщение об ошибке "Пожалуйста, введите причину изменения". Это отключит пользователя от сохранения этого.
Если пользователь что-то изменил и введет текст в поле ROC, а затем сохранит, содержимое поля ROC будет создано в виде сообщения внизу (например, "Записать заметку") в качестве справочной и истории записи журнала.
Мой вопрос будет, как я могу выполнить шаги 3 и 4? Глубоко признателен за вашу помощь
2 ответа
Есть две возможности, но используемая модель должна наследовать email.thread
! Но я думаю, что это наследство, потому что вы написали что-то о сообщениях болтовни.
- Используйте систему автоматического отслеживания Odoo (ранее OpenERP). Вам просто нужно добавить параметр track_visibility в определение поля, например (новый, а затем старый API)
roc = fields.Char(string="Reason For Changes", track_visibility="on_change")
_columns = {
roc: fields.char(string="Reason For Changes", track_visibility="on_change"),
}
- Оставить сообщение на запись самостоятельно.
email.thread
идет с некоторыми простыми, но полезными методами. Одним из них является message_post(). Переопределите write() модели, как показано ниже (новый / старый API):
@api.multi
def write(self, vals):
res = super(YourModel, self).write(vals)
if 'roc' in vals:
for your_model_record in self:
your_model_record.message_post(vals.get('roc'))
return res
def write(self, cr, uid, ids, vals, context=None):
res = super(YourModel, self).write(vals)
if 'roc' in vals:
for your_model_record_id in ids:
self.message_post(cr, uid, your_model_record_id, vals.get('roc')), context=context)
return res
Я надеюсь, что мой вопрос может помочь другим. Ниже приведен пример кода, который работает для меня сейчас:
def write(self, cr, uid, ids, vals, context=None):
res = super(test_lab, self).write(cr, uid, ids, vals, context=context)
if 'ROC' in vals:
for lab in self.browse(cr, uid, ids, context=context):
self.message_post(cr,uid,[lab.id],vals.get('ROC'),context=context)
return res
Надеюсь, это полезно. Спасибо!