项目快结束的时候,在把所有开发的内容传送到QA的时候,我测了一遍,发现一个先离开的同事所做的ETL部分有问题。
她在NETWEAVER2004S里,从PSA到INFO CUBE的TRANSFORMATION过程里,采用了一个ENDROUTINE来确定一个INFO OBJECT “ANSWER TYPE"的内容。
在TRANSFORMATION里,有START ROUTINE, 然后是SOURCE INFO OBJECT到TARGET INFO OBJECT的对应关系(可以是直接相等,也可以是各种计算),最后是END ROUTINE。
既然她写了END ROUTINE,于是就不维护对应关系了,对应关系就空着了。
结果在载入数据的时候,这个END ROUTINE是工作的,ANSWER TYPE的内容被填充了。可是在激活这个数据的时候,ANSWER TYPE却丢失了,成了空白。这是个客户定制的内容,不是标准的BUSINESS CONTENT。怎么解决这个问题?
我查SDN,里面有人有相同问题,但是没有解答。激活是一个按键,不用按键,可以手动运行一个程序,在SE38里,RSODSACT1激活,这个程序名字是在按键的时候显示在底线的TASK BAR上的。以这个字做关键字搜索OSS,凭经验排除一下,很快可以确定OSS 974833是可能的原因。这里关键是经验可以迅速地节省时间,确定可能的原因。
OSS 974833的意思是说,这是个系统的程序错误。系统的设计错误在于,一旦看TRANSFORMATION的对应上如果是空缺的话,那么在激活数据的过程中就初始化了这个INFO OBJECT,也就是抹去了一切内容。 这对不对?
当然不对了,因为在过程上,对应关系之后还有一个ENDROUTINE可以起作用。如果象我们设计的这样,对应关系是空白,然后在END ROUTINE里操作,完全是合理的。然而却因为这个系统设计而造成数据被丢失了。
怎么解决?这是SP7的问题,在SP10里解决了,如果不升级补丁到SP10,怎么解决?
因为对应里的关系不管怎么填,都会被ENDROUTINE覆盖掉,所有可以设置一个DUMMY 对应,避开这个系统设计的判断,不会初始化数据内容,然后ENDROUTINE会覆盖这个DUMMY 对应输入的数据。这样就可以了。
因为END ROUTINE里是有条件地对某些数据操作,而DUMMY 对应是无条件的。所以END ROUTINE里还要改一下,把不符合条件不操作的改成不符合条件的以空格覆盖DUMMY 对应带来的数据。这样就完整了。
这个例子说明,
如何以恰当的关键字在SDN进行搜索
如何判断适用或者可能适用的OSS NOTE
如何在SNOTE里执行NOTE(ADVANCE CORRECTION),或者升级补丁,或者采取办法避免升级而绕开这个错误
George,其实感觉你在第一步就已经有想法,key point是调这个END ROUTINE的逻辑. SDN&OSS是分析问题的方向和印证,另外寻找SAP的标准solution的过程.
或者也能通过辛苦的debug把整个逻辑分析清楚,但太辛苦了,也常常会遗漏逻辑.
顾问水平就是走这个过程的时间长短罢,就像那个修电机故事里consultant用粉笔划的一根线,知道在哪划,哪些notes是相关的,那就是顾问的判断力和经验了.
我觉得最关键的地方是你找到了RSODSACT1这个程序,像我习惯是在task bar显示tcode的,可能我就这样错过了...
一个很典型的BW debug过程,深有同感
顺便问一句,为什么不升到SP10呢?呵呵
请问斑竹,我想在兵器发帖子,这个页面http://paowang.com/weapon/post.html
一片空白.
换台电脑就一切正常.
难道是这个ip地址不受欢迎么?
偶然google到。很有意思的文字。
Posted by: HystericBlue at January 27, 2008 01:52 PM楼主似乎好长时间没来更新了...
Posted by: frank at May 27, 2008 10:56 AM