Développer avec RBS Change : Listes dynamiques

Sujet fermé !

  • 42920.1

    22/09/2011 10:26


    fpaterno
    Rang : Adepte
    Bonjour,

    j'essaie de créer une liste dynamique sur une propriété d'un de mes documents.
    Je me suis basé sur les listes statiques définies dans ce document : http://wiki.rbschang.....ule:add_new_document

    J'ai bien défini les attributs from-list et type sur ma propriété :
    <add name="structure" type="modules_list/item" min-occurs="1" max-occurs="1" from-list="modules_pompiers/structures" />
    


    J'ai créé un fichier list-structures.xml dans le dossier setup contenant entre autres :
    	<systemfolder module="list" relatedmodule="pompiers">
    		<dynamiclist listid="modules_pompiers/structures" label="m.pompiers.list.structures-label"
    			description="m.pompiers.list.structures-description" />
    	</systemfolder>


    Le dossier lib quant à lui contient le fichier créé ListStructuresService.php avec la méthode getItems :
    	public final function getItems()
    	{
    	    $items = array();
    
    	    $languages = RequestContext::getInstance()->getUISupportedLanguages();
    
    	    foreach ($languages as $language)
    	    {
    	    	$items[] = new list_Item(
                        f_Locale::translateUI('&modules.uixul.bo.languages.' . ucfirst($language) . ';'),
                        $language
                    );
    	    }
    
    	    return $items;
    	}
    


    Dans cet exemple, j'ai volontairement repris le code présent dans le module contactcard (ListLanguagesService).

    Malgré ces différents éléments, ma liste ne fonctionne pas en back office. J'ai bien une liste déroulante mais celle-ci reste vide. Y a t-il une étape que j'aurais omis ?
  • 42920.2

    22/09/2011 11:33


    Gaël Port
    Titre : Développeur RBS Change
    Rang : Expert
    Bonjour,

    À première vue, je vois deux points potentiels dans ce que vous décrivez :

    1) Si vous avez ajouté le service ListStructuresService à la main, avez-vous bien fait un update-autoload ensuite ? Sans quoi la classe ne sera pas trouvée et il n'y aura du coup aucun élément.

    Notons qu'il existe une commande list.add-dynamic-list sur le module liste pour initialiser une liste dynamique qui génère la classe et l'ajoute à l'autoload.

    2) Vous avez déclaré votre propriété comme étant de type modules_list/item ceci ne fonctionne a priori qu'avec des listes éditables dont les éléments sont des documents de ce type. Ce n'est pas le cas des listes dynamique.

    Dans le cas du module contactcard que vous prenez en comme exemple, la liste retourne des éléments dont la valeur (deuxième argument du new list_Item()) est un code langue, c'est à dire une chaine, le champ devrait donc être de type String. À vous de voir le type à donner selon ce que votre liste définit comme valeur : entiers, chaines, etc.

    Édité par Gaël Port 22/09/2011 11:34

  • 42920.3 en réponse à 42920.2 écrit par Gaël Port

    22/09/2011 12:14


    fpaterno
    Rang : Adepte
    Bonjour,

    Effectivement, j'ai oublié de préciser que j'avais réalisé un list.add-dynamic-list :
    change.php list.add-dynamic-list <moduleName> structures

    Celui m'a en effet généré 3 fichiers dont le service et le xml définissant la dynamiclist.

    En revanche, merci pour le second point, j'ai effectivement besoin d'un String. J'ai donc effectué le changement sur ma propriété qui devient :
    <add name="structure" type="String" min-occurs="1" max-occurs="1" from-list="modules_pompiers/structures" />


    La base de données a été modifiée en conséquence mais je n'ai toujours pas de choix disponible pour cette propriété dans le BO.
  • 42920.4 en réponse à 42920.3 écrit par fpaterno

    22/09/2011 13:26


    Franck Stauffer
    Titre : Responsable produit
    Rang : Expert
    Trois choses à vérifier :
    - que donne http://<votredomaoin>/xul_controller.php?module=list&action=GetListItems&cmpref=<votrelistid> dans le navigateur (attention il faut être connecté en backoffice et installer l'extension JSONView ou similaire dans Firefox) ?
    - y'a t'il une erreur javascript dans la console de Firefox ?
    - y'a t'il une trace particulière dans les logs lors de l’exécution de http://<votredomaoin>/xul_controller.php?module=list&action=GetListItems&cmpref=<votrelistid> ?

    Édité par Franck Stauffer 22/09/2011 13:55

  • 42920.5 en réponse à 42920.4 écrit par Franck Stauffer

    22/09/2011 14:05


    fpaterno
    Rang : Adepte
    Pour répondre à vos questions, voici le résultat des opérations demandées :

    - http://<votredomaoin>/xul_controller.php?module=list&action=GetListItems&cmpref=modules_pompiers/structures renvoie :
    {
    
        "status": "OK",
        "module": "list",
        "action": "GetListItems",
        "contents": [
            {
                "id": "fr",
                "label": "Français"
            },
            {
                "id": "en",
                "label": "Anglais"
            }
        ]
    
    }

    - Aucune erreur Javascript
    - Aucune trace dans les logs
  • 42920.6 en réponse à 42920.5 écrit par fpaterno

    22/09/2011 14:34


    Franck Stauffer
    Titre : Responsable produit
    Rang : Expert
    Au moment du chargement du formulaire, il faudrait regarder à l'aide de "Tamper Data", si la requête http://<votredomaoin>/xul_controller.php?module=list&action=GetListItems&cmpref=modules_pompiers/structures est bien envoyée au serveur (il faudrait recharger le backoffice pour faire le test). Exemple sur le chargement d'un formulaire ou je filtre sur GetList dans tamper data


  • 42920.7

    22/09/2011 14:36


    Gaël Port
    Titre : Développeur RBS Change
    Rang : Expert
    Est-ce qu'il y a autre chose qu'un fichier editors.php dans build/<profile>/modules/<votreModule>/forms ? Si oui supprimer tout sauf editors.php Est-ce qu'il y a un dossier build/<profile>/modules/<votreModule>/lib/bindings/editor ? Si oui, supprimer ce dossier (ces fichiers sont générés par la commande compile-document-editor qu'il n'est pas recommandé d'utiliser en développement)

    D'autre part, le résultat de l'appel serveur qui charge les items est mis en cache côté navigateur pendant 3 minutes. Il vaut donc mieux recharger l'interface entre deux modifications du service de la liste.

    ce cache peut être désactivé sur un champ donné en plaçant l'attribut nocache="true" sur le nœud field correspondant à votre champ dans le panneau modules/<votreModule>/forums/editor/<votreDocument>/[properties|create|...].xml.

    EDIT : Il y avait une erreur dans le chemin indiqué, j'ai corrigé au cas où quelqu'un tomberait sur ce message...

    Édité par Gaël Port 22/09/2011 16:23

  • 42920.8 en réponse à 42920.7 écrit par Gaël Port

    22/09/2011 15:04


    fpaterno
    Rang : Adepte
    Concernant le message de Gaël : je n'ai que le fichier editors.php dans le dossier build.
    D'autres part, je recharge bien l'interface dès que j'effectue une modification mais rien n'y fait.

    Concernant le message de Franck : il semble que la requête ne soit pas appelée.
    Quand je clique sur le "lien" qui m'ouvre le formulaire de création, aucune requête n'est envoyée (affichée via Tamper Data) à part http://<domain>/xul_controller.php?module=<module>&action=DefaultValuesJSON
  • 42920.9 en réponse à 42920.8 écrit par fpaterno

    22/09/2011 16:56


    Alexandre Simon
    Titre : Développeur RBS Change
    Rang : Expert
    Le problème était donc le binding fixé dans build/ par la commande compile-document-editor, à un moment où la déclaration du from-list de la propriété pointait vers une liste inexistante.
    Vider build/<profile>/modules/<votreModule>/lib/bindings/editor résoud le problème.

    Je ferme le sujet.

    Édité par Alexandre Simon 22/09/2011 16:56

 
Merci de prendre connaissance et de respecter les règles des forums.
 
1471 membres
Aucun membre connecté