AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 16.06.2017, 09:25   #1  
alicedr is offline
alicedr
Участник
 
175 / 43 (2) +++
Регистрация: 06.07.2012
Адрес: Канада
добавить readonly датасорс на форму, для фильтрования
Задача крайне простая.
Скажем, в грид с полями из SalesLine добавить поля из кастомного view, созданного из Inventtable и других таблиц. Поля должны быть фильтровабельными. При добавлении/удалении поля не должны добавляться/удаляться.
Делается это в AX7 в form.extension, так что для использования доступны только events.
Я добавляю датасорс в дизайнере, а связь на уровне инита главной таблицы:
X++:
[FormDataSourceEventHandler(formDataSourceStr(SalesTable, SalesLine), FormDataSourceEventType::Initialized)]
    public static void SalesLine_OnInitialized(FormDataSource sender, FormDataSourceEventArgs e)
    {
        FormDataSource lines_ds = sender;

        QueryBuildDataSource qbdsLines = lines_ds.query().dataSourceName('SalesLine');
        //qbdsLines.clearLinks();

        QueryBuildDataSource  qbdsProduct = qbdsLines.addDatasource(tableNum(AttributesView), "AttributesView_code");

        QbdsProduct.addLink(fieldNum(SalesLine, itemId),fieldNum(AttributesView, itemId));
        QbdsProduct.joinMode(JoinMode::InnerJoin);
    }
Далее в самом вью я перекрываю метод write и validatewrite:
X++:
 //VIEW
public class AttributesView extends common
{
    public void write()
    {
        //super();
    }

    public boolean validateWrite()
    {
        boolean ret = true;
    
        //ret = super();
    
        return ret;
    }
Перекрыть write прям на датасорсе формы не могу, потому что это экстеншен. Именно поэтому используется вью, а не таблица.

Но при попытке добавить из формы запись в грид, получаю сообщения
X++:
 Field 'Product' must be filled in.   
 Field 'Item number' must be filled in.
Была попытка в порядке бреда дать ему значения для validate, не помогло:
X++:
[FormDataFieldEventHandler(formDataFieldStr(SalesTable, SalesLine, ItemId), FormDataFieldEventType::Modified)]
    public static void ItemId_OnModified(FormDataObject sender, FormDataFieldEventArgs e)
    {
        FormDataSource      fds = sender.datasource();
        FormRun             formRun = fds.formRun();
        SalesLine           salesLine = FormRun.dataSource(formdatasourcestr(Salestable, SalesLine)).cursor() as salesLine;
        AttributesView      view = FormRun.dataSource(formdatasourcestr(Salestable, AttributesView)).cursor() as AttributesView;
        view.ItemId = SalesLine.ItemId;
        view.Product = 1;
    }


В общем, задача исключительно простая, но сделать ее на экстеншене формы вообще не получается.
Проблема сейчас, в общем-то, в сообщениях о том, что поля вьюхи, которые мандатори в таблицах, из которых она состоит, пустые при добавлении новой записи в родительский датасорс.
За это сообщение автора поблагодарили: mazzy (2), Ace of Database (2).
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как добавить назначение платежа в печатную форму velk DAX: Программирование 4 03.10.2016 10:37
mfp: X++ in AX7: Readonly keyword Blog bot DAX Blogs 3 15.12.2015 18:22
Добавить датасорс Eldar9x DAX: Программирование 1 01.10.2007 16:21
Добавить на форму всплывающее меню (PopupMenu) Zman DAX: Программирование 2 03.03.2005 12:21
как добавить в форму Memega DAX: Программирование 5 11.10.2003 00:50
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 07:59.