Scheduler、Debug等OpenERP开发的几个小问题备注
-
[b]第一个问题,OpenERP的调度器(Scheduler)[/b]
关于Scheduler的概念介绍,参考老肖的《OpenERP应用和开发基础》“第九章 Request,Sequence and Scheduler”章节,这里要说的是OpenERP在实际使用中的一点小问题。
在WindowXP平台,OpenERP 5.06版的试验中发现,设定某个任务今天几点几分几秒运行,但它总是不会运行,而是要等到明天的同一时间才会运行。经调试发现,问题出在addons\base\ir\ir_cron.py 的下述代码行(V5.06 是第93行):
while nextcall < now and numbercall:
该行的意思是,任务设定的调用时间(nextcall)早于当前时间(now)时,执行Schedule的任务。但调试发现,在WindowsXP上,该行代码的调用时间基本上总是在nextcall的时候,该时候取到的当前时间(now)也总是等于nextcall,这就导致Scheduler的任务不被调用。
如果nextcall之后没有别的Scheduler,系统会自动在一天后再次执行Scheduler检查,此时,nextcall是昨天的时间,now是今天的时间,nextcall < now,因此,本应该昨天执行的任务,延迟到今天才执行。
修正方法,只要将该行代码改成 nextcall <= now 即可,在WindowsXP上测试OK。
[b]第二个问题,OpenERP的调试[/b]
可以使用Python的调试器来调试OpenERP,坛子也有相关方法介绍。不过,对于大型程序,调试器总是不太好用,使用复杂,效率也不高。这是个普遍问题,不仅仅是python语言的问题。对于大型程序,通常用添加Debug Message的办法调试,在OpenERP中,添加Debug Message的方法如下。
import netsvc
......
logger = netsvc.Logger()
logger.notifyChannel("Debug", netsvc.LOG_DEBUG, "Your Debug Message")
为了简化调试,还可以编写一个简单的独立的Python小程序用于调试,该小程序以XML-RPC方式调用被调试代码,这样的话,不用从界面上操作调试,效率高得多。
[b]第三个问题,代码行中的中文[/b]
如果在代码行中直接写中文,如:
subject = "合同[%(contract)s]通知" % {'contract':res.contract_id.name}
会有异常抛出,程序在该行中断执行。解决方法很简单,改成如下即可。
subject = "合同[%(contract)s]通知".decode('utf-8') % {'contract':res.contract_id.name}