AI翻訳通知

このドキュメントはAIによって翻訳されました。正確な情報については英語版をご参照ください。

ctx.resource

現在のコンテキストにおける FlowResource インスタンスであり、データへのアクセスや操作に使用されます。ほとんどのブロック(フォーム、テーブル、詳細など)やポップアップのシナリオでは、実行環境によって ctx.resource があらかじめバインドされています。JSBlock など、デフォルトで resource が存在しないシナリオでは、まず ctx.initResource() を呼び出して初期化してから ctx.resource を使用する必要があります。

適用シーン

RunJS 内で構造化データ(リスト、単一レコード、カスタム API、SQL)へのアクセスが必要なあらゆるシーンで使用できます。フォーム、テーブル、詳細ブロック、およびポップアップは通常、既にあらかじめバインドされています。JSBlock、JSField、JSItem、JSColumn などでデータをロードする必要がある場合は、まず ctx.initResource(type) を呼び出してから ctx.resource にアクセスしてください。

型定義

resource: FlowResource | undefined;
  • あらかじめバインドされているコンテキストでは、ctx.resource は対応する resource インスタンスになります。
  • JSBlock など、デフォルトで resource がない場合は undefined となり、ctx.initResource(type) を実行した後に値が設定されます。

よく使われるメソッド

リソースのタイプ(MultiRecordResource、SingleRecordResource、APIResource、SQLResource)によって公開されているメソッドは若干異なりますが、以下は共通または頻繁に使用されるメソッドです:

メソッド説明
getData()現在のデータを取得(リストまたは単一レコード)
setData(value)ローカルデータを設定
refresh()現在のパラメータでリクエストを発行し、データをリフレッシュ
setResourceName(name)リソース名を設定(例: 'users', 'users.tags'
setFilterByTk(tk)主キーによるフィルタリングを設定(単一レコードの取得など)
runAction(actionName, options)任意のリソースアクション(create, update など)を呼び出し
on(event, callback) / off(event, callback)イベントの購読/解除(refresh, saved など)

MultiRecordResource 特有: getSelectedRows()destroySelectedRows()setPage()next()previous() など。

リストデータ(先に initResource が必要)

ctx.initResource('MultiRecordResource');
ctx.resource.setResourceName('users');
await ctx.resource.refresh();
const rows = ctx.resource.getData();

テーブルシーン(あらかじめバインド済み)

const rows = ctx.resource?.getSelectedRows?.() || [];
for (const row of rows) {
  console.log(row);
}

await ctx.resource.destroySelectedRows();
ctx.message.success(ctx.t('削除しました'));

単一レコード

ctx.initResource('SingleRecordResource');
ctx.resource.setResourceName('users');
ctx.resource.setFilterByTk(1);
await ctx.resource.refresh();
const record = ctx.resource.getData();

カスタムアクションの呼び出し

await ctx.resource.runAction('create', { data: { name: '田中太郎' } });

ctx.initResource / ctx.makeResource との関係

  • ctx.initResource(type): ctx.resource が存在しない場合は作成してバインドし、既に存在する場合はそれを直接返します。これにより ctx.resource が利用可能であることを保証します。
  • ctx.makeResource(type): 新しい resource インスタンスを作成して返しますが、ctx.resource には書き込みません。複数の独立したリソースが必要な場合や、一時的な使用に適しています。
  • ctx.resource: 現在のコンテキストにバインドされている resource にアクセスします。ほとんどのブロックやポップアップでは既にあらかじめバインドされています。バインドされていない場合は undefined となるため、先に ctx.initResource を行う必要があります。

注意事項

  • 使用前に ctx.resource?.refresh() のように空値チェックを行うことを推奨します。特に JSBlock など、あらかじめバインドされていない可能性があるシーンでは重要です。
  • 初期化後は setResourceName(name) を呼び出してデータテーブルを指定し、その後に refresh() でデータをロードする必要があります。
  • 各 Resource 型の完全な API については、以下のリンクを参照してください。

関連情報