Dokos vous permet de personnaliser dynamiquement les onglets affichés dans vos formulaires en fonction de règles métiers spécifiques. Cette fonctionnalité est particulièrement utile pour :
Les overrides d'onglets fonctionnent de manière similaire aux overrides de champs et s'appliquent après la résolution du layout du formulaire.
{
"overrides": {
"tab": {
"Nom de l'onglet": {
"hidden": 1,
"label": "Nouveau libellé"
}
}
}
}
Scénario : Dans le formulaire Client, vous souhaitez masquer l'onglet "Comptabilité" pour les clients de type "Particulier" et renommer l'onglet "Détails" en "Informations principales".
frappe.ui.form.on('Client', {
refresh(frm) {
if (frm.doc.type_client === "Particulier") {
frm.set_df_property('tab', 'hidden', 1, 'Comptabilité');
frm.set_df_property('tab', 'label', "Informations principales", 'Détails');
}
}
});
La nouvelle propriété update:activeTab vous permet de connaître l'onglet effectivement affiché après résolution des règles de visibilité.
Scénario : Vous souhaitez afficher un message d'avertissement uniquement lorsque l'utilisateur consulte l'onglet "Commandes" d'un fournisseur.
frappe.ui.form.on('Fournisseur', {
onload(frm) {
frm.on('update:activeTab', (tabIdentity) => {
if (tabIdentity === "Commandes") {
frappe.show_alert({
message: "Vérifiez les délais de livraison avant toute nouvelle commande",
indicator: 'orange'
});
}
});
}
});
depends_on, ce qui permet à une règle show() de lever un masquage conditionnel.tabStripLabel pour obtenir le libellé affiché d'un onglet et maintenir la cohérence avec l'interface.const displayedLabel = frappe.ui.form.tabStripLabel(frm, "Détails");
Configuration pour le formulaire Fournisseur "Bureau Moderne" :
frappe.ui.form.on('Fournisseur', {
refresh(frm) {
// 1. Masquer Comptabilité si pas de compte bancaire
if (!frm.doc.account) {
frm.set_df_property('tab', 'hidden', 1, 'Comptabilité');
}
// 2. Renommer l'onglet Détails
frm.set_df_property('tab', 'label', "Informations générales", 'Détails');
// 3. Message pour l'onglet Produits
frm.on('update:activeTab', (tabIdentity) => {
if (tabIdentity === "Produits") {
frappe.show_alert({
message: `Ce fournisseur propose ${frm.doc.items_distributed || 0} produits dans notre catalogue`,
indicator: 'blue'
});
}
});
}
});
::: tip Pour les formulaires complexes, envisagez de créer des scripts séparés pour chaque règle métier afin de faciliter la maintenance. :::
::: warning Les overrides d'onglets ne fonctionnent pas dans les vues de type PanelLayout (comme les panneaux latéraux), où tous les champs sont affichés en liste continue. :::