Добавить отображение или изменить метод через расширение в Dynamics 365
Опубликовано: 16 февраля 2025 г. в 11:56:03 UTC
В этой статье я объясняю, как использовать расширение класса для добавления метода отображения в таблицу и форму в Dynamics 365 for Operations, включая примеры кода X++.
Add Display or Edit Method via Extension in Dynamics 365
Хотя планирование использования методов отображения или редактирования в Dynamics обычно заставляет вас задуматься о том, можно ли разработать свое решение по-другому, иногда это оказывается лучшим решением.
В предыдущих версиях Dynamics и Axapta было очень легко создавать методы отображения или редактирования для таблиц и форм, но когда мне недавно пришлось создать свой первый метод редактирования в Dynamics 365, я обнаружил, что процедура для этого несколько отличается.
Очевидно, есть несколько допустимых подходов, но я считаю лучшим (и с точки зрения интуитивности, и с точки зрения привлекательности кода) использование расширения класса. Да, вы можете использовать расширения класса для добавления методов к другим типам элементов, кроме классов — в данном случае к таблице, но это работает и для форм.
Сначала создайте новый класс. Вы можете назвать его как угодно, но по какой-то причине он должен иметь суффикс "_Extension". Допустим, вам нужно добавить метод отображения в CustTable, вы можете назвать его, например, MyCustTable_Extension.
Класс должен быть дополнен ExtensionOf, чтобы система знала, что именно вы расширяете, например:
public final class MyCustTable_Extension
{
}
Теперь вы можете просто реализовать свой метод отображения в этом классе, как вы бы сделали это непосредственно в таблице в более ранних версиях Dynamics — «this» даже ссылается на таблицу, поэтому вы можете получить доступ к полям и другим методам.
Например, класс с простым (и совершенно бесполезным) методом отображения, который просто возвращает номер счета клиента, может выглядеть так:
public final class MyCustTable_Extension
{
public display CustAccount displayAccountNum()
{
;
return this.AccountNum;
}
}
Теперь, чтобы добавить метод отображения в форму (или расширение формы, если вы не можете редактировать форму напрямую), вам нужно вручную добавить поле в форму и убедиться, что используется правильный тип (в данном примере — строка).
Затем в элементе управления вы должны установить DataSource на CustTable (или как там называется ваш источник данных CustTable), а DataMethod на MyCustTable_Extension.displayAccountNum (обязательно укажите имя класса, иначе компилятор не сможет найти метод).
И все готово :-)
Обновление: больше не требуется включать имя класса расширения при добавлении метода отображения в форму, но на момент первоначальной публикации это было необходимо. Я оставляю информацию здесь на случай, если некоторые читатели все еще используют старые версии.