abap cds视图与$ session.system_language

时间:2018-10-15 13:00:07

标签: sap abap cds

我试图在cds视图中联接3个表,但是在测试时出现此错误:

  

2018-10-15 14:43:20 843-查询执行失败   引发了异常

我找不到导致错误的原因的信息,希望您能为我提供帮助。

(缩短表并替换名称)

我的代码:

@AbapCatalog.sqlViewName: '*******'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #NOT_REQUIRED
@EndUserText.label: '************'
define view **********
    as select from table 1 as pos
    left outer join table2 as subcat
    on      pos.bukrs = subcat.bukrs and
            pos.depid = subcat.depid and
            pos.subca = subcat.subca
    left outer join table3 as ekg
    on      pos.ekgrp = ekg.eknam{

        key pos.xxx,
        key pos.yyy,
        key pos.zzz,
        pos....,
        .
        .
        .
        subcat.ddd,
        ekg.jjj,

    }
    where
        subcat.spras = $session.system_language

表格:

表1具有键xxxyyyzzz,并具有字段aaabbbccc和{{1 }}

表2具有键hhhaaabbbccc和字段spras

表3具有键ddd和字段hhh

table1的

所有字段都需要显示->左外部联接 jjjaaabbbccc一直没有填充

2条日食给我:

warings

更新1:

我尝试使用不带联接的hhh,就像大括号内带有$session.system_language的表的另一列一样,并且显示了相同的错误,如上所示,任何人都知道session变量是否是有问题吗?

更新2:

如果我将其保留,更新1的CD可以正常工作,那么会话变量就是问题...

1 个答案:

答案 0 :(得分:0)

我更喜欢显示代码块并将其实际放入其部分

@AbapCatalog.sqlViewName: 'ZTESTCDS'
@AbapCatalog.compiler.compareFilter: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Test CDS View'
define view ZTESTCDSVIEW
as 

select 
from vbrk as h
left outer join vbrp as i
    on h.vbeln = i.vbeln
left outer join tvfkt as d
    on h.fkart = d.fkart
{
  key h.vbeln,
  key i.posnr,
  h.fkart,
  d.vtext
}
where
    d.spras = $session.system_language;

但是您的CDS代码似乎没有语法错误

我认为视图KEY定义可能会导致问题。 实际上,复合KEY列可以与SELECT语句的JOIN重复

能否请您先尝试删除KEY定义?

您可能会添加更多列作为KEY,但最好确保原因是KEY