从 openERP 中的 mail_message 获取 author_id

Posted

技术标签:

【中文标题】从 openERP 中的 mail_message 获取 author_id【英文标题】:Get author_id from mail_message in openERP 【发布时间】:2014-08-18 08:25:30 【问题描述】:

我正在尝试使用在server action 中执行的python 代码从openERPs 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】:

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

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

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

你应该做的:

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

希望对你有帮助,

大功告成

【讨论】:

我可以在下周三测试这个。我稍后会回来,只是想让你知道。感谢您的回答!欣赏它。 它现在抛出一个“TypeError: read() 需要至少 4 个参数(3 个给定)”。 是的,我错过了有关该方法的一些参数,我在下面编辑了我的答案: res = mailMessage_obj.read(cr, uid, messageIds, ['author_id'])

以上是关于从 openERP 中的 mail_message 获取 author_id的主要内容,如果未能解决你的问题,请参考以下文章

如何使用域列表过滤 OpenERP 中的数据

使用xml-rpc调试openerp模块中的函数

如何使用python创建从openerp自动发送邮件的程序

ODOO从哪里开始??OpenERP的线头儿

OpenERP 6.1 - 电子邮件模板默认为 html

在 OpenERP 中,如何从父级(Many2One 对象)中显示或隐藏基于域的字段