# Beispiele / Tipps

In diesem Kapitel stellen wir anhand von Anforderungen diverse Praxisbeispiele von Dokumentimport-Definitionen vor. Ebenfalls sammeln wir hier Beispiele, welche helfen sollen, komplexere Anforderungen umzusetzen.

## Beispiel 1

{% tabs %}
{% tab title="Anforderung | Beispiel 1" %}
In einem Verzeichnis liegen PDF Dateien mit folgendem Dateiaufbau: `39851_1429374_1430126.pdf`\
\
Anhand der ersten Nummer (bis zum \_) soll eine Primärverknüpfung zur Adresse erstellt werden. Die zweite Nummer (nach dem \_) soll eine allgemeine Verknüpfung zu einem bestehenden Dokument setzen.\
\
Das Stichwort soll in CAS genesisWorld folgendermassen gesetzt werden: \
Order \[letzte Nummer des Dateinamen]\
Beispiel: Order 1430126\
\
Das Dokument mit den Teilnehmern "Alle öffentlich" angelegt. Als Kategorie soll zudem "Order" gesetzt werden, die letzte Nummer des Dokumentennamen soll als Nummer beim Dokument hinterlegt werden.

Nach dem Archivieren soll das Ursprungsdokument gelöscht werden.
{% endtab %}

{% tab title="Lösung | Beispiel 1" %}
Mit folgender Definition kann der gewünschte Import umgesetzt werden:

```xml
<?xml version="1.0" encoding="utf-8" ?>
<DocumentImporter>
  <Directory name="c:\Projects\Artwin\DocImportDir\">
    <Actions>
      <Action type="DeleteFile" event="OnSuccess"/>
      <Action type="MoveFile" event="OnFailure">".\\Error\\"</Action>
    </Actions>
    <DocumentFields>
      <DOCDATE>GetFileDate()</DOCDATE>
      <DOCNUMER>GetFileName().Split('_', '.')[2]</DOCNUMER>
      <KEYWORD>"Order " + GetFileName().Split('_', '.')[2]</KEYWORD>
      <CATEGORY>"Order"</CATEGORY>
      <OWNERNAME>"Alle (öffentlich)"</OWNERNAME>
    </DocumentFields>
    <Version type="NewDocument"/>
    <Links>
      <Link object="ADDRESS" attribute="ITDDOCADR">
        <Filter>"ADRNUMBER = '" + GetFileName().Split('_', '.')[0] + "'"</Filter>
      </Link>
      <Link object="DOCUMENT" attribute="Verbindung">
        <Filter>"DOCNUMBER = '" + GetFileName().Split('_', '.')[1] + "'"</Filter>
      </Link>
    </Links>
  </Directory>
</DocumentImporter>
```

{% endtab %}
{% endtabs %}

## Beispiel 2

{% tabs %}
{% tab title="Anforderung | Beispiel 2" %}
In einem Verzeichnis liegen PDF Dateien mit folgendem Dateiaufbau: `39851_Dokumentenspezifikation.pdf`\
\
Anhand der ersten Nummer (bis zum \_) soll eine Primärverknüpfung zu einem Projekt erstellt werden. Dabei ist zu berücksichtigen, dass auf Grund der Primärverknüpfung auch eine Verknüpfung zur Adresse erstellt wird.\
\
Das Stichwort soll in CAS genesisWorld folgendermassen gesetzt werden: Dokumentenspezifikation vom \[Importdatum]\
\
Als Typ soll "Spezifikation" und der Status "aktiv" gesetzt werden. Als Teilnehmer wird die Gruppe "Projektteam" gesetzt mit dem Fremdzugriffsrecht "persönlich".\
\
Nach dem Archivieren soll das Ursprungsdokument in den Archivordner verschoben werden.
{% endtab %}

{% tab title="Lösung | Beispiel 2" %}
Mit folgender Definition kann der gewünschte Import umgesetzt werden:

```xml
<?xml version="1.0" encoding="utf-8" ?>
<DocumentImporter>
  <Directory name="c:\Projects\Artwin\DocImportDir\">
    <Actions>
      <Action type="MoveFile" event="OnSuccess">".\\Archiviert\\"</Action>
      <Action type="MoveFile" event="OnFailure">".\\Error\\"</Action>
    </Actions>
    <DocumentFields>
      <KEYWORD>"Dokumentenspezifikation vom " + DateTime.Now.ToShortDateString()</KEYWORD>
      <GWSTYPE>"Spezifikation"</GWSTYPE>
      <GWSSTATUS>"aktiv"</GWSSTATUS>
      <OWNERNAME>"Projektteam"</OWNERNAME>
      <FOREIGNEDITPERMISSION>-1</FOREIGNEDITPERMISSION>
    </DocumentFields>
    <Version type="NewDocument"/>
    <Links>
      <Link object="PROJECT" attribute="ITDDOCPRJ">
        <Filter>"PRJNUMBER = '" + GetFileName().Split('_')[0] + "'"</Filter>
      </Link>
    </Links>
  </Directory>
</DocumentImporter>
```

{% endtab %}
{% endtabs %}

## Beispiel 3

{% tabs %}
{% tab title="Anforderung | Beispiel 3" %}
Es werden mehrere Verzeichnisse über den Importer überwacht, Beispiel:

Ordner "ANG" \
Ordner "AUF" \
Ordner "REC"\
\
Der Dateinamen Aufbau ist in allen Verzeichnissen identisch: `tu54596_45652.pdf`\
\
Die ersten zwei Kürzel stehen für den Benutzer. Beim Archivieren des Dokumentes soll dieser direkt als Teilnehmer gesetzt werden (in dem Beispiel "tu"). Die darauffolgende Nummer bis zum \_ dient als Verknüpfungsfeld zur Adresse (allgemeine Verknüpfung).\
\
Das Stichwort soll in CAS genesisWorld folgendermassen gesetzt werden: \
Beim Ordner "ANG" = Angebot \[letzte Nummer aus Dateiname] vom \[Dokumentendatum]\
\
Zusätzlich soll eine eigenes DB Feld (ART\_DOKTYP/Varchar 50) mit dem Wert "Angebot" befüllt werden.\
\
Die weiteren Ordner sollen identisch aufgelöst werden, die Werte aber jeweils angepasst werden AUF = Auftrag, REC = Rechnung.\
\
Nach dem Archivieren soll das Ursprungsdokument jeweils in den Archivordner verschoben werden.
{% endtab %}

{% tab title="Lösung | Beispiel 3" %}
Mit folgender Definition kann der gewünschte Import umgesetzt werden:

```xml
<?xml version="1.0" encoding="utf-8" ?>
<DocumentImporter>
  <Directory name="c:\Projects\Artwin\DocImportDir\ANG\">
    <Actions>
      <Action type="MoveFile" event="OnSuccess">".\\Archiviert\\"</Action>
    </Actions>
    <Code>
      string TranslateInitial(string value)
      {
        if(value == "tu")
          return "Testuser";
        return value;
      }
    </Code>
    <DocumentFields>
      <KEYWORD>"Angebot " + GetFileName().Split('_', '.')[1] + " vom " + GetFileDate().ToShortDateString()</KEYWORD>
      <OWNERNAME>TranslateInitial(GetFileName().Substring(0, 2))</OWNERNAME>
      <ART_DOKTYP>"Angebot"</ART_DOKTYP>
    </DocumentFields>
    <Version type="NewDocument"/>
    <Links>
      <Link object="ADDRESS" attribute="VERBINDUNG">
        <Filter>"ADRNUMBER = '" + GetFileName().Split('_')[0].Remove(0, 2) + "'"</Filter>
      </Link>
    </Links>
  </Directory>
  <Directory name="c:\Projects\Artwin\DocImportDir\AUF\">
    <Actions>
      <Action type="MoveFile" event="OnSuccess">".\\Archiviert\\"</Action>
    </Actions>
    <DocumentFields>
      <KEYWORD>"Auftrag " + GetFileName().Split('_', '.')[1] + " vom " + GetFileDate().ToShortDateString()</KEYWORD>
      <OWNERNAME>GetFileName().Substring(0, 2)</OWNERNAME>
      <ART_DOKTYP>"Auftrag"</ART_DOKTYP>
    </DocumentFields>
    <Version type="NewDocument"/>
    <Links>
      <Link object="ADDRESS" attribute="VERBINDUNG">
        <Filter>"ADRNUMBER = '" + GetFileName().Split('_')[0].Remove(0, 2) + "'"</Filter>
      </Link>
    </Links>
  </Directory>
  <Directory name="c:\Projects\Artwin\DocImportDir\REC\">
    <Actions>
      <Action type="MoveFile" event="OnSuccess">".\\Archiviert\\"</Action>
    </Actions>
    <DocumentFields>
      <KEYWORD>"Rechnung " + GetFileName().Split('_', '.')[1] + " vom " + GetFileDate().ToShortDateString()</KEYWORD>
      <OWNERNAME>GetFileName().Substring(0, 2)</OWNERNAME>
      <ART_DOKTYP>"Rechnung"</ART_DOKTYP>
    </DocumentFields>
    <Version type="NewDocument"/>
    <Links>
      <Link object="ADDRESS" attribute="VERBINDUNG">
        <Filter>"ADRNUMBER = '" + GetFileName().Split('_')[0].Remove(0, 2) + "'"</Filter>
      </Link>
    </Links>
  </Directory>
</DocumentImporter>
```

{% endtab %}
{% endtabs %}

## Beispiel 4

{% tabs %}
{% tab title="Anforderung | Beispiel 4" %}
In einem Verzeichnis liegen PDF Dateien mit folgendem Dateiaufbau: `39851_Dokumentenspezifikation.pdf`\
\
Anhand der ersten Nummer (bis zum \_) soll eine bewertete Verknüpfung zu einem eigenen Objekt erstellt werden.\
\
Das Stichwort soll in CAS genesisWorld folgendermassen gesetzt werden: Dokumentenspezifikation \[Nummer], die ersten 5 Zeichen werden zudem ins Feld Nummer des Dokumentes geschrieben. \
\
Als Teilnehmer wird "Alle öffentlich" gesetzt. Falls bereits ein Dokument mit der gleichen Nummer bestehen sollte, wird das Dokument als Version eingecheckt.\
\
Nach dem Archivieren soll das Ursprungsdokument gelöscht werden.
{% endtab %}

{% tab title="Lösung | Beispiel 4" %}
Mit folgender Definition kann der gewünschte Import umgesetzt werden:

```xml
<?xml version="1.0" encoding="utf-8" ?>
<DocumentImporter>
  <Directory name="c:\Projects\Artwin\DocImportDir\">
    <Actions>
      <Action type="DeleteFile" event="OnSuccess"></Action>
    </Actions>
    <DocumentFields>
      <KEYWORD>"Dokumentenspezifikation " + GetFileName().Split('_')[0]</KEYWORD>
      <DOCNUMBER>GetFileName().Substring(0,5)</DOCNUMBER>
      <OWNERNAME>"Alle (öffentlich)"</OWNERNAME>
    </DocumentFields>
    <Version type="NewVersionOrDocument">
      <Filter>"DOCNUMBER = '" + GetFileName().Split('_')[0] + "'"</Filter>
    </Version>
    <Links>
      <Link object="TASK" attribute="Verbindung">
        <Filter>"TSKNUMBER = '" + GetFileName().Split('_')[0] + "'"</Filter>
      </Link>
    </Links>
  </Directory>
</DocumentImporter>
```

{% endtab %}
{% endtabs %}

## Tipps

Wir haben in diesem Abschnitt einige Tipps und Parametern zusammengetragen, welche weitere Möglichkeiten aufzeigen.

### Anforderung Teilnehmer/Rechte übernehmen

{% tabs %}
{% tab title="Anforderung | Teilnehmerrechte" %}
Dokumente sollten zu Projekten primärverknüpft werden. Dabei sollen die Teilnehmer sowie die Fremdzugriffsrechte aus dem bestehenden CRM-Projekt übernommen werden. Die Projektnummer steht an erster Stelle des Dateinamen und im CRM steht die dazugehörige Nummer im Standardfeld (PRJNUMBER).
{% endtab %}

{% tab title="Lösung Teilnehmerrechte" %}
Mit folgender Definition im Bereich der DocumentFields kann das gewünschte Ergebnis erzielt werden:

```xml
<OWNERNAME>GetStringOfRecord("PROJECT","OWNERNAME", "PRJNUMBER = '" + GetFileName().Split('_', '(')[0] + "'")</OWNERNAME>
<FOREIGNEDITPERMISSION>GetStringOfRecord("PROJECT","FOREIGNEDITPERMISSION", "PRJNUMBER = '" + GetFileName().Split('_', '(')[0] + "'")</FOREIGNEDITPERMISSION>
```

{% endtab %}
{% endtabs %}

### Anforderung Datum aus dem Dateinamen lesen

{% tabs %}
{% tab title="Anforderung | Datum auslesen" %}
Der Dateiname enthält ein Datum, welches ausgelesen und in ein Datums-Feld geschrieben werden soll. Beispiel: `Muster_21092015.pdf`
{% endtab %}

{% tab title="Lösung | Datum auslesen" %}
Mit folgender Definition im Bereich der DocumentFields kann das gewünschte Ergebnis erzielt werden.

```xml
<DOCDATE>DateTime.ParseExact(GetFileName().Split('_', '.')[1], "ddMMyyyy", System.Globalization.CultureInfo.InvariantCulture);</DOCDATE>
```

{% endtab %}
{% endtabs %}

#### Weiteres Beispiel

{% tabs %}
{% tab title="Anforderung | Datum auslesen 2" %}
Der Dateiname enthält ebenfalls ein Datum, welches ausgelesen und in das Datums-Feld geschrieben werden soll. In dem Beispiel ist das Datum aber nicht immer durch ein eindeutiges Trennzeichen ermittelbar und das Datum enthält "-" Zeichen dazwischen: Beispiel: `11411_Muster_KG-22-04-21.xlsm` oder `18023_Muster1_GmbH_22-04-21.xlsm`
{% endtab %}

{% tab title="Lösung | Datum auslesen 2" %}
Mit folgender Definition im Bereich der DocumentFields kann das gewünschte Ergebnis erzielt werden. Weitere Beispiele der Formatzeichenfolgen sind auf der .NET Webseite zu finden.

```xml
<DOCDATE>DateTime.ParseExact(System.IO.Path.GetFileNameWithoutExtension(GetFileName()).Substring(System.IO.Path.GetFileNameWithoutExtension(GetFileName()).Length-8, 8).Replace("-", ""), "ddMMyy",System.Globalization.CultureInfo.InvariantCulture)</DOCDATE>
```

Wenn das obige Datum im Stichwort verwendet werden möchte, kann dies folgendermassen umgewandelt werden:

```xml
<KEYWORD>"Dokument vom " +System.IO.Path.GetFileNameWithoutExtension(GetFileName()).Substring(System.IO.Path.GetFileNameWithoutExtension(GetFileName()).Length-8, 8).Replace("-", ".")</KEYWORD>
```

{% endtab %}
{% endtabs %}

### Anforderung Wert aus Verknüpfung auslesen

{% tabs %}
{% tab title="Anforderung | Wert aus Verknüpfung" %}
Beim Archivieren soll der Firmenname aus der verknüpften Adresse gezogen und ins Feld Schlagworte (NOTES) geschrieben werden. Im Dateiname ist die Kundennummer enthalten, Beispiel: `12232_Dokument.pdf`
{% endtab %}

{% tab title="Lösung | Wert aus Verknüpfung" %}
Mit der Funktion GetStringOfRecord kann ein Datenobjekt und ein dazugehöriges Feld ermittelt werden. Dabei kann neben der Quelle auch ein Filter hinterlegt werden, wenn beispielsweise nur im Bereich der Firmen gesucht werden soll.

```xml
<NOTES>GetStringOfRecord("ADDRESS", "COMPNAME", "ADRNUMBER = '" + GetFileName().Split('_')[0] + "' and gwiscompany = 1 and gwiscontact=0")</NOTES>
```

{% endtab %}
{% endtabs %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.artwin.ch/dokumentimporter/dokumentation/beispiele-tipps.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
