# GraphQL FAQ - microtech ERP System

## Allgemeine Funktionalitäten

Auf dieser Seite möchten wir Ihnen Antworten auf die am häufigsten gestellten Fragen zu unserer GraphQL-Schnittstelle geben.

**Q: Wird die GraphQL-Schnittstelle auch andere Programmfunktionen wie eigene Abläufe und Bereichs-Aktionen starten können?**  
A: Ja, diese Erweiterung ist geplant. Die Priorität, mit der wir diese Funktion umsetzen, können Sie aktiv über unsere Ideenfabrik mitbestimmen. Die "Ideenfabrik" rufen Sie über Ihr microtech Konto auf. Sollten Sie noch nicht registriert sein, können Sie dies auf folgender Seite nachholen: **[microtech Konto](https://app.microtech.de/konto)**.

**Q: Ist es geplant, dass der Client zukünftig nur noch über GraphQL kommuniziert?**  
A: Nein, der Client wird auch in Zukunft direkt mit dem Datenbankserver kommunizieren. Allerdings werden besonders datenintensive Funktionen – wie das Buchen oder Wandeln von Vorgängen – künftig über den Anwendungsserver ausgeführt, der direkt neben der Datenbank läuft. Diese Prozesse erfolgen dann über GraphQL, um die Performance zu steigern und den Datentransfer zu optimieren.

**Q: Wann kann über GraphQL ein Druck angestoßen werden?**  
A: Derzeit ist diese Funktion noch nicht verfügbar. Innerhalb unserer microtech Ideenfabrik können Sie jedoch für diese Idee werben und andere Nutzer über die Umsetzung abstimmen lassen: **[microtech Konto](https://app.microtech.de/konto)**.

**Q: Welche nützlichen Tipps gibt es zur Verwendung des Playgrounds?**

A: Einfach Video anschauen.

<div class="video-consent" data-videoid="bfM8RVuhAZs">
  <img src="https://img.youtube.com/vi/bfM8RVuhAZs/maxresdefault.jpg" alt="Video Vorschau">
  <div class="play-button">▶ Video abspielen</div>
  <div class="privacy-note">
    Beachten Sie: Durch den Klick auf das Bild wird das Video geladen und Daten an YouTube übertragen.<br>
    <a href="https://www.microtech.de/datenschutz/">Mehr Infos</a>
  </div>
</div>

## Berechtigungen und Sicherheit

**Q: Kann ich verschiedenen GraphQL-Nutzern unterschiedliche Rechte geben (z.B. nur lesen/ändern, aber nicht löschen)?**  
A: Ja, das geht heute schon über die Berechtigungsstrukturen, da diese Rechte voll beachtet werden.

**Q: Wie kann eine 2-Faktor-Authentifizierung implementiert werden?**  
A: Aktuell wird eine 2-Faktor-Authentifizierung nicht unterstützt. Bitte stimmen Sie dafür in der Ideenfabrik ab: **[microtech Konto](https://app.microtech.de/konto)**.

## Datenverwaltung und -konsistenz

**Q: Muss ich zwingend alle Pflichtfelder selbst ausfüllen, oder werden bestimmte Werte automatisch vergeben (z. B. Adressnummer)?**
 
A: Pflichtfelder müssen grundsätzlich selbst befüllt werden. Die Adressnummer gehört z. B. jedoch nicht dazu: Wenn das Feld ```fldStatus``` beispielsweise auf „Kunde“ gesetzt wird, vergibt das System automatisch die nächste freie Adressnummer. Viele weitere Felder werden ebenfalls automatisch vorbelegt, etwa bei verknüpften Datensätzen (z. B. ein Kontakt zu einer Adresse – hier werden alle Adressdaten übernommen, sodass Sie nur die kontaktbezogenen Felder ergänzen müssen).

**Q: Wird die LSN von allen Seiten (microtech ERP Client-App, Import, COM und GraphQL) verwaltet und berücksichtigt?**  
A: Ja, die Nummern werden auf Datenbankebene verwaltet, unabhängig davon, ob über COM, GraphQL, Import oder Benutzeroberfläche.

**Q: Warum sind die Tabellennamen in GraphQL englisch und nicht wie im DB-Manager der microtech Software in deutsch?**

A: GraphQL ist ein englischsprachiges Framework mit einem internationalen Ökosystem. Dokumentationen, Beispiele, Tools und die Community sind überwiegend auf Englisch, und auch KI-Modelle sind primär auf englischen Code trainiert. Englische Tabellennamen wie tblProducts oder tblAccounts ermöglichen eine zuverlässigere Codegenerierung und fügen sich nahtlos in dieses Ökosystem ein – bei deutschen Begriffen wäre die Codegenerierung deutlich fehleranfälliger. Wir hatten beide Optionen aktiv geprüft und uns für die international am besten dokumentierte Variante entschieden. Nutzen Sie dies als Chance von der weltweiten Community und der Hilfe durch künstliche Intelligenz zu profitieren.

**Beispiel für unsere verwendeten Begriffe (vs. eingedeutsche Begriffe)**:

```graphql
# Lesbar und selbsterklärend
query {
  tblTransactions { ... }
  tblProducts { ... }
  tblAccounts { ... }
}

# vs. verwirrend in englischem Kontext
query {
  tblVorgaenge { ... }
  tblArtikel { ... }
  tblKonten { ... }
}
```

**Q: Warum bleiben Felder dennoch deutsch?**

A: Felder kommen 1:1 aus den bestehenden microtech Tabellen und sind Anwendern seit Jahren aus z.B. Tabellenansichten, Regeln, Drucklayouts, dem DB-Manager usw. bekannt (```ArtNr```, ```BelegNr```, ```RabSz```). Eine Übersetzung würde an dieser Stelle mehr Verwirrung stiften als helfen.

## Datenbankzugriff und Sperren

**Q: Wie geht GraphQL mit gesperrten Datensätzen um (z.B. Vorgänge durch andere Benutzer)?**  
A: Die mutation wird abgebrochen und alle Änderungen werden zurückgerollt. In der Antwort gibt es eine passende Fehlermeldung.

**Q: Ist es möglich, mit GraphQL auf externe Datenbanken zuzugreifen und diese Werte dann in microtech ERP zu setzen / zu manipulieren?**  
A: Nein. Die microtech GraphQL-API greift ausschließlich auf die microtech ERP Datenbank zu und kann nicht auf externe Datenbanken zugreifen.

!!! info "Info"

    **Was GraphQL kann**:

    *    Daten aus microtech ERP abfragen und manipulieren

    *    Komplexe Datenverarbeitung durch microtech-spezifische Erweiterungen in der Abfragesprache

    *    Parametrisierte queries & mutations für flexible Datenoperationen

## Integration und Synchronisation

**Q: Wäre mit GraphQL eine vollständige Synchronisation zu einem Shop-System wie Shopify möglich?**  

A: Ja, technisch ist das möglich. GraphQL stellt alle erforderlichen Lese- und Schreibzugriffe für eine bidirektionale Synchronisation bereit. Die eigentliche Synchronisationslogik – wie Mapping, Konfliktauflösung und Datenabgleich – muss jedoch in einer externen Middleware implementiert werden.

**Q: Kann ich mit SQL-Replikation oder GraphQL auch Daten wieder zurück ins microtech ERP schreiben?**

A: Mit **GraphQL** können Daten sowohl gelesen als auch zurück ins microtech ERP geschrieben werden. GraphQL als Business-Logic-Schnittstelle ermöglicht Ihnen neben Lesezugriffen auch **Mutations**, welche Änderungen über die Geschäftslogik des microtech ERP sicher und regelkonform ausführen.

A: Die **SQL-Replikation** hingegen dient ausschließlich der Replikation. Über die Replikation werden alle ERP-Daten in eine PostgreSQL-Datenbank bereitgestellt - mit diesen replizierten Daten lassen sich in externen Tools Auswertungen vornehmen. Ein Zurückschreiben dieser Daten ist nicht vorgesehen.

**Q: Kann ich den Preis eines Kunden für einen bestimmten Artikel unter Berücksichtigung aller Preislogiken über GraphQL auslesen, ohne einen Vorgang anzulegen?**  

A: Nein, aktuell ist diese Funktion nicht verfügbar. Dafür wäre eine Erweiterung der Schnittstelle erforderlich. Sie können die Umsetzung über unsere Ideenfabrik unterstützen und mitbestimmen.

---

*Stand: November 2025*

<!--

GraphQL FAQ - microtech ERP System

## Allgemeine Funktionalitäten

**Q: Wird die GraphQL-Schnittstelle auch andere Programmfunktionen wie eigene Abläufe und Bereichsaktionen starten können?**  
A: Ja, geplant ist das. In welcher Reihenfolge neue Funktionen dazu kommen, können Sie über unsere Ideenfabrik mitbestimmen - hier <link> einreichen oder voten.

**Q: Ist es geplant, dass der Client zukünftig nur noch über GraphQL kommuniziert?**  
A: Nein, auch in Zukunft wird der Client direkt mit dem Datenbankserver kommunizieren. Bestimmte Funktionen, die besonders datenintensiv sind (wie z.B. Vorgang buchen oder wandeln), werden aber zukünftig direkt im Anwendungsserver (der direkt neben der Datenbank läuft) ausgeführt, um dann viel schneller und datensparsamer zu sein. Das passiert dann über GraphQL.

**Q: Wann kann über GraphQL ein Druck angestoßen werden?**  
A: Aktuell noch nicht. Bitte voten Sie dafür in der Ideenfabrik <link>.

## Geschäftsregeln und Automatisierung

**Q: Kann ich deaktivieren, dass die Schnittstelle beim Anlegen neuer Datensätze Regeln ausführt?**  
A: Aktuell noch nicht. Bitte voten Sie dafür in der Ideenfabrik <link>.

## Berechtigungen und Sicherheit

**Q: Kann ich verschiedenen GraphQL-Nutzern unterschiedliche Rechte geben (z.B. nur lesen/ändern, aber nicht löschen)?**  
A: Ja, das geht heute schon über die Berechtigungsstrukturen, da diese Rechte voll beachtet werden.

**Q: Wie kann eine 2-Faktor-Authentifizierung implementiert werden?**  
A: Aktuell wird eine 2-Faktor-Authentifizierung nicht unterstützt, voten Sie hier für diese Idee in der Ideenfabrik.

## Datenverwaltung und -konsistenz

**Q: Muss ich absolut notwendige Felder selbst bestimmen und füllen, oder wird z.B. eine Adressnummer automatisch gesucht und vergeben?**  
A: Absolut notwendige Felder müssen selbst bestimmt werden. Das Feld Adressnummer gehört aber nicht dazu. Wenn das Feld `fldStatus` z.B. auf Kunde gesetzt wird, wird die nächste freie Adressnummer automatisch gesucht und vergeben. Über dieses Beispiel <link> können Sie lernen, wie Sie abfragen, welche Felder unbedingt notwendig sind. Viele Felder werden aber automatisch vorbelegt, z.B. wenn es um verlinkte Datensätze geht (z.B. ein Kontakt zu einer Adresse - hier wird alles, was die Adresse angeht, vorbelegt; Sie füllen nur noch die für den eigentlichen Kontakt notwendigen Felder). <link zum Beispiel>

**Q: Wird die LSN von allen Seiten (ERP Client-App, Import, COM und GraphQL) verwaltet und berücksichtigt?**  
A: Ja, die Nummern werden auf Datenbankebene verwaltet, unabhängig davon, ob über COM, GraphQL, Import oder Benutzeroberfläche.

**Q: Warum werden die Tabellen in GraphQL englisch benannt und nicht mit der deutschen Bezeichnung aus dem DB Manager?**  
A: 
**Internationale Naming Conventions**
GraphQL-Schemas folgen weltweit etablierten Patterns wie `Transaction`, `Account`, `Document`, `Product` - deutsche Begriffe wie `Vorgang`, `Konto`, `Beleg`, `Artikel` wirken in diesem Kontext unprofessionell und erschweren die Adoption.

**IDE und Tooling Support**
Moderne Entwicklungsumgebungen, GraphQL-Clients (Apollo, Relay) und Code-Generatoren erwarten englische Bezeichner. Auto-Complete, Type-Hints und Linting funktionieren besser.

**KI/LLM Integration**
KI-Modelle sind primär auf englischen Code trainiert. Bei `Product` oder `Transaction` generiert KIs sofort sinnvollen Code, bei deutschen Begriffen ist die Codegenerierung unzuverlässiger.

**Onboarding**
Mit englischen Tabellennamen ist ein neuer Entwickler am Tag 1 produktiv. Er muss nicht erst ein Wörterbuch studieren, sondern kann direkt mit seinem vorhandenen Domain-Knowledge loslegen.

**Pragmatischer Kompromiss**
Die Feldnamen sind deutsch (`ArtNr`, `RabSz`), da diese unseren Anwendern aus Tabellenansichten, Regeln, Drucklayouts und dem DB-Manager bekannt sind. Nur die Tabellen selbst werden englisch benannt - das schafft eine moderne API-Facade bei voller Rückwärtskompatibilität.

## Datenbankzugriff und Sperren

**Q: Wie geht GraphQL mit gesperrten Datensätzen um (z.B. Vorgänge durch andere Benutzer)?**  
A: Die mutation wird abgebrochen und alle Änderungen werden zurückgerollt. In der Antwort gibt es eine passende Fehlermeldung.

**Q: Ist es möglich, mit GraphQL auf externe Datenbanken zuzugreifen und diese Werte dann in büro+ zu setzen/manipulieren?**  
A: GraphQL selbst ist eine reine Abfragesprache und kann nicht direkt auf externe Datenbanken zugreifen. 

**Was GraphQL kann:**
- Daten aus büro+ abfragen und manipulieren
- Komplexe Datenverarbeitung durch microtech-spezifische Erweiterungen in der Abfragesprache
- Parametrisierte queries & mutations für flexible Datenoperationen

Die microtech GraphQL-API ist bewusst als sichere, gekapselte Schnittstelle konzipiert, die nur auf büro+-Daten zugreift. Dies gewährleistet Datensicherheit und -integrität.

## Integration und Synchronisation

**Q: Wäre mit GraphQL eine vollständige Synchronisation zu einem Shop-System wie Shopify möglich?**  
A: Ja, die Schnittstelle bietet alles, was dafür notwendig ist. Mit einem passenden Programm, Script oder Automatisierungsablauf kann so etwas realisiert werden.

**Q: Kann ich mit der SQL-Replikation oder GraphQL auch Daten wieder ins ERP zurückschreiben lassen?**  
A: Mit der SQL-Replikation nicht - diese reine Datenschnittstelle repliziert alle ERP-Daten in eine PostgreSQL-Datenbank, so dass dort die Daten weiter ausgewertet werden können. Mit GraphQL, unserer Business Logic-Schnittstelle, können Daten gelesen und auch zurück in das ERP geschrieben werden.

**Q: Kann ich den Preis eines Kunden für einen bestimmten Artikel unter Berücksichtigung aller Preislogiken über GraphQL auslesen, ohne einen Vorgang anzulegen?**  
A: Nein, aktuell nicht. Dafür würde es eine neue Funktion auf der Schnitstelle brauchen. Bitte als Idee in der Ideenfabrik anlegen <Link>.

---

*Stand: September 2025*

-->