Datenbank

Diese Datei dokumentiert alle Makrofunktionen der Kategorie Datenbank.

Inhaltsverzeichnis

AttDelete(Table,ID)

Löscht eine Datei aus einem Dokument

Parameter

Nr. Parameter Beschreibung
1 Table Datenbanknummer
2 ID GUID/ID des Anhangs

Rückgabewert

0:Fehler, 1:Datei entfernt

Verfügbarkeit

42 Makro Runtime

Beispiel

Importiert eine Datei als Anhang eines Artikels und verwendet anschließend alle Att*-Funktionen, um die Anhänge auszulesen, zu exportieren, als Base64-Inhalt zu laden und den importierten Anhang wieder zu löschen.

Das Makro arbeitet mit dem Artikel 000001. Für diesen Artikel müssen im Register Dokumente bereits Dateien hinterlegt sein. Sind dort noch keine Dokumente vorhanden, sind zunächst entsprechende Dateien beim Artikel zu hinterlegen.

Zusätzlich muss die Importdatei Testdatei.txt im Benutzerverzeichnis erstellt werden. Das Benutzerverzeichnis ist das persönliche 42-ERP-Verzeichnis des aktuell angemeldeten Windows-Benutzers. Ein typischer Pfad ist:

C:\Users\[Benutzer]\Documents\42 ERP

Der tatsächliche Pfad ist vom angemeldeten Windows-Benutzer und der jeweiligen Installation abhängig. Deshalb wird er im Makro mit GetDirectory(14) ermittelt. Der Wert 14 steht bei GetDirectory() für das Benutzerverzeichnis.

Die Importdatei wird unter folgendem Pfad erwartet:

C:\Users\[Benutzer]\Documents\42 ERP\Testdatei.txt

Die exportierten Dokumente werden im Unterverzeichnis Export des Benutzerverzeichnisses abgelegt:

C:\Users\[Benutzer]\Documents\42 ERP\Export

Ist das Verzeichnis Export noch nicht vorhanden, wird es vom Makro automatisch mit CreateDir() angelegt.

Main()
{
    Benutzerverzeichnis = GetDirectory(14);
    Importdatei = Benutzerverzeichnis + "\\Testdatei.txt";
    Exportverzeichnis = Benutzerverzeichnis + "\\Export";

    // Exportverzeichnis anlegen, wenn es noch nicht vorhanden ist
    if(strlen(FindFirstDir(Exportverzeichnis)) == 0)
    {
        if(CreateDir(Exportverzeichnis))
        {
            print("Exportverzeichnis wurde erstellt.");
        }
        else
        {
            print("Exportverzeichnis konnte nicht erstellt werden.");
        }
    }

    db = Open("ARTIKEL");

    Select(db,"Artikelnummer == '000001'");
    
    if(First(db))
    {
        // Dokument importieren
        if(AttImport(db,Importdatei,0))
        {
            Update(db);
            print("Dokument wurde importiert.");
        }
    }

    if(First(db))
    {
        // Anhangs-ID des aktuellen Datensatzes ermitteln
        Anhang = GetFld("Anhang",db);

        // Anzahl der Dokumente im Anhang
        Anzahl = AttGetCount(Anhang);

        print("Anzahl der Dokumente: " + Anzahl);

        for(i = 0; i = i + 1 ; i < Anzahl)
        {
            // Informationen zum Dokument ermitteln
            Name = AttGetName(Anhang,i);
            ID = AttGetId(Anhang,i);
            Eigenschaften = AttGetProperties(Anhang,i);

            print("Name: " + Name);
            print("ID: " + ID);
            print("Eigenschaften: " + Eigenschaften);

            // Dokument exportieren
            if(AttExport(Anhang,i,Exportverzeichnis))
            {
                print("Dokument wurde exportiert.");
            }

            // Dokument als Base64-kodierten String laden
            Base64 = AttLoadBinary(Anhang,i);

            print("Base64-Inhalt: " + Base64);
        }

        // Das zuvor importierte Dokument wieder löschen
        if(strcmp(Name,"Testdatei.txt") == 0)
        {
            if(AttDelete(db,ID))
            {
                print("Dokument wurde gelöscht.");
            }
        }

        Update(db);
    }

    Close(db);
}

AttExport(ID,Index,Verzeichnis,[Text])

Speichert das Dokument des Anhangs im angegebenen Verzeichnis ab

Parameter

Nr. Parameter Beschreibung
1 ID GUID/ID des Anhangs
2 Index Index des Dokumentes
3 Verzeichnis Zielverzeichnis für die Kopie des Dokumentes
4 Text Optional: Abweichender Dateiname [wenn leer dann wird Dokumentname verwendet]

Rückgabewert

1:OK, 0:Fehler

Verfügbarkeit

Standard

Beispiel

Importiert eine Datei als Anhang eines Artikels und verwendet anschließend alle Att*-Funktionen, um die Anhänge auszulesen, zu exportieren, als Base64-Inhalt zu laden und den importierten Anhang wieder zu löschen.

Das Makro arbeitet mit dem Artikel 000001. Für diesen Artikel müssen im Register Dokumente bereits Dateien hinterlegt sein. Sind dort noch keine Dokumente vorhanden, sind zunächst entsprechende Dateien beim Artikel zu hinterlegen.

Zusätzlich muss die Importdatei Testdatei.txt im Benutzerverzeichnis erstellt werden. Das Benutzerverzeichnis ist das persönliche 42-ERP-Verzeichnis des aktuell angemeldeten Windows-Benutzers. Ein typischer Pfad ist:

C:\Users\[Benutzer]\Documents\42 ERP

Der tatsächliche Pfad ist vom angemeldeten Windows-Benutzer und der jeweiligen Installation abhängig. Deshalb wird er im Makro mit GetDirectory(14) ermittelt. Der Wert 14 steht bei GetDirectory() für das Benutzerverzeichnis.

Die Importdatei wird unter folgendem Pfad erwartet:

C:\Users\[Benutzer]\Documents\42 ERP\Testdatei.txt

Die exportierten Dokumente werden im Unterverzeichnis Export des Benutzerverzeichnisses abgelegt:

C:\Users\[Benutzer]\Documents\42 ERP\Export

Ist das Verzeichnis Export noch nicht vorhanden, wird es vom Makro automatisch mit CreateDir() angelegt.

Main()
{
    Benutzerverzeichnis = GetDirectory(14);
    Importdatei = Benutzerverzeichnis + "\\Testdatei.txt";
    Exportverzeichnis = Benutzerverzeichnis + "\\Export";

    // Exportverzeichnis anlegen, wenn es noch nicht vorhanden ist
    if(strlen(FindFirstDir(Exportverzeichnis)) == 0)
    {
        if(CreateDir(Exportverzeichnis))
        {
            print("Exportverzeichnis wurde erstellt.");
        }
        else
        {
            print("Exportverzeichnis konnte nicht erstellt werden.");
        }
    }

    db = Open("ARTIKEL");

    Select(db,"Artikelnummer == '000001'");
    
    if(First(db))
    {
        // Dokument importieren
        if(AttImport(db,Importdatei,0))
        {
            Update(db);
            print("Dokument wurde importiert.");
        }
    }

    if(First(db))
    {
        // Anhangs-ID des aktuellen Datensatzes ermitteln
        Anhang = GetFld("Anhang",db);

        // Anzahl der Dokumente im Anhang
        Anzahl = AttGetCount(Anhang);

        print("Anzahl der Dokumente: " + Anzahl);

        for(i = 0; i = i + 1 ; i < Anzahl)
        {
            // Informationen zum Dokument ermitteln
            Name = AttGetName(Anhang,i);
            ID = AttGetId(Anhang,i);
            Eigenschaften = AttGetProperties(Anhang,i);

            print("Name: " + Name);
            print("ID: " + ID);
            print("Eigenschaften: " + Eigenschaften);

            // Dokument exportieren
            if(AttExport(Anhang,i,Exportverzeichnis))
            {
                print("Dokument wurde exportiert.");
            }

            // Dokument als Base64-kodierten String laden
            Base64 = AttLoadBinary(Anhang,i);

            print("Base64-Inhalt: " + Base64);
        }

        // Das zuvor importierte Dokument wieder löschen
        if(strcmp(Name,"Testdatei.txt") == 0)
        {
            if(AttDelete(db,ID))
            {
                print("Dokument wurde gelöscht.");
            }
        }

        Update(db);
    }

    Close(db);
}

AttGetCount(ID)

Ermittelt die Anzahl der enthaltenen Dokumente im Anhang

Parameter

Nr. Parameter Beschreibung
1 ID GUID/ID des Anhangs

Rückgabewert

Anzahl der im Anhang enthaltenen Dokumente

Verfügbarkeit

Standard

Beispiel

Importiert eine Datei als Anhang eines Artikels und verwendet anschließend alle Att*-Funktionen, um die Anhänge auszulesen, zu exportieren, als Base64-Inhalt zu laden und den importierten Anhang wieder zu löschen.

Das Makro arbeitet mit dem Artikel 000001. Für diesen Artikel müssen im Register Dokumente bereits Dateien hinterlegt sein. Sind dort noch keine Dokumente vorhanden, sind zunächst entsprechende Dateien beim Artikel zu hinterlegen.

Zusätzlich muss die Importdatei Testdatei.txt im Benutzerverzeichnis erstellt werden. Das Benutzerverzeichnis ist das persönliche 42-ERP-Verzeichnis des aktuell angemeldeten Windows-Benutzers. Ein typischer Pfad ist:

C:\Users\[Benutzer]\Documents\42 ERP

Der tatsächliche Pfad ist vom angemeldeten Windows-Benutzer und der jeweiligen Installation abhängig. Deshalb wird er im Makro mit GetDirectory(14) ermittelt. Der Wert 14 steht bei GetDirectory() für das Benutzerverzeichnis.

Die Importdatei wird unter folgendem Pfad erwartet:

C:\Users\[Benutzer]\Documents\42 ERP\Testdatei.txt

Die exportierten Dokumente werden im Unterverzeichnis Export des Benutzerverzeichnisses abgelegt:

C:\Users\[Benutzer]\Documents\42 ERP\Export

Ist das Verzeichnis Export noch nicht vorhanden, wird es vom Makro automatisch mit CreateDir() angelegt.

Main()
{
    Benutzerverzeichnis = GetDirectory(14);
    Importdatei = Benutzerverzeichnis + "\\Testdatei.txt";
    Exportverzeichnis = Benutzerverzeichnis + "\\Export";

    // Exportverzeichnis anlegen, wenn es noch nicht vorhanden ist
    if(strlen(FindFirstDir(Exportverzeichnis)) == 0)
    {
        if(CreateDir(Exportverzeichnis))
        {
            print("Exportverzeichnis wurde erstellt.");
        }
        else
        {
            print("Exportverzeichnis konnte nicht erstellt werden.");
        }
    }

    db = Open("ARTIKEL");

    Select(db,"Artikelnummer == '000001'");
    
    if(First(db))
    {
        // Dokument importieren
        if(AttImport(db,Importdatei,0))
        {
            Update(db);
            print("Dokument wurde importiert.");
        }
    }

    if(First(db))
    {
        // Anhangs-ID des aktuellen Datensatzes ermitteln
        Anhang = GetFld("Anhang",db);

        // Anzahl der Dokumente im Anhang
        Anzahl = AttGetCount(Anhang);

        print("Anzahl der Dokumente: " + Anzahl);

        for(i = 0; i = i + 1 ; i < Anzahl)
        {
            // Informationen zum Dokument ermitteln
            Name = AttGetName(Anhang,i);
            ID = AttGetId(Anhang,i);
            Eigenschaften = AttGetProperties(Anhang,i);

            print("Name: " + Name);
            print("ID: " + ID);
            print("Eigenschaften: " + Eigenschaften);

            // Dokument exportieren
            if(AttExport(Anhang,i,Exportverzeichnis))
            {
                print("Dokument wurde exportiert.");
            }

            // Dokument als Base64-kodierten String laden
            Base64 = AttLoadBinary(Anhang,i);

            print("Base64-Inhalt: " + Base64);
        }

        // Das zuvor importierte Dokument wieder löschen
        if(strcmp(Name,"Testdatei.txt") == 0)
        {
            if(AttDelete(db,ID))
            {
                print("Dokument wurde gelöscht.");
            }
        }

        Update(db);
    }

    Close(db);
}

AttGetId(ID,Index)

Ermittelt die ID des Dokumentes im Anhang

Parameter

Nr. Parameter Beschreibung
1 ID GUID/ID des Anhangs
2 Index Index des Anhangs beginnend mit 0 für das erste Dokument

Rückgabewert

ID des Dokuments

Verfügbarkeit

Standard

Beispiel

Importiert eine Datei als Anhang eines Artikels und verwendet anschließend alle Att*-Funktionen, um die Anhänge auszulesen, zu exportieren, als Base64-Inhalt zu laden und den importierten Anhang wieder zu löschen.

Das Makro arbeitet mit dem Artikel 000001. Für diesen Artikel müssen im Register Dokumente bereits Dateien hinterlegt sein. Sind dort noch keine Dokumente vorhanden, sind zunächst entsprechende Dateien beim Artikel zu hinterlegen.

Zusätzlich muss die Importdatei Testdatei.txt im Benutzerverzeichnis erstellt werden. Das Benutzerverzeichnis ist das persönliche 42-ERP-Verzeichnis des aktuell angemeldeten Windows-Benutzers. Ein typischer Pfad ist:

C:\Users\[Benutzer]\Documents\42 ERP

Der tatsächliche Pfad ist vom angemeldeten Windows-Benutzer und der jeweiligen Installation abhängig. Deshalb wird er im Makro mit GetDirectory(14) ermittelt. Der Wert 14 steht bei GetDirectory() für das Benutzerverzeichnis.

Die Importdatei wird unter folgendem Pfad erwartet:

C:\Users\[Benutzer]\Documents\42 ERP\Testdatei.txt

Die exportierten Dokumente werden im Unterverzeichnis Export des Benutzerverzeichnisses abgelegt:

C:\Users\[Benutzer]\Documents\42 ERP\Export

Ist das Verzeichnis Export noch nicht vorhanden, wird es vom Makro automatisch mit CreateDir() angelegt.

Main()
{
    Benutzerverzeichnis = GetDirectory(14);
    Importdatei = Benutzerverzeichnis + "\\Testdatei.txt";
    Exportverzeichnis = Benutzerverzeichnis + "\\Export";

    // Exportverzeichnis anlegen, wenn es noch nicht vorhanden ist
    if(strlen(FindFirstDir(Exportverzeichnis)) == 0)
    {
        if(CreateDir(Exportverzeichnis))
        {
            print("Exportverzeichnis wurde erstellt.");
        }
        else
        {
            print("Exportverzeichnis konnte nicht erstellt werden.");
        }
    }

    db = Open("ARTIKEL");

    Select(db,"Artikelnummer == '000001'");
    
    if(First(db))
    {
        // Dokument importieren
        if(AttImport(db,Importdatei,0))
        {
            Update(db);
            print("Dokument wurde importiert.");
        }
    }

    if(First(db))
    {
        // Anhangs-ID des aktuellen Datensatzes ermitteln
        Anhang = GetFld("Anhang",db);

        // Anzahl der Dokumente im Anhang
        Anzahl = AttGetCount(Anhang);

        print("Anzahl der Dokumente: " + Anzahl);

        for(i = 0; i = i + 1 ; i < Anzahl)
        {
            // Informationen zum Dokument ermitteln
            Name = AttGetName(Anhang,i);
            ID = AttGetId(Anhang,i);
            Eigenschaften = AttGetProperties(Anhang,i);

            print("Name: " + Name);
            print("ID: " + ID);
            print("Eigenschaften: " + Eigenschaften);

            // Dokument exportieren
            if(AttExport(Anhang,i,Exportverzeichnis))
            {
                print("Dokument wurde exportiert.");
            }

            // Dokument als Base64-kodierten String laden
            Base64 = AttLoadBinary(Anhang,i);

            print("Base64-Inhalt: " + Base64);
        }

        // Das zuvor importierte Dokument wieder löschen
        if(strcmp(Name,"Testdatei.txt") == 0)
        {
            if(AttDelete(db,ID))
            {
                print("Dokument wurde gelöscht.");
            }
        }

        Update(db);
    }

    Close(db);
}

AttGetName(ID,Index)

Ermittelt den Namen des Dokumentes im Anhang

Parameter

Nr. Parameter Beschreibung
1 ID GUID/ID des Anhangs
2 Index Index des Anhangs beginnend mit 0 für das erste Dokument

Rückgabewert

Name des Dokuments

Verfügbarkeit

Standard

Beispiel

Importiert eine Datei als Anhang eines Artikels und verwendet anschließend alle Att*-Funktionen, um die Anhänge auszulesen, zu exportieren, als Base64-Inhalt zu laden und den importierten Anhang wieder zu löschen.

Das Makro arbeitet mit dem Artikel 000001. Für diesen Artikel müssen im Register Dokumente bereits Dateien hinterlegt sein. Sind dort noch keine Dokumente vorhanden, sind zunächst entsprechende Dateien beim Artikel zu hinterlegen.

Zusätzlich muss die Importdatei Testdatei.txt im Benutzerverzeichnis erstellt werden. Das Benutzerverzeichnis ist das persönliche 42-ERP-Verzeichnis des aktuell angemeldeten Windows-Benutzers. Ein typischer Pfad ist:

C:\Users\[Benutzer]\Documents\42 ERP

Der tatsächliche Pfad ist vom angemeldeten Windows-Benutzer und der jeweiligen Installation abhängig. Deshalb wird er im Makro mit GetDirectory(14) ermittelt. Der Wert 14 steht bei GetDirectory() für das Benutzerverzeichnis.

Die Importdatei wird unter folgendem Pfad erwartet:

C:\Users\[Benutzer]\Documents\42 ERP\Testdatei.txt

Die exportierten Dokumente werden im Unterverzeichnis Export des Benutzerverzeichnisses abgelegt:

C:\Users\[Benutzer]\Documents\42 ERP\Export

Ist das Verzeichnis Export noch nicht vorhanden, wird es vom Makro automatisch mit CreateDir() angelegt.

Main()
{
    Benutzerverzeichnis = GetDirectory(14);
    Importdatei = Benutzerverzeichnis + "\\Testdatei.txt";
    Exportverzeichnis = Benutzerverzeichnis + "\\Export";

    // Exportverzeichnis anlegen, wenn es noch nicht vorhanden ist
    if(strlen(FindFirstDir(Exportverzeichnis)) == 0)
    {
        if(CreateDir(Exportverzeichnis))
        {
            print("Exportverzeichnis wurde erstellt.");
        }
        else
        {
            print("Exportverzeichnis konnte nicht erstellt werden.");
        }
    }

    db = Open("ARTIKEL");

    Select(db,"Artikelnummer == '000001'");
    
    if(First(db))
    {
        // Dokument importieren
        if(AttImport(db,Importdatei,0))
        {
            Update(db);
            print("Dokument wurde importiert.");
        }
    }

    if(First(db))
    {
        // Anhangs-ID des aktuellen Datensatzes ermitteln
        Anhang = GetFld("Anhang",db);

        // Anzahl der Dokumente im Anhang
        Anzahl = AttGetCount(Anhang);

        print("Anzahl der Dokumente: " + Anzahl);

        for(i = 0; i = i + 1 ; i < Anzahl)
        {
            // Informationen zum Dokument ermitteln
            Name = AttGetName(Anhang,i);
            ID = AttGetId(Anhang,i);
            Eigenschaften = AttGetProperties(Anhang,i);

            print("Name: " + Name);
            print("ID: " + ID);
            print("Eigenschaften: " + Eigenschaften);

            // Dokument exportieren
            if(AttExport(Anhang,i,Exportverzeichnis))
            {
                print("Dokument wurde exportiert.");
            }

            // Dokument als Base64-kodierten String laden
            Base64 = AttLoadBinary(Anhang,i);

            print("Base64-Inhalt: " + Base64);
        }

        // Das zuvor importierte Dokument wieder löschen
        if(strcmp(Name,"Testdatei.txt") == 0)
        {
            if(AttDelete(db,ID))
            {
                print("Dokument wurde gelöscht.");
            }
        }

        Update(db);
    }

    Close(db);
}

AttGetProperties(ID,Index)

Ermittelt die Eigenschaften des Dokumentes im Anhang

Parameter

Nr. Parameter Beschreibung
1 ID GUID/ID des Anhangs
2 Index Index des Anhangs beginnend mit 0 für das erste Dokument

Rückgabewert

Eigenschaften des Dokuments

Verfügbarkeit

Standard

Beispiel

Importiert eine Datei als Anhang eines Artikels und verwendet anschließend alle Att*-Funktionen, um die Anhänge auszulesen, zu exportieren, als Base64-Inhalt zu laden und den importierten Anhang wieder zu löschen.

Das Makro arbeitet mit dem Artikel 000001. Für diesen Artikel müssen im Register Dokumente bereits Dateien hinterlegt sein. Sind dort noch keine Dokumente vorhanden, sind zunächst entsprechende Dateien beim Artikel zu hinterlegen.

Zusätzlich muss die Importdatei Testdatei.txt im Benutzerverzeichnis erstellt werden. Das Benutzerverzeichnis ist das persönliche 42-ERP-Verzeichnis des aktuell angemeldeten Windows-Benutzers. Ein typischer Pfad ist:

C:\Users\[Benutzer]\Documents\42 ERP

Der tatsächliche Pfad ist vom angemeldeten Windows-Benutzer und der jeweiligen Installation abhängig. Deshalb wird er im Makro mit GetDirectory(14) ermittelt. Der Wert 14 steht bei GetDirectory() für das Benutzerverzeichnis.

Die Importdatei wird unter folgendem Pfad erwartet:

C:\Users\[Benutzer]\Documents\42 ERP\Testdatei.txt

Die exportierten Dokumente werden im Unterverzeichnis Export des Benutzerverzeichnisses abgelegt:

C:\Users\[Benutzer]\Documents\42 ERP\Export

Ist das Verzeichnis Export noch nicht vorhanden, wird es vom Makro automatisch mit CreateDir() angelegt.

Main()
{
    Benutzerverzeichnis = GetDirectory(14);
    Importdatei = Benutzerverzeichnis + "\\Testdatei.txt";
    Exportverzeichnis = Benutzerverzeichnis + "\\Export";

    // Exportverzeichnis anlegen, wenn es noch nicht vorhanden ist
    if(strlen(FindFirstDir(Exportverzeichnis)) == 0)
    {
        if(CreateDir(Exportverzeichnis))
        {
            print("Exportverzeichnis wurde erstellt.");
        }
        else
        {
            print("Exportverzeichnis konnte nicht erstellt werden.");
        }
    }

    db = Open("ARTIKEL");

    Select(db,"Artikelnummer == '000001'");
    
    if(First(db))
    {
        // Dokument importieren
        if(AttImport(db,Importdatei,0))
        {
            Update(db);
            print("Dokument wurde importiert.");
        }
    }

    if(First(db))
    {
        // Anhangs-ID des aktuellen Datensatzes ermitteln
        Anhang = GetFld("Anhang",db);

        // Anzahl der Dokumente im Anhang
        Anzahl = AttGetCount(Anhang);

        print("Anzahl der Dokumente: " + Anzahl);

        for(i = 0; i = i + 1 ; i < Anzahl)
        {
            // Informationen zum Dokument ermitteln
            Name = AttGetName(Anhang,i);
            ID = AttGetId(Anhang,i);
            Eigenschaften = AttGetProperties(Anhang,i);

            print("Name: " + Name);
            print("ID: " + ID);
            print("Eigenschaften: " + Eigenschaften);

            // Dokument exportieren
            if(AttExport(Anhang,i,Exportverzeichnis))
            {
                print("Dokument wurde exportiert.");
            }

            // Dokument als Base64-kodierten String laden
            Base64 = AttLoadBinary(Anhang,i);

            print("Base64-Inhalt: " + Base64);
        }

        // Das zuvor importierte Dokument wieder löschen
        if(strcmp(Name,"Testdatei.txt") == 0)
        {
            if(AttDelete(db,ID))
            {
                print("Dokument wurde gelöscht.");
            }
        }

        Update(db);
    }

    Close(db);
}

AttImport(Table,FileName,[DeleteAfterImport])

Importiert ein Dokument aus einer Datei

Parameter

Nr. Parameter Beschreibung
1 Table Datenbanknummer
2 FileName Name der Datei
3 DeleteAfterImport Optional: Datei nach Import aus Verzeichnis löschen

Rückgabewert

0:Fehler, 1:Datei hinzugefügt, 2: Datei ersetzt

Verfügbarkeit

42 Makro Runtime

Beispiel

Importiert eine Datei als Anhang eines Artikels und verwendet anschließend alle Att*-Funktionen, um die Anhänge auszulesen, zu exportieren, als Base64-Inhalt zu laden und den importierten Anhang wieder zu löschen.

Das Makro arbeitet mit dem Artikel 000001. Für diesen Artikel müssen im Register Dokumente bereits Dateien hinterlegt sein. Sind dort noch keine Dokumente vorhanden, sind zunächst entsprechende Dateien beim Artikel zu hinterlegen.

Zusätzlich muss die Importdatei Testdatei.txt im Benutzerverzeichnis erstellt werden. Das Benutzerverzeichnis ist das persönliche 42-ERP-Verzeichnis des aktuell angemeldeten Windows-Benutzers. Ein typischer Pfad ist:

C:\Users\[Benutzer]\Documents\42 ERP

Der tatsächliche Pfad ist vom angemeldeten Windows-Benutzer und der jeweiligen Installation abhängig. Deshalb wird er im Makro mit GetDirectory(14) ermittelt. Der Wert 14 steht bei GetDirectory() für das Benutzerverzeichnis.

Die Importdatei wird unter folgendem Pfad erwartet:

C:\Users\[Benutzer]\Documents\42 ERP\Testdatei.txt

Die exportierten Dokumente werden im Unterverzeichnis Export des Benutzerverzeichnisses abgelegt:

C:\Users\[Benutzer]\Documents\42 ERP\Export

Ist das Verzeichnis Export noch nicht vorhanden, wird es vom Makro automatisch mit CreateDir() angelegt.

Main()
{
    Benutzerverzeichnis = GetDirectory(14);
    Importdatei = Benutzerverzeichnis + "\\Testdatei.txt";
    Exportverzeichnis = Benutzerverzeichnis + "\\Export";

    // Exportverzeichnis anlegen, wenn es noch nicht vorhanden ist
    if(strlen(FindFirstDir(Exportverzeichnis)) == 0)
    {
        if(CreateDir(Exportverzeichnis))
        {
            print("Exportverzeichnis wurde erstellt.");
        }
        else
        {
            print("Exportverzeichnis konnte nicht erstellt werden.");
        }
    }

    db = Open("ARTIKEL");

    Select(db,"Artikelnummer == '000001'");
    
    if(First(db))
    {
        // Dokument importieren
        if(AttImport(db,Importdatei,0))
        {
            Update(db);
            print("Dokument wurde importiert.");
        }
    }

    if(First(db))
    {
        // Anhangs-ID des aktuellen Datensatzes ermitteln
        Anhang = GetFld("Anhang",db);

        // Anzahl der Dokumente im Anhang
        Anzahl = AttGetCount(Anhang);

        print("Anzahl der Dokumente: " + Anzahl);

        for(i = 0; i = i + 1 ; i < Anzahl)
        {
            // Informationen zum Dokument ermitteln
            Name = AttGetName(Anhang,i);
            ID = AttGetId(Anhang,i);
            Eigenschaften = AttGetProperties(Anhang,i);

            print("Name: " + Name);
            print("ID: " + ID);
            print("Eigenschaften: " + Eigenschaften);

            // Dokument exportieren
            if(AttExport(Anhang,i,Exportverzeichnis))
            {
                print("Dokument wurde exportiert.");
            }

            // Dokument als Base64-kodierten String laden
            Base64 = AttLoadBinary(Anhang,i);

            print("Base64-Inhalt: " + Base64);
        }

        // Das zuvor importierte Dokument wieder löschen
        if(strcmp(Name,"Testdatei.txt") == 0)
        {
            if(AttDelete(db,ID))
            {
                print("Dokument wurde gelöscht.");
            }
        }

        Update(db);
    }

    Close(db);
}

AttLoadBinary(ID,Index)

Liest einen Anhang als Base64 kodierten String

Parameter

Nr. Parameter Beschreibung
1 ID GUID/ID des Anhangs
2 Index Index des Dokumentes

Rückgabewert

Dateiinhalt BASE64 kodiert

Verfügbarkeit

42 Makro Runtime

Beispiel

Importiert eine Datei als Anhang eines Artikels und verwendet anschließend alle Att*-Funktionen, um die Anhänge auszulesen, zu exportieren, als Base64-Inhalt zu laden und den importierten Anhang wieder zu löschen.

Das Makro arbeitet mit dem Artikel 000001. Für diesen Artikel müssen im Register Dokumente bereits Dateien hinterlegt sein. Sind dort noch keine Dokumente vorhanden, sind zunächst entsprechende Dateien beim Artikel zu hinterlegen.

Zusätzlich muss die Importdatei Testdatei.txt im Benutzerverzeichnis erstellt werden. Das Benutzerverzeichnis ist das persönliche 42-ERP-Verzeichnis des aktuell angemeldeten Windows-Benutzers. Ein typischer Pfad ist:

C:\Users\[Benutzer]\Documents\42 ERP

Der tatsächliche Pfad ist vom angemeldeten Windows-Benutzer und der jeweiligen Installation abhängig. Deshalb wird er im Makro mit GetDirectory(14) ermittelt. Der Wert 14 steht bei GetDirectory() für das Benutzerverzeichnis.

Die Importdatei wird unter folgendem Pfad erwartet:

C:\Users\[Benutzer]\Documents\42 ERP\Testdatei.txt

Die exportierten Dokumente werden im Unterverzeichnis Export des Benutzerverzeichnisses abgelegt:

C:\Users\[Benutzer]\Documents\42 ERP\Export

Ist das Verzeichnis Export noch nicht vorhanden, wird es vom Makro automatisch mit CreateDir() angelegt.

Main()
{
    Benutzerverzeichnis = GetDirectory(14);
    Importdatei = Benutzerverzeichnis + "\\Testdatei.txt";
    Exportverzeichnis = Benutzerverzeichnis + "\\Export";

    // Exportverzeichnis anlegen, wenn es noch nicht vorhanden ist
    if(strlen(FindFirstDir(Exportverzeichnis)) == 0)
    {
        if(CreateDir(Exportverzeichnis))
        {
            print("Exportverzeichnis wurde erstellt.");
        }
        else
        {
            print("Exportverzeichnis konnte nicht erstellt werden.");
        }
    }

    db = Open("ARTIKEL");

    Select(db,"Artikelnummer == '000001'");
    
    if(First(db))
    {
        // Dokument importieren
        if(AttImport(db,Importdatei,0))
        {
            Update(db);
            print("Dokument wurde importiert.");
        }
    }

    if(First(db))
    {
        // Anhangs-ID des aktuellen Datensatzes ermitteln
        Anhang = GetFld("Anhang",db);

        // Anzahl der Dokumente im Anhang
        Anzahl = AttGetCount(Anhang);

        print("Anzahl der Dokumente: " + Anzahl);

        for(i = 0; i = i + 1 ; i < Anzahl)
        {
            // Informationen zum Dokument ermitteln
            Name = AttGetName(Anhang,i);
            ID = AttGetId(Anhang,i);
            Eigenschaften = AttGetProperties(Anhang,i);

            print("Name: " + Name);
            print("ID: " + ID);
            print("Eigenschaften: " + Eigenschaften);

            // Dokument exportieren
            if(AttExport(Anhang,i,Exportverzeichnis))
            {
                print("Dokument wurde exportiert.");
            }

            // Dokument als Base64-kodierten String laden
            Base64 = AttLoadBinary(Anhang,i);

            print("Base64-Inhalt: " + Base64);
        }

        // Das zuvor importierte Dokument wieder löschen
        if(strcmp(Name,"Testdatei.txt") == 0)
        {
            if(AttDelete(db,ID))
            {
                print("Dokument wurde gelöscht.");
            }
        }

        Update(db);
    }

    Close(db);
}

CacheInserter(Table,[Begin])

Startet oder beendet den Inserter-Cache einer Tabelle

Parameter

Nr. Parameter Beschreibung
1 Table Datenbanknummer
2 Begin Optional: 0=Flush/End, 1:Begin

Rückgabewert

Diese Funktion gibt keinen Wert zurück.

Verfügbarkeit

42 Makro Runtime

Beispiel

CacheInserter() eignet sich insbesondere für den Import von Massendaten, da Datensätze gesammelt verarbeitet und der Cache in definierten Abständen geschrieben werden kann. Bei größeren Datenmengen kann es sinnvoll sein, den Cache beispielsweise nach jeweils 1000 Datensätzen zu schreiben und anschließend erneut zu aktivieren.

rec = rec + 1;
...
...
...
if(rec % 1000 == 0)
{
    CacheInserter(Table);
    CacheInserter(Table,1);
}

Öffnet die Tabelle IKATALOG und aktiviert mit CacheInserter(Table,1) den Inserter-Cache. Anschließend werden mehrere Datensätze mit SetFld() vorbereitet und mit Update(Table,1) eingefügt. Mit CacheInserter(Table) wird der Cache abschließend geschrieben und beendet. Danach wird die Tabelle geschlossen.

Main()
{
    Table = Open("IKATALOG");

    CacheInserter(Table,1);

    SetFld("Artikelnummer","10001",Table);
    SetFld("Bezeichnung","Beispielartikel",Table);
    Update(Table,1);

    SetFld("Artikelnummer","10002",Table);
    SetFld("Bezeichnung","Weiterer Beispielartikel",Table);
    Update(Table,1);

    CacheInserter(Table);

    Close(Table);
}

Close(Table)

Schließt eine geöffnete Datenbank

Parameter

Nr. Parameter Beschreibung
1 Table Datenbanknummer

Rückgabewert

Diese Funktion gibt keinen Wert zurück.

Verfügbarkeit

Standard

Beispiel

Öffnet die Kundendatenbank und schließt sie anschließend wieder.

Main()
{
    db = Open("Kunde");

    Close(db);
}

Delete(Table)

Löscht den aktuellen Datensatz

Parameter

Nr. Parameter Beschreibung
1 Table Datenbanknummer

Rückgabewert

Diese Funktion gibt keinen Wert zurück.

Verfügbarkeit

Standard

Beispiel

Das Beispiel löscht den Artikel mit der Artikelnummer 999999 aus den Tabellen ARTIKEL und ARTIKELSTATISTIK.

Zunächst wird die Tabelle ARTIKEL geöffnet und nach der Artikelnummer 999999 gefiltert. Wird der Datensatz mit First() gefunden, wird er mit Delete() gelöscht.

Anschließend wird die Tabelle ARTIKELSTATISTIK geöffnet. Auch dort wird nach der Artikelnummer 999999 gesucht und der zugehörige Datensatz gelöscht, wenn er vorhanden ist.

Auf diese Weise werden sowohl der Artikeldatensatz als auch der zugehörige Statistikdatensatz entfernt.

Main()
{
    db = Open("ARTIKEL");

    Select(db,"Artikelnummer == '999999'");

    if(First(db))
    {
        Delete(db);
    }

    Close(db);

    db = Open("ARTIKELSTATISTIK");

    Select(db,"Artikelnummer == '999999'");

    if(First(db))
    {
        Delete(db);
    }

    Close(db);
}

First(Table)

Aktiviert den ersten Datensatz

Parameter

Nr. Parameter Beschreibung
1 Table Datenbanknummer

Rückgabewert

1:OK, 0:Fehler

Verfügbarkeit

Standard

Beispiel

Das Beispiel öffnet die Tabelle ARTIKEL und selektiert den Artikel mit der Artikelnummer 000001. Mit First() wird der erste Datensatz der aktuellen Selektion aktiviert. Liefert First() den Wert 1, wurde ein Datensatz gefunden und die Artikelnummer wird ausgegeben. Bei einem Rückgabewert von 0 wurde kein passender Datensatz gefunden.

Main()
{
    db = Open("ARTIKEL");

    Select(db,"Artikelnummer == '000001'");

    if(First(db))
    {
        Artikelnummer = GetFld("Artikelnummer",db);
        print("Artikelnummer: " + Artikelnummer);
    }
    else
    {
        print("Artikel wurde nicht gefunden.");
    }

    Close(db);
}

GetFld(Field,Table,[PlainText])

Ermittelt den Wert des Datenbankfeldes

Parameter

Nr. Parameter Beschreibung
1 Field Feldname
2 Table Datenbanknummer
3 PlainText Optional: 1=Plaintext, [0=Richtext]

Rückgabewert

Text

Verfügbarkeit

Standard

Beispiel

Das Beispiel öffnet die Tabelle ARTIKEL und selektiert den Artikel mit der Artikelnummer 000001. Mit GetFld() werden die Werte der Felder Artikelnummer und Bezeichnung des aktuellen Datensatzes gelesen und ausgegeben.

Beim Feld Zusatztext wird der optionale Parameter PlainText = 1 verwendet. Dadurch wird der Feldinhalt als reiner Text ohne Richtext-Formatierungen zurückgegeben.

Main()
{
    db = Open("ARTIKEL");

    Select(db,"Artikelnummer == '000001'");

    if(First(db))
    {
        Artikelnummer = GetFld("Artikelnummer",db);
        Bezeichnung = GetFld("Bezeichnung",db);
        Zusatztext = GetFld("Zusatztext",db,1);

        print("Artikelnummer: " + Artikelnummer);
        print("Bezeichnung: " + Bezeichnung);
        print("Zusatztext: " + Zusatztext);
    }

    Close(db);
}

IsField(Tablename,Field)

Ermittelt, ob ein bestimmtes Feld in der Tabelle vorhanden ist

Parameter

Nr. Parameter Beschreibung
1 Tablename Name der Datenbank
2 Field Feldname

Rückgabewert

1:Gültig, 0:Ungültig

Verfügbarkeit

Standard

Beispiel

Das Beispiel prüft, ob die angegebenen Felder in der Tabelle ARTIKEL vorhanden sind. IsField() liefert 1, wenn das Feld vorhanden ist, und 0, wenn das Feld nicht vorhanden ist.

Main()
{
    if(IsField("ARTIKEL","Artikelnummer"))
    {
        print("Das Feld Artikelnummer ist vorhanden.");
    }
    else
    {
        print("Das Feld Artikelnummer ist nicht vorhanden.");
    }

    if(IsField("ARTIKEL","NichtVorhandenesFeld"))
    {
        print("Das Feld ist vorhanden.");
    }
    else
    {
        print("Das Feld ist nicht vorhanden.");
    }
}

KeyReorg(Pfad,Dokumentart,[Verschmelzung])

Ändert mehrere Artikelnummern oder Kundennummern anhand einer Steuerdatei

Parameter

Nr. Parameter Beschreibung
1 Pfad Dateipfad der Steuerdatei
2 Dokumentart Zurzeit nur Artikel oder Kunde möglich
3 Verschmelzung Optional: 0=Keine Verschmelzung, 1=Verschmelzung der Daten

Rückgabewert

Diese Funktion gibt keinen Wert zurück.

Verfügbarkeit

Standard

Beispiel

Die Steuerdatei enthält je Zeile die bisherige und die neue Nummer, getrennt durch einen Tabulator.

Beispiel für Kunde.txt:

4711	4712
4713	4713

Bei Verschmelzung = 0 wird die Kundennummer geändert. Die neue Kundennummer darf dabei noch nicht vorhanden sein.

Bei Verschmelzung = 1 werden die Daten des bisherigen Kunden mit dem Zielkunden zusammengeführt. Im Beispiel werden die Daten des Kunden 4711 dem Kunden 4712 zugeordnet. Der Kunde 4711 wird anschließend gelöscht.

Für Artikel kann KeyReorg() entsprechend mit der Dokumentart Artikel verwendet werden.

Main()
{
    Benutzerverzeichnis = GetDirectory(14);

    KundeDatei = Benutzerverzeichnis + "\\Kunde.txt";
    ArtikelDatei = Benutzerverzeichnis + "\\Artikel.txt";

    // Kundennummern anhand der Steuerdatei ändern
    KeyReorg(KundeDatei,"Kunde",0);

    // Kunden anhand der Steuerdatei zusammenführen
    KeyReorg(KundeDatei,"Kunde",1);

    // Artikelnummern anhand der Steuerdatei ändern
    KeyReorg(ArtikelDatei,"Artikel");
}

Last(Table)

Aktiviert den letzten Datensatz

Parameter

Nr. Parameter Beschreibung
1 Table Datenbanknummer

Rückgabewert

1:OK, 0:Fehler

Verfügbarkeit

Standard

Beispiel

Das Beispiel liest Daten aus der Textdatei XIMPORT.TXT im Benutzerverzeichnis ein. Für neue Artikel wird mit Last() der letzte Datensatz aktiviert und mit Next() ein neuer Datensatz vorbereitet.

Das Benutzerverzeichnis wird mit GetDirectory(14) ermittelt. Der tatsächliche Pfad ist benutzerabhängig und wird deshalb nicht fest vorgegeben.

Main()
{
    Dateiname = strcat(GetDirectory(14), "\\XIMPORT.TXT");

    OpenWait();
    SetWaitText("Lesen (" + Dateiname + ")");
    flnr = OpenFile(Dateiname,0);

    Zeile = fgets(flnr);
    weiter = strlen(Zeile);

    while(weiter)
    {
        Zeile = fgets(flnr);

        if(strlen(Zeile))
        {
            AN = strtok(Zeile,";",0);
            BZ = strtok(Zeile,";",1);
            P1 = Replace(strtok(Zeile,";",2),", ",".");

            SetWaitText("Lesen (" + AN + ")");

            Q = "select bezeichnun from lager ";
            Q = Q + "where lager.artikelnum='" + AN + "'";
            Ergebnis = strtok(Sql(Q),unmask("\\r\\n"),1);

            if(strlen(Ergebnis) > 0)
            {
                Q = "update lager set ";
                Q = Q + "lager.preis1=" + P1 + " ";
                Q = Q + "where lager.artikelnum='" + AN + "';";
                Sql(Q);
            }
            else
            {
                dbnr = Open("ARTIKEL");
                Last(dbnr);
                Next(dbnr);
                SetFld("Artikelnummer",AN,dbnr);
                SetFld("Bezeichnung",BZ,dbnr);
                SetFld("Preis1",P1,dbnr);
                Update(dbnr);
                Close(dbnr);

                dbnr = Open("ARTIKELSTATISTIK");
                Last(dbnr);
                Next(dbnr);
                SetFld("Artikelnummer",AN,dbnr);
                Update(dbnr);
                Close(dbnr);
            }
        }
        else
        {
            weiter = 0;
        }
    }

    CloseFile(flnr);
    CloseWait();
}

Next(Table)

Aktiviert den nächsten Datensatz

Parameter

Nr. Parameter Beschreibung
1 Table Datenbanknummer

Rückgabewert

1:OK, 0:Fehler

Verfügbarkeit

Standard

Beispiel

Das Beispiel öffnet die Tabelle ARTIKEL und aktiviert mit First() den ersten Datensatz. Anschließend werden die Datensätze mit Next() nacheinander durchlaufen. Solange Next() den Wert 1 liefert, ist ein weiterer Datensatz vorhanden. Für jeden aktivierten Datensatz wird die Artikelnummer ausgegeben.

Main()
{
    db = Open("ARTIKEL");

    weiter = First(db);

    while(weiter)
    {
        Artikelnummer = GetFld("Artikelnummer",db);
        print("Artikelnummer: " + Artikelnummer);

        weiter = Next(db);
    }

    Close(db);
}

Open(Tablename)

Öffnet eine Datenbank und liefert eine Datenbanknummer für den direkten Zugriff

Parameter

Nr. Parameter Beschreibung
1 Tablename Name der Datenbank

Rückgabewert

Datenbanknummer, 0:Fehler

Verfügbarkeit

Standard

Beispiel

Das Beispiel öffnet die Tabelle ARTIKEL mit Open(). Bei erfolgreichem Öffnen liefert die Funktion eine Datenbanknummer, die für den weiteren direkten Zugriff auf die Tabelle verwendet wird. Liefert Open() den Wert 0, konnte die Tabelle nicht geöffnet werden.

Nach der Verarbeitung wird die geöffnete Datenbank mit Close() wieder geschlossen.

Main()
{
    db = Open("ARTIKEL");

    if(db)
    {
        print("Datenbank wurde geöffnet. Datenbanknummer: " + db);

        Close(db);
    }
    else
    {
        print("Datenbank konnte nicht geöffnet werden.");
    }
}

Prev(Table)

Aktiviert den vorherigen Datensatz

Parameter

Nr. Parameter Beschreibung
1 Table Datenbanknummer

Rückgabewert

1:OK, 0:Fehler

Verfügbarkeit

Standard


QueryPrintJobs(Result,Dokumentart,ID)

Ermittelt die Druckjobs eines Dokuments

Parameter

Nr. Parameter Beschreibung
1 Result Name des Ergebnis-Arrays
2 Dokumentart Angebot; Rechnung; Artikel
3 ID ID des Dokuments

Rückgabewert

Anzahl Druckjobs

Verfügbarkeit

42 Makro Runtime

Beispiel

Das Beispiel ermittelt die Druckjobs der Rechnung 000001 und exportiert die zugehörigen Dokumente in das Unterverzeichnis PrintJobs des Benutzerverzeichnisses.

Voraussetzung ist, dass die Rechnung bereits mindestens einmal gedruckt wurde und dadurch Druckjobs vorhanden sind. Das Benutzerverzeichnis wird mit GetDirectory(14) ermittelt. Ist das Unterverzeichnis PrintJobs noch nicht vorhanden, wird es automatisch erstellt.

Main()
{
    Array = "PrintJobs";

    Benutzerverzeichnis = GetDirectory(14);
    Path = Benutzerverzeichnis + "\\PrintJobs";

    if(strlen(FindFirstDir(Path)) == 0)
    {
        if(CreateDir(Path))
            print("Exportverzeichnis wurde erstellt.");
        else
            print("Exportverzeichnis konnte nicht erstellt werden.");
    }

    db = Open("Rechnung");
    Nr = "000001";
    Filter = "Nummer == '" + Nr + "' ";
    Select(db,Filter);

    if(First(db))
    {
        ID = GetFld("Rechnungid",db,0);
        Anzahl = QueryPrintJobs(Array,"Rechnung",ID);
        print("Arr = " + GetArrayString(Array));

        if(Anzahl)
        {
            for(i = 0; i = i + 1; i < Anzahl)
            {
                Name = GetArrayVal(Array,i,2);
                AnID = GetArrayVal(Array,i,0);

                if(AttExport(AnID,i,Path))
                    print(Name + " erfolgreich exportiert!");
                else
                    print("Fehler bei Export von " + Name + "!");
            }
        }
    }
    Close(db);
}

Reset(Table)

Setzt den aktuellen Datensatz zurück

Parameter

Nr. Parameter Beschreibung
1 Table Datenbanknummer

Rückgabewert

Diese Funktion gibt keinen Wert zurück.

Verfügbarkeit

Standard

Beispiel

Das Beispiel sucht den Kunden 000001 und setzt zunächst einen neuen Wert für Name2. Anschließend wird geprüft, ob beim Kunden eine Postleitzahl vorhanden ist. Fehlt die Postleitzahl, werden die mit SetFld() vorgenommenen Änderungen mit Reset() zurückgenommen. Nur wenn die Bedingung erfüllt ist, wird der Datensatz mit Update() gespeichert.

Reset() ist sinnvoll, wenn Änderungen an einem Datensatz zunächst vorbereitet werden, vor dem Speichern aber aufgrund einer Bedingung wieder verworfen werden sollen. SetFld() ändert dabei zunächst den aktuellen Arbeitsstand des Datensatzes. Erst Update() speichert die Änderungen dauerhaft. Wird vor Update() festgestellt, dass der Datensatz nicht gespeichert werden soll, können die Änderungen mit Reset() zurückgenommen werden.

Main()
{
    db = Open("Kunde");

    Select(db,"Kundennummer == '000001'");

    if(First(db))
    {
        // Änderung zunächst vorbereiten
        SetFld("Name2","Geänderter Wert",db);

        // Fachliche Voraussetzung prüfen
        PLZ = GetFld("PLZ",db);

        if(strlen(PLZ) == 0)
        {
            // Änderung verwerfen und Datensatz nicht speichern
            Reset(db);

            print("Änderung wurde verworfen, da keine PLZ vorhanden ist.");
        }
        else
        {
            // Änderung speichern
            Update(db);

            print("Änderung wurde gespeichert.");
        }
    }

    Close(db);
}

Select(Table,Filter)

Selektiert die Datenbank nach dem Filterkriterium

Parameter

Nr. Parameter Beschreibung
1 Table Datenbanknummer
2 Filter Selektion

Rückgabewert

Diese Funktion gibt keinen Wert zurück.

Verfügbarkeit

Standard

Beispiel

Select(db,"Name == 'Huber' || Name == 'Meier'");

SetFld(Field,Value,Table)

Setzt den Inhalt eines Datenbankfeldes

Parameter

Nr. Parameter Beschreibung
1 Field Feldname
2 Value Feldinhalt
3 Table Datenbanknummer

Rückgabewert

Diese Funktion gibt keinen Wert zurück.

Verfügbarkeit

Standard

Beispiel

Bewegung innerhalb einer Datenbank, Löschen oder Editieren von Datensätzen.

Main()
{
    // Datenbank öffnen
    dbnr = Open ("Kunde");
    // sortieren
    Sort (dbnr, "Kundennummer", "Name");
    // Sortierrichtung abwärts
    SortDir (dbnr, 1);
    // selektieren
    Name1 = "Huber";
    Name2 = "Meier";
    Filter = "Name == '" + Name1 + "' || Name == '" + Name2 + "'";
    Select (dbnr, Filter);
    // zum ersten Datensatz
    weiter = First (dbnr);
    // alle lesen
    while(weiter)
    {
        // Daten lesen
        Name = GetFld ("Name", dbnr);
        Name = Name + "YYY";
        // Daten schreiben
        SetFld ("Name2", Name, dbnr);
        // Datensatz updaten
        Update (dbnr);
        // nächster Datensatz aktivieren
        weiter = Next (dbnr);
    }
    // letzten löschen
    Delete (dbnr);
    // Datenbank schließen
    Close (dbnr);
    // Datenbank von vorne nach hinten durchlaufen
    dbnr = Open("Kunde");
    weiter = First(dbnr);
    while(weiter)
    {
        print("Name = "+GetFld("Name", dbnr));
        weiter = Next(dbnr);
    }
    Close(dbnr);
}

Sort(Table,[Field1],[Field2],[Field3],[Field4])

Sortiert die Datenbank nach bis zu 4 Datenbankfeldern

Parameter

Nr. Parameter Beschreibung
1 Table Datenbanknummer
2 Field1 Optional: 1.Sortierfeld
3 Field2 Optional: 2.Sortierfeld
4 Field3 Optional: 3.Sortierfeld
5 Field4 Optional: 4.Sortierfeld

Rückgabewert

Diese Funktion gibt keinen Wert zurück.

Verfügbarkeit

Standard

Beispiel

Bewegung innerhalb einer Datenbank, Löschen oder Editieren von Datensätzen.

Main()
{
    // Datenbank öffnen
    dbnr = Open ("Kunde");
    // sortieren
    Sort (dbnr, "Kundennummer", "Name");
    // Sortierrichtung abwärts
    SortDir (dbnr, 1);
    // selektieren
    Name1 = "Huber";
    Name2 = "Meier";
    Filter = "Name == '" + Name1 + "' || Name == '" + Name2 + "'";
    Select (dbnr, Filter);
    // zum ersten Datensatz
    weiter = First (dbnr);
    // alle lesen
    while(weiter)
    {
        // Daten lesen
        Name = GetFld ("Name", dbnr);
        Name = Name + "YYY";
        // Daten schreiben
        SetFld ("Name2", Name, dbnr);
        // Datensatz updaten
        Update (dbnr);
        // nächster Datensatz aktivieren
        weiter = Next (dbnr);
    }
    // letzten löschen
    Delete (dbnr);
    // Datenbank schließen
    Close (dbnr);
    // Datenbank von vorne nach hinten durchlaufen
    dbnr = Open("Kunde");
    weiter = First(dbnr);
    while(weiter)
    {
        print("Name = "+GetFld("Name", dbnr));
        weiter = Next(dbnr);
    }
    Close(dbnr);
}

SortDir(Table,Field1Dir,[Field2Dir],[Field3Dir],[Field4Dir])

Setzt die Sortierrichtung innerhalb einer Datenbank

Parameter

Nr. Parameter Beschreibung
1 Table Datenbanknummer
2 Field1Dir Richtung: 0=Vorwärts, 1=Rückwärts
3 Field2Dir Optional: Richtung: 0=Vorwärts, 1=Rückwärts
4 Field3Dir Optional: Richtung: 0=Vorwärts, 1=Rückwärts
5 Field4Dir Optional: Richtung: 0=Vorwärts, 1=Rückwärts

Rückgabewert

Diese Funktion gibt keinen Wert zurück.

Verfügbarkeit

Standard

Beispiel

Bewegung innerhalb einer Datenbank, Löschen oder Editieren von Datensätzen.

Main()
{
    // Datenbank öffnen
    dbnr = Open ("Kunde");
    // sortieren
    Sort (dbnr, "Kundennummer", "Name");
    // Sortierrichtung abwärts
    SortDir (dbnr, 1);
    // selektieren
    Name1 = "Huber";
    Name2 = "Meier";
    Filter = "Name == '" + Name1 + "' || Name == '" + Name2 + "'";
    Select (dbnr, Filter);
    // zum ersten Datensatz
    weiter = First (dbnr);
    // alle lesen
    while(weiter)
    {
        // Daten lesen
        Name = GetFld ("Name", dbnr);
        Name = Name + "YYY";
        // Daten schreiben
        SetFld ("Name2", Name, dbnr);
        // Datensatz updaten
        Update (dbnr);
        // nächster Datensatz aktivieren
        weiter = Next (dbnr);
    }
    // letzten löschen
    Delete (dbnr);
    // Datenbank schließen
    Close (dbnr);
    // Datenbank von vorne nach hinten durchlaufen
    dbnr = Open("Kunde");
    weiter = First(dbnr);
    while(weiter)
    {
        print("Name = "+GetFld("Name", dbnr));
        weiter = Next(dbnr);
    }
    Close(dbnr);
}

Sql(Query,[MaxRows],[RowDel],[ColDel],[Msg],[Titel],[CacheSeconds])

Ermittelt das Ergebnis einer SQL-Abfrage

Parameter

Nr. Parameter Beschreibung
1 Query SQL Abfrage
2 MaxRows Optional: Maximale Anzahl der Ergebniszeilen
3 RowDel Optional: Delimiter für Zeilen
4 ColDel Optional: Delimiter für Spalten
5 Msg Optional: Fehlermeldungen (1/0)
6 Titel Optional: Titel ausgeben [1=Ja]
7 CacheSeconds Optional: Dauer in Sekunden, wie lange diese Abfrage zwischengespeichert wird (nur für Statische Zwecke geeignet)

Rückgabewert

Text

Verfügbarkeit

Standard

Beispiel

Das Beispiel liest Daten aus der Textdatei XIMPORT.TXT ein und verarbeitet diese weiter.

Die Textdatei ist semikolongetrennt aufgebaut. Die erste Zeile enthält die Feldbezeichnungen, die folgenden Zeilen die zu importierenden Datensätze.

ArtNr;Bezeichnung;Preis1
123456;Dampflok schwarz und rot;80,50
123457;Dampflok schwarz und gelb;82,50
Main()
{
    // Grundwerte
    Dateiname = strcat(GetDirectory (14), "\\XIMPORT.TXT");
    // Öffnen
    OpenWait ();
    SetWaitText ("Lesen ("+Dateiname+")");
    flnr = OpenFile (Dateiname, 0);
    // einlesen
    Zeile= fgets (flnr);
    weiter=strlen(Zeile);
    while(weiter)
    {
        // Zeile einlesen
        Zeile=fgets(flnr);
        // ist was vorhanden
        if(strlen(Zeile))
        {
            AN= strtok (Zeile, ";", 0);
            BZ=strtok(Zeile, ";", 1);
            P1= Replace (strtok(Zeile, ";", 2), ", ", ".");
            SetWaitText("Lesen ("+AN+")");
            // suchen
            Q="select bezeichnun from lager ";
            Q=Q+"where lager.artikelnum='"+AN+"'";
            Ergebnis=strtok(SQL (Q), unmask("\r\n"), 1);
            // schon vorhanden
            if(strlen(Ergebnis)>0)
            {
                // Update, die schon drin sind
                Q="update lager set ";
                Q=Q+"lager.preis1="+P1+" ";
                Q=Q+"where lager.artikelnum='"+AN+"';";
                SQL (Q);
            }
            else
            {
                // einfügen in LAGER
                dbnr= Open ("ARTIKEL");
                Last (dbnr);
                Next (dbnr);
                SetFld ("Artikelnummer", AN, dbnr);
                SetFld("Bezeichnung", BZ, dbnr);
                SetFld("Preis1", P1, dbnr);
                Update (dbnr);
                Close (dbnr);
                // einfügen in ARTSTAT
                dbnr=Open("ARTIKELSTATISTIK");
                Last(dbnr);
                Next(dbnr);
                SetFld("Artikelnummer", AN, dbnr);
                Update(dbnr);
                Close(dbnr);
            }
        }
        else
        weiter=0;
    }
    // beenden
    CloseFile (flnr);
    CloseWait ();
}

SqlArray(Array,Query,[MaxRows],[Msg],[Titel],[CacheSeconds])

Führt eine SQL-Abfrage aus und speichert das Ergebnis in einem Array

Parameter

Nr. Parameter Beschreibung
1 Array Name des Arrays
2 Query SQL Abfrage
3 MaxRows Optional: Maximale Anzahl der Ergebniszeilen
4 Msg Optional: Fehlermeldungen (1/0)
5 Titel Optional: Titel ausgeben [1=Ja]
6 CacheSeconds Optional: Dauer in Sekunden, wie lange diese Abfrage zwischengespeichert wird (nur für Statische Zwecke geeignet)

Rückgabewert

1:OK, 0:Fehler

Verfügbarkeit

Standard

Beispiel

Main()
{
    erg = SqlArray("Kunden", "select1 kundennumm nummer, name, ort from kunde");
    print("Ergebnis = "+erg);
    print("Inhalt des Array = "+GetArrayString("Kunden"));
}

SqlExecute(Query,[Msg])

Führt SQL-Befehle aus, bei denen kein Resultset zurückgegeben wird.

SqlExecute() ist für Schreibzugriffe und SQL-Anweisungen vorgesehen, die Daten oder Datenbankobjekte verändern, beispielsweise INSERT, UPDATE, DELETE, SELECT ... INTO, CREATE TABLE oder DROP TABLE.

Im Unterschied zu Sql() werden die Befehle bei SqlExecute() auf einer Ebene ausgeführt, bei der die verwendete Datenbankverbindung gehalten wird. Dadurch können beispielsweise temporäre Tabellen innerhalb dieser Verbindung weiterhin verwendet werden.

Mit der DB-Schnittstelle werden Datenbankverbindungen nach normalen SQL-Abfragen aktiv geschlossen. Temporäre Tabellen sind nach dem Schließen der Verbindung nicht mehr verfügbar. Dies wirkt sich insbesondere auf SQL-Anweisungen wie SELECT ... INTO, CREATE TABLE oder DROP TABLE aus. Normale lesende Abfragen sind davon nicht betroffen.

Für reine Abfragen mit einem Ergebnis sollten Sql(), SqlArray() oder SqlValue() verwendet werden. SqlExecute() ist insbesondere dann zu verwenden, wenn Schreibzugriffe ohne Ergebnis ausgeführt werden sollen oder eine bestehende Verbindung für nachfolgende SQL-Anweisungen benötigt wird.

Hinweis: Direkte Schreibzugriffe sowie das Anlegen oder Löschen von Tabellen über SQL werden grundsätzlich nicht empfohlen und sollten nur verwendet werden, wenn dies für den jeweiligen Anwendungsfall erforderlich ist.

Parameter

Nr. Parameter Beschreibung
1 Query SQL Abfrage
2 Msg Optional: Fehlermeldungen (1/0)

Rückgabewert

Diese Funktion gibt keinen Wert zurück.

Verfügbarkeit

Standard


SqlValue(Query,[Msg],[CacheSeconds])

Ermittelt das Ergebnis einer SQL-Abfrage mit einem einzigen Ergebniswert

Parameter

Nr. Parameter Beschreibung
1 Query SQL Abfrage
2 Msg Optional: Fehlermeldungen (1/0)
3 CacheSeconds Optional: Dauer in Sekunden, wie lange diese Abfrage zwischengespeichert wird (nur für Statische Zwecke geeignet)

Rückgabewert

Text

Verfügbarkeit

42 Makro Runtime

Beispiel

Das Beispiel ermittelt den Namen des Kunden mit der Kundennummer 000001. Da SqlValue() genau einen einzelnen Ergebniswert zurückliefert, kann der Rückgabewert direkt einer Variablen zugewiesen werden.

Mit dem Parameter Msg kann die Ausgabe von Fehlermeldungen gesteuert werden. CacheSeconds gibt an, wie viele Sekunden das Ergebnis der SQL-Abfrage zwischengespeichert wird. Der Wert 0 bedeutet, dass keine Zwischenspeicherung erfolgt.

Die Zwischenspeicherung eignet sich insbesondere für Abfragen auf Werte, die sich nur selten ändern. Bei häufig veränderten Daten sollte CacheSeconds entsprechend klein gewählt oder auf 0 gesetzt werden.

Main()
{
    Kundennummer = "000001";

    Query = "select name from kunde ";
    Query = Query + "where kundennumm='" + Kundennummer + "'";

    Name = SqlValue(Query,1,0);

    print("Kundenname: " + Name);
}

Start(Funktion,[Par1],[Par2])

Startet eine interne freigegebene Programmfunktion

Parameter

Nr. Parameter Beschreibung
1 Funktion Funktionsname
2 Par1 Optional: [1.Parameter]
3 Par2 Optional: [2.Parameter]

Rückgabewert

Diese Funktion gibt keinen Wert zurück.

Verfügbarkeit

Standard


StartImport([SessionID],[Validate])

Aktiviert und verarbeitet den Importstapel

Mit dem Parameter SessionID kann gezielt eine bestimmte Importsession gestartet werden. Dabei werden ausschließlich die Datensätze verarbeitet, die über die ISTARTID dieser Session zugeordnet sind. Andere gleichzeitig im Importverzeichnis vorhandene Datensätze bleiben unberücksichtigt.

Die Verwendung einer ISTARTID ist insbesondere im Mehrbenutzerbetrieb empfehlenswert. Ohne eine Zuordnung über die ISTART-Tabelle verarbeitet der Belegimport grundsätzlich alle gefundenen Importdateien, die keinem ISTART-Eintrag zugeordnet sind. Die ISTARTID stellt somit die eindeutige Verbindung zwischen einem gestarteten Import und den dazugehörigen Datensätzen her und verhindert, dass versehentlich Daten eines anderen Imports mit verarbeitet werden.

Mit dem Parameter Validate kann festgelegt werden, ob der Import tatsächlich ausgeführt oder nur geprüft werden soll. Bei Validate = 1 wird ein reiner Validierungslauf durchgeführt. Die Daten werden dabei geprüft, jedoch nicht importiert. Mit Validate = 0 erfolgt der tatsächliche Import.

Wird keine SessionID angegeben, erfolgt keine gezielte Einschränkung auf eine bestimmte Importsession. Für Prozesse, bei denen mehrere Benutzer oder Anwendungen gleichzeitig Importdaten bereitstellen, sollte daher nach Möglichkeit mit einer eindeutigen ISTARTID gearbeitet werden.

Parameter

Nr. Parameter Beschreibung
1 SessionID Optional: Started eine einzelne Importsession, bei der die Spalte IStartID des Importstapels verwendet wurde
2 Validate Optional: Nur Validierungslauf: Es werden dabei keinerlei Datensätze importiert! ([0:Echtlauf], 1=Validierung)

Rückgabewert

0: OK, >0: Anzahl ignorierter Belege, da in Bearbeitung oder fehlerhaft, -1: Stapel in Benutzung, Vorgang abgebrochen

Verfügbarkeit

Standard

Beispiel

Main()
{
    StartImport();
    StartImport("B2C78264-F823-7F4D-ABD3-3FE8CE849FE8");
    StartImport("B2C78264-F823-7F4D-ABD3-3FE8CE849FE8", "1");
    StartImport("", "1");
}

Update(Table,[InsertOnly])

Speichert den aktuellen Datensatz der entsprechenden Datenbank zurück

Parameter

Nr. Parameter Beschreibung
1 Table Datenbanknummer
2 InsertOnly Optional: 0=Insert oder Update, 1=Neu

Rückgabewert

1:OK, 0:Fehler

Verfügbarkeit

Standard

Beispiel

Bewegung innerhalb einer Datenbank, Löschen oder Editieren von Datensätzen.

Main()
{
    // Datenbank öffnen
    dbnr = Open ("Kunde");
    // sortieren
    Sort (dbnr, "Kundennummer", "Name");
    // Sortierrichtung abwärts
    SortDir (dbnr, 1);
    // selektieren
    Name1 = "Huber";
    Name2 = "Meier";
    Filter = "Name == '" + Name1 + "' || Name == '" + Name2 + "'";
    Select (dbnr, Filter);
    // zum ersten Datensatz
    weiter = First (dbnr);
    // alle lesen
    while(weiter)
    {
        // Daten lesen
        Name = GetFld ("Name", dbnr);
        Name = Name + "YYY";
        // Daten schreiben
        SetFld ("Name2", Name, dbnr);
        // Datensatz updaten
        Update (dbnr);
        // nächster Datensatz aktivieren
        weiter = Next (dbnr);
    }
    // letzten löschen
    Delete (dbnr);
    // Datenbank schließen
    Close (dbnr);
    // Datenbank von vorne nach hinten durchlaufen
    dbnr = Open("Kunde");
    weiter = First(dbnr);
    while(weiter)
    {
        print("Name = "+GetFld("Name", dbnr));
        weiter = Next(dbnr);
    }
    Close(dbnr);
}

XmlExport(Table,FileName,[Schema],[MaxRecords],[Open],[Filter])

Erstellt eine XML Datei mit dem Inhalt des Datensatzes mit oder ohne XML Definition

Parameter

Nr. Parameter Beschreibung
1 Table Datenbanknummer
2 FileName Dateiname
3 Schema Optional: XML Definition
4 MaxRecords Optional: Maximale Anzahl der exportieren Datensätze [0=Alle]
5 Open Optional: Nach erfolgreichen Export XML Dokument anzeigen [1=Anzeige]
6 Filter Optional: Selektion

Rückgabewert

Diese Funktion gibt keinen Wert zurück.

Verfügbarkeit

42 Makro Runtime & 42 XML

Beispiel

Das Beispiel exportiert ausschließlich den Artikel mit der Artikelnummer 000001 als XML-Datei.

Das Benutzerverzeichnis wird mit GetDirectory(14) ermittelt. Die erzeugte Datei wird dort unter dem Namen Artikel_Export.xml gespeichert.

Mit dem Filter

Artikelnummer == '000001'

wird festgelegt, dass nur dieser Artikeldatensatz exportiert wird.

Der Parameter MaxRecords = 1 begrenzt den Export auf maximal einen Datensatz. Mit Open = 1 wird die erzeugte XML-Datei nach dem erfolgreichen Export automatisch geöffnet.

Main()
{
    Benutzerverzeichnis = GetDirectory(14);
    ExportDatei = Benutzerverzeichnis + "\\Artikel_Export.xml";

    db = Open("ARTIKEL");

    // Nur den Artikel 000001 als XML-Datei exportieren
    XmlExport(db,ExportDatei,"",1,1,"Artikelnummer == '000001'");

    Close(db);
}

XmlGet(Table,[InsertHeader])

Liefert den Inhalt des Datensatzes als XML

Parameter

Nr. Parameter Beschreibung
1 Table Datenbanknummer
2 InsertHeader Optional: Header einfügen [1=Ja]

Rückgabewert

Diese Funktion gibt keinen Wert zurück.

Verfügbarkeit

42 Makro Runtime & 42 XML


XmlImport(FileName,[Schema],[ElementTag],[RecordIndex],[Recursive],[Replace])

Importiert eine XML Datei mit oder ohne XML Definition

Parameter

Nr. Parameter Beschreibung
1 FileName Dateiname
2 Schema Optional: XML Definition
3 ElementTag Optional: XML Tagname, z.B. KUNDE
4 RecordIndex Optional: [-1]=Alle, 0-?=Index des zu Importierenden Datensatzes
5 Recursive Optional: Rekursiv [0]=Nein, nur Hauptdatensätze, [1]=Inklusive sämtlicher Childnodes.
6 Replace Optional: [0]=Nur neue Datensätze importieren, 1=Ersetzen

Rückgabewert

0:Success: Import erfolgreich
1:Error: Fehler beim Import

Verfügbarkeit

42 Makro Runtime & 42 XML

Beispiel

Das Beispiel importiert einen neuen Artikel mit der Artikelnummer 999999 und legt anschließend den dazugehörigen Datensatz in der Artikelstatistik an.

Die beiden XML-Dateien müssen im Benutzerverzeichnis vorhanden sein. Das Benutzerverzeichnis wird mit GetDirectory(14) ermittelt.

Für den Artikelimport wird die Datei XMLImport_Artikel.xml verwendet. Anschließend wird mit XML_ImportArtikelstatistik.xml der zugehörige Statistikdatensatz angelegt.

Der Rückgabewert von XmlImport() lautet bei einem erfolgreichen Import 0: Success und bei einem Fehler 1:Error. Im Beispiel wird deshalb das erste Zeichen des Rückgabewerts geprüft. Nur wenn der Artikel erfolgreich importiert wurde, erfolgt anschließend der Import der Artikelstatistik.

Main()
{
    Benutzerverzeichnis = GetDirectory(14);

    ArtikelDatei = Benutzerverzeichnis + "\\XMLImport_Artikel.xml";
    StatistikDatei = Benutzerverzeichnis + "\\XML_ImportArtikelstatistik.xml";

    // Artikel importieren
    Ergebnis = XmlImport(ArtikelDatei,"","",0,0,0);

    if(stricmp(Left(Ergebnis,1),"0") == 0)
    {
        print("Artikel 999999 wurde erfolgreich importiert.");

        // Zugehörigen Statistikdatensatz importieren
        Ergebnis = XmlImport(StatistikDatei,"","",0,0,0);

        if(stricmp(Left(Ergebnis,1),"0") == 0)
        {
            print("Artikelstatistik wurde erfolgreich importiert.");
        }
        else
        {
            print("Fehler beim Import der Artikelstatistik: " + Ergebnis);
        }
    }
    else
    {
        print("Fehler beim Import des Artikels: " + Ergebnis);
    }
}

Aufbau der Datei XMLImport_Artikel.xml

Die XML-Datei enthält den anzulegenden Artikel. Im Beispiel wird der Artikel 999999 mit der Bezeichnung XMLImport, dem Preis 19.990 und dem Zusatztext Artikel per XML-Import angelegt angelegt.

Für LAGERID muss eine eindeutige GUID verwendet werden. Die im Beispiel angegebene GUID darf bei einer erneuten Verwendung des Beispiels nicht bereits vorhanden sein.

Der Inhalt der Datei kann wie folgt aufgebaut werden und direkt kopiert werden:

<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
  <ARTIKEL>
    <ARTIKELNUMMER>999999</ARTIKELNUMMER>
    <BEZEICHNUNG>XMLImport</BEZEICHNUNG>
    <PREIS1>19.990</PREIS1>
    <LAGERID><![CDATA&#91;81ff0133-fa50-4563-b267-36d750593503&#93;]></LAGERID>
    <ZUSATZTEXT><![CDATA&#91;Artikel per XML-Import angelegt&#93;]></ZUSATZTEXT>
  </ARTIKEL>
</ROOT>

Aufbau der Datei XML_ImportArtikelstatistik.xml

Beim XML-Import eines Artikels wird der zugehörige Datensatz in ARTIKELSTATISTIK nicht automatisch angelegt. Dieser muss deshalb mit einer zweiten XML-Datei importiert werden.

Die Statistikfelder enthalten die Initialwerte 0.000, 0.00000 beziehungsweise 0.00. Die ARTIKELNUMMER muss mit der Artikelnummer des zuvor importierten Artikels übereinstimmen. Für ARTSTATID muss eine eigene eindeutige GUID verwendet werden.

Der Inhalt der Datei kann wie folgt aufgebaut werden und direkt kopiert werden:

<?xml version="1.0" encoding="UTF-8"?>
<ROOT>
  <ARTIKELSTATISTIK>
    <ABRUFAUFTRAG>0.000</ABRUFAUFTRAG>
    <ABRUFBESTELLUNG>0.000</ABRUFBESTELLUNG>
    <ARTIKELNUMMER>999999</ARTIKELNUMMER>
    <ARTSTATID><![CDATA&#91;916c1644-1c48-4837-a77c-8fcef211fc67&#93;]></ARTSTATID>
    <AUFTRAG>0.000</AUFTRAG>
    <BEARBEITET><![CDATA&#91;04.09.2026 14:42:17&#93;]></BEARBEITET>
    <BESTAND>0.000</BESTAND>
    <BESTELLUNG>0.000</BESTELLUNG>
    <EKMITTEL>0.00000</EKMITTEL>
    <EKMITTEL2>0.00000</EKMITTEL2>
    <EXTERNRESERVE>0.000</EXTERNRESERVE>
    <FERTIGUNG>0.000</FERTIGUNG>
    <GESAMTANZAHL>0.000</GESAMTANZAHL>
    <GESAMTPREIS>0.00</GESAMTPREIS>
    <LETZTEANZAHL>0.000</LETZTEANZAHL>
    <LETZTEREK>0.00000</LETZTEREK>
    <UMSATZ>0.00</UMSATZ>
    <UMSATZANZAHL>0.000</UMSATZANZAHL>
    <WARENZUGANG>0.000</WARENZUGANG>
  </ARTIKELSTATISTIK>
</ROOT>

XmlLoad(Table,FileName,ElementTag,[Index])

Lädt einen Datensatz von einer XML Datei

Parameter

Nr. Parameter Beschreibung
1 Table Datenbanknummer
2 FileName Dateiname
3 ElementTag Elementname
4 Index Optional: Index

Rückgabewert

Diese Funktion gibt keinen Wert zurück.

Verfügbarkeit

42 Makro Runtime & 42 XML


XmlSave(Table,FileName)

Speichert den Datensatz als XML Datei

Parameter

Nr. Parameter Beschreibung
1 Table Datenbanknummer
2 FileName Dateiname

Rückgabewert

Diese Funktion gibt keinen Wert zurück.

Verfügbarkeit

42 Makro Runtime & 42 XML