[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