Forbind Fabric Apps til Fabric-data

Connectors giver indtastet adgang fra en Fabric-app til data i andre Fabric-elementer. Brug en connector til at forespørge et lakehouse, lager, SQL-database i Fabric eller semantisk model uden at konfigurere en separat dataservice.

Understøttede stik

Vælg en connector baseret på det Fabric-element og de operationer, din app har brug for:

Stof vare Connectortype Understøttede handlinger
Sql Analytics-slutpunkt for Lakehouse fabric-sqlanalytics read
lager fabric-warehouse read, create, updateog delete
SQL-database i Fabric fabric-sqldatabase read, create, updateog delete
Semantisk model fabric-semanticmodel executeQuery

For lager- og SQL-databaser i Fabric-connectorer skal du kun konfigurere de operationer, som din app har brug for. Lakehouse-forbindelsen er skrivebeskyttet.

Forudsætninger

  • Et Fabric Apps-projekt oprettet med npm create @microsoft/rayfin@latest eller initialiseret med npx rayfin init.
  • Et Fabric-arbejdsområde, der indeholder det objekt, du ønsker at forbinde til.
  • Tilladelse til at få adgang til arbejdsområdet og kildeelementet.
  • Arbejdsområdets ID og item ID, som du kan finde i Fabric URL eller ved at bruge connector-søgekommandoen.

Find et Fabric-produkt

Brug connector search den til at liste elementer af en bestemt type i et arbejdsområde. Følgende eksempel viser lagre:

npx rayfin connector search --workspace-id <workspace-id> --type fabric-warehouse --json

Erstat <workspace-id> med dit Fabric-arbejdsområde-id. For at søge efter et andet understøttet element, skal du ændre værdien --type . Du kan også tilføje et navnefilter:

npx rayfin connector search "sales" --workspace-id <workspace-id> --type fabric-warehouse --json

Kopier vare-ID'et fra søgeresultatet.

Tilføj en forbindelse

Kør connector add fra roden af dit Fabric Apps-projekt. Følgende eksempel tilføjer en skrivebeskyttet lagerkonnektor med navnet inventory:

npx rayfin connector add --type fabric-warehouse --workspace-id <workspace-id> --item-id <warehouse-item-id> --name inventory --operations read

Brug den tilsvarende stiktype og -operationer til andre Fabric-elementer:

# 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

Kommandoen:

  • Tilføjer forbindelsen til topniveau-sektionen connectors i rayfin/rayfin.yml.
  • Opretter connector-filerne under rayfin/connectors/<connector-name>/.
  • Printer en versionsmatchet npm install kommando til de nødvendige stikpakker.

Kør den præcise installationskommando, som CLI'en printer. Dette holder connector-pakkerne i overensstemmelse med din Rayfin CLI-version.

Bemærk

Skemaopdagelse er bedste indsats. Forbindelsen kan tilføjes, selvom opdagelsen ikke gennemføres. Hvis CLI'en viser en discovery-advarsel, skal du løse den, før du definerer enheder fra den genererede metadata.json fil.

Den genererede konfiguration bruger delegeret autentificering. En lager- og semantisk modelkonfiguration ligner følgende eksempel:

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

Behold den semantiske modelværdi version , som CLI'en genererer.

Konfigurér en entitetsconnector

Lakehouse-, lager- og SQL-databaseforbindelser eksponerer udvalgte kildetabeller som typede enheder. Brug den genererede metadata.json fil til kun at definere de tabeller og kolonner, som din app har brug for.

Det følgende eksempel antager, at det valgte lager indeholder en dbo.Order tabel med en heltals-primærnøgle navngivet OrderID og en tekstkolonne kaldet customerEmail. Erstat disse illustrative navne og typer med værdier fra dine genererede metadata.

Vigtig

Udled ikke en primærnøgle ud fra et kolonnenavn. Hvis en kildetabel ikke har en nøgle, udelades primaryKey. Keyless entities understøtter ikke operationer, der adresserer en række for nøgle.

Opret entiteten:

// 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;
}

Registrer derefter entiteten i connector-skemaet:

// 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
>;

Hold connectorens navn, skema-egenskab og klientkonfigurationsnavn ensartede.

Konfigurer connectors-klienten

Tilføj stikskemaerne til ConnectorsRayfinClient. Semantiske modelstik kræver fabricSemanticModel() også køretiden:

// 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(),
  }
);

Brug API-URL'en og den publicerbare nøgle fra dit Fabric Apps-projekt. Behold appens eksisterende login-flow. Oprettelse af klienten logger ikke ind som bruger.

Forespørg forbundne data

Efter brugeren har logget ind, skal du tilgå en entitetsforbindelse via dens navn og entitet:

const orders = await client.connectors.inventory.Order
  .select(['orderId', 'customerEmail'])
  .first(20)
  .execute();

Vælg kolonner eksplicit og begrænser antallet af returnerede rækker.

For en semantisk model, indsend en DAX-forespørgsel med 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);
}

Erstat Sales med en tabel i din semantiske model. Tjek status på returneret, før du bruger resultatet.

Sikker forbindelsesadgang

Brug disse kontroller sammen:

  • Begræns connectorens operationer til rayfin.yml de handlinger, appen har brug for.
  • Tilføj @role deklarationer til connector-enheder for at kontrollere, hvilke indloggede brugere der kan udføre hver operation.
  • Tilføj rækkepolitikker eller felt-regler for inkluder og eksklusion, når brugere kun har brug for adgang til en del af en enhed.
  • Hav delegeret autentificering aktiveret, så connector-anmodninger bruger den indloggede brugers adgang.

TypeScript-typer på klientsiden forbedrer udviklingssikkerheden, men de er ikke en autorisationsgrænse. Håndhæv adgang i connector-konfigurationen og entity-rollerne.

Installér connectoren

Udrul appen og connector-konfigurationen:

npx rayfin up

Test den deployerede app med en bruger, der har de forventede tilladelser både i Fabric-appen og på det tilknyttede produkt.