Purchase Requisition创建异常求助:含行项无法保存
Purchase Requisition创建时带行项无法保存的权限问题
问题概况
- 涉及文档:Purchase Requisition
- 异常表现:拥有
group_grupos_requis组权限的用户创建采购申请时,填写行项后无法保存;但空行保存成功后,再添加行项并保存可正常完成。 - 已尝试操作:为mail_followers模块添加创建权限,无效果。
相关security.xml代码
<record id="group_grupos_requis" model="res.groups"> <field name="name">Solo Requisiciones</field> <field name="category_id" ref="base.module_category_hidden"/> </record> <record id="group_grupos_requis_hide" model="res.groups"> <field name="name">Puede Manipular Requisiciones</field> <field name="category_id" ref="base.module_category_hidden"/> </record> <record id="group_grupos_requis_aproval" model="res.groups"> <field name="name">Puede Confirmar Requisiciones</field> <field name="category_id" ref="base.module_category_hidden"/> </record> <record model="ir.rule" id="purchase_requisition_comp_rule"> <field name="name">Purchase Requisition multi-company</field> <field name="model_id" ref="model_purchase_requisition"/> <field name="domain_force">[('message_follower_ids.partner_id', '=', user.partner_id.id)]</field> <field name="groups" eval="[(4,ref('purchase.group_grupos_requis'))]"/> </record> <record model="ir.rule" id="purchase_requisition_all_rule"> <field name="name">Purchase Requisition Manager all</field> <field name="model_id" ref="model_purchase_requisition"/> <field name="domain_force">[(1,'=',1)]</field> <field name="groups" eval="[(4,ref('purchase.group_grupos_requis_hide')), (4,ref('purchase.group_grupos_requis_aproval'))]"/> </record> <record model="ir.rule" id="purchase_requisition_all_rule_line"> <field name="name">Purchase Requisition Manager line all</field> <field name="model_id" ref="model_purchase_requisition_line"/> <field name="domain_force">[(1,'=',1)]</field> <field name="global" eval="True"/> </record> <record model="ir.rule" id="purchase_requisition_rh_rule"> <field name="name">Purchase Requisition RH</field> <field name="model_id" ref="model_purchase_requisition"/> <field name="domain_force">[('solo_rh', '!=', False)]</field> <field name="groups" eval="[(4,ref('hr.group_hr_manager'))]"/> </record>
问题原因
异常核心在于purchase_requisition_comp_rule的权限验证逻辑:
- 用户首次创建带行项的采购申请时,系统还未自动将用户添加为该申请的关注者(
message_follower_ids为空),导致[('message_follower_ids.partner_id', '=', user.partner_id.id)]条件不满足,权限验证失败,无法保存。 - 空行保存成功后,系统会自动将用户添加为申请的关注者,此时
message_follower_ids已包含用户对应的partner,后续编辑添加行项时规则验证即可通过。
解决方案
修改purchase_requisition_comp_rule的domain_force,添加对新建记录的兼容判断:
<record model="ir.rule" id="purchase_requisition_comp_rule"> <field name="name">Purchase Requisition multi-company</field> <field name="model_id" ref="model_purchase_requisition"/> <!-- 新增对新建记录的判断,允许未生成ID的记录通过验证 --> <field name="domain_force">['|', ('id', '=', False), ('message_follower_ids.partner_id', '=', user.partner_id.id)]</field> <field name="groups" eval="[(4,ref('purchase.group_grupos_requis'))]"/> </record>
该规则逻辑为:要么是尚未保存的新建记录(ID为空),要么是已存在且用户为该申请的关注者,覆盖创建场景的权限验证需求。
内容的提问来源于stack exchange,提问作者Lomba
相关产品推荐
相关产品推荐

