portal_factory et acquisition


L’acquisition dans Zope et dans Plone est souvent utilisée pour attraper des attributs, ou des méthodes (CQFD), qui sont dans le chemin de l’objet.

Par exemple vous avez un chemin site / dossier1 / dossier2 / document.
Vous êtes dans document. Si la méthode getProduit n’existe pas dans cet objet, alors Zope va chercher dans dossier2 puis dans dossier1 si elle existe.
document.getProduit() renverra en fait dossier1.getProduit() de manière complètement transparente pour le programmeur. Mais…

portal_factory est un utilitaire qui permet de ne pas créer un document dans votre site Plone tant que tous les champs obligatoires ne sont pas remplis. Le document est créé en RAM dans portal_factory avant d’être déplacé dans le dossier parent d’origine.
Lors de la création d’un objet le chemin prend cette forme:
site / dossier1 / dossier2 / portal_factory / TypeName / id-temporaire

portal_factory qui est à la racine de votre instance Plone est virtuellement déplacé dans dossier2 pour bénéficier de l’acquisition de celui-ci.

Le problème est qu’il doit en même temps garder son contexte et le contexte du dossier d’origine. L’acquisition fonctionne de manière prévisible mais beaucoup moins transparente.
Du coup il est très difficile d’utiliser l’acquisition pour initialiser dans champs lors de la création des objets.
Pour être sur d’avoir une acquisition qui fonctionne il faut se placer dans le dossier d’origine en utilisant la méthode getFolderWhenPortalFactory.

Le code :

self.getProduit()

devient:

parent = self.getFolderWhenPortalFactory()

parent.getProduit()

N’oubliez pas que l’acquisition est un outil pratique et essentiel pour comprendre comment fonctionne Zope, mais qu’il ne faut pas l’utiliser à toute les sauces: les bogues d’acquisition font partis des bogues les plus pénibles à trouver et les plus simples à corriger à la source.

One Response to portal_factory et acquisition

  1. Ping : plonewars.com - » portal_factory et acquisition

%d blogueurs aiment cette page :