Développer avec RBS Change : initData Customer : messages d'erreur
-
03/01/2012 10:38
Bonjour,
J'essaie sans succès de créer des customer à partir d'un initData.
Après avoir regardé les différents exemples que vous proposez dans plusieurs modules j'ai essayé les commandes suivantes :
<customer user-refid="personne1" id="customer1" />
Error line 182 (/home/fdurrieu/workspacePHP/XXXXXX.fr/rbschange/framework/framework-3.5.2/persistentdocument/TransactionManager.class.php): Transaction cancelled: Transaction cancelled: Version (4) of document (11866) is obsolete.
<customer byLogin="personne1" id="customer1" />
Error line 17 (/home/fdurrieu/workspacePHP/XXXXXX.fr/rbschange/modules/customer/customer-3.5.2/persistentdocument/import/CustomerScriptDocumentElement.class.php): Invalid login : personne1
<customer byUser-refid="personne1" id="customer1" /> lui ne semble pas être géré
Les websitefrontendusers liés sont bien créés comme suit :
<websitefrontenduser byLogin="personne1" label="Personne 1" id="personne1"
title-refid="Monsieur" firstname="Personne" lastname="Un"
passwordmd5="XXXXXXXX" email="personne@un.com"
publicationstatus="ACTIVE" website-refid="XXXXX" department-refid="dep" status="XXX" groups-refids="group_front" />
Merci d'avance pour votre aide -
Bonjour,
Normalement c'est bien la première solution qu'il faut utiliser.
Pourriez-vous préciser dans quel contexte vous obtenez l'exception ? Est-ce déjà lors de la première exécution du script ou lors d'une seconde exécution par la suite ?
Quoiqu'il en soit pour en savoir plus il me faudrait la trace d'exécution de l'exception pour comprendre ce qui se passe. Et savoir à quel document correspond l'id 11866 donné dans le message d'erreur pourrait aider aussi (cette information peut se trouver facilement dans la table f_document qui contient les correspondance entre chaque id et le type de document associé).
Sinon, s'il s'agit de faire un script qui puisse être ré-exécuté plusieurs fois de suite, il sera sans doute utile de rajoute un by... le plus simple reste de renseigner la propriété codeReference et donc d'utiliser un byCodeReference pour identifier la bonne instance. -
03/01/2012 11:11
C'est lors de la première exécution, et aussi lors d'une seconde exécution si les éléments customer ne sont pas pris en compte dans la première.
Je n'ai pas précisé en effet, le document_id 11866 réfère à mon user "personne1"
J'utilise en permanance le by en effet, les essaies sans by étaient pour vérifier que l'erreur ne venait pas de là. -
Ok...
Comme dit plus haut, il me faudrait la trace d'exécution de l'exception pour pouvoir en dire plus. -
03/01/2012 11:25
La voici pour la dernière erreur que j'ai rencontré :
2012-01-03 09:21:09 [EXCEPTION] Exception: Version (4) of document (11866) is obsolete.
#0 rbschange/framework/framework-3.5.2/persistentdocument/DocumentService.class.php(410): f_persistentdocument_DocumentService->updateDocumentVersion(Object(users_persistentdocument_websitefrontenduser))
#1 rbschange/framework/framework-3.5.2/persistentdocument/DocumentService.class.php(125): f_persistentdocument_DocumentService->update(Object(users_persistentdocument_websitefrontenduser), NULL)
#2 rbschange/framework/framework-3.5.2/persistentdocument/PersistentDocumentImpl.class.php(750): f_persistentdocument_DocumentService->save(Object(users_persistentdocument_websitefrontenduser), NULL)
#3 rbschange/framework/framework-3.5.2/persistentdocument/PersistentDocumentImpl.class.php(274): f_persistentdocument_PersistentDocumentImpl->save()
#4 rbschange/framework/framework-3.5.2/persistentdocument/DocumentService.class.php(465): f_persistentdocument_PersistentDocumentImpl->saveDocumentsInverse()
#5 rbschange/framework/framework-3.5.2/persistentdocument/DocumentService.class.php(125): f_persistentdocument_DocumentService->update(Object(users_persistentdocument_websitefrontendgroup), NULL)
#6 rbschange/framework/framework-3.5.2/persistentdocument/PersistentDocumentImpl.class.php(750): f_persistentdocument_DocumentService->save(Object(users_persistentdocument_websitefrontendgroup), NULL)
#7 rbschange/framework/framework-3.5.2/persistentdocument/PersistentProvider.class.php(4138): f_persistentdocument_PersistentDocumentImpl->save()
#8 rbschange/framework/framework-3.5.2/persistentdocument/PersistentProvider.class.php(1395): f_persistentdocument_PersistentProvider->cascadeSaveDocumentArray(Object(f_persistentdocument_PersistentDocumentArray))
#9 rbschange/framework/framework-3.5.2/persistentdocument/DocumentService.class.php(464): f_persistentdocument_PersistentProvider->updateDocument(Object(users_persistentdocument_websitefrontenduser))
#10 rbschange/framework/framework-3.5.2/persistentdocument/DocumentService.class.php(125): f_persistentdocument_DocumentService->update(Object(users_persistentdocument_websitefrontenduser), NULL)
#11 rbschange/framework/framework-3.5.2/persistentdocument/PersistentDocumentImpl.class.php(750): f_persistentdocument_DocumentService->save(Object(users_persistentdocument_websitefrontenduser), NULL)
#12 rbschange/framework/framework-3.5.2/persistentdocument/PersistentProvider.class.php(4138): f_persistentdocument_PersistentDocumentImpl->save()
#13 rbschange/framework/framework-3.5.2/persistentdocument/PersistentProvider.class.php(1807): f_persistentdocument_PersistentProvider->cascadeSaveDocumentArray(Object(f_persistentdocument_PersistentDocumentArray))
#14 rbschange/framework/framework-3.5.2/persistentdocument/PersistentProvider.class.php(1205): f_persistentdocument_PersistentProvider->_insertDocument('12952', Object(customer_persistentdocument_customer))
#15 rbschange/framework/framework-3.5.2/persistentdocument/DocumentService.class.php(300): f_persistentdocument_PersistentProvider->insertDocument(Object(customer_persistentdocument_customer))
#16 rbschange/framework/framework-3.5.2/persistentdocument/DocumentService.class.php(121): f_persistentdocument_DocumentService->insert(Object(customer_persistentdocument_customer), NULL)
#17 rbschange/framework/framework-3.5.2/persistentdocument/PersistentDocumentImpl.class.php(750): f_persistentdocument_DocumentService->save(Object(customer_persistentdocument_customer), NULL)
#18 rbschange/framework/framework-3.5.2/persistentdocument/import/ScriptDocumentElement.class.php(184): f_persistentdocument_PersistentDocumentImpl->save(NULL)
#19 rbschange/framework/framework-3.5.2/persistentdocument/import/ScriptDocumentElement.class.php(126): import_ScriptDocumentElement->saveDocument()
#20 rbschange/framework/framework-3.5.2/persistentdocument/import/ScriptReader.class.php(316): import_ScriptDocumentElement->process()
#21 rbschange/framework/framework-3.5.2/persistentdocument/import/ScriptReader.class.php(172): import_ScriptReader->processElement(Object(customer_CustomerScriptDocumentElement), 'customer1')
#22 rbschange/framework/framework-3.5.2/persistentdocument/import/ScriptReader.class.php(106): import_ScriptReader->parse(Object(XMLReader))
#23 rbschange/framework/framework-3.5.2/persistentdocument/import/ScriptBindingElement.class.php(11): import_ScriptReader->executeInternal('/home/fdurrieu/...')
#24 rbschange/framework/framework-3.5.2/persistentdocument/import/ScriptReader.class.php(316): import_ScriptBindingElement->process()
#25 rbschange/framework/framework-3.5.2/persistentdocument/import/ScriptReader.class.php(172): import_ScriptReader->processElement(Object(import_ScriptBindingElement), NULL)
#26 rbschange/framework/framework-3.5.2/persistentdocument/import/ScriptReader.class.php(106): import_ScriptReader->parse(Object(XMLReader))
#27 rbschange/framework/framework-3.5.2/persistentdocument/import/ScriptBindingElement.class.php(11): import_ScriptReader->executeInternal('/home/fdurrieu/...')
#28 rbschange/framework/framework-3.5.2/persistentdocument/import/ScriptReader.class.php(316): import_ScriptBindingElement->process()
#29 rbschange/framework/framework-3.5.2/persistentdocument/import/ScriptReader.class.php(172): import_ScriptReader->processElement(Object(import_ScriptBindingElement), NULL)
#30 rbschange/framework/framework-3.5.2/persistentdocument/import/ScriptReader.class.php(106): import_ScriptReader->parse(Object(XMLReader))
#31 rbschange/framework/framework-3.5.2/persistentdocument/import/ScriptReader.class.php(90): import_ScriptReader->executeInternal('/home/fdurrieu/...')
#32 rbschange/framework/framework-3.5.2/persistentdocument/import/ScriptReader.class.php(75): import_ScriptReader->execute('/home/fdurrieu/...', Array)
#33 rbschange/framework/framework-3.5.2/change-commands/ImportData.php(78): import_ScriptReader->executeModuleScript('pompiers', 'base-dev.xml')
#34 rbschange/framework/framework-3.5.2/bin/includes/ChangescriptCommand.php(372): commands_ImportData->_execute(Array, Array)
#35 rbschange/framework/framework-3.5.2/bin/includes/Changescript.php(215): c_ChangescriptCommand->execute(Array, Array)
#36 rbschange/framework/framework-3.5.2/bin/includes/Changescript.php(135): c_Changescript->_executeCommand('id', Array)
#37 rbschange/framework/framework-3.5.2/bin/change_script.inc(61): c_Changescript->execute(Array)
#38 rbschange/framework/framework-3.5.2/bin/change.php(24): require('/home/fdurrieu/...')
#39 {main} -
Ok du coup j'ai pu trouver un scénario où j'arrive à le reproduire chez moi. J'ai donc créé un ticket (Exception à l'import XML de comptes clients) sur le sujet afin que ce soit corrigé.
En fait ça ne semble pas marcher pour la création d'un compte client sur un utilisateur déjà existant en base. Donc en attendant le correctif, il suffit nettoyer votre base des utilisateurs sans compte qui auraient été importés par le script pour que ça passe. -
Comment est il possible de créer des customers sans qu'un utilisateur lui soit lié?
-
En fait ce n'est pas ça que je voulais dire, un client est forcément lié à un utilisateur.
Là d'après mes tests, le cas qui pose problème c'est quand l'utilisateur a été créé à un moment donné et qu'on tente de lui associer un compte client par la suite plutôt que de créer les deux au même moment. -
05/01/2012 10:50
Ca a bien marché, la création de customer marche bien avec le "user-refid" juste après la création de l'utilisateur.
Merci pour votre aide
Merci de prendre connaissance et de respecter les règles des forums.