Avis de traduction IA

Cette documentation a été traduite automatiquement par IA.

Extension des sources de données synchronisées

Vue d'ensemble

NocoBase vous permet d'étendre les types de sources de données pour la synchronisation des données utilisateur, selon vos besoins.

Côté serveur

Interface de la source de données

Le plugin de synchronisation des données utilisateur intégré gère l'enregistrement et la gestion des types de sources de données. Pour étendre un type de source de données, vous devez hériter de la classe abstraite SyncSource fournie par le plugin et implémenter les interfaces standard correspondantes.

import { SyncSource, UserData } from '@nocobase/plugin-user-data-sync';

class CustomSyncSource extends SyncSource {
  async pull(): Promise<UserData[]> {
    return [];
  }
}

La classe SyncSource inclut une propriété options pour récupérer les configurations personnalisées de la source de données.

import { SyncSource, UserData } from '@nocobase/plugin-user-data-sync';

class CustomSyncSource extends SyncSource {
  async pull(): Promise<UserData[]> {
    //...
    const { appid, secret } = this.options;
    //...
    return [];
  }
}

Description des champs UserData

ChampDescription
dataTypeType de données, les options sont user et department
uniqueKeyChamp d'identifiant unique
recordsEnregistrements de données
sourceNameNom de la source de données

Si dataType est user, le champ records contient les champs suivants :

ChampDescription
idID utilisateur
nicknameSurnom de l'utilisateur
avatarAvatar de l'utilisateur
emailE-mail
phoneNuméro de téléphone
departmentsTableau des ID de département

Si dataType est department, le champ records contient les champs suivants :

ChampDescription
idID du département
nameNom du département
parentIdID du département parent

Exemple d'implémentation de l'interface de source de données

import { SyncSource, UserData } from '@nocobase/plugin-user-data-sync';

class CustomSyncSource extends SyncSource {
  async pull(): Promise<UserData[]> {
    // ...
    const ThirdClientApi = new ThirdClientApi(
      this.options.appid,
      this.options.secret,
    );
    const departments = await this.clientapi.getDepartments();
    const users = await this.clientapi.getUsers();
    // ...
    return [
      {
        dataType: 'department',
        uniqueKey: 'id',
        records: departments,
        sourceName: this.instance.name,
      },
      {
        dataType: 'user',
        uniqueKey: 'id',
        records: users,
        sourceName: this.instance.name,
      },
    ];
  }
}

Enregistrement d'un type de source de données

La source de données étendue doit être enregistrée auprès du module de gestion des données.

import UserDataSyncPlugin from '@nocobase/plugin-user-data-sync';

class CustomSourcePlugin extends Plugin {
  async load() {
    const syncPlugin = this.app.pm.get(
      UserDataSyncPlugin,
    ) as UserDataSyncPlugin;
    if (syncPlugin) {
      syncPlugin.sourceManager.reigsterType('custom-source-type', {
        syncSource: CustomSyncSource,
        title: 'Custom Source',
      });
    }
  }
}

Côté client

L'interface utilisateur côté client enregistre les types de sources de données en utilisant la méthode registerType fournie par l'interface client du plugin de synchronisation des données utilisateur :

import SyncPlugin from '@nocobase/plugin-user-data-sync/client';

class CustomSourcePlugin extends Plugin {
  async load() {
    const sync = this.app.pm.get(SyncPlugin);
    sync.registerType(authType, {
      components: {
        AdminSettingsForm, // Formulaire d'administration
      },
    });
  }
}

Formulaire d'administration

La section supérieure présente la configuration générale de la source de données, tandis que la section inférieure permet l'enregistrement de formulaires de configuration personnalisés.