[{"data":1,"prerenderedAt":826},["ShallowReactive",2],{"\u002Fnext\u002Fdodock\u002Fpersonnalisation\u002Fconstructeur-de-conditions":3,"section:\u002Fnext\u002Fdodock\u002Fpersonnalisation\u002Fconstructeur-de-conditions":825},{"id":4,"title":5,"body":6,"description":809,"extension":810,"meta":811,"navigation":812,"path":821,"seo":822,"stem":823,"__hash__":824},"docs\u002F2.next\u002F3.dodock\u002F03.personnalisation\u002Fconstructeur-de-conditions.md","Créer des conditions imbriquées avec le Constructeur de conditions",{"type":7,"value":8,"toc":798},"minimark",[9,14,44,47,51,56,67,79,154,157,160,163,168,171,207,218,222,298,311,315,613,617,651,655,677,681,791,794],[10,11,13],"h1",{"id":12},"constructeur-de-conditions","Constructeur de conditions",[15,16,17,18,22,23,27,28,31,32,35,36,39,40,43],"p",{},"Le ",[19,20,21],"strong",{},"constructeur de conditions"," (",[24,25,26],"code",{},"ConditionBuilder",") est un composant Vue du paquet ",[24,29,30],{},"@framework\u002Fui"," de Dodock. Il construit un arbre de conditions joint par ",[19,33,34],{},"et"," et ",[19,37,38],{},"ou",", par exemple ",[24,41,42],{},"A et (B ou C)",". Il produit aussi l'expression Python équivalente.",[15,45,46],{},"Le composant sert aux applications Vue construites sur Dodock. Le bureau classique (formulaires et listes) ne l'utilise pas.",[48,49,50],"mermaid",{},"\nflowchart LR\n  A[Groupe racine : et] --> B[Statut = « Ouvert »]\n  A --> C[Groupe : ou]\n  C --> D[Priorité = « Urgente »]\n  C --> E[Type = « Réclamation »]\n",[52,53,55],"h2",{"id":54},"utiliser-le-constructeur","Utiliser le constructeur",[15,57,58,59,62,63,66],{},"Une ",[19,60,61],{},"condition"," a trois parties : un champ, un opérateur et une valeur. Un ",[19,64,65],{},"groupe"," réunit des conditions et des sous-groupes.",[15,68,69,70,72,73,75,76,78],{},"Chaque groupe a un seul opérateur, ",[19,71,34],{}," ou ",[19,74,38],{},", pour tous ses éléments. Pour mélanger les deux, imbriquez un groupe : ",[24,77,42],{},". La première ligne d'un groupe commence par « Où ». Seule cette ligne permet de changer l'opérateur du groupe.",[80,81,82,95],"table",{},[83,84,85],"thead",{},[86,87,88,92],"tr",{},[89,90,91],"th",{},"Action",[89,93,94],{},"Libellé affiché",[96,97,98,109,119,130,141],"tbody",{},[86,99,100,104],{},[101,102,103],"td",{},"Ajouter une condition au groupe",[101,105,106],{},[19,107,108],{},"Ajouter une condition",[86,110,111,114],{},[101,112,113],{},"Ajouter un sous-groupe",[101,115,116],{},[19,117,118],{},"Ajouter un groupe de conditions",[86,120,121,124],{},[101,122,123],{},"Transformer une condition en groupe",[101,125,126,129],{},[19,127,128],{},"Transformer en groupe",", dans le menu de la ligne",[86,131,132,135],{},[101,133,134],{},"Retirer les conditions d'un groupe",[101,136,137,140],{},[19,138,139],{},"Dégrouper les conditions",", dans le menu du groupe",[86,142,143,146],{},[101,144,145],{},"Supprimer",[101,147,148,72,151],{},[19,149,150],{},"Remove",[19,152,153],{},"Supprimer le groupe",[15,155,156],{},"Ces libellés n'ont pas encore de traduction française.",[15,158,159],{},"Quand vous dégroupez un groupe, ses conditions prennent l'opérateur du groupe parent.",[15,161,162],{},"Si l'application active la réorganisation, faites glisser une ligne par sa poignée. Une ligne peut changer de groupe de cette façon.",[164,165,167],"h3",{"id":166},"exemple","Exemple",[15,169,170],{},"Exemple fictif : un ticket est concerné s'il est ouvert et s'il est urgent ou de type réclamation.",[172,173,174],"ul",{},[175,176,177,180],"li",{},[19,178,179],{},"Groupe racine (et)",[172,181,182,188],{},[175,183,184,187],{},[19,185,186],{},"Statut"," est égal à « Ouvert »",[175,189,190,193],{},[19,191,192],{},"Sous-groupe (ou)",[172,194,195,201],{},[175,196,197,200],{},[19,198,199],{},"Priorité"," est égal à « Urgente »",[175,202,203,206],{},[19,204,205],{},"Type"," est égal à « Réclamation »",[15,208,209,210,213,214,217],{},"Avec ",[24,211,212],{},"field-prefix=\"doc\"",", l'expression produite a cette forme : ",[24,215,216],{},"doc.status == \"Open\" and (doc.priority == \"Urgent\" or doc.ticket_type == \"Complaint\")",".",[52,219,221],{"id":220},"api-du-composant","API du composant",[223,224,229],"pre",{"className":225,"code":226,"language":227,"meta":228,"style":228},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { ConditionBuilder } from \"@framework\u002Fui\u002FConditionBuilder\";\nimport type { ConditionField, ConditionGroup } from \"@framework\u002Fui\u002FConditionBuilder\";\n","ts","",[24,230,231,267],{"__ignoreMap":228},[232,233,236,240,244,248,251,254,257,261,264],"span",{"class":234,"line":235},"line",1,[232,237,239],{"class":238},"s7zQu","import",[232,241,243],{"class":242},"sMK4o"," {",[232,245,247],{"class":246},"sTEyZ"," ConditionBuilder",[232,249,250],{"class":242}," }",[232,252,253],{"class":238}," from",[232,255,256],{"class":242}," \"",[232,258,260],{"class":259},"sfazB","@framework\u002Fui\u002FConditionBuilder",[232,262,263],{"class":242},"\"",[232,265,266],{"class":242},";\n",[232,268,270,272,275,277,280,283,286,288,290,292,294,296],{"class":234,"line":269},2,[232,271,239],{"class":238},[232,273,274],{"class":238}," type",[232,276,243],{"class":242},[232,278,279],{"class":246}," ConditionField",[232,281,282],{"class":242},",",[232,284,285],{"class":246}," ConditionGroup",[232,287,250],{"class":242},[232,289,253],{"class":238},[232,291,256],{"class":242},[232,293,260],{"class":259},[232,295,263],{"class":242},[232,297,266],{"class":242},[15,299,300,301,304,305,307,308,310],{},"Le composant reprend les opérateurs et les contrôles de valeur du composant ",[24,302,303],{},"Filter",". ",[24,306,303],{}," est la version plate, avec ",[19,309,34],{}," seulement.",[164,312,314],{"id":313},"propriétés","Propriétés",[80,316,317,330],{},[83,318,319],{},[86,320,321,324,327],{},[89,322,323],{},"Propriété",[89,325,326],{},"Type · Valeur par défaut",[89,328,329],{},"Rôle",[96,331,332,355,374,395,413,430,448,467,487,505,521,536,554,568,582,597],{},[86,333,334,339,345],{},[101,335,336],{},[24,337,338],{},"modelValue",[101,340,341,344],{},[24,342,343],{},"ConditionGroup | null"," · requis",[101,346,347,348,304,351,354],{},"L'arbre des conditions, via ",[24,349,350],{},"v-model=\"tree\"",[24,352,353],{},"null"," représente un arbre vide.",[86,356,357,362,367],{},[101,358,359],{},[24,360,361],{},"expression",[101,363,364],{},[24,365,366],{},"string",[101,368,369,370,373],{},"L'expression Python produite, via ",[24,371,372],{},"v-model:expression=\"doc.condition\"",". Écriture seule.",[86,375,376,381,385],{},[101,377,378],{},[24,379,380],{},"fieldPrefix",[101,382,383],{},[24,384,366],{},[101,386,387,388,391,392,217],{},"Préfixe de chaque nom de champ dans l'expression. Exemple : ",[24,389,390],{},"doc"," donne ",[24,393,394],{},"doc.status",[86,396,397,402,406],{},[101,398,399],{},[24,400,401],{},"doctype",[101,403,404],{},[24,405,366],{},[101,407,408,409,412],{},"Charge les champs depuis la méta de ce type de document. Lu une seule fois : remontez le composant avec ",[24,410,411],{},":key"," si le type change.",[86,414,415,420,425],{},[101,416,417],{},[24,418,419],{},"fields",[101,421,422],{},[24,423,424],{},"ConditionField[]",[101,426,427,428,217],{},"Liste de champs fournie directement. Prioritaire sur ",[24,429,401],{},[86,431,432,437,442],{},[101,433,434],{},[24,435,436],{},"columns",[101,438,439],{},[24,440,441],{},"ConditionColumns",[101,443,444,445,217],{},"Largeur des colonnes, par exemple ",[24,446,447],{},":columns=\"{ value: '1fr' }\"",[86,449,450,455,464],{},[101,451,452],{},[24,453,454],{},"maxDepth",[101,456,457,460,461],{},[24,458,459],{},"number"," · ",[24,462,463],{},"4",[101,465,466],{},"Profondeur maximale des groupes. Le groupe racine a la profondeur 0.",[86,468,469,474,480],{},[101,470,471],{},[24,472,473],{},"newCondition",[101,475,476,479],{},[24,477,478],{},"() => TLeaf"," · condition vide",[101,481,482,483,486],{},"Crée une nouvelle condition. Obligatoire si le slot ",[24,484,485],{},"#condition"," remplace la ligne par défaut.",[86,488,489,494,502],{},[101,490,491],{},[24,492,493],{},"readonly",[101,495,496,460,499],{},[24,497,498],{},"boolean",[24,500,501],{},"false",[101,503,504],{},"Affiche l'arbre en lecture seule. Les lignes gardent leur place dans l'ordre de tabulation.",[86,506,507,512,518],{},[101,508,509],{},[24,510,511],{},"reorderable",[101,513,514,460,516],{},[24,515,498],{},[24,517,501],{},[101,519,520],{},"Active le glisser-déposer des lignes, dans un groupe et entre groupes.",[86,522,523,528,533],{},[101,524,525],{},[24,526,527],{},"labels",[101,529,530],{},[24,531,532],{},"Partial\u003CConditionBuilderLabels>",[101,534,535],{},"Remplace les libellés par défaut.",[86,537,538,543,551],{},[101,539,540],{},[24,541,542],{},"bordered",[101,544,545,460,548],{},[24,546,547],{},"'all' | 'root' | 'none'",[24,549,550],{},"'all'",[101,552,553],{},"Bordures des groupes.",[86,555,556,561,565],{},[101,557,558],{},[24,559,560],{},"label",[101,562,563],{},[24,564,366],{},[101,566,567],{},"Légende du groupe de champs.",[86,569,570,575,579],{},[101,571,572],{},[24,573,574],{},"description",[101,576,577],{},[24,578,366],{},[101,580,581],{},"Texte d'aide sous la légende.",[86,583,584,589,594],{},[101,585,586],{},[24,587,588],{},"error",[101,590,591],{},[24,592,593],{},"string | Error",[101,595,596],{},"Message d'erreur. Marque le contrôle comme invalide.",[86,598,599,604,610],{},[101,600,601],{},[24,602,603],{},"required",[101,605,606,460,608],{},[24,607,498],{},[24,609,501],{},[101,611,612],{},"Marque le contrôle comme obligatoire.",[164,614,616],{"id":615},"événements","Événements",[80,618,619,629],{},[83,620,621],{},[86,622,623,626],{},[89,624,625],{},"Événement",[89,627,628],{},"Contenu",[96,630,631,641],{},[86,632,633,638],{},[101,634,635],{},[24,636,637],{},"update:modelValue",[101,639,640],{},"Le nouvel arbre de conditions.",[86,642,643,648],{},[101,644,645],{},[24,646,647],{},"update:expression",[101,649,650],{},"L'expression Python produite.",[164,652,654],{"id":653},"fonctions-exportées","Fonctions exportées",[15,656,657,660,661,660,664,660,667,660,670,35,673,676],{},[24,658,659],{},"emptyTree",", ",[24,662,663],{},"isGroup",[24,665,666],{},"setGroupConjunction",[24,668,669],{},"toConditionExpression",[24,671,672],{},"fromFrappeConditions",[24,674,675],{},"toFrappeConditions",". Les deux dernières convertissent l'arbre depuis et vers le format de conditions de Frappe.",[164,678,680],{"id":679},"exemple-dintégration","Exemple d'intégration",[223,682,686],{"className":683,"code":684,"language":685,"meta":228,"style":228},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003CConditionBuilder\n  v-model=\"tree\"\n  v-model:expression=\"doc.condition\"\n  doctype=\"HD Ticket\"\n  :max-depth=\"3\"\n  bordered=\"root\"\n\u002F>\n","vue",[24,687,688,697,714,736,751,770,785],{"__ignoreMap":228},[232,689,690,693],{"class":234,"line":235},[232,691,692],{"class":242},"\u003C",[232,694,696],{"class":695},"swJcz","ConditionBuilder\n",[232,698,699,703,706,708,711],{"class":234,"line":269},[232,700,702],{"class":701},"spNyl","  v-model",[232,704,705],{"class":242},"=",[232,707,263],{"class":242},[232,709,710],{"class":246},"tree",[232,712,713],{"class":242},"\"\n",[232,715,717,719,722,724,726,728,730,732,734],{"class":234,"line":716},3,[232,718,702],{"class":701},[232,720,721],{"class":242},":",[232,723,361],{"class":701},[232,725,705],{"class":242},[232,727,263],{"class":242},[232,729,390],{"class":246},[232,731,217],{"class":242},[232,733,61],{"class":246},[232,735,713],{"class":242},[232,737,739,742,744,746,749],{"class":234,"line":738},4,[232,740,741],{"class":701},"  doctype",[232,743,705],{"class":242},[232,745,263],{"class":242},[232,747,748],{"class":259},"HD Ticket",[232,750,713],{"class":242},[232,752,754,757,760,762,764,768],{"class":234,"line":753},5,[232,755,756],{"class":242},"  :",[232,758,759],{"class":701},"max-depth",[232,761,705],{"class":242},[232,763,263],{"class":242},[232,765,767],{"class":766},"sbssI","3",[232,769,713],{"class":242},[232,771,773,776,778,780,783],{"class":234,"line":772},6,[232,774,775],{"class":701},"  bordered",[232,777,705],{"class":242},[232,779,263],{"class":242},[232,781,782],{"class":259},"root",[232,784,713],{"class":242},[232,786,788],{"class":234,"line":787},7,[232,789,790],{"class":246},"\u002F>\n",[15,792,793],{},"Cet exemple charge les champs du type de document « HD Ticket ». Il limite l'imbrication à trois niveaux et affiche une bordure sur le groupe racine seulement.",[795,796,797],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":228,"searchDepth":235,"depth":269,"links":799},[800,803],{"id":54,"depth":269,"text":55,"children":801},[802],{"id":166,"depth":716,"text":167},{"id":220,"depth":269,"text":221,"children":804},[805,806,807,808],{"id":313,"depth":716,"text":314},{"id":615,"depth":716,"text":616},{"id":653,"depth":716,"text":654},{"id":679,"depth":716,"text":680},"Le composant ConditionBuilder construit des conditions ET \u002F OU imbriquées dans les applications Vue de Dokos et produit une expression Python.","md",{"reviewed":812,"last_verified":813,"sources":814},true,"2026-11-04",[815,816,817,818,819,820],"ui\u002Fsrc\u002Fcomponents\u002FConditionBuilder\u002FConditionBuilder.md","ui\u002Fsrc\u002Fcomponents\u002FConditionBuilder\u002FConditionBuilder.vue","ui\u002Fsrc\u002Fcomponents\u002FConditionBuilder\u002FConditionActions.vue","ui\u002Fsrc\u002Fcomponents\u002FConditionBuilder\u002Finternal\u002Fcontext.ts","ui\u002Fsrc\u002Fcomponents\u002FConditionBuilder\u002Ftypes.ts","ui\u002Fsrc\u002Fcomponents\u002FConditionBuilder\u002Findex.ts","\u002Fnext\u002Fdodock\u002Fpersonnalisation\u002Fconstructeur-de-conditions",{"title":5,"description":809},"2.next\u002F3.dodock\u002F03.personnalisation\u002Fconstructeur-de-conditions","2dfcdhUxNM0V_Zed8Mzl6jz3JmSN5ufOZDjKXL42Yhk",{},1793871796348]