# DocumentFields-Element

Im Bereich `DocumentFields` definieren Sie, die einzelnen Felder, welche beim Import befüllt werden sollen.&#x20;

```xml
<DocumentFields>
  <DOCDATE>GetFileDate()</DOCDATE>
  <DOCNUMER>GetFileName().Split('_', '.')[2]</DOCNUMER>
  <KEYWORD>"Bestellung Nr. " + GetFileName().Split('_', '.')[2]</KEYWORD>
  <CATEGORY>"Bestellung"</CATEGORY>
  <OWNERNAME>"Alle (öffentlich)"</OWNERNAME>
</DocumentFields>
```

Das Element wird dabei immer so bezeichnet, wie das Feld in der Datenbank heisst (Beispiel: Stichwort = KEYWORD). Der Inhalt der Elemente ist Programmcode und kann beliebig zusammengestellt werden. Bitte beachten Sie, dass der Datentyp des Programmcodes mit dem Feldtyp übereinstimmen muss.

{% tabs %}
{% tab title="Beispiel" %} <mark style="color:red;">**FALSCH:**</mark> \<KEYWORD>GetFileDate()\</KEYWORD>

{% hint style="info" %}
Das Feld Keyword ist ein varchar-Feld, somit muss der Datums-Wert in einen String gewandelt werden.
{% endhint %}

<mark style="color:green;">**RICHTIG:**</mark> \<KEYWORD>GetFileDate().ToString()\</KEYWORD>
{% endtab %}
{% endtabs %}

{% tabs %}
{% tab title="Beispiel" %} <mark style="color:red;">**FALSCH:**</mark> \<DOCDATE>"14.07.2014"\</DOCDATE>

{% hint style="info" %}
Das Feld DocDate ist ein Datumsfeld welches keinen String-Wert aufnehmen kann.
{% endhint %}

<mark style="color:green;">**RICHTIG:**</mark> \<DOCDATE>DateTime.Parse("14.07.2014")\</DOCDATE>
{% endtab %}
{% endtabs %}

Soll ein Text ausgegeben werden, muss dieser in Anführungszeichen gesetzt werden. Sollte in solchen Elementen Zeichen notwendig sein, die in XML-Elementen nicht erlaubt sind (z.B. > oder <), kann der komplette Inhalt in CData-Tags eingefasst werden. Beispiel:

```xml
<DocumentFields>
  <Keyword><![CDATA["Dokument < Auftrag vom " + DateTime.Now.ToString()]]></Keyword>
</DocumentFields>
```

Für den Zugriff auf Informationen der Quelldatei stehen folgende Funktionen zur Verfügung:b

<table><thead><tr><th width="315">Funktion</th><th>Beschreibung</th></tr></thead><tbody><tr><td><strong>GetFileDate()</strong></td><td>Liefert das Änderungsdatum der zu importierenden Datei zurück</td></tr><tr><td><strong>GetFileDate().ToShortDateString()</strong></td><td>Liefert das Änderungsdatum der zu importierenden Datei in der Kurzform (dd.mm.YYYY) zurück</td></tr><tr><td><strong>GetFileName()</strong></td><td>Liefert den Namen der zu importierenden Datei (ohne Pfad inkl. Dateiendung) zurück</td></tr><tr><td><strong>System.IO.Path.GetFileNameWithoutExtension(GetFileName())</strong></td><td>Liefert den Namen der zu importierenden Datei (ohne Pfad und ohne Dateiendung) zurück</td></tr><tr><td><strong>GetFilePath()</strong></td><td>Liefert den vollständigen Pfad der zu importierenden Datei zurück</td></tr></tbody></table>

Um eine hohe Flexibilität und Erweiterbarkeit zu erreichen, wurde die Anwendung so erstellt, dass verschiedene Werte als C#-Programmcode interpretiert werden. Somit kann bei der Definition der Parameter auf die komplette .NET Bibliothek und sogar eigene Bibliotheken zugegriffen werden. Als Faustregel gilt: Alle Werte, die innerhalb von Elementen definiert werden, sind Programmcode und müssen entsprechend formuliert sein. Hier einige oft eingesetzte Beispiele:

<table><thead><tr><th width="312">Funktion</th><th>Beschreibung</th></tr></thead><tbody><tr><td><strong>GetFileName().Split('_', '.')[0]</strong></td><td><p>Splittet den Dateinamen in einzelne Bereiche. Als Trennzeichen wird nach dem '_' oder '.' gesucht. Die [0] gibt an, welcher Wert zurückgeliefert wird.</p><p></p><p><strong>Beispiel:</strong> der Dateiname lautet <code>1023_Rechnung_23923.pdf</code> </p><p>Ergebnis: mit [0] wird der Wert 1023 zurückgeliefert.</p><p></p><p>Mit [1] würde der Wert <strong>Rechnung</strong> und mit [2] der Wert <strong>23923</strong> zurückgeliefert.</p></td></tr><tr><td><strong>GetFileName().Substring(0,2)</strong></td><td><p>Liefert einen Bestandteil (Substring) des Dateinamens zurück. Dabei ist die Startposition und die Länge des Wertes einstellbar.</p><p></p><p><strong>Beispiel:</strong> der Dateiname lautet <code>RE1023_23923.pdf</code> </p><p>Ergebnis: mit (0,2) wird der Wert <strong>RE</strong> zurückgeliefert.</p><p></p><p>Mit (3,4) würde der Wert <strong>1023</strong> und mit (8,5) der Wert <strong>23923</strong> zurückgeliefert.</p><p></p><p>Die Methode setzt voraus, dass der Dateiname immer im gleichen Schema daherkommt.</p></td></tr><tr><td><strong>LeftOf(GetFileName(), "_")</strong></td><td>Liefert den Text, der links neben dem angegebenen Trenner steht</td></tr><tr><td><strong>RightOf(GetFileName(), "_")</strong></td><td>Liefert den Text, der rechts neben dem angegebenen Trenner steht</td></tr><tr><td><strong>RightOfLastElement (System.IO.Path.GetFileNameWithoutExtension(GetFileName()),"-")</strong></td><td>Liefert den Text von rechts bis zu einem definierten Trenner (im Beispiel - )</td></tr></tbody></table>

Soll ein Text ausgegeben werden, muss dieser in Anführungszeichen gesetzt werden. Beispiel:

```xml
<CATEGORY>"Rechnung"</CATEGORY>
```

Dies lässt sich auch individuell kombinieren, wenn Sie etwa eine fixe Bezeichnung sowie einen Bestandteil aus dem Dateinamen kombinieren möchten. Beispiel:

```xml
<KEYWORD>"Rechnung Nr. " + GetFileName().Split('_', '.')[2]</KEYWORD>
```

## Automatische Dokumentnummer

Die Dokumentennummer lässt sich mit folgendem Befehl automatisch generieren. Dabei wird die nächst verfügbare Nummer aus CAS genesisWorld ausgelesen und gesetzt.

```xml
<DOCNUMBER>GenerateNewNumber()</DOCNUMBER>
```

{% hint style="info" %}
**Gut zu wissen**

Da diese Routine nichts von dem Datensatz weiss, wo die generierte Nummer eingetragen werden soll, kann diese nicht prüfen, ob dort bereits eine vorhanden ist. Sprich: wird der Versionstyp ‘NewOrUpdateDocument’ verwendet und ist das Dokument bereits vorhanden, wird auch dort eine neue Nummer generiert.
{% endhint %}

Um im Fall 'NewOrUpdateDocument' nur eine Nummer zu generieren, wenn es das Dokument noch nicht im CRM gibt, steht folgende Option zur Verfügung:

```xml
<DOCNUMBER>GenerateNewNumberIfNotExists("DOC_BELEGNUMMER = '" + GetFileName().Split('_')[0] + "'")</DOCNUMBER>
```

Das Beispiel generiert eine neue Nummer, wenn der Datensatz über den angegebenen Filter (im Beispiel Datenbankfeld DOC\_BELEGNUMMER) nicht gefunden wird.

## Teilnehmer/Fremdzugriffsrechte

Die Teilnehmer und Fremdzugriffsrechte lassen sich ebenfalls individuell vergeben. Dabei muss der Wert eine kommaseparierte Liste von Benutzer- oder Gruppennamen enthalten. Werden keine Angaben gemacht, werden die Dokumente mit dem Teilnehmer 'Alle öffentlich' archiviert. Beispiel:

```xml
<OWNERNAME>"Buchhaltung, Verwaltung"</OWNERNAME>
<FOREIGNEDITPERMISSION>"-1"</FOREIGNEDITPERMISSION>
```

Mit FOREIGNEDITPERMISSION lassen sich die Fremdzugriffsrechte setzen. Dabei werden folgende Werte unterstützt:

<table><thead><tr><th width="116">Wert</th><th>Beschreibung</th></tr></thead><tbody><tr><td>"-1"</td><td>Das Dokument wird mit dem Fremdzugriffsrecht 'persönlich' archiviert</td></tr><tr><td>"0"</td><td>Das Dokument wird mit dem Fremdzugriffsrecht 'vertraulich' archiviert</td></tr><tr><td>"65535"</td><td>Das Dokument wird mit dem Fremdzugriffsrecht 'vollständige Rechte' archiviert</td></tr></tbody></table>

Im obigen Beispiel würde das Dokument mit den Teilnehmern 'Buchhaltung' und 'Verwaltung' archiviert werden und das Fremdzugriffsrecht auf persönlich gesetzt. Es ist dabei wichtig, dass die Schreibweise 1:1 den Gruppen/Benutzernamen aus CAS genesisWorld entsprechen.

<div align="left"><figure><img src="https://4018463943-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXL33qz6h237IZABCnJBd%2Fuploads%2FJI6o35DG91WcoSOua4Uo%2Fcas_genesisworld_dokumentimporter_zugriffsberechtigte.jpg?alt=media&#x26;token=0ea3654c-5094-46d5-9501-3b45e7e5fe62" alt=""><figcaption></figcaption></figure></div>

<br>
