Memperluas Sumber Data Sinkronisasi

Sinkronisasi Data PenggunaCommunity Edition+

Ikhtisar

NocoBase mendukung perluasan tipe sumber data sinkronisasi data pengguna sesuai kebutuhan.

Server

Antarmuka Sumber Data

Plugin sinkronisasi data pengguna bawaan menyediakan registrasi dan manajemen tipe sumber data. Untuk memperluas tipe sumber data, Anda perlu melakukan inheritance dari class abstrak SyncSource yang disediakan oleh plugin dan mengimplementasikan antarmuka standar yang sesuai.

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

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

SyncSource menyediakan properti options yang digunakan untuk mendapatkan konfigurasi kustom sumber data.

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

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

Penjelasan Field UserData

FieldKeterangan
dataTypeTipe data, nilai opsional user dan department
uniqueKeyField identifier unik
recordsRecord data
sourceNameNama sumber data

Jika dataType adalah user, maka records berisi field-field berikut:

FieldKeterangan
idUser ID
nicknameNickname pengguna
avatarAvatar pengguna
emailEmail
phoneNomor telepon
departmentsArray ID departemen yang diikuti

Jika dataType adalah department, maka records berisi field-field berikut:

FieldKeterangan
idID Departemen
nameNama departemen
parentIdID departemen induk

Contoh Implementasi Antarmuka Sumber Data

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

Registrasi Tipe Sumber Data

Sumber data yang diperluas perlu didaftarkan ke modul manajemen data.

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

Klien

Antarmuka pengguna klien didaftarkan melalui antarmuka registerType yang disediakan oleh klien plugin sinkronisasi data pengguna:

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, // Formulir manajemen backend
      },
    });
  }
}

Formulir Manajemen Backend

Bagian atas adalah konfigurasi sumber data umum, dan bagian bawah adalah bagian formulir konfigurasi kustom yang dapat didaftarkan.