Bonjour NewTito,
Voici un bout de code qui te permet de récupérer le moduleID d'un autre module en connaissant son FrienddlyName. Je rends généralement cette fonction accessible depuis les ModuleSettings, où je créé une listBox qui va montrer tous les modules cibles utiles à mon module qui cherche du contenu sur lequel baser ses fonctions. Cette listBox permet donc de choisir le module cible. Ensuite, le moduleID choisi est stocké quelque part (dans la base de données ModuleSettings par exemple) pour être facilement accèdée depuis nimporte où au sein du module configuré.
- - - - La listBox - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
<asp:DropDownList ID="drpModuleID" runat="server" Width="325" DataValueField="ModuleID"
DataTextField="ModuleTitle" CssClass="NormalTextBox" AutoPostBack="True">
</asp:DropDownList>
- - - - L'entrée du cycle de vie à partir d'une classe qui implémente ModuleSettingsBase - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Public Overrides Sub LoadSettings()
If (IsPostBack = False) Then
BindModules()
...
End If
End Sub
- - - - Le DataBind de la ListBox - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Private Sub BindModules()
Dim objDesktopModuleController As New DesktopModuleController
Dim objDesktopModuleInfo As DesktopModuleInfo = objDesktopModuleController.GetDesktopModuleByModuleName("ICI LE FRIENDLY NAME DU MODULE CIBLE")
If Not (objDesktopModuleInfo Is Nothing) Then
Dim objTabController As New TabController()
Dim objTabs As ArrayList = objTabController.GetTabs(Me.PortalId)
For Each objTab As DotNetNuke.Entities.Tabs.TabInfo In objTabs
If Not (objTab Is Nothing) Then
If (objTab.IsDeleted = False) Then
Dim objModules As New ModuleController
For Each pair As KeyValuePair(Of Integer, ModuleInfo) In objModules.GetTabModules(objTab.TabID)
Dim objModule As ModuleInfo = pair.Value
If (objModule.IsDeleted = False) Then
If (objModule.DesktopModuleID = objDesktopModuleInfo.DesktopModuleID) Then
If PortalSecurity.IsInRoles(objModule.AuthorizedEditRoles) = True And objModule.IsDeleted = False Then
Dim strPath As String = objTab.TabName
Dim objTabSelected As TabInfo = objTab
While objTabSelected.ParentId <> Null.NullInteger
objTabSelected = objTabController.GetTab(objTabSelected.ParentId, objTab.PortalID, False)
If (objTabSelected Is Nothing) Then
Exit While
End If
strPath = objTabSelected.TabName & " -> " & strPath
End While
Dim objListItem As New ListItem
objListItem.Value = objModule.TabID.ToString() & "-" & objModule.ModuleID.ToString()
objListItem.Text = strPath & " -> " & objModule.ModuleTitle
drpModuleID.Items.Add(objListItem)
End If
End If
End If
Next
End If
End If
Next
End If
If (drpModuleID.Items.Count > 0) Then
... ' Ca veut dire qu'il n'y a pas de module cible, donc il faut en instancier un. Tu peux ajouter ici un message dans la listBox par exemple, avec les valeurs 0.
End If
End Sub
>>> Là donc, tu devrais avoir dans les paramètres de ton module une listBox qui te montre tous les modules qui peuvent servir de cible à ce module.
- - - - Fonction appellée lors du click sur Sauvegarder sur le contrôle paramètres - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Public Overrides Sub UpdateSettings()
Try
SaveSettings()
Catch exc As Exception 'Module failed to load
ProcessModuleLoadException(Me, exc)
End Try
End Sub
- - - - Fonction SaveSettings() - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Private Sub SaveSettings()
Dim objModuleController As New ModuleController
If (drpModuleID.Items.Count > 0) Then
Dim values As String() = drpModuleID.SelectedValue.Split(Convert.ToChar("-"))
If (values.Length = 2) Then
objModuleController.UpdateTabModuleSetting(Me.TabModuleId, "Nom de la constante pour le TabID", values(0))
objModuleController.UpdateTabModuleSetting(Me.TabModuleId, "Nom de la constante pour le moduleID", values(1))
End If
End If
...
Donc avec ce code, tu peux faire une Public Property myModuleID() :
Private ReadOnly Property MyModuleID() As Integer
Get
Return CType(Settings("Nom de la constante pour le moduleID"), Integer)
End Get
End Property
Donc si tu suis mon exemple, dans le contrôle View du module, tu as :
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Try
If IsPostBack = False Then
Dim objListProduits As New ListProduitController
Dim colListProduits As List(Of ListProduitsInfo)
colListProduits = objListProduits.GetListProduits(MyModuleId) ' Valeur tirée des Settings
...
' IF colListProduits is nothing then >>> Les modulesSettings sont encore indéfinis.
End If
Catch exc As Exception 'Module failed to load
ProcessModuleLoadException(Me, exc)
End Try
End Sub
Bon courage
Seb