关于 @ 和 # 字符串触发器在 Odoo Chatter 中如何工作的问题?
Question on How @ and # String Trigger Works in Odoo Chatter?
希望你们一切顺利,
我很好奇 @
和 #
等特定字符串如何触发 Odoo Chatter & Discuss 中用户和频道的弹出窗口。此聊天有 mail.thread
个与之相关的模型,但我似乎无法理解如何在聊天中创建我自己的自定义触发器?
它是否属于某些视图而不属于模型?
任何帮助将不胜感激!
还有另一种方法,那就是使用 /
或“命令”弹出窗口。您可以在弹出列表中添加自己的项目,并在用户从弹出列表中选择您的项目时触发任何操作。
- 继承自mail.channel
class MailChannel(models.Model):
_inherit = 'mail.channel'
- 添加一个以
_define_command_XXXXX
开头的新方法。这会在弹出窗口中注册项目。
def _define_command_sample(self):
return {'help': _('Here is some sample help')}
- 添加一个以
_execute_command_XXXXX
开头的新方法。当用户使用你的命令时执行此方法。
def _execute_command_sample(self, **kwargs):
# Send a "temporary" message to the user
self._send_transient_message(self.env.user.partner_id, f"Hello! You just successfully used the /sample command. You typed {kwargs['body']}.")
参考:Github 其中 Odoo 定义了 /lead
命令
PS:以上为Odoo V12.0 - V14.0。 Odoo V15.0 的工作方式略有不同,但您可以查看 this and this 了解具体操作方法。
这些是 suggestion delimiters 用于更新建议列表的模型。
const suggestionDelimiters = ['@', ':', '#', '/'];
例如@
用于获取合作伙伴(mail.partner model) matching a given search term. The _updateSuggestionList
function will search the suggestions, sort them then will show (update)弹出列表
要添加新的自定义触发器,您需要将分隔符添加到 suggestionDelimiters list and alter the _computeSuggestionModelName function to return the related model, the model must be defined like the mail.partner 模型。
如果要修补现有模型,请检查以下示例(取自 hr 模块):
/** @odoo-module **/
import {
registerInstancePatchModel,
registerFieldPatchModel,
} from '@mail/model/model_core';
import { attr, one2one } from '@mail/model/model_field';
// Patch model
registerInstancePatchModel('mail.partner', 'hr/static/src/models/partner/partner.js', {
async checkIsEmployee() {
await this.async(() => this.messaging.models['hr.employee'].performRpcSearchRead({
context: { active_test: false },
domain: [['user_partner_id', '=', this.id]],
fields: ['user_id', 'user_partner_id'],
}));
this.update({ hasCheckedEmployee: true });
},
});
// Patch fields
registerFieldPatchModel('mail.partner', 'hr/static/src/models/partner/partner.js', {
hasCheckedEmployee: attr({
default: false,
}),
});
希望你们一切顺利,
我很好奇 @
和 #
等特定字符串如何触发 Odoo Chatter & Discuss 中用户和频道的弹出窗口。此聊天有 mail.thread
个与之相关的模型,但我似乎无法理解如何在聊天中创建我自己的自定义触发器?
它是否属于某些视图而不属于模型? 任何帮助将不胜感激!
还有另一种方法,那就是使用 /
或“命令”弹出窗口。您可以在弹出列表中添加自己的项目,并在用户从弹出列表中选择您的项目时触发任何操作。
- 继承自mail.channel
class MailChannel(models.Model):
_inherit = 'mail.channel'
- 添加一个以
_define_command_XXXXX
开头的新方法。这会在弹出窗口中注册项目。
def _define_command_sample(self):
return {'help': _('Here is some sample help')}
- 添加一个以
_execute_command_XXXXX
开头的新方法。当用户使用你的命令时执行此方法。
def _execute_command_sample(self, **kwargs):
# Send a "temporary" message to the user
self._send_transient_message(self.env.user.partner_id, f"Hello! You just successfully used the /sample command. You typed {kwargs['body']}.")
参考:Github 其中 Odoo 定义了 /lead
命令
PS:以上为Odoo V12.0 - V14.0。 Odoo V15.0 的工作方式略有不同,但您可以查看 this and this 了解具体操作方法。
这些是 suggestion delimiters 用于更新建议列表的模型。
const suggestionDelimiters = ['@', ':', '#', '/'];
例如@
用于获取合作伙伴(mail.partner model) matching a given search term. The _updateSuggestionList
function will search the suggestions, sort them then will show (update)弹出列表
要添加新的自定义触发器,您需要将分隔符添加到 suggestionDelimiters list and alter the _computeSuggestionModelName function to return the related model, the model must be defined like the mail.partner 模型。
如果要修补现有模型,请检查以下示例(取自 hr 模块):
/** @odoo-module **/
import {
registerInstancePatchModel,
registerFieldPatchModel,
} from '@mail/model/model_core';
import { attr, one2one } from '@mail/model/model_field';
// Patch model
registerInstancePatchModel('mail.partner', 'hr/static/src/models/partner/partner.js', {
async checkIsEmployee() {
await this.async(() => this.messaging.models['hr.employee'].performRpcSearchRead({
context: { active_test: false },
domain: [['user_partner_id', '=', this.id]],
fields: ['user_id', 'user_partner_id'],
}));
this.update({ hasCheckedEmployee: true });
},
});
// Patch fields
registerFieldPatchModel('mail.partner', 'hr/static/src/models/partner/partner.js', {
hasCheckedEmployee: attr({
default: false,
}),
});