项目快结束的时候,在把所有开发的内容传送到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),或者升级补丁,或者采取办法避免升级而绕开这个错误