Drucken und Import/Export
Die microtech Software bietet über die COM-Schnittstelle zwei zentrale Mechanismen für die Datenausgabe: den layoutbasierten Import/Export für den Datenaustausch mit externen Systemen und das Drucken für die Erzeugung von Belegen, Listen und Auswertungen. Beide Wege nutzen ein Layout-Konzept, das in der Oberfläche der microtech Software konfiguriert und dann per COM angesteuert wird.
Ergänzend stehen mit der Dokumentenverwaltung und dem Ausgabeverzeichnis zwei SpecialObjects zur Verfügung, die den Zugriff auf gespeicherte Dokumente und erzeugte Druckausgaben ermöglichen.
Import und Export über Layouts
Layout-Konzept
Import und Export über COM basieren auf sogenannten Layout-Dateien (.bpl). Diese Layouts definieren, welche Felder in welchem Format importiert oder exportiert werden. Sie werden vorab in der microtech Software erstellt:
- Navigieren Sie zu DATEI → SCHNITTSTELLEN → EXPORT (oder IMPORT).
- Wählen Sie den gewünschten Bereich (z. B. Buchhaltung → Stammdaten → Kontenplan).
- Gestalten bzw. konfigurieren Sie das Layout so, dass beim Abarbeiten kein manuelles Eingreifen erforderlich ist.
- Ziehen Sie das fertige Layout per Drag & Drop auf den Desktop oder in den Explorer.
Die so erzeugte .bpl-Datei wird anschließend in Ihrem COM-Projekt verwendet. Jede Solution-Partner-Applikation besitzt einen eigenen Namespace für Layouts - Namenskollisionen mit anderen Partnern sind daher ausgeschlossen.
Der Zugriff erfolgt über drei zusammenspielende Interfaces:
IAutoLayoutGroup verwaltet die Sammlung importierter Layouts. Sie erhalten eine Instanz über OpenLayoutGroup am Application-Objekt und importieren darüber .bpl-Dateien aus dem Dateisystem oder aus einem Stream.
IAutoLayout repräsentiert ein einzelnes Layout innerhalb der Gruppe. Von hier aus starten Sie den Import- oder Export-Vorgang, der ein IAutoPreparedLayout zurückgibt.
IAutoPreparedLayout (und die Erweiterungen IAutoPreparedLayout2 / IAutoPreparedLayout3) ist das ausführbare Layout-Objekt. Hier konfigurieren Sie optional die Ausgabedatei, modifizieren die Exportdaten und führen den Vorgang schließlich mit Execute aus.
LayoutGroup ermitteln
Um ein Layout korrekt zu öffnen, benötigen Sie zwei Parameter für OpenLayoutGroup: das Modulkürzel und den Gruppenbezeichner. Diese können Sie mit der Methode PossibleLayoutGroup ermitteln:
LayoutGroup ermitteln (Delphi-Pseudocode)
BpApp.SelectMand('mein Mandant');
BpTbl := BpApp.DataSetInfos('OffenePosten').CreateDataSet;
ShowMessage(BpApp.PossibleLayoutGroup('Au', BpTbl.Name));
Der Rückgabewert ist eine kommaseparierte Liste möglicher Gruppenbezeichner. Diese setzen sich wie folgt zusammen: Die ersten zwei Buchstaben bezeichnen das Modul (z. B. Au für Auftrag, Fi für FiBu, Lo für Lohn, Su für Support), gefolgt von drei Buchstaben für das Einsatzgebiet (z. B. Adr für Adressen), dann Exp oder Imp für Export oder Import, und schließlich Liste (normales Layout) oder Grp (Gruppenlayout - nicht empfohlen).
PossibleLayoutGroup für alle Module auslesen (C#)
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Anmeldename:");
string Anmeldename = Console.ReadLine();
Console.WriteLine("Passwort:");
string Password = Console.ReadLine();
Console.WriteLine("Firmenname/ConnectionString:");
string ConnectionString = Console.ReadLine();
BpNT.IAutoApplication17 app = new BpNT.ApplicationClass();
try
{
app.Init(ConnectionString, "", Anmeldename, Password);
Console.WriteLine("Mandant:");
string Mandant = Console.ReadLine();
app.SelectMand(Mandant);
Console.WriteLine("Tabelle:");
string Table = Console.ReadLine();
IAutoDataSet14 dataSet = app.DataSetInfos[Table].CreateDataSet();
Console.WriteLine("Lets go!");
try
{
try
{
Console.WriteLine("Auftrag: " + app.PossibleLayoutGroup["Au", dataSet.Name]);
}
catch (Exception ex)
{
Console.WriteLine("Auftrag error: " + ex.Message);
}
try
{
Console.WriteLine("Fibu: " + app.PossibleLayoutGroup["Fi", dataSet.Name]);
}
catch (Exception ex)
{
Console.WriteLine("Fibu error: " + ex.Message);
}
try
{
Console.WriteLine("Lohn: " + app.PossibleLayoutGroup["Lo", dataSet.Name]);
}
catch (Exception ex)
{
Console.WriteLine("Lohn error: " + ex.Message);
}
try
{
Console.WriteLine("Support: " + app.PossibleLayoutGroup["Su", dataSet.Name]);
}
catch (Exception ex)
{
Console.WriteLine("Support error: " + ex.Message);
}
try
{
Console.WriteLine("Global: " + app.PossibleLayoutGroup["Gl", dataSet.Name]);
}
catch (Exception ex)
{
Console.WriteLine("Global error: " + ex.Message);
}
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
}
finally
{
Marshal.ReleaseComObject(dataSet);
dataSet = null;
app.LogOff();
app.DeInit();
Marshal.ReleaseComObject(app);
app = null;
GC.Collect();
}
}
finally
{
Console.WriteLine("LogOff erfolgreich!");
Console.ReadKey();
}
}
}
Dieses Konsolenprogramm fragt interaktiv die Anmeldedaten und einen Tabellennamen ab und gibt dann für jedes Modul (Au, Fi, Lo, Su, Gl) die verfügbaren Layout-Gruppen aus. Nicht jede Tabelle ist in jedem Modul verfügbar - die Fehlerbehandlung per try/catch fängt diese Fälle ab.
Startparameter -ComPrintProp
Sie können die microtech Software mit dem Startparameter -ComPrintProp starten, um die Bezeichner für Import/Export-Layouts direkt in den Eigenschaften der Druck-/Export-Layouts anzuzeigen.
Layout importieren
Ein Layout wird aus einer .bpl-Datei oder einem Stream in die LayoutGroup geladen:
Layout aus Datei importieren (WSH)
Dim BpNT
Dim LayoutGroup
Dim Layout
Dim ExecLayout
Set BpNT = WScript.CreateObject("BpNT.Application")
Call BpNT.Init("Firmenname", "", "Anmeldename", "Password")
Call BpNT.SelectMand("1")
Set LayoutGroup = BpNT.OpenLayoutGroup("Au", "AdrExpListe")
Set Layout = LayoutGroup.ImportLayoutFromFile("C:\testlayout.bpl", "Mein neuer interner Name", True)
Set ExecLayout = Layout.doExport
Call ExecLayout.Execute
Set BpNT = Nothing
ImportLayoutFromFile erwartet den vollständigen Dateipfad, einen internen Namen für das Layout und einen Boolean, der angibt, ob ein vorhandenes Layout gleichen Namens überschrieben werden soll. Wird aOverwrite auf False gesetzt und der Name existiert bereits, wird ein neuer Name vergeben und über den aLayoutName-Parameter (in/out) zurückgegeben.
ImportLayoutFromStream funktioniert analog, erwartet aber statt eines Dateipfads ein IUnknown-Interface, das IStream implementiert. Die Leseoperation startet an der aktuellen Position des Streams.
Export durchführen
Um einen Export auszuführen, rufen Sie doExport auf dem IAutoLayout-Objekt auf. Das zurückgegebene IAutoPreparedLayout können Sie vor der Ausführung optional modifizieren:
Export mit Dateipfad-Anpassung (VBA)
Public Sub LayoutPfad()
Dim BpNT As BpNT.Application
Dim LayoutGroup As AutoLayoutGroup
Dim Layout As AutoLayout
Dim ExecLayout As AutoPreparedLayout
Dim ReturnName As String
Set BpNT = CreateObject("BpNT.Application")
Call BpNT.Init("Firmenname", "", "Anmeldename", "Password")
Call BpNT.SelectMand("1")
Set LayoutGroup = BpNT.OpenLayoutGroup("Au", "ArtExpListe")
ReturnName = "Test eines Exports"
Set Layout = LayoutGroup.ImportLayoutFromFile("C:\Artikel Export.BPL", ReturnName, True)
Set ExecLayout = Layout.doExport
Call ExecLayout.StartModify
' Dateiextension ermitteln und Exportpfad setzen
ExecLayout.LayoutFile = "C:\ExportDatei" & ExecLayout.GetLayoutFileExt
Call ExecLayout.EndModify
Call ExecLayout.Execute
Set LayoutGroup = Nothing
Set ExecLayout = Nothing
Set Layout = Nothing
Set BpNT = Nothing
End Sub
LayoutFile (ab IAutoPreparedLayout2) gibt den vollständigen Dateipfad inklusive Name und Extension zurück bzw. erlaubt, diesen zu setzen. GetLayoutFileExt liefert nur die Dateiextension. Bei einem ADO-Export enthält LayoutFile den ADO Connection String.
StartModify / EndModify
Wenn Sie StartModify aufgerufen, aber die Änderungen nicht übernehmen möchten, müssen Sie das AutoPreparedLayout erneut erstellen. EndModify finalisiert die Modifikation.
Import durchführen
Für einen Import rufen Sie doImport statt doExport auf. Der restliche Ablauf ist identisch - Execute führt den Import aus.
DataTable modifizieren (Ranges/Filter auf Exportdaten)
Zwischen StartModify und EndModify haben Sie über die Eigenschaft DataTable Zugriff auf ein AutoDataSet, mit dem Sie die Ergebnismenge des Exports einschränken können. Verwenden Sie dafür Ranges und Indizes.
Vorsicht bei Exportdaten
Über DataTable beim Export schreiben Sie direkt in die Originaldaten. Verwenden Sie das DataSet ausschließlich mit Range oder Filter. Änderungen wie Delete, Append oder Edit wirken sich sofort aus - auch wenn EndModify nicht aufgerufen wird. Bei Importen steht DataTable nicht zur Verfügung.
Export mit Range-Einschränkung (VBA)
Public Sub Layout()
Dim BpNT As BpNT.Application
Dim LayoutGroup As AutoLayoutGroup
Dim Layout As AutoLayout
Dim ExecLayout As AutoPreparedLayout
Dim ReturnName As String
Dim Table As AutoDataSet
Set BpNT = CreateObject("BpNT.Application")
Call BpNT.Init("Firmenname", "", "Anmeldename", "Password")
Call BpNT.SelectMand("1")
Set LayoutGroup = BpNT.OpenLayoutGroup("Au", "ArtExpListe")
ReturnName = "Test eines Exports"
Set Layout = LayoutGroup.ImportLayoutFromFile("C:\Artikel Export.BPL", ReturnName, True)
Set ExecLayout = Layout.doExport
Call ExecLayout.StartModify
Set Table = ExecLayout.DataTable
Table.Indices("WgrNr").Select
' Ergebnismenge eingrenzen
Table.SetRangeStart
Table.Fields("WgrNr").AsString = "4"
Table.Fields("ArtNr").AsString = "1"
Table.SetRangeEnd
Table.Fields("WgrNr").AsString = "4"
Table.Fields("ArtNr").AsString = "1000"
Table.ApplyRange
ExecLayout.DataTable = Table
Call ExecLayout.EndModify
Call ExecLayout.Execute
Set LayoutGroup = Nothing
Set Table = Nothing
Set ExecLayout = Nothing
Set BpNT = Nothing
End Sub
Kodierung der Import-Datei
Ab IAutoPreparedLayout3 (Build 5144) kann über die Eigenschaft LayoutFileEncoding das Encoding der Eingabedatei für einen Import festgelegt werden. Ohne explizite Angabe versucht die microtech Software, das Encoding automatisch zu erkennen - dies kann unter Umständen eine Rückfragemeldung auslösen.
Die möglichen Werte der Aufzählung EncodingType sind:
| Wert | Konstante | Bedeutung |
|---|---|---|
| 0 | encNone | Unbestimmt - automatische Erkennung (kann Meldung auslösen) |
| 1 | encAscii | ASCII |
| 2 | encAnsi | ANSI |
| 3 | encUtf8 | UTF-8 |
| 4 | encUnicodeLE | Unicode Little-Endian |
| 5 | encUnicodeBE | Unicode Big-Endian |
Automatische Erkennung ab Build 5184
Ab Build 5184 hat die Eigenschaft LayoutFileEncoding keine Wirkung mehr. Das Encoding wird ab dieser Version automatisch bestimmt.
Drucken über COM
Voraussetzungen
Lizenzierung erforderlich
Das Drucken über COM erfordert zusätzliche Lizenzen und Verträge:
- COM-Aktiv-Developer-Vertrag mit microtech
- List & Label-Lizenz der combit GmbH (www.combit.net) in der passenden Ausbaustufe und Menge
- Zusätzlicher Nutzungsvertrag zur Regelung der Lizenzbedingungen zwischen microtech, combit und Ihnen als Endverbraucher
- RDU-Lizenz (Remote Desktop) für jede automatisierte Druckausgabe ohne Benutzerinteraktion
Ablauf der Freischaltung:
- Fordern Sie den zusätzlichen Vertrag bei microtech an.
- Erwerben Sie die benötigten Lizenzen bei combit.
- Teilen Sie microtech Ihre Registrierungsinformationen mit (Firmenname, Adresse, Ausbaustufe, Seriennummer).
- microtech prüft bei combit die Berechtigung.
- Nach erfolgreicher Prüfung ist der Zugriff auf das Druck-Objekt für die Dauer Ihrer combit-Lizenz freigeschaltet.
Sobald Sie das Drucken-Objekt erstellen, wird eine Remote-Desktop-Lizenz für Ihre Verbindung verwendet. Ist keine Lizenz vorhanden oder sind alle belegt, wird das Objekt nicht erstellt. Solange die Instanz besteht, bleibt die Anmeldung als Remote-Zugriff registriert.
Druck-Objekt erstellen
Das Druck-SpecialObject wird über GetSpecialObject mit dem Wert soDrucken (= 10) erzeugt:
Druck-Objekt erstellen (Delphi)
Drucken := (BpApp.GetSpecialObject(soDrucken) as AutoSpecialDrucken);
Druckgruppen und Drucklayouts öffnen
Analog zum Import/Export-Bereich öffnen Sie über OpenLayoutGroup am Druck-Objekt eine Gruppe von Drucklayouts. Innerhalb dieser Gruppe greifen Sie per Item auf einzelne IAutoDruckLayout-Objekte zu.
Die Methode PossibleLayoutGroup am IAutoDrucken-Interface liefert die möglichen Druckgruppen für eine bestimmte Tabelle.
Lizenzprüfung bei OpenLayoutGroup
Beim Aufruf von OpenLayoutGroup findet eine Prüfung auf eine Remote-Desktop-Lizenz statt. Ist kein namensgebundener Schlüssel vorhanden oder sind alle Verbindungen belegt, wird eine Exception ausgelöst.
Druck ausführen
Der eigentliche Druck wird über doPrintDirect am IAutoDruckLayout-Objekt angestoßen:
Rechnung drucken (Delphi)
function TVorgangDruck.DoExecute(aDirect: Boolean): Boolean;
var
Drucken: AutoSpecialDrucken;
Group: AutoDruckenLayoutGroup;
Layout: AutoDruckLayout;
tbl: AutoDataSet;
begin
Result := False;
Drucken := (BpApp.GetSpecialObject(soDrucken) as AutoSpecialDrucken);
try
Group := Drucken.OpenLayoutGroup('Au', 'VogDrVorgang');
Layout := Group.Item['(Rechnung I)'];
tbl := BpApp.DataSetInfos['Vorgang'].CreateDataSet;
tbl.First;
// Hier den entsprechenden Rechnungsdatensatz positionieren
// WICHTIG: Stimmen Datensatzart und Druck nicht überein,
// kann es zu Fehlern oder verfälschten Ausdrucken kommen.
Layout.doPrintDirect(tbl, aDirect);
finally
tbl := nil;
Layout := nil;
Group := nil;
Drucken := nil;
end;
Result := True;
end;
doPrintDirect erwartet ein AutoDataSet mit dem zu druckenden Datensatz und einen Boolean aDirect. Ist aDirect auf True gesetzt, wird der Druck ohne Benutzerinteraktion ausgeführt. Stehen keine Daten zur Verfügung, wird eine Exception ausgelöst.
Ausnahme: Bei Chefauswertungen, die fest definiert sind und keine Sortier- oder Range-Möglichkeiten haben, genügt die Übergabe einer beliebigen Tabelle.
Faxausgabe ist ab IAutoDruckLayout3 über doFaxDirect verfügbar. Die Parameter sind identisch zu doPrintDirect.
Serialisierung bei gleichzeitigen Druckaufträgen
Ab Build 5034 ist für doPrintDirect und doFaxDirect eine interne Serialisierung eingebaut. Pro Computer kann nur ein Thread gleichzeitig in doPrintDirect oder doFaxDirect sein. Weitere Aufrufe werden in eine Warteschlange eingereiht und versuchen, innerhalb der durch RequestRetryCount und RequestTimeOut definierten Parameter einen Druckslot zu erhalten.
Gelingt dies nicht, wird eine OleException ausgelöst. Sie können diese Exception nutzen, um den Druckvorgang erneut einzuleiten.
Druckername festlegen
Ab IAutoDruckLayout3 kann über die Eigenschaft PrinterName ein bestimmter Drucker als Vorauswahl gesetzt werden. Dieser Wert wird nur beachtet, wenn der Druck direkt (ohne Druckauswahl-Dialog) ausgeführt wird. Bei einer Faxausgabe über doFaxDirect wird PrinterName ignoriert.
Druckernamen vorab prüfen
Es findet keine Gültigkeitsprüfung statt, ob der angegebene Drucker existiert. Fragen Sie die gültigen Druckernamen vorab über das Betriebssystem ab.
PDF-Export und Exportformate
Anstelle eines physischen Drucks können Sie über das IAutoSpecialDruckOptions-Interface (erreichbar ab IAutoDruckLayout4 über die Eigenschaft Printer) einen Dateiexport konfigurieren:
Export als PDF (Delphi)
// Druck-Objekte erzeugen
DataSet := BpApp.DataSetInfos['Vorgang'].CreateDataSet;
DataSet.First;
Drucken := BpApp.GetSpecialObject(soDrucken);
Gruppe := Drucken.OpenLayoutGroup('Au', 'VogDrVorgang');
Layout := Gruppe.Item('(Rechnung I)');
// Export konfigurieren
Layout.Printer.FileExport := True;
Layout.Printer.FileOverwrite := True;
Layout.Printer.FileFormat := 2; // PDF
Layout.Printer.FileName := 'C:\Tmp\Rechnung.pdf';
Layout.Printer.Save;
Layout.doPrintDirect(DataSet, True);
Die folgende Tabelle zeigt die verfügbaren Exportformate (Stand: 26.08.2016). Je nach Ausbaustufe, Programmversion und Benutzerrechten können einzelne Formate abweichen.
| Wert | Format | Beschreibung |
|---|---|---|
| 0 | LL | List & Label Format |
| 1 | XLS | Excel |
| 2 | Adobe Portable Document Format | |
| 3 | RTF | Rich Text Format |
| 4 | HTML | Hypertext Markup Language |
| 5 | MHTML | Mimetype HTML |
| 6 | XML | Extendable Markup Language |
| 7 | JPG | JPG (kann mehrere Dateien erzeugen) |
| 8 | BMP | BMP (kann mehrere Dateien erzeugen) |
| 9 | EMF | EMF (kann mehrere Dateien erzeugen) |
| 10 | TIFF | TIFF (kann mehrere Dateien erzeugen) |
| 11 | MultiTIFF | Multipage TIFF |
| 12 | TXT | Textbasierter Export |
| 13 | XPS | XML Paper Specification |
| 14 | JPG | JPG (über microtech Software) |
| 15 | EMF | EMF (über microtech Software) |
| 16 | PDF (über microtech Software) | |
| 19 | XLSX | Excel im neuen Format |
| 20 | Word | Word-Dokument |
| 21 | PowerPoint | PowerPoint-Präsentation |
| 22 | SVG | Scalable Vector Graphics |
Verfügbare Exportformate auslesen (Delphi)
Buffer := '';
try
for I := 0 to 100 do
begin
Layout.Printer.FileFormat := I;
Buffer := Buffer + ' - ' + Layout.Printer.FileFormatName + ' (' + IntToStr(I) + ')';
end;
except
// Fehler bei Überschreitung der Formatanzahl abfangen
end;
ShowMessage(Buffer);
Druckoptionen (IAutoSpecialDruckOptions)
Das IAutoSpecialDruckOptions-Interface bietet folgende zentrale Eigenschaften:
| Eigenschaft | Typ | Beschreibung |
|---|---|---|
PrintKind | enum PrintKind | Bestimmt die Druckart: pkEineSeite (0), pkErsteFolgeSeiten (1), pkBeliebigeSeiten (2) |
FileName | BSTR | Zielname der Exportdatei. Bei manchen Formaten nur der Basisname. |
FileOverwrite | VARIANT_BOOL | Vorhandene Datei beim Export überschreiben |
FileFormat | long | Exportformat (siehe Tabelle oben) |
FileFormatName | BSTR | Name des aktuellen Exportformats (nur lesend) |
FileExport | VARIANT_BOOL | True = Export, False = Druck |
Save | Methode | Speichert die Druckereinstellungen persistent |
AreaCount | Methode | Gibt die Anzahl der Druckbereiche zurück |
AreaEntrys | Methode | Gibt das IAutoSpecialPrinterArea-Interface für einen bestimmten Druckbereich zurück |
Druckbereiche konfigurieren (IAutoSpecialPrinterArea)
Über AreaEntrys am IAutoSpecialDruckOptions-Interface erhalten Sie Zugriff auf die einzelnen Druckbereiche. Viele der Eigenschaften entsprechen den Steuerungsoptionen der Windows-DEVMODE-Struktur.
Die wichtigsten Eigenschaften:
| Eigenschaft | Beschreibung |
|---|---|
Name | Name des Druckbereichs |
DeviceName | Name des Druckers |
Condition | Formel, die bestimmt, welche Druckebene verwendet wird |
Copies | Anzahl der Kopien (ganzzahlig) |
Duplex | Duplexdruck aktivieren (0 oder 1) |
Collate | Sortierreihenfolge beim Druck (0 oder 1) |
FitPage | Ausdruck auf Druckbereich einpassen |
ForcePaperFormat | Ausgabeformat erzwingen |
PaperFormat | Papierformat |
PaperOrientation | Papierausrichtung |
SourceTray | Papierschacht |
ShowInPrintDialog | Im Druckdialog anzeigen |
DeviceDevMode | Windows DEVMODE-Daten |
DeviceExtraData | Zusätzliche Gerätedaten |
Für Label-Drucke stehen zusätzlich die Eigenschaften LayoutXCount, LayoutXDistance, LayoutXOffset, LayoutXSize, LayoutYCount, LayoutYDistance, LayoutYOffset und LayoutYSize zur Verfügung.
Dokumentenverwaltung (IAutoDokument)
Das SpecialObject IAutoDokument ermöglicht den Zugriff auf die integrierte Dokumentenverwaltung der microtech Software. Es wird über GetSpecialObject mit dem Wert soDokumente (= 2) erstellt.
Dokumentenerweiterung
Dieses Objekt funktioniert standardmäßig nur in microtech-Versionen mit Dokumentenerweiterung (NE-1046). Bei einer Lizenzierung Ihrer Schnittstelle kann das Objekt jedoch auch ohne diese Erweiterung eingesetzt werden.
Ablauf
InitDB- Positioniert die Dokumentenverwaltung auf einen Masterdatensatz. Die übergebene Tabelle bestimmt, welchem Datensatz Dokumente zugeordnet werden. Wird die Tabelle nicht unterstützt, wird der Bereich auf „(Allgemein)" gesetzt. Den Bereich „(Allgemein)" können Sie gezielt über die Mandanten-Tabelle erreichen.Append- Legt einen neuen Eintrag in der Dokumententabelle an.SetDokData- Importiert eine Datei in den aktuellen Dokumenten-Datensatz. Der ParameterImportArtbestimmt die Art des Imports:
| Wert | Konstante | Beschreibung |
|---|---|---|
| 0 | doiDatei | Als Datei einfügen |
| 1 | doiOLE | Als OLE-Container einfügen (falls die Dateiendung OLE-fähig ist) |
| 2 | doiLink | Als Verknüpfung einfügen |
| 3 | doiFileLink | Als Verknüpfung auf die zentrale Server-Freigabe speichern |
Post- Speichert den Datensatz.
Über Edit kann ein vorhandener Datensatz geändert werden. Die Eigenschaft DataSet gibt das zugehörige AutoDataSet mit allen Feldern der Dokumententabelle zurück, über das Sie z. B. Name und Wichtigkeit setzen können.
Dokument zur Adresse 10000 hinzufügen (Delphi Script)
Dokument := BpApp.GetSpecialObject(soDokumente);
MasterDb := BpApp.DataSetInfos('Adressen').CreateDataSet;
MasterDb.Indices.Item('NrNum').Select;
MasterDb.SetKey;
MasterDb.Fields('AdrNr').AsString := '10000';
MasterDb.GotoNearest;
Dokument.InitDB(MasterDb);
Dokument.Append;
Dokument.SetDokData(doiOLE, 'C:\Dokumente\Bild.jpg');
Dokument.DataSet.Fields['Na'].AsString := 'ComApp1';
Dokument.DataSet.Fields['Wichtig'].AsInteger := 1;
Dokument.Post;
MasterDb := nil;
Dokument := nil;
Dokumente auslesen
Ab IAutoDokument2 stehen Methoden zum Auslesen vorhandener Dokumente zur Verfügung:
GetDokData(FileName) speichert das Dokument des aktuellen Datensatzes unter dem angegebenen Dateipfad.
GetDokDataStream(OutputStream) schreibt das Dokument in einen übergebenen Stream. Der Parameter muss das IStream-Interface implementieren.
Ab IAutoDokument3 (Build 4002) existieren die erweiterten Varianten GetDokDataEx und GetDokDataStreamEx, die Fehlermeldungen im Rückgabewert statt in einem Dialogfenster liefern. Ein leerer Rückgabestring bedeutet, dass kein Fehler aufgetreten ist.
SetDokDataStream (ab IAutoDokument2) importiert ein Dokument aus einem Stream. Der Stream muss IStream implementieren und auf der Anfangsposition des Dokuments stehen. Die Parameter Name und Ext bestimmen den Anzeigenamen und die Dateiextension (z. B. .pdf).
Ausgabeverzeichnis (IAutoSpecialAusgabeVerzeichnis)
Das SpecialObject IAutoSpecialAusgabeVerzeichnis (ab Build 5000) ermöglicht den Zugriff auf das Ausgabeverzeichnis der microtech Software, in dem erzeugte Drucke, Faxe und E-Mails abgelegt werden.
Drucke und Faxe werden als List & Label-Dateien (.ll) gespeichert. E-Mails werden in einem proprietären Format auf Basis von Microsoft Compound Documents (Structured Storage) abgelegt.
Methoden
InitDB(MasterData) - Positioniert das SpecialObject auf einen Datensatz. Gültige Tabellen sind AusgabeVerzeichnis und AusgabeVerzeichnisHis.
SaveToFile(FileName) / SaveToStream(Stream) - Speichert die Datei des aktuellen Datensatzes als Datei oder in einen Stream. Vorhandene Dateien werden überschrieben.
LoadFromFile(FileName) / LoadFromStream(Stream) - Lädt eine Datei in den aktuellen Datensatz. Die Tabelle muss sich im Editiermodus befinden (Append oder Edit).
Druckdesigner-Version beachten
Beim Import von List & Label-Dateien muss die Druckdesigner-Version der Datei zur Version in der microtech Software passen. Eine .ll-Datei, die mit Version 19 erstellt wurde, wird in einer Installation mit Druckdesigner 13 nicht vollständig angezeigt.
Ausgabeverzeichnis: Speichern und Laden (Delphi)
function SoAusgabeVerzeichnis;
const
TypDruck = 0;
TypFax = 1;
TypEmail = 2;
var
Buffer: string;
begin
SpecialObj := BpApp.GetSpecialObject(16); // soAusgabeVerzeichnis
Tbl := BpApp.DataSetInfos('Ausgabeverzeichnis').CreateDataSet;
Tbl.First; // Hier die Positionierung vornehmen
SpecialObj.InitDb(Tbl);
Buffer := 'C:\temp\test.';
case Tbl.Fields('Typ').AsInteger of
TypDruck: Buffer := Buffer + 'll';
TypFax: Buffer := Buffer + 'll';
TypEmail: Buffer := Buffer + 'CompDoc';
end;
SpecialObj.SaveToFile(Buffer);
Tbl.Edit;
SpecialObj.LoadFromFile('C:\temp\preview.ll');
Tbl.Post;
end;