Vous êtes ici Forums
  |  Connexion
 Forums
HomeHomeForums DNNForums DNNDéveloppementDéveloppementRendre un module exportableRendre un module exportable
Précédente
 
Suivante
Nouveau message
18/12/2007 11:40
 

Bonjour,

J'ai créer un petit module qui collecte des emails.. jusque la rien de sorcier
Maintenant j'aimerai pouvoir récupérer l'ensemble de mes emails via le module d'export de DNN

Ma class controler a bien le "Implements Entities.Modules.IPortable"

J'ai implementé les fonctions d'import / export :

 Public Function ExportModule(ByVal ModuleId As Integer) As String Implements DotNetNuke.Entities.Modules.IPortable.ExportModule

            Dim strXML As String = ""

            Dim colNewsletters As List(Of NewsletterInfo) = GetNewsletters()
            If colNewsletters.Count <> 0 Then
                strXML += "<Newsletters>"
                Dim objNewsletter As NewsletterInfo
                For Each objNewsletter In colNewsletters
                    strXML += "<Newsletter>"
                    strXML += "  <email>" & XMLEncode(objNewsletter.Email) & "</Email>"
                    strXML += "  <CreatedDate>" & XMLEncode(objNewsletter.CreatedDate) & "</CreatedDate>"
                    strXML += "</Newsletter>"
                Next
                strXML += "</Newsletters>"
            End If

            Return strXML

        End Function

        Public Sub ImportModule(ByVal ModuleID As Integer, ByVal Content As String, ByVal Version As String, ByVal UserId As Integer) Implements DotNetNuke.Entities.Modules.IPortable.ImportModule

            Dim xmlNewsletter As XmlNode
            Dim xmlNewsletters As XmlNode = GetContent(Content, "Newsletters")
            For Each xmlNewsletter In xmlNewsletters.SelectNodes("Newsletter")
                Dim objNewsletter As New NewsletterInfo
                AddNewsletter(xmlNewsletter.SelectSingleNode("email").InnerText)
            Next
        End Sub

mais la case à cocher import/export dans le detail de monn module n'esst pas coché et donc dans la liste des actions possible je n'ai pas le exporter le contenu

Comment faire? je pense avoir oublié quelque chose.. mais quoi? Faut-il faire quelque chose au niveau de l'ascx?

MErci pour vos réponses

 
Nouveau message
18/12/2007 11:45
 

Est-ce que le type .Net de ton business controller est correctement entré dans le paramétrage de ton DesktopModule? Tu as bien vérifié?

Tu pourras certainement voir ce qui se passe en passant en debug à la mise à jour de ton module.

PS: la vérification des interfaces ne se fait pas automatiquement, il te faut réenregistrer ton DesktopModule, même si tu n'as rien modifié.


Jesse
Société de conseil et de service en 
informatique et systèmes d'information
 
Nouveau message
18/12/2007 12:30
 

Jesse a dit :

Est-ce que le type .Net de ton business controller est correctement entré dans le paramétrage de ton DesktopModule? Tu as bien vérifié?

Alors le problème doit certainement venir de ça mais je ne comprends pas ta remarque comment paramétrer le controller dans le  desktopmodule?

Merci d'avance et désolé si ma question est un peu bête mais je ne vois pas là!

 
Nouveau message
18/12/2007 12:53
 

Il ne suffit pas d'implémenter les interfaces DNN pour pouvoir les consommer, il faut également les déclarer afin que DNN les associe à ton module.

Le champs Business Controller, dans le module de paramétrage des définitions de ton module, sert à cet usage: tu y entres de façon optionnelle le type .Net de ton business controller, et DNN se chargera automatiquement de vérifier quelles interfaces sont implémentées par ton controller (parmi IPortable, ISearchable, IUpgradable).

Pour rappel, un type .Net se déclare sous la forme "NameSpaces.TypeName, AssemblyName", s'il fait parti d'une dll tierce, ou bien "NameSpaces.TypeName", si tu l'as développé directement dans un répertoire App_Code du site web.


Jesse
Société de conseil et de service en 
informatique et systèmes d'information
 
Nouveau message
18/12/2007 13:00
 

Sinon, si je puis me permettre un petit commentaire sur ton code, tu aurais probablement pu:

  • Utiliser un StringBuilder plutôt qu'une String
  • Mieux, utiliser un XMLWriter plutôt que des chaines de caractères
  • Mon choix, utiliser un XMLSerializer de façon globale et personnaliser la sérialisation par des attributs associés à tes classes et tes propriétés, ou bien des arguments de XmlOverride dans l'appel à la fonction de serialization.

Jesse
Société de conseil et de service en 
informatique et systèmes d'information
 
Nouveau message
18/12/2007 13:09
 

Merci beaucoup pour ton aide, je n'avais effectivement pas renseigné le champ "contrôle de class".

Maintenant ça fonctionne mieux
Pour le code, je l'ai copié du module HTML, mais je vais suivre tes conseils, ça me parait effectivement plus propre

Merci

 
Nouveau message
18/12/2007 15:30
 

boutdechoux a dit :

Pour le code, je l'ai copié du module HTML, mais je vais suivre tes conseils, ça me parait effectivement plus propre

Juste une petite précision. Si tu choisis d'utiliser un XMLSerializer et si à l'avenir tu as des types imbriqués dans la structure à sérializer, tu peux fournir les types additionnels de noeuds enfant en argument du constructeur adequat; dans ce cas, passe par la XMLSerializerFactory fournie par le framework, car depuis .Net 2.0, le constructeur en question requiert d'être en full trust.

Mais en ce qui te concerne, tu peux je crois utiliser le constructeur simple de XMLSerializer en lui passant GetType(List(Of NewsletterInfo)). Tu n'as plus qu'à utiliser le serializer correspondant en écriture et en lecture.


Jesse
Société de conseil et de service en 
informatique et systèmes d'information
 
Précédente
 
Suivante
HomeHomeForums DNNForums DNNDéveloppementDéveloppementRendre un module exportableRendre un module exportable