[Allegro] Version 35.10

Mettler, Jeannette Jeannette.Mettler at kg.berlin.de
Di Nov 17 15:43:57 CET 2015


Hallo Herr Berger,
wir haben unseren o-bestel.flx jetzt so umprogrammiert:
....
yesno Bestellung speichern? (Nein: zurueck zum Formular, Abbruch: loeschen)
if no jump form
if cancel jump exit

var 124 ":"
ins #uoR

#uoP o b
#uoF 
var "uoR=" #uoR ", uoF=" #uoF ", uoP=" #uoP "."
//mes   //war nur für Testzwecke
set tbl loc           // .TBL blockieren, damit keiner speichern kann 
perf nextnum          // ermittelt die Nummer, liefert sie in #uoY 
if ="-1" jump fehler  // Nummernermittlung nicht gelungen 
z=6
var #uoY JL0
ins #uoY
var "b" #uoY    // <praefix = eigenes, gewünschtes Präfix im Datensatz 
ins $$-#9DA              // nicht im Index! #nnn = Feld im Datensatz
input 252 
put free    // Satz speichern, zugl. TBL freigeben (erst ab V25.9) 
//set tbl free      //  s. Mails Diskussionsliste: vor dem Aufruf von onput soll die tbl freigegeben werden
exec onput
include nextnum.flx


show rec    // braucht man das einschl. end?
var ""
ins #uoI
end

.....


Komischerweise funktioniert es so korrekt, aber nicht, wenn man exec onput wegnimmt, obwohl jetzt onput.flx nicht ausgeführt wird. ????
Schadet es wenn wir es so belassen - konnten bisher beim Testen noch kein Problem feststellen.

Vielen Dank und viele Grüße aus Berlin
Jeannette Mettler





-----Ursprüngliche Nachricht-----
Von: Allegro [mailto:allegro-bounces at biblio.tu-bs.de] Im Auftrag von Thomas Berger
Gesendet: Mittwoch, 11. November 2015 14:46
An: Allegro-C Diskussionsliste
Betreff: Re: [Allegro] Version 35.10

Am 11.11.2015 um 12:18 schrieb Mettler, Jeannette:
> Lieber Herr Berger,
> 
> Ja, erst kommt diese Zeile wegen der Bestellnummernvergabe.
> 
> set tbl loc           // .TBL blockieren, damit keiner speichern kann 
> perf nextnum          // ermittelt die Nummer, liefert sie in #uoY   
> 
> danach erst
>  
> set tbl free      //  s. Mails Diskussionsliste: vor dem Aufruf von onput soll die tbl freigegeben werden
> exec onput


Ich habe jetzt die entsprechende Diskussion hier auf der Liste von 2004 gefunden, evtl. eine spaetere nicht: In der cat.api finde ich im PV-Abschnitt bei #-N "ab V28.2 obsolet, weil Nummernvergabe per FLEX"
was aber nicht stimmt, denn der Standard-Flex o-bestel.flx veranstaltet keine Vergabe der Bestellnummer in #9DA und beruht also weiterhin darauf, dass die .api das beim Speichern tut.

In Ihrem Fall mit tatsaechlicher Nummernvergabe im Flex muessen Sie aufpassen: Sinn des nextnum-Unterprogramms ist, die naechste freie Nummer zu /ermitteln/, solange diese aber noch nicht gespeichert ist, muss die Datenbank gesperrt bleiben!

Insofern duerfen Sie keinesfalls zuerst "set tbl free"
geben und dann ganz gemaechlich onput.flx aufrufen, in dessen Ablauf der Satz irgendwann gespeichert wird (mit vorheriger Sperre der Satztabelle etc.). In der Zwischen- zeit werden naemlich andere Besteller, die durch die von Ihnen gesperrte Satztabelle zum Warten gezwungen waren, ebenfalls zum Zuge kommen und fuer deren Bestellungen wird dann (im Zeitraum zwischen Ihrem "set tbl free" und dem Moment, wo Ihr "put" im onexec.flx sich die Datenbank erneut exklusiv sichern kann) dieselbe Nummer errechnet.

In o-invent.flx koennen Sie zwei verschiedene Arten besichtigen, diese Klippe zu umschiffen:
a) (ueber einen Dummy-Datensatz) den durch die Nummer
   erzeugten Schluessel errechnen lassen und explizit
   vorab in den Index schreiben

b) so lange warten, bis der Datensatz tatsaechlich
   geschrieben werden soll (hoffentlich nicht zu lange)

Beides endet letztlich mit einem
put free
d.h. der Satz wird trotz gesperrter Satztabelle gespeichert, diese anschliessend freigegeben.

Die Frage ist, ob Sie wirklich den onput.flx benoetigen (weil Ihre Variante davon automatisiert irgendwelche Abschliessenden Verschoenerungen auch an Bestellsaetzen vornimmt), denn der kann ja nicht davon abgebracht werden, ein einfaches "put" auszufuehren, das in der Situation mit gesperrter Satztabelle scheitern muss. Wenn Sie den onput- Aufruf durch ein

put free

ersetzen koennen, haben Sie in mehrfacher Hinsicht gewonnen:
- Die Nummernvergabe ist wasserdicht
- Alles wird schneller da die .tbl nur ein- und nicht zweimal
  gesperrt und freigegeben wird
- Die stoerende Meldung unterbleibt

viele Gruesse
Thomas Berger


_______________________________________________
Allegro mailing list
Allegro at biblio.tu-bs.de
http://sunny5.biblio.etc.tu-bs.de/mailman/listinfo/allegro



Mehr Informationen über die Mailingliste Allegro