Funzioni...

Ho creato una funzione: GetCustResponsability(CustNo : Code[20];ResponsabilityNo : Code[10]) CustResponsability.GET(CustNo,ResponsabilityNo); Cust.TRANSFERFIELDS(CustResponsability); che chiamo all’interno di altre funzioni o trigger. L’operazione TRANSFERFIELDS mi serve per sostituire alcuni valori dei campi presenti in Cust con altri presenti in CustResponsability. Il richiamo avviene, per esempio, all’interno del seguente trigger: Bill-to Contact No. - OnLookup() IF (“Bill-to Customer No.” <> ‘’) AND Cont.GET(“Bill-to Contact No.”) THEN Cont.SETRANGE(“Company No.”,Cont.“Company No.”) ELSE IF Cust.GET(“Bill-to Customer No.”) THEN BEGIN GetCustResponsability(“Bill-to Customer No.”,“Responsibility Center”); … Successivamente alcuni campi Cust vengono portati a video. L’anomalia che riscontro sta nel fatto che con questa metodologia i campi del video vengono valorizzati con valori presenti originariamente in Cust non con quelli che Cust dovrebbe contenere dopo il TRANSFERFIELDS eseguito nella funzione GetCustResponsability. Se l’operazione di TRANSFERFIELDS la eseguo al di fuori della funzione creata GetCustResponsability e successivamente porto i campi Cust a video questi avranno, correttamente, i valori che Cust ha assunto dopo il TRANSFERFIELDS. Esempio Bill-to Contact No. - OnLookup() IF (“Bill-to Customer No.” <> ‘’) AND Cont.GET(“Bill-to Contact No.”) THEN Cont.SETRANGE(“Company No.”,Cont.“Company No.”) ELSE IF Cust.GET(“Bill-to Customer No.”) THEN BEGIN GetCustResponsability(“Bill-to Customer No.”,“Responsibility Center”); Cust.TRANSFERFIELDS(CustResponsability); Spero di essere stato abbastanza chiaro. Qualcuno ha una risposta plausibile ? Grazie a tutti.

Ci sono un paio di cose che mi vengono in mente… 1. Cust è una variabile definita 2 volte, e in particolar modo nella funzione GetCustResponsability è locale, mente nel trigger è globale. Una variabile locale ha sempre precedenza su quella globale, per cui la cust locale viene cambiata, mentre quella globale rimane intatta. 2. la funzione è definita in un’altro ogetto, per cui anche qui ci sono 2 cust differenti, nel qual caso dovresti passare per referenza (con il var) il record cust. Poi mi verrbe da dirti che se effettivamente vuoi cambiare in maniera definitiva i valori, devi chiamare il cust.modify Magari ti ho scritto cose che tu già sai…ma non mi viene in mente altro. Sicuramente, se nelle variabili che passi alla funzione, ci passi anche cust con il var, dovresti ottenere quello che vuoi. Uff, che fatica il rientro dalle ferie…

Grazie domenico il problema era proprio nella sovrapposizione tra la variabile cust globale e locale in alcuni trigger.