Blocarea salvarii unei comenzi

In acest exemplu vom vedea cum se poate impiedica salvarea unei comenzi pentru un client insolvabil. Deoarece este vorba despre un sistem foarte drastic, vom imparti procedura in doua script-uri.

Primul va da o alerta la selectarea clientului, in timp ce al doilea nu va permite salvarea comenzii daca, clientul sau conditia de insolventa nu sunt modificate.

Grup ScriptEveniment
FisaValoare schimbata

Asa cum spuneam, primul script va fi necesar pentru informarea utilizatorului de faptul ca, clientul selectat pentru comanda are un blocaj si aceasta va fi util pentru a evita crearea unei comenzi complete si descoperirea, abia la sfarsit, a faptului ca nu este posibila salvarea acesteia.

if datafield.name() == "gguid_customer" then
        t = database.getsql("SELECT insolvent FROM customers WHERE gguid='" .. datafield.getvalue()  .. "'")
        if t.countrows() > 0 then 
               rows = t.getrows()
               if  rows[1].getvalue("insolvent")  == 1 then
                       program.showerror("Attention the customer is insolvent. Could not save order!")
               end
        end
end

Interceptam atunci cand campul gguid_customer se schimba. Acesta este campul de serviciu al subtableului in care arhiveaza gguid-ul selectiei efectuate. Retineti: este intotdeauna mai bine sa folositi gguid-ul de identificare unic global in locul numelui propriu al clientului, acest lucru va permite sa-l regasiti chiar daca numele este schimbat!

Citim valoarea campului Insolvent din cadrul tabelului clienti si afisam un mesaj de eroare daca valoarea este unu. Acest camp va fi aproape sigur o verificare pe fisa clientului.

Sa continuam cu cel de-al doilea script care va bloca salvarea comenzii.

Grup ScriptEveniment
FisaPresalvare
t = database.getsql("SELECT insolvent FROM customers WHERE gguid='" ..  dataview.getvalue("gguid_customer")  .. "'")
if t.countrows() > 0 then
        rows = t.getrows()
        if  rows[1].getvalue("insolvent") == 1 then
               errorn.errocode = "E1"
               errorn.errormessage ="Attention the customer is insolvent. Could not save order!"
               do return end
        end
end

Dupa cum se observa, acesta este practic identic cu primul, cu exceptia valorii gguid care va fi preluata din dataview. Procedura este identica pentru a permite modificarea starii de insolventa a clientului. Am putea de fapt sa deschidem fisa acestuia si sa schimbam valoarea, pastrand totodata fisa de comanda deschisa.

Diferenta este gestionarea obiectului errorn. Atributia acestuia este sa raporteze programului eventuale erori. In acest caz, suntem noi care fortam o eroare introducand un cod, un mesaj si fortam iesirea din script.

Deoarece este vorba despre salvarea prealabila, programul va iesi din procedura Save a fisei. Codul de eroare poate fi oricare, deoarece ne este util pentru a identifica ce parte a script-ului l-a generat.