Weitere SpecialObjects
Neben den zentralen SpecialObjects für Vorgänge, Dokumente, Lager und Drucken stellt die COM-Aktiv-Schnittstelle eine Reihe weiterer SpecialObjects bereit, die spezifische Funktionsbereiche der microtech Software abdecken. Diese Seite beschreibt deren Einsatz thematisch gruppiert - von Events über Zahlungsverkehr bis hin zur Änderungsüberwachung.
Alle hier beschriebenen SpecialObjects werden über GetSpecialObject bezogen:
Dim obj
Set obj = BpApp.GetSpecialObject(<soKonstante>)
Die vollständige Liste der SpecialObjects-Aufzählungswerte finden Sie in der Interface-Referenz.
Events und Notifications
Die Interfaces IAutoSpecialEvents und IAutoNotificationsEvents ermöglichen es, auf Meldungsfenster der microtech Software programmatisch zu reagieren. Damit lassen sich Dialoge automatisiert beantworten, die sonst eine Benutzerinteraktion erfordern würden.
Funktionsweise
IAutoSpecialEvents stellt über die Methode Events ein AutoNotifications-Objekt bereit. Die meisten Programmiersprachen können ein Event deklarieren, ohne dass dieses Interface direkt verwendet werden muss - es genügt, beim Importieren der Type Library die Option "Ereignis-Unterstützung" zu wählen.
Das eigentliche Callback-Interface ist IAutoNotificationsEvents. Es enthält die Methode OnMeldFenster, die aufgerufen wird, sobald die microtech Software ein Meldungsfenster anzeigt.
OnMeldFenster
HRESULT OnMeldFenster([in] BSTR Text, [in] VARIANT Buttons, [out] long* BtnResult);
Die microtech Software wartet auf die Rückkehr dieser Funktion. Verwenden Sie daher nur mit einer Datenbank Version 2 hier eine Benutzereingabe. Bei Version 1 besteht die Gefahr, dass die Serververbindung verloren geht.
Die Parameter im Überblick:
- Text - Enthält den vollständigen Text des Meldungsfensters.
- Buttons - Ein mehrdimensionales OleVariant-Array mit den Feldern
ModalResult(Integer),Caption(String) undFocused(Boolean). Zugriff überButtons[0,0]für den ModalResult des ersten Buttons,Buttons[0,1]für dessen Beschriftung undButtons[0,2]für den Fokus-Status. - BtnResult - Der Rückgabewert, den Ihr Programm für den Dialog setzt. Übergeben Sie hier den passenden
ModalResult-Wert.
Hinweis für Delphi
Beim Importieren der Type Library können Konstrukte wie Property[Param] := Probleme verursachen. Die entsprechenden Funktionen müssen manuell in der BpNT_TLB.pas nachgeführt werden.
Nachrichten (IAutoSpecialNachricht)
Über IAutoSpecialNachricht (soNachricht) können Benutzer- und Gruppennachrichten innerhalb der microtech Software erstellt werden. Diese erscheinen bei allen Benutzern, denen die Benutzernachrichten-Zuordnung "COM-Schnittstelle" zugewiesen ist.
GrpNachricht
HRESULT GrpNachricht(
[in] BSTR Meldung,
[in] BSTR MeldungArt,
[in] enum naNachrichtArt MeldungWichtigkeit,
[in] VARIANT_BOOL AlleMandanten,
[in] VARIANT_BOOL Erledigt
);
Die Parameter:
- Meldung - Frei definierbarer Text der Nachricht.
- MeldungArt - Ein String (max. 10 Zeichen), der eine Gruppe von Nachrichten kennzeichnet. Dieser Wert wird nicht angezeigt, dient aber als Sequenzkennzeichnung: Eine neuere Nachricht derselben
MeldungArtüberschreibt die vorherige. - MeldungWichtigkeit - Aufzählung
naNachrichtArt:naNormal(0),naLow(1),naHigh(2). - AlleMandanten - Bei
Truewird die Nachricht in allen Mandanten sichtbar. - Erledigt - Bei
Truewerden alle Nachrichten der angegebenenMeldungArtals erledigt (unsichtbar) markiert.
Pseudo-Code: Nachricht erstellen (Delphi)
procedure TForm1.btnGrpNachrichtClick(Sender: TObject);
var
Nachricht: AutoSpecialNachricht;
begin
Nachricht := (BpAutoApplication.GetSpecialObject(soNachricht) as AutoSpecialNachricht);
try
Nachricht.GrpNachricht('mein Meldungstext', 'meinNaType', naNachrichtArt, bAlleMandanten, bErledigt);
finally
Nachricht := nil;
end;
end;
Wichtig zu wissen: Jeder Benutzer erhält seinen eigenen "Erledigt"-Zustand. Wird dieselbe MeldungArt mit Erledigt = True aufgerufen, wird die Nachricht für alle Benutzer als erledigt markiert.
Variablen, eBay-Sync und WebShop-Sync
IAutoSpecialVariablen (soVariablen, Wert 9) bietet Zugriff auf bestimmte Einstellungen der microtech Software - insbesondere auf die Konfiguration externer Synchronisationsprogramme für eBay und WebShop.
Über die Methoden EbaySync und WebShopSync werden Objekte vom Typ IAutoSpecialEBaySync bzw. IAutoSpecialWebShopSync zurückgegeben. Beide haben dieselbe Struktur mit den Eigenschaften FileName, DisplayCaption und Parameter.
- FileName - Vollständiger Pfad zur ausführbaren Datei. Wird kein Pfad angegeben, sucht die Software im eigenen Startverzeichnis.
- DisplayCaption - Anzeigename im Menü. Ein Shortcut kann per
&vor dem Buchstaben gesetzt werden. - Parameter - Kommandozeilenparameter, der mit einem Leerzeichen an
FileNameangehängt wird.
Nach dem Setzen der Werte muss Save aufgerufen werden, da die Einstellungen sonst verloren gehen.
Beispiel: eBay-Sync konfigurieren (Delphi)
Program Delphi;
var
BpApp: Variant;
SpecialObj: Variant;
begin
BpApp := CreateOleObject('BpNT.Application');
BpApp.Init('Firmenname','','Anmeldename','Passwort');
BpApp.SelectMand('1');
SpecialObj := BpApp.GetSpecialObject(9); // soVariablen = 9
SpecialObj.EbaySync.FileName := 'C:\myApp\Prg.exe';
SpecialObj.EbaySync.DisplayCaption := 'Pr&g Sync';
SpecialObj.EbaySync.Parameter := '/MyParam';
showmessage(SpecialObj.EbaySync.FileName); // Kontrollausgabe
SpecialObj.Save;
SpecialObj := nil;
BpApp := nil;
end;
FAQ
Warum wird meine eingetragene Applikation nicht angezeigt? Es werden nur Applikationen angezeigt, deren Datei im Zugriff des aktuellen Windows-Benutzers ist. Außerdem wird die Konfiguration pro Rechner gespeichert - eine Eintragung auf einem anderen Rechner ist dort nicht sichtbar.
Bankverkehr (IAutoSpecialBanking)
IAutoSpecialBanking (soBanking) ermöglicht das automatisierte Abholen von Kontoauszügen. Verfügbar ab Build 5000.
ZahlungsverkehrOnlineAktualisieren
HRESULT ZahlungsverkehrOnlineAktualisieren(
[in] BSTR Bankleitzahl,
[in] BSTR Kontonummer,
[in] long BnkVerbindungsNummer,
[in] DATE VonDatum,
[in] DATE BisDatum,
[in] BSTR RegularExpAdrNr,
[in] BSTR RegularExpBelegNr,
[in] VARIANT_BOOL NurKontoauszuege,
[out, retval] VARIANT_BOOL* Result
);
Identifizierung der Bankkonten: Es gibt zwei Varianten. Entweder über Bankleitzahl und Kontonummer (dann BnkVerbindungsNummer auf -1 setzen), oder über die BnkVerbindungsNummer. Letztere ist nützlich, wenn dieselbe BLZ/Kontonummer-Kombination mehrfach existiert (z. B. einmal für Chip-Karte und einmal für PIN/TAN). Wird die Bankverbindung nicht gefunden, wird eine Exception ausgelöst.
Reguläre Ausdrücke: Die Parameter RegularExpAdrNr und RegularExpBelegNr können leer gelassen oder mit einer kommaseparierten Liste von Nummern der regulären Ausdrücke gefüllt werden. Diese Nummern können aus dem NestedDataSet RegAus der Mandanten-Tabelle ausgelesen werden. Verwenden Sie nur Einträge mit gesetztem BenutztKz. Die Art (Adressnummer oder Belegnummer) lässt sich am Feld FeldArtInfo unterscheiden: 3 = Adressen, 33 = Belegnummern.
Datum: VonDatum und BisDatum spezifizieren den Abfragezeitraum. Ein BisDatum in der Zukunft führt bei den meisten Banken zu Fehlern.
Praktische Einschränkungen beim Online-Banking
Pin-Tresor: Aufgrund technischer Limits beim Verwenden der gesicherten Tresore kann es zu dem Problem kommen, dass ein hinterlegter Pin für den Kontozugang nicht verwendet werden kann.
Single-Instance: Aktuell ist es nur möglich eine Instanz des Online Bankings zu verwenden. Egal ob es sich um eine COM Instanz oder eine interaktive Instanz handelt: Für alle zusammen ist nur ein Zugriff möglich.
Zahlungsverkehr
IAutoSpecialZahlungsverkehr / Zahlungsverkehr2
Über IAutoSpecialZahlungsverkehr (soZahlungsverkehr) können Zahlungsverkehrsbuchungen durchgeführt werden.
AuftragBuchen bucht vorhandene Offene Posten in die Buchungsliste:
HRESULT AuftragBuchen(
[in] VARIANT_BOOL OpAusgleichen,
[in] VARIANT_BOOL BuchungenErstellen,
[out, retval] AutoDataSet** Result
);
FiBuBuchen bucht vorhandene Offene Posten in die FiBu-Bücher:
HRESULT FiBuBuchen(
[in] VARIANT_BOOL OpAusgleichen,
[in] VARIANT_BOOL BuchungenErstellen,
[in] long FiBuBuchNr,
[out, retval] AutoDataSet** Result
);
Das ab Build 5110 verfügbare IAutoSpecialZahlungsverkehr2 erweitert das Interface um die Methode Buchen, die es ermöglicht, einzelne Datensätze zu buchen. Der Vorteil gegenüber AuftragBuchen und FiBuBuchen ist, dass ein Buchungslauf aufgeteilt werden kann - so wird verhindert, dass ein langer Buchungslauf alles blockiert.
HRESULT Buchen(
[in] AutoDataSet* MasterData,
[in] VARIANT_BOOL OpAusgleichen,
[in] VARIANT_BOOL BuchungenErstellen,
[in] long FiBuBuchNr,
[out, retval] AutoDataSet** Result
);
Der Parameter MasterData muss auf einen Datensatz in der Tabelle ZahlungsverkehrEingang positioniert sein.
Praxis-Beispiel: Verwendungszweck in OPs schreiben
Das folgende C#-Beispiel iteriert über alle Datensätze im Zahlungsverkehrseingang und schreibt den Inhalt des Feldes Txt in das Feld Info der zugeordneten Offenen Posten.
C#: Verwendungszweck aus ZV-Eingang in OPs übertragen
{
AutoDataSet zve = ComApp.DataSetInfos["ZahlungsverkehrEingang"].CreateDataSet();
AutoDataSet opZuweisungen = zve.NestedDataSets["ZvEZuw"];
AutoDataSet offenePosten = ComApp.DataSetInfos["OffenePosten"].CreateDataSet();
string id;
zve.First();
while (!zve.Eof)
{
id = zve.Fields["ID"].AsString;
opZuweisungen.First();
while (!opZuweisungen.Eof)
{
string zuwBelegNr = opZuweisungen.Fields["BelegNr"].AsString;
if (offenePosten.FindKey("BelegNr", zuwBelegNr))
{
offenePosten.Edit();
offenePosten.Fields["Info"].Text = zve.Fields["Txt"].Text;
offenePosten.Post();
}
opZuweisungen.Next();
}
zve.Next();
}
}
Offene Posten (IAutoSpecialOffenePosten)
IAutoSpecialOffenePosten (soOffenePosten) stellt Funktionen zum Ausgleich von Offenen Posten bereit.
Workflow
- InitOffenerPosten aufrufen und ein
AutoDataSetder Offene-Posten-Tabelle übergeben. Die aktuelle Position bestimmt den zu bearbeitenden Datensatz. - OffenerPostenAusgleich für die eigentliche Ausgleichsbuchung aufrufen.
OffenerPostenAusgleich
HRESULT OffenerPostenAusgleich(
[in] CURRENCY AusgleichBetrag,
[in] BSTR AusgleichWaehrung,
[in] CURRENCY Skonto,
[in] VARIANT_BOOL RestIstNachlass,
[in] VARIANT_BOOL BuchSatzErstellen,
[in] VARIANT_BOOL KreditKarteVerwenden,
[in] DATE Buchungsdatum,
[out, retval] VARIANT_BOOL* Result
);
Die Parameter:
- AusgleichBetrag - Geldwert der Ausgleichsbuchung.
- AusgleichWaehrung - ISO-String der Währung (z. B.
EUR). - Skonto - Absoluter Betrag (kein Prozentwert), der als Skonto gebucht wird.
- RestIstNachlass - Bei
Truewird der Restbetrag als Nachlass geführt. - BuchSatzErstellen - Steuert, ob ein Buchungssatz erstellt wird.
- KreditKarteVerwenden - Steuert, ob die Zahlung als Kreditkartenzahlung gespeichert wird.
- Buchungsdatum - Datum der Ausgleichsbuchung.
Kontenanalyse (IAutoSpecialKontenAnalyse)
IAutoSpecialKontenAnalyse (soKontenAnalyse, Wert 3) ermöglicht die Durchführung von Kontenanalysen über die COM-Schnittstelle.
Ablauf
Zuerst wird über die Eigenschaft KontenTbl ein DataSet mit den verfügbaren Gliederungsschemen abgerufen. Durch Positionierung in diesem DataSet wird das gewünschte Schema ausgewählt. Anschließend wird die Methode KontenAnalyse aufgerufen, die zwei DataSets zurückgibt: Konten und Gliederung.
KontenAnalyse
HRESULT KontenAnalyse(
[in] VARIANT_BOOL Proforma,
[in] VARIANT_BOOL LW2,
[in] VARIANT_BOOL Vorjahr,
[in] long Auswertungsjahr,
[in] long VonPeriode,
[in] long BisPeriode,
[in] VARIANT_BOOL KtoEinzeln,
[in] VARIANT_BOOL keinNBSaldoKto,
[in] VARIANT_BOOL kein0SaldoKto,
[in] VARIANT_BOOL kein0SaldoGld,
[in] VARIANT_BOOL kein0SaldoWJahr,
[in, out] VARIANT* Konten,
[in, out] VARIANT* Gliederung
);
Wichtige Parameter: Proforma (nicht gebuchte Umsätze), LW2 (Leitwährung 2), Vorjahr (Vorjahreswerte), VonPeriode/BisPeriode (1–15, wobei 13–15 die Sonderperioden sind), KtoEinzeln (Einzelkontenausgabe).
Datenstruktur der Ergebnisse
Die Tabelle Gliederung enthält die hierarchischen Überschriften. Die Felder Ebene, Pos, ParentId und Id beschreiben die Baumstruktur. Das Root-Element hat Ebene = 1. Im Feld Data stehen die zugeordneten Kontonummern als kommaseparierte Liste - diese finden sich in der Tabelle Konten im Feld KtoNr.
Beispiel: Kontenanalyse durchführen (Delphi)
procedure DoKontenAnalyse;
var
GliederungArten: AutoDataSet;
ErgKonto: OleVariant;
ErgGliederung: OleVariant;
BpApp: Application;
Analyse: AutoSpecialKontenAnalyse;
begin
try
BpApp := CoApplication.Create;
try
BpApp.Init('Firmenname','','Anmeldename','Password');
BpApp.SelectMand('gewünschter Mandant Name');
Analyse := (BpApp.GetSpecialObject(soKontenAnalyse) as AutoSpecialKontenAnalyse);
GliederungArten := Analyse.KontenTbl;
GliederungArten.Last;
Analyse.KontenTbl := GliederungArten;
Analyse.KontenAnalyse(
False, False, False, 2002, 1, 15, False, True, True, True, True,
ErgKonto, ErgGliederung
);
// Ergebnisse verarbeiten ...
finally
GliederungArten := nil;
Analyse := nil;
BpApp := nil;
end;
except
on e: Exception do
begin
ShowMessage(e.Message);
raise;
end;
end;
end;
Adressspezifische Preise (IAutoSpecialAdrSpezPr)
IAutoSpecialAdrSpezPr (soAdrSpezPr) ermöglicht die Abfrage adressspezifischer Preise. Verfügbar ab Build 5901.
Im Hintergrund arbeitet ein Artikel-DataSet mit zusätzlichen Feldern für die adressspezifischen Preise, analog zur Programmfunktion unter Adressen → Details → "Adressspezifische Preise". Über das Feld AdrSpezVk kann der berechnete Preis ausgelesen werden.
Vorgabe-Eigenschaften
Vor dem Aufruf von GetPreis werden die Rahmenbedingungen über Eigenschaften gesetzt:
- AdrNr - Die Adressnummer (String).
- Menge - Bestellmenge (Double).
- Einheit - Mengeneinheit (String).
- Datum - Stichtag (Date).
- AdrRab - Abweichender Adressrabatt (Double, optional).
- Waehrung - Abweichende Währung (String, optional).
- InklSteuer - Preis inkl. oder exkl. Steuer (Boolean).
GetPreis
HRESULT GetPreis([in] BSTR aArtNr, [out, retval] double* Result);
Gibt den adressspezifischen Preis für die übergebene Artikelnummer zurück.
Beispiel: Adressspezifischen Preis ermitteln (C#)
AutoSpecialAdrSpezPr preisermittler =
(AutoSpecialAdrSpezPr)ComApp.GetSpecialObject(SpecialObjects.soAdrSpezPr);
preisermittler.AdrNr = "10000";
preisermittler.Menge = 1;
preisermittler.InklSteuer = false;
MessageBox.Show("Der Preis ist " + preisermittler.GetPreis("1").ToString());
E-Commerce-Plattformen (Partner-Lösung)
Für E-Commerce-Plattformen des Typs "Partner-Lösung" können die Spezifikationen im Register "Spezifikationen" per COM-Schnittstelle befüllt werden. Diese Vorgehensweise ist beabsichtigt, damit niemand (auch kein Supervisor) manuell Änderungen an der Plattformkonfiguration vornimmt, die deren Funktionsfähigkeit beeinträchtigen könnten.
Der Zugriff erfolgt über das DataSet Plattformen. Die Felder steuern diverse Plattformfähigkeiten wie Mehrfacheinstellbarkeit von Artikeln, Kategorie-Optionen, Varianten-Konfiguration und Adressreplikation.
C#: Plattform-Spezifikationen befüllen
AutoDataSet dsPlattformen = ComApp.DataSetInfos["Plattformen"].CreateDataSet();
try
{
dsPlattformen.First();
dsPlattformen.Edit();
// Selber Artikel mehrfach einstellbar
dsPlattformen.Fields["ArtMehrfachKz"].AsBoolean = true;
// Länge Kurzbezeichnung (Anzahl der Zeichen, Vorgabe 50)
dsPlattformen.Fields["ArtKuBezLen"].AsInteger = 100;
// Kategorie-Zuordnungen (maximal pro Artikel)
dsPlattformen.Fields["MaxKatZO"].AsInteger = 10;
// Gruppen von Artikel-Eigenschaften (maximal pro Artikel)
dsPlattformen.Fields["MaxGrpArtEig"].AsInteger = 10;
// Bei Varianten abweichende Artikelbeschreibung zulässig
dsPlattformen.Fields["VarAbwArtBeschrKz"].AsBoolean = true;
// Eigene Kategorien anlegbar
dsPlattformen.Fields["KatNeuKz"].AsBoolean = true;
// Beim Anlegen von Varianten "Varianten sind erlaubt" prüfen
dsPlattformen.Fields["VarErlaubtKatKz"].AsBoolean = true;
// Kategorien mit HTML-Beschreibung
dsPlattformen.Fields["KatHtmlBeschrKz"].AsBoolean = true;
// Einstell-Optionen für Kategorien
dsPlattformen.Fields["KatEinOptKz"].AsBoolean = true;
// Eigene Artikel-Eigenschaften anlegbar
dsPlattformen.Fields["ArtEigNeuKz"].AsBoolean = true;
// Eigene Gruppen von Artikel-Eigenschaften anlegbar
dsPlattformen.Fields["GrpArtEigNeuKz"].AsBoolean = true;
// Eigene Einstell-Optionen anlegbar
dsPlattformen.Fields["EinOptNeuKz"].AsBoolean = true;
// Eigene Gruppen von Einstell-Optionen anlegbar
dsPlattformen.Fields["GrpEinOptNeuKz"].AsBoolean = true;
// Hat Sets mit Gruppen von Einstell-Optionen
dsPlattformen.Fields["HatSetGrpEinOptKz"].AsBoolean = true;
// Adressen an Plattform übermitteln
dsPlattformen.Fields["AdrReplKz"].AsBoolean = true;
dsPlattformen.Post();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
TableDefinition und Wartung
IAutoSpecialTableDefinition (soTableDefinition) stellt erweiterte Funktionen für Datenwartung und Backup bereit. Verfügbar ab Build 5030.
ActivateExtendedFkt
HRESULT ActivateExtendedFkt(
[in] BSTR FirmenName,
[in] BSTR Postleitzahl,
[in] BSTR Key,
[out, retval] long* Result
);
Aktiviert erweiterte Funktionen für Datensicherung, Wartungsassistent und DB-Manager. Nach der Aktivierung können Ereignisse automatisiert behandelt werden, die sonst eine manuelle Interaktion erfordern - besonders relevant für den Betrieb als Windows-Dienst.
Die Rückgabewerte im Überblick: 0 = Erfolg, 100 = Firmenname ungültig, 101 = Name zu kurz (min. 5 Zeichen), 110 = PLZ ungültig, 111 = PLZ zu kurz (min. 3 Stellen), 200 = kein Schlüssel, 201 = Schlüssel schaltet keine Funktion frei, 202 = Schlüssel nicht dekodierbar, 204 = Schlüssel abgelaufen, 205 = Schlüssel gesperrt.
MaintenanceMode
HRESULT MaintenanceMode(
[in] VARIANT_BOOL Enter,
[in] BSTR Info,
[in] long TimeOutSec,
[out, retval] VARIANT_BOOL* Result
);
Startet oder beendet den Wartungsmodus der Datenbanken. Der Wartungsmodus funktioniert nur, wenn kein weiterer Benutzer angemeldet ist. Der Info-Text wird beim Versuch einer Anmeldung angezeigt. TimeOutSec gibt die Wartezeit in Sekunden an. Gibt True zurück, wenn der Modus in der angegebenen Zeit aktiviert werden konnte.
Beispiel: Wartungsmodus verwenden
if BpSpecialTableDefinition.MaintenanceMode(TRUE, 'Meldungstext', 600) then
try
BpAutoDataSetInfo.TabellenBeschreibung := sl.CommaText;
BpAutoDataSetInfo.SetupTable;
finally
BpSpecialTableDefinition.MaintenanceMode(FALSE, 'Meldungstext', 1);
end;
Backup-Funktionen
- StartAutoBackup - Startet die automatische Backup-Funktion mit den in der microtech Software hinterlegten Einstellungen. Gibt
0bei Erfolg zurück. - LastAutoBackup (Eigenschaft, lesend) - DateTime-Wert des letzten AutoBackup-Zeitpunkts. Sollte zusammen mit
InAutoBackupabgefragt werden. - InAutoBackup (Eigenschaft, lesend) - Boolean, der anzeigt, ob gerade ein Backup ausgeführt wird.
Projekte (IAutoSpecialProjekte)
IAutoSpecialProjekte (soProjekte) ermöglicht die Anlage und Bearbeitung von Projekten per COM. Verfügbar ab Build 5836.
Methoden
- Append(ProjektArt, AdressNr [, Ansprechpartner]) - Legt ein neues Projekt an.
ProjektArtist die Nummer der Projektart (Integer),AdressNrdie Adressnummer (String, leer für kein Adressbezug),Ansprechpartnerist optional. - Edit(ProjektNr) - Öffnet ein bestehendes Projekt im Editiermodus.
- Post - Schreibt den Datensatz nach
AppendoderEditfest. - Cancel - Verwirft die Änderungen.
- DataSet (Eigenschaft) - Zugriff auf die Felder des Projekts als AutoDataSet während
AppendoderEdit. - CopyFromArchiv(ProjektNr) - Kopiert ein Projekt aus dem Archiv in die Übersicht und gibt die neue Projektnummer zurück.
- AppendProtokoll(Text) - Erzeugt einen Protokolleintrag zum aktuell bearbeiteten Projekt.
Änderungsüberwachung (IAutoModificationMonitor)
IAutoModificationMonitor (soModificationMonitor) ermöglicht die serverseitige Überwachung von Feldänderungen in freien Datenbank-Tabellen. Verfügbar ab Build 5832 (Jahresaktualisierung 2019).
Voraussetzung
Im DB Manager muss für die gewünschte freie Datenbank-Tabelle das Kennzeichen "Auf Feldebene (für COM-Schnittstelle)" aktiviert sein. Für die Entwicklungsphase kann zusätzlich "Info bereitstellen" aktiviert werden.
Workflow
-
Init(aTableName) - Initialisiert die freie Datenbank-Tabelle. Gibt
Truezurück, wenn die Änderungsinformation auf Feldebene aktiviert ist. AlsaTableNamekann der volle Name oder der Kurzname (z. B.FT001) angegeben werden. -
Setup(aTableName, aBezeichnung) - Definiert den Bearbeitungs-Bereich.
aTableNameist der Name der zu überwachenden Tabelle (z. B.Artfür Artikel).aBezeichnungist die in der Änderungsinfo-Definition hinterlegte Bezeichnung. -
AcquireFieldList(aFields) - Definiert eine Feldliste. Die Feldnamen werden komma- oder semikolonsepariert übergeben. Optional kann ein Werte-Typ per Doppelpunkt angehängt werden (z. B.
Feldname:Integer). Unterstützte Typen:Integer,Int64,Float,String,Text,DisplayText,DateTime,Boolean,DataString,DataStream,DSReference,DSFileName,DSFileExtension,DataSet. Gibt ein Handle zurück. -
FindFirst(out aFunktionCode) - Öffnet das Monitoring. Bei
TruegibtaFunktionCodedie Art der Änderung an: 0 = nicht spezifiziert, 1 = neu angelegt, 2 = geändert, 5 = gelöscht. -
ReadFieldListValues(aHandle, aOldValueMode) bzw. ReadFieldListDiffValues(aHandle, aOldValueMode) - Liest die Feldwerte.
aOldValueModesteuert die Rückgabe: 0 = aktuelle Werte, 1 = alte Werte, 2 = beide, 3 = alte Werte für mit!markierte Felder, sonst neue. -
FindNext(aStatusCode, out aFunktionCode) - Schließt den aktuellen Datensatz ab und wechselt zum nächsten.
aStatusCode: negative Zahl = Fehler, 0 = verarbeitet, positive Zahl = bleibt bestehen. -
FindClose - Schließt das Monitoring. Muss in einem
finally-Block stehen, um Lock-Probleme zu vermeiden. -
ReleaseFieldList(aHandle) - Gibt die Feldliste wieder frei.
Zusätzlich steht WriteAenderungsInfo zur Verfügung, das die Feldänderungen im Klartext in das Info-Feld des Änderungsdatensatzes schreibt.
Erweiterte Feldlisten-Optionen
Beim Definieren der Feldliste über AcquireFieldList gibt es erweiterte Möglichkeiten:
- Ein
!vor dem Feldnamen markiert Felder, die beiReadFieldListDiffValuesimmer zurückgegeben werden (z. B.!ArtNr,!LagNr,Mge). :IXoder:IX<Zahl>hinter dem Feldnamen gibt bei der Rückgabe einen numerischen Index statt des Feldnamens zurück (z. B.!ArtNr:IX,!LagNr:IX,Mge:IXergibt0,1,2).
IAutoModificationMonitor2
Die erweiterte Version stellt zusätzlich FindFirstEx und FindNextEx bereit, die neben dem aFunktionCode auch eine aID zurückgeben.