[{"data":1,"prerenderedAt":364},["ShallowReactive",2],{"\u002Fv5\u002Fdodock\u002Fdeveloppeurs\u002Fhooks":3,"section:\u002Fv5\u002Fdodock\u002Fdeveloppeurs\u002Fhooks":363},{"id":4,"title":5,"body":6,"description":348,"extension":349,"meta":350,"navigation":352,"path":359,"seo":360,"stem":361,"__hash__":362},"docs\u002F1.v5\u002F3.dodock\u002F10.developpeurs\u002Fhooks.md","Référence des hooks",{"type":7,"value":8,"toc":343},"minimark",[9,13,51,57,72,79,114,127,130,134,141,324,328,339],[10,11,5],"h1",{"id":12},"référence-des-hooks",[14,15,16,17,21,22,25,26,29,30,29,33,29,36,29,39,42,43,50],"p",{},"Un hook est une variable du fichier ",[18,19,20],"code",{},"hooks.py"," d'une application. Dodock lit les hooks de toutes les applications installées avec ",[18,23,24],{},"frappe.get_hooks()",". Cette page décrit les hooks propres à Dodock. Pour les hooks standard de Frappe (",[18,27,28],{},"doc_events",", ",[18,31,32],{},"scheduler_events",[18,34,35],{},"after_build",[18,37,38],{},"has_permission",[18,40,41],{},"permission_query_conditions","…), voir la ",[44,45,49],"a",{"href":46,"rel":47},"https:\u002F\u002Fdocs.frappe.io\u002Fframework\u002Fuser\u002Fen\u002Fpython-api\u002Fhooks",[48],"nofollow","documentation des hooks de Frappe"," (en anglais).",[52,53,55],"h2",{"id":54},"never_skip_patches",[18,56,54],{},[14,58,59,60,63,64,68,69,71],{},"Avec ",[18,61,62],{},"bench migrate --skip-failing",", Dodock enregistre un correctif qui échoue dans le ",[65,66,67],"strong",{},"Journal de Patch"," comme ignoré, puis passe aux correctifs suivants. Un correctif listé dans ",[18,70,54],{}," n'est jamais ignoré : s'il échoue, la migration s'arrête.",[14,73,74,75,78],{},"Chaque entrée est le chemin du correctif tel qu'il figure dans le fichier ",[18,76,77],{},"patches.txt"," de l'application.",[80,81,86],"pre",{"className":82,"code":83,"language":84,"meta":85,"style":85},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# mon_app\u002Fhooks.py\nnever_skip_patches = [\n    \"mon_app.patches.v5_0.restructurer_ecritures_comptables\",\n]\n","python","",[18,87,88,96,102,108],{"__ignoreMap":85},[89,90,93],"span",{"class":91,"line":92},"line",1,[89,94,95],{},"# mon_app\u002Fhooks.py\n",[89,97,99],{"class":91,"line":98},2,[89,100,101],{},"never_skip_patches = [\n",[89,103,105],{"class":91,"line":104},3,[89,106,107],{},"    \"mon_app.patches.v5_0.restructurer_ecritures_comptables\",\n",[89,109,111],{"class":91,"line":110},4,[89,112,113],{},"]\n",[14,115,116,119,120,123,124,126],{},[65,117,118],{},"Exemple"," : le correctif ",[18,121,122],{},"restructurer_ecritures_comptables"," réécrit les écritures d'une société. L'ignorer laisserait la comptabilité dans un état incohérent. Avec ce hook, si le correctif échoue pendant ",[18,125,62],{},", la migration s'arrête. L'administrateur corrige la cause, puis relance la migration.",[14,128,129],{},"Réservez ce hook aux correctifs dont l'échec rend les données incohérentes.",[52,131,133],{"id":132},"hooks-standard-les-plus-utilisés","Hooks standard les plus utilisés",[14,135,136,137,50],{},"Ces hooks viennent de Frappe. Leur nom exact est vérifié dans le code de Dodock ; leur détail est dans la ",[44,138,140],{"href":46,"rel":139},[48],"documentation de Frappe",[142,143,144,157],"table",{},[145,146,147],"thead",{},[148,149,150,154],"tr",{},[151,152,153],"th",{},"Hook",[151,155,156],{},"Usage",[158,159,160,186,207,217,227,237,256,266,279,292,308],"tbody",{},[148,161,162,167],{},[163,164,165],"td",{},[18,166,28],{},[163,168,169,170,29,173,29,176,29,179,29,182,185],{},"Appeler une fonction aux événements d'un type de document (",[18,171,172],{},"validate",[18,174,175],{},"on_update",[18,177,178],{},"on_submit",[18,180,181],{},"on_cancel",[18,183,184],{},"on_trash","…)",[148,187,188,192],{},[163,189,190],{},[18,191,32],{},[163,193,194,195,29,198,29,201,29,204,185],{},"Tâches planifiées (",[18,196,197],{},"daily",[18,199,200],{},"hourly",[18,202,203],{},"weekly",[18,205,206],{},"cron",[148,208,209,214],{},[163,210,211],{},[18,212,213],{},"override_doctype_class",[163,215,216],{},"Remplacer la classe Python d'un type de document",[148,218,219,224],{},[163,220,221],{},[18,222,223],{},"extend_doctype_class",[163,225,226],{},"Ajouter des méthodes à la classe Python d'un type de document, sans la remplacer. Plusieurs applications peuvent étendre la même classe",[148,228,229,234],{},[163,230,231],{},[18,232,233],{},"override_whitelisted_methods",[163,235,236],{},"Remplacer une méthode appelable par l'API",[148,238,239,253],{},[163,240,241,29,244,29,247,29,250],{},[18,242,243],{},"doctype_js",[18,245,246],{},"doctype_list_js",[18,248,249],{},"doctype_tree_js",[18,251,252],{},"doctype_calendar_js",[163,254,255],{},"Ajouter du JavaScript au formulaire, à la liste, à l'arborescence ou au calendrier d'un type de document",[148,257,258,263],{},[163,259,260],{},[18,261,262],{},"boot_session",[163,264,265],{},"Ajouter des données à la session chargée au démarrage du bureau",[148,267,268,276],{},[163,269,270,29,273],{},[18,271,272],{},"on_login",[18,274,275],{},"on_logout",[163,277,278],{},"Réagir à la connexion et à la déconnexion",[148,280,281,289],{},[163,282,283,29,286],{},[18,284,285],{},"before_request",[18,287,288],{},"after_request",[163,290,291],{},"Exécuter du code avant et après chaque requête HTTP",[148,293,294,302],{},[163,295,296,29,299],{},[18,297,298],{},"before_migrate",[18,300,301],{},"after_migrate",[163,303,304,305],{},"Exécuter du code avant et après ",[18,306,307],{},"bench migrate",[148,309,310,321],{},[163,311,312,29,315,29,318],{},[18,313,314],{},"after_install",[18,316,317],{},"after_app_install",[18,319,320],{},"before_app_uninstall",[163,322,323],{},"Réagir à l'installation de l'application, à l'installation d'une autre application, à la désinstallation",[52,325,327],{"id":326},"autres-hooks-documentés","Autres hooks documentés",[329,330,331],"ul",{},[332,333,334,338],"li",{},[44,335,337],{"href":336},"\u002Fv5\u002Fdodock\u002Fdeveloppeurs\u002Fhooks-routage-factures-electroniques","Hooks de routage par unité économique"," : le routage des factures électroniques d'E-transactions.",[340,341,342],"style",{},"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);}",{"title":85,"searchDepth":92,"depth":98,"links":344},[345,346,347],{"id":54,"depth":98,"text":54},{"id":132,"depth":98,"text":133},{"id":326,"depth":98,"text":327},"Hooks propres à Dodock déclarés dans le fichier hooks.py d'une application : never_skip_patches.","md",{"icon":351,"reviewed":352,"last_verified":353,"sources":354},"i-mdi-hook",true,"2026-11-03",[355,356,357,358],"dodock@v5:frappe\u002Fboot.py","dodock@v5:frappe\u002Finstaller.py","dodock@v5:frappe\u002Fmodel\u002Fbase_document.py","dodock@v5:frappe\u002Fmodules\u002Fpatch_handler.py","\u002Fv5\u002Fdodock\u002Fdeveloppeurs\u002Fhooks",{"title":5,"description":348},"1.v5\u002F3.dodock\u002F10.developpeurs\u002Fhooks","DUriL5cUAIF8kRzm6XeaRx3YkWeZFGPgsLTskz1dLbg",{},1793871962765]