Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Connectors ermöglichen einen getippten Zugriff von einer Fabric-App auf Daten in anderen Fabric-Elementen. Verwenden Sie einen Connector, um ein Seehaus, Lager, eine SQL-Datenbank in Fabric oder einem semantischen Modell abzufragen, ohne einen separaten Datendienst zu konfigurieren.
Unterstützte Anschlüsse
Wählen Sie einen Connector basierend auf dem Fabric-Element und den Operationen, die Ihre App benötigt:
| Gewebe-Element | Konnektortyp | Unterstützte Operationen |
|---|---|---|
| Lakehouse-SQL-Analyseendpunkt | fabric-sqlanalytics |
read |
| warehouse | fabric-warehouse |
read, create, update und delete |
| SQL-Datenbank in Fabric | fabric-sqldatabase |
read, create, update und delete |
| Semantikmodell | fabric-semanticmodel |
executeQuery |
Für Warehouse- und SQL-Datenbank-in-Fabric-Connectoren konfigurieren Sie nur die Operationen, die Ihre App benötigt. Der Lakehouse-Konnektor ist schreibgeschützt.
Voraussetzungen
- Ein Fabric Apps-Projekt, das mit
npm create @microsoft/rayfin@latesterstellt oder mitnpx rayfin initinitialisiert wurde. - Ein Fabric-Arbeitsbereich, der den Gegenstand enthält, mit dem Sie verbunden werden möchten.
- Berechtigung zum Zugriff auf den Arbeitsbereich und das Quellobjekt.
- Die Arbeitsbereichs-ID und die Item-ID, die Sie in der Fabric-URL oder mit dem Connector-Suchbefehl finden können.
Finde einen Fabric-Artikel
Verwenden connector search Sie es, um Elemente eines bestimmten Typs in einem Arbeitsbereich aufzulisten. Das folgende Beispiel listet Lagerhäuser auf:
npx rayfin connector search --workspace-id <workspace-id> --type fabric-warehouse --json
Ersetzen Sie <workspace-id> durch Ihre Fabric-Arbeitsbereichs-ID. Um nach einem anderen unterstützten Element zu suchen, ändere den --type Wert. Du kannst auch einen Namensfilter hinzufügen:
npx rayfin connector search "sales" --workspace-id <workspace-id> --type fabric-warehouse --json
Kopiere die Artikel-ID aus dem Suchergebnis.
Hinzufügen eines Connectors
Starte connector add vom Kern deines Fabric Apps-Projekts aus. Das folgende Beispiel fügt einen schreibgeschützten Warehouse-Connector mit dem Namen inventoryhinzu:
npx rayfin connector add --type fabric-warehouse --workspace-id <workspace-id> --item-id <warehouse-item-id> --name inventory --operations read
Verwenden Sie den entsprechenden Steckertyp und die Operationen für andere Fabric-Artikel:
# Lakehouse SQL analytics endpoint
npx rayfin connector add --type fabric-sqlanalytics --workspace-id <workspace-id> --item-id <lakehouse-item-id> --name analytics --operations read
# SQL database in Fabric
npx rayfin connector add --type fabric-sqldatabase --workspace-id <workspace-id> --item-id <sql-database-item-id> --name operational --operations read
# Semantic model
npx rayfin connector add --type fabric-semanticmodel --workspace-id <workspace-id> --item-id <semantic-model-item-id> --name salesModel --operations executeQuery
Der Befehl:
- Fügt den Konnektor zum Abschnitt auf oberster Ebene
connectorsinrayfin/rayfin.ymlhinzu. - Erstellt die Connector-Dateien unter
rayfin/connectors/<connector-name>/. - Druckt einen versionsangepassten
npm installBefehl für die erforderlichen Connector-Pakete.
Führe genau den Installationsbefehl aus, der von der CLI ausgedruckt wird. Dadurch bleiben die Connector-Pakete mit deiner Rayfin-CLI-Version synchron.
Hinweis
Schema-Entdeckung ist die beste Anstrengung. Der Konnektor kann auch dann hinzugefügt werden, wenn die Erkennung nicht abgeschlossen ist. Wenn die CLI eine Discovery-Warnung anzeigt, lösen Sie diese auf, bevor Sie Entitäten aus der generierten metadata.json Datei definieren.
Die generierte Konfiguration verwendet delegierte Authentifizierung. Eine Lagerhaus- und semantisches Modell-Konfiguration ähnelt folgendem Beispiel:
connectors:
- name: inventory
type: fabric-warehouse
config:
workspaceId: "<workspace-id>"
itemId: "<warehouse-item-id>"
auth:
type: delegated
operations:
- name: read
- name: salesModel
type: fabric-semanticmodel
config:
workspaceId: "<workspace-id>"
itemId: "<semantic-model-item-id>"
auth:
type: delegated
version: "1"
operations:
- name: executeQuery
Behalten Sie den semantischen Modellwert version , den die CLI generiert.
Konfigurieren Sie einen Entitätskonnektor
Lakehouse-, Warehouse- und SQL-Datenbank-Connectoren stellen ausgewählte Quelltabellen als typisierte Entitäten bereit. Verwenden Sie die generierte metadata.json Datei, um nur die Tabellen und Spalten zu definieren, die Ihre App benötigt.
Das folgende Beispiel geht davon aus, dass das ausgewählte Warehouse eine Tabelle dbo.Order mit einem ganzzahligen Primärschlüssel namens OrderID und einer Textspalte namens customerEmail enthält. Ersetzen Sie diese illustrativen Namen und Typen durch Werte aus Ihren generierten Metadaten.
Important
Leiten Sie keinen Primärschlüssel aus einem Spaltennamen ab. Wenn eine Quelltabelle keinen Schlüssel hat, lasse primaryKey. Schlüssellose Entitäten unterstützen keine Operationen, die über den Schlüssel auf eine Zeile zugreifen.
Erstellen Sie die Entität:
// rayfin/connectors/inventory/Order.ts
import { entity, int, text, role } from '@microsoft/rayfin-core';
import { Source } from '@microsoft/rayfin-connectors';
@role('authenticated', ['read'])
@entity()
export class Order extends Source({
schema: 'dbo',
table: 'Order',
primaryKey: ['orderId'],
}) {
@int({ column: 'OrderID' }) orderId!: number;
@text() customerEmail!: string;
}
Registrieren Sie dann die Entität im Connector-Schema:
// rayfin/connectors/inventory/schema.ts
import type { GraphQLBackedConnector } from '@microsoft/rayfin-connector-fabric-graphql';
import type { ConnectorConfig } from '@microsoft/rayfin-connectors';
import { Order } from './Order.js';
export { Order } from './Order.js';
export const connectorConfig = {
connector: 'fabric-warehouse',
operations: ['read'],
entities: { Order },
} as const satisfies ConnectorConfig;
export type InventorySchema = GraphQLBackedConnector<
{ Order: typeof Order },
typeof connectorConfig
>;
Halten Sie den Connector-Namen, die Schema-Eigenschaft und den Client-Konfigurationsnamen konsistent.
Konfigurieren Sie den Connectors-Client
Füge die Connector-Schemata zu ConnectorsRayfinClient hinzu. Semantische Modellverbinder benötigen ebenfalls die Laufzeit fabricSemanticModel() :
// src/lib/connectors.ts
import { ConnectorsRayfinClient } from '@microsoft/rayfin-client';
import { fabricSemanticModel } from '@microsoft/rayfin-connector-fabric-semanticmodel';
import {
connectorConfig as inventoryConfig,
type InventorySchema,
} from '../../rayfin/connectors/inventory/schema.js';
import {
connectorConfig as salesModelConfig,
type SalesModelSchema,
} from '../../rayfin/connectors/salesModel/schema.js';
type AppConnectorsSchema = {
inventory: InventorySchema;
salesModel: SalesModelSchema;
};
export const client = new ConnectorsRayfinClient<
Record<string, never>,
Record<string, never>,
AppConnectorsSchema
>(
{
baseUrl: '<app-api-url>',
publishableKey: '<publishable-key>',
authStorage: true,
connectors: {
inventory: inventoryConfig,
salesModel: salesModelConfig,
},
},
{
salesModel: fabricSemanticModel(),
}
);
Verwenden Sie die API-URL und den publizierbaren Schlüssel aus Ihrem Fabric Apps-Projekt. Beibehalten Sie den bestehenden Anmeldefluss der App. Durch das Erstellen eines Clients wird kein Benutzer angemeldet.
Verbundene Daten abfragen
Nachdem der Benutzer sich eingeloggt hat, greifen Sie über seinen Namen und die Entität auf einen Entitäts-Connector zu:
const orders = await client.connectors.inventory.Order
.select(['orderId', 'customerEmail'])
.first(20)
.execute();
Wähle explizit Spalten aus und begrenzte die Anzahl der zurückgegebenen Zeilen.
Für ein semantisches Modell senden Sie eine DAX-Abfrage mit executeQuery:
const result = await client.connectors.salesModel.executeQuery({
query: 'EVALUATE TOPN(10, Sales)',
});
if (result.status === 'success') {
console.log(result.table.columns, result.table.rows);
} else {
console.error(result.error.category, result.error.message);
}
Ersetzen Sie Sales durch eine Tabelle in Ihrem semantischen Modell. Überprüfen Sie den zurückgegebenen Status, bevor Sie das Ergebnis verwenden.
Sicherer Verbindungszugang
Verwenden Sie diese Steuerungen zusammen:
- Beschränke die Operationen des Connectors in
rayfin.ymlauf die Aktionen, die die App benötigt. - Fügen Sie
@roleDeklarationen zu Konnektorentitäten hinzu, um zu steuern, welche angemeldeten Benutzer die jeweilige Operation ausführen können. - Fügen Sie Zeilenrichtlinien oder Ein-/Ausschlussregeln für Felder hinzu, wenn Benutzer nur auf einen Teil einer Entität zugreifen müssen.
- Halte delegierte Authentifizierung aktiviert, damit Connector-Anfragen den Zugriff des angemeldeten Nutzers nutzen.
Clientseitige TypeScript-Typen verbessern die Entwicklungssicherheit, aber sie sind keine Autorisierungsgrenze. Erzwingen Sie den Zugriff in der Connector-Konfiguration und in den Entitätsrollen.
Bereitstellen des Connectors
Bereite die App- und Connector-Konfiguration aus:
npx rayfin up
Teste die bereitgestellte App mit einem Nutzer, der sowohl für die Fabric-App als auch für das verbundene Gerät die erwarteten Berechtigungen hat.