[{"data":1,"prerenderedAt":569},["ShallowReactive",2],{"\u002Fnext\u002Fdodock\u002Fpersonnalisation\u002Fadministration_systeme":3,"section:\u002Fnext\u002Fdodock\u002Fpersonnalisation\u002Fadministration_systeme":568},{"id":4,"title":5,"body":6,"description":547,"extension":548,"meta":549,"navigation":420,"path":564,"seo":565,"stem":566,"__hash__":567},"docs\u002F2.next\u002F3.dodock\u002F03.personnalisation\u002Fadministration_systeme.md","Administration système",{"type":7,"value":8,"toc":537},"minimark",[9,13,17,20,25,45,49,67,77,81,157,164,168,204,207,211,293,296,303,307,312,316,322,375,378,401,484,489,493,500,526,533],[10,11,5],"h1",{"id":12},"administration-système",[14,15,16],"p",{},"Vous pouvez désactiver une application installée sur un site sans la désinstaller. Ses tables et ses données restent dans la base. L'application cesse d'agir sur le site jusqu'à sa réactivation.",[14,18,19],{},"Cette possibilité sert à suspendre une application, à isoler un problème ou à tester le site sans elle.",[21,22,24],"h2",{"id":23},"prérequis","Prérequis",[26,27,28,37],"ul",{},[29,30,31,32,36],"li",{},"Avoir le rôle ",[33,34,35],"strong",{},"Responsable système",".",[29,38,39,40,44],{},"L'application ne doit pas être ",[41,42,43],"code",{},"frappe",". Dodock ne peut pas être désactivé.",[21,46,48],{"id":47},"désactiver-une-application-depuis-le-bureau","Désactiver une application depuis le bureau",[50,51,52,55,58,64],"ol",{},[29,53,54],{},"Ouvrez la recherche (Ctrl+K) et saisissez « Applications installées ».",[29,56,57],{},"Dans le tableau, ouvrez la ligne de l'application.",[29,59,60,61,36],{},"Cliquez sur ",[33,62,63],{},"Désactiver l'application",[29,65,66],{},"Confirmez. Dokos affiche : « Désactiver {application} sur ce site ? Ses données seront conservées, mais elle n'aura plus d'effet. »",[14,68,69,70,73,74,36],{},"La case ",[33,71,72],{},"Désactivé"," de la ligne est alors cochée. Pour réactiver l'application, ouvrez la même ligne et cliquez sur ",[33,75,76],{},"Activer l'application",[21,78,80],{"id":79},"désactiver-une-application-en-ligne-de-commande","Désactiver une application en ligne de commande",[82,83,88],"pre",{"className":84,"code":85,"language":86,"meta":87,"style":87},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","bench --site \u003Csite> disable-app \u003Capplication>\nbench --site \u003Csite> enable-app \u003Capplication>\n","bash","",[41,89,90,131],{"__ignoreMap":87},[91,92,95,99,103,107,110,114,117,120,122,125,128],"span",{"class":93,"line":94},"line",1,[91,96,98],{"class":97},"sBMFI","bench",[91,100,102],{"class":101},"sfazB"," --site",[91,104,106],{"class":105},"sMK4o"," \u003C",[91,108,109],{"class":101},"sit",[91,111,113],{"class":112},"sTEyZ","e",[91,115,116],{"class":105},">",[91,118,119],{"class":101}," disable-app",[91,121,106],{"class":105},[91,123,124],{"class":101},"applicatio",[91,126,127],{"class":112},"n",[91,129,130],{"class":105},">\n",[91,132,134,136,138,140,142,144,146,149,151,153,155],{"class":93,"line":133},2,[91,135,98],{"class":97},[91,137,102],{"class":101},[91,139,106],{"class":105},[91,141,109],{"class":101},[91,143,113],{"class":112},[91,145,116],{"class":105},[91,147,148],{"class":101}," enable-app",[91,150,106],{"class":105},[91,152,124],{"class":101},[91,154,127],{"class":112},[91,156,130],{"class":105},[14,158,159,160,163],{},"La réactivation ne resynchronise pas le schéma de l'application. Lancez ",[41,161,162],{},"bench --site \u003Csite> migrate"," si l'application a été mise à jour entre-temps.",[21,165,167],{"id":166},"dépendances","Dépendances",[169,170,171,184],"table",{},[172,173,174],"thead",{},[175,176,177,181],"tr",{},[178,179,180],"th",{},"Action",[178,182,183],{},"Contrôle",[185,186,187,196],"tbody",{},[175,188,189,193],{},[190,191,192],"td",{},"Désactiver",[190,194,195],{},"Refusée si une autre application active dépend de celle-ci : « L'application {0} est une dépendance de {1}. Désactivez d'abord {1}. »",[175,197,198,201],{},[190,199,200],{},"Activer",[190,202,203],{},"Refusée si une dépendance de l'application est désactivée : « L'application {0} dépend de {1}. Activez d'abord {1}. »",[14,205,206],{},"Désactivez d'abord les applications qui dépendent d'une autre. Réactivez dans l'ordre inverse.",[21,208,210],{"id":209},"ce-qui-sarrête","Ce qui s'arrête",[169,212,213,223],{},[172,214,215],{},[175,216,217,220],{},[178,218,219],{},"Élément de l'application",[178,221,222],{},"Comportement quand l'application est désactivée",[185,224,225,233,241,249,257,269,277,285],{},[175,226,227,230],{},[190,228,229],{},"Types de documents",[190,231,232],{},"Plus aucune permission. Ils n'apparaissent plus dans les recherches ni les listes.",[175,234,235,238],{},[190,236,237],{},"Modules, espaces de travail, icônes du bureau, barres latérales",[190,239,240],{},"Masqués dans le bureau.",[175,242,243,246],{},[190,244,245],{},"Formats d'impression, notifications, formulaires web, scripts client et serveur de ses modules",[190,247,248],{},"Masqués dans les listes.",[175,250,251,254],{},[190,252,253],{},"Méthodes appelables (API)",[190,255,256],{},"Refusées avec le message « L'application {0} est désactivée sur ce site ».",[175,258,259,266],{},[190,260,261,262,265],{},"Hooks (",[41,263,264],{},"hooks.py",")",[190,267,268],{},"Plus exécutés.",[175,270,271,274],{},[190,272,273],{},"Tâches planifiées",[190,275,276],{},"Plus exécutées. Leur fiche ne peut plus être modifiée.",[175,278,279,282],{},[190,280,281],{},"Recherche globale",[190,283,284],{},"Les types de documents de l'application sont exclus.",[175,286,287,290],{},[190,288,289],{},"Invitations d'utilisateurs",[190,291,292],{},"L'application n'est plus proposée.",[14,294,295],{},"Les modules créés sur le site (modules personnalisés) restent visibles, même s'ils sont rattachés à l'application.",[14,297,298,299,302],{},"Pendant une installation, une migration, un import ou l'assistant de configuration, Dokos ne masque rien. Après une migration, Dokos exécute à nouveau les hooks ",[41,300,301],{},"before_disable"," des applications désactivées.",[21,304,306],{"id":305},"personnalisations-posées-par-lapplication","Personnalisations posées par l'application",[14,308,309,310,36],{},"Une application peut ajouter des champs personnalisés, des propriétés personnalisées ou des permissions personnalisées sur les types de documents d'une autre application. Dokos ne les masque pas tout seul. L'application doit le faire dans son hook ",[41,311,301],{},[21,313,315],{"id":314},"pour-les-développeurs-hooks-de-désactivation","Pour les développeurs : hooks de désactivation",[14,317,318,319,321],{},"Déclarez les hooks dans le ",[41,320,264],{}," de l'application, sous forme de chemins vers des fonctions. Dokos les appelle sans argument.",[169,323,324,334],{},[172,325,326],{},[175,327,328,331],{},[178,329,330],{},"Hook",[178,332,333],{},"Moment",[185,335,336,345,355,365],{},[175,337,338,342],{},[190,339,340],{},[41,341,301],{},[190,343,344],{},"Avant la désactivation. Aussi après chaque migration, tant que l'application est désactivée.",[175,346,347,352],{},[190,348,349],{},[41,350,351],{},"after_disable",[190,353,354],{},"Après la désactivation.",[175,356,357,362],{},[190,358,359],{},[41,360,361],{},"before_enable",[190,363,364],{},"Avant la réactivation.",[175,366,367,372],{},[190,368,369],{},[41,370,371],{},"after_enable",[190,373,374],{},"Après la réactivation.",[14,376,377],{},"Une exception dans un hook annule toute l'opération.",[82,379,383],{"className":380,"code":381,"language":382,"meta":87,"style":87},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# mon_app\u002Fhooks.py\nbefore_disable = \"mon_app.app_state.hide\"\nbefore_enable = \"mon_app.app_state.show\"\n","python",[41,384,385,390,395],{"__ignoreMap":87},[91,386,387],{"class":93,"line":94},[91,388,389],{},"# mon_app\u002Fhooks.py\n",[91,391,392],{"class":93,"line":133},[91,393,394],{},"before_disable = \"mon_app.app_state.hide\"\n",[91,396,398],{"class":93,"line":397},3,[91,399,400],{},"before_enable = \"mon_app.app_state.show\"\n",[82,402,404],{"className":380,"code":403,"language":382,"meta":87,"style":87},"# mon_app\u002Fapp_state.py\nfrom frappe.custom import hide_customizations, unhide_customizations\n\nCUSTOMIZATIONS = {\n    \"Custom Field\": [{\"dt\": \"Address\", \"fieldname\": \"custom_code_tournee\"}],\n}\n\n\ndef hide():\n    hide_customizations(CUSTOMIZATIONS)\n\n\ndef show():\n    unhide_customizations(CUSTOMIZATIONS)\n",[41,405,406,411,416,422,428,434,440,445,450,456,462,467,472,478],{"__ignoreMap":87},[91,407,408],{"class":93,"line":94},[91,409,410],{},"# mon_app\u002Fapp_state.py\n",[91,412,413],{"class":93,"line":133},[91,414,415],{},"from frappe.custom import hide_customizations, unhide_customizations\n",[91,417,418],{"class":93,"line":397},[91,419,421],{"emptyLinePlaceholder":420},true,"\n",[91,423,425],{"class":93,"line":424},4,[91,426,427],{},"CUSTOMIZATIONS = {\n",[91,429,431],{"class":93,"line":430},5,[91,432,433],{},"    \"Custom Field\": [{\"dt\": \"Address\", \"fieldname\": \"custom_code_tournee\"}],\n",[91,435,437],{"class":93,"line":436},6,[91,438,439],{},"}\n",[91,441,443],{"class":93,"line":442},7,[91,444,421],{"emptyLinePlaceholder":420},[91,446,448],{"class":93,"line":447},8,[91,449,421],{"emptyLinePlaceholder":420},[91,451,453],{"class":93,"line":452},9,[91,454,455],{},"def hide():\n",[91,457,459],{"class":93,"line":458},10,[91,460,461],{},"    hide_customizations(CUSTOMIZATIONS)\n",[91,463,465],{"class":93,"line":464},11,[91,466,421],{"emptyLinePlaceholder":420},[91,468,470],{"class":93,"line":469},12,[91,471,421],{"emptyLinePlaceholder":420},[91,473,475],{"class":93,"line":474},13,[91,476,477],{},"def show():\n",[91,479,481],{"class":93,"line":480},14,[91,482,483],{},"    unhide_customizations(CUSTOMIZATIONS)\n",[14,485,486,488],{},[41,487,301],{}," peut s'exécuter plusieurs fois. Écrivez-le pour qu'il donne le même résultat à chaque appel.",[21,490,492],{"id":491},"exemple","Exemple",[14,494,495,496,499],{},"Exemple fictif : un site utilise l'application ",[41,497,498],{},"webshop",", mais la boutique en ligne ferme pour trois mois.",[50,501,502,511,517,520],{},[29,503,504,505,508,509,36],{},"Vous ouvrez ",[33,506,507],{},"Applications installées",", puis la ligne ",[41,510,498],{},[29,512,513,514,516],{},"Vous cliquez sur ",[33,515,63],{}," et confirmez.",[29,518,519],{},"Les espaces de travail et les types de documents de la boutique disparaissent du bureau. Ses tâches planifiées s'arrêtent.",[29,521,522,523,525],{},"Trois mois plus tard, vous cliquez sur ",[33,524,76],{},". Les données de la boutique sont intactes.",[14,527,528,529,36],{},"Pour suivre et arrêter une tâche planifiée précise, voir ",[530,531,273],"a",{"href":532},"\u002Fnext\u002Fdodock\u002Ffonctionnalites\u002Foutils\u002Ftaches-planifiees",[534,535,536],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .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":87,"searchDepth":94,"depth":133,"links":538},[539,540,541,542,543,544,545,546],{"id":23,"depth":133,"text":24},{"id":47,"depth":133,"text":48},{"id":79,"depth":133,"text":80},{"id":166,"depth":133,"text":167},{"id":209,"depth":133,"text":210},{"id":305,"depth":133,"text":306},{"id":314,"depth":133,"text":315},{"id":491,"depth":133,"text":492},"Désactiver ou réactiver une application installée sur un site, sans perdre ses données, et comprendre ce qui s'arrête.","md",{"icon":550,"reviewed":420,"last_verified":551,"sources":552},"i-mdi-cog-outline","2026-11-03",[553,554,555,556,557,558,559,560,561,562,563],"frappe\u002Finstaller.py","frappe\u002Fapp_state.py","frappe\u002Fcustom\u002F__init__.py","frappe\u002Fcommands\u002Fsite.py","frappe\u002Fcore\u002Fdoctype\u002Finstalled_applications\u002Finstalled_applications.js","frappe\u002Fcore\u002Fdoctype\u002Finstalled_applications\u002Finstalled_applications.py","frappe\u002Fcore\u002Fdoctype\u002Finstalled_application\u002Finstalled_application.json","frappe\u002Fcore\u002Fdoctype\u002Fscheduled_job_type\u002Fscheduled_job_type.py","frappe\u002Fpermissions.py","frappe\u002F__init__.py","frappe\u002Fmigrate.py","\u002Fnext\u002Fdodock\u002Fpersonnalisation\u002Fadministration_systeme",{"title":5,"description":547},"2.next\u002F3.dodock\u002F03.personnalisation\u002Fadministration_systeme","aNxi3fD_Hvqgim-63-yOg8T1zowe5IhtvpRkRsB5CCw",{},1793871794870]