Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)
'默认访问主页
Dim tabIndex As Integer = 0
Dim tabId As Integer = 1
' Get TabIndex from querystring
If Not (Request.Params("tabindex") Is Nothing) Then
tabIndex = CInt(Request.Params("tabindex"))
End If
' Get TabID from querystring
If Not (Request.Params("tabid") Is Nothing) Then
tabId = CInt(Request.Params("tabid"))
End If
' Add the PortalSettings object to the context
' PortalSetting在Components\Configuration.vb中定义,其作用是根据传入的tabIndex,tabId加载相应栏目的元素。
' Context用来缓存相应栏目的设置。
Context.Items.Add("PortalSettings", New PortalSettings(tabIndex, tabId))
' Read the configuration info from the XML file or retrieve from Cache
' and add to the context
' Configuration类在Components\Configuration中定义,其作用是操作Portal网站的设置文件PortalCfg.xml文件。
' 同样是将设置文件缓存到Context中,这样网站的任何部分都可以访问到这些设置。
Dim config As Configuration = New Configuration()
Context.Items.Add("SiteSettings", config.GetSiteSettings())
Try
If Not (Request.UserLanguages Is Nothing) Then
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.UserLanguages(0))
' Default to English if there are no user languages
Else
Thread.CurrentThread.CurrentCulture = New CultureInfo("en-us")
End If
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture
Catch ex As Exception
Thread.CurrentThread.CurrentCulture = New CultureInfo("en-us")
End Try
End Sub
分析New PortalSettings(tabIndex, tabId),请看下面PortalSettings的构造函数:
Public Class PortalSettings
Public PortalId As Integer
Public PortalName As String
Public AlwaysShowEditButton As Boolean
Public DesktopTabs As New ArrayList()
Public MobileTabs As New ArrayList()
Public ActiveTab As New TabSettings()
......
Public Sub New(ByVal tabIndex As Integer, ByVal tabId As Integer)
' Get the configuration data
Dim config As Configuration = New Configuration()
' 通过Configuration类中的GetSiteSettings()将PortalCfg.xml文件导入到Context中,
' 随后通过返回值赋值给siteSettings,siteSettings被定义为一个增强型的Dataset类。
Dim siteSettings As SiteConfiguration = config.GetSiteSettings()
' Read the Desktop Tab Information, and sort by Tab Order
' 读取Tab信息,也就是Portal网站的栏目信息,放到DesktopTabs中。
Dim tRow As SiteConfiguration.TabRow
For Each tRow In siteSettings.Tab.Select("", "TabOrder")
Dim tabDetails As New TabStripDetails()
With tabDetails
.TabId = tRow.TabId
.TabName = tRow.TabName
.TabOrder = tRow.TabOrder
.AuthorizedRoles = tRow.AccessRoles
End With
Me.DesktopTabs.Add(tabDetails)
Next
' If the PortalSettings.ActiveTab property is set to 0, change it to
' the TabID of the first tab in the DesktopTabs collection
If Me.ActiveTab.TabId = 0 Then
Me.ActiveTab.TabId = CType(Me.DesktopTabs(0), TabStripDetails).TabId
End If
' Read the Mobile Tab Information, and sort by Tab Order
Dim mRow As SiteConfiguration.TabRow
For Each mRow In siteSettings.Tab.Select("ShowMobile='true'", "TabOrder")
Dim tabDetails As New TabStripDetails()
With tabdetails
.TabId = mRow.TabId
.TabName = mRow.MobileTabName
.AuthorizedRoles = mRow.AccessRoles
End With
Me.MobileTabs.Add(tabDetails)
Next
' Read the Module Information for the current (Active) tab
' 找到当前栏目,读取当前栏目中的模块信息。
Dim activeTab As SiteConfiguration.TabRow = siteSettings.Tab.FindByTabId(tabId)
Dim moduleRow As SiteConfiguration._ModuleRow
' Get Modules for this Tab based on the Data Relation
For Each moduleRow In activeTab.GetModuleRows()
Dim moduleSettings As New moduleSettings()
' ModuleDefinition data
' 按模块ID找到该模块用户组件的路径。
Dim modDefRow As SiteConfiguration.ModuleDefinitionRow = siteSettings.ModuleDefinition.FindByModuleDefId(.ModuleDefId)
.DesktopSrc = modDefRow.DesktopSourceFile
.MobileSrc = modDefRow.MobileSourceFile
End With
Me.ActiveTab.Modules.Add(moduleSettings)
Next
' Sort the modules in order of ModuleOrder
Me.ActiveTab.Modules.Sort()
' Get the first row in the Global table
Dim globalSettings As SiteConfiguration.GlobalRow = siteSettings.Global.Rows(0)
End Sub
分析Configuration类中的GetSiteSettings()方法:
Public Function GetSiteSettings() As SiteConfiguration
Dim siteSettings As SiteConfiguration = CType(HttpContext.Current.Cach