すべてのプロダクト
Search
ドキュメントセンター

Quick BI:カスタムコンポーネント API

最終更新日:Apr 02, 2026

このトピックでは、カスタムコンポーネント API について詳しく説明します。

ライフサイクル

カスタムコンポーネントは本質的にライフサイクルオブジェクトです。詳細については、「ライフサイクル」をご参照ください。

LifecycleProps

LifecycleProps は、カスタムコンポーネントの各ライフサイクルに渡される props パラメーターの型を定義します。これには container および customProps のプロパティが含まれます。インターフェイスは以下のとおりです:

interface LifecycleProps {
  container?: HTMLElement;
  customProps?: ComponentProps;
}

例:

class MyComponent {
    mount(props: LifecycleProps) {...}// props は LifecycleProps 型
  update(props: LifecycleProps) {...}
  unmount(props: LifecycleProps) {...}
}

const MyReactComponent: React.FC<LifecycleProps> = (props) => <div>...</div> // props は LifecycleProps 型
  • container

    props.container は、Quick BI ダッシュボード上のカスタムコンポーネントのコンテナとして機能する div DOM 要素です。もし Shadow DOM が有効になっている場合、props.container の親要素は ShadowRoot 要素になります。

  • customProps

    props.customProps には、カスタムコンポーネントに関するランタイム情報が含まれます。インターフェイスは以下のとおりです:

    interface ComponentProps {
      viewConfig: ComponentPropsViewConfig;
      dataConfig: AreaModel[];
      advancedConfig: object;
      globalConfig?: ComponentPropsGlobalConfig;
      data: DataCell[][];
      dispatch?: ComponentPropsDispatch;
      cubeConfig?: ComponentPropsCubeConfig[];
      sql?: string[];
    }
  • customProps.data

    カスタムチャートのデータで、2 次元配列です。

    interface DataCell {
      fieldId: string;
      originValue: string;
      value: string;
      geoInfo?: object;
    }
    • fieldId:データフィールドの ID。これは customProps.dataConfig 内の ID に対応します。

    • originValue:データの元の値。

    • value:データの表示値。

    • geoInfo:ディメンションフィールドの地理的情報。

  • customProps.dataConfig

    カスタムチャートの [データ] パネルから取得したデータフィールドの構成です。

    interface AreaModel {
      areaType: 'row' | 'column' | 'drill' | 'filter';
      fields: FieldModel[];
    }
    • areaType:フィールドの種類。以下の値をとります。

      • row:ディメンションフィールド。

      • column:メジャー型フィールド。

      • drill:ドリルダウン型フィールド。

      • filter:フィルター型フィールド。

    • fields:フィールドの配列。単一のフィールド種別に複数のフィールドを設定できます。インターフェイスは以下のとおりです:

      interface FieldModel {
        /** フィールドの一意な ID */
        fieldId: string;
        /** フィールド名 */
        fieldName: string;
        /** 表示用エイリアス */
        showName: string;
        /** 計算フィールドであるかどうかを指定 */
        isCalc?: boolean;
        skin?: string;
        /** 値の型 */
        valueType?: FieldValueType;
        /** フィールドの種別:ディメンションまたはメジャー */
        fieldType: FieldCommonType;
        /** 集計方法 */
        aggregation?: FieldAggregation | string;
        /** [Quick BI 固有] データレンダリングフォーマット。現在、クロス集計表およびリーダーボードでは imageUrl を画像レンダリングに使用しています。 */
        displayType?: 'imageUrl' | '';
        /** [Quick BI 固有] データセットのフォーマット構成(例:#,##0.00%) */
        rawFormat?: string;
        /** [Quick BI 固有] データセットのディメンション種別(例:TimeRegionInBackend) */
        dimGranularity?: any;
        /** 最終的なフォーマット構成(注:Quick BI では現状 styleConfig に配置されており、このフィールドは使用されません) */
        format?: QbiFormatModel | FbiFormatModel;
        /** ソート順 */
        order?: FieldOrder;
        /** 年次比較や月次比較などの高度な計算 */
        advancedCalculation?: 'year-to-year' | 'month-to-year';
        /** 現在のチャートに対するフィルター条件のセット */
        complexFilter: {
          limitNum: number;
          filter: any;
        };
        // フィールドの真正な一意識別子
        uuid: string;
        /** 特定のチャート種別に固有のフィールド拡張情報 */
        extends?: FieldModelExtends;
      }
  • customProps.viewConfig

    カスタムチャートの [スタイル] パネルから取得した構成データです。

    interface ComponentPropsViewConfig {
      caption?: string;
      chartColorSeries?:  {
        key: string;
        name: string;
        colors: string[];
      };
      chartSkin?: {
        key: 'black' | 'default';
      };
      title?: {
        show: boolean;
        viceName?: string;
        color?: string;
        showLink?: boolean;
        link?: string;
        linkName?: string;
      };
      fieldSettingMap?: { [fieldId: string]: ComponentPropsFieldSettingConfig };
      width?: number;
      height?: number;
      [key: string]: any;
    }
    • caption:コンポーネントのメインタイトル。

    • title:コンポーネントのタイトル。

      • title.show:メインタイトルおよびサブタイトルを表示するかどうかを指定します。

      • title.viceName:サブタイトル。

      • title.color:メインタイトルの色。

      • title.showLink:タイトルをハイパーリンクとして表示するかどうかを指定します。

      • title.link:リダイレクト先 URL。

      • title.linkName:リンクのテキスト。

    • chartColorSeries:ダッシュボードの配色。

      • chartColorSeries.key:配色のキー。

      • chartColorSeries.name:配色の名前。

      • chartColorSeries.colors:配色の色。全 10 色が利用可能です。

    • chartSkin:ダッシュボードのスキン。

      chartSkin.key:ダッシュボードスキンのキー。

      • default はライトバージョンを表します。

      • black はダークテーマを表します。

    • fieldSettingMap フィールドには、フィールドエイリアスやデータ表示フォーマットなどの表示設定が格納されます。インターフェイスは以下のとおりです:

      interface ComponentPropsFieldSettingConfig {
        aliasName: string;
        numberFormat: NumberFormat;
        [key: string]: any;
      }
      • fieldSettingMap.aliasName:フィールドの表示エイリアス。

      • fieldSettingMap.numberFormat:フィールドのデータ表示フォーマット。

    • height:チャートのカスタム高さ。

    • widith:チャートのカスタム幅。

    • 上記のプロパティに加えて、カスタムプロパティには、viewConfig 内で生成されるフォーム値も含まれます。これらの値は、styleSchema 構成によって定義された meta.js に記述されています。

    例:

    // meta.js
    const componentMeta = {
      // ...
      propsSchema: {
        styleSchema: {
          schema: {
            type: 'object',
            properties: {
              display: {
                type: 'object',
                title: t('Display Settings'),
                properties: {
                                // ...
                  startAngle: {
                    title: t('Start Angle'),
                    id: 'startAngle',
                    type: 'number',
                    defaultValue: 0,
                  },
                },
              },
            },
          },
        },
      }
    }
    
    props.customProps.viewConfig.startAngle // 0
  • customProps.globalConfig

    カスタムチャートのグローバル構成データです。この機能は開発中です。

  • customProps.dispatch

    カスタムチャートのプロパティを変更したり、アクションをトリガーするための関数です。

    (param: {
      type: 'select' | 'changeViewConfig' | 'cancelDrill' | 'cancelLinkage'
         payload: any
    }) => void

    param:動作タイプのパラメーター。

    param.type には以下の種類があります:

    • select:ドリルダウン、連携、ナビゲーション、および連携+ドリルダウンの組み合わせなど、カスタムチャートに対する操作を指します。呼び出されると、データ取得リクエストが発行され、チャートが更新されます。

      この場合、payload の型は payload: { dataIndex: number } であり、dataIndexcustomProps.data 配列内のドリルダウン対象ディメンションの配列インデックスです。

    • cancelDrill:カスタムチャートのドリルダウン操作をキャンセルします。この関数を呼び出すと、データ取得リクエストが発行され、チャートが更新されます。

      この場合、payload を渡す必要はありません。

    • cancelLinkage:カスタムチャートの連携をキャンセルします。呼び出されると、データ取得リクエストが発行され、チャートが更新されます。

      この場合、payload を提供する必要はありません。

    • changeViewConfig: カスタムチャートを変更します。この関数を呼び出して、スタイルパネル内のデータを変更し、チャートを更新できます。

      この場合、payloadpayload: { [key: string]: any } という型であり、更新するプロパティは payloadkey-value ペアとして渡されます。

    例:

    props.customProps.dispatch({ type: 'select', payload: { dataIndex: 1 } })
    props.customProps.dispatch({ type: 'cancelDrill' })
    props.customProps.dispatch({ type: 'cancelLinkage' })
    props.customProps.dispatch({ type: 'changeViewConfig', payload: { caption: 'New Title' } })
  • customProps.advancedConfig

    カスタムチャートの [高度な設定] パネルの構成です。この機能は開発中です。

  • customProps.cubeConfig

    カスタムチャートのデータセット構成で、オブジェクトの配列として提供されます。

    interface ComponentPropsCubeConfig {
      /** データセット ID */
      cubeId: string;
      /** データセット名 */
      cubeName: string;
    }
  • customProps.sql

    カスタムチャートのクエリ SQL で、文字列の配列として提供されます。

  • customProps.pageConfig

現在のホストページに関する情報です。

interface CommonPageConfig {
  /** ページのワークスペース ID */
  workspaceId: string;
  /** ページ ID */
  id: string;
  /** 現在のデバイス */
  device: 'pc' | 'mobile';
  /** 現在の訪問者の ID */
  userId: string;
  /** 現在の訪問者のアカウント名 */
  userName: string;
  /** 現在の訪問者のニックネーム */
  nickName?: string;
  /** ページ作成者の ID */
  ownerUserId: string;
  /** ページ作成者のユーザー名 */
  ownerUserName: string;
  /** ページタイトル */
  title: string;
  /** ページルートキー */
  routeKey?: RouteKey;
}

以下の表に、利用可能なルートキーとその対応するページを示します。

名称

ルートキー

ダッシュボード編集ページ(ホストページ)

dashboardEdit

image

ダッシュボードプレビュー画面(ホストページ)

dashboardView

image

データ画面編集ページ(ホストページ)

screenEdit

image

データ画面プレビュー画面(ホストページ)

screenView

image

カスタムコンポーネント管理ページ

customComponent

image

ComponentMeta

カスタムコンポーネントのメタデータは、コンポーネントの [スタイル]、[データ]、および [高度な設定] パネルの構成を記述するオブジェクトです。そのインターフェイスは以下のとおりです:

interface ComponentMeta {
  propsSchema: {
    dataSchema?: DataSchema;
    styleSchema?: StyleSchema;
    advancedSchema?: StyleSchema;
  };
}
  • propsSchema.styleSchema

    カスタムコンポーネントの [スタイル] パネル内のフォームの JSON スキーマを定義します。

    interface StyleSchema {
      schema: StyleSchemaBase;
      localEditors?: {
        [key: string]: React.ComponentType<any>;
      };
      validation?: StyleSchemaValidation;
    }

    例:

    // meta.js で設定
    "myData": {
      "title": "someTitle",
      "type": "number",
    }

    [スタイル] パネルに数値入力ボックスが表示されます。显示设置 入力ボックスに 123 を入力すると、出力は以下のようになります:

    {
      "myData": 123
    }
    • schema:エディターおよびフォームの構成を定義します。

      interface StyleSchemaBase<P = any, T = string> {
        type: T;
        title?: string;
        titleAlign?: 'left' | 'center' | 'right';
        properties?: StyleSchemaProperties;
        className?: string;
        description?: string;
        propertyOrder?: number;
        id?: StyleSchemaDependId;
        hide?: boolean;
        visibleDepends?: StyleSchemaDepend[];
        disabled?: boolean;
        disableDepends?: StyleSchemaDepend[];
        hideIfDisable?: boolean;
        validation?: StyleSchemaValidationRule[];
        showRequiredMark?: boolean;
        hideValidateTips?: boolean;
        defaultValue?: any;
        props?: P;
        redirect?: string;
        relatedToData?: boolean;
        suffix?: string;
        grid?: { row: number; col: number };
      }
    • schema.type:エディターの種別。array および object は論理エディターであり、それ以外は基本エディターです。サポートされる type 値を以下に示します。

      エディター種別

      プレビュー

      エディター属性

      デフォルト

      説明

      object

      object

      mode

      'tabs' | 'collapse'

      なし

      グループ種別。 tabs および collapse モードをサポートします。

      array

      array

      -

      -

      なし

      複数のエディターインスタンスを追加・削除できる配列型です。

      number

      number

      max

      number

      なし

      最大値。

      min

      number

      なし

      最小値。

      changeOnBlur

      boolean

      なし

      true の場合、フォーカスアウト時のみ change イベントが発生します。

      string

      string

      maxLength

      number

      なし

      最大長。

      placeholder

      string

      ""

      プレースホルダーのテキスト。

      info

      string

      なし

      ツールチップのテキスト。

      debounceTime

      number

      0

      change イベントの遅延時間(ミリ秒単位)。

      textArea

      boolean

      false

      true の場合、入力を複数行のテキストエリアとしてレンダリングします。

      select

      select

      suffix

      string

      なし

      接尾辞。例:数量:ドロップダウンリスト items

      multiple

      boolean

      なし

      true の場合、複数の選択肢を選択できます。

      style

      object

      { width: '100%' }

      コントロールの CSS スタイルオブジェクト。

      options

      { label: string; value: string | number;}[]

      []

      ドロップダウンメニューのオプション配列。

      switch

      switch

      size

      'default' | 'small'

      'small'

      スイッチコントロールのサイズ。

      loading

      boolean

      false

      true の場合、スイッチをロード状態に設定します。

      info

      string

      なし

      ツールチップのテキスト。

      label

      string

      なし

      コントロールのラベル。

      mode

      'default' | 'checkbox'

      'default'

      モード:

      • default:スイッチコントロールをレンダリングします。

      • checkbox:チェックボックスコントロールをレンダリングします。

      checkbox

      checkbox

      options

      { label: string; value: string | number; disabled?: boolean;}[]

      []

      オプションの構成。

      maxCheckNum

      number

      なし

      選択可能なオプションの最大数。この上限に達すると、未選択のオプションは無効化されます。

      label

      string

      なし

      コントロールのラベル。

      tooltip

      string

      なし

      ツールチップのテキスト。

      radio

      radio

      options

      { label: string; value: string | number; info?: string; iconClassName?: string; img?: string; disabled?: boolean;}[]

      []

      オプションの構成。

      mode

      'img' | 'icon' | 'default'

      'default'

      モード。 imgicon、および default をサポートします。default モードでは、ツールチップおよびオーバーフロー時の省略記号が含まれます。

      useRadioButton

      boolean

      false

      true の場合、オプションをラジオボタンとしてレンダリングします。

      slider

      slider

      max

      number

      1

      最大値。

      min

      number

      0

      最小値。

      step

      number

      0.01

      スライダーの増分ステップ。

      isPercent

      boolean

      true

      値をパーセンテージとして表示するかどうかを制御します。

      color

      color

      mode

      'default' | 'classic'

      'default'

      カラーピッカーの表示モード。

      • default:標準インタフェース。

      • classic:レガシインタフェース。

      classicSize

      'large' | 'middle' | 'small'

      'large'

      サイズ。 classic モードでのみ有効です。

      placement

      'top' | 'left' | 'right' | 'bottom' | 'topLeft' | 'topRight' | 'bottomLeft' | 'bottomRight' | 'leftTop' | 'leftBottom' | 'rightTop' | 'rightBottom'

      'bottom'

      カラーピッカーのポップアップ方向。

      isFontMode

      boolean

      false

      true の場合、フォントカラーモードを有効にします。

      disableAlpha

      boolean

      false

      true の場合、アルファ(透過度)チャンネルを無効化します。

      allowClear

      boolean

      false

      選択された色をクリア可能かどうかを制御します。

      toRgb

      boolean

      false

      RGB 形式で色を出力します。

      tab

      tab

      • tab1

      • tab2

      options

      { text: string; value: string | number; disable?: boolean;}[]

      []

      タブオプション。

      style

      object

      なし

      タブスタイル。

      • objecttypeobject の場合、一連のフォーム項目(構成および値を含む)をグループ化できます。例:

        // meta.js
        export default = {
          "propsSchema": {
            "styleSchema": {
              "schema": {
                "title": "Basic Settings",
                "type": "object",
                "properties": {
                  "group1": {
                      "type": 'object',
                    "properties": {
                      "address": {
                        "title": "Address",
                        "type": "string",
                        "defaultValue": "aaaa",
                      },
                      "phone": {
                        "title": "Phone",
                        "type": "string" ,
                        "defaultValue": "1234567",
                      }
                      }
                  }
                }
              }
            }
          }
        }
        
        // 最終出力はコンポーネントの props.customProps.viewConfig で利用可能です。
        props.customProps.viewConfig = {
          // ...
          group1: {
            "address": "aaaa",
              "phone": "1234567"
          }
        }
      • arraytypearray の場合、1 つ以上のエディターを配列形式で結合できます。この場合、properties は各アイテムのエディター種別を指定し、editor の種別(numberstringobject など)を指定できます。また、arrayItemDefaultValue を使用して、新しいアイテムのデフォルト値を設定できます。例:

        // meta.js
        export default = {
          "propsSchema": {
            "styleSchema": {
              "schema": {
                "title": "Group1",
                "type": "object",
                "properties": {
                  "simpleArray": {
                    "title": "Array",
                    "type": "array",
                    "properties": "number", // 各アイテムのエディター種別
                    "arrayItemDefaultValue": 5 // 新しいアイテムのデフォルト値
                  },
                  "multiArray": {
                    title: "Array 2",
                    type: "array",
                    properties: {
                        name: {
                          type: "string",
                        props: {
                            // ...
                        }
                      },
                      age: {
                          type: "number",
                          props: {
                            // ...
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
        
        // 最終出力はコンポーネントの props.customProps.viewConfig で利用可能です。
        props.customProps.viewConfig = {
          // ...
          "simpleArray": [1, 2, 3, 4, 5],
          "multiArray": [{
              name: 'aa',
            age: 12
          }, {
              name: 'bb',
            age: 13
          }]
        }
    • schema.title:エディターのタイトル。例:

      // ...
      phone: {
        title: 'Phone',
        type: 'string',
      },

      schema

    • schema.titleAlign:エディターのタイトルの配置。

    • schema.propertiesschema.typeobject または array の場合、エディターの値はプリミティブ型ではなく、構造化された object または array になります。この場合、schema.properties は各値の構造を定義します。インターフェイスは以下のとおりです:

      type StyleSchemaProperties =
        | {
            [key: string]: StyleSchemaBase;
          }
        | string

      schema.properties が文字列の場合、それは schema.type と同じ目的を持ち、schema.props の属性が各サブエディターに渡されます。エディターの値の型は schema.properties の値によって決定されます。例:

      {
          a: {
            type: 'array',
          properties: 'string', // 配列内の各アイテムは文字列
          // props 属性は各入力ボックスに渡されます
          props: {
              placeholder: 'Enter a value'
          }
        }
      }
      // 最終出力:配列内の各アイテムは文字列
      {
        a: ['xx', 'xx']
      }

      schema.properties がオブジェクトの場合、各アイテムの値は properties 構成によって決定される構造のオブジェクトになります。例:

      // meta.js
      {
          a: {
            type: 'object',
          properties: {
              c: {
                type: 'string'
            }
          }
        },
          b: {
            type: 'array',
          properties: {
              c: {
                type: 'string'
            }
          }
        },
      }
      
      // 最終出力
      {
          a: {
            c: 'xxxx'
        },
        b: [{
            c: 'xxx'
        }]
      }
    • schema.className:エディターのタイトルのクラス名。

    • schema.description:エディターの説明で、エディターの下部に表示されます。

      例:

      // ...
      phone: {
        title: 'Phone',
        type: 'string',
        description: 'this is a description',
      },

      编辑器描述

    • schema.propertyOrder:エディターの表示順序で、上から下へ昇順の数値で並べられます。

    • schema.id:エディターの識別子で、通常は条件付き可視性または無効化に使用されます。

    • schema.hide:true の場合、エディターを非表示にします。

    • schema.visibleDepends:条件に基づいてエディターの可視性を制御します。

      エディターに ID を追加することで、特定のエディターの値が X の場合にのみ表示されるという条件を設定できます。

      説明
      • 非表示のエディターは onChange イベントをトリガーしません。

      • エディターを非表示にすると、そのすべての子エディターも非表示になります。

      StyleSchemaDepend インターフェイスは以下のとおりです:

      type StyleSchemaDependId = number | string;
      
      interface ValueDepend {
        /** エディターを識別するための ID */
        id: StyleSchemaDependId;
        /** エディターの値 */
        value: any | any[];
      }
      
      interface PatternDepend {
        id: StyleSchemaDependId;
        /** 正規表現 */
        pattern: string;
      }
      
      type StyleSchemaBaseDepend = ValueDepend | PatternDepend;
      
      interface StyleSchemaAndDepend {
        $and?: StyleSchemaDepend[];
      }
      
      interface StyleSchemaOrDepend {
        $or?: StyleSchemaDepend[];
      }
      
      type StyleSchemaDepend = StyleSchemaBaseDepend | StyleSchemaAndDepend | StyleSchemaOrDepend;

      例:

      // ...
      {
        a: {
          title: 'a',
          type: 'string',
          id: 'a',
        },
        b: {
          title: 'b',
          type: 'string',
          id: 'b',
          visibleDepends: [{ id: 'a', value: 'china' }], // ID が 'a' のエディターの値が 'china' の場合のみ、このコンポーネントがレンダリングされます。
        },
        c: {
          title: 'c',
          type: 'string',
          id: 'c',
          visibleDepends: [{ id: 'a', pattern: '^china' }], // ID が 'a' のエディターの値が 'china' で始まる場合のみ、このコンポーネントがレンダリングされます。
        },
      }

      複数の条件を組み合わせる必要がある場合は、$and または $or を使用して組み合わせることができます。例:

      // ...
      {
        d: {
          title: 'd',
          type: 'string',
          id: 'd',
          visibleDepends: [
            {
              $or: [
                { id: 'a', value: 'china' },
                { id: 'a', value: 'usa' },
              ],
            },
          ], // ID が 'a' のエディターの値が 'china' または 'usa' の場合のみ、このコンポーネントがレンダリングされます。
        },
      }
    • schema.disabled:true の場合、エディターを無効化します。

    • schema.disableDepends:エディターを無効化するための条件を定義します。これは visibleDepends と同様に構成されます。

    • schema.hideIfDisable:true の場合、エディターが無効化されているときに非表示にします。

    • schema.validation: フォームの値に対するエディターの入力規則。

      validation プロパティはルールオブジェクトの配列です。値は、定義されたすべてのルールを満たす必要があります。

      // 入力規則インターフェイス
      interface StyleSchemaValidationRule {
        message: string;
        [rule: string]: any;
        funcName?: string;
      }
      • message:検証失敗時のエラーメッセージ。

      • [rule: string]:検証構成プロパティ。

        一般的な構成プロパティを以下に示します。

        検証プロパティ

        値の型

        説明

        type

        string(デフォルト)

        文字列型。

        number

        数値型。

        boolean

        ブール値。

        integer

        整数型。

        float

        浮動小数点型。

        array

        配列型。

        enum

        列挙型。

        date

        日付型。

        url

        URL 形式の文字列。

        email

        メールアドレス形式の文字列。

        required

        boolean

        true の場合、必須フィールドになります。

        pattern

        string

        正規表現。

        min

        number

        • typestring の場合、最小文字列長を検証します。

        • typenumber の場合、最小値を検証します。

        max

        number

        • typestring の場合、最大文字列長を検証します。

        • typenumber の場合、最大値を検証します。

        len

        number

        • typestring の場合、正確な文字列長を検証します。

        • typearray の場合、正確な配列長を検証します。

      • funcName:カスタム検証関数の名前。

        funcName を渡すと、他の検証構成プロパティは無視されます。詳細については、「validation」をご参照ください。例:

        // ...
        {
          address: {
            title: 'Address',
            type: 'string',
            validation: [
              {
                required: true,
                message: 'This field is required.',
              },
              {
                message: 'Length must be exactly 7.',
                len: 7,
              },
              {
                message: 'Must start with "china".',
                pattern: '^china',
              },
            ],
          },
          population: {
            title: 'Population',
            type: 'number',
            validation: [
              {
                type: 'integer',
                min: 1000,
                message: 'The minimum value is 1000.',
              },
              {
                type: 'integer',
                max: 100000,
                message: 'The maximum value is 100000.',
              },
            ],
          },
          url: {
            title: 'url',
            type: 'string',
            validation: [
              {
                type: 'url',
                message: 'The value is not a valid URL.',
              },
            ],
          },
          email: {
            title: 'email',
            type: 'string',
            validation: [
              {
                type: 'email',
                message: 'The value is not a valid email address.',
              },
            ],
          },
        }
                                                        
    • schema.showRequiredMark:true の場合、必須フィールドのインジケーター (*) を表示します。

    • schema.hideValidateTips:true の場合、検証エラーメッセージを非表示にします。

    • schema.defaultValue:エディターのデフォルト値。

    • schema.propsprops オブジェクトには、エディター コンポーネントに直接渡される属性が含まれます。

      例:

      // ...
      "phone": {
        "title": "Phone",
        "type": "string",
      
        // これらのプロパティは "string" エディターに渡されます。
        "props": {
          placeholder: "Enter phone number"
        }
      }

      ここで、placeholderstring エディターのプロパティです。各エディターのプロパティの詳細については、「schema.type」をご参照ください。

    • schema.redirect:最終出力におけるフォームフィールドのキーを再命名します。

      デフォルトでは、フォーム出力のキーは styleSchema で構成されたキーと一致します。例:

      styleSchema: {
          schema: {
            type: 'object',
            properties: {
                a: {
                  type: 'object',
                properties: {
                    b: {
                    type: 'string'
                  }
                }
              }
            }
        }
      }
      
      // 最終出力構造
      {
          "a.b": "..."
      }

      出力階層が深すぎると思われる場合は、redirect を使用してキーを再命名できます。例:

      styleSchema: {
          schema: {
            type: 'object',
            properties: {
                a: {
                  type: 'object',
                properties: {
                    b: {
                    type: 'string',
                    redirect: 'b'
                  }
                }
              }
            }
        }
      }
      
      // 最終出力構造
      {
          "b": "..."
      }
    • schema.suffix:エディターの接尾辞。例:xx: [select] days

    • schema.grid:エディターのレイアウトプロパティ。縦方向および多段レイアウトをサポートします。

      • col:列幅で、24 列 グリッドシステムに従います。

        例:値 12 は 50 % の幅を意味します。

      • row:行番号。

      例:

      {
        title: '',
        type: 'object',
        properties: { // プロジェクト名と紐付けプロジェクト名のフィールドを横並びに表示します。
          projectName: {
            title: 'Project Name:',
            type: 'string',
            props: {
              placeholder: 'Enter the project name description'
            }
            grid: {
              row: 0, // 行番号
              col: 12 // 列幅(24 列グリッドシステムに従う;12 は 50 % 幅)
            }
          }
        }
      };
                                      
    • validation:カスタム検証関数を validation オブジェクトを通じてエディターに渡すことができます。インターフェイスは以下のとおりです:

      interface StyleSchemaValidation {
        [validateFuncName: string]: (
          rule?: any,
          currentValue?: any,
          extras?: { data?: any; schema?: Schema; keyPaths?: string[] },
        ) => string | Promise<any> | void;
      }
      • rule:現在の検証ルール。

      • currentValue:エディターの現在の値。

      • extras:エディターに関する追加情報。

      例:

      // meta.js
      export default {
          propsSchema: {
            schema: {
              ...
            test: {
                type: 'string',
              validation: [
                {
                    funcName: 'isNum'
                }
              ]
            }
          },
          validation: {
            isNum: function(rule, currentValue) {
                if (typeof currentValue !== 'number') {
                return `${currentValue} is not a number.`
              }
            }
            }
        }
      }
    • localEditors:カスタムエディターを定義します。この機能は現在開発中です。

  • propsSchema.dataSchema

    カスタムコンポーネントがデータを取得するために使用するデータモデルを定義します。このモデルにより、コンポーネントの [データ] パネルをカスタマイズできます。

    interface DataSchema {
      /** フィールド設定 */
      areas: DataSchemaArea;
      /** 結果表示構成 */
      resultDisplay: ResultDisplay;
    }

    Quick BI の [データ] パネルでは、データセットには ディメンション および メジャー の 2 種類のフィールドが含まれます。これらのフィールドを異なるエリアにドラッグすることにより、データ取得を制御できます。[データ] パネルには以下のエリアがあります:

    • ドリルエリア

    • ディメンションエリア

    • エリア計測

    • フィルターエリア

    • propsSchema.dataSchema.areas

      [データ] パネル内のエリアを構成します。インターフェイスは以下のとおりです:

      interface DataSchemaArea {
        /** エリアの ID */
        id?: 'area_column' | 'area_row' | 'drill' | 'filters';
        /** エリアの機能的種別 */
        queryAxis?: 'dimension' | 'measure' | 'drill' | 'filters';
        /** エリアの表示名 */
        name: string;
        /** エリア名のツールチップ */
        nameTip?: string;
        /** エリアの構成ルール */
        rule: DataSchemaAreaRule;
      }
      • propsSchema.dataSchema.areas[].id:エリアの ID。

        有効な値:

        • area_column: メジャーエリアの ID。

        • area_row:ディメンションエリアの ID。

        • drill:ドリルエリアの ID。

        • フィルター:フィルター エリアの ID です。

      • propsSchema.dataSchema.areas[].rule:エリアの構成ルール。インターフェイスは以下のとおりです:

        interface DataSchemaAreaRule {
          /** プレースホルダーのテキスト */
          placeholder?: string;
          /** エリアで許可されるフィールド種別 */
          fieldTypes: ('dimension' | 'measure')[];
          /** エリアが必須かどうかを指定 */
          required?: boolean;
          /** エリアで許可されるフィールドの最大数 */
          maxColNum?: number;
        }
        • rule.fieldTypes:エリアで許可されるフィールド種別を指定します。

          有効な値:

          • dimension:ディメンションフィールドのみを受け入れます。

          • メジャー: メジャーフィールドのみを受け入れます。

          このプロパティは配列です。すべてのサポートされる種別を受け入れるには、以下の構成を使用します:

          fieldTypes: ['dimension', 'measure']
        • rule.required:エリアを空にできるかどうかを指定します。

        • rule.maxColNum:エリアで許可されるフィールドの最大数。

      • propsSchema.dataSchema.areas[].queryAxis:エリアの機能的種別。

        有効な値:

        • column:メジャー種別に対応します。

        • row:ディメンション種別。

        • drill:ドリルダウン種別。

          この場合、rule.fieldTypesdimension でなければなりません。

        • filters:フィルター種別。

      • propsSchema.dataSchema.areas[].name:エリアの表示名。

        例:

        const componentMeta = {
          // ...
          dataSchema: {
            areas: [
              {
                id: 'drill',
                name: 'drill/dimension',
                queryAxis: 'drill',
                rule: {
                  fieldTypes: ['dimension'],
                  required: false,
                  maxColNum: 6,
                },
              },
              {
                id: 'area_row',
                name: 'dimension',
                queryAxis: 'row',
                rule: {
                  fieldTypes: ['dimension'], // ディメンションまたはメジャー
                  maxColNum: 1, // 許可されるフィールドの最大数
                  required: true, // このフィールドがチャート更新に必須かどうかを指定
                },
              },
              {
                id: 'area_column',
                name: 'measure',
                queryAxis: 'column',
                rule: {
                  fieldTypes: ['measure', 'dimension'],
                  maxColNum: 3,
                  required: true,
                },
              },
              {
                id: 'filters',
                name: 'filter', // 名称
                queryAxis: 'filters',
                rule: {
                  fieldTypes: ['measure', 'dimension'],
                  required: false,
                },
              },
            ],
            resultDisplay: {
              upLimit: 1000,
            },
          }
        }
    • propsSchema.dataSchema.resultDisplay

      [データ] パネルの結果表示セクションの構成です。インターフェイスは以下のとおりです:

      interface ResultDisplay {
        /** 上限 */
        upLimit?: number;
          /** 下限 */
        downLimit?: number;
        /** 結果表示セクションを非表示にするかどうかを指定 */
        hide?: boolean;
      }

      结果展示

      • propsSchema.dataSchema.resultDisplay.upLimit:取得するデータレコードの最大数。

      • propsSchema.dataSchema.resultDisplay.downLimit:取得するデータレコードの最小数。デフォルト値:1

      • propsSchema.dataSchema.resultDisplay.hide:結果表示セクションを非表示にするかどうかを指定します。デフォルト値:false

  • 非推奨の API

    説明

    Quick BI v4.1.1.1 で [データ] パネルが更新され、以下のレガシ API は 非推奨 となりました。v4.1.1.1 より前の Quick BI バージョンを使用している場合にのみ、これらの API を参照してください。

    • (v4.1.1.1 で非推奨) schema:[データ] パネルの構成。インターフェイスは以下のとおりです:

      interface DataSchema {
        schema: DataSchemaBase;
      }
      
      interface DataSchemaBase {
        area: DataSchemaArea[];
        limitNum: number;
      }
    • (v4.1.1.1 で非推奨) schema.area:[データ] パネルのエリア構成。インターフェイスは以下のとおりです:

      interface DataSchemaArea {
        id?: 'area_column' | 'area_row' | 'drill' | 'filters';
        queryAxis?: 'dimension' | 'measure' | 'all';
        areaName: string;
        columnList?: any[];
        rule: DataSchemaRule;
      }
      • (v4.1.1.1 で非推奨) schema.area[].id:エリアの ID。

        取り得る値:

        • area_column: メジャー エリアの ID。

        • area_row:ディメンションエリアの ID。

        • drill:ドリルエリアの ID。

        • filters: フィルター エリアの ID。

      • (v4.1.1.1 で非推奨) schema.area[].rule:エリアの構成ルール。インターフェイスは以下のとおりです:

        interface DataSchemaRule {
          type: 'dimension' | 'measure' | 'all';
          required?: boolean;
          maxColNum?: number;
          show?: boolean;
        }
        • rule.type:エリアが受け入れるフィールドの種別。

          取り得る値:

          • dimension:ディメンションフィールドのみを受け入れます。

          • メジャー: メジャーフィールドのみを受け付けます。

          • all:ディメンションおよびメジャーの両方のフィールドを受け入れます。

        • rule.required:エリアを空にできるかどうか。

        • rule.maxColNum:エリアが受け入れるフィールドの最大数。

      • (v4.1.1.1 で非推奨) schema.area[].queryAxis:エリアのクエリ役割。

        取り得る値:

        • column:メジャー用のエリア。

        • row:ディメンション用のエリア。

        • drill:ドリルダウンフィールド用のエリア。

          この種別では rule.typedimension とする必要があります。

        • filters:フィルター用のエリア。

      • (v4.1.1.1 で非推奨) schema.area[].areaName:エリアの名称。

        例:

        {
          "area": [
            {
              "id": "drill",
              "areaName": "Drill/Dimension",
              "queryAxis": "drill",
              "rule": {
                "show": false,
                "type": "dimension",
                "required": false,
                "maxColNum": 6
              },
              "columnList": []
            },
            {
              "id": "area_onerow",
              "areaName": "Dimension",
              "queryAxis": "row",
              "rule": {
                "type": "dimension",
                "maxColNum": 1,
                "required": true
              },
              "columnList": []
            },
            {
              "id": "area_column",
              "areaName": "Measure",
              "queryAxis": "column",
              "rule": {
                "type": "measure",
                "maxColNum": 3,
                "required": true
              },
              "columnList": []
            },
            {
              "id": "filters",
              "areaName": "Filters",
              "queryAxis": "filters",
              "rule": {
                "type": "all",
                "required": false
              },
              "columnList": []
            }
          ],
          "limitNum": 1000
        }
    • (v4.1.1.1 で非推奨) schema.limitNum:取得するレコードの最大数。数量限制

  • propsSchema.advancedSchema

    カスタムコンポーネントの [高度な設定] パネル内のフォームの構成を指定します。(この機能は開発中です。)