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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 21.12.2005, 13:04   #1  
Delfins_imported is offline
Delfins_imported
Участник
 
147 / 10 (1) +
Регистрация: 24.03.2004
Глюк в том, когда поле не заполнено и нет ни одной записи в related-таблице ... делаем `GoToMainTable` и создаём там новую запись, то она проподает... (при условии что там нет ни одной записи)

Примеры:

1) TaxTable -> Tab: Tax Reporting (4-ый tab).. где ссылки на `TaxReportCollection`...
2) ZipCode -> поле: Страна -> GoToMainTable (форма `Country`)
3) будут ещё наверно ...


PS: проблему решил так... в форме, которая открывается из GoToMainTable:

Код:
public void init()
{
	FormStringControl   callerControl;
;

	if (element.args().caller())
	{
		callerControl   = SysTableLookup::getCallerStringControl(element.args());
		if (callerControl)
		{
			isFromParentControl = true;
			callerCountryId = callerControl.valueStr();
		}
	}

	super();
}
на Datasource:
Код:
public void research()
{
	if (isFromParentControl && callerCountryId && !Country::exist(callerCountryId))
	{
		return;
	}

	super();
}
Пожалуйста помогите решить проблему глобально .. а то не хочется всю Axapta `перепахивать`
Спасибо!

PPS: Ax_3.0_SP4_EeastEurope [MSSQL 2k DevelopEdition] + AOS_3.0_SP4_EE

PPS2: probuju sozdat' svoji tablici i formi - ne poluchajetsja etot gljuk povtorit'... a v standartnih forma - ne udajetsja bez haka popravit'
Старый 21.12.2005, 16:18   #2  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Замечу что поле по которому осуществляется переход - цифровое.

Проблема в том, что передается значение Args().LookupValue() == "0". При этом у Axapta'ы слегка срывает крышу и она пытется периодически перевыполнить запрос (повторно вызывает research() датасоурса).
Чтобы решить глобально - перекрыть метод Init() класса SysSetupFormRun и дописать после super() следующий код
<div class='XPPtop'>X++</div><div class='XPP'>
[color=:blue]public[/color] [color=:blue]void[/color] init()
{
DictField dictField;
;
[color=:blue]super[/color]();
[color=:green]// --> D.Andy исправление глюка с переходом на цифровое поле
[/color] [color=:blue]if[/color] (this.args().lookupField() && this.args().lookupValue() [color=:blue]==[/color] [color=:red]"0"[/color])
{
dictField = [color=:blue]new[/color] DictField(this.dataSource().cursor().TableId, this.args().lookupField());
[color=:blue]if[/color] (dictField && dictField.baseType() [color=:blue]==[/color] Types::Integer)
this.args().lookupValue([color=:red]""[/color]);
}
[color=:green]// <-- D.Andy
[/color] ...
}</div>

Эта же проблема проявляется при открытии Lookup-формы
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: Logger (1).
Старый 21.12.2005, 17:17   #3  
Delfins_imported is offline
Delfins_imported
Участник
 
147 / 10 (1) +
Регистрация: 24.03.2004
Спасибо.. помогло пока..

а что на счет ZipCode -> поле: Country -> GoToMainTable (форма: Country).. ???
Там ведь `String`... Именно у меня проблема, когда значение несуществует в таблице... (симулировать можна поменяв на прямыю значение в таблице через SQL manager или Query )

например при импорте код страны попал как 2-символа,.. а компания ID использует kak ISO код (3 символа)

ПС: такие Fix-ы надо включать в hotfix-ы или ServicePack
Старый 21.12.2005, 17:34   #4  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
ZipCode - это таблица?

Честно сказать с Country у меня все нормально (3.0 CIS sp3 cu1)

По хорошему - после изменения глобального класса не мешало бы сделать полную компиляцию
__________________
Axapta v.3.0 sp5 kr2
Старый 21.12.2005, 17:49   #5  
Delfins_imported is offline
Delfins_imported
Участник
 
147 / 10 (1) +
Регистрация: 24.03.2004
Eto potomu chto skoree vsego znachenije suschestvujet v tablice...

Vot moj Final-kod

Код:
public void init()
{
	DictField   dictField;
	Common	  c;
;

	super();	
	if (this.args().lookupField() && this.args().lookupValue() != "" )
	{
		// Check bug on Integer `0` value
		if (this.args().lookupValue() == "0")
		{
			// --> Thanks AndyD
			dictField = new DictField(this.dataSource().cursor().TableId, this.args().lookupField());
			if (dictField && dictField.baseType() == Types::Integer)
				this.args().lookupValue("");
			// <-- Thanks AndyD
		} else {
			// Check if exists
			c.data(this.dataSource().cursor());
			select  c
			where   c.(this.args().lookupField()) == this.args().lookupValue();
			if ( !c.RecId )
			{
				this.args().lookupValue("");
			}
		}
	}
}
Старый 21.12.2005, 18:05   #6  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Нет, так нельзя - вообще ломается jumpRef.
__________________
Axapta v.3.0 sp5 kr2
Старый 21.12.2005, 18:08   #7  
Delfins_imported is offline
Delfins_imported
Участник
 
147 / 10 (1) +
Регистрация: 24.03.2004
v smisle?
U menja shas vse rabotaet...

Fix:
Код:
c = this.dataSource().cursor();
Старый 21.12.2005, 18:18   #8  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
2-х или 3-х звенка?
__________________
Axapta v.3.0 sp5 kr2
Старый 21.12.2005, 18:45   #9  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2479 (88) +++++++++
Регистрация: 20.08.2005
Вообще - значение "0" может иметь и строковое поле - так что, по идее, надо проверять сначала какой тип у этого поля
<div class='XPPtop'>X++</div><div class='XPP'>
dictField = [color=:blue]new[/color] DictField(this.dataSource().cursor().TableId, this.args().lookupField());
[color=:blue]if[/color] (dictField && dictField.baseType() [color=:blue]==[/color] Types::Integer && this.args().lookupValue() [color=:blue]==[/color] [color=:red]"0"[/color])
this.args().lookupValue([color=:red]""[/color]);
[color=:blue]else[/color]
{
проверка на существование
}</div>
А вообще сомнения у меня есть в целесообразности второй проверки - может лучше делать это при импорте?
__________________
Axapta v.3.0 sp5 kr2
Старый 21.12.2005, 19:49   #10  
Delfins_imported is offline
Delfins_imported
Участник
 
147 / 10 (1) +
Регистрация: 24.03.2004
3-x zvenka...

Nu puskaj budet sdes' proverka... 2-x zvenka tozhe rabotaet...
nashet proverki pri importi - bivajut vsjakie polzovateli, i zaimportirovat' mogut shto ugodno.. a X++ pisat' konechno ne umejut...

Esli String budet "0"... to budet proverjatsja na nalichie

Spasibo za to.. glavnoe najti mesto gde ispravit'...
 


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

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

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