赛跑网

 找回密码
 注册

QQ登录

只需一步,快速开始

快捷登录

查看: 2289|回复: 0

workflow常见问题排查与解决一

[复制链接]
发表于 2013-10-14 22:25:43 | 显示全部楼层 |阅读模式
本文档主要是总结 切不可照搬 熟能生巧 只有真正理解了 才能应对各种错误
对于workflow(基于BO创建)的问题 做如下总结 我会按照做的步骤 一一列出要注意的事项 和遇到问题如何排查
1.       当ME51N创建采购申请的时候 会触发一个标准业务对象 那么这个标准业务对象要去SWO3中去查找  首先me51n属于物料管理的采购申请里面  会发现两个 一个是bus2105bus2009 至于到底用哪一个 要看公司的实际业务背景  有的公司是一个采购申请创建一个采购订单 所以就用bus2105, 有的公司是一个采购申请的一个行项目创建一个采购订单 所以 就用到bus2009. 询问业务人员后确定用bus2009 行项目触发事件
2.       业务对象找到了 那么当我们创建一个采购订单 我们该用那个事件来触发工作流呢 看似我们是me51n创建了一个采购申请 应该是created事件,当我们尝试用created触发的时候 发现没有触发成功,排查其他干扰因素 我们有充足的理由怀疑 不是用created的触发 那么我们再联系下业务背景 发现采购申请到采购订单过程中会有个审批过程 正好发现bus2009里面有个releaseStepCreated采购申请项目审批步骤已创建 这个好像可以 就试一下 结果触发了                            ---本案例中 触发后发出两条消息 是因为后台配置的问题 公司的业务是 假设有一个采购申请 里面有两个行项目 那么每个行项目都发出两条消息给两个人 完成P1P2 两级审批  两个行项目 一共发出四条消息 由于本案例 我指定的代理就是我 所以导致了我一下子收到了两条….
3.       现在总结一下 触发不了的可能原因有哪些  
1.1 从根源寻找 业务对象没找对 触发事件没找对
1.2 业务对象和触发事件都找对的情况下 还有一种情况就是 如下图
事件没有激活 A的绿灯是暗色的   
1.3是你用复制的业务对象或者是继承的业务对象触发的 这样没用 即使用swo1设置了系统范围也不行
解析:值是怎么从事件触发传到工作流的
何谓绑定 绑定就是 me51n创建采购申请以后会触发bus2009的事件  触发后值都是在事件容器里面  要想把值从工作流里面获取到刚刚创建的值 那么就需要把事件容器和工作流容器绑定 关于这个绑定 说明一点 如果我
这里写的是bus2009 那我就必须要绑定工作流容器里面的bus2009 经过试验 不一定 非要绑定bus2009  还可以绑定他复制或者是继承的业务对象zbus2009 这样被绑定的工作流容器里面的ZBUS2009里面就有了刚刚创建的采购申请数据 如下图
    1.4 没有进行以上绑定 绑定工作流容器的业务对象 照样会触发 只是值传不过去罢了
    1.5   
4.  工作流容器里面获取不到值的原因 可能是  
1.没把事件容器的业务对象和工作流容器的业务对象绑定
2.绑错了 一般不会帮错 绑错了会报错的 (应该是20092009或者由2009的继承或者是复制(一般不会复制)而来的业务对象 不能绑2105 虽说有相同的字段)
3.业务对象没有设置输入输出 (试验得出 不碍事)
4.wf同步性不太好 更换了什么业务对象什么的 重新绑定一下比较好 注意check按钮检查不出来 自己留意一下
5. 工作流执行完一步后消失了 如何排查 SWIA 无代理检查
看看停在了哪一步
双击进去看看 点日志 查看详细 另外可以看看下面的tab选项卡里的报错 和容器里面的值  参考这些数据 来判断可能是哪里出错了  常见错误如下
1.       可能是业务对象或者是工作流容器里的某个相关的element没有选中传入传出
2.       可能是某个任务没找到代理人处理
3.       可能是下一步骤 跟当前步骤是同一个代理人 这种的在任务里设置一下 来查看到底有没有执行那一步
4.       可能是任务的 没设置成一般任务
5.       如果是出错 那么会在工作台的 或者是swia中查看工作流日志中看到错误原因 比如代理人错误 业务对象没有相关方法 之类的错误都是在这里查到
6.       实在没招了就去swo1看容器的值 到底有什么猫腻 看看包没报错 有时候bapi会报错 他妹的 还是照走不误 我了个去..
7.       还不行 就去debug业务对象里面的代码 包括从容器里读值 写值 有木有错
8.       每个错误必须检查的几步是 任务是否设置一般任务了 是否绑定了 是否exportimport
6当用bus2009触发工作流 某一个步骤用的zbus2009里的一个自建的方法 会导致什么错误  解决办法是通过swo1 设置映射
这样就不会报错了
7 关于绑定的这两个按钮
第一个是自动绑定的  会覆盖掉
第二个是手动绑定的  绑定的规则好像是同名的绑定  如果一个工作流混乱了 会导致同名的绑定  工作流本身不自带有清理功能 清理的很不彻底 以前删掉的东西 还会在某个地方存在 非常垃圾 不知道有没有办法解决
关于手动绑定的实例 说个需求 一个采购申请要两级审批 而标准的bapi 不会返给你采购申请审批后的状态 所以需要我们自己在继承的业务对象里面定义一个新方法 bapi调用完了以后 采购申请的审批状态获取出来 放在变量里 Status  通过工作流容器和步骤容器的绑定 来完成值的传送 把状态放在工作流容器的全局element status里面 方便下一个步骤调用
再比如 我把前一步骤zbus2009里面的采购申请的抬头号和行项目号 传给创建采购订单的bapi里面 蛋不能直接放在内表里面 那么我就这俩跟自定义方法里的两个参数绑定(用不着在工作流容器建立全局变量来存放 直接传进方法里的参数就行了)
8. 如何工作流debug程序 看看值到底有没有传进来 bapi调用出了些什么错  这种的就在业务对象里面找到要走的那个方法 然后设置断点   
有时候他进不来断点 怎么办
1.       你是不是断点打在了别的方法里了
2.       Swo1亲自进去设置个断点试试
3.       是不是你没有在swo1 为继承的业务对象 设置系统范围 识别不了方法
4.       你业务对象里面新建的方法有没有执行 有没有释放
5.       每个错误都要检查的 export import   是否设置成了一般任务 是否绑定了
6.       自定义的方法不执行的话 看看他是否报错(找不到这个方法) 如果没报错在父业务对象的同方法名里设置个断点 看看是否走标准的方法 如果走标准的 应该是因为没设置系统范围  
9. 排查错误的tcode swi1  swpr swel  swe2 swe3
10. 是继承业务对象 还是复制业务对象  我感觉还是继承算了  复制的话还得挨个执行释放  直接继承来 如果标准的有个created不能满足需求 我们可以重新弄个created1 之类的 把参数弄过来就好了  然后swo1 设置系统范围 必要的话
11. 如果debug业务对象方法里的代码的时候 发现关键字段没传值过来怎么办  
绑定没(尤其是变动业务对象或者方法之类的 都要重新绑定的) 输入输出没 代码里有没有从容器里面获取值 还不行的话 就往前找 是否触发有问题 或者值从一开始压根没传过来等等 随机应变
swc_get_element container swc_get_table container不一样的 还不行就往前一步找




上一篇:为什么FBL3N里查询不到明细
下一篇:SAP里常用会计分录
本楼点评(0) 收起
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|联系我们|赛跑网 ( QQ:108519493QQfsq

GMT+8, 2024-4-29 20:22 , Processed in 0.269779 second(s), 29 queries .

Powered by 91SAP X3.4

© 2001-2023 91sap Team.

快速回复 返回顶部 返回列表