|
|
#1 |
|
Участник
|
Глюк в том, когда поле не заполнено и нет ни одной записи в 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();
}Код: public void research()
{
if (isFromParentControl && callerCountryId && !Country::exist(callerCountryId))
{
return;
}
super();
}![]() Спасибо! 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' |
|
|
|
|
#2 |
|
Участник
|
Замечу что поле по которому осуществляется переход - цифровое.
Проблема в том, что передается значение 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=:green]// <-- D.Andy [/color] ... }</div> Эта же проблема проявляется при открытии Lookup-формы
__________________
Axapta v.3.0 sp5 kr2 |
|
|
|
| За это сообщение автора поблагодарили: Logger (1). | |
|
|
#3 |
|
Участник
|
Спасибо.. помогло пока..
![]() а что на счет ZipCode -> поле: Country -> GoToMainTable (форма: Country).. ??? Там ведь `String`... Именно у меня проблема, когда значение несуществует в таблице... (симулировать можна поменяв на прямыю значение в таблице через SQL manager или Query ) например при импорте код страны попал как 2-символа,.. а компания ID использует kak ISO код (3 символа) ПС: такие Fix-ы надо включать в hotfix-ы или ServicePack |
|
|
|
|
#4 |
|
Участник
|
ZipCode - это таблица?
Честно сказать с Country у меня все нормально (3.0 CIS sp3 cu1) По хорошему - после изменения глобального класса не мешало бы сделать полную компиляцию
__________________
Axapta v.3.0 sp5 kr2 |
|
|
|
|
#5 |
|
Участник
|
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("");
}
}
}
} |
|
|
|
|
#6 |
|
Участник
|
Нет, так нельзя - вообще ломается jumpRef.
__________________
Axapta v.3.0 sp5 kr2 |
|
|
|
|
#7 |
|
Участник
|
v smisle?
U menja shas vse rabotaet... Fix: Код: c = this.dataSource().cursor(); |
|
|
|
|
#8 |
|
Участник
|
2-х или 3-х звенка?
__________________
Axapta v.3.0 sp5 kr2 |
|
|
|
|
#9 |
|
Участник
|
Вообще - значение "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 |
|
|
|
|
#10 |
|
Участник
|
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'... |
|
|