案例表达式中的ABAP CDS View Cast引发错误

时间:2018-10-30 11:43:07

标签: sap abap

我要在CDS视图中创建一个新字段,并具有以下CASE条件

if request.method == 'POST': # and request.FILES['image']:
   image_data = request.POST.get('image')
   format, imgstr = image_data.split(';base64,')
   ext = format.split('/')[-1]
   data = ContentFile(base64.b64decode(imgstr))
   myfile = "profile-"+time.strftime("%Y%m%d-%H%M%S")+"." + ext
   fs = FileSystemStorage()
   filename = fs.save(myfile, data)

问题在于NUMC10字段的类型为“使用情况”,因此eclipse引发错误:“数据类型冲突”。因此,我想将字段强制转换为abap.int4,但这无法正常工作,因为不支持CAST表达式:

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

请专家告诉我如何解决此问题,为什么我不能在CASE表达式内强制转换字段。

致谢,
乌玛尔·阿卜杜拉

2 个答案:

答案 0 :(得分:0)

在下面构建第二个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是保留字。编译器将拒绝为这样的列命名。

答案 1 :(得分:0)

您也可以直接比较NUMC值。帮助文章“ ABAP CDS-cond_expr,可比较类型”说,如果字段和文字的长度完全相同,则可以使用关系运算符>,<等将NUMC与其他NUMC文字进行比较。

这意味着您需要将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