StaticSiteMapProvider.BuildSiteMap メソッドとは? わかりやすく解説

Weblio 辞書 > コンピュータ > .NET Framework クラス ライブラリ リファレンス > StaticSiteMapProvider.BuildSiteMap メソッドの意味・解説 

StaticSiteMapProvider.BuildSiteMap メソッド

メモ : このメソッドは、.NET Framework version 2.0新しく追加されたものです。

派生クラスオーバーライドされた場合は、サイト マップ情報永続ストレージから読み込みメモリ内で構築します

名前空間: System.Web
アセンブリ: System.Web (system.web.dll 内)
構文構文

Public MustOverride Function
 BuildSiteMap As SiteMapNode
Dim instance As StaticSiteMapProvider
Dim returnValue As SiteMapNode

returnValue = instance.BuildSiteMap
public abstract SiteMapNode BuildSiteMap ()
public:
virtual SiteMapNode^ BuildSiteMap () abstract
public abstract SiteMapNode BuildSiteMap ()
public abstract function BuildSiteMap () :
 SiteMapNode

戻り値
サイト マップ ナビゲーション構造ルート SiteMapNode。

解説解説

BuildSiteMap メソッドは、StaticSiteMapProvider クラス唯一の抽象メンバです。BuildSiteMap メソッドは、サイト マップ ノード永続ストレージから読み込んで構築するために呼び出されます。ページ同時に複数要求されると、サイト マップ情報読み込み間接的に複数呼び出されることになるため、BuildSiteMap メソッド実装する場合は、スレッド セーフであることを確認してください

継承時の注意 BuildSiteMap メソッドオーバーライドする場合サイト マップ プロバイダ追加する SiteMapNode オブジェクトURL正規化してください。これによって、サイト マップ ノードURL指定絶対仮想パスでもアプリケーション相対パスでも、FindSiteMapNode メソッドサイト マップ ノード取得できます。AddNode メソッド使用するサイト マップ プロバイダ実装側は、サイト マップ プロバイダ代わりにURL をすべて正規化してから、SiteMapNode オブジェクト内部ハッシュ テーブル格納する必要がありますセキュリティ トリミング動作は、SiteMapProvider クラスStaticSiteMapProvider クラス実装用意されています。ただし、BuildSiteMap メソッドオーバーライドする場合は、セキュリティ トリミング派生クラスでも動作するよう、サイト マップ プロバイダ構築時に作成するすべての SiteMapNode オブジェクトについてRoles プロパティ設定する必要があります

メモ重要 :

BuildSiteMap メソッドは、FindSiteMapNode、GetChildNodes、および GetParentNode の各メソッド既定実装によって呼び出されます。BuildSiteMap メソッド派生クラスオーバーライドする場合サイト マップ データ読み込み1 度限定しそれ以降呼び出しでは制御がすぐに戻るようにしてください

使用例使用例

BuildSiteMap メソッド実装して Microsoft Access データベースからデータ取得しルート サイト マップ ノードの ChildNodes コレクション追加される SiteMapNode オブジェクト構築する方法次のコード例示します最後に、RootNode プロパティ呼び出し元に返されます。

このコード例は、StaticSiteMapProvider クラストピック取り上げているコード例一部分です。

' Build an in-memory representation from persistent
' storage, and return the root node of the site map.
Public Overrides Function
 BuildSiteMap() As SiteMapNode

    ' Since the SiteMap class is static, make sure that it is
    ' not modified while the site map is built.
    SyncLock Me

        ' If there is no initialization, this method is being
        ' called out of order.
        If Not IsInitialized Then
            Throw New Exception("BuildSiteMap
 called incorrectly.")
        End If

        ' If there is no root node, then there is no site map.
        If aRootNode Is Nothing
 Then
            ' Start with a clean slate
            Clear()

            ' Select the root node of the site map from Microsoft Access.
            Dim rootNodeId As Integer
 = -1

            If accessConnection.State = ConnectionState.Closed
 Then
                accessConnection.Open()
            End If
            Dim rootNodeCommand As New
 OleDbCommand("SELECT nodeid, url, name FROM SiteMap WHERE parentnodeid
 IS NULL", accessConnection)
            Dim rootNodeReader As OleDbDataReader
 = rootNodeCommand.ExecuteReader()

            If rootNodeReader.HasRows Then
                rootNodeReader.Read()
                rootNodeId = rootNodeReader.GetInt32(0)
                ' Create a SiteMapNode that references the current StaticSiteMapProvider.
                aRootNode = New SiteMapNode(Me,
 rootNodeId.ToString(), rootNodeReader.GetString(1), rootNodeReader.GetString(2))
            Else
                Return Nothing
            End If
            rootNodeReader.Close()
            ' Select the child nodes of the root node.
            Dim childNodesCommand As New
 OleDbCommand("SELECT nodeid, url, name FROM SiteMap WHERE parentnodeid
 = ?", accessConnection)
            Dim rootParam As New
 OleDbParameter("parentid", OleDbType.Integer)
            rootParam.Value = rootNodeId
            childNodesCommand.Parameters.Add(rootParam)

            Dim childNodesReader As OleDbDataReader
 = childNodesCommand.ExecuteReader()

            If childNodesReader.HasRows Then

                Dim childNode As SiteMapNode
 = Nothing
                While childNodesReader.Read()
                    childNode = New SiteMapNode(Me,
 _
                    childNodesReader.GetInt32(0).ToString(), _
                    childNodesReader.GetString(1), _
                    childNodesReader.GetString(2))

                    ' Use the SiteMapNode AddNode method to add
                    ' the SiteMapNode to the ChildNodes collection.
                    AddNode(childNode, aRootNode)
                End While
            End If

            childNodesReader.Close()
            accessConnection.Close()
        End If
        Return aRootNode
    End SyncLock

End Function 'BuildSiteMap
// Build an in-memory representation from persistent
// storage, and return the root node of the site map.
public override SiteMapNode BuildSiteMap() {

    // Since the SiteMap class is static, make sure that it is
    // not modified while the site map is built.
    lock(this) {

        // If there is no initialization, this method is being
        // called out of order.
        if (! IsInitialized) {
            throw new Exception("BuildSiteMap called incorrectly.");
        }

        // If there is no root node, then there is no site map.
        if (null == rootNode) {
            // Start with a clean slate
            Clear();

            // Select the root node of the site map from Microsoft Access.
            int rootNodeId = -1;

            if (accessConnection.State == ConnectionState.Closed)
                accessConnection.Open();
            OleDbCommand rootNodeCommand =
                new OleDbCommand("SELECT nodeid, url, name
 FROM SiteMap WHERE parentnodeid IS NULL",
                                 accessConnection);
            OleDbDataReader rootNodeReader = rootNodeCommand.ExecuteReader();

            if(rootNodeReader.HasRows) {
                rootNodeReader.Read();
                rootNodeId = rootNodeReader.GetInt32(0);
                // Create a SiteMapNode that references the current
 StaticSiteMapProvider.
                rootNode   = new SiteMapNode(this
,
                                             rootNodeId.ToString(),
                                             rootNodeReader.GetString(1),
                                             rootNodeReader.GetString(2));

            }
            else return null;

            rootNodeReader.Close();
            // Select the child nodes of the root node.
            OleDbCommand childNodesCommand =
                new OleDbCommand("SELECT nodeid, url, name
 FROM SiteMap WHERE parentnodeid = ?",
                                 accessConnection);
            OleDbParameter rootParam = new OleDbParameter("parentid"
,
 OleDbType.Integer);
            rootParam.Value = rootNodeId;
            childNodesCommand.Parameters.Add(rootParam);

            OleDbDataReader childNodesReader = childNodesCommand.ExecuteReader();

            if (childNodesReader.HasRows) {

                SiteMapNode childNode = null;
                while(childNodesReader.Read()) {
                    childNode =  new SiteMapNode(this
,
                                                 childNodesReader.GetInt32(0).ToString()
,
                                                 childNodesReader.GetString(1),
                                                 childNodesReader.GetString(2));

                    // Use the SiteMapNode AddNode method to add
                    // the SiteMapNode to the ChildNodes collection.
                    AddNode(childNode, rootNode);
                }
            }

            childNodesReader.Close();
            accessConnection.Close();
        }
        return rootNode;
    }
}
// Build an in-memory representation from persistent
// storage, and return the root node of the site map.
virtual SiteMapNode ^ BuildSiteMap() override
{
   // Since the SiteMap class is static, make sure that it is
   // not modified while the site map is built.
   System::Threading::Monitor::Enter( this );
   try
   {
      
      // If there is no initialization, this method is being
      // called out of order.
      if (  !IsInitialized )
      {
         throw gcnew Exception( "BuildSiteMap called incorrectly." );
      }
      
      // If there is no root node, then there is no site map.
      if ( nullptr == rootNode )
      {
         
         // Start with a clean slate
         Clear();
         
         // Select the root node of the site map from Microsoft Access.
         int rootNodeId = -1;
         if ( accessConnection->State == ConnectionState::Closed
 )
            accessConnection->Open();
         
         OleDbCommand^ rootNodeCommand = gcnew OleDbCommand
            ("SELECT nodeid, url, name FROM SiteMap WHERE parentnodeid IS NULL",
 accessConnection);
         OleDbDataReader^ rootNodeReader = rootNodeCommand->ExecuteReader();
         if ( rootNodeReader->HasRows )
         {
            rootNodeReader->Read();
            rootNodeId = rootNodeReader->GetInt32( 0 );
            
            // Create a SiteMapNode that references the current StaticSiteMapProvider.
            rootNode = gcnew SiteMapNode(this, rootNodeId.ToString(),
 
               rootNodeReader->GetString( 1 ),rootNodeReader->GetString( 2
 ));
         }
         else
            return nullptr;
         rootNodeReader->Close();
         
         // Select the child nodes of the root node.
         OleDbCommand^ childNodesCommand = gcnew OleDbCommand
            ("SELECT nodeid, url, name FROM SiteMap WHERE parentnodeid = ?",
 accessConnection);
         OleDbParameter^ rootParam = gcnew OleDbParameter( "parentid",
 OleDbType::Integer);
         rootParam->Value = rootNodeId;
         childNodesCommand->Parameters->Add( rootParam );
         OleDbDataReader^ childNodesReader = childNodesCommand->ExecuteReader();
         if ( childNodesReader->HasRows )
         {
            SiteMapNode ^ childNode = nullptr;
            while ( childNodesReader->Read() )
            {
               childNode = gcnew SiteMapNode( this, 
                   System::Convert::ToString(childNodesReader->GetInt32( 0 ))
,
                  childNodesReader->GetString( 1 ),
                  childNodesReader->GetString( 2 ) 
               );
               // Use the SiteMapNode AddNode method to add
               // the SiteMapNode to the ChildNodes collection.
               AddNode( childNode, rootNode );
            }
         }
         childNodesReader->Close();
         accessConnection->Close();
      }
      return rootNode;
   }
   finally
   {
      System::Threading::Monitor::Exit( this );
   }

}

// Build an in-memory representation from persistent
// storage, and return the root node of the site map.
public SiteMapNode BuildSiteMap() throws Exception
{
    // Since the SiteMap class is static, make sure that it is
    // not modified while the site map is built.
    synchronized (this)
    {
        // If there is no initialization, this method is being
        // called out of order.
        if (!get_IsInitialized())
        {
            throw new Exception("BuildSiteMap called incorrectly.");
        }
        // If there is no root node, then there is no site map.
        if (null == rootNode)
        {
            // Start with a clean slate
            Clear();
            // Select the root node of the site map from Microsoft Access.
            int rootNodeId = -1;

            if (accessConnection.get_State().Equals(ConnectionState.Closed))
            {
                accessConnection.Open();
            }

            OleDbCommand rootNodeCommand = new OleDbCommand(
                "SELECT nodeid, url, name FROM SiteMap WHERE "
                + "parentnodeid IS NULL", accessConnection);
            OleDbDataReader rootNodeReader = rootNodeCommand.ExecuteReader();

            if (rootNodeReader.get_HasRows())
            {
                rootNodeReader.Read();
                rootNodeId = rootNodeReader.GetInt32(0);
                // Create a SiteMapNode that references the current
 
                // StaticSiteMapProvider.
                rootNode = new SiteMapNode(this
,
                    ((Int32)rootNodeId).ToString(), rootNodeReader.
                    GetString(1), rootNodeReader.GetString(2));
            }
            else
            {
                return null;
            }
            rootNodeReader.Close();
            // Select the child nodes of the root node.
            OleDbCommand childNodesCommand = new OleDbCommand(
                "SELECT nodeid, url, name FROM SiteMap WHERE "
                + "parentnodeid = ?", accessConnection);
            OleDbParameter rootParam = new OleDbParameter("parentid"
,
                OleDbType.Integer);
            rootParam.set_Value((Int32)rootNodeId);
            childNodesCommand.get_Parameters().Add(rootParam);

            OleDbDataReader childNodesReader = childNodesCommand.
                ExecuteReader();

            if (childNodesReader.get_HasRows())
            {
                SiteMapNode childNode = null;
                while (childNodesReader.Read())
                {
                    childNode = new SiteMapNode(this
,
                        Convert.ToString(childNodesReader.GetInt32(0)), 
                        childNodesReader.GetString(1),
                        childNodesReader.GetString(2));
                    // Use the SiteMapNode AddNode method to add
                    // the SiteMapNode to the ChildNodes collection.
                    AddNode(childNode, rootNode);
                }
            }

            childNodesReader.Close();
            accessConnection.Close();
        }
        return rootNode;
    }
} //BuildSiteMap

protected SiteMapNode GetRootNodeCore()
{
    return null;
} //GetRootNodeCore
プラットフォームプラットフォーム
バージョン情報バージョン情報
参照参照
関連項目
StaticSiteMapProvider クラス
StaticSiteMapProvider メンバ
System.Web 名前空間
SiteMapProvider.RootNode プロパティ
Initialize
Clear



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

StaticSiteMapProvider.BuildSiteMap メソッドのお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



StaticSiteMapProvider.BuildSiteMap メソッドのページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
日本マイクロソフト株式会社日本マイクロソフト株式会社
© 2024 Microsoft.All rights reserved.

©2024 GRAS Group, Inc.RSS