La V5 de Dokos s'appuie sur la V16 de Frappe et ERPNext. Cette montée de version introduit des changements structurels significatifs. Certains sont transparents, d'autres nécessitent une action de votre part avant ou après la migration.
Avant toute chose, vérifiez vos dépendances. Les versions minimales ont été relevées :
Plusieurs modules ont quitté le cœur de Frappe pour devenir des applications indépendantes. Si vous les utilisiez — directement ou via des dépendances — ils devront être réinstallés séparément :
modified → creationC'est probablement le changement le plus silencieux et le plus susceptible de créer des comportements inattendus dans vos applications.
À partir de la V16, toutes les vues liste et la plupart des APIs Frappe trient par défaut selon la date de création (creation) et non plus par date de modification (modified).
Ce que vous devez faire :
modified affecte votre logique métiermodified vers creationmodified, rendez-le explicite : order_by='modified desc'Les APIs concernées : frappe.get_all(), frappe.get_list(), frappe.db.get_value(), frappe.db.get_values(), frappe.qb.get_query().
Si vous souhaitez conserver l'index sur modified après la migration, vous pouvez le ré-ajouter dans le contrôleur de votre DocType :
def on_doctype_update():
frappe.db.add_index("Doctype Name", ["modified"])
get_list et get_allfrappe.get_all() et frappe.get_list() utilisent désormais le nouveau Query Builder en backend. Des ajustements de compatibilité peuvent être nécessaires selon l'usage que vous en faites, notamment pour les appels de fonctions SQL comme sum. Consultez le guide de migration officiel vers le Query Builder pour les détails et exemples.
Les méthodes suivantes n'acceptent plus que des requêtes POST :
/api/method/logout/api/method/web_logout/api/method/upload_file/api/method/frappe.www.login.send_login_linkSi votre code client appelle ces méthodes en GET, mettez-le à jour.
Le champ Code du DocType Pays est maintenant obligatoire et doit respecter la norme ISO 3166 ALPHA-2. Si votre base contient des pays personnalisés ou des codes non conformes, ils devront être corrigés avant la migration.
frappe.flags.in_test est dépréciéRemplacez frappe.flags.in_test par frappe.in_test. L'ancien attribut sera supprimé dans une prochaine version. Si vous modifiez cette valeur dans vos tests, utilisez frappe.tests.utils.toggle_test_mode qui met à jour les deux attributs simultanément.
db.get_value convertit maintenant les résultats des Single DocTypesJusqu'ici, db.get_value retournait toujours des chaînes de caractères pour les Single DocTypes. Ce comportement a été corrigé — les valeurs sont maintenant retournées dans leur type réel. Si votre code comparait ces valeurs à des chaînes, adaptez-le :
# Avant
if frappe.db.get_value("Settings", "Settings", "enabled") == "1":
# Après
if frappe.db.get_value("Settings", "Settings", "enabled") == 1:
Les fichiers JS des Rapports, Graphiques de tableau de bord et Pages sont maintenant évalués comme des IIFEs. Si votre code reposait intentionnellement sur la pollution du scope global, il devra être mis à jour. Il reste possible de modifier le scope global en mutant explicitement l'objet window.
meta.get_valid_columns() exclut désormais les champs virtuelsSi votre code supposait que les champs virtuels figuraient dans get_valid_columns(), vous devrez l'adapter.
La vue carte affiche maintenant les 20 premiers éléments avec pagination, comme la vue liste. L'ancien comportement (chargement de tous les enregistrements en une seule fois) a été supprimé. Sur les grands jeux de données, c'est un gain de performance significatif — mais si votre code s'appuyait sur ce chargement complet, anticipez l'adaptation.
Si vous créez des factures de vente via l'API et récupériez automatiquement les feuilles de temps non facturées liées à un projet, ce comportement n'est plus automatique. Un appel supplémentaire est maintenant nécessaire :
PUT /api/v2/document/Sales%20Invoice/SINV-0001/method/add_timesheet_data
Deux méthodes ont été supprimées. Si vous les appelez dans des scripts ou intégrations, adaptez votre code pour utiliser directement frappe.new_doc :
erpnext.accounts.doctype.bank_account.bank_account.make_bank_accounterpnext.accounts.doctype.pricing_rule.pricing_rule.make_pricing_ruleOuvrez une issue sur notre GitLab ou venez en parler sur le forum. Une migration qui se passe bien, c'est aussi notre responsabilité — on préfère qu'on le sache tôt plutôt que vous voir avancer seuls face à un comportement inattendu.