Miklix

Добавить отображение или изменить метод через расширение в 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, чтобы система знала, что именно вы расширяете, например:

[ExtensionOf(tableStr(CustTable))]
public final class MyCustTable_Extension
{
}

Теперь вы можете просто реализовать свой метод отображения в этом классе, как вы бы сделали это непосредственно в таблице в более ранних версиях Dynamics — «this» даже ссылается на таблицу, поэтому вы можете получить доступ к полям и другим методам.

Например, класс с простым (и совершенно бесполезным) методом отображения, который просто возвращает номер счета клиента, может выглядеть так:

[ExtensionOf(tableStr(CustTable))]
public final class MyCustTable_Extension
{
    public display CustAccount displayAccountNum()
    {
        ;

        return this.AccountNum;
    }
}

Теперь, чтобы добавить метод отображения в форму (или расширение формы, если вы не можете редактировать форму напрямую), вам нужно вручную добавить поле в форму и убедиться, что используется правильный тип (в данном примере — строка).

Затем в элементе управления вы должны установить DataSource на CustTable (или как там называется ваш источник данных CustTable), а DataMethod на MyCustTable_Extension.displayAccountNum (обязательно укажите имя класса, иначе компилятор не сможет найти метод).

И все готово :-)

Обновление: больше не требуется включать имя класса расширения при добавлении метода отображения в форму, но на момент первоначальной публикации это было необходимо. Я оставляю информацию здесь на случай, если некоторые читатели все еще используют старые версии.

Поделиться на BlueskyПоделиться на FacebookПоделиться на LinkedInПоделиться на TumblrПоделиться на XПоделиться на LinkedInЗакрепить на Pinterest

Миккель Банг Кристенсен

Об авторе

Миккель Банг Кристенсен
Миккель - создатель и владелец сайта miklix.com. Он имеет более чем 20-летний опыт работы в качестве профессионального программиста/разработчика программного обеспечения и в настоящее время работает на полную ставку в крупной европейской IT-корпорации. Когда он не ведет блог, то тратит свое свободное время на огромное количество интересов, хобби и занятий, что в некоторой степени отражается в разнообразии тем, освещаемых на этом сайте.