跳转至内容
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • 默认(Flatly)
  • 不使用皮肤
折叠

Odoo 中文社区

  1. 主页
  2. 版块
  3. Odoo 开发与实施交流
  4. Scheduler、Debug等OpenERP开发的几个小问题备注

Scheduler、Debug等OpenERP开发的几个小问题备注

已定时 已固定 已锁定 已移动 Odoo 开发与实施交流
7 帖子 4 发布者 8.3k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • N 离线
    N 离线
    NewZN
    写于 最后由 编辑
    #1

    [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 条回复 最后回复
    0
    • J 离线
      J 离线
      Joshua 管理员
      写于 最后由 编辑
      #2

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

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

      Thank you old xiao

      【上海先安科技】(joshua AT openerp.cn),欢迎关注公众号:openerp_cn

      1 条回复 最后回复
      0
      • N 离线
        N 离线
        NewZN
        写于 最后由 编辑
        #3

        > 2.XML-RPC方式调用被调试代码,能给个例子么...
        XML-RPC方式调用被调试对象的方法,参见《深入理解OpenERP的对象》, [检测到链接无效,已移除]

        1 条回复 最后回复
        0
        • M 离线
          M 离线
          mrshelly
          写于 最后由 编辑
          #4

          http://doc.openerp.com/developer/6_22_XML-RPC_web_services/index.html#python-example

          1 条回复 最后回复
          0
          • M 离线
            M 离线
            mrshelly
            写于 最后由 编辑
            #5

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

            1 条回复 最后回复
            0
            • S 离线
              S 离线
              stbrine
              写于 最后由 编辑
              #6

              收藏

              1 条回复 最后回复
              0

              • 登录

              • 没有帐号? 注册

              • 登录或注册以进行搜索。
              • 第一个帖子
                最后一个帖子
              0
              • 版块
              • 标签
              • 热门
              • 用户
              • 群组