@/# 等前缀做命名空间搜索、按输入动态 RPC,并用 OWL 自定义结果渲染。
<p>对照:How to Customize Odoo Command Palette in Odoo 19。
一、架构:两类 Registry
- command_setup:定义命名空间(前缀、占位符、防抖)。
- command_provider:提供
provide(env, options),用户输入时由框架调用以返回命令列表。
二、注册全局快捷动作(无前缀)
<p>例如「系统:重置本地缓存」:清空 localStorage/sessionStorage 并刷新。在command_provider 中返回带 name、category、action 的命令对象。用户打开面板或搜索 “cache” 即可看到。
registry.category("command_provider").add("clear_cache_provider", {
async provide(env, options) {
return [{
name: _t("System: Reset Local Cache"),
category: "tools",
action: () => {
localStorage.clear();
sessionStorage.clear();
window.location.reload();
},
}];
},
});
三、自定义命名空间(如 # 搜任务)
<p>先用command_setup 注册前缀 #:名称、placeholder、debounceDelay(如 300ms,避免每键一次 RPC)。
<p>再注册带 namespace: "#" 的 provider:从 options.searchValue 取关键词,用 env.services.orm.searchRead 查 project.task,映射为命令;action 里 actionService.doAction 打开表单。
<p>注意 try/catch,避免 RPC 失败锁死面板。
四、自定义 OWL 结果渲染
<p>默认结果是纯文本。若要显示项目名、阶段徽章等,可返回Component + props,用自定义 OWL 模板渲染更丰富的行。
五、资源打包
<p>在web.assets_backend 加入相关 JS/XML,依赖 web(及 project 等业务模块)。
六、最佳实践
- 命名空间务必 debounce
- 结果限制 5–10 条
- RPC 必须容错
- 不改核心即可扩展,利于升级
七、FAQ
<p>命令面板是什么?键盘驱动的搜索/跳转/执行动作界面(Ctrl+K)。用哪些 registry?command_setup 与 command_provider。
命名空间是什么?用前缀限定搜索范围,如 # 只搜任务。 <p>中国Odoo网原创中文改写|保留架构、全局命令、命名空间 RPC、OWL 渲染与 FAQ。Odoo用户手册 · 中文文档 · 开发实操。