我要在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表达式内强制转换字段。
致谢,
乌玛尔·阿卜杜拉
答案 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