Genexus 9U7 e .net

17 views
Skip to first unread message

Fabio

unread,
Nov 6, 2009, 5:04:14 AM11/6/09
to Gruppo Utenti Genexus Italia
Ciao a tutti,

ho un problema con il generatore .net nella versione 9U7.
Ho un'applicazione che, con la versione 9U2, viene correttamente
generata e compilata (Framework 2.0.5) mentre con la versione 9U7
(Framework 3.5) la compilazion e ritorna l'errore
error CS0029: Cannot implicitly convert type 'string' to
'GeneXus.Programs.GxObjectCollection'
Particolarità della transazione è l'utilizzo di una collection,
riempita (e quindi utilizzata come parametro) da una procedura
eseguita nell'evento start della transazione stessa.
Verificando il codice cs generato dalle due versioni, risulta un unico
statement di differenza che, guarda caso, è quello che causa l'errore
di compilazione:
AV16PgSdt = GetNextPar( ) ;
dove AV16PgSdt è la collection.
Tale statement è presente nel solo sorgente generato dalla 9U7 mentre
non esiste nella versione generata con la 9U2.
Qualcuno di voi si è già imbattuto in questo problema? E se si, come
avete risolto?

Grazie

P.S. al momento sto tentando, invano, di risolvere il problema
attraverso l'utilizzo delle funzioni fromxml - toxml, supponendo si
tratti di un problema causato da collection utilizzate come
parametro ...

FernandoCuri

unread,
Nov 6, 2009, 7:00:30 AM11/6/09
to Gruppo Utenti Genexus Italia
Fabio, il programma genexus dispone di alcune proprietà particolari?
Che può accadere se il programma è "main".
Vi consiglio di creare e chiamare un nuovo programma che non fa nulla,
ma ricevono lo stesso parametro per verificare il comportamento.

Fernando Curi
GeneXus Consulting - K2B

Fabio

unread,
Nov 6, 2009, 8:32:08 AM11/6/09
to Gruppo Utenti Genexus Italia
Ciao Fernando,

Prima di tutto grazie per la risposta.

No, la transaction (anzi, le transaction dato che sono più di una) che
danno questo problema non sono main e non hanno proprietà particolari.
L'unica cosa della quale mi sono accorto è che pensavo che il problema
fosse dovuto al caricamento della collection e invece no.
Ho 2 procedure in questa transaction, la prima carica la collection e
utilizza la collection come parametro (output) senza dare nessun
problema.
La seconda procedura è definita nelle "Rules" con evento "on
AfterValidate":
Call(PAstSplCseRps_chk121, "MND", &PgSdt, AstSplCseCod, AstSplCseDes,
AstSplCseUsrCod, &ErrOut) On AfterValidate;
dove &PgSdt è la collection.
Questa seconda procedura riceve in input la colletion, ed è proprio
questa la procedura che genera la riga di codice che da errore in
compilazione.
Se tolgo la riga e genero nuovamente il sorgente, la transaction si
compila.

Ciao, grazie
Fabio

FernandoCuri

unread,
Nov 6, 2009, 8:41:00 AM11/6/09
to Gruppo Utenti Genexus Italia

Ciao Fabio,
Dispiace per il mio italiano, sto imparando e che mi aiuta a Google :)
Mi riferisco alla proprietà del procedure PAstSplCseRps, qualcosa di
particolare?
Si tratta di un procedure "main"?
Fernando.

Fabio

unread,
Nov 6, 2009, 9:00:28 AM11/6/09
to Gruppo Utenti Genexus Italia
Fernando, non ti preoccupare, il tuo italiano si capisce bene ^_^

No, la transaction e le 2 procedure non hanno nessuna proprietà
particolare e non sono "main".

Provo a spiegarmi meglio:

Nella transaction esiste una procedura che carica la collection:

La collection dove esiste il problema è la &PgSdt

Transaction:
Event Start
// Carica SDT PgSdt
Call (PLoadPageData, &Pgmname, &PgSdt, &ErrOut)
EndEvent

Procedure PLoadPageData Rules:
Parm(In: &PageName, Out: &PgSdt, Out: &ErrorMsg);

Questa non da nessun problema, ma se aggiungo questa riga nelle rules
della transaction:

Call(PAstSplCseRps_chk121, "MND", &PgSdt, AstSplCseCod, AstSplCseDes,
AstSplCseUsrCod, &ErrOut) On AfterValidate;

Procedure PAstSplCseRps_chk121 Rules:
Parm(In:&VarMod, In:&PgSdt, In:&AstSplCseCod, In:&AstSplCseDes,
In:&AstSplCseUsrCod, Out:&ErrorTxt);

La compilazione fallisce con l'errore
CS0029: Cannot implicitly convert type 'string' to
'GeneXus.Programs.GxObjectCollection'

Non capisco perchè, soprattutto non capisco perchè con genexus 9U2
questo funziona e con genexus 9U7 va in errore :(

Grazie
Fabio
> > Fabio- Nascondi testo citato
>
> - Mostra testo citato -

FernandoCuri

unread,
Nov 6, 2009, 10:37:03 AM11/6/09
to Gruppo Utenti Genexus Italia
nel nuovo upgrades di apportare modifiche per migliorare le
prestazioni e il rilevamento degli errori. Che può essere il motivo
per il cambiamento nel codice CS.

Con il nuovo upgrade7 suppongo che vi è stato un "build all" con la
"force generation". L'errore del compilatore è della transaction o di
una procedura? Potrei inviare poche righe di codice vicino l'errore?
Ciao,
Fernando

Fabio

unread,
Nov 6, 2009, 10:57:52 AM11/6/09
to Gruppo Utenti Genexus Italia
Fernando,

l'errore del compilatore è sulla transaction, e prima di compilare è
stato fatto "build all" e "force generation".

Ecco il codice:

Transaction - Rules

Parm(&Mode, &AstSplCseCod);

AstSplCseCod = &AstSplCseCod If Not Null(&AstSplCseCod);
NoAccept(AstSplCseCod) If Not Null(&AstSplCseCod);
NoPrompt(AstSplCseCod);

// Verify Mandatory Data
Call(PAstSplCseRps_chk121, "MND", &PgSdt, AstSplCseCod, AstSplCseDes,
AstSplCseUsrCod, &ErrOut) On AfterValidate;

Error(&ErrOut) If Not Null(&ErrOut) On AfterValidate;

==================================================================================

Transaction - Events
Event Start
Call (PLoadPageData, &Pgmname, &PgSdt, &ErrOut)

If Trim(&ErrOut) <> ""
Call(HNotAuthorized, &ErrOut)
Else
Call(PLoadContext, &Context)
Do 'InitPage'
Do 'InitObject'
EndIf
EndEvent

=======================================================================

Procedure PAstSplCseRps_chk121 - Source

Error_Handler('ErrorSub')

&ErrorTxt = ""

Do Case
// ************************************ BEGIN DO NOT MODIFY
*****************************************
// Mandatory fields check.
Case &VarMod = "MND"
&ItemIndex = 1
Do While &ItemIndex <= &PgSdt.Count
If &PgSdt.Item(&ItemIndex).EntRefObjM = "AstSplCseCod"
If &PgSdt.Item(&ItemIndex).PrfEntObl = Boolean.True And Null
(&AstSplCseCod)
Call(PErrorManager, "LOG", 100, &PgSdt.Item
(&ItemIndex).EntDesM, &ErrorTxt)
Exit
EndIf
EndIf

If &PgSdt.Item(&ItemIndex).EntRefObjM = "AstSplCseUsrCod"
If &PgSdt.Item(&ItemIndex).PrfEntObl = Boolean.True And Null
(&AstSplCseUsrCod)
Call(PErrorManager, "LOG", 100, &PgSdt.Item
(&ItemIndex).EntDesM, &ErrorTxt)
Exit
EndIf
EndIf

If &PgSdt.Item(&ItemIndex).EntRefObjM = "AstSplCseDes"
If &PgSdt.Item(&ItemIndex).PrfEntObl =
Boolean.True And Null(&AstSplCseDes)
Call(PErrorManager, "LOG", 100, &PgSdt.Item
(&ItemIndex).EntDesM, &ErrorTxt)
Exit
EndIf
EndIf

&ItemIndex=&ItemIndex + 1
EndDo
// ************************************ END DO NOT MODIFY
*****************************************
EndCase

Sub 'ErrorSub'
Call(PErrorManager, "REX", &gxDBErr, "", &ErrorTxt)
EndSub

===============================================================================================
Procedure PAstSplCseRps_chk121 - Rules

Parm(In:&VarMod, In:&PgSdt, In:&AstSplCseCod, In:&AstSplCseDes,
In:&AstSplCseUsrCod, Out:&ErrorTxt);

===============================================================================================

Grazie, ciao

Fabio
> > > - Mostra testo citato -- Nascondi testo citato
Reply all
Reply to author
Forward
0 new messages