# Beispiel - Migration einer Dokumenten-Datenbank

Für unser internes "Verbesserungs-Vorschlags-Wesen" musste eine Datenbank mit rund 1400 Einträgen in ELO migriert werden. In dieser Datenbank waren die Metadaten und Dokumente enthalten. Auf der ELO Seite sollte aus jeder Eingabe der Metadaten ein Ordner erzeugt werden, welches das Dokument dann als Untereintrag enthalten soll. Für die Migration wurde als führendes Tool der ELOas gewählt.

Da der ELOas im Augenblick noch keine Dokumente erzeugen kann, musste in einem Vorverarbeitungsschritt erst mal zu jedem Ordner ein Dummy Eintrag angelegt werden. Zum Glück haben die Einträge in der Datenbank eine mit 1 beginnende fortlaufende Nummer bis 1440. Man kann die Dummy Ordner deshalb relativ leicht durch ein VBS Skript erzeugen. Alle Ordner werden in einem Schrank mit der Objekt-Id 274312 angelegt.

Set ELO = CreateObject("ELO.professional")
Elo.CheckUpdate 0
for i=1 to 1440
    call Elo.PrepareObjectEx( 0, 4, 337 )
    Elo.ObjShort="TrackId " & i
    Elo.ObjIndex="#274312"
    call Elo.SetObjAttrib(2, i)
    call Elo.SetObjAttrib(0, "GilleM")
    call Elo.SetObjAttrib(3, "Produktverbesserung")
    Elo.UpdateObject
next
Elo.CheckUpdate 1

Als Nächstes kommt dann der ELOas zum Einsatz. Die Daten werden aus einer SQL Datenbank geholt:

"select Bearbeiter, Email, DerBetreff, LTrim(BunFeld1) BunFeld1,
        KlassenName, Auftrag
                from [InetHelpDesk].[dbo].tblAuftraege a,
                     [InetHelpDesk].[dbo].tblBuendel b,
                     [InetHelpDesk].[dbo].tblKlasse c,
                     [InetHelpDesk].[dbo].tblUser d
                        where a.BunID = b.BunId
                                and a.KlaID = c.KlaID
                                and a.UsrID = d.UsrID
                                and AufID = " + ETS_COUNT

SQL-Datenbank

Abb.: SQL-Datenbank

Es handelt sich um ein etwas umfangreicheres SELECT-Statement, welches aber ansonsten keine Besonderheiten bietet. Lediglich ein Punkt ist erwähnenswert: in der Select-Liste gibt es eine Spalte LTrim(BunFeld1) BunFeld1. In dem Datenbankfeld BunFeld1 liegen die Daten zum Teil mit führenden Leerzeichen, die nicht gewünscht sind. Diese werden mit LTrim entfernt. Dann hätte die Spalte aber keinen Namen mehr, deshalb wird anschließend noch der Spaltenname wieder mit BunFeld1 angegeben. Diese Technik sollte man immer anwenden, wenn man in der Select Liste mit berechneten Werten arbeiten will.

Das komplette Ruleset sieht so aus:

<ruleset>
    <base>
        <name>ImportTracker</name>
        <search>
            <name>"ETS_COUNT"</name>
            <value>"*"</value>
            <mask>337</mask>
            <max>200</max>
        </search>
        <interval>1H</interval>
    </base>
<rule>
    <name>Rule1</name>
    <condition></condition>
    <script>
        /* Hier werden die Daten zum aktuellen Ordner
           aus der Datenbank geladen */
        var item = db.getLine(1, "select Bearbeiter, Email, DerBetreff,
                LTrim(BunFeld1) BunFeld1, KlassenName, Auftrag
                        from [InetHelpDesk].[dbo].tblAuftraege a,
                             [InetHelpDesk].[dbo].tblBuendel b,
                             [InetHelpDesk].[dbo].tblKlasse c,
                             [InetHelpDesk].[dbo].tblUser d
                                where a.BunID = b.BunId
                                        and a.KlaID = c.KlaID
                                        and a.UsrID = d.UsrID
                                        and AufID = " + ETS_COUNT);
        /* ETS_COUNT enthält die Record-Nummer,
           sie wird nach erfolgreicher Bearbeitung geleert. */
        ETS_COUNT = "";
        /* Das Kurzbezeichnungs-Feld wird aus der Datenbank gefüllt,
           maximale Feldlänge beachten! */
        NAME = item.DerBetreff;
        if (NAME == "") { NAME = "unknown"; }
        if (NAME.length() > 127) { NAME = NAME.substring(0, 126); }
        // Der Initiator wird aus der Datenbank gefüllt.
        ETS_MAIL = item.Email;
        /* Das Thema-Feld war in der Datenbank mit anderen Stichwörtern
           belegt als im Repository
           Deshalb gibt es hier eine Übersetzungstabelle.
           Im ELO wird mit Spaltenindex gearbeitet. */
        var thema = item.BunFeld1;
        if (thema == "Administration, Installation, Reporting") {
                thema = "Administration¶Installation¶Reporting"; }
        if (thema == "Anzeigen, Sortieren, Bearbeiten, Versenden, Verwalten, Suchen") {
                thema = "Dokumentenbearbeitung¶Viewer¶Strukturbearbeitung¶Suche"; }
        if (thema == "Anzeigen, Bearbeiten, Sortieren, Versenden, Verwalten, Suchen") {
                thema = "Dokumentenbearbeitung¶Viewer¶Strukturbearbeitung¶Suche"; }
        if (thema == "Benutzeroberfläche, Design, Menüs, Navigation") {
                thema = "Usability¶Oberfläche"; }
        if (thema == "Haftnotizen, Stempel") {
                thema = "Annotationen"; }
        if (thema == "Office / Explorer Integration") {
                thema = "Office Integration¶OS Integration"; }
        if (thema == "Offline Verfügbarkeit") {
                thema = "Offline"; }
        if (thema == "Links, Referenzen, Dateianhänge") {
                thema = "Links¶Referenzen"; }
        if (thema == "Scannen, Postbox, Konvertieren, Drucken") {
                thema = "Scannen¶Postbox¶Konvertieren¶Drucken"; }
        if (thema == "Sicherheit, Anmeldung, Verschlüsselung, Benutzerrechte") {
                thema = "Benutzerrechte"; }
        if (thema == "Stichwortlisten, Metadaten, Ablagemasken, Versionierung") {
                thema = "Metadaten¶Dokumentenablage"; }
        if (thema == "Workflow, Aufgaben") {
                thema = "Workflow¶Aufgaben"; }
        if (thema == "Schnittstellen, Scripte") {
                thema = "Scripting¶Schnittstellen"; }
        ETS_THEMA = thema;
        ETS_USER = "Produktmanagement";
        ETS_STATUS_INT = item.KlassenName;
        EM_WRITE_CHANGED = true;
        /* Die Datenbankinformation ist nun eingetragen. Es fehlt noch das Dokument.
           Dieses wird als HTML Datei mit einer XML Steuerungsdatei für den
           ELO XML Importer erstellt. Zuerst wird die HTML Datei geschrieben:*/
        var id = Sord.getId();
        var dataFile = new File("d:\\temp\\trk\\" + id + ".htm");
        Utils.stringToFile(item.Auftrag, dataFile, "ISO-8859-15");
        /* als nächstes wird der XML Datenstrom erzeugt.
           Da die eigentliche Eingabe der Metadaten am Ordner hängt,
           sind hier nur rudimentäre Metadaten vorhanden. */
        var xmlDesc = NAME.replace("\"", "'").
                           replace("&amp;", "&amp;amp;").
                           replace("&lt;", "&amp;lt;").
                           replace("&gt;", "&amp;gt;");
        var xmlFile = new File("d:\\temp\\trk\\" + id + ".xml");
        var xmlText = "&lt;?xml version=\"1.0\" ?&gt;&lt;eloobjlist
                       ver=\"1.0\"&gt;&lt;obj&gt;&lt;desc value=\"";
        xmlText = xmlText + xmlDesc;
        xmlText = xmlText +
                  "\"/&gt;&lt;type value=\"0\"/&gt;&lt;destlist&gt;&lt;destination
                          type=\"1\" value=\"#";
        xmlText = xmlText + id;
        xmlText = xmlText + "\"/&gt;&lt;/destlist&gt;&lt;docfile name=\"";
        xmlText = xmlText + id;
        xmlText = xmlText + ".htm\"/&gt;&lt;/obj&gt;&lt;/eloobjlist&gt;";
        // Zuletzt wird die XML Datei geschrieben.
        Utils.stringToFile(xmlText, xmlFile, "UTF-8");
    </script>
</rule>
<rule>
    <name>Global Error Rule</name>
    <condition>OnError</condition>
    <script></script>
</rule>
</ruleset>

Nachdem der ELOas die Eingabe der Metadaten aus der Datenbank ergänzt hat und die HTML und XML Dokumentendateien erstellt hat, kommt der ELO XML Importer ins Spiel. Er importiert nun die HTML Dateien in den jeweiligen Ordner. Damit ist der Migrationsvorgang abgeschlossen. Aufwand für das komplette Projekt: ca. 4 Stunden.

Zuletzt aktualisiert: 31. Juli 2023 um 08:32