Показать сообщение отдельно
Старый 07.11.2018, 15:54   #1  
malex is offline
malex
Участник
 
164 / 19 (1) ++
Регистрация: 10.08.2004
Адрес: Тверь, Москва
? D365FO: Inheritance + Extensions + RealTime
Есть 8.0 PU15. Переношу overlaid-решение на extensions.

В классе InventMovement был кастом-метод, который был перекрыт в наследниках (InventMov_Purch)
Я создал extensions к этим методам и ожидаю, что в real-time вызовется нужный extension:
X++:
[ExtensionOf(classStr(InventMovement))]
final class InventMovementAQM_Extension
{
    boolean AQMmustUpdateBatchInfo()
    {
        return false;
    }
}

[ExtensionOf(classStr(InventMov_Purch))]
final class InventMov_PurchAQM_Extension
{
    boolean AQMmustUpdateBatchInfo()
    {
        return true;
    }

}
Вызов (COC):
X++:
[ExtensionOf(tableStr(InventBatch))]
final class InventBatchAQM_Extension
{
    public void initFromInventMovement(InventMovement _inventMovement, InventTrans _inventTrans)
    {
        next initFromInventMovement(_inventMovement, _inventTrans);

        if (_inventMovement.AQMmustUpdateBatchInfo())
        {
            // blablabla
        }
    }
В realtime передаю в _inventMovement InventMov_Purch и ожидаю, что вызовется AQMmustUpdateBatchInfo() у экстеншена InventMov_PurchAQM_Extension. Однако вызов происходит у InventMovementAQM_Extension (параметр объявлен как InventMovement)

Если сделать явное преобразование
X++:
InventMov_Purch invMov;
        invMov = _inventMovement;
        if (invMov.AQMmustUpdateBatchInfo())
        {
        }
То будет вызов как я ожидаю.

Как Вы считаете - это баг? В 8.1\8.1.1\8.1.2 система ведет себя также?