Почему в Microsoft Dynamics, 365 я не могу встроить экземпляр FormDataSource?
У меня есть следующий метод, который компилируется:
private void onModifiedFilter(FormControl sender)
{
FormDataSource mainAccount_ds = sender.formRun()
.dataSource(formDataSourceStr(MainAccount, MainAccount));
mainAccount_ds.executeQuery();
}
Поскольку у меня нет другого применения, я хотел бы встроить значение и упростить код, чтобы:
private void onModifiedFilter(FormControl sender)
{
sender.formRun()
.dataSource(formDataSourceStr(MainAccount, MainAccount))
.executeQuery();
}
Однако это не может быть скомпилировано с:
Код серьезности Описание Состояние подавления строки файла проекта Ошибка ClassDoesNotContainMethod: класс «FormObjectSet» не содержит определения для метода «executeQuery», а метод расширения «executeQuery», принимающий первый аргумент типа «FormObjectSet», не найден в любом классе расширения. Packt_MainAccountExtension (ISV) [ExpenseManagement] C:\AOSService\PackagesLocalDirectory\Bin\XppSource\ExpenseManagement\AxClass_Packt_MainAccountForm_Extension.xpp 18
- Как / почему происходит захват
mainAccount_ds
изменить возможность компиляции этого метода? - Есть ли другие способы выразить это без ненужного сбора данных?
- Когда еще в D365 мне следует ожидать некоторого волшебства, когда мне нужно будет захватить значение, чтобы использовать его, вместо того, чтобы напрямую вызывать метод для не захваченного возвращаемого значения?
1 ответ
Чтобы ответить на ваш главный вопрос: потому что компилятор не может определить правильный тип понижающего преобразования из возвращаемого значения метода.
Чтобы ответить на ваши дополнительные вопросы:
- "Как / почему захват mainAccount_ds изменяет возможность компиляции этого метода?"
Добавление
mainAccount_ds
переменная сообщает компилятору, какой тип возвращаемого значения метода ожидается во время выполнения. Обратите внимание, что
executeQuery
метод определен только в
FormDataSource
класс, но не в
FormObjectSet
родительский класс, который является типом возвращаемого значения
dataSource
метод.
- «Есть ли другие способы выразить это без ненужного сбора данных?»
Я так не думаю. Пока есть
as
для явных понижающих преобразований, я не нашел способа использовать его в выражении вызова связанного метода.
- «Когда еще в D365 мне следует ожидать некоторого волшебства, когда мне нужно будет захватить значение, чтобы использовать его, вместо того, чтобы напрямую вызывать метод для не захваченного возвращаемого значения?»
Я надеюсь, что другие ответы прояснили, что здесь не происходит никакого волшебства. Компилятор правильно предотвращает в этом случае неопределенное снижение.
Кроме того, вы можете прочитать о приведении типов в x++. Casting и ОператорыExpression - хорошее место для начала.