Gespeichert von FileMaker Entwickler am Di, 03/10/2020 - 10:32

Datensatz beschreibbar? (Schleife)

Als FileMaker Entwickler entwickelt man überwiegend für Kunden mit mehreren Arbeitsplätzen. Um eine fortlaufende Nummer pro Datensatz zu erzeugen, gibt es in FileMaker die Seriennummern-Funktion. Was aber, wenn ein Datensatz erst zu einem späteren Zeitpunkt eine Nummer bekommen soll, diese aber zwingend chronologisch (z.B. eine Rechnungsnummer) sein muss ? Was ist, wenn es mehrere Mandanten in der Datenbank gibt und jeder Mandant seinen eigenen Nummernkreis hat?

Tabelle für Seriennummern

In diesem Fall kann man in der Hauptdatenbank eine Tabelle "Nummern" anlegen, die nur 1 Datensatz (bzw. 1 Datensatz pro Mandant) hat und darin für jeden Nummern-Typ (Rechnungsnummer, Angebotsnummer usw) ein eigenes Feld zum Hochzählen anlegen.

Das Hochzählen erfolgt über ein einfaches Skript, das als Parameter die Art des angeforderten Wertes enthält ( "Rechnungnummer" usw.) und als Ergebnis den nächsten Wert zurück gibt.

Skript

 

If [  Get ( ScriptParameter ) = "Rechnungsnummer" ]
    Set Variable[ $Nummer; Value:Nummern::Rechnungsnummer]
    Set Field [ Nummern::Rechnungsnummer; $Nummer + 1 ]
Else If [ Get ( ScriptParameter ) = "Angebotsnummer" ]
    Set Variable[ $Nummer; Value:Nummern::Angebotsnummer]
    Set Field [ Nummern::Angebotsnummer; $Nummer + 1 ]
End If

Exit Script [ Result: $Nummer ]

Das Problem

Das obige Skript funktioniert so lange, bis 2 Anwender zum exakt gleichen Zeitpunkt eine Nummer anfordern.

Je mehr verschiedenen Nummern in der Tabelle geführt werden und je mehr Anwender mit der FileMaker Datenbank arbeiten, um so schneller wird der Fall eintreten, dass ein Anwender den Zugriff auf den einen Datensatz (für diesen Mandanten) für allen anderen Anwender blockiert.

So lange ein Anwender den Datensatz geöffnet hat, blockiert FileMaker den Datensatz für die Bearbeitung durch andere Anwender.

Lösung

Die Lösung besteht aus 2 Teilen:

1. Es muss sichergestellt werden, dass jeder Anwender, nachdem er die Nummer bekommen hat, den Datensatz "verlässt". Das wird durch ein simples "Commit Record" vor dem "Exit Script" Step erreicht.

2. Des weiteren muss für die wartenden Anwender eine Möglichkeit geschaffen werden, so lange "in der Warteschleife" zu bleiben, bis der Datensatz wieder frei ist. Dies wird durch eine Schleife gemacht, die mit Hilfe der Funktion "Error Capture" versucht den Datensatz zu öffnen.

So lange der Datensatz blockiert ist, bleibt das Skript in der Warteschleife. Die Funktion "Error Capture" sorgt dafür, dass der Anwender keine Fehlermeldung sieht, die der Versuch, einen blockierten Datensatz zu öffnen, normalerweise erzeugt.

Sobald es gelingt, den Datensatz zu öffnen, wird die Schleife verlassen.

Das erweiterte Skript

 

Set Error Capture [ On ]
Loop
    Open Record/Request
    Exit Loop If [ Get ( LastError ) = 0 ]
End Loop

If [  Get ( ScriptParameter ) = "Rechnungsnummer" ]
    Set Variable[ $Nummer; Value:Nummern::Rechnungsnummer]
    Set Field [ Nummern::Rechnungsnummer; $Nummer + 1 ]
Else If [ Get ( ScriptParameter ) = "Angebotsnummer" ]
    Set Variable[ $Nummer; Value:Nummern::Angebotsnummer]
    Set Field [ Nummern::Angebotsnummer; $Nummer + 1 ]
End If

Commit Records/Requests [ Skip data entry validation; No dialog ]

Exit Script [ Result: $Nummer ]

Optionen zur Erweiterung

Die Anforderung von fortlaufenden Nummern über eine Tabelle umzusetzen hat noch einen weiteren Vorteil: Man kann dem Anwender die Möglichkeit geben, feste Pre- und Suffixe vor und hinter die Nummer zu setzen.

Beispiel: RG-123456/2020

Dafür werden einfach 2 Felder (Prefix und Suffix) und ein Layout für die Bearbeitung durch den Anwender hinzugefügt.

Die erweiterte Nummer wird dann im Skript zusammengesetzt: $Nummer = Nummer::Prefix & $Nummer & Nummer::Suffix

 

 

 

 

Mamtemic GmbH:
FileMaker Entwicklung, FileMaker Programmierung, Individuelle Datenbanklösungen, Speziallösungen, Web Applications, Auswertungen & Berichte, Außendienst Steuerung, Spezial Kalkulationen, Datenkonvertierung, FileMaker Entwickler für die Anpassung und Wartung Ihrer Inhouse Datenbank
FileMaker Development in Hamburg, Deutschland und Europa, FileMaker Consulting in Norddeutschland