ctx.collection

L'instance de collection associée au contexte d'exécution RunJS actuel, utilisée pour accéder aux métadonnées de la collection, aux définitions de champs, aux clés primaires et à d'autres configurations. Elle provient généralement de ctx.blockModel.collection ou ctx.collectionField?.collection.

Cas d'utilisation

ScénarioDescription
JSBlockLa collection liée au bloc ; permet d'accéder à name, getFields, filterTargetKey, etc.
JSField / JSItem / JSColumnLa collection à laquelle appartient le champ actuel (ou la collection du bloc parent), utilisée pour récupérer les listes de champs, les clés primaires, etc.
Colonne de tableau / Bloc de détailsUtilisé pour le rendu basé sur la structure de la collection ou pour passer filterByTk lors de l'ouverture de fenêtres contextuelles.

Remarque : ctx.collection est disponible dans les scénarios où un bloc de données, un bloc de formulaire ou un bloc de tableau est lié à une collection. Dans un JSBlock indépendant non lié à une collection, il peut être null. Il est recommandé d'effectuer une vérification de valeur nulle avant utilisation.

Définition du type

collection: Collection | null | undefined;

Propriétés courantes

PropriétéTypeDescription
namestringNom de la collection (ex: users, orders)
titlestringTitre de la collection (inclut l'internationalisation)
filterTargetKeystring | string[]Nom du champ de la clé primaire, utilisé pour filterByTk et getFilterByTK
dataSourceKeystringClé de la source de données (ex: main)
dataSourceDataSourceL'instance de la source de données à laquelle elle appartient
templatestringModèle de collection (ex: general, file, tree)
titleableFieldsCollectionField[]Liste des champs pouvant être affichés comme titres
titleCollectionFieldCollectionFieldL'instance du champ de titre

Méthodes courantes

MéthodeDescription
getFields(): CollectionField[]Récupérer tous les champs (y compris ceux hérités)
getField(name: string): CollectionField | undefinedRécupérer un seul champ par son nom
getFieldByPath(path: string): CollectionField | undefinedRécupérer un champ par son chemin (prend en charge les associations, ex: user.name)
getAssociationFields(types?): CollectionField[]Récupérer les champs d'association ; types peut être ['one'], ['many'], etc.
getFilterByTK(record): anyExtraire la valeur de la clé primaire d'un enregistrement, utilisé pour le filterByTk de l'API

Relation avec ctx.collectionField et ctx.blockModel

BesoinUsage recommandé
Collection associée au contexte actuelctx.collection (équivalent à ctx.blockModel?.collection ou ctx.collectionField?.collection)
Définition de la collection du champ actuelctx.collectionField?.collection (la collection à laquelle appartient le champ)
Collection cible de l'associationctx.collectionField?.targetCollection (la collection cible d'un champ d'association)

Dans des scénarios tels que les sous-tableaux, ctx.collection peut être la collection cible de l'association ; dans les formulaires ou tableaux standards, il s'agit généralement de la collection liée au bloc.

Exemples

Obtenir la clé primaire et ouvrir une fenêtre contextuelle

const primaryKey = ctx.collection?.filterTargetKey ?? 'id';
await ctx.openView(popupUid, {
  mode: 'dialog',
  params: {
    filterByTk: ctx.record?.[primaryKey],
    record: ctx.record,
  },
});

Parcourir les champs pour la validation ou la liaison

const fields = ctx.collection?.getFields() ?? [];
const requiredFields = fields.filter((f) => f.options?.required);
for (const f of requiredFields) {
  const v = ctx.form?.getFieldValue(f.name);
  if (v == null || v === '') {
    ctx.message.warning(`${f.title} est requis`);
    return;
  }
}

Obtenir les champs d'association

const oneToMany = ctx.collection?.getAssociationFields(['many']) ?? [];
// Utilisé pour construire des sous-tableaux, des ressources associées, etc.

Remarques

  • filterTargetKey est le nom du champ de la clé primaire de la collection. Certaines collections peuvent utiliser une clé primaire composée string[]. Si elle n'est pas configurée, 'id' est couramment utilisé par défaut.
  • Dans les scénarios tels que les sous-tableaux ou les champs d'association, ctx.collection peut pointer vers la collection cible de l'association, ce qui diffère de ctx.blockModel.collection.
  • getFields() fusionne les champs des collections héritées ; les champs locaux remplacent les champs hérités portant le même nom.

Voir aussi

  • ctx.collectionField : Définition du champ de collection du champ actuel
  • ctx.blockModel : Le bloc parent hébergeant le JS actuel, contenant collection
  • ctx.model : Le modèle actuel, qui peut contenir collection