Odoo中文社区可以通过以下三个域名访问:shine-it.net , odoocn.org,odoo.net.cn

原论坛用户的基本信息和发帖这里都予以保留,请注意:原论坛用户无需重新注册新用户,但是您的密码需要重置

开发人员可以登录gitter讨论组: http://gitter.im/odoo-china/Talk, 需要github账号

如果您登录系统碰到问题,请在微信公众号留言:

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}



  • [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}


  • 管理员

    1.现在我调试还是使用很原始的log的方法
          fp =file('e:\temp.log','a')
            fp.write("log:"+message+'\r\n')
            fp.close()

    2.XML-RPC方式调用被调试代码,能给个例子么... :)

    Thank you old xiao



  • > 2.XML-RPC方式调用被调试代码,能给个例子么...
    XML-RPC方式调用被调试对象的方法,参见《深入理解OpenERP的对象》,[url=http://shine-it.net/index.php/topic,2159.msg6801.html#msg6801]http://shine-it.net/index.php/topic,2159.msg6801.html#msg6801[/url]





  • sock.execute(帐套名, 用户ID(一般为1 即admin), 用户密码, 对象串(如 account.move), 方法(如 'create', '_query_get'), 参数s)



  • 收藏


登录后回复
 

与 Odoo 中文社区 的连接断开,我们正在尝试重连,请耐心等待