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