ABAP CDS View Cast в случае выражения выдает ошибку - PullRequest
0 голосов
/ 30 октября 2018

Я хочу создать новое поле в моем CDS-View с условием CASE, как показано ниже

case  
  when usage  = 0 then '1'
  when usage < '10' or usage_6m > '0' then '2'
  when usage < '250' or usage_6m > '10' then '3'
  else '0'
end as usage

Проблема в том, что тип поля «использование» - NUMC10, поэтому eclipse выдает ошибку: «конфликт типов данных». Тогда я хотел привести поле к abap.int4, но это не сработало, потому что выражение CAST не поддерживается:

case 
        when cast( usage  as abap.int4 )  = 0 then '1'
...

Эксперты, пожалуйста, посоветуйте, как я могу решить эту проблему, почему я не могу привести поле внутри CASE-выражения.

С уважением,
Умар Абдулла

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Вы также можете напрямую сравнить значения NUMC. В справочной статье «ABAP CDS - cond_expr, Comparable Types» говорится, что NUMC можно сравнивать с другими литералами NUMC с операторами отношения>, <и т. Д., Если поле и литерал имеют одинаковую длину. </p>

Это означает, что вам нужно изменить это значение для вашего NUMC (10) на:

case  
  when usage = '0000000000' then '1'
  when usage < '0000000010' or usage_6m > '0' then '2'
  when usage < '0000000250' or usage_6m > '10' then '3'
  else '0'
end as usage
0 голосов
/ 30 октября 2018

Создайте второй вид CDS под:

define view <lower_view> as select from <table> {
    cast( usage as abap.int4 ) as usage;
    cast( usage_6m as abap.int4 ) as usage_6m;
}

define view <upper_view> as select from <lower_view> {
    case 
        when usage = 0 then '1'
        when usage < 10 or usage_6m > 0 then '2'
        when usage < 250 or usage_6m > 10 then '3'
        else '0'
    end as usage 
}

usage - зарезервированное слово. Компилятор отклонит присвоение имени такому столбцу.

...