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-корпорации. Когда он не ведет блог, то тратит свое свободное время на огромное количество интересов, хобби и занятий, что в некоторой степени отражается в разнообразии тем, освещаемых на этом сайте.