我试图使用在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或其他东西..
答案 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