这里只讲RSBBS的goto query,不讲query里面的替换路径。
报表接口就是从一个query跳转到另一个目的地。从下面能看到,可以跳转到一个BW系统下的query,或者能跳转到ERP系统的一个ABAP report也行,或者可以通过archive link去从query里的行项目直接跳转到ERP系统的行项目的详细页。
但是它的系统逻辑是什么呢。
要从一个query去调用另一个query,那么首先要在RSBBS里定义发送方和接收方。
在Goto的时候,你选中的发送方query的单元格对应的选择条件会被用来填入接收方的过滤条件中。
RRI的过程
当开始Goto的时候,Report Report Interface首先收集你选中的这个query的单元格所在的行和列的global filter的信息,它是有哪些限制,是哪个会计年度,哪个公司代码,哪个销售组织等等(query的filter)。
然后还会收集dynamic filter的信息,它现在是有哪些下钻的维度,是在层级下钻的哪一层。
还有如果是个RKF,CKF那么里面还有哪些限制。
做完这些后,如果接收方query也有对应的filter变量,那么系统就会填充这些变量,如果没有,那就会自动把这些传到接收方去当做dynamic filter。
除此之外,还有几个比较智能的地方:
1. 如果接收方有变量,系统会尝试填充filter变量,如果没有合适的变量,那这些值就会被当成dynamic filter。(有一点就是层级的变量不会传输,会被当做query的属性而不是filter)
2.如果发送方和接收方存在特定关系,系统会尝试使用这层关系:
比如:有组件的特性,那么对组件的限制会同样的用到接收方的组件父级。
时间限制如果是隐性传输的,就会只把上级时间特性限制传到从属时间特性。
参照特性会映射到主特性。
属性限制会映射到主特性。
导航属性限制也会映射到承载它的主数据的特性。特性限制会应用于导航属性。(发送方有城市这个下钻,接收方有对应的城市的导航属性邮编,那么对城市的限制会直接应用到它的导航属性邮编上,接收方会直接接收到这个城市的邮编)。
如果是要跳到其他系统,那么映射的规则是创建在目标系统里的,必须保证所有发送方的隐性映射规则的所有信息对象都得在目标系统中存在,否则跳转不起来。
具体操作
RSBBS进来:选一个query作为发送方,或者如果一个infoprovider的所有query都要跳,那就选infoprovider的所有query。
创建:
在report里写要跳转的query
在assignment details里面可以选具体的映射。不选的话是系统自动dynamic映射,也就是generic的类型。系统会自动帮你映射你现在的发送方的过滤值。
这里也就是发送方的各个信息对象,是怎么发送值出去的。
类型如果选了变量,那么字段里就可以填你想填值的变量字段,后面的数据元素会自动带出来。也就意味着,你是把过滤器里的值直接发送给接收方去了。
如果选了delete,就是说不用管这些字段值,不把他们的值传递到你的目标接收方query。
对于变量类型,slection type不用管,默认星号就是不管是什么类型都行。当然你想选也行,按照你自己的变量类型来选。但是不选完全不影响的。右边还有个打钩的required entry,不截图了。意思就是,打钩的话,你必须保证这个变量有值。强制有值。如果不大勾就是可选的,可以有值,也可以没有值。
如果你打钩了,但是这个变量没给值,或者没取到值,那系统拒绝跳转到接收方。
variable 和 generic的区别在于,如果选了变量,那么其实变量值会传递到下一个query的参数filter里。
如果选了generic,那其实是传递的query里面的值到dynamic filter,也就是会自动到目标query从下钻那里去过滤。
简言之,也就是说variable选项会从一个参数框那里直接过滤到你的目标query.
而generic是在目标query先把所有数据都拿出来,然后再像下钻一样的去过滤值。这种就是会花时间长一点。
除了这两个,还有一个infoobject类的。这个跟generic的执行逻辑是一样的,但是不同的在于,你要指定目标接收query的信息对象。适用的场景就是,如果在发送方query里有一个成本中心,但是接收query那边有个主成本中心,虽然信息对象不一样,但是值一样,就可以用这个infoobject。
还有个table field和url,分别是针对ERP的和网页的。也比较有意思,对于这个table field,是要把query的行直接链接到ERP的界面,涉及到安全连接。有空再写了。
举个例子
发送方query和接收方query有不同的层级特性,接收方query用的层级特性还有组件。两个query基于不同的provider,想要的是从成本要素跳转到对应的科目。
那么发送query是基于特性成本要素0COSTELMNT,接收query是基于特性科目编号0ACCOUNT。虽然名字不同,但是实际他俩意思一样的,key的值都是一样的,能互相印证的。同样的,0ACCOUNT和总账科目0GL_ACCOUNT也可以互相关联印证的。也就是说可以有一样的值。
那么这个接收query的0ACCOUNT层级有个科目表的组件chart of accounts。想要成功跳转,还得把这个科目表给填上,怎么办呢?
如果直接跳转,那跳转不过来的,因为还有个组件对象没值。所以得建一个变量,在接收query里建一个变量在0ACCOUNT上。
在assignment details里面把这个变量对应到发送query的0COSTELEMNT这个特性里。