Есть 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 система ведет себя также?