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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.10.2002, 10:27   #1  
Peter Savintsev is offline
Peter Savintsev
Участник
 
246 / 119 (4) +++++
Регистрация: 14.12.2001
? Еще раз о связаных датасорсах
Проблема сия обсуждалась уже несколько раз, однако человеческого решения я найти так и не сумел .

Итак, обычная ситуация: В родительской таблмце есть ссылка на номенклатуру (клиента, поставщика и т.д.), хочется на форме родительской таблицы показать еще и название. использовать display-метод не хочется по понятным причинам. Делаю так: добавляю второй датасорс на форму, связываю его с родительским outerjoin'ом, помещаю поля на грид, все, вроде работает нормально. Однаок это обманчивое ощущение исчезает, когда пытаешься добавить запись. Система начинает ругаться, что не сзаполнено поле Номенклатура (клиент, поставщик и т.д.), то есть поле связи в дочерней таблице. Очевидно, при вставке записи Аксапта автоматически вставляет ее в ОБЕ связанные таблицы. Отсюда и проблемы.

Пожалуйста, если кто знает, как это исправить, помогите!
Старый 14.10.2002, 12:04   #2  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Например, можно в метод modified() на поле с кодом (ItemId или др.) добавить после super() какой-дь MyTable_ds.write()
PHP код:
public void modified()
{
    
MyTable  curRec;
;
    
super();

    
MyTable_ds.write();
    
// остальное для отрисовки названия и сохранения позиции в гриде
    
curRec MyTable.data();
    
MyTable_ds.research();
    
MyTable_ds.findRecord(curRec);

Старый 14.10.2002, 13:07   #3  
Peter Savintsev is offline
Peter Savintsev
Участник
 
246 / 119 (4) +++++
Регистрация: 14.12.2001
Работает, но не очень хорошо...
Спасибо, этот способо жейстивтельно работает, однако не очень красиво. При вставке новой записи Аксапта запихтвает ее перед текущей. После выполнения research и findRecord созданная запись перемещается в конец. Хотя это можно и пережить...

Однако этот способ не работает для следующего случая. Для каждой таблицы можно задать необходимость системных полей created... и modified... Значения данных полей генерятся системой автоматически. Меня интересует поле createdBy, хочу отслеживать, кто какие журналы создавал. Но на форме хочу, чтобы выводились не логины, а нормальные имена пользователей. Делаю это стандартным вышеописанным образом (правда, приходиться еще добавлять явный Relation на поле createdBy, но это уже детали). Однако, поскольку поле заполняется системой, метод modified не вызывается. Соответственно получаем ту же самую ситуацию .

Есть какие-нибудь мысли по этому поводу?
Старый 14.10.2002, 16:21   #4  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Re: Еще раз о связаных датасорсах
Цитата:
Изначально опубликовано Peter Savintsev
использовать display-метод не хочется по понятным причинам.
Можно поподробнее о причинах?
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
Старый 15.10.2002, 04:24   #5  
Peter Savintsev is offline
Peter Savintsev
Участник
 
246 / 119 (4) +++++
Регистрация: 14.12.2001
Причины...
Невозможность поиска и фильтрации.
Старый 15.10.2002, 10:23   #6  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
Так бы сразу и сказал
Ну тогда другой вариант.
В UserInfo_DS перекрыть методы
PHP код:
public boolean validateWrite()
{
    
boolean ret;

    
ret true;

    Return 
ret;
}

public 
void write()
{
//    super();

За это сообщение автора поблагодарили: Proba (1), samolalex (1).
Старый 15.10.2002, 10:34   #7  
Peter Savintsev is offline
Peter Savintsev
Участник
 
246 / 119 (4) +++++
Регистрация: 14.12.2001
О! То, что надо!
А вот этот способ работает как надо. Только еще пришлось в родительском датасорсе переписать метод write (так, как это показывал Wamr), чтобы нужное поле автоматически обновлялось. Вот если бы еще все это не скакало от вызова research...
Старый 15.10.2002, 11:42   #8  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
вместо reseach()-findRecord() и т.п. можно использовать подобное решение..
PHP код:
public void write()
{;
    
super();

    if(! 
InventTable.RecId)
        
InventTable.ItemName InventTable::find(PRK_Inv_Invent.ItemId).ItemName;

За это сообщение автора поблагодарили: Hans (1).
Старый 15.10.2002, 11:50   #9  
Peter Savintsev is offline
Peter Savintsev
Участник
 
246 / 119 (4) +++++
Регистрация: 14.12.2001
Класс!
Все! Теперь работает замечательно. Большое всем спасибо.
 

Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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