Beim Speichern eines Beleges die korrekte Belegnummer auswerten
Heiko Merz
Hallo zusammen, ich habe ein verzwicktes Problem:Wenn Benutzer A und Benutzer B zur gleichen Zeit einen neuen Beleg anlegen, z.B. einen Kundenauftrag, bekommen beide erstmal die gleiche Belegnummer angezeigt, z.B. 100001. Speichert dann Benutzer A seinen Beleg ab, kommt der tatsächlich mit der 100001 ins System rein. Speichert danach Benutzer B seinen Beleg ab, dann bekommt dieser die 100002, wobei beim Klick auf Hinzufügen noch die 100001 oben drin steht.
Nun schreiben wir in eine Barcode Tabelle beim Hinzufügen eines Beleges u.a. die Belegnummer rein. Diese hole ich mir über eine Customize Regel (Optimizer, FormType 139, EventType FormDataAdd, Formmode ADD) über "string DocNum = TextEdit.GetFromUID(pVal.Form, "8").Value;"
Nur ist dieser Wert, siehe obiges Beispiel, ja nicht immer richtig.
Das selbe Spiel läuft ab, wenn sich User vor dem Hinzufügen den Beleg über die Vorschau zuerst einmal den Beleg anschauen. Hierbei wird ein Draft erzeugt, was auch ein FormDataAdd ist, und somit auch gleich der Barcode geschrieben. Dies sollte ich auch unterbinden.
Hat jemand von euch eine Idee, wie ich diese Probleme lösen kann ? ? ?
Mir wäre echt geholfen.
Gruß
Heiko
Anders Olsson
Hello Heiko,You're right - you cannot trust the document number is correct until the document has been saved.
In your rule, you can use the pVal.BusinessObjectKeyString. This is the same as the DocEntry in the database which is the key to the document. I would rather use DocEntry as it's guaranteed to be unique whereas DocNum is not. But if you really want the DocNum you can query the database based on the DocEntry e.g.
SELECT DocNum FROM ORDR WHERE DocEntry = x
Kind regards,
Anders Olsson
Heiko Merz
Hello Anders,thanks for that help, great.
Maybe you can also help me with a next small problem.
Sometimes users create a document, but before they hit "Add", they check the document in the preview. (A draft is created).
The FormDataAdd rule is then also executed, but I do not want it to be executed when they create a draft, only when they hit the add-button.
Do you have an idea how I can find out if it's a draft and then prevent the system from executing the rule ?
Kind regards,
Heiko
Bastian Hofmeister
Hallo Heiko,Ich würds so machen:
FormMode holen:
string i = pVal.Form.Mode.ToString();
MessageBox.Show(i, "OK");
Dann mit ner if-Abfrage auf den FormMode "ADD" überprüfen.
Wenn true, dann, deine Function ausführen.
Wenn false, dann nix.
if (i == "ADD")
{ //function }
Die ganze Regel im Optimizer auf den OK/ADD/UPDATE etc. Button legen (ItemId=1).
Fertig. Sollte so funktionieren.
Ansonsten, meld dich einfach per PM.
HTH Basti
0
Please sign in to leave a comment.
Comments
0 comments