Data Studio — die Authoring-Oberfläche
Das Data Studio ist ein einziges Fenster für alles: Nachschlagen, Suche, Zellbearbeitung, Zeilen-/Spalten-/Tab-Authoring, Erstellen und Löschen von Tabellen sowie eine Record-Canvas, die zeigt, woraus ein Datensatz besteht.
Eine Regel liegt dem allem zugrunde: die Tabelle ist kanonisch. Das Studio schreibt in die Quelle (lokale Datei / Google Sheet), niemals in die SOs, und bestätigt jede Änderung mit einem automatischen erneuten Import.
Tools ▸ SheetForge ▸ Data Studio öffnet es — der einzige Authoring-Eintrag im Menü. Es benötigt keine Plugins: Alles unten funktioniert allein mit den eingebauten Kerntypen, und ein Plugin fügt obendrauf Formen und schreibgeschützte Schlüsselräume hinzu (siehe Mit und ohne Plugins).
Es gibt nur ein einziges Authoring-Fenster. Die ältere Workbench — das ursprüngliche IMGUI-Fenster — wurde entfernt, und alles, was sie konnte, tut jetzt das Studio. Siehe Was aus der Workbench wurde, falls Sie ein Update durchführen.
Was auf dem Bildschirm ist
Topbar
- Der Chip der aktiven Quelle nennt den Provider. Er ist abgeblendet, wenn keine Einstellungen aktiv sind.
- ↓ Pull from source führt den Import aus.
- ↑ Push to source trägt ein Badge, das ausstehende Änderungen zählt.
- Daneben sitzt eine Schaltfläche Discard, die jede im Fenster vorgemerkte Änderung verwirft. Sie fragt zuerst nach einer Bestätigung, die die Anzahl nennt, und landet als ein einziger
Ctrl+Z-Schritt, sodass das Staging zurückkommt, falls Sie versehentlich verwerfen. Die Quelle wird nie angefasst. - Die Badges
isolated/draft. - Die Zähler ⛔/⚠. Ein Klick auf einen Zähler springt zum ersten Fehler/zur ersten Warnung.
- Ein Überlaufmenü ⋯ mit Export ausführen, Zu Google Sheet pushen, Übersetzungen exportieren…, Übersetzungen importieren…, Zustandsprüfung, Lokalisierungsbericht öffnen und Design-Einstellungen…. Außerhalb einer Google-API-Quelle bleibt die Google-Push-Zeile sichtbar, aber deaktiviert, mit dem Grund am Label; die beiden Übersetzungszeilen verhalten sich genauso, wenn das Projekt keine Lokalisierungstabelle enthält.
Seitenleiste
- Ein All-Eintrag sitzt ganz oben — sheet-übergreifende Suche, unten beschrieben.
- Dann jede Tabelle mit ihrer Zeilenzahl, ihrem Farbpunkt und einer ●-Markierung auf jeder Tabelle mit vorgemerkten Änderungen. Das Badge in der Topbar nennt die Gesamtzahl; dies sagt, aus welchen Tabellen sie stammen.
- Tabellen sind gruppiert in Abschnitte nach der eigenen
@style-Gruppenbezeichnung der Tabelle. Rechtsklick auf eine Tabelle ▸ Group & color ✎, um sie festzulegen; Tabellen ohne Bezeichnung bleiben im Standardabschnitt. - Unter den Tabellen steht eine READ-ONLY-Gruppe, die per Plugin registrierte Code-Registries auflistet.
- Auch hier leben ehrliche Badges:
parse failedauf einem Tab, der in der Vorschau fehlt,name clash, wenn eine Code-Registry den Namen einer echten Tabelle beansprucht, und der unten beschriebene Quarantäne-Hinweis. - Jeder Rechtsklick-Eintrag, der gerade blockiert ist, bleibt sichtbar, mit angehängtem Grund.
Grid
- Ein fixierter Vier-Zeilen-Header: der Spaltenbuchstabe der Ursprungstabelle über den rohen
@name-/@type-/@desc-Zellen. Spalte A trägt die Markierungen, daher beginnen die Daten bei B. - Eine Randspalte mit der echten Tabellen-Zeilennummer und ein Referenz-Chip pro Zeile:
shared N, wenn zwei oder mehr Datensätze auf diese Zeile zeigen,↩ 1, wenn genau einer es tut, nichts, wenn keiner es tut. - Buchstabe und Zeilennummer sind dieselben Koordinaten, die der Fehlerbericht ausgibt, sodass „Zeile 5, Spalte C" direkt angesteuert werden kann. Ein Klick darauf wählt die Spalte oder Zeile für Aktionen mit mehreren Zielen und Ziehbewegungen aus — siehe Zeilen und Spalten auswählen unten.
- Der Buchstabe gehört zum Platz, nicht zur Spalte. Verschieben Sie eine Spalte, zeigt er den Buchstaben der Position, an der sie nach dem Übernehmen sitzen wird. Dieselbe Regel gibt einer hinzugefügten, aber noch nicht gepushten Spalte den Buchstaben, den sie gleich bekommen wird.
- Strukturbearbeitung lebt in Rechtsklick-Menüs. Ein Spaltenkopf bietet Eigenschaften, Verschieben, Einfügen auf beiden Seiten und Löschen; die Zeilennummern-Randspalte bietet Nach-oben, Nach-unten und Löschen. Ein blockierter Eintrag bleibt sichtbar, mit seinem Grund.
- Ein Spaltenkopf bietet außerdem Bis zu dieser Spalte fixieren, das diese Spalte und alles links davon außerhalb des horizontalen Scrollens hält (siehe unten).
- Der Rest des Spaltenmenüs — Spaltenbreite, automatische Anpassung, Ausblenden, Filter, Spaltendaten leeren und die Sortier-Einträge — wird unten unter Spaltenbreite, Ausblenden und spaltenweise Filter beschrieben. Ein Ziehgriff zum Ändern der Größe sitzt am rechten Rand jeder Buchstabenzelle.
- Innerhalb einer Referenzzelle werden nur die defekten Listenfragmente hervorgehoben.
Canvas
- Öffnet sich unter dem Grid, wenn Sie eine Zeile aktivieren.
- Der von Ihnen geöffnete Datensatz sitzt in der Mitte: Was er konsumiert, fließt von links herein, was ihn konsumiert, steht rechts. Eine Schaltflächengruppe über der Canvas wählt, wie weit es in jede Richtung geht.
- Ziehen Sie am Griff, um die Größe zu ändern,
Escschließt sie. - Jede Node-Karte zeigt ihre Referenz-Ports und ihre einfachen Spalten als bearbeitbare Wertzeilen, sodass die Canvas ein zweiter Ort zum Bearbeiten ist, kein Bild (siehe Bearbeiten auf der Canvas unten).
Node-Inspector
Unten rechts an der Canvas. Er enthält:
- die Zelladresse des Nodes (Klick fokussiert diese Zelle im Grid);
- einen Hinweis „geteilter Datensatz" / „dieser Schlüssel existiert nicht" / „dieser Datensatz ist neu";
- die Used by-Liste (Klick auf einen Eintrag springt dorthin);
- die eingebaute Aktion Go to this sheet;
- Duplicate and split / Cancel new row, wo sie zutreffen.
Problems
Das untere Panel trägt dieselben Diagnosen, die ein Import erzeugt, gerendert vom selben Berichts-Renderer. Die Pipeline ist die Quelle der Wahrheit; das Fenster erfindet nie eine Meldung. Ein Klick auf eine Zeile fokussiert die fehlerhafte Zelle und öffnet ihre Canvas.
Domain-Panels
Ein rechter Bereich mit einem Segment pro per Plugin registriertem Panel, einklappbar, merkt sich, welches Sie zuletzt geöffnet hatten. Er wird nur gezeichnet, wenn ein Plugin ein Panel registriert — ist keines registriert, gibt es keine leere Box, weil eine leere Box behauptet, dass etwas fehlt.
Push-Modal
Der Diff vor dem Schreiben: Tab · Zeilenschlüssel · Feld · alt → neu für jede vorgemerkte Änderung, plus ein Hinweis, wenn manche Bearbeitungen isoliert sind. Ein Abschnitt Addressables listet jede Asset-Registrierung auf, die das Übernehmen vornehmen wird (Hinzufügen · Verschieben · Gruppe erstellen — siehe Eine Zelle bearbeiten). Abbrechen schreibt nichts.
Eine Zelle bearbeiten
- Das Widget folgt dem
@type. Der@type, den es liest, ist der auf dem Bildschirm, daher erhält eine Spalte, die Sie hinzugefügt oder umgetippt, aber noch nicht gepusht haben, bereits das Widget dieses Typs.- Ein erforderlicher
boolist ein Schalter; ein optionalerboolöffnet denselben Picker, den auch die Enum-Zelle verwendet, da er drei Zustände hat. Enum<T>zeigt sich als sein Wert plus ein ▾ und öffnet dasselbe durchsuchbare Picker-Fenster, das auch eine Referenzzelle verwendet. Ein nicht erkannter Wert bleibt oben in der Liste stehen, statt stillschweigend umgeschrieben zu werden. Wo das Enum in einer Tabelle definiert ist, endet der Picker mit „Add a new member…". Eine leere optionale Zelle zeigt — oder — (Standard).- Eine
RecordId@Tab-Spalte erhält ein Referenz-Dropdown (unten). - Eine
AssetRef@Group-Spalte erhält einen Asset-Picker, der Drops entgegennimmt (unten). Color- /AnimationCurve- /Gradient-Spalten erhalten Unitys eigene Farb-, Kurven- und Verlaufsfelder (unten).- Alles andere ist kanonischer Rohtext — Zahlen, Strings, Schlüssel,
List<>von Nicht-Referenzen, Wrapper, benutzerdefinierte Typen —, weil dieser Text das ist, was der Parser im Round-Trip verwendet.
- Ein erforderlicher
- Referenzzellen haben immer ein Dropdown. Eine
RecordId@Tab-Zelle ist eine Textbox plus eine ▾-Schaltfläche; einen Schlüssel von Hand einzutippen funktioniert weiterhin. Die Schaltfläche ist auch dann da, wenn die Zieltabelle derzeit keine Kandidaten anbietet: Dieser Zustand bedeutet meist, dass gerade etwas kaputt ist, genau dann, wenn Sie das Werkzeug brauchen, und der Picker sagt das und bietet an, stattdessen zu erstellen, statt eine leere Liste zu öffnen.- Eine
List<RecordId@Tab>-Zelle erhält+▾. Der Picker bleibt offen, und jede Zeile ist eine Checkbox, sodass das Ankreuzen von drei Datensätzen einen einzigen Besuch braucht. Ankreuzen fügt hinzu, Abwählen entfernt dieses Element, und jedes Kreuz ist sein eigener Undo-Schritt. - Die Reihenfolge der Elemente ist nicht, was ein Dropdown beantwortet. Ordnen Sie Elemente von der Canvas aus neu, wo jedes Listenelement seine eigene ▲▼-Zeile hat.
- Eine Skalarzelle ersetzt ihren Wert und schließt sich, wobei der bereits in der Zelle stehende Schlüssel markiert ist, damit Sie ihn nicht zweimal wählen können.
- Eine
- Eine optionale Spalte kann auf leer zurückgesetzt werden. Wo die Spalte
?oder=defaultdeklariert, tragen die Picker — Referenz, Enum und optionaler Bool gleichermaßen — eine Leer-lassen-Zeile, beschriftet mit dem Wert, auf den die Zelle zurückfällt. Eine erforderliche Spalte erhält keine solche Zeile, weil eine leere Zelle dort ein Fehler ist. - Erstellen Sie den fehlenden Datensatz direkt aus der Zelle. Existiert der gewünschte Schlüssel nicht, drücken Sie + Create a new … record im Picker: Die Suchbox wird zu einer Schlüsselbox, vorausgefüllt mit dem gemeinsamen Präfix der Tabelle. Tippen Sie einen Namen, drücken Sie Enter, und die Zeile wird erstellt und als ein einziger
Ctrl+Z-Schritt in diese Zelle geschrieben.- Die Zeile wird nicht angeboten, wenn es nicht funktionieren könnte. Ein code-eigener Schlüsselraum kann nicht erweitert werden, und der Picker sagt dies in einem Satz. Eine schreibgeschützte Quelle, eine laufende Pipeline oder eine xlsx-gestützte Tabelle blockiert es mit demselben Gate, das die Canvas verwendet.
- Asset-Zellen haben einen Picker und nehmen Drops entgegen. Eine
AssetRef@Group-Zelle ist eine Textbox plus eine ⊙-Schaltfläche, im Geiste von Unitys Objektfeld. Auf welchem Weg auch immer ein Asset ankommt, die Regeln sind dieselben.- ⊙ öffnet den SheetForge-Asset-Picker: die bereits in dieser Gruppe vorhandenen Adressen — eingeschränkt auf den
<Type>der Spalte, falls einer gesetzt ist, Sub-Assets nach ihrem Elternteil alsparent[sub]aufgeführt — mit Suche und markiertem aktuellem Wert. Eine Zeile ⊙ Projekt durchsuchen… unterhalb der Liste öffnet Unitys eigenen Objekt-Picker, gefiltert auf diesen Typ. - Sie können auch Assets aus dem Project-Fenster auf die Zelle ziehen: ein Asset für eine Skalar-Spalte, beliebig viele für ein
List<>(in Reihenfolge angehängt; ein bereits in der Zelle stehender Schlüssel wird übersprungen). - Ein bereits in dieser Gruppe registriertes Asset behält seine Adresse. Ein Asset, das noch nicht adressierbar ist, wird für die Registrierung vorgemerkt: Die Zelle erhält sofort ihre Adresse — den Dateinamen ohne Erweiterung —, und der Gruppeneintrag sowie, falls sie noch nicht existiert, die Gruppe selbst werden beim Übernehmen erstellt, nachdem das Schreiben der Tabelle erfolgreich war. Bis dahin ändert sich nichts im Projekt, und das Verwerfen des Stagings ändert überhaupt nichts.
- Ein in einer anderen Gruppe registriertes Asset fragt zuerst nach — ein Dialog, der die beiden Gruppen nennt und wie viele andere Zellen es über die alte referenzieren — und merkt dann ein Verschieben vor.
- Abgelehnt, mit einem Toast, der den Grund nennt: Szenenobjekte, Ordner, mehrere auf eine Skalar-Zelle abgelegte Assets, ein Asset, das den Typ der Spalte nicht erfüllt, und eine Adresse, die in dieser Gruppe bereits von einem anderen Asset verwendet wird.
- Vorgemerkte Registrierungen erscheinen im Push-Modal unter Addressables und zählen zum Topbar-Badge.
Ctrl+Zentfernt den Zellwert und die Registrierung gemeinsam; das Umtippen der Zelle, sodass nichts mehr auf die Adresse verweist, verwirft die Registrierung im selben Schritt, sodass eine veraltete Registrierung nie allein überlebt. - Jede Asset-Zelle trägt außerdem an ihrem rechten Rand eine feste ↗-Schaltfläche: Drücken Sie sie, und das Project-Fenster zeigt dieses Asset an und wählt es aus — eine Listenzelle wählt jedes Asset aus, das sie hält, und zeigt das erste an, und eine
parent[sub]-Adresse zeigt das Sub-Objekt selbst an. Strg+Klick (Cmd+Klick unter macOS) auf die Zelle bewirkt dasselbe, während ein einfacher Klick weiterhin den Text bearbeitet. Löst sich die Adresse nicht zu einem Asset auf, bleibt die Schaltfläche sichtbar, aber deaktiviert, mit dem Grund als Tooltip. - Rechtsklick auf eine Zelle für Im Projekt anzeigen — das gilt auch für Listenzellen — und, bei einer optionalen Spalte, für Leeren (Standard). Die Wertzeilen der Canvas tragen dieselbe Ping-Schaltfläche, weil es dasselbe Widget ist.
- Problems meldet
UnknownAssetKeyundAssetTypeMismatch, bevor Sie übernehmen, und eine vorgemerkte Registrierung ist kein Fehler — die Projektion zählt sie bereits mit. Ohne das Addressables-Paket sind die ⊙-Schaltfläche und der Drop deaktiviert, mit dem Grund als Tooltip; das Eintippen einer Adresse funktioniert weiterhin.
- ⊙ öffnet den SheetForge-Asset-Picker: die bereits in dieser Gruppe vorhandenen Adressen — eingeschränkt auf den
- Asset-Zellen zeigen das Asset selbst. Löst sich die Adresse einer
AssetRef-Zelle auf, steht neben dem Text eine kleine Miniaturansicht — für jeden Asset-Typ, für den der Editor eine Vorschau rendern kann, so bemessen, dass sich die Zeilenhöhe nie ändert; eineList<>-Zelle zeigt die ihres ersten Elements.- Ein Klick auf die Miniaturansicht öffnet eine schwebende vergrößerte Ansicht; auf der Record-Canvas werden Bild-Assets groß auf der Karte gezeichnet.
- Eine Adresse, die sich nicht auflöst, zeigt schlicht keine Miniaturansicht — die ↗-Ping-Schaltfläche trägt den Grund bereits.
AssetRef<AudioClip>-Zellen spielen ab. Eine Wiedergabe-Schaltfläche neben der Adresse des Clips spielt ihn über den eigenen Vorschaukanal des Editors ab; erneutes Drücken stoppt, ebenso ein Wechsel — Zellenwechsel, Schließen des Fensters, ein Domain-Reload.- Kann der Editor-Build die Vorschaufunktion nicht bereitstellen, bleibt die Schaltfläche sichtbar, aber deaktiviert, mit dem Grund als Tooltip. Bei einer Zelle, deren Asset kein Audio-Clip ist, gibt es schlicht keine Schaltfläche.
- Farb-, Kurven- und Verlaufszellen sind die nativen Felder. Eine Skalarzelle vom Typ
Color,AnimationCurveoderGradientist Unitys Farbfeld, Kurvenfeld oder Verlaufsfeld — die gesamte Zelle, kein Rohtext.- Jede Änderung committet den kanonischen Text (siehe Tabellensyntax). Ein Schwall von Änderungen — Ziehen in der Farbauswahl, eine Kurven-Editor-Sitzung — verschmilzt zu einem Undo-Schritt, derselben Regel, der auch das Tippen folgt.
- Bei einer optionalen Spalte zeigt eine leere Zelle —. Klicken Sie darauf, um das Feld beim Typ-Standardwert zu öffnen, und Rechtsklick ▸ Leeren (Standard), um sie wieder zu leeren.
List<Color>,List<AnimationCurve>undList<Gradient>sind Chip-Editoren: ein Chip pro Element (ein Farbmuster, eine Kurven-Miniaturansicht, ein Verlaufsbalken) und ein+-Chip. Ein Klick öffnet ein Popup mit einem nativen Feld pro Element plus ▲▼ und ✕; Hinzufügen, Entfernen, Neuordnen und jede Elementbearbeitung sind jeweils ein eigener Undo-Schritt, weil die Reihenfolge einer Liste Daten ist. Listen anderer Typen bleiben kanonischer Text.- Die Wertzeilen der Canvas verwenden exakt dieselben Widgets.
- Eine Asset-Spalte über das Spaltenformular auf einen Typ beschränken. Im Spalteneigenschaften-Formular — und in den Formularen zum Hinzufügen einer Spalte und zum Erstellen einer Tabelle — steht immer eine Schaltfläche Typ… neben dem
@type-Feld; sie ist aktiviert, solange die eingetippte Notation einAssetRef@Groupist, und bleibt andernfalls deaktiviert, mit dem Grund als Tooltip. Sie listet die Asset-Typen auf, die das Projekt laden kann (durchsuchbar, Kurzname mit dem vollständigen Namen als Untertitel), und schreibt das Feld zuAssetRef@Group<Type>um, wobeiList<>,?und=defaultunangetastet bleiben; Keine Einschränkung (beliebiges Asset) entfernt das<…>. Die Einschränkung von Hand einzutippen funktioniert ebenfalls. Der Spaltenkopf-Tooltip zeigt den aufgelösten vollständigen Typnamen. - Was Sie tippen, ist sofort, was Sie sehen. Der Grid-Text ist die Baseline plus Ihr Staging, daher wartet er nie auf Validierung. Ein committeter Wert zeigt seine vorgemerkte Farbe in dem Moment, in dem er committet — ob der Wert aus einem Dropdown gewählt, über ein visuelles Feld bearbeitet oder schnell getippt wurde, sogar während die Zelle noch fokussiert ist. Die aufwendigere Vorschau (Problems, Zähler, Chips, Canvas) berechnet sich einmal pro Bearbeitungsschwall neu statt einmal pro Tastenanschlag. Die Ausnahme ist eine Einmal-Geste auf der Canvas, die sich sofort neu zeichnet.
- Keine Inline-Validierung während der Eingabe — Diagnosen kommen aus nur einem Kanal (dem Vorab-/Import-Validator), gezeigt in Problems.
- + Row fügt einen Datensatz mit vorgeschlagener Id hinzu (Erkennung gemeinsamer Präfixe, kollisionssicher). Jede vorgemerkte Änderung — Zellbearbeitungen, Schlüsselbearbeitungen, Zeilen-Hinzufügungen, Alles-verwerfen — ist ein Ctrl+Z / Ctrl+Y-Schritt. Das Schließen des Fensters mit vorgemerkten Änderungen fragt nach Speichern/Verwerfen/Abbrechen.
- ↑ Push to source führt den gemeinsamen Dispatcher aus: Vorab-Validierung → quellenspezifisches Rückschreiben → automatischer erneuter Import. Schlüssel-Umbenennungen fragen weiterhin „N Referenzen werden aktualisiert — fortfahren?", und ein Google-Push zeigt weiterhin die Plan-Genehmigung, bevor irgendetwas gesendet wird.
- Ehrliche Gates:
- eine schreibgeschützte Quelle (Google ExportUrl) deaktiviert Bearbeitung und Push mit einem Grund beim Mouse-over;
- ein Tab mit xlsx-Ursprung ist schreibgeschützt mit einem Badge (Rückschreiben überspringt xlsx);
- während ein Import/Export/Push läuft, sind Pull und Push deaktiviert.
Zeilen und Spalten auswählen — und sie ziehen
Die Koordinaten des Grids sind Griffe, genau wie in einer Tabellenkalkulation.
- Klicken Sie auf eine Zeilennummer, um die Zeile auszuwählen; klicken Sie auf einen Spaltenbuchstaben, um die Spalte auszuwählen.
- Strg+Klick schaltet weitere davon in die Auswahl hinein; Umschalt+Klick übernimmt die Spanne seit dem letzten Klick.
- Der Header und der Körper heben alles Ausgewählte hervor, und die Zelle, in der die Tastatur sitzt, zeichnet einen Auswahlrahmen, der Pfeiltasten-Bewegungen folgt.
- Das Wechseln der Tabelle hebt die Auswahl auf — dieselben Zahlen würden dort auf andere Spalten zeigen —, und die Menüs tragen einen Eintrag Auswahl aufheben.
- Eine Auswahl ziehen, um sie zu verschieben. Fassen Sie eine ausgewählte Zeilennummer (oder einen Spaltenbuchstaben) und ziehen Sie: Eine Einfügelinie verfolgt, wo die Ablage landen würde, und das Ablegen verschiebt die Auswahl dorthin als ein einziger
Ctrl+Z-Schritt.- Eine nicht zusammenhängende Auswahl — sagen wir Zeilen 2, 5 und 9 — kommt am Ablagepunkt gesammelt an, in der Reihenfolge, in der Sie sie ausgewählt haben.
- Solange eine Sortierung, Suche oder ein Filter die sichtbare Reihenfolge festhält, bleiben Zeilenverschiebungen aus demselben Grund verweigert, aus dem sich die Menüpunkte selbst deaktivieren — und das Starten des Ziehens sagt dies bereits in dem Moment, in dem es beginnen würde, statt still nicht zu verschieben.
- Die Rechtsklick-Menüs wirken auf die gesamte Auswahl. Sind mehrere Spalten ausgewählt, gelten Spaltenbreite…, Spaltenbreite automatisch anpassen, Ausblenden, die Verschiebungen ◀▶, Löschen und Spaltendaten leeren… für jede ausgewählte Spalte; bei mehreren Zeilen gelten die Verschiebungen und das Löschen für alle — jeder Stapel als ein Undo-Schritt.
- Einträge, die nur für ein einzelnes Ziel Sinn ergeben — Eigenschaften, Filter, Sortierung, Fixieren, Einfügen — stehen für sich in ihrem eigenen Einzelziel-Abschnitt.
- Ein blockierter Eintrag bleibt sichtbar, mit seinem Grund, wie überall sonst.
Auswahl ist eine reine Anzeige-Geste: Nichts daran wird vorgemerkt oder geschrieben, bis eine Aktion sie verwendet.
Die Menüs selbst sind jetzt eine einzige Komponente. Jedes Kontext- und Dropdown-Menü im Studio — Spaltenköpfe, Zeilen-Randspalten, das ⋯ der Symbolleiste, die Seitenleiste, Canvas-Nodes und -Verbindungen, Zellmenüs — hat dieselbe Form: betitelte Abschnitte, Häkchen, Tastaturnavigation und deaktivierte Einträge, die mit ihrem Grund stehen bleiben. Es ist dieselbe Form, die die Menüs der Web-App haben, sodass zwischen beiden nichts neu gelernt werden muss.
Bearbeiten auf der Canvas
Die Canvas bearbeitet denselben Staging-Puffer wie das Grid. Alles Folgende ist eine gewöhnliche vorgemerkte Änderung: Sie erscheint im Push-Modal, ist ein einziger Ctrl+Z-Schritt und wird über dieselbe Vorab-Validierungs- und Reimport-Kette zurückgeschrieben.
Was gezeichnet wird
Alles fließt in eine Richtung: Materialien links, was sie verwendet, rechts, mit dem von Ihnen geöffneten Datensatz dazwischen.
Eine Schaltflächengruppe über der Canvas wählt, wie weit es in jede Richtung geht:
- Materialien → dieser → verwendet von — je ein Schritt;
- nur Materialien — zwei Schritte, um einer Zusammenbau-Kette zu folgen;
- nur verwendet von.
Eine Tabelle ohne eigene Referenzspalten hat nichts zu ihrer Linken, daher bietet sie nur die letzte dieser Optionen an. Die Schrittgrenze existiert, damit ein weitverbreitetes Material nicht das gesamte Projekt auf den Bildschirm ergießt. Um weiter zu sehen, doppelklicken Sie einen Nachbarn, um ihn zum neuen Terminus zu machen.
- Derselbe zweimal erreichte Datensatz bleibt ein einziger Node.
- Ein nicht existierender Datensatz wird trotzdem gezeichnet, als defekt markiert, weil ein Link, den Sie nicht sehen können, ein Link ist, den Sie nicht beheben können.
- Ein Zyklus wird ebenfalls nicht verborgen: Die Kante, die ihn schließt, verläuft gestrichelt auf einer Spur unter den Karten zurück, sodass Sie verfolgen können, wohin sie zurückkehrt.
Das Layout ist deterministisch — dieselben Daten erzeugen immer dasselbe Bild. Node-Positionen lassen sich für die Sitzung verschieben, und das Verschieben wird bewusst nicht gespeichert.
Was auf einem Node steht
Der Header trägt den Schlüssel, einen Untertitel (seine Tabelle, oder den menschenlesbaren Namen, den ein Plugin geliefert hat), die Zelladresse und ein Badge, das zählt, wer sonst noch auf diesen Datensatz zeigt.
Darunter sind die Referenz-Ports immer sichtbar. Ein Port ist die Stelle, an der eine Verbindung einsteckt, daher würde das Verbergen eines Ports das Bild lügen lassen. Jeder Port zeigt einen gefüllten oder leeren Punkt, was er akzeptiert und wie viele verlinkt sind. Ein Listen-Port zeigt seine Elemente in Reihenfolge, jedes mit Verschiebungs- und Entfernen-Steuerung, weil die Reihenfolge einer Liste Daten sind.
Die einfachen Spalten falten sich zu einer „n Werte"-Gruppe zusammen, offen am Terminus und geschlossen anderswo. Jede Zeile ist eine Wertzeile, in die Sie tippen können — dasselbe Widget, das das Grid verwendet, committet über dasselbe Gate. Port-Punkte sind in der Farbe der Tabelle eingefärbt, die sie akzeptieren, sodass eine Kette als eine Farbe gelesen wird.
Eine Karte zeigt dieselbe Projektion, die die Tabelle zeigt. Eine in diesem Batch vorgemerkte Spalte — noch nicht übernommen, erforderliche und Referenztypen eingeschlossen — steht bereits auf der Karte, markiert als ausstehend, genauso wie der Tabellenkopf sie markiert, Tooltip eingeschlossen: Eine vorgemerkte Referenzspalte erscheint als Port, eine vorgemerkte einfache Spalte als Wertzeile, eine vorgemerkte Umbenennung zeigt den neuen Namen über dem ursprünglichen Wert, und ein vorgemerktes Löschen entfernt die Zeile auch von der Karte. Das Hinzufügen einer erforderlichen Spalte zu einer befüllten Tabelle leert die Karten nicht, während die leeren Zellen noch befüllt werden — die Canvas zeigt weiterhin die Tabelle, wie sie nach dem Übernehmen aussehen wird, genau wie es das Grid tut.
In der rechten oberen Ecke sitzt ein einzelner Output-Punkt. Was dieser Datensatz exportiert, ist er selbst, daher gibt es genau einen. Das Ziehen daran stellt die entgegengesetzte Frage („wo verwende ich das?") zum Ziehen an einem Port („worauf zeigt das?").
Dieser Punkt wird nur gezeichnet, wenn irgendeine Tabelle im Projekt tatsächlich eine Spalte hat, die diese Tabelle akzeptiert, weil ein Punkt ohne Ziel eine Möglichkeit ist, die garantiert scheitert. Der Test ist das Schema, nicht die Daten: Eine Spalte, die RecordId@ThisSheet deklariert, hält den Punkt am Leben, noch bevor irgendjemand auch nur eine einzige Zeile geschrieben hat.
Gesten und Menüs
Der Punkt ist der Griff. Das Drücken eines Port-Punkts startet die Geste, das Drücken irgendwo sonst auf der Zeile nicht, sodass nichts versehentlich gegriffen wird. Drücken und Loslassen ohne Bewegung ist weiterhin ein Klick.
- Der Header einer Karte ist sein eigener Griff:
- klicken Sie ihn, um die Karte auszuwählen, was sie auch über jede überlappende Karte hebt;
- ziehen Sie ihn, um die Karte für diese Sitzung zu verschieben;
- doppelklicken Sie ihn, um diesen Datensatz zum neuen Terminus zu machen.
- Rechtsklick auf leere Canvas → New record. Ein Kaskaden-Picker öffnet sich: Der linke Bereich listet die Tabellen, auf die die gerade gezeichneten Ports zielen, der rechte Bereich trägt Suche, Erstellen und die Datensatzliste, und eine dritte Seite fragt, welcher Port den Datensatz erhält, wenn mehr als einer infrage kommt.
- Ein Plugin kann diese Tabellenliste eingrenzen oder erweitern. Eine von ihm deklarierte Tabelle, die kein Port auf dem Bildschirm akzeptiert, bleibt mit angehängtem Grund gelistet, statt zu verschwinden.
- Hier gibt es keinen kontextfreien „neuen Datensatz" — jeder auf der Canvas geborene Datensatz wird verlinkt geboren. Eine eigenständige Zeile ist, wofür + Row des Grids da ist.
- Klicken Sie auf einen leeren Port-Punkt, oder Rechtsklick auf einen Node → Connect, um diese Spalte zu verlinken. Der Picker öffnet sich am Cursor und ist dieselbe durchsuchbare Schlüsselliste, die das Grid verwendet.
- Zwei Kopfzeilen sagen, was der Slot akzeptiert und in welche Zelle die Auswahl geschrieben wird.
- Jede Zeile trägt den Schlüssel, seinen Anzeigenamen und wie viele Stellen bereits darauf zeigen, und bereits hier verlinkte Schlüssel sind markiert statt still dupliziert zu werden.
- Existiert der gewünschte Datensatz noch nicht, wird die Suchbox zu einer Schlüsselbox mit ausgefülltem gemeinsamem Präfix der Tabelle. Tippen Sie einen Namen, drücken Sie Enter, und er wird in einer Geste erstellt und verlinkt, die ein
Ctrl+Zrückgängig macht. Ein leerer oder bereits vergebener Name sagt dies (und wo), statt irgendetwas zu erstellen.
- Ein auf der Canvas erstellter Datensatz wird zur Canvas. Die Ansicht leitet dorthin um, so wie es ein Doppelklick auf eine Karte tut, sodass der neue Datensatz mit dem gerade erstellten Link daneben in der Mitte steht. (Forking ist die Ausnahme — der Sinn eines Forks ist, dass dieser Terminus seine eigene Kopie behält, sodass die Ansicht bleibt, wo sie ist.)
- Ziehen Sie von einem leeren Port-Punkt, und die Verbindung folgt dem Cursor: Lassen Sie sie auf einer Karte fallen, um zu verlinken, auf leerer Canvas, um dort den Picker zu öffnen.
- Das Ziehen vom Output-Punkt geht den anderen Weg. Loslassen über einer Karte, und die Canvas findet, welche ihrer Spalten diesen Datensatz aufnehmen können — ein Kandidat verlinkt sofort, mehrere fragen welcher. Das Fallenlassen auf leerer Canvas öffnet die gespiegelte Kaskade der Tabellen, die ihn aufnehmen könnten, einschließlich Tabellen, die nicht auf dem Bildschirm sind.
- Während ein Ziehvorgang läuft, dimmt alles Unbeteiligte, und die Ports, die ihn akzeptieren könnten, leuchten, sodass die zulässigen Ziele sichtbar sind statt erraten zu werden.
- Jede abgeschlossene Geste antwortet mit einem kurzen Toast, der die geschriebene Zelle nennt — und, wenn es wichtig ist, dass der Link einen Zyklus geschlossen hat oder dass der Datensatz jetzt mit jemand anderem geteilt wird.
- Einen bereits eingesteckten Link aufnehmen. Das Ziehen an einem gefüllten Einzelreferenz-Port hebt genau diese Verbindung ab, exakt wie das Herausziehen eines Kabels aus einer Buchse. Lassen Sie sie auf einer anderen Karte fallen, um sie neu zu verankern, oder auf einem anderen Port, um den Link über zwei Zellen zu verschieben — weiterhin ein Undo-Schritt, und keine Zelle wird geschrieben, es sei denn, beide Pläne stehen. Lassen Sie sie zurück, wo sie war, oder drücken Sie
Esc, um nichts zu ändern.- Das Fallenlassen auf leerer Canvas öffnet den Picker dieser Zelle am Cursor, mit Disconnect als Zeile darin angeboten statt sofort ausgeführt: eine ausgerutschte Hand darf keinen Link löschen.
- Das Anklicken eines solchen Punkts ohne Bewegung wählt stattdessen diese Verbindung aus, sodass die beiden Gesten sich nie gegenseitig etwas kosten.
- Ein gefüllter Skalar-Port ist weiterhin ein gültiges Ziel für den Ziehvorgang von jemand anderem — das Fallenlassen darauf bedeutet ersetzen.
- Listen-Ports haben keine einzelne Verbindung zum Abheben, daher starten sie immer einen neuen Link. Das Entfernen oder Neuanordnen eines Elements ist, wofür die eigene ✕-/▲▼-Zeile des Elements da ist.
- Der Körper einer Verbindung dient dem Auswählen, nicht dem Ziehen. Klicken Sie irgendwo entlang einer Verbindung — der klickbare Streifen folgt jedem Segment ihres Pfads —, um sie auszuwählen und den Verbindungs-Inspector zu öffnen.
Deleteoder Rechtsklick ▸ Disconnect trennt sie. Neu-Verankern ist die Port-Geste von oben, daher gibt es für jede Sache genau einen Weg. - Rechtsklick auf einen Node → Delete this record. Ein einziger Dialog nennt alles, was verschwindet: wie viele Verbindungen auf den Datensatz zeigen und wie viele vorgemerkte Bearbeitungen an dieser Zeile verworfen werden.
- Einen geteilten Datensatz forken. Wird ein Datensatz an mehreren Stellen verwendet, bietet der Node-Inspector Duplicate and split. Es klont jede Spalte in einen neuen Schlüssel (vorgeschlagen aus dem Präfix der Tabelle) und verankert nur die Links dieser Canvas neu an der Kopie. Ein Undo-Schritt, und der Datensatz, den alle anderen verwenden, bleibt unangetastet.
- Der Verbindungs-Inspector öffnet sich mit der ausgewählten Verbindung. Er sagt eine Zeile ist ein Token: die Zelle, in der der Link geschrieben steht, und deren gesamter Text in seine Tokens aufgeteilt ist, mit einer Markierung auf demjenigen, das diese Zeile ist.
- Wenn das Plugin, das die Kante geöffnet hat, es beschreibt, bearbeitet eine Zeile den Teil des Tokens, der nicht der Schlüssel ist (das
add:10vonattack:add:10). Das Bearbeiten dieser Zeile schreibt nur den Rest um; zu ändern, worauf es zeigt, ist Neu-Verankern, was die Port-Geste ist. - Von hier aus können Sie auch den Datensatz öffnen, auf den es zeigt, oder den Link kappen.
- Wenn das Plugin, das die Kante geöffnet hat, es beschreibt, bearbeitet eine Zeile den Teil des Tokens, der nicht der Schlüssel ist (das
- Die
Delete-Taste liest die Auswahl und fragt, was diese Auswahl hier bedeutet.- Bei ausgewählter Verbindung trennt sie diese Verbindung.
- Bei ausgewählter Karte hängt es davon ab, ob die Karte der von Ihnen geöffnete Datensatz ist. Am Terminus — der Karte in der Mitte, dem Datensatz, um den es auf diesem Bildschirm geht — löscht sie den Datensatz, über denselben Bestätigungsdialog wie der Menüpunkt.
- Bei jeder anderen Karte kappt sie auf einmal jede Verbindung zwischen dieser Karte und diesem Bildschirm, weil diese Karte von hier aus Material ist, nicht das Subjekt. Das ist ein Undo-Schritt, mit verketteten Plänen, sodass eine Listenspalte all ihre passenden Elemente verliert statt aller bis auf das letzte, und eine Verbindung, die nicht gekappt werden konnte, sagt warum, statt still zu bleiben.
- (Rechtsklick ▸ Delete this record bedeutet immer löschen, auf welcher Karte auch immer — die Taste ist die Abkürzung, deren Bedeutung der Auswahl folgt, die Menüzeile ist die explizite.)
- Eine von einem Plugin gezeichnete Karte, die keine Sheet-Zeile ist, hat nichts zu löschen oder zu trennen, daher tut die Taste bei ihr nichts.
- Ein neuer Datensatz, der mit nichts verlinkt ist, wird auf der Canvas anderer nicht gezeichnet. Eine neue Zeile taucht hier nur auf, solange eine vorgemerkte Verbindung sie mit etwas auf dem Bildschirm verknüpft — sonst würde eine einzelne unfertige Zeile in der Tabelle jeder Canvas im Projekt hinterherlaufen.
- Dabei geht nichts verloren. Das Erstellen eines Datensatzes von der Canvas aus leitet die Ansicht sofort dorthin um, sodass die gerade erstellte Zeile das ist, was Sie betrachten. Eine im Grid erstellte Zeile bleibt im Grid. Und eine Zeile, die am Ende mit nichts verlinkt ist, wird in der Verwerfen-Liste des Übernehmen-Dialogs genannt, bevor sie fallengelassen wird, egal ob sie je gezeichnet wurde oder nicht.
- Strg/Cmd + Mausrad zoomt die Canvas zwischen 25 % und 200 %, wobei der Punkt unter dem Cursor stillsteht. Die Prozentzahl im Canvas-Header ist eine Schaltfläche, die zu 100 % zurückspringt. Ein einfaches Mausrad scrollt weiterhin.
- Ziehen mit der mittleren Maustaste — oder Alt + linke Taste — schwenkt. Der Cursor ändert sich, solange Sie halten, sodass klar ist, dass die Ansicht bewegt wird und nicht etwas darauf.
- Links-Ziehen allein bedeutet weiterhin „auswählen und verlinken", weshalb das Schwenken eine eigene Taste bekam. Alt + Links ist dieselbe Geste für Mäuse und Trackpads ohne mittlere Taste.
- Das Schwenken stoppt am Rand des Inhalts: Dies ist eine Scroll-Ansicht, keine endlose Ebene, daher können Sie den Graphen nicht im leeren Raum verlieren.
Disconnect und Ablehnungen
Disconnect sagt, was passieren wird, bevor Sie es drücken. Löschen wird nie verweigert, aber die Menüzeile buchstabiert die Konsequenz aus:
- eine optionale Spalte mit Standardwert fällt auf diesen Standardwert zurück, die Verbindung verschwindet also, und der Datensatz löst sich zur Laufzeit weiterhin auf;
- eine optionale Spalte ohne Standardwert wird schlicht leer;
- eine erforderliche Spalte wird zu einer leeren Zelle, die Problems meldet — Sie können sie vormerken, und die Vorab-Validierung wird das Übernehmen stoppen, bis Sie sie befüllen;
- eine Liste verliert schlicht dieses eine Element.
Validierung lebt in einem Kanal; die Canvas führt nie eine eigene zweite aus.
Zwei Dinge werden tatsächlich verweigert statt vorgetäuscht, und das Menü sagt, welche:
- Eine Verbindung, die nicht sagt, in welcher Zelle sie geschrieben steht, kann nicht bearbeitet werden. Der Core trägt dies für die Referenzen ein, die er selbst liest; ein Plugin, das eine Verbindung von Hand hinzufügt, liefert es (oder lässt es ehrlich weg).
- Ein Link, der in einem benutzerdefinierten Typ vergraben ist — zum Beispiel der Stat-Name innerhalb eines
Modifier-Werts — ist nur bearbeitbar, wenn das Plugin, das diese Kante geöffnet hat, sich auch fürIAuthorableEdgeContributorentschieden hat. Andernfalls ist die Verbindung nur zur Anzeige.
Doppelte Schlüssel, schreibgeschützte Quellen, xlsx-gestützte Tabs und ein laufender Import deaktivieren das Canvas-Authoring genau so, wie sie das des Grids deaktivieren, jeweils mit seinem Grund in der Menüzeile.
Strukturbearbeitung
Alles Folgende wird wie eine Zellbearbeitung vorgemerkt — sofort sichtbar, rückgängig machbar, durch ein einziges Rückschreiben bestätigt. Die Möglichkeiten leben in den oben beschriebenen Rechtsklick-Menüs (Spaltenkopf · Zeilen-Randspalte · Tabelle in der Seitenleiste).
Das Studio hält außerdem feste Schaltflächen auf der Kopfleiste der Tabelle, neben dem Tabellennamen, damit die meistgenutzten gefunden werden können, ohne zu wissen, dass die Rechtsklick-Menüs existieren. Darunter sind + Row und + Column, das eine Spalte am Ende anhängt. Dieselbe Leiste trägt das Umbenennen-✎ der Tabelle, den @overlap-Zeilen-Schalter sowie die Such- und Sortiersteuerung. Das Rechtsklicken eines Headers ist weiterhin der Weg, um eine neue Spalte an einer bestimmten Position zu platzieren.
- Spalten: Hinzufügen, Entfernen, Verschieben und Bearbeiten von Eigenschaften direkt vor Ort.
- Das Eigenschaften-Formular (properties ✎ am Header) bearbeitet Name,
@type,@descund@overlapgemeinsam. Nur die Markierungszellen ändern sich; die Datenzellen der Spalte bleiben zu 100 % erhalten (kein Datenverlust durch Löschen-und-neu-Hinzufügen). @overlapist eine Checkbox. Die Zeile wird bei Bedarf automatisch angelegt, und die Box ist bei Schlüsselspalten deaktiviert, die immer eindeutig sind.- Die
@type-Eingabe wird während der Eingabe validiert. Die Vorab-Validierung prüft anschließend, ob jede bestehende Zelle mit dem neuen Typ kompatibel ist, bevor irgendetwas geschrieben wird.
- Das Eigenschaften-Formular (properties ✎ am Header) bearbeitet Name,
- Markierungen: Hinzufügen/Entfernen der optionalen
@overlap-Zeile. Die eigene@style-Gruppenbezeichnung und -Farbe einer Tabelle werden über denselben Pfad vorgemerkt (Rechtsklick in der Seitenleiste ▸ Group & color ✎), sodass Gruppierung und Färbung wie jede andere Bearbeitung in die Tabelle gepusht werden, statt in editor-lokalem Zustand gehalten zu werden. - Zeilen: Löschen; Neuanordnen mit ▲▼ (im Studio „move up" / „move down" im Randspalten-Menü).
- Spalten neu anordnen — beliebig viele Verschiebungen, bestätigt in einem einzigen Übernehmen-Vorgang. Auch ausstehende (neu hinzugefügte) Spalten lassen sich neu anordnen, bis ganz nach vorn, über bestehende Spalten hinweg.
- Kommentare und leere Zeilen bleiben bei allen Strukturbearbeitungen erhalten.
WYSIWYG: Das Grid ist eine Live-Vorschau der Tabelle nach dem Übernehmen
Alles, was Sie vormerken, ist sofort das, was Sie sehen:
- Eine hinzugefügte Spalte erscheint sofort — und Sie können ihre Zellen im selben Batch befüllen (sowohl bestehende als auch neue Zeilen). So fügen Sie einem befüllten Tab eine erforderliche Spalte hinzu: hinzufügen und die Werte gemeinsam befüllen. Unbefüllte erforderliche Zellen werden von der Vorab-Validierung abgefangen.
- Gelöschte Spalten/Zeilen verschwinden sofort. Die Staging-Zusammenfassung listet auf, was aussteht (
Deleted: column 'hp'·Added: column 'mp') — nur zur Anzeige. - In einem Batch lässt sich alles frei mischen: Wertbearbeitungen, Zeilen-Hinzufügungen, mehrere Spalten-Hinzufügungen/-Entfernungen, Markierungs-Umschaltungen und Neuanordnungen — keine Beschränkung auf „eine Operation pro Batch".
- Das Löschen einer Spalte/Zeile mit bereits vorgemerkten Bearbeitungen (oder das Abbrechen einer befüllten neuen Spalte) fragt „N Bearbeitungen gehen verloren — fortfahren?" — nichts wird stillschweigend verworfen.
Tab-Umbenennung & A↔B-Vertauschungen — Referenzen folgen den Daten
Tab-Umbenennung („Rename tab ✎") benennt die Quelle um und aktualisiert jede @type-Referenz auf den Tab über alle Tabellen hinweg (RecordId@Foo → RecordId@Bar, einschließlich Listen- und benutzerdefinierter Formen), nach einem Bestätigungsdialog. Das Umbenennen der Quelle bedeutet lokal eine Dateiumbenennung mit erhaltener Dateiendung, bei Google eine Titeländerung mit unangetastetem Inhalt.
Gegenseitige Vertauschungen (A↔B) und Zyklen werden in einem Batch unterstützt: Das Vormerken einer der beiden Hälften zuerst funktioniert, und Referenzen folgen den Daten durch ein atomares Vertauschungs-Rewrite.
- Lokal werden die Dateiinhalte in einem einzigen Schreibvorgang getauscht und veraltete Dateien mit alter Endung bereinigt.
- Bei Google werden die Titeländerungen topologisch geordnet, mit einem temporären Titel, um jedes kurzzeitige Duplikat zu vermeiden.
Der erneute Import übernimmt die Aufräumarbeiten automatisch: Umbenennung der generierten Klasse, Entfernen der alten Klassendatei sowie Neu-Registrierung von per Bake erzeugtem SO und Addressables-Adresse.
Umbenennen von Schlüsseln (RecordId) mit Referenz-Propagierung
Bearbeiten Sie eine Schlüsselzelle direkt im Grid. Beim Übernehmen wird jede Zelle in jedem Tab, die diesen Schlüssel referenziert (RecordId@ThisTab-Skalare und Listenelemente), gemeinsam aktualisiert, nach einer Bestätigung „N Referenzen werden aktualisiert — fortfahren?". Funktioniert sowohl auf lokalem als auch auf Google-Pfad. Grenzen:
- Die Propagierung betrifft nur Baseline-Zellen. Text, den Sie gerade erst im selben Batch eingegeben haben, wird nie stillschweigend überschrieben; die Vorab-Validierung erkennt stattdessen die hängende Referenz, sodass Sie sie bewusst beheben.
- Würde die Propagierung einen Tab mit xlsx-Ursprung betreffen, wird das gesamte Übernehmen blockiert, weil ein teilweises Übernehmen nie erlaubt ist. Bearbeiten Sie diese Arbeitsmappe direkt und importieren Sie erneut.
- Der sekundäre Integer-Schlüssel (
IntId) ist auf dieselbe Weise bearbeitbar.
Ctrl+Z / Ctrl+Y — verdrahtet mit Unitys nativem Undo
Jede Staging-Änderung ist in Unitys natives Undo integriert:
- Zellbearbeitungen;
- Schlüsselbearbeitungen;
- Spalten-Hinzufügen/-Entfernen/-Abbrechen;
- Zeilen-Hinzufügen/-Löschen;
- Markierungs-Umschaltungen;
- Neuanordnungen;
- Eigenschaften-Bearbeitungen;
- Tab-Umbenennungen;
- Canvas-Verlinkungen und -Trennungen;
- Asset-Drops, zusammen mit den Registrierungen, die sie vormerken;
- sogar „alles verwerfen".
Zwei Grenzen, die Sie kennen sollten:
- Während der Eingabe in ein Textfeld verbraucht das Feld selbst zuerst Ctrl+Z (Standardverhalten unter Windows).
- Nach einem erfolgreichen Übernehmen wird der Staging-Verlauf gelöscht — Ctrl+Z bewegt sich nur innerhalb der Sitzung vor dem Übernehmen. Bereits in die Tabelle geschriebene Änderungen werden rückgängig gemacht, indem Sie die Tabelle bearbeiten.
Vorgemerkte Bearbeitungen überleben erneute Importe
Vorgemerkte Bearbeitungen tragen eine logische Adresse (Tab · Zeilenschlüssel · Feld), keine physische Zeilennummer, und werden unmittelbar vor dem Übernehmen neu aufgelöst. So übersteht Ihr Staging automatische erneute Importe und Hintergrund-Änderungen der Baseline.
Eine Bearbeitung wird isoliert, wenn sich die Tabelle extern so geändert hat, dass die Auflösung fehlschlägt — der Schlüssel der Zeile wurde von außen umbenannt, die Zeile wurde gelöscht, oder ein Schlüssel steht jetzt im Konflikt. Eine isolierte Bearbeitung wird vom Übernehmen ausgeschlossen und mit einem Badge „isoliert" angezeigt. Sie wird weder stillschweigend verworfen noch darf sie den Rest Ihrer Sitzung blockieren; Sie können sie nach Bestätigung einzeln verwerfen.
Vorab-Validierung — validieren, dann übernehmen
Das Rückschreiben validiert zunächst den gesamten projizierten Zustand im Speicher — Referenzintegrität, @overlap-Eindeutigkeit, Asset-Schlüssel und Asset-Typen (wobei die in dieser Sitzung vorgemerkten Registrierungen als vorhanden gezählt werden), plus alle Plugin-Domänen-Validatoren. Schlägt die Validierung fehl, wird nichts geschrieben, und Sie erhalten den vollständigen Bericht. Das Schreiben beginnt erst, nachdem der gesamte projizierte Zustand die Prüfung bestanden hat; die vorgemerkten Addressables-Registrierungen laufen, nachdem das Schreiben der Tabelle erfolgreich war und bevor der automatische erneute Import beginnt, und ein Übernehmen, dessen einzige vorgemerkte Änderung eine Registrierung ist, führt sie trotzdem aus und importiert erneut (siehe Quellen, Export & Push).
Tabelle erstellen / löschen
- Erstellen aus einer der beiden eingebauten Vorlagen, aus einer per Plugin registrierten Vorlage, oder von Grund auf durch das Definieren von Feldern. Ein Klick erstellt die lokale Datei oder den Google-Tab (nach einer Warnung).
- Die eingebauten Vorlagen sind Item-Beispiel (nur Kerntypen) und Enum definitions, das eine
@enum-Tabelle anlegt (siehe unten). - Eine per Plugin registrierte Vorlage ist nur vorhanden, wenn ein Plugin eine bereitstellt — z. B. die Skill-Tabs des Plugin-Demos.
- Die eingebauten Vorlagen sind Item-Beispiel (nur Kerntypen) und Enum definitions, das eine
- Erstellen Sie in eine andere Quelle als die, aus der Sie gerade importieren, sagt der Dialog dies, bevor er handelt. Der automatische erneute Import würde die alte Quelle lesen und den neuen Tab nie sehen, daher wechselt das Erstellen die Importquelle zu der, in die Sie erstellt haben, und speichert dies im Einstellungs-Asset.
- Löschen räumt alles gemeinsam auf: Quelle, Baseline, per Bake erzeugtes SO und generierte
.cs-Datei (deutliche Warnung + Bestätigung).
Sheet-übergreifende Suche (der Eintrag All)
Der erste Eintrag in der Seitenleiste ist All: Geben Sie einen Begriff ein, und er durchsucht die Ids und Feldwerte jeder Tabelle per Teilübereinstimmung, aufgelistet als Tabelle · Schlüssel · Feld · Wert, 50 Zeilen pro Seite. Bei leerer Box durchstöbert er jeden Datensatz in jeder Tabelle.
Er liest die per Bake erzeugten Datenbanken, benötigt also zunächst einen erfolgreichen Import und sagt das unmissverständlich, wenn noch keiner stattgefunden hat. Die Ergebnisse aktualisieren sich selbst, wenn ein Import abgeschlossen ist oder sich die aktiven Einstellungen ändern, statt eine veraltete Antwort zu zeigen.
Eine Ergebniszeile ist eine Tür, nicht nur ein Listeneintrag. Doppelklicken Sie sie — oder wählen Sie sie aus und drücken Sie Enter — und diese Tabelle öffnet sich mit der markierten Zelle ausgewählt; ein einfacher Klick wählt nur die Zeile aus. Da die Ergebnisse aus per Bake erzeugten Daten stammen, kann ein Ergebnis eine Tabelle nennen, die die aktuelle Sitzung nicht geladen hat — diese Zeile navigiert dann nicht, und ein kurzer Hinweis unter der Liste sagt warum, statt einfach nichts zu tun.
Eine fehlgeschlagene Tabelle öffnen (Quarantäne)
Früher ließ Sie ein Validierungsfehler ohne jedes Mittel zurück, ihn zu beheben: Der Import schlug fehl, also erschien keine Tabelle im Fenster, und der einzige Weg vorwärts war, die Tabelle selbst zu öffnen. Das ist jetzt umgekehrt.
Abrufen und Speichern sind vom Validieren getrennt. Solange die Quelle vollständig gelesen wurde, werden die Tabellen als Baseline-Snapshot gespeichert, selbst wenn die Validierung fehlschlug — das Studio öffnet sie also, zeigt jeden Fehler an der betroffenen Zelle und lässt Sie genau wie gewohnt beheben und pushen.
Was blockiert bleibt, ist die Ausgabe: Codegenerierung und Bake laufen erst, wenn die Fehleranzahl null ist, sodass „kein Teil-Zusammenbau" genau dort erhalten bleibt, wo es hingehört — am Ausgang.
- Sie werden informiert, nicht im Unklaren gelassen. Die Konsole sagt, dass die Tabellen gespeichert wurden und was blockiert ist. Die Seitenleiste trägt einen Hinweis
⛔ N error(s) — code generation and baking are blocked, der bei einem Klick zum ersten Fehler springt, und die Fehler-Badges pro Tabelle stammen aus denselben Projektions-Diagnosen, die Sie bereits in Problems sehen. Eine Tabelle, die sich gar nicht parsen ließ, sagt das, statt leer zu erscheinen. - Das Pushen Ihrer Korrektur fragt einmal nach. Solange die Tabelle unter Quarantäne steht, zeigt das Rückschreiben eine zusätzliche Bestätigung: Die bestehenden Fehler bleiben, und ein neuer Fehler, den diese Bearbeitung einführt, wird ebenfalls geschrieben — die Validierung hält das nicht auf. Alles, was sie findet, wird im Bericht dieses Übernehmen-Vorgangs als Warnung aufgeführt, und der automatische erneute Import validiert die gesamte Tabelle danach erneut. Bei einer gesunden Tabelle ändert sich nichts: Die Vorab-Validierung bleibt ein hartes Gate.
- Die Ausgänge bleiben verschlossen. Export und Push zur Live-Tabelle werden beide verweigert, solange Quarantäne besteht, weil beide die zuletzt erfolgreich gebackenen Werte in die neueren Tabellen einspleißen würden — was genau die Werte zurückrollen würde, die gerade jemand behoben hat. Ein Build wird aus demselben Grund durch die Aktualitätsprüfung gestoppt, und auch das Fenster „Erste Schritte" zeigt diesen Zustand.
- Die Markierung wird an genau einer Stelle gelöscht — in dem Moment, in dem ein Import bis zum Bake vollständig durchläuft. Kein früherer Schritt kann sie löschen, sodass ein späterer Fehlschlag kein falsches „alles klar" hinterlassen kann.
Sortierung und Filter (nur Anzeige)
Das Studio fügt eine Sortierung pro Tabelle hinzu (beliebige Spalte, auf-/absteigend, typbewusster Vergleich, pro Projekt gespeichert) sowie einen Textfilter. Beide ändern nur die Anzeigereihenfolge: Die Randspalte behält die echten Tabellen-Zeilennummern, und nichts an Sortierung oder Filter berührt Staging, Übernehmen, Push oder Export.
Solange eine Sortierung oder ein Filter aktiv ist, deaktivieren sich die Zeilen-Verschieben-Einträge im Randspalten-Menü selbst und sagen warum, weil „sichtbarer Nachbar" nicht der echte Nachbar wäre. Die spaltenweisen Wertfilter und das Ausblenden von Spalten, die unten beschrieben werden, folgen derselben Regel.
Fixierte Spalten (nur Anzeige)
Rechtsklick auf einen Spaltenkopf ▸ Bis zu dieser Spalte fixieren, und diese Spalte, plus jede Spalte links davon, wandert in ein eigenes Panel außerhalb des horizontalen Scrollens — sodass der Schlüssel sichtbar bleibt, während Sie zu einer weit entfernten Spalte scrollen. Spaltenfixierung aufheben gibt sie wieder frei. Mindestens eine Spalte muss scrollbar bleiben, daher wird das Fixieren der letzten mit angezeigtem Grund verweigert. Eine Tabelle mit einer einzigen Spalte hat nichts zu fixieren.
Was fixiert ist, ist eine Anzahl von Spalten von links, keine bestimmt benannte Spalte. Das Verschieben einer Spalte ändert also, welche gehalten werden, genau so, wie sich fixierte Bereiche in einer Tabellenkalkulation verhalten.
Wie Sortierung und Filter ist dies eine Ansichtseinstellung, gespeichert pro Tabelle in projektweiten Einstellungen. Sie erreicht nie die Tabelle, funktioniert also bei schreibgeschützten und xlsx-gestützten Tabellen und während ein Import läuft, und erscheint in keinem Push oder Export.
Spaltenbreite, Ausblenden und spaltenweise Filter (nur Anzeige)
Jede Spalte — auf Daten-Tabellen wie auf Enum-Definitionstabellen gleichermaßen — kann von Hand in der Größe angepasst werden: den Griff ziehen am rechten Rand der Buchstabenzelle der Spalte, doppelklicken auf den Griff, um zur gemessenen Passform zurückzukehren, oder Spaltenbreite… im Spaltenmenü für eine genaue Zahl und Spaltenbreite automatisch anpassen, um erneut zu messen. Der Boden liegt bei 24 px, und es gibt keine Obergrenze. Breiten werden pro Tabelle gespeichert und wiederhergestellt, wenn die Tabelle oder der Editor zurückkehrt, und die automatische Anpassung misst jede Zeile — nicht nur die sichtbaren —, sodass ein Filter Breiten nicht springen lassen kann.
Dasselbe Spaltenmenü trägt den Rest des Funktionsumfangs einer Tabellenkalkulation:
- Spalte ausblenden / Ausgeblendete Spalten einblenden (n) — Ausblenden ist eine Ansichtseinstellung: Die Buchstaben benennen weiterhin die echten Positionen der Tabelle (A · C · D), eine fette Grenzlinie im Header und im Body markiert, wo ausgeblendete Spalten sitzen, und ein Badge in der Symbolleiste zählt sie. Die letzte sichtbare Spalte verweigert das Ausblenden, mit dem Grund. Ausgeblendete Spalten existieren überall sonst weiterhin — Canvas, Validierung, Export und Push sehen die Tabelle unverändert.
- Filter… — eine Checkliste der Werte der Spalte (mit einem Eintrag (Leer) für leere Zellen) plus einer Bedingung: Enthält / Enthält nicht / Ist leer / Ist nicht leer bei jeder Spalte, und Ist gleich / Ist ungleich / Größer als / Kleiner als / Größer oder gleich / Kleiner oder gleich bei Zahlenspalten. Ist nichts angekreuzt, passiert jeder Wert, und die Bedingung gilt weiterhin. Ein Filter kombiniert sich mit dem Suchfeld, neu hinzugefügte Zeilen bleiben immer sichtbar, das Badge in der Symbolleiste zählt die gefilterten Spalten, und Filter löschen entfernt einen.
- Spaltendaten leeren… — leert nach einer Bestätigung den Wert dieser Spalte in jeder Zeile (herausgefilterte Zeilen und vorgemerkte neue Zeilen eingeschlossen) als ein Undo-Schritt. Die Schlüsselspalte verweigert dies — dort lebt der Name jeder Zeile; benennen Sie sie in ihrer Zelle um — und eine erforderliche Spalte meldet ehrlich Fehler, bis sie neu befüllt ist. Eine Spalte ohne etwas zu leeren merkt nichts vor.
- Aufsteigend sortieren / Absteigend sortieren / Tabellenreihenfolge — die Sortierung pro Tabelle, jetzt auch im Spaltenmenü, mit einem Häkchen bei der aktiven Wahl.
Wie Sortierung und fixierte Spalten ist all das nur Anzeige: Ansichtseinstellungen pro Tabelle, die nie die Tabelle, einen Push oder einen Export erreichen.
Enum-Definitionstabellen
Eine Tabelle, die Enums definiert (siehe Tabellensyntax), hat keine Datensätze, daher gibt ihr das Studio ein eigenes Grid statt der Datensatztabelle. Das Grid zeigt eine Spalte pro Enum mit den Membern der Reihe nach aufgelistet, ein Enum definitions-Badge in der Seitenleiste und eine Zählung, wie viele Enums sie enthält. Es liest sich wie jede andere Tabelle: Spaltenbuchstaben oben, echte Tabellen-Zeilennummern in der Randspalte, dieselben Rechtsklick-Menüs in derselben Reihenfolge und vorgemerkte Änderungen, markiert mit denselben Farben, die die Datentabelle verwendet.
Die Struktur der Tabelle wird direkt vor Ort bearbeitet, genau wie bei einer Datentabelle:
- Ein neues Enum definieren mit der + Enum-Schaltfläche in der Kopfleiste (der einzige Weg, das erste Enum auf einer Definitionstabelle zu platzieren, die noch keines hat) oder über das Rechtsklick-Menü eines Spaltenkopfs an einer gewählten Position. Das Formular nimmt den Namen, den optionalen zugrunde liegenden Typ und die Beschreibung sowie die ersten Member entgegen — mindestens einen, weil ein Enum ohne Member nicht importiert werden kann. Die Reihenfolge der Member ist ihr Ganzzahlwert.
- Ein Enum umbenennen, und jede
@type-Zelle, die sich darauf bezieht, wird über alle Tabellen hinweg im selben Batch umgeschrieben, sodass sich der erneute Import nach dem Schreiben weiterhin auflöst. Bearbeiten Sie den zugrunde liegenden Typ und die Beschreibung direkt vor Ort — die Markierungszeilen werden angezeigt, noch bevor die Tabelle sie hat, und werden erstellt, wenn die Änderung landet. - Ein Enum löschen — wird abgelehnt, solange irgendeine Tabelle es noch verwendet, wobei die verwendenden Spalten benannt werden. Spalten frei neu anordnen; die Spaltenposition eines Enums trägt keine Bedeutung, daher ist dies immer sicher.
- Alles wird wie jede andere Bearbeitung vorgemerkt: sofort sichtbar, ein
Ctrl+Z-Schritt pro Geste, geschrieben durch ein Übernehmen. Jede Entscheidung — ist der Name zulässig oder bereits vergeben, ist ein Member gültig, ist der zugrunde liegende Typ erlaubt, wird das Enum noch verwendet — trifft derselbe Code, der auch den Import validiert, sodass Formular und erneuter Import nie widersprechen können. Eine blockierte Aktion bleibt mit ihrem Grund im Menü stehen, statt zu verschwinden.
Member-Zeilen können weiterhin nur angehängt werden, und es gibt keine Sortierung, weil die Position eines Members sein Wert ist — das Neuanordnen von Membern würde bereits in Assets gebackene Daten umnummerieren.
Zellen zeigen genau das, was die Tabelle sagt: Ein mit der Name=value-Syntax festgelegter Member erscheint so, wie er geschrieben wurde. Duplikatsprüfungen vergleichen nur den Namensteil, sodass das Vormerken von Rare auf einer Tabelle, die bereits Rare=10 enthält, abgelehnt statt verdoppelt wird.
Um einen Member hinzuzufügen, müssen Sie die Tabelle nicht einmal öffnen. Das Dropdown einer Enum<T>-Zelle trägt überall im Projekt unten „Add a new member…": Tippen Sie den Namen ein, und er wird als ein Ctrl+Z-Schritt auf die Enum-Definitionstabelle vorgemerkt, markiert als vorgemerkt, bis das nächste Übernehmen ihn schreibt.
Die Zeile fehlt — statt vorhanden zu sein und zu scheitern — bei einem Enum, das ein Plugin aus C# registriert hat, weil die Tabelle dieses nicht besitzt.
Die Web-App bearbeitet diese Tabellen auf dieselbe Weise, nach denselben Regeln — siehe SheetForge Web.
Von einem Konsolenfehler direkt zur Zelle springen
Findet ein Import oder Übernehmen Fehler, hängt der menschenlesbare Konsolenbericht neben der Koordinate jedes Fehlers einen anklickbaren Link „Open in Data Studio" an. Ein Klick darauf öffnet das Studio, wechselt zu diesem Tab und hebt die Zelle hervor (ein linker Balken an der Zeile und ein Rahmen um die Zelle). Fehler ohne konkrete Zelle (Datei-/Tab-Ebene) fokussieren nur den Tab.
Der Link wird nur dem menschenlesbaren Bericht hinzugefügt; die maschinenlesbare Koordinatenzeile, auf die sich CI und Log-Auswertung verlassen, bleibt unangetastet.
Zustandsprüfung
⋯ ▸ Zustandsprüfung in der Symbolleiste des Studios führt eine schnelle Diagnose ohne Netzwerkzugriff aus. Sie gibt ✓/✗ mit einem Lösungsvorschlag aus für:
- die aktiven Einstellungen;
- die Erreichbarkeit der Quelle — ein vorhandener lokaler Ordner oder eine Google-ID plus Service-Account-Schlüsselpfad;
- eine Import-Baseline;
- die Aktualität von generiertem Code, Bake und Addressables.
Ein Zusammenfassungsdialog nennt Ihnen, wie viele Prüfungen Aufmerksamkeit brauchen.
Aktive Import-Einstellungen
Hat das Projekt mehr als ein SheetForgeSettings-Asset, zeigt die Symbolleiste ein Dropdown, um festzulegen, welches aktiv ist. Die Auswahl eines Assets aktiviert es sofort und baut die Ansicht neu auf; Menüs, Importe und das Fenster folgen alle der aktiven Wahl. Bei einem einzigen Einstellungs-Asset ist das Dropdown ausgeblendet.
Die aktive Wahl wird pro Projekt und pro Benutzer gespeichert, sodass sie nie die Versionskontrolle berührt. Sie können sie auch über das Fenster „Erste Schritte" verwalten (Tools ▸ SheetForge ▸ Erste Schritte) oder über den Inspector eines Einstellungs-Assets, der ein Badge „aktiv" oder eine Schaltfläche „Als aktiv festlegen" zeigt.
Sicherheitsnetze
- Erkennung externer Änderungen für lokale Quellen.
- Eine Schließen-Warnung, wenn vorgemerkte Änderungen bestehen.
- Staging-Generations-Anker, die davor schützen, auf einem veralteten Grid zu handeln.
- Modus-Bewusstsein: Bei einer schreibgeschützten Quelle (Google ExportUrl) sind Push / Übernehmen / Strukturbearbeitung / Löschen deaktiviert, mit einer Erklärung beim Mouse-over.
- Fortschrittsbalken während Import/Export/Push, immer bereinigt (
try/finally), lokalisiert. - Eine sich falsch verhaltende Erweiterung kann das Fenster nicht zum Absturz bringen: Canvas-Overrides, Widgets und Aktionen werden innerhalb von try/catch aufgerufen, und ein Fehlschlag ist eine englische Konsolen-Warnung, während der Rest des Fensters weiterarbeitet.
Wichtig zu wissen vor dem Umbenennen (nach dem Übernehmen nicht rückgängig zu machen)
- Spalte umbenennen /
@typeändern regeneriert das generierte Feld (Name/Typ), sodass Spielcode, der dieses Feld referenziert, von Hand aktualisiert werden muss. Der Bestätigungsdialog weist ausdrücklich darauf hin, und ein daraus resultierender Kompilierungsabbruch wird von der automatischen Kette mit einem umsetzbaren Hinweissatz sicher abgebrochen. Die Werte der Spalte bleiben erhalten. - Tab umbenennen ändert den Namen der generierten Klasse (
FooDatabase→BarDatabase) — dieselbe Regel. - Gegenseitige Vertauschungen und Zyklen folgen denselben Regeln wie einzelne Umbenennungen (siehe den Abschnitt zur Tab-Umbenennung oben). Nur ein echter Konflikt – zwei Umbenennungen auf denselben Namen – wird abgelehnt.
- Tabs mit xlsx-Ursprung sind vom Umbenennen ausgeschlossen. Das Formular erklärt, warum, und Apply ist deaktiviert; benennen Sie das Sheet direkt in der Arbeitsmappe um und importieren Sie dann erneut.
- Bei Google bleibt ein Grenzfall bestehen: Zwei vertauschte Tabs, die sich gegenseitig referenzieren, werden nicht umgebogen (lokal ist es vollständig korrekt) – siehe Möglichkeiten & Grenzen.
- Nach dem Übernehmen lassen sich diese nicht mehr per Ctrl+Z rückgängig machen (die Tabelle wurde bereits geschrieben).
Testbearbeitung (temporäre SO-Anpassung)
Der Inspector des per Bake erzeugten SO besitzt einen Schalter „Testbearbeitung" (Standard: aus = schreibgeschützt). Schalten Sie ihn ein, um temporär SO-Werte anzupassen und Laufzeit-Werte auszuprobieren — wird nie in die Tabelle geschrieben, ist beim nächsten erneuten Import wieder weg. Datensätze sind über codeName/id schnell auffindbar, sowohl im Editor als auch im Play-Modus.
Die separate Schaltfläche der Workbench „meine vorgemerkten Werte auf den SOs vorschauen" ging mit diesem Fenster. Das Overlay, das sie ansteuerte, ist weiterhin öffentliche API für ein Werkzeug, das es nutzen möchte: EphemeralSoApply wendet an, was es wahrheitsgemäß berechnen kann, und lehnt ausstehende Spalten und Zellen mit Parse-Fehlern ab, statt sie vorzutäuschen. Der Schalter oben deckt den alltäglichen Fall ab.
Mit und ohne Plugins
Alles, was als Plugin-frei (nur Core) aufgeführt ist, funktioniert in einem einfachen Projekt. Jede Zeile Mit einem Plugin ist das, was ein Domänen-Plugin hinzufügt. Alles davon wird von der mitgelieferten Plugin-Demo durchexerziert, sodass Sie jedes einzelne in Aktion sehen können, bevor Sie Ihr eigenes schreiben (Plugin-Erstellung).
- Tabellen, Zellen, Zeilen
- Plugin-frei: vollständiges Grid, Zellbearbeitung, Zeilen-Hinzufügen, Staging, Ctrl+Z, Push.
- Mit einem Plugin: unverändert.
- Pull / Push
- Plugin-frei: Import aus der aktiven Quelle; Push über dieselbe Vorab-Validierungs- + Reimport-Kette.
- Mit einem Plugin: unverändert.
- Problems
- Plugin-frei: die vier Core-Validierungen (Schlüssel, Referenzen,
@overlap, Asset-Schlüssel). - Mit einem Plugin: plus Ihre
IDomainValidator-Regeln. Die Demo warnt bei einem ungebremsten Reaktionszyklus und bei einem verwaisten Datensatz.
- Plugin-frei: die vier Core-Validierungen (Schlüssel, Referenzen,
- Was die Canvas zeigt
- Plugin-frei: der von Ihnen geöffnete Datensatz, woraus er besteht und was ihn verwendet, deterministisch angeordnet.
- Mit einem Plugin: plus Ihr Override pro Tab über
ISheetForgeGraphPlugin— Identitäten, die keine Sheet-Datensätze sind, Links, die der Core nicht sehen kann, per Domänenreihenfolge angeheftete Spalten (absolut oder vom Datensatz auf dem Bildschirm gezählt), sowie der menschenlesbare Name, unter dem ein Datensatz läuft. Die Demo lässt Event-Nodes und einen Codeblock um einenExampleActions-Datensatz wachsen, heftet die Besetzungsstufen einesExampleSkills-Datensatzes fest und macht ausfireballauf der Karte und im Picker Fireball.
- Gezeichnete Kanten
- Plugin-frei: jede
RecordId@Tab-Referenz, die der Core-Scanner sieht (Skalare, Listenelemente, Standardwerte, Wrapper-Inneres). - Mit einem Plugin: plus von einem
IEdgeContributordeklarierte Kanten sowie jede zusätzliche Kante, die ein Canvas-Override offenlegt. Die Demo öffnet die Stat-Referenz, die innerhalb einesModifier-Mini-Syntax-Werts vergraben ist.
- Plugin-frei: jede
- Bearbeiten auf der Canvas
- Plugin-frei: Erstellen, Verbinden, Trennen, Neu-Verankern, Forken, Löschen und Inline-Wertbearbeitung für jede Spalte; neue Datensätze können in den Tabellen erstellt werden, auf die die gezeichneten Ports zielen.
- Mit einem Plugin: plus
IAuthorableGraphShape, um zu entscheiden, wo neue Datensätze erstellt werden dürfen,IAuthorableEdgeContributor, um die eigene Kante eines Contributors bearbeitbar zu machen, undIEdgeTokenEditor, um den Teil seines Tokens offenzulegen, der nicht der Schlüssel ist. Der Contributor der Demo schreibt diemodifier-Mini-Syntax um, wenn Sie einen Stat verlinken oder trennen, und bietet dessenop:valueals eine bearbeitbare Zeile im Verbindungs-Inspector an.
- Zell-Widgets
- Plugin-frei: die eingebauten Zweige (Toggle, Auswahl-Picker, Referenz-Picker, Asset-Picker mit Drop, Farb- / Kurven- / Verlaufsfelder, Chip-Listen für Listen dieser drei, Rohtext).
- Mit einem Plugin: plus Ihr
IStudioCellEditorProviderfür einen benannten Zelltyp. Ganz ohne Widget-Code benennt stattdessen einStudioCellEditorHinteine von sieben eingebauten Formen (Dropdown, mehrzeilig, Schieberegler, Toggle, Farbe, Kurve, Verlauf) für diesen Typ. Ein registriertes Widget gewinnt; der Hint gewinnt gegenüber dem Core-Standard — einschließlich gegenüber den eingebauten Farb-/Kurven-/Verlauf-Hints, wenn ein Paket einen Hint unter demselben Typnamen registriert.
- Menüs und Panels
- Plugin-frei: nur die eingebauten Einträge.
- Mit einem Plugin: plus Ihre
ISheetForgeStudioPlugin-Registrierungen — Verben am Ende des Inspectors, Zeilenmenü, Spaltenkopf-Menü, Canvas-Node-Menü und Topbar-⋯, ein rechtes Zusammenfassungs-Panel und ein Badge neben einem Spaltenkopf. Die Demo merkt auf einer Zeile eine Reaktionsbremse vor, befüllt eine ganze Spalte in einem Undo-Schritt und fasst den Aufbau eines Skills mit einer Cast-Zeit-Anzeige zusammen.
- Umfangreiche Panels
- Plugin-frei: nichts.
- Mit einem Plugin:
IStudioPanelProviderzeichnet ein beliebiges UIToolkit-Panel. Unter derselben Id wie ein beschriebenes Panel registriert, gewinnt es hier, während der Browser das beschriebene zeichnet.
- Seitenleiste
- Plugin-frei: nur Ihre Tabellen.
- Mit einem Plugin: plus gesperrte Code-Registries im Stil von
_Refs(ISheetForgeCodeRegistryPlugin), gezeigt als schreibgeschütztes Schlüssel-/Label-/Raises-Grid; Kanten, die auf diese Schlüssel zeigen, werden nicht als defekt gezeichnet.
- Über der Canvas
- Plugin-frei: nichts (der Core liefert kein Widget aus).
- Mit einem Plugin: Ihr
IStudioGraphWidget. Die Demo zeigt einen Streifen fester Stufen (VALIDATE → CAST → COMMIT → DELIVER → APPLY), befüllt aus der Terminus-Zeile.
- Node-Inspector
- Plugin-frei: Adresse, Used-by-Liste, „Go to this sheet", „Duplicate and split".
- Mit einem Plugin: plus Ihre
IStudioInspectorAction-Schaltflächen. Die Demo merktbrakeSeconds = 0.25bei einer ungebremsten Reaktion vor (eine normale, rückgängig machbare vorgemerkte Bearbeitung).
- Farben und Labels
- Plugin-frei: die eingebauten Presets plus die eigene
@style-Farbe jeder Tabelle. - Mit einem Plugin: plus Ihr
ISheetForgeThemePlugin-Preset und IhreISheetForgeStringsPlugin-Strings — in Core registriert, sodass die Labels desselben Packs auch im Browser erscheinen.
- Plugin-frei: die eingebauten Presets plus die eigene
Erste Schritte mit einem leeren Projekt
Ohne aktive Import-Einstellungen geöffnet, zeigt das Studio anstelle der Tabelle ein Panel „Get started" — eingebettete Schaltflächen, um ein Einstellungs-Asset zu erstellen, die Plugin-/Core-Demo zu importieren oder „Erste Schritte" zu öffnen. Es verschwindet in dem Moment, in dem Einstellungen existieren.
Noch schneller: Ziehen Sie einen Ordner auf das Fenster, oder eine einzelne .tsv-/.csv-/.xlsx-Datei, deren übergeordneter Ordner verwendet wird. Nach einer Bestätigung erstellt dies ein Import-Einstellungs-Asset, das aus diesem Ordner liest, und aktiviert es. Haben Sie bereits aktive Einstellungen, weist der Dialog darauf hin und bietet an, ein neues zu erstellen und zu wechseln.
Was aus der Workbench wurde
Das ursprüngliche IMGUI-Fenster Workbench wurde entfernt. Es teilte sich die Authoring-Session, die Zusammenstellungs-/Validierungs-Engine und den Übernehmen-Pfad mit dem Studio, daher ging kein Verhalten verloren — und die drei Dinge, die nur sie bot, wurden zuerst verschoben:
| Workbench-Funktion | Wo sie jetzt lebt |
|---|---|
| Der All-Tab — tab-übergreifende Suche mit Seitennummerierung | Der All-Eintrag oben in der Seitenleiste des Studios (dieselbe Suche, dieselbe Seitengröße) |
| Drag-and-Drop-Onboarding | Das Studio selbst nimmt den Drop entgegen (oben) |
| Das Google-gid-Autofill / Panel mit Live-Tab-Liste | Der Inspector des Einstellungs-Assets, unter Google Sheets |
Eine Fähigkeit wurde eher fallengelassen als verschoben: die Schaltfläche der Workbench zum Vorschauen vorgemerkter Werte auf den per Bake erzeugten SOs. Der Schalter Testbearbeitung des SO-Inspectors deckt denselben Bedarf ab (siehe Testbearbeitung oben).
Falls Sie Code oder Notizen haben, die darauf verweisen: Es gibt keinen zu aktualisierenden Menüeintrag — sie hatte nie einen —, und der Einstellungs-Inspector, der Inspector des per Bake erzeugten SO und die Vorlagengalerie von „Erste Schritte" öffnen alle das Data Studio.
Verwandte Seiten
- Tabellensyntax – wogegen das Eigenschaften-Formular validiert
- Quellen, Export & Push – was „Übernehmen" je Quelle bewirkt
- Plugin-Erstellung – wie man die Canvas-Overrides, Code-Registries, Widgets und Aktionen schreibt, die das Studio aufgreift
- Authoring-Kernel – die Engine, auf der dieses Fenster aufbaut
- Möglichkeiten & Grenzen – die vollständige Liste der Authoring-Grenzen