Zum Inhalt

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) und Focused (Boolean). Zugriff über Buttons[0,0] für den ModalResult des ersten Buttons, Buttons[0,1] für dessen Beschriftung und Buttons[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 True wird die Nachricht in allen Mandanten sichtbar.
  • Erledigt - Bei True werden alle Nachrichten der angegebenen MeldungArt als 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 FileName angehä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

  1. InitOffenerPosten aufrufen und ein AutoDataSet der Offene-Posten-Tabelle übergeben. Die aktuelle Position bestimmt den zu bearbeitenden Datensatz.
  2. 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 True wird 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 0 bei Erfolg zurück.
  • LastAutoBackup (Eigenschaft, lesend) - DateTime-Wert des letzten AutoBackup-Zeitpunkts. Sollte zusammen mit InAutoBackup abgefragt 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. ProjektArt ist die Nummer der Projektart (Integer), AdressNr die Adressnummer (String, leer für kein Adressbezug), Ansprechpartner ist optional.
  • Edit(ProjektNr) - Öffnet ein bestehendes Projekt im Editiermodus.
  • Post - Schreibt den Datensatz nach Append oder Edit fest.
  • Cancel - Verwirft die Änderungen.
  • DataSet (Eigenschaft) - Zugriff auf die Felder des Projekts als AutoDataSet während Append oder Edit.
  • 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

  1. Init(aTableName) - Initialisiert die freie Datenbank-Tabelle. Gibt True zurück, wenn die Änderungsinformation auf Feldebene aktiviert ist. Als aTableName kann der volle Name oder der Kurzname (z. B. FT001) angegeben werden.

  2. Setup(aTableName, aBezeichnung) - Definiert den Bearbeitungs-Bereich. aTableName ist der Name der zu überwachenden Tabelle (z. B. Art für Artikel). aBezeichnung ist die in der Änderungsinfo-Definition hinterlegte Bezeichnung.

  3. 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.

  4. FindFirst(out aFunktionCode) - Öffnet das Monitoring. Bei True gibt aFunktionCode die Art der Änderung an: 0 = nicht spezifiziert, 1 = neu angelegt, 2 = geändert, 5 = gelöscht.

  5. ReadFieldListValues(aHandle, aOldValueMode) bzw. ReadFieldListDiffValues(aHandle, aOldValueMode) - Liest die Feldwerte. aOldValueMode steuert die Rückgabe: 0 = aktuelle Werte, 1 = alte Werte, 2 = beide, 3 = alte Werte für mit ! markierte Felder, sonst neue.

  6. 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.

  7. FindClose - Schließt das Monitoring. Muss in einem finally-Block stehen, um Lock-Probleme zu vermeiden.

  8. 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 bei ReadFieldListDiffValues immer zurückgegeben werden (z. B. !ArtNr,!LagNr,Mge).
  • :IX oder :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:IX ergibt 0,1,2).

IAutoModificationMonitor2

Die erweiterte Version stellt zusätzlich FindFirstEx und FindNextEx bereit, die neben dem aFunktionCode auch eine aID zurückgeben.