跳转至内容
  • 版块
  • 标签
  • 热门
  • 用户
  • 群组
皮肤
  • 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. Mrp-operations 的workflow没有写入DB

Mrp-operations 的workflow没有写入DB

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

    我在install mrp-operations之后,发现里面的按钮,还有workflow都不起作用。Debug之后,发现是workflow根本就没有写入DB,在wkf_instance表里查不到mrp.production.workcenter.line这个记录。

    有高手知道是什么原因吗?是不是这个module的继承有问题?

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

      wkf_instance 中, 理论上应该是当业务产生后, 才会有数据.

      要确认工作流是否OK. 你应该看  wkf 以及 wkf_activxxx 表里, 如果对应工作流的节点数据库里有了. 那就意味着安装成功了.

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

        多谢高人指点,active是创建成功的,从instance的字面含义,我也猜想是需要根据实际业务产生数据。
        但当我在work order列表里点击'start_working'按钮的时候,什么反应也没有,Debug进去,就发现是去check instance这个表里有没有数据,没有的话,就退出了,所以很奇怪。

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

          那你debug 的时候, 如果有遇到代码 trg_create(.... 那就生成了. 如果没有. 那就是代码有问题.

          重点看看  modify_production_order_state 这个方法 里的
          trg_validate 部分代码.

          如果你的数据未 trg_validate 对应的工作流. ,那意味着, 你相关的数据未就绪.

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

            版主大人,我又跟踪了几遍,把mrp_operations这个模块反复升级了几次,发现在trg_create的时候,传入的res_type和res_id是wizard的,而不是具体的某个模块的。从trg_create的代码逻辑上看,这个函数应该是负责创建wkf_instance里的对象的,这样的话,传入的res_type和res_id就应该是当前升级的这个模块的。
            我也尝试了装载其他的一些模块,看看传入的值,发现都是一样:wizard,这让我很困惑,如果是这样的话,那wkf_instance表里的那些值是什么时候创建的呢?
            多谢!

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

              参阅: addons\mrp\mrp.py

              中  mrp.procurement 对象的  action_produce_assign_product 方法.

              触发  produce 动作, 应该就可以有 实例生成了.

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

                多谢版主大人。
                再多问一点菜鸟问题,我一直认为实例是在安装或者升级的时候创建的,并且只创建一次。如果是在某个动作触发时做的话,那是不是每次触发这个动作的时候,都要创建一次实例?从创建的代码逻辑里看,好像没有检测实例是否存在。
                不知道是不是这样子呢?

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

                  好象是, 你每创建一个 mrp.producxxx 的对象, 就会有一个工作流实例创建.  (即, 一个工作流开始时, 会有一个 实例创建. 然后 这个工作流结束后, 这个实例也就被删除了.

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

                    版主大人,我在openobject-developer里找到这样的说法:

                    If your buttons do not seem to be doing anything, one of the following two things are likely:
                    1. The record you are working on does not have a Workflow Instance record associated with it (it was probably
                    created before you defined your workflow)

                    2. You have not set the “osv” field correctly in your workflow XML file

                    我遇到的情况非常像第一种问题,但可惜的是没有任何解决的建议,我现在还是苦于无法下手解决,因为无法确定到底是什么时候创建的instance record,也就无法确定到底创建的时候出了什么问题。

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

                      [quote author=maths369 link=topic=2261.msg7328#msg7328 date=1293669981]
                      版主大人,我在openobject-developer里找到这样的说法:

                      If your buttons do not seem to be doing anything, one of the following two things are likely:
                      1. The record you are working on does not have a Workflow Instance record associated with it (it was probably
                      created before you defined your workflow)

                      2. You have not set the “osv” field correctly in your workflow XML file

                      我遇到的情况非常像第一种问题,但可惜的是没有任何解决的建议,我现在还是苦于无法下手解决,因为无法确定到底是什么时候创建的instance record,也就无法确定到底创建的时候出了什么问题。
                      [/quote]

                      你不确定, 我帮你确定了...你不相信, 我有什么办法? 你再研究一年半载的OE, 你再回头看你这贴吧.

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

                        :-X
                        版主教训得有理,还是要自己研究透才行。

                        不是不相信,只是我发现几乎我找到的所有的版本,这个模块都有同样的问题,甚至我今天在OE官方的Demo网站上发现了相同的错误。我认为既然这么常见,可能有人已经发现了原因。

                        不过,还是自己研究透比较好。

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

                          哎,,, 别一口一个版主哎...  版主就是打扫垃圾贴的...

                          我也还在学习OE好不好...

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

                            呵呵!太谦虚了,你回答了这么多问题……

                            大家一起学习……

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

                              经过Debug,我发现workflow的流程是这样的:
                              1. 当某个模块安装时,如果它的workflow的on_create状态是True,那么,就会将这个模块的workflow添加进wkf表,并把相关的activity和transition写进相应的表。
                              2. 当这个模块创建相关数据记录时,将会触发创建instance的方法,并在wkf_instance表中添加记录,用res_id把实际数据记录和workflow的记录链接在一起,相当于对于一条实际的记录,有一个workflow的实例创建,还含有一个状态:active/complete。complete的话,就说明已经完成了。
                              3. 当实际的事件触发workflow的时候,会先去根据当前数据记录的res_id和res_type(数据模块名)去wkf_instance表中查询是否有相应的实例记录,如果有,并且状态是active,就会创建实际的workflow步骤实例,并执行相关步骤。

                              之前我遇到的问题就是wkf_instance表中与实际数据记录对应的实例没有写入,所以每次查询的时候都找不到,也就不能执行相关的workflow。我用create方法强行执行了一遍创建数据记录之后,发现问题解决了。

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

                                嗯. 所以说, 这个 instance 就是你的业务数据创建时生成的. 至于为什么你的业务数据create 时, 没有生成对应的 wkf_instance 就要仔细地查查原因了.

                                没有跑过生产类的东西. 你可以再试着创建新的业务数据.. 再看看 wkf_instance 有没有生成对应的记录. 如果还是没有. 就得继续跟踪下去.. 应该有其它的地方的操作会导致 业务数据的 create.. 从而生成对应的 wkf_instance.. 我觉得你可能还是不熟悉OE业务逻辑操作而引起的(或者说是OE Bug).

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

                                  没错,我现在也越来越有这种感觉,很大可能性应该是我不熟悉业务导致的某些必须的数据没有创建,从而影响了instance的创建。继续跟踪整理中……

                                  1 条回复 最后回复
                                  0

                                  • 登录

                                  • 没有帐号? 注册

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