Die Klasse CSV dient der Batchvearbeitung von CSV-Dateien in der WinIBW3.
Dabei arbeitet die Klasse im Moment mit den Skripten "ZDB_BatchCsv.xul" und "ZDB_BatchCsv.js" zusammen, um ein Interface für die Konfiguration der Batchbearbeitung zu erlauben.
Die Klasse CSV stellt dann Eigenschaften der Konfiguration und Methoden zur Bearbeitung der CSV-Batchvearbeitung bereit. WinIBW-Entwickler können dann die Klasse mit ihren eigenen Verarbeitungsmethoden erweitern, um die konkreten Datensatzänderungen durchzuführen.
Die drei Dateien "csv.js", "ZDB_BatchCsv.xul" und "ZDB_BatchCSV.js" müssen an den folgenden Orten abgelegt werden:
chrome/ibw/content/xul/ZDB_BatchCsv.xul chrome/ibw/content/xul/ZDB_BatchCSV.js scripts/csv.js
Die Datei csv.js muss in der Konfigurationsdatei setup.js includiert werden:
pref("ibw.standardScripts.script.LAUFENDE_NUMMER", "resource:/scripts/csv.js");
Typ Funktion
Name der Callback Funktion, die vom Entwickler selbst definiert wird un die die Klasse erweitert.
Default Wert: function() {};
Typ Objekt
Schlüsselwörter, die zur Konfiguration der Batchverarbeitung im Interface angezeigt werden.
Default Wert: ["","ZDB-ID","URL","Band Beginn","Jahr Beginn","Heft Beginn","Band Ende","Jahr Ende","Heft Ende","Suchstring"];
Typ String
Ist das Schlüsselwort, welches den unikalen Wert repräsentiert, nachdem zusammen mit dem Wert der Eigenschaft 'searchindex' gesucht wird, um genau einen Datensatz zu finden.
Wenn deine CSV-Datei eine Spalte mit PPNs enthält, dann repräsentiert der Wert von id_key immer die jeweilige PPN, nach der gesucht wird. Sinnvoller Weise würde man id_key dann den Wert 'PPN' geben.
Schema: f <id_key>
Beispiel: f ppn 12345678
Default Wert: "ZDB-ID"
Typ String
Ist der Suchindex, der im Zusammenhang mit id_key verwendet wird. Repräsentiert der Wert von id_key eine PPN, dann muss der Wert von searchindex 'ppn' lauten.
Default Wert: "zdb"
Typ Bool
True oder False geben an, ob die IDN des Bibliothekssatzes ermittelt werden soll. Wird True gesetzt, dann steht durch Aufruf der Methode __csvBatch die globale Eigenschaft 'eigene_bibliothek' bereit.
Default Wert: true
Typ String
Name der LogDatei, die im Anwendungspfad der WinIBW erstellt wird.
Default Wert: "ZDB_LOG.txt"
Typ String
IDN/PPN des Bbliothekssatzes
Default Wert: ""
CSV
Stellt alle (default-)Eigenschaften und Methoden der Klasse bereit.
Setzt die Eigenschaften der Klasse
- Function callback
- Object keys
- String id_key
- String searchindex
- Bool withbib
- String logFilename
Setzt die Eigenschaft callback.
- Function callback
Setzt die Eigenschaft logFilename.
- String logFilename
Setzt die Eigenschaft eigene_bibliothek.
- String eigene_bibliothek
Initiert den Aufruf des Konfigurations-Interface
- Object params : Objekt mit allen Eigenschaften
- String text : Freitext aus dem Konfigurations-Interface
- String isil : ISIL aus dem Konfigurations-Interface
- String code : Dropdown-Code aus dem Konfigurations-Interface
- String startLine : CSV-Zeile, ab der die Bearbeitung starten soll
- String csvFilename : Name der CSV-Datei
- String delimiter : Trennzeichen in der CSV-Datei
Initiiert die Batchverarbeitung der CSV-Datei auf Grundlage der Konfiguration. Ruft Datensatz zur Verarbeitung anhand von 'searchindex' und 'id_key' auf.
- Array line : Array mit allen Werten einer CSV-Zeile
- String eigene_bibliothek : IDN/PPN des Bibliothekssatzes (wenn Eigenschaft 'withbib = true')
Initiiert die Batchverarbeitung der CSV-Datei auf Grundlage der Konfiguration. Im Gegensatz zu __csvBatch ruft __csvBatchImport nicht einzelne Datensätze zur Bearbeitung auf, sondern stellt nur die Werte einzelner CSV-Zeilen breit. Sinnvoll für direkten Import von Daten.
Initiiert die Batchverarbeitung der CSV-Datei ohne vorherige Konfiguration. Funktioniert ähnlich wie __csvBatchImport. Die keys, die mit der methode __csvSetProperties definiert werden, müssen mit den Spalten der CSV-Datei übereinstimmen. Siehe Beispiel
- Array line : Array mit allen Werten einer CSV-Zeile
Erlaubt das Speichern von Log-Einträgen während der Bearbeitung.
String message
Erlaubt die Ausgabe einer Fehlermeldung
String msgText
Stellt eine Speicherroutine bereit.
- Bool save
- String message
Nach Aufruf der Methode wird zunächst gesprüft, ob überhaupt gespeichert werden soll (save == true) oder der Datensatz unverändert verlassen werden soll (save == false).
Soll der Datensatz nicht gespeichert werden, wird der Datensatz veralssen und 0 zurück gegeben.
Ist save == true wird zusätzlich gesprüft, ob der Datensatz überhaupt gespeichert werden kann. Kann der Datensatz nicht gespeichert werden, wird ein Eintrag in die LOG-Datei geschrieben und der Wert 0 zurückgegeben.
Kann der Datensatz gespeichert werden wird der Wert 1 zurückgegeben.
Dies sind Methoden, die zur internen Bearbeitung gebraucht werden.
Müssen diese Methoden als Prototypen definiert sein?
Beispiel mit Konfigurationsmaske
// erstelle eine neue Function
function csvBatchIstWertVorhanden()
{
// initiiere das CSV-Objekt
// alle Eigenschaften und Methoden des Objekts wurden nun auf die Variable csv vererbt
var csv = new CSV();
// erweitere nun die Klasse CSV durch deine eigene Methode
csv.meineMethode = function()
{
// mach etwas mit dem Datensatz
}
// setze deine eigenen Eigenschaften
// der erste Parameter ist die Callback Funktion, die Du zuvor erstellt hast
csv.__csvSetProperties(csv.meineMethode,["","ZDB-ID","Suchstring"],'ZDB-ID','zdb',false,"ZDB_LOG.txt");
// initiiere das Konfigurations-Interface
// fange dabei eventuelle Fehler ab
try
{
csv.__csvConfig();
// initiiere die Batchbearbeitung
csv.__csvBatch();
}
catch(e)
{
csv.__csvError(e);
}
}
Beispiel ohne Konfigurationsmaske
// erstelle eine neue Function
function csvBatchIstWertVorhanden()
{
// initiiere das CSV-Objekt
var csv = new CSV();
// diese csv muss im Unterverzeichnis 'csv' des Anwendungsprofils liegen.
csv.csvFilename = "test.csv";
// start ab Zeile
csv.startLine = 1;
// werte getrennt mit
csv.delimiter = ";";
// erweitere nun die Klasse CSV durch deine eigene Methode
csv.meineMethode = function()
{
// mach etwas mit dem Datensatz
// greife auf csv werte zu
if(application.activeWindow.title.find(csv.line['Suchstring'],false,false,true))
{
return application.activeWindow.title.currentLineNumber;
}
else
{
return false;
}
}
// setze deine eigenen Eigenschaften
// der erste Parameter ist die Callback Funktion, die Du zuvor erstellt hast
csv.__csvSetProperties(csv.meineMethode,["","ZDB-ID","Suchstring"],'ZDB-ID','zdb',false,"ZDB_LOG.txt");
// initiiere das Konfigurations-Interface
// fange dabei eventuelle Fehler ab
try
{
// initiiere die Batchbearbeitung
csv.__csvAPI();
}
catch(e)
{
csv.__csvError(e);
}
}
Wie kann nun auf die Eigenschaften und Methoden zugegriffen werden?
Beispiel für die Methoden __csvLOG und __csvError
// versuche in den Korrekturmodus eines Datensatzes zu gelangen
try
{
application.activeWindow.command("k", false);
}
catch(e)
{
// die Variable csv hat alle Methoden der Klasse geerbt
// daher kann über csv.__csvLOG und csv.__csvError auf die Methodev __csvLOG und __csvError zugegriffen werden
csv.__csvLOG("Datensatz kann nicht geoeffnet werden.\nFehlermeldung: " + e);
csv.__csvError("Datensatz kann nicht geoeffnet werden.\nFehlermeldung: " + e);
return;
}
Beispiel für den Zugriff auf Eigenschaften
// zunächst möchtest Du noch eine weitere Methode erstellen, die eine Extra-Aufgabe erledigt
csv.extraMethode = function(wert)
{
// z.B suche nach wert und gib tue bei Erfolg zurück, ansonsten gib false zurück
if(application.activeWindow.title.find(wert,false,false,true))
{
return application.activeWindow.title.currentLineNumber;
}
else
{
return false;
}
}
// Diese Methode möchtest Du mit einem Wert einer Klasseneingenschaft bestücken
// dazu kannst Du z.B. auf csv.line zugreifen und eine CSV-Spalte wählen
// 'Suchstring' wurde im Konfigurations-Interface zuvor mit einer CSV-Spalte verknüpft
var gefunden = csv.extraMethode(csv.line['Suchstring']);
Beispiel für den Zugriff auf die Methode __csvSaveBuffer
// Wenn ein Wert gefunden wurde soll der Datensatz gespeichert werden
// wenn nicht soll der Datensatz verlassen werden
if(!gefunden)
{
csv.__csvSaveBuffer(false,"String " + csv.line['Suchstring'] + " kann nicht gefunden werden.\n");
return;
}
csv.__csvSaveBuffer(true,"String " + csv.line['Suchstring'] + " wurde gefunden.\n");
Beispiel zur Verwendung der Klasse ohne CSV-Dateien:
function setBearbeiten()
{
// initiiere die Klasse
var csv = new CSV();
// setzte den Dateinamen des Logfiles
csv.__csvSetLogFilename("loeschen_LOG.txt");
// setzte die IDN/PPN der eigenen Bibliothek
csv.__csvSetEigeneBibliothek("020593228");
// hole Umfang des Sets
var setSize = application.activeWindow.getVariable("P3GSZ");
i = 1;
do
{
// mach etwas mit dem Set ...
try
{
application.activeWindow.command("k " + i,false);
var idn = application.activeWindow.getVariable("P3GPP");
}
catch(e)
{
// schreib etwas in die Log-Datei ...
csv.__csvLOG(idn + "\tDatensatz kann nicht geoeffnet werden.\nFehlermeldung: " + e);
return;
}
application.activeWindow.title.endOfBuffer();
var neuesFeld = "\n6000 Test";
application.activeWindow.title.insertText(neuesFeld);
// starte Speicherroutine
csv.__csvSaveBuffer(true,idn + "\t" + neuesFeld);
i++;
} while (i <= setSize)
}