BPOSB и EBELP не имеют совместимых типов в ассоциации CDS

#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, // <--
... 
 

Второй использовал первое представление, и это решило проблему.