Уведомление о переводе ИИ

Эта документация была автоматически переведена ИИ.

Расширение синхронизируемых источников данных

Обзор

NocoBase позволяет расширять типы источников данных для синхронизации пользовательских данных по мере необходимости.

Серверная часть

Интерфейс источника данных

Встроенный плагин синхронизации пользовательских данных обеспечивает регистрацию и управление типами источников данных. Чтобы расширить тип источника данных, вам необходимо унаследовать абстрактный класс SyncSource, предоставляемый плагином, и реализовать соответствующие стандартные интерфейсы.

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

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

Класс SyncSource содержит свойство options, которое используется для получения пользовательских конфигураций источника данных.

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

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

Описание полей UserData

ПолеОписание
dataTypeТип данных, возможные значения: user и department
uniqueKeyПоле уникального идентификатора
recordsЗаписи данных
sourceNameНазвание источника данных

Если dataType имеет значение user, поле records содержит следующие поля:

ПолеОписание
idID пользователя
nicknameНикнейм пользователя
avatarАватар пользователя
emailЭлектронная почта
phoneНомер телефона
departmentsМассив ID отделов

Если dataType имеет значение department, поле records содержит следующие поля:

ПолеОписание
idID отдела
nameНазвание отдела
parentIdID родительского отдела

Пример реализации интерфейса источника данных

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,
      },
    ];
  }
}

Регистрация типа источника данных

Расширенный источник данных необходимо зарегистрировать в модуле управления данными.

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.registerType('custom-source-type', {
        syncSource: CustomSyncSource,
        title: 'Custom Source',
      });
    }
  }
}

Клиентская часть

Клиентский пользовательский интерфейс регистрирует типы источников данных с помощью метода registerType, предоставляемого клиентским интерфейсом плагина синхронизации пользовательских данных:

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, // Форма управления бэкендом
      },
    });
  }
}

Форма управления бэкендом

Верхняя часть содержит общие настройки источника данных, а нижняя часть позволяет регистрировать пользовательские формы конфигурации.