|
13.09.2021, 18:55 | #1 |
Участник
|
D365. select в extension
Вот есть у нас класс написанный Майкрософт с примерно таким кодом:
TmpSalesPurchReportLine_RU dynamicData; select forupdate dynamicData order by LineAmount asc where dynamicData.InternalId == header.InternalId; Если я создаю экстеншен этого класса и пишу аналогичный селект, то получаю ошибку 'dynamicData not declared'. При этом с текущим значением могу делать практически что угодно. Это такая защита от возможности передвинуть курсор? Или я не знаю про какую-то настройку на таблицах? |
|
13.09.2021, 20:01 | #2 |
Участник
|
Не могли бы вы привести полный код вашего метода?
|
|
13.09.2021, 20:29 | #3 |
Участник
|
dynamicData-то где задан - глобально в classDeclaration или?
|
|
14.09.2021, 08:49 | #4 |
Участник
|
Мой код:
X++: [ExtensionOf(classstr(SalesPurchReport_RU))] final class SalesPurchReport_RU_Extension { protected void adjustDynamicData() { next adjustDynamicData(); select firstonly forupdate dynamicData order by Qty desc where dynamicData.InternalId == header.InternalId; } } TmpSalesPurchReportLine_RU dynamicData; - определено как глобальная переменная в классе SalesPurchReport_RU. |
|
14.09.2021, 09:11 | #5 |
Участник
|
|
|
14.09.2021, 09:13 | #6 |
Участник
|
Могу оттуда читать данные. Могу туда писать данные.
|
|
14.09.2021, 09:48 | #7 |
Участник
|
Кажется нашёл https://docs.microsoft.com/en-us/dyn...ension-classes То что вы видите в своём расширении - это не переменная из ClassDeclaration. Это обёртка над переменной. По сути свойство, метод который её возвращает. Имя метода не везде можно использовать вместо имени переменной. Последний раз редактировалось S.Kuskov; 14.09.2021 в 09:56. |
|
|
За это сообщение автора поблагодарили: trud (2), sukhanchik (3), ortin (1), Pandasama (2). |
14.09.2021, 09:29 | #8 |
северный Будда
|
а в чём глубинный смысл повторного селекта?
если вам нужно выбрать другую запись для каких-то своих целей, то я бы завёл новую переменную для этого
__________________
С уважением, Вячеслав |
|
14.09.2021, 09:38 | #9 |
Участник
|
Повторный селект, естественно, планируется для апдейта. Так как таблица временная, заводить вторую переменную не очень интересно. Да, через setTmp всё работает.
Но вопрос скорее в том, почему оно ругается. Если это запрет от Майкрософта, то хочется понимать почему. А, возможно, это просто проблемы на мой машине. P.S. Я, конечно, тему создал слишком рано. Пока не проверил на других классах и не сделал магический полный ребилд. |
|
15.09.2021, 10:07 | #10 |
Участник
|
Интересно стало. Можно ли как-то решить эту задачу.
Через обёртку великодушно предоставленную нам в Platform update 9 можно вызвать у курсора метод data и тем самым передать в него значения нужной записи. X++: [ExtensionOf(classstr(SalesPurchReport_RU))] final class SalesPurchReport_RU_Extension { protected void adjustDynamicData() { TmpSalesPurchReportLine_RU localDynamicData; ; next adjustDynamicData(); localDynamicData.setTmpData(DynamicData); select firstonly forupdate localDynamicData order by Qty desc where localDynamicData.InternalId == header.InternalId; DynamicData.data(localDynamicData); } } |
|
|
|