logologo
Start
Handbuch
Entwicklung
Plugins
API
Startseite
English
简体中文
日本語
한국어
Español
Português
Deutsch
Français
Русский
Start
Handbuch
Entwicklung
Plugins
API
Startseite
logologo
RunJS Übersicht
Module importieren
Rendern im Container

Globale Variablen

window
document
navigator

ctx

ctx.blockModel
ctx.collection
ctx.collectionField
ctx.dataSource
ctx.dataSourceManager
ctx.element
ctx.exit()
ctx.exitAll()
ctx.filterManager
ctx.form
ctx.getModel()
ctx.getValue()
ctx.getVar()
ctx.i18n
ctx.importAsync()
ctx.initResource()
ctx.libs
ctx.location
ctx.logger
ctx.makeResource()
ctx.message
ctx.modal
ctx.model
ctx.notification
ctx.off()
ctx.on()
ctx.openView()
ctx.render()
ctx.request()
ctx.requireAsync()
ctx.resource
ctx.route
ctx.router
ctx.setValue()
ctx.sql
ctx.t()
ctx.view
Previous Pagectx.dataSource
Next Pagectx.element
KI-Übersetzungshinweis

Dieses Dokument wurde von KI übersetzt. Für genaue Informationen lesen Sie bitte die englische Version.

#ctx.dataSourceManager

Der Datenquellen-Manager (DataSourceManager-Instanz) wird verwendet, um mehrere Datenquellen zu verwalten und darauf zuzugreifen (z. B. die Hauptdatenbank main, die Protokoll-Datenbank logging usw.). Er kommt zum Einsatz, wenn mehrere Datenquellen vorhanden sind oder ein Zugriff auf Metadaten über verschiedene Datenquellen hinweg erforderlich ist.

#Anwendungsfälle

SzenarioBeschreibung
Mehrere DatenquellenAlle Datenquellen aufzählen oder eine bestimmte Datenquelle anhand des Keys abrufen.
Datenquellenübergreifender ZugriffZugriff auf Metadaten im Format „Datenquellen-Key + Sammlungsname“, wenn die Datenquelle des aktuellen Kontexts unbekannt ist.
Felder über den vollständigen Pfad abrufenVerwendung des Formats dataSourceKey.collectionName.fieldPath, um Felddefinitionen über verschiedene Datenquellen hinweg abzurufen.

Hinweis: Wenn Sie nur mit der aktuellen Datenquelle arbeiten, verwenden Sie vorrangig ctx.dataSource. Nutzen Sie ctx.dataSourceManager nur dann, wenn Sie Datenquellen aufzählen oder zwischen ihnen wechseln müssen.

#Typdefinition

dataSourceManager: DataSourceManager;

class DataSourceManager {
  constructor();

  // Datenquellen-Verwaltung
  addDataSource(ds: DataSource | DataSourceOptions): void;
  upsertDataSource(ds: DataSource | DataSourceOptions): void;
  removeDataSource(key: string): void;
  clearDataSources(): void;

  // Datenquellen lesen
  getDataSources(): DataSource[];                     // Alle Datenquellen abrufen
  getDataSource(key: string): DataSource | undefined;  // Datenquelle anhand des Keys abrufen

  // Direkter Zugriff auf Metadaten über Datenquelle + Sammlung
  getCollection(dataSourceKey: string, collectionName: string): Collection | undefined;
  getCollectionField(fieldPathWithDataSource: string): CollectionField | undefined;
}

#Beziehung zu ctx.dataSource

AnforderungEmpfohlene Verwendung
Einzelne Datenquelle, die an den aktuellen Kontext gebunden istctx.dataSource (z. B. die Datenquelle der aktuellen Seite/des aktuellen Blocks)
Einstiegspunkt für alle Datenquellenctx.dataSourceManager
Datenquellen auflisten oder wechselnctx.dataSourceManager.getDataSources() / getDataSource(key)
Sammlung innerhalb der aktuellen Datenquelle abrufenctx.dataSource.getCollection(name)
Sammlung über Datenquellen hinweg abrufenctx.dataSourceManager.getCollection(dataSourceKey, collectionName)
Feld innerhalb der aktuellen Datenquelle abrufenctx.dataSource.getCollectionField('users.profile.avatar')
Feld über Datenquellen hinweg abrufenctx.dataSourceManager.getCollectionField('main.users.profile.avatar')

#Beispiele

#Eine bestimmte Datenquelle abrufen

// Die Datenquelle mit dem Namen 'main' abrufen
const mainDS = ctx.dataSourceManager.getDataSource('main');

// Alle Sammlungen unter dieser Datenquelle abrufen
const collections = mainDS?.getCollections();

#Sammlungs-Metadaten über Datenquellen hinweg abrufen

// Sammlung über dataSourceKey + collectionName abrufen
const users = ctx.dataSourceManager.getCollection('main', 'users');
const orders = ctx.dataSourceManager.getCollection('main', 'orders');

// Primärschlüssel der Sammlung abrufen
const primaryKey = users?.filterTargetKey ?? 'id';

#Felddefinition über den vollständigen Pfad abrufen

// Format: dataSourceKey.collectionName.fieldPath
// Felddefinition über „Datenquellen-Key.Sammlungsname.Feldpfad“ abrufen
const field = ctx.dataSourceManager.getCollectionField('main.users.profile.avatar');

// Unterstützt Pfade für Verknüpfungsfelder
const userNameField = ctx.dataSourceManager.getCollectionField('main.orders.createdBy.name');

#Alle Datenquellen durchlaufen

const dataSources = ctx.dataSourceManager.getDataSources();
for (const ds of dataSources) {
  ctx.logger.info(`Datenquelle: ${ds.key}, Anzeigename: ${ds.displayName}`);
  const collections = ds.getCollections();
  for (const col of collections) {
    ctx.logger.info(`  - Sammlung: ${col.name}`);
  }
}

#Datenquelle basierend auf Variablen dynamisch auswählen

const dsKey = ctx.getVar('dataSourceKey') ?? 'main';
const collectionName = ctx.getVar('collectionName') ?? 'users';
const col = ctx.dataSourceManager.getCollection(dsKey, collectionName);
if (col) {
  const fields = col.getFields();
  // ...
}

#Hinweise

  • Das Pfadformat für getCollectionField ist dataSourceKey.collectionName.fieldPath, wobei das erste Segment der Datenquellen-Key ist, gefolgt vom Sammlungsnamen und dem Feldpfad.
  • getDataSource(key) gibt undefined zurück, falls die Datenquelle nicht existiert; es wird empfohlen, vor der Verwendung eine Prüfung auf Nullwerte durchzuführen.
  • addDataSource löst eine Ausnahme aus, wenn der Key bereits existiert; upsertDataSource überschreibt entweder die bestehende Datenquelle oder fügt eine neue hinzu.

#Verwandte Themen

  • ctx.dataSource: Aktuelle Datenquellen-Instanz
  • ctx.collection: Mit dem aktuellen Kontext verknüpfte Sammlung
  • ctx.collectionField: Sammlungsfeld-Definition für das aktuelle Feld