2010-10-22 24 views
0

Nous avons une exigence dans notre projet de parcourir & télécharger un fichier XML et le montrer sur la grille de données, modifier la grille, puis enregistrez le contenu dans la base de données. Je suis en mesure de voir des exemples qui prennent un XML à partir d'un dossier spécifique et de montrer sur la grille de données, mais pas en mesure de voir des exemples qui recherchent un XML, puis le télécharger. Ce serait génial si quelqu'un peut me diriger vers les exemples ou un exemple de code. Notre XML ressemble à:Flex Télécharger XML vers datagrid/database

<VisitImportList> 
    <Visit> 
     <AuditDetails> 
      <UpdateUser>ADMIN</UpdateUser> 
      <UpdateTimestamp>2010-10-22T16:25:26.593Z</UpdateTimestamp> 
     </AuditDetails> 
     <VisitId>3</VisitId> 
     <MeasurementCollectionId>4</MeasurementCollectionId> 
     <WeightConfirmationCode>5</WeightConfirmationCode> 
     <PrefilledIndicator>true</PrefilledIndicator> 
     <VisitDate>2010-10-22T16:25:26.593Z</VisitDate>  
    </Visit> 
    <Visit> 
     <AuditDetails> 
      <UpdateUser>ADMIN</UpdateUser> 
      <UpdateTimestamp>2010-10-22T16:25:26.593Z</UpdateTimestamp> 
     </AuditDetails> 
     <VisitId>3</VisitId> 
     <MeasurementCollectionId>3</MeasurementCollectionId> 
     <BloodPressureConfirmationCode>4</BloodPressureConfirmationCode> 
     <PrefilledIndicator>true</PrefilledIndicator> 
     <VisitInvalidCode>1</VisitInvalidCode> 
     <VisitInvalidReasonText>No Dates</VisitInvalidReasonText> 
    </Visit> 
</VisitImportList> 

Ok j'ai pu montrer les données sur la grille à l'aide FileReference pour le téléchargement et XML/XMLListCollection. Maintenant, le problème est lorsque j'essaie d'enregistrer dans la base de données. Je ne voulais pas créer un nouveau fil, donc je l'ai ajouté ma question ici:

private function saveVisit(event:MouseEvent): void 
      { 
var decoder:SimpleXMLDecoder = new SimpleXMLDecoder(); 
       var data:Object = decoder.decodeXML(xmlDoc); 

       var array:Array = ArrayUtil.toArray(data.VisitImportList.Visit); 
       tempCollection = new ArrayCollection(array); 

Maintenant, j'ai les données dans mon ArrayCollection (tempCollection). Mais il contient des objets génériques et j'ai besoin de les convertir en objet visite. Je veux donc faire une boucle dans ArrayCollection, convertir l'objet en objets Visit personnalisés et les ajouter à une autre collection (je suis sûr que ce n'est pas la bonne façon de faire, mais je ne suis pas capable de trouver un suppléant):

 for (var i:int = 0; i < tempCollection.length; ++i) 
         {    
          model.visit = new Visit(); 
          model.visit = Visit(tempCollection.getItemAt(i, 0)); // This line gives the error Type Coercion failed: cannot convert [email protected] to com.model.Visit. 
          model.visit = tempCollection.getItemAt(i) as Visit; // This line always has Visit as null eventhough the tempCollection has 2 objects 

model.pvList.visits.addItemAt(Visit, i); 
} 

alors quelqu'un peut-il aider sur la façon de boucler à travers le ArraCollection et convertir l'AS objet pour objet de visite personnalisé et ajoutez à un autre ArrayCollection ou un moyen plus facile de le faire

Merci

Harish

Répondre

1

Si vous utilisez l'application AIR, vous pouvez facilement accéder aux ressources de votre ordinateur à l'aide des objets File et FileStream dans Flex.

http://livedocs.adobe.com/flex/3/html/help.html?content=Filesystem_16.html

obtenir l'objet XML et puis le convertir en XMLListCollection de son commande point-à-dire

var xmlProvider:XMLListCollection = new XMLListCollection(xml.Visit); 

Définir ce fournisseur à votre grille de données et écrire le script pour télécharger et enregistrer ces données, la façon dont vous vouloir.

Mais à la place si vous écrivez une application web. Vous ne pouvez pas accéder à des ressources qui ne se trouvent pas dans votre chemin de fichiers flex flex sur votre client. Ou vous devez donner un accès flexible au dossier/fichier sur la machine client en utilisant "Global Security Settings". Dans ce cas, même AIR api devrait fonctionner.

Toutefois, si vous ne le souhaitez pas, alors vous devez télécharger le fichier sur le serveur, lire cet objet en utilisant HTTPService sur le client, créer l'objet XMLListCollection et charger les données dans DataGrid. Cela contribuerait

  1. Upload File
  2. HTTP Service + DataGrid Sample for XML file on server
+0

Merci Faheem. J'ai été capable d'utiliser FileReference pour browse/upload et XML/XMLListCollection pour afficher sur le DataGrid. Mais maintenant, j'ai un autre problème lors de l'enregistrement dans la base de données. J'ai ajouté ceci à la question principale. S'il vous plaît aider quelqu'un – Harry

+1

C'est la façon la plus simple de le faire ... http://cookbooks.adobe.com/post_Using_a_Factory_Method_to_convert_raw_XML_into_cus-12764.html – Faheem

+0

Faheem impressionnant, presque résolu sauf 1 problème :). visit.visitDate = VisitNode.VisitDate Ici, j'obtiens une erreur: La coercition de type a échoué: impossible de convertir XMLList @ 1d76eee9 en date. Ai-je besoin de formater la date? Comment faire plaisir – Harry