从openERP中的mail_message获取author_id

时间:2014-06-27 09:19:36

标签: python orm openerp

我试图使用在server action中执行的python代码从openERP mail_message模型中获取一个字段(因此它不是我可以调试的模块!我甚至不能print这种状态)(当提取新的电子邮件时)但我无法从中获得任何有用的东西。

基本上当有人给我发电子邮件时,openERP会创建一个新任务。但是新创建的故障单没有连接到向我发送邮件的用户。

获取新电子邮件时,将执行此服务器操作。

在一个名为mail_message的表中,您可以找到该电子邮件(+ author_id,+ email,+ res_id(这是创建的任务的ID),因此我想从该表中获取author_id。 (查询看起来像这样: SELECT author_id FROM mail_message WHERE type = 'email' AND res_id = '<Task.id>'

这是我目前的代码

#Initialize object. That one points to the mail_message model.
mailMessage_obj = self.pool.get('mail.message')

#Created Id in project_task
myId = object.id

#browse whole object with that id
#message = mailMessage_obj.browse(cr,uid,[myId])

#Select field where 
messageIds = mailMessage_obj.search(cr,uid,[('type','=','email'),('res_id','=',myId)],context=context)

if messageIds:
    #messageRecord = mailMessage_obj.browse(cr,uid,[myId],context=context)
    #object.write({'partner_id':messageRecord.author_id.id})

    res = mailMessage_obj.read(messageIds, ['author_id'])
    partnerId = res[0]

    #Author id
    #partnerId = message[0]['author_id']
    #partnerId = message.author_id


    #res = [(r['id'], r['author_id']) for r in messageRecord]

    #partnerId = res

    #partnerId = 259866
    object.write({'partner_id':partnerId})

我不知道如何正确掌握author_id。如果我对ID进行硬编码并让它写入数据库(最后两行)它可以正常工作,但我无法对用户ID进行硬编码。 ;)

有人可以向我解释它是如何正确完成的吗? 我不知道我是否应该使用.browse或.read或其他东西..

1 个答案:

答案 0 :(得分:0)

我认为你的python方法有错误。 你写道:

res = mailMessage_obj.read(messageIds, ['author_id'])
partnerId = res[0]

但是read()方法在这里返回一个dict列表(因为messageIds是一个列表)。然后,您没有指定要从 res 变量中检索的字段,最后,由于author_id是 many2one ,它会返回如下内容:(2,&# 39; myusers&#39;。)

你应该做的:

res = mailMessage_obj.read(cr, uid, messageIds, ['author_id'])
partnerId = res[0]['author_id'][0]

希望我帮助你,

Greatings