Détail du message 70586.1

Message numéro 1 dans le sujet Création de document à partir du code.

  • 70586.1

    13/11/2012 23:51


    Mathias
    Rang : Expert
    Bonjour,

    j'ai un petit soucis avec la création de documents dynamiquement à partir du code.

    Voici les propriétés de mon document :
    <document xmlns="http://www.rbs.fr/schema/change-document/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.rbs.fr/schema/change-document/1.0 http://www.rbschange.fr/static/schema/change-document/3.5.xsd" model-version="3.5" has-url="false" use-rewrite-url="false">
      <properties>
        <add name="subscriber" type="modules_securedwld/subscriber" min-occurs="1"/>
        <add name="media" type="modules_securedwld/media" min-occurs="1"/>
        <add name="dwldtimes" type="Integer" default-value="0" min-occurs="1"/>
        <add name="dwldid" type="String" min-occurs="1"/>
        <add name="verified" type="Boolean" default-value="false"/>
        <add name="notified" type="Boolean" default-value="false"/>
      </properties>
      <statuses default="ACTIVE" />


    Au sein d'un block, j'ai le code suivant qui se charge de l'enregistrement en base de données :
    $tm = f_persistentdocument_TransactionManager::getInstance();
    		try
    		{
    			
    			$tm->beginTransaction();
    			
                            // ici je setup les sous documents du document à enregistrer
    			$mediaid = 11321;
    			$media = securedwld_MediaService::getInstance()->getDocumentInstance($mediaid);
    			$subid = 11453;
    			$subscriber = securedwld_SubscriberService::getInstance()->getDocumentInstance($subid);
    			
    			// Here the code to be in the transaction
                            $regs = securedwld_RegistrationService::getInstance();
    			$registration = $regs->getNewDocumentInstance();
    			$registration->setLabel('test3');
    			$registration->setMedia($media);
    			$registration->setSubscriber($subscriber);
    			$registration->setDwldid('dwldid');
    			$registration->setDwldtimes(0);
    			$registration->setNotified(false);
    			$registration->setVerified(false);
    		
    			$registration->save();
    			
    			$tm->commit();
    		}
    		catch (Exception $e)
    		{
    			Framework::fatal('#####TRANSACTION FAILED : '.var_export($document->getValidationErrors(), true));
    			throw $tm->rollBack($e);
    		}


    Quand j'affiche la page, je n'ai pas d'erreurs dans les logs, ni sur le site.
    En base de données, via phpmyadmin, je retrouve bien mon document, avec les propriétés settées avec les valeurs renseignées dans mon code.

    Mon problème, est quand j'essaye de requêter mes documents avec le code suivant :
    //récupération des documents ayant pour label test3
    		$regs = securedwld_RegistrationService::getInstance();
    		$query = $regs->createQuery()
    		->add(Restrictions::published())
    		->add(Restrictions::eq('label','test3'));
    		
    		$registration = $query->find();
    		Framework::fatal(__METHOD__.'####   $registration  #######'.var_export($registration,true));


    le log me montre que la requête fonctionne, qu'elle me trouve bien le document que je viens de créer, mais toutes les propriétés du document sont séttées à NULL !
     securedwld_persistentdocument_registration::__set_state(array(
         'm_author' => NULL,
         'm_authorid' => NULL,
         'm_creationdate' => NULL,
         'm_modificationdate' => NULL,
         'm_publicationstatus' => NULL,
         'm_modelversion' => NULL,
         'm_documentversion' => NULL,
         'm_startpublicationdate' => NULL,
         'm_endpublicationdate' => NULL,
         'm_metastring' => NULL,
         'm_subscriber' => NULL,
         'm_media' => NULL,
         'm_dwldtimes' => NULL,
         'm_dwldid' => NULL,
         'm_verified' => NULL,
         'm_notified' => NULL,
         'm_persistentState' => 2,
         'm_id' => 11511,
         'm_treeId' => NULL,
         'm_providerId' => NULL,
         'm_i18nInfo' =>
        I18nInfo::__set_state(array(
           'm_vo' => 'fr',
           'm_labels' =>
          array (
            'fr' => 'test3',
          ),
        )),
         'validationErrors' => NULL,
         'modifiedProperties' =>
        array (
        ),
         'modifiedPropertyValues' =>
        array (
        ),
         'm_documentInverse' => NULL,
         'is_i18InfoModified' => false,
         'insertInTree' => true,
         '_parentNodeId' => NULL,
         'm_metas' => NULL,
         'metasModified' => false,
         'i18nVoObject' => NULL,
      )),
    )
    


    Sauf : l'id du document (qui correspond bien à celui que je vois via phpmyadmin, et le label du document.
    Du coup, le document récupéré n'est pas considéré comme un document de type modules_securedwld/registration et ne peut donc pas être manipulé dans la suite de mon code...

    Need help :)

    Développe sous linux Ubuntu 12.04 LTS Desktop
    Projet ecommerce core 3.6.7
 
1386 membres
Aucun membre connecté