ASP.NET Starter Kit掘宝記コラム:Portal Starter Kit写しられる宝はどこですか?

18285 ワード



ASP.NET Starter Kit掘宝記コラム:
進級開発編:Portal Starter Kit写し可能な宝はどこですか?







著者:周世雄


2003年10月


Portal Starter Kit(ポータルサイト入門キット)写し可能な宝

プログラマーの「宝を掘る」時が来た.アメリカのマイクロソフトが開発し、無料で、オリジナルのプログラムコードを開放したPortal Starter Kit(入口サイト入門キット)で写すことができる場所はどこですか?写すことができる宝(場所)には、

が含まれています.
  1. 入口サイトエンジン動作原理.
  2. Context物件一時預かり入口サイト設定.
  3. ASP.NET 3層アーキテクチャ.
  4. サポート行動装置(ASP.NET Mobile Control)は、Pocket PCの内蔵ブラウザをサポートし、他の行動装置のWAP/WML構文を提供する.


ポータルサイトエンジン動作原理

ポータルサイトエンジンの動作原理は以下の通りである:


  1. ポータルサイトXML設定ファイルをContext物件に読み込む:ページを読み取るたびにGlobalが実行される.asaのApplication_BeginRequestサブルーチンでは,ポータルサイトのXMLファイル設定をContext物件に格納する.ここではComponentsConfigurationと呼びます.vbのNew()、GetSiteSettings().
  2. ページのチェックと各モジュールを表示する:Defaultが実行される.aspx、非行動装置はDesktopDefaultに導く.aspx.DesktopDefault.aspxはContext物件のエントリサイト設定を読み込み、ページチェックと各モジュールを表示します.


ポータルサイト設定XMLファイル

ポータルサイト全体の設定はリポジトリに格納されず、XMLファイル(PortalCfg.xml)に格納される.


例えば[従業員メッセージ]ページはPortalCfgに署名する.xmlの部分:

  <Tab TabId="2" TabName="    " AccessRoles="All Users;" TabOrder="9" ShowMobile="true"   MobileTabName="HR">    <Module ModuleId="9" ModuleTitle="      " EditRoles="Admins;" ModuleDefId="2"     PaneName="ContentPane" CacheTimeout="0" ModuleOrder="1" ShowMobile="true" />    <Module ModuleId="10" ModuleTitle="       " EditRoles="Admins;" ModuleDefId="10"     PaneName="ContentPane" CacheTimeout="0" ModuleOrder="3" ShowMobile="false" />    <Module ModuleId="43" ModuleTitle="       " EditRoles="Admins;" ModuleDefId="6"     PaneName="ContentPane" CacheTimeout="0" ModuleOrder="5" ShowMobile="false">      <Settings>        <Setting Name="src">~/IMAGES/IMAGE19.JPG</Setting>        <Setting Name="height">300</Setting>        <Setting Name="width">400</Setting>      </Settings>    </Module>    <Module ModuleId="44" ModuleTitle="    " EditRoles="Admins;" ModuleDefId="8"     PaneName="ContentPane" CacheTimeout="0" ModuleOrder="7" ShowMobile="false" />  </Tab>

は、[従業員メッセージ]ページに次の図を表示します.


例えば[管理者]ページはPortalCfgに署名する.xmlの部分:

  <Tab TabId="6" TabName="   " AccessRoles="Admins;" TabOrder="17" ShowMobile="false" MobileTabName="Admin">    <Module ModuleId="28" ModuleTitle="    " EditRoles="Admins;" ModuleDefId="11"     PaneName="RightPane" CacheTimeout="0" ModuleOrder="1" ShowMobile="false" />    <Module ModuleId="29" ModuleTitle="    " EditRoles="Admins;" ModuleDefId="14"     PaneName="ContentPane" CacheTimeout="0" ModuleOrder="1" ShowMobile="false" />    <Module ModuleId="30" ModuleTitle="   (Tab)" EditRoles="Admins;" ModuleDefId="13"     PaneName="ContentPane" CacheTimeout="0" ModuleOrder="2" ShowMobile="false" />    <Module ModuleId="31" ModuleTitle="    " EditRoles="Admins;" ModuleDefId="12"     PaneName="ContentPane" CacheTimeout="0" ModuleOrder="3" ShowMobile="false" />    <Module ModuleId="32" ModuleTitle="     " EditRoles="Admins;" ModuleDefId="15"     PaneName="ContentPane" CacheTimeout="0" ModuleOrder="4" ShowMobile="false" />  </Tab>

では、[管理者]ページに各モジュールを以下の図に示す.


例えば、モジュールはPortalCfgに定義.xmlの部分:

  <ModuleDefinition FriendlyName="  " MobileSourceFile="MobileModules/Announcements.ascx"   DesktopSourceFile="DesktopModules/Announcements.ascx" ModuleDefId="1" />  <ModuleDefinition FriendlyName="   " MobileSourceFile="MobileModules/Contacts.ascx"   DesktopSourceFile="DesktopModules/Contacts.ascx" ModuleDefId="2" />  <ModuleDefinition FriendlyName="   " MobileSourceFile="" DesktopSourceFile="DesktopModules  /Discussion.ascx" ModuleDefId="3" />…  <ModuleDefinition FriendlyName="     (Admin)" MobileSourceFile="" DesktopSourceFile="Admin  /SiteSettings.ascx" ModuleDefId="14" />  <ModuleDefinition FriendlyName="      (Admin)" MobileSourceFile="" DesktopSourceFile="Admin  /Users.ascx" ModuleDefId="15" />  <ModuleDefinition FriendlyName="   " MobileSourceFile="DesktopModules/MyURL.ascx"   DesktopSourceFile="DesktopModules/MyURL.ascx" ModuleDefId="16" />   

は、[管理者]ページに次の図を表示します.


Context物件一時預かり入口サイト設定

ポータルサイトエンジンの動作原理の第1ステップは,ポータルサイトXMLを読み取るためにContext物件にアーカイブを設定する.Portal Starter Kitは、Context物件をポータルサイトに一時保存する設定を使用して、ポータルサイトの設定をXMLファイル(PortalCfg.xml)に一時保存する特殊なテクニックを採用しています.方法はGlobal.asaのApplication_BeginRequest()サブルーチンでは、ポータルサイトのXMLファイル設定をContextアイテムに格納した後、同じRequestからのすべてのサイトの任意のページ、要素、および制御項目は、ContextアイテムのPortalSettingsカテゴリを呼び出すことでパラメータ設定値を読み取ることができる.


Application_BeginRequestサブルーチン:

Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)  Dim tabIndex As Integer = 0  Dim tabId As Integer = 1  '        If Not (Request.Params("tabindex") Is Nothing) Then    tabIndex = CInt(Request.Params("tabindex"))  End If  '        If Not (Request.Params("tabid") Is Nothing) Then    tabId = CInt(Request.Params("tabid"))  End If  'HttpContext.Current.Cache cache(     )      XML     ,    Request                 '  PortalSettings  (      ) Context  cache(     ),       HttpContext.Current.Items("PortalSettings")  PortalSettings  (      )  Context.Items.Add("PortalSettings", New PortalSettings(tabIndex, tabId))  '  SiteSettings  (    ) Context  cache(     ),       HttpContext.Current.Items("SiteSettings")  SiteSettings  (    )  Dim config As Configuration = New Configuration()  Context.Items.Add("SiteSettings", config.GetSiteSettings())  Try    If Not (Request.UserLanguages Is Nothing) Then     'Request.UserLanguages(0) = "zh-tw"     Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.     UserLanguages(0))    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 TryEnd Sub

ここで「Dim config As Configuration=New Configuration()」は、ComponentsConfigurationと呼びます.vbのNew()サブルーチン:

Public Sub New(ByVal tabIndex As Integer, ByVal tabId As Integer)  '        Dim config As Configuration = New Configuration()  Dim siteSettings As SiteConfiguration = config.GetSiteSettings()  '  TabOrder             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  '        (PortalSettings.ActiveTab) 0,        TabID   'CType(Me.DesktopTabs(0), TabStripDetails).TabId = 1     If Me.ActiveTab.TabId = 0 Then    Me.ActiveTab.TabId = CType(Me.DesktopTabs(0), TabStripDetails).TabId  End If  '  TabOrder          (Mobile)       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  '      (Active Tab)     (Module Information)  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()    With moduleSettings     .ModuleTitle = moduleRow.ModuleTitle     .ModuleId = moduleRow.ModuleId     .ModuleDefId = moduleRow.ModuleDefId     .ModuleOrder = moduleRow.ModuleOrder     .TabId = tabId     .PaneName = moduleRow.PaneName     .AuthorizedEditRoles = moduleRow.EditRoles     .CacheTime = moduleRow.CacheTimeout     .ShowMobile = moduleRow.ShowMobile     '        (ModuleDefinition data)     Dim modDefRow As SiteConfiguration.ModuleDefinitionRow =      siteSettings.ModuleDefinition.FindByModuleDefId(.ModuleDefId)     'URL     .DesktopSrc = modDefRow.DesktopSourceFile     .MobileSrc = modDefRow.MobileSourceFile    End With    Me.ActiveTab.Modules.Add(moduleSettings)  Next  '    (  ModuleOrder)  Me.ActiveTab.Modules.Sort()  '         Global   
   
       Dim globalSettings As SiteConfiguration.GlobalRow = siteSettings.Global.Rows(0)  '  Portal global settings   Me.PortalId = globalSettings.PortalId  Me.PortalName = globalSettings.PortalName  Me.AlwaysShowEditButton = globalSettings.AlwaysShowEditButton  Me.ActiveTab.TabIndex = tabIndex  Me.ActiveTab.TabId = tabId  Me.ActiveTab.TabOrder = activeTab.TabOrder  Me.ActiveTab.MobileTabName = activeTab.MobileTabName  Me.ActiveTab.AuthorizedRoles = activeTab.AccessRoles  Me.ActiveTab.TabName = activeTab.TabName  Me.ActiveTab.ShowMobile = activeTab.ShowMobileEnd Sub

ここで「config.GetSiteSettings()」はComponentsConfigurationと呼びます.vbのGetSiteSettings()関数式は、入口サイトXMLファイル設定ファイルを速取メモリ(cache)HttpContextに格納する.Current.Cache:

'      XML     Public Function GetSiteSettings() As SiteConfiguration  Dim siteSettings As SiteConfiguration = CType(HttpContext.Current.Cache("SiteSettings"),   SiteConfiguration)  ' SiteConfiguration    cache(     ),   XML     cache.  If siteSettings Is Nothing Then    '  dataset    siteSettings = New SiteConfiguration()    '  XML         ' Web.Config      configFile(
   
     )    'ConfigurationSettings.AppSettings("configFile")	= "/PortalVBVS3/PortalCfg.xml"     'configFile = "C:\Program Files\ASP.NET Starter Kits\ASP.NET Portal     (VBVS)\PortalVBVS3\PortalCfg.xml"    Dim configFile As String =     HttpContext.Current.Server.MapPath(ConfigurationSettings.AppSettings("configFile"))    With siteSettings     '  AutoIncrement   true             .Tab.TabIdColumn.AutoIncrement = True     ._Module.ModuleIdColumn.AutoIncrement = True     .ModuleDefinition.ModuleDefIdColumn.AutoIncrement = True     '  XML   DataSet     siteSettings.ReadXml(configFile)    End With    '  dataset cache    HttpContext.Current.Cache.Insert("SiteSettings", siteSettings,     New CacheDependency(configFile))  End If  Return siteSettingsEnd Function

Context物件のテクニックを習得しましたか?


各モジュールにラベルを表示する

エントリサイトエンジンの動作原理の第2のステップは、各モジュールにラベルを表示することである.DesktopDefault.aspxは、各モジュールにラベルを表示する責任を負います.動作原理は以下の通りである:


  1. 表示ページタグ:DesktopDefault.aspxに含まれるDesktopPortalBanner.ascxは表示を担当し、資料はページに署名してdatalistします.
  2. 各モジュールを表示する:動作原理はWeb利用者制御項(.ascx)のモジュール,DesktopDefault.aspxは「parent.controls.Add(portalModule)」を使用してモジュールをWebページに追加します.


Globalを実行する.asaのApplication_BeginRequestサブプログラムの後、Defaultを実行します.aspx、非行動装置はDesktopDefaultに導く.aspx:

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load  ' Request.Browser("IsMobileDevice")     ,                   If Request.Browser("IsMobileDevice") = "true" Then  '            MobileDefault.aspx  Response.Redirect("MobileDefault.aspx")  Else  '      (      )      TimeEntry.aspx  Response.Redirect("DesktopDefault.aspx")  End IfEnd Sub

DesktopDefault.aspxはContext物件のエントリサイト設定を読み込み、各モジュールにチェックマークを表示します.


DesktopDefault.aspxに含まれるDesktopPortalBanner.ascxはラベルの表示を担当し、DesktopPortalBanner.ascxの関連プログラムは以下の通りで、各ページのチェックマークを参照する権限があるかどうかを確認した後、資料系はページマークdatalist:

に結び付けられます.
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load  ' Context  (HttpContext.Current.Items("PortalSettings"))  PortalSettings  (      )  Dim _portalSettings As PortalSettings = CType(HttpContext.Current.Items("PortalSettings"),   PortalSettings)  '      ,   XML <Global PortalId="0" PortalName="Portal Starter Kit   "  siteName.Text = _portalSettings.PortalName  '             If Request.IsAuthenticated = True Then    WelcomeMessage.Text = "   " & Context.User.Identity.Name & "! <" & "span class=Accent" & ">|    <" & "/span" & ">"    '                      If Context.User.Identity.AuthenticationType = "Forms" Then      LogoffLink = "<" & "span class=""Accent"">|</span>" & ControlChars.Cr & "<" & "a href=" &       Global.GetApplicationPath(Request) & "/Admin/Logoff.aspx class=SiteLink>   " & "<" & "/a>"    End If  End If  If ShowTabs = True Then    tabIndex = _portalSettings.ActiveTab.TabIndex    '          Dim authorizedTabs As New ArrayList()    Dim addedTabs As Integer = 0    Dim i As Integer    For i = 0 To _portalSettings.DesktopTabs.Count - 1      Dim tab As TabStripDetails = CType(_portalSettings.DesktopTabs(i), TabStripDetails)     '                   If PortalSecurity.IsInRoles(tab.AuthorizedRoles) Then       authorizedTabs.Add(tab)     End If     If addedTabs = tabIndex Then       tabs.SelectedIndex = addedTabs     End If     addedTabs += 1    Next i    '          tabs.DataSource = authorizedTabs    tabs.DataBind()  End IfEnd Sub

Security.vbのIsInRole()は、次のように、各ページのラベルを参照する権限があるかどうかを確認します.

Public Shared Function IsInRole(ByVal role As String) As Boolean  Return HttpContext.Current.User.IsInRole(role)End Function

次はDesktopDefault.aspxは各モジュールを表示する、ポータルサイトXMLのファイル設定に従って、この選択ページに署名するページのモジュール(.ascx)を左、中間、右のレイアウト、DesktopDefaultに追加する.aspxの関連プログラムは以下の通りである:

Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init  ' Context  (HttpContext.Current.Items("PortalSettings"))  PortalSettings  (      )  Dim _portalSettings As PortalSettings = CType(HttpContext.Current.Items("PortalSettings"),   PortalSettings)  '                   ,           AccessDenied.aspx,   _portalSettings.ActiveTab.AuthorizedRoles = "All Users;"        If PortalSecurity.IsInRoles(_portalSettings.ActiveTab.AuthorizedRoles) = False Then    Response.Redirect("~/Admin/AccessDenied.aspx")  End If  '                  (SignIn.ascx)          If Request.IsAuthenticated = False And _portalSettings.ActiveTab.TabIndex = 0 Then    LeftPane.Controls.Add(Page.LoadControl("~/DesktopModules/SignIn.ascx"))    LeftPane.Visible = True  End If  '      XML    ,                ,   ,        If _portalSettings.ActiveTab.Modules.Count > 0 Then    Dim _moduleSettings As ModuleSettings    For Each _moduleSettings In _portalSettings.ActiveTab.Modules      Dim parent As Control = Page.FindControl(_moduleSettings.PaneName)      '                  user control instance,               If _moduleSettings.CacheTime = 0 Then        Dim portalModule As PortalModuleControl = CType(Page.LoadControl        (_moduleSettings.DesktopSrc), PortalModuleControl)        portalModule.PortalId = _portalSettings.PortalId        portalModule.ModuleConfiguration = _moduleSettings        parent.Controls.Add(portalModule)      Else        Dim portalModule As New CachedPortalModuleControl()        portalModule.PortalId = _portalSettings.PortalId        portalModule.ModuleConfiguration = _moduleSettings        parent.Controls.Add(portalModule)      End If      '               parent.Controls.Add(New LiteralControl("<" + "br" + ">"))      parent.Visible = True    Next _moduleSettings  End IfEnd Sub

楽しかった?


Portal Starter Kitダウンロード

Portal Starter Kit英語版ソフトは、オリジナルコードを含む以下のURLから無料でダウンロードおよび使用できます:
http://www.asp.net/Default.aspx?tabindex=9&tabid=47


ASP.NET Starter Kit中国語版

ASP.NET Starter Kit中国語版ソフトは「MSDNダウンロード専用区」まで、分次無料ダウンロードと使用:
http://www.microsoft.com/taiwan/msdn/downloads/default.htm


またはMSDN Subscriptionを介して付属する.NETエンタープライズWebサイト錦嚢は、すべての中国語版エントリースイートとアーキテクチャホワイトペーパーを一度に取得します.関連項目:
http://www.microsoft.com/taiwan/msdn/promo/







Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=165122