zoukankan      html  css  js  c++  java
  • OpenERP 在context中写自己的部门ID

    转:http://blog.csdn.net/littlebo01/article/details/17554953
    1.   

          使用OpenERP自定义模块开发的时候,你会发现,有一个uid(当前登录用户id)特别好用,不管是在xml的domain

    条件表达式中,还是在类中,都能很方便的使用uid.有一段时间就一直在琢磨,这个uid 是什么时候赋值的。感觉是在

    session中,一直没有找到。后来需要获取当前登录人的部门id,把department_id做成类似uid这么的变量,就爽了,就

    太方便了。

                

                  注:Search 资料显示     ['&',('department', '=', user.context_department_id.id),('state', '=', 'pr_draft')]  

              

                提示context_department_id不存在,其实这是OE7.0之前的用法,6.0中有类似的方法定义:

    1. def get_users_department(self, val):  
    2.         dep = val.get('department')  
    3.         fields = ['name']  
    4.         data = [dep]   
    5.         if not dep:  
    6.             return False  
    7.         return self.import_object(fields, data, 'hr.department', 'hr_department_user', dep)  
    8.   
    9.   
    10.     def get_user_mapping(self):  
    11.         return {  
    12.             'model' : 'res.users',  
    13.             'hook' : self.import_user,  
    14.             'map' : {   
    15.                 'name': concat('first_name', 'last_name'),  
    16.                 'login': value('user_name', fallback='last_name'),  
    17.                 'context_lang' : 'context_lang',  
    18.                 'password' : 'password',  
    19.                 '.id' : '.id',  
    20.                 'context_department_id/id': self.get_users_department,  
    21.                 'user_email' : 'email1',  
    22.             }  
    23.         }  

    其实也不是那么神秘,当你实现了下面的步骤:


    1)  在context中写入自己的东西(测试)

         

            1.1) 定义一个扩展类,是函数字段

    1. class extend_user(osv.osv):  
    2.     _name = "res.users"  
    3.     _inherit = ['res.users']  
    4.   
    5.     # 返回我的id  
    6.     def _write_mine_id(self, cr, uid, ids, name, args, context=None):  
    7.         result =  dict.fromkeys(ids, 1024)  
    8.         return result  
    9.   
    10.     _columns = {  
    11.         'context_mine_id': fields.function( _write_mine_id,type="integer"),  
    12.     }  
    13.   
    14. extend_user()  

            

                1.2)  在Firefox的Debug下,看请求,奇迹发生了




             说明:  不是当时的截图,应该是{"mine_id:": 1024}


               1.3)  原理剖析

                         抽时间在做梳理了


    2)  在context中写入当前登录人department_id

            

            2.1)  修改上面的类文

    1. class extend_user(osv.osv):  
    2.     _name = "res.users"  
    3.     _inherit = ['res.users']  
    4.   
    5.   
    6.     # 获取用户关联的部门  
    7.     def _get_self_department_ids(self, cr, uid, ids, name, args, context=None):  
    8.         result = dict.fromkeys(ids, False)  
    9.         emp = self.pool.get('hr.employee')  
    10.         for id in ids:  
    11.             emp_ids = emp.search(cr, uid, [('user_id', '=', id)], context=context)  
    12.             emp = emp.browse(cr, uid, emp_ids[0], context=context)  
    13.             result[id] = emp.department_id  
    14.         return result  
    15.   
    16.   
    17.     _columns = {  
    18.         'context_department_id': fields.function(_get_self_department_ids,type="hr.department"),  
    19.     }  
    20.   
    21.   
    22. extend_user()  


        2.2)  结果看上面的截图,出来了

        2.3)  注意函数字段的类型是  type="hr.department",你没看错就是这个

        2.4) 获取部门id另一种方法,职员同名存在问题

                   

    1. def get_current_user_department_id(self, cr, uid, ids, context=None):  
    2.        list_resource_id = self.pool.get('resource.resource').search(cr, uid, [('user_id','=',uid)], context=context)  
    3.        username = self.pool.get('resource.resource').browse(cr, uid, list_resource_id[0], context=context).name  
    4.        list_emp_id = self.pool.get('hr.employee').search(cr, uid, [('name_related','=',username)], context=context)  
    5.        depart_id = self.pool.get('hr.employee').browse(cr, uid, list_emp_id[0], context=context).department_id  
    6.        return depart_id  

             注意:这个return 的depart_id 可不是integer类型,raise Exception(type(depart_id))  :  


    Exception: <class 'openerp.osv.orm.browse_record'>


             raise osv.except_osv(_("test"), _(depart_id))

     



  • 相关阅读:
    结对编程
    四则运算
    认清自我,创造未来!!!
    浅谈GIT
    典型用户及用例故事
    结对编程 四则运算
    四则运算
    《未来的程序员》
    java项目命名规范
    四则运算测试
  • 原文地址:https://www.cnblogs.com/chjbbs/p/3795100.html
Copyright © 2011-2022 走看看