#abap #cds
#abap #cds
Вопрос:
Я новичок в CDS, и я пытаюсь сделать свой первый просмотр.
Дело в том, что когда я пытаюсь выполнить следующий код, я получаю сообщение об ошибке:
Ассоциация _Purchase_Order: BPOSB и EBELP не имеют совместимого типа.
Возможно ли выполнить приведение к любому полю ассоциации, чтобы заставить его работать?
Заранее спасибо
@AbapCatalog.sqlViewName: 'YMM_VFRET'
@AbapCatalog.compiler.compareFilter: true
@AbapCatalog.preserveKey: true
@AccessControl.authorizationCheck: #CHECK
@EndUserText.label: 'Merchandise distribution view'
define view YMM_FRET
as select from fret as Collective_Purchase
association [1..*] to ekpo as _Stock_Transfer_Order
on $projection.blnra = _Stock_Transfer_Order.ebeln and $projection.bposa = _Stock_Transfer_Order.ebelp
association [1] to ekpo as _Purchase_Order
on $projection.blnrb = _Purchase_Order.ebeln and $projection.bposb = _Purchase_Order.ebelp
{
key Collective_Purchase.blnrb,
key Collective_Purchase.bposb,
key Collective_Purchase.blnra,
key Collective_Purchase.bposa,
_Stock_Transfer_Order,
_Purchase_Order
}
Комментарии:
1. вы можете добавить один слой представления CDS поверх выделенной таблицы базы данных, преобразовать numc в char6, чтобы иметь вычисляемый столбец, связать представление с вычисляемым столбцом
Ответ №1:
Проблема заключается в:
BPOSB
в FRET
таблице имеет тип NUMC(6)
EBELP
в EKPO
таблице имеет тип NUMC(5)
В соответствии с матрицей сравнения типов у вас должно быть точное соответствие между длиной типа RHS и LHS.
В соответствии с правилами для условий в ON
пункте ассоциации:
Невозможно указать выражения пути или другие выражения или вызовы функций.
Поэтому вы не можете сделать ни CAST( num1 AS NUMC( N ) )
, ни SUBSTRING
. Ни для RHS, ни для LHS-операнда.
Я не вижу здесь никакого решения, кроме как перестроить ваше представление другим способом.
Ответ №2:
Я, наконец, сделал это.
Я сделал два просмотра CDS.
В первом были все поля FRET, но использовались RIGHT и CAST для преобразования BPOSB и BPOSA в тип NUMC.
DEFINE VIEW YMM_FRET_0 AS SELECT FROM FRET {
KEY MANDT,
KEY BTYPB,
KEY BLNRB,
KEY CAST( RIGHT( BPOSB, 5 ) AS ABAP.NUMC( 5 ) ) AS BPOSB, // <--
KEY BTYPA,
KEY BLNRA,
KEY CAST( RIGHT( BPOSA, 5 ) AS ABAP.NUMC( 5 ) ) AS BPOSA, // <--
...
Второй использовал первое представление, и это решило проблему.