2010-02-11 8 views
0

J'ai créé un fournisseur de profil personnalisé intégré à l'API d'un CMS. Cela fonctionne correctement lorsque vous extrayez des données pour un utilisateur authentifié (Profile.FirstName), mais des erreurs lors de la création du profil d'un nouvel utilisateur.Fournisseur de profil personnalisé utilisant l'API CMS

Voici la section de web.config

<profile enabled="true" defaultProvider="CustomProfileProvider" inherits="objProfile"> 
    <providers> 
    <clear /> 
    <add name="CustomProfileProvider" type="CustomProfileProvider" /> 
    </providers> 
</profile> 

Voici la classe objProfile

Public Class objProfile 
    Inherits ProfileBase 

    Public Property FirstName() As String 
     Get 
      Return Me.GetPropertyValue("FirstName") 
     End Get 
     Set(ByVal value As String) 
      Me.SetPropertyValue("FirstName", value) 
     End Set 
    End Property 

    Public Property LastName() As String 
     Get 
      Return Me.GetPropertyValue("LastName") 
     End Get 
     Set(ByVal value As String) 
      Me.SetPropertyValue("LastName", value) 
     End Set 
    End Property 

    Public Property Email() As String 
     Get 
      Return Me.GetPropertyValue("Email") 
     End Get 
     Set(ByVal value As String) 
      Me.SetPropertyValue("Email", value) 
     End Set 
    End Property 

    Public Property Address1() As String 
     Get 
      Return Me.GetPropertyValue("Address1") 
     End Get 
     Set(ByVal value As String) 
      Me.SetPropertyValue("Address1", value) 
     End Set 
    End Property 

    ... 

    Public Property MailList() As Boolean 
     Get 
      Return Me.GetPropertyValue("Mailing List") 
     End Get 
     Set(ByVal value As Boolean) 
      Me.SetPropertyValue("Mailing List", value) 
     End Set 
    End Property 

End Class 

Voici le ProfileProvider personnalisé. La seule fonction qui est actuellement implémentée est GetPropertyValues parce que c'est la seule qui est utilisée lorsque vous utilisez le débogueur. Je vais implémenter les autres comme j'en ai besoin.

Public Class CustomProfileProvider 
    Inherits ProfileProvider 

    Public Overrides Property ApplicationName() As String 
     Get 
      Return ConfigurationManager.AppSettings("ApplicationName") 
     End Get 
     Set(ByVal value As String) 
      Return 
     End Set 
    End Property 

    Public Overrides Sub Initialize(ByVal name As String, ByVal config As System.Collections.Specialized.NameValueCollection) 
     MyBase.Initialize(name, config) 
    End Sub 

    Public Overrides Function DeleteInactiveProfiles(ByVal authenticationOption As System.Web.Profile.ProfileAuthenticationOption, ByVal userInactiveSinceDate As Date) As Integer 

    End Function 

    Public Overloads Overrides Function DeleteProfiles(ByVal usernames() As String) As Integer 

    End Function 

    Public Overloads Overrides Function DeleteProfiles(ByVal profiles As System.Web.Profile.ProfileInfoCollection) As Integer 

    End Function 

    Public Overrides Function FindInactiveProfilesByUserName(ByVal authenticationOption As System.Web.Profile.ProfileAuthenticationOption, ByVal usernameToMatch As String, ByVal userInactiveSinceDate As Date, ByVal pageIndex As Integer, ByVal pageSize As Integer, ByRef totalRecords As Integer) As System.Web.Profile.ProfileInfoCollection 

    End Function 

    Public Overrides Function FindProfilesByUserName(ByVal authenticationOption As System.Web.Profile.ProfileAuthenticationOption, ByVal usernameToMatch As String, ByVal pageIndex As Integer, ByVal pageSize As Integer, ByRef totalRecords As Integer) As System.Web.Profile.ProfileInfoCollection 

    End Function 

    Public Overrides Function GetAllInactiveProfiles(ByVal authenticationOption As System.Web.Profile.ProfileAuthenticationOption, ByVal userInactiveSinceDate As Date, ByVal pageIndex As Integer, ByVal pageSize As Integer, ByRef totalRecords As Integer) As System.Web.Profile.ProfileInfoCollection 

    End Function 

    Public Overrides Function GetAllProfiles(ByVal authenticationOption As System.Web.Profile.ProfileAuthenticationOption, ByVal pageIndex As Integer, ByVal pageSize As Integer, ByRef totalRecords As Integer) As System.Web.Profile.ProfileInfoCollection 

    End Function 

    Public Overrides Function GetNumberOfInactiveProfiles(ByVal authenticationOption As System.Web.Profile.ProfileAuthenticationOption, ByVal userInactiveSinceDate As Date) As Integer 

    End Function 

    Public Overrides Function GetPropertyValues(ByVal cotext As System.Configuration.SettingsContext, ByVal collection As System.Configuration.SettingsPropertyCollection) As System.Configuration.SettingsPropertyValueCollection 
     Dim PropertyValueCollection As New System.Configuration.SettingsPropertyValueCollection 
     ... (get user properties from cms and put into PropertyValueCollection) ... 
     'return the PropertyValueCollection 
     Return PropertyValueCollection 
    End Function 

    Public Overrides Sub SetPropertyValues(ByVal context As System.Configuration.SettingsContext, ByVal collection As System.Configuration.SettingsPropertyValueCollection) 

    End Sub 

End Class 

Sur une page avec un utilisateur connecté, Profile.FirstName fonctionne très bien. Mais quand je crée un nouvel utilisateur, puis utiliser objProfile.Create(UserName) pour créer le profil, toutes les propriétés ont une erreur comme The settings property 'Mailing List' was not found.

+0

Quelle version de CMS400 vous utilisez? (Je suppose CMS400 de la balise Ektron). –

+0

la nouvelle version, v8. il n'y a aucun problème à utiliser l'API, j'ai juste du mal à l'intégrer avec .NET ProfileProvider. –

Répondre

0

Je trouve le problème. J'étais malade toute la semaine dernière, alors je blâme ça.

Lors de l'obtention du profil dans la fonction GetPropertyValues, j'utilisais le HttpContext.Current au lieu du paramètre context qui est passé dans.

Public Overrides Function GetPropertyValues(ByVal context As System.Configuration.SettingsContext, ByVal collection As System.Configuration.SettingsPropertyCollection) As System.Configuration.SettingsPropertyValueCollection 
    Dim PropertyValueCollection As New System.Configuration.SettingsPropertyValueCollection 

    'get username from parameter, context.Item("UserName"), not HttpContext.Current.User.Identity.Name.ToString() 

    ...get user properties from CMS and put into PropertyValueCollection... 

    'return the PropertyValueCollection 
    Return PropertyValueCollection 
End Function 
Questions connexes