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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 22.03.2005, 10:40   #1  
Azat
Гость
 
n/a
SysRecordInfo
Подскажите пожалуйста как вызывается эта форма SysRecordInfo?
где указываются параметры вызова?
Старый 22.03.2005, 11:04   #2  
Azat
Гость
 
n/a
смысл вопроса вот в чем - например, если вызывать паспорт записи в InventTable и в InventSum - то они вызываются разные - а где задаются параметры вызова?
Старый 22.03.2005, 11:09   #3  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Ему нужна просто форма, из которой он вызывается.

С Уважением,
Георгий.
Старый 22.03.2005, 11:31   #4  
Azat
Гость
 
n/a
Уточню, в форму InventTable добавили дерево классификатора, что вызвало нарушение стандартной работы SysRecordInfo, в частности переименование номенклатуры стало недоступно(просто нет в форме). А как сделать, чтобы было возможно переименование?
Старый 22.03.2005, 11:42   #5  
George Nordic is offline
George Nordic
Модератор
Аватар для George Nordic
Злыдни
 
4,479 / 1250 (50) ++++++++
Регистрация: 17.12.2003
Адрес: Moscow
Записей в блоге: 9
Обрати внимание на код:
PHP код:
    callerForm          this.args().caller();
    
formObjectSet       callerForm.objectSet();
    
formDataSource      callerForm.dataSource();
    
formQueryRun        formDataSource.queryRun();
..........
        
common      formObjectSet.cursor();
        
dictTable   = new SysDictTable(common.tableId);
        
dictField   = new SysDictField(dictTable.id(), dictTable.primaryKeyField());
............
            
primaryKey.label(dictField.label());
            
primaryKey.text(strFmt('%1'common.(dictTable.primaryKeyField())));
            if (!
common.(dictTable.primaryKeyField()))
                
renameGrp.visible(false); 
А лучше - пройдись дебагером init SydRI и посмотри, что там происходит. Скорее всего, в новом ds нет ключевого поля.
Старый 03.07.2006, 13:47   #6  
vasiliy is offline
vasiliy
Программер
 
288 / 17 (1) ++
Регистрация: 21.10.2004
Адрес: E-burg
Цитата:
Сообщение от George Nordic
Обрати внимание на код:
PHP код:
callerForm this.args().caller();
formObjectSet callerForm.objectSet();
formDataSource callerForm.dataSource();
formQueryRun formDataSource.queryRun();
..........
common formObjectSet.cursor();
dictTable = new SysDictTable(common.tableId);
dictField = new SysDictField(dictTable.id(), dictTable.primaryKeyField());
............
primaryKey.label(dictField.label());
primaryKey.text(strFmt('%1'common.(dictTable.primaryKeyField())));
if (!
common.(dictTable.primaryKeyField()))
renameGrp.visible(false); 
А лучше - пройдись дебагером init SydRI и посмотри, что там происходит. Скорее всего, в новом ds нет ключевого поля.
Не подскажите как определяется common = formObjectSet.cursor();? Взять например закупки. Как определяется что информация будет выводиться по строке закупки, а не по самой закупке?
Старый 03.07.2006, 13:57   #7  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
X++:
switch (common.tableId)
{
    case tableNum(PurchTable):
        // таблица закупок
        break;
    case tableNum(PurchLine):
        // строки закупок
        break;
    default:    
        break;
}
__________________
Axapta v.3.0 sp5 kr2
Старый 03.07.2006, 14:11   #8  
vasiliy is offline
vasiliy
Программер
 
288 / 17 (1) ++
Регистрация: 21.10.2004
Адрес: E-burg
Наверное неправильно выразился.
Если открывать паспорт записи через контекстное меню, то оно правильно выводит информацию о записи, на которой у нас стоит курсор. Если сделать вызов паспорта записи через обычный пункт меню, то даже если у нас курсор будет стоять на строке закупки, информация выведется по самой закупке.
Старый 03.07.2006, 15:00   #9  
vasiliy is offline
vasiliy
Программер
 
288 / 17 (1) ++
Регистрация: 21.10.2004
Адрес: E-burg
Кажется дело в методе docCursor(). Если форма вызывается из контекстного меню, то этот метод возвращает нужную запись, а если форма вызывается по кнопке, тогда берется запись первого источника данных. Почему так?
Старый 03.07.2006, 15:06   #10  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Возможно на MenuItem не указано свойство dataSource?
Именно эта строка (которая указана), будет передана как вызывающая
Старый 03.07.2006, 15:08   #11  
vasiliy is offline
vasiliy
Программер
 
288 / 17 (1) ++
Регистрация: 21.10.2004
Адрес: E-burg
На MenuItem dataSource не указывается, потому как их может быть два, и надо чтобы запись бралась именно текущего.
Старый 03.07.2006, 15:09   #12  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
А "обычный пункт меню" - это МЕНЮ->КОМАНДА->ПАСПОРТ ЗАПИСИ? У меня в нем все работает нормально
__________________
Axapta v.3.0 sp5 kr2
Старый 03.07.2006, 15:09   #13  
itfs is offline
itfs
Участник
 
277 / 43 (2) +++
Регистрация: 18.07.2005
Адрес: Moscow
Почти у каждого элемента на форме есть свойство DataSource, а если оно пусто, то работает некое соглашение об умолчании ...

C уважением, itfs.
Старый 03.07.2006, 15:14   #14  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Ну а что вы тогда хотите, по умолчанию подставляется главный датасорс
Попробуйте по clicked MenuItem - закоментить супер и вызывать этот же MenuItem программно с указанием того датасорса который вам нужен в главный момент

И что значит из текущего - текущий есть и в том и в том гриде (active)
Старый 03.07.2006, 15:16   #15  
vasiliy is offline
vasiliy
Программер
 
288 / 17 (1) ++
Регистрация: 21.10.2004
Адрес: E-burg
Обычный пункт меню, это просто меню добавленное в форму. Или можно просто кнопку добавить.
Старый 03.07.2006, 15:18   #16  
vasiliy is offline
vasiliy
Программер
 
288 / 17 (1) ++
Регистрация: 21.10.2004
Адрес: E-burg
2 Kashperuk: текущий, грубо говоря куда мы последний раз мышью тыкнули
2 itfs: соглашение не нужно, нужно чтобы текущий

При этом надо обойтись без программирования в форме. Т.е. просто кнопку вызова добавить и все. На крайний случай можно на методах кнопки попрограммировать. Но чтобы эти методы были общими.

Последний раз редактировалось vasiliy; 03.07.2006 в 15:24.
Старый 03.07.2006, 15:26   #17  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Пока в голову приходит только одно решение, как определить именно тот датасорс, по кторому кликнули последним - по переходу к контролу (onEnter) - какую-то переменную (boolean firstDataSource) делать true или false, в зависимости от того, какой датасорс кликнули. А потом по clicked кнопки вызывать MenuItem с тем, который последний кликнули.

(можно попробовать это на active datasource повесить - но не уверен что сработает)
Старый 03.07.2006, 15:26   #18  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Цитата:
Сообщение от kashperuk
Ну а что вы тогда хотите, по умолчанию подставляется главный датасорс
Попробуйте по clicked MenuItem - закоментить супер и вызывать этот же MenuItem программно с указанием того датасорса который вам нужен в главный момент
Не поможет. Ядро устанавливает датасоурс до вызова Clicked()
__________________
Axapta v.3.0 sp5 kr2
Старый 03.07.2006, 15:28   #19  
kashperuk is offline
kashperuk
Участник
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,361 / 2084 (78) +++++++++
Регистрация: 30.05.2004
Адрес: Atlanta, GA, USA
Цитата:
Сообщение от AndyD
Не поможет. Ядро устанавливает датасоурс до вызова Clicked()
Поэтому я и говорю закоментить super() и создавать новый MenuFunction() с передачей в него Args, которые нужно.

А заодно и вопрос:
Цитата:
Сообщение от AndyD
Не поможет. Ядро устанавливает датасоурс до вызова Clicked()
А откуда ты это знаешь? В смысле, как определил?
Старый 03.07.2006, 15:30   #20  
vasiliy is offline
vasiliy
Программер
 
288 / 17 (1) ++
Регистрация: 21.10.2004
Адрес: E-burg
Цитата:
Сообщение от kashperuk
Пока в голову приходит только одно решение, как определить именно тот датасорс, по кторому кликнули последним - по переходу к контролу (onEnter) - какую-то переменную (boolean firstDataSource) делать true или false, в зависимости от того, какой датасорс кликнули. А потом по clicked кнопки вызывать MenuItem с тем, который последний кликнули.

(можно попробовать это на active datasource повесить - но не уверен что сработает)
Это опять же для каждого случая надо программировать, а хотелось бы общий механизм на все формы.
 


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

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

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