Zur Homepage www.HI-Tier.de LomCoder als Assembly
Zurück Home Nach oben Weiter
Öffentlicher Bereich für Entwickler

 

- 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:

bulletLomCoder2.sintEncodeLom(strLom,objLom)
bulletServerLomCoder.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

  1. Aus dem HIT-Projekt werden nur die für den LomCoder notwendigen Sourcen in ein temporäres Verzeichnis kopiert.
  2. 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.
  1. 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.
  2. 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.

 

 

 

horizontal rule

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!