如何在记录规则中使用功能字段?

时间:2013-07-18 12:02:19

标签: openerp

我正在尝试实现所有Hr经理用户都应该被允许查看记录。 我创建了一个功能领域:

def list_HRM(self, cr, uid, ids, field_name, arg, context):
         attribute = {}
        hr_managers = self.pool.get('hr.employee').search(cr, uid, ['&', ('department_id.name', '=', 'Human Resources'), ('manager', '=', True)], context=context)
        hr_managers_uid = []
        for record in hr_managers:
            hr_managers_uid.append(self.pool.get('hr.employee').browse(cr, uid, record, context=context).user_id.id)
        record = self.browse(cr, uid, ids)[0]
        attribute[record.id] = str(uid in hr_managers_uid or uid==1)
        return attribute

    _columns={
    'hr_managers_func' : fields.function(list_HRM, type='char', method=True, string='List of HR Managers'),
    'always_true':fields.boolean()
     }
   _defaults={
      'always_true':True
      }

在.xml文件中:

<field name="always_true" invisible="1"/>
<field name="hr_managers_func" invisible="1"/>

记录规则:

['&','|',('state','=','hod_depart'),('state','=','hr_review'),('always_true','=',eval(hr_managers_func))]

由于记录规则条件格式,我使用了字段'always_true',即 [( 'FIELD_NAME', '操作符',值)]。 我认为该规则将使用eval评估功能字段 但不幸的是,eval没有按照记录规则工作, 我收到了这个错误:

NameError: name 'eval' is not defined

我想不出更多。 我看到几个论坛有点类似于我的问题,他们使用相关字段来避免记录中的功能字段,但在这里我必须检查当前用户是否属于hr管理员。 我试图以最好的方式解释这一点,期待一些回复。

1 个答案:

答案 0 :(得分:3)

要限制功能字段,您需要定义fnct_search。功能领域本身就变成了假人。

在你的模特中:

def _my_functional_field_search(self, cr, uid, obj, name, args, context=None):
    list_of_ids = [...]

    return [('id', 'in', list_of_ids)]

_columns = {
    'my_functional_field': fields.function(
        lambda **x: True,
        fnct_search=_my_functional_field_search,
        type='boolean',
        method=True,
    ),
}

然后在您的安全XML文件中:

<record id="your_rule_id" model="ir.rule">
  <field name="name">Your Rule Name</field>
  <field name="model_id" ref="model_the_model" />
  <field name="groups" eval="[(4, ref('group_affected_group'))]" />
  <field name="domain_force">[('my_functional_field', '=', True)]</field>
</record>