Développer avec RBS Change : Formulaire et propriété

  • 46990.1

    22/11/2011 12:29


    fpaterno
    Rang : Adepte
    Bonjour,

    j'ai injecté le type de document "websitefrontenduser" afin d'y ajouter une propriété spécifique :
    <add name="speciality" type="modules_list/item" from-list="monmodule/specialities" max-occurs="-1" />
    

    Jusque là, pas de soucis, le formulaire s'affiche correctement en BO et l'édition ne pose pas de soucis.

    J'ai également étendu le formulaire de base pour afficher cette propriété sur un formulaire d'inscription (côté front) :
    <li><input change:field="name speciality" /></li>
    

    C'est ici qu'un problème se produit.
    Le code affiche bien un élément de type "select" multiple valeur. Cependant, quand je sélectionne 1 ou plusieurs choix, lors de l'enregistrement, j'obtiens l'erreur suivante :
    Une exception a été lancée : Invalid type of document array
    
    #0 [internal function]: monmodule_persistentdocument_websitefrontenduserbase->setSpecialityArray(NULL)
    #1 /home/fpaterno/Projects/RBS/rbschange/framework/framework-3.5.0/f_mvc/bean/BeanUtils.php(565): ReflectionMethod->invoke(Object(users_persistentdocument_websitefrontenduser), NULL)
    #2 /home/fpaterno/Projects/RBS/rbschange/framework/framework-3.5.0/f_mvc/bean/BeanUtils.php(172): BeanUtils::setDirectProperty(Object(users_persistentdocument_websitefrontenduser), 'speciality', Array, Object(ReflectionClass))
    #3 /home/fpaterno/Projects/RBS/rbschange/modules/website/website-3.5.0/lib/mvc/BlockController.php(773): BeanUtils::populate(Object(users_persistentdocument_websitefrontenduser), Array, NULL, NULL)
    #4 /home/fpaterno/Projects/RBS/rbschange/modules/website/website-3.5.0/lib/mvc/BlockController.php(605): website_BlockController->getBean(Object(ReflectionClass), 'executeSave', 'getSaveBeanInfo', 'user')
    #5 /home/fpaterno/Projects/RBS/rbschange/modules/website/website-3.5.0/lib/mvc/BlockController.php(418): website_BlockController->executeAction()
    #6 /home/fpaterno/Projects/RBS/rbschange/modules/website/website-3.5.0/lib/mvc/BlockController.php(234): website_BlockController->processInternal()
    #7 /home/fpaterno/Projects/RBS/src/cache/aop/website_PageService_replaced0.class.php(1931): website_BlockController->process(Object(monmodule_BlockProfileAction), Object(f_mvc_HTTPRequest))
    #8 /home/fpaterno/Projects/RBS/src/cache/aop/website_PageService_replaced0.class.php(1683): website_PageService_replaced0->populateHTMLBlocks(Object(website_BlockController), Array)
    #9 /home/fpaterno/Projects/RBS/rbschange/modules/website/website-3.5.0/actions/DisplayAction.class.php(80): website_PageService_replaced0->render(Object(website_persistentdocument_page))
    #10 /home/fpaterno/Projects/RBS/rbschange/framework/framework-3.5.0/libs/mvc/BaseAction.class.php(339): website_DisplayAction->_execute(Object(Context), Object(ChangeRequest))
    #11 /home/fpaterno/Projects/RBS/rbschange/framework/framework-3.5.0/libs/mvc/Controller.class.php(147): f_action_BaseAction->execute()
    #12 /home/fpaterno/Projects/RBS/rbschange/framework/framework-3.5.0/libs/mvc/Controller.class.php(475): Controller->forward('website', 'Display')
    #13 /home/fpaterno/Projects/RBS/rbschange/framework/framework-3.5.0/libs/mvc/ChangeController.class.php(64): HttpController->forward('website', 'Display')
    #14 /home/fpaterno/Projects/RBS/rbschange/framework/framework-3.5.0/libs/mvc/ChangeController.class.php(83): controller_ChangeController->doForward('website', 'Display')
    #15 /home/fpaterno/Projects/RBS/rbschange/modules/generic/generic-3.5.0/actions/ViewDetailAction.class.php(43): controller_ChangeController->forward('website', 'Display')
    #16 /home/fpaterno/Projects/RBS/rbschange/framework/framework-3.5.0/libs/mvc/BaseAction.class.php(339): generic_ViewDetailAction->_execute(Object(Context), Object(ChangeRequest))
    #17 /home/fpaterno/Projects/RBS/rbschange/framework/framework-3.5.0/libs/mvc/Controller.class.php(147): f_action_BaseAction->execute()
    #18 /home/fpaterno/Projects/RBS/rbschange/framework/framework-3.5.0/libs/mvc/Controller.class.php(475): Controller->forward('generic', 'ViewDetail')
    #19 /home/fpaterno/Projects/RBS/rbschange/framework/framework-3.5.0/libs/mvc/ChangeController.class.php(64): HttpController->forward('website', 'ViewDetail')
    #20 /home/fpaterno/Projects/RBS/rbschange/framework/framework-3.5.0/libs/mvc/ChangeController.class.php(83): controller_ChangeController->doForward('website', 'ViewDetail')
    #21 /home/fpaterno/Projects/RBS/rbschange/modules/website/website-3.5.0/actions/UrlForwardAction.class.php(19): controller_ChangeController->forward('website', 'ViewDetail')
    #22 /home/fpaterno/Projects/RBS/rbschange/framework/framework-3.5.0/libs/mvc/BaseAction.class.php(339): website_UrlForwardAction->_execute(Object(Context), Object(ChangeRequest))
    #23 /home/fpaterno/Projects/RBS/rbschange/framework/framework-3.5.0/libs/mvc/Controller.class.php(147): f_action_BaseAction->execute()
    #24 /home/fpaterno/Projects/RBS/rbschange/framework/framework-3.5.0/libs/mvc/Controller.class.php(475): Controller->forward('website', 'UrlForward')
    #25 /home/fpaterno/Projects/RBS/rbschange/framework/framework-3.5.0/libs/mvc/ChangeController.class.php(64): HttpController->forward('website', 'UrlForward')
    #26 /home/fpaterno/Projects/RBS/rbschange/framework/framework-3.5.0/libs/mvc/ChangeController.class.php(83): controller_ChangeController->doForward('website', 'UrlForward')
    #27 /home/fpaterno/Projects/RBS/rbschange/framework/framework-3.5.0/libs/mvc/Controller.class.php(397): controller_ChangeController->forward('website', 'UrlForward')
    #28 /home/fpaterno/Projects/RBS/rbschange/framework/framework-3.5.0/libs/mvc/ChangeController.class.php(35): HttpController->dispatch()
    #29 /home/fpaterno/Projects/RBS/src/index.php(52): controller_ChangeController->dispatch()
    #30 {main}
    

    J'ai bien isolé que le problème venait de la propriété définie plus haut mais ne comprend pas pourquoi RBS ne prend t-il pas en compte le type de la propriété que j'ai défini.

    Merci par avance
  • 46990.2 en réponse à 46990.1 écrit par fpaterno

    22/11/2011 15:59


    Gaël Port
    Titre : Développeur RBS Change
    Rang : Expert
    A priori il semblerait que du fait qu'il y a une liste associée à ce champ, la valeur passe dans une classe de conversion (bean_EditableListConverter) différente des autres documents. Pour le convertisseur de document il y a deux version une monovaluée (bean_DocumentConverter) et un multivaluée (bean_DocumentsConverter), ce qui n'est pas le cas pour le cas liste.

    J'ai fait un ticket pour résoudre le problème : Champ multi-valués basé sur une liste
  • 46990.3 en réponse à 46990.2 écrit par Gaël Port

    23/11/2011 14:43

  • 46990.4

    23/11/2011 15:09


    Gaël Port
    Titre : Développeur RBS Change
    Rang : Expert
    Ah tiens, c'était ce problème là ? J'avais souvenir d'un truc qu'on avait effectivement renoncé à faire mais il me semblait que c'était autre chose...

    En fait en relisant effectivement la correction proposée à l'époque était potentiellement risquée puisque potentiellement elle pouvait aussi changer le comportement du cas monovalué (et c'était pour ça qu'on avait pas fait ça dans les versions antérieures à la 4).

    Là ce qui a été fait n'influe que sur le cas multivalué (cas où de toutes façons ça ne pouvait pas marcher, donc sans risque de casser quoique ce soit), sans toucher au cas monovalué, donc pas de risque d'effet de bord.

    Édité par Gaël Port 23/11/2011 15:38

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