- NOCH IN ERPROBUNG -
dotNET
Der LomCoder ist nun auch als .NET assembly (v2.0) verfügbar (andere
Versionen s.u.).
Download: dotnet_lomcoder.zip
(Stand: 12.08.2010)
Das Assembly lomcoder.dll ist signiert, d.h. es sind ggf.
Freigaben als "voll vertrauenswürdig" in entsprechenden Zonen
notwendig, wenn der Zugriff mit einer SecurityException unterbunden wird (z.B.
mit Die Assembly lässt keine Aufrufer zu, die nicht voll vertrauenswürdig sind. ).
Zusätzlich wird das Testprogramm TestLoms.exe mitgeliefert,
welches das Assembly verwendet, um die Integrität des LomCoders zu testen.
Dieses Programm testet für alle Länder falsche und korrekte Ohrmarkennummern
und vergleicht sie zu unterschiedlichen Zeitpunkten mit zu erwartenden
Ergebnissen. Schlägt ein Vergleich fehl, dann bricht das Programm mit einer
Fehlermeldung ab ("Erwartetes Ergebnis ungleich erhaltenes Ergebnis"). Die
Ausgabe der Vergleiche kann übrigens per Weiterleitung in eine Datei
gespeichert werden.
In Kooperation mit dem LKV
Sachsen entstand die erste .NET-Version des LomCoders, die bereits in deren
System eingesetzt wird.
Verwendung in eigenen Programmen
Grundsätzlich stehen zwei Funktionen zur Verfügung, um eine
Ohrmarkennummer auf Korrektheit zu prüfen:
| LomCoder2.sintEncodeLom(strLom,objLom) |
| ServerLomCoder.sintEncodeLom(strLom,objLom) |
Der LomCoder2 prüft auf semantisch korrekte Ohrmarken und in
seltenen Fällen auch auf korrekte Nummernbereiche. Der ServerLomCoder
geht einen Schritt weiter und prüft zusätzlich für deutsche Ohrmarkennummern
auf von einzelnen Bundesländern freigegebene Bereiche. Letztere werden in
unregelmäßigen Abständen von den Bundesländern auf Zuruf erweitert.
Daher ist es sinnvoll, die Funktion LomCoder2.sintEncodeLom(pstrLom,objLom)
(und sein Pendant mit dem dritten Parameter für einen Zeitpunkt) zu verwenden.
Die strengere Prüfung bleibt dann dem HitServer mit den aktuellen
Nummernbereichen vorbehalten, wenn VVVO-Bewegungen gemeldet werden.
In C#:
String strLom = "IE DNFX 7345 L"
LomNumber objLom = new LomNumber();
int intRC = LomCoder2.sintEncodeLom(strLom,objLom);
int intSchwere = LomCoderErrors.sintGetFehlerSchwere(intRC);
String strFehlertext = LomCoderErrors.sstrGetError(intRC)
bool boolFalsch = (intSchwere > 1);
sintEncodeLom() wandelt eine LOM (egal, ob numerisch oder
alpha-numerisch) in eine numerische LOM um. Die generierte Ohrmarkennummer wird
im übergebenen Objekt vom Typ LomNumber gespeichert und die
Funktion liefert einen Statuscode zurück. Um anhand des Statuscode eine
Fehlerschwere zu erhalten, bedient man sich der Funktion LomCoderErrors.sintGetFehlerSchwere() .
Ist die Fehlerschwere größer 1, dann ist die Ohrmarke fehlerhaft, sonst
korrekt. Einen Fehlertext zu einem Statuscode erhält man via LomCoderErrors.sstrGetError() .
Um aus einer (korrekten) rein 15-stellig numerischen Ohrmarke eine
formatierte alpha-numerische Ohrmarke zu erzeugen, genügt der Aufruf von LomCoder2.sstrToFormattedString() :
LomNumber objLom = new LomNumber("528000163275406");
String strLom = LomCoder2.sstrToFormattedString(objLom)
Erzeugung der Sourcen
- Aus dem HIT-Projekt werden nur die für den LomCoder notwendigen Sourcen in
ein temporäres Verzeichnis kopiert.
- Danach wird dieses Verzeichnis mit dem Java Language Conversion Assistant1)
(JLCA) in ein neues Verzeichnis konvertiert. Die Sourcen liegen dann als C#
Source vor. Damit nun das Compilieren funktioniert, muß die Konstante
NOT_SET
in der Klasse HitUpros.LomDate geändert werden auf:
public static System.DateTime NOT_SET = System.DateTime.MinValue;
Hintergrund ist der, dass .NET kein Datumsobjekt, sondern nur eine
Datumsstruktur verwendet. Damit ist es unmöglich, Null bzw. Nothing
als Wert für ein nicht existentes Datum zu verwenden. Damit letzteres
dennoch möglich ist, wird im LomCoder die Konstante NOT_SET
verwendet. Unter Java ist sie auf null gesetzt, unter C# (oder
auch VB) wird statt dessen die Konstante System.DateTime.MinValue
verwendet.
- Es wird eine Liste der Dateinamen erzeugt, die für die DLL notwendig
sind. Zusätzlich wird eine
AssemblyInfo.cs mit aussagekräftigen Werten
gefüllt. Anhand der Liste und der AssemblyInfo erzeugt der C#-Compiler nun
das Assembly. Da ein strong name verwendet wird, ist es zusätzlich
signiert.
- Das Test-Programm
TestLoms.exe wird separat compiliert; es
verwendet lediglich die eben erzeugte Assembly als Referenz. Auch dieses
wird via strong name signiert.
Der beschriebene Vorgang wurde durch ein Batch-Script komplett automatisiert.
Da wir im HIT-Projekt .NET 2.0 verwenden, haben wir keinerlei Pläne, neuere
Versionen (3.0, 3.5, 4.0) einzusetzen. Neuere Versionen hätten zudem den Nachteil,
dass eine Abwärtskompatibilität nicht mehr gegeben ist.
Interessenten, die den Code unter anderen .NET-Versionen erzeugen wollen,
können den generierten Source
verwenden.
1) Der JLCA ist nur bis einschließlich VisualStudio 2005
verfügbar. Neuere Versionen von VisualStudio verfügen nicht mehr über den Konverter
und er ist auch nicht separat bei Microsoft downloadbar! |