# Mehr → Tabelle in Squeeze Stammdaten hinzufügen

Dieser Dialog geht in die andere Richtung: nicht in die Datenbank, sondern **nach
Squeeze**. Gewählt wird eine SQL-Tabelle – dieselbe Auswahl wie bei *SQL Tabelle
ändern* –, und daraus entsteht über die Squeeze-API die passende Stammdatentabelle:

* ein `POST` auf `api/v2/masterData/tables` für die Tabelle, der mit ihrer Id antwortet,
* danach ein `POST` je Spalte auf `.../tables/<id>/columns`.

Die SQL-Tabelle selbst wird dabei nur gelesen.

## Die Stammdatentabelle in Squeeze

| Feld | Bedeutung |
|---|---|
| **Name in Squeeze** | Vorgeschlagen wird `Breeze_<Tabellenname>`. Wer ihn ändert, behält seine Eingabe auch beim nächsten Tabellenwechsel |
| **Beschreibung** | Freier Text, den Squeeze zur Tabelle anzeigt. Bleibt das Feld leer, wird der Name der SQL-Tabelle eingetragen |

## Felder

Die Felder heißen in Squeeze genauso wie die Spalten der Tabelle – so kommt eine
Übertragung zwischen beiden ohne Zuordnungstabelle aus.

* **`ID` geht nie mit.** Eine Squeeze-Stammdatentabelle zählt ihre Zeilen selbst und
  bringt eine eigene Id mit; eine zweite daneben bedeutete dasselbe und sagte etwas
  anderes, sobald beide Seiten schreiben.
* **`Licence` bleibt im Angebot** – welchem Mandanten eine Zeile gehört, weiß Squeeze
  von sich aus nicht.
* **Zeichenvorrat**: Squeeze nimmt höchstens 45 Zeichen aus Buchstaben, Ziffern,
  Unterstrich und Bindestrich. Eine Spalte mit Punkt, Leerzeichen oder Umlaut bekommt
  darum ein Feld für einen **Ersatznamen**; der Rückweg in die Tabelle bleibt über
  `sourceColumn` erhalten, das die SQL-Spalte behält. Kurze Namen wie `de` oder `en`
  sind in Ordnung.

## Übertragungsskript

Die frisch angelegte Stammdatentabelle ist **leer**. Der nächste Schritt steht deshalb
gleich in der Rückmeldung – drei Haken:

| Haken | Wirkung |
|---|---|
| **Übertragungsskript erzeugen** | legt ein Portalskript nach dem Vorbild von `Squeeze_UserExit_MasterData_TransferPricipalsApi` an, mit einem `addColumnMap()` je Feld. Name: `Squeeze_UserExit_Export_<Tabelle>`, Kategorie `Squeeze_UserExit`. Gibt es den Namen schon, kommt eine Rückfrage – der Quelltext könnte von Hand geändert sein |
| **Stammdaten gleich übertragen** | führt genau dieses Skript einmal aus. Dafür – und nur dafür – ist das erzeugte Skript `clientExecutable`, anders als die Vorlage |
| **Täglich als Job ausführen** | mit einer Uhrzeit daneben (`HH:MM`). Das Skript bekommt `RunAsJob`, den festen Zeitpunkt und die Uhrzeit; ohne den Haken läuft es nur, wenn es jemand startet |

Die letzten beiden Haken hängen am ersten: was nicht angelegt wird, lässt sich weder
ausführen noch einplanen. Zeitpunkt und Häufigkeit lassen sich danach im
DOCUMENTS-Manager ändern.

Das `Breeze_` der Tabelle fällt im Skriptnamen weg, und „Export“ steht darin, weil es
in diese Richtung geht: aus einer DEX-Tabelle **hinaus** nach Squeeze. Was von dort
holt, heißt `Squeeze_UserExit_MasterData_*` und soll davon zu unterscheiden sein.

Wie viele Zeilen übertragen wurden, zählt das Skript nicht mit – das steht im Log unter
`Logs/SqueezeImport`. Hat die SQL-Tabelle für diesen Mandanten keine Zeile, bleibt die
Stammdatentabelle vorerst leer; das Skript überträgt beim nächsten Lauf, was dann da ist.

Die Gegenrichtung beschreibt
[Squeeze-Stammdaten in Tabelle laden](/books/tableservice-konfiguration-neu/page/mehr-squeeze-stammdaten-in-tabelle-laden).