2011-07-12 14 views
0

Sitecore Webサイトで使用するために、Microsoft Content Management Server(MCMS)データベースから相当量のデータ(> 1000ページ)を抽出する必要があります。Microsoftコンテンツ管理サーバー(MCMS)データベースからデータを抽出する方法

  1. が新しい単純化されたデータベースにデータを移行し、新しいウェブサイトでその 情報を表示:

    私は、主に2つのオプションを見ることができます。

  2. MCMSソリューションをSharePointに変換し、Sitecoreで利用可能なSharePoint コネクタモジュールを使用して、この情報を表示します。

私は将来的には、データ/コンテンツを管理するために、より良い検索を可能にするために、単純なSQL Serverデータベースにこの情報を格納することを好むのSharePointを使用する予定はありませんように第1のルートを下ることを好むだろう。

私は質問にデータベースを見て、私が興味があると思いメインテーブルはNodeNodePlaceholderNodePlaceholderContentですが、私が期待するものを見つけるのに苦労していますと思いました。そこにいる誰かが私のためにこのデータベースのスキーマについて少し説明してもらえますか?または、この方法でデータを移行しようとすると問題が生じるでしょうか?

答えて

5

私は最近、MCMS 2002(Wordpressに移行)からコンテンツページをエクスポートする同様のプロセスを行ってきました。

これは100%正しいデータ取得方法ではありませんが、それは私のために働いています。

ここでは、データベースからページコンテンツを取得するために取ったプロセスを示します。すでにほとんどのデータを格納したテーブルがNodeNodePlaceholderContent

1です見てきたように

Node表は、あなたがタイプ

主催の内容を表示することができます保持しているかのアイデアを取得するには
SELECT 
    [Type] 
    ,CASE [Type] 
     WHEN  1 THEN 'Server' 
     WHEN  4 THEN 'Channel' 
     WHEN  16 THEN 'Post/Page' 
     WHEN  64 THEN 'Resource Gallery' 
     WHEN 256 THEN 'Resource Gallery Item (images/documents)' 
     WHEN 16384 THEN 'Template Gallery' 
     WHEN 65536 THEN 'Template' END as [Description] 
    ,COUNT([Type]) as [Count] 
FROM  dbo.Node 
GROUP BY [Type] 
ORDER BY [Count] DESC 

2)ページ(および投稿、さらに下の記事をカバーしますが)タイプ= 16です...しかし、ただページ(やないポストを得るために)我々はIsShortcut = 0

SELECT * FROM dbo.Node WHERE [Type] = 16 AND IsShortcut = 0 
でフィルタリングする必要があります

3)私はApprovalStatus = 1

-- Get all published pages 
SELECT * 
FROM dbo.Node WHERE [Type] = 16 
AND IsShortcut = 0 
AND ApprovalStatus = 1 

4によってそのフィルタ、公表されたページを望んでいた)次に、(ユーザ名とによって変更され作成されたページを/決定)

-- Get published pages & author/editor 
SELECT 
    [page].Id 
    ,[page].NodeGuid 
    ,[page].Name 
    ,[created].Username as 'CreatedBy' 
    ,[page].CreatedWhen 
    ,[modified].Username as 'ModifiedBy' 
    ,[page].ModifiedWhen 
FROM  dbo.Node [page] 
-- add JOIN on created by user 
INNER JOIN dbo.ClientAccount [created] ON [created].UserId = [page].CreatedByUserId 
-- add JOIN on modified by user 
INNER JOIN dbo.ClientAccount [modified] ON [modified].UserId = [page].ModifiedByUserId 
WHERE [Type] = 16 
AND IsShortcut = 0 
AND ApprovalStatus = 1 

5)次に、階層に我々はこのクエリは、私はページがpのいずれかであることを知っているようNode.ParentGUID

SELECT 
    [page].Id 
    ,[page].NodeGuid 
    ,[page].Name 
    ,[pageParent].Name -- add page parent Name 
    ,[created].Username as 'CreatedBy' 
    ,[page].CreatedWhen 
    ,[modified].Username as 'ModifiedBy' 
    ,[page].ModifiedWhen 
FROM  dbo.Node [page] 
INNER JOIN dbo.ClientAccount [created] ON [created].UserId = [page].CreatedByUserId 
INNER JOIN dbo.ClientAccount [modified] ON [modified].UserId = [page].ModifiedByUserId 
-- add JOIN on Node using ParentGUID 
INNER JOIN dbo.Node [pageParent] ON [pageParent].NodeGUID = [page].ParentGUID 
WHERE [page].[Type] = 16 
AND [page].IsShortcut = 0 
AND [page].ApprovalStatus = 1 

を使用している場所を把握FoldersまたはArchive Folder

6という名前のノードはありません。 - そして、それはだ

  • Folders:)ページの親である場合は、別のレベルは(親の親を取得)

    SELECT 
        [page].Id 
        ,[page].NodeGuid 
        ,[page].Name 
        ,[pageParent].Name 
        ,[pageParent2].Name -- add parent of parent name 
        ,[created].Username as 'CreatedBy' 
        ,[page].CreatedWhen 
        ,[modified].Username as 'ModifiedBy' 
        ,[page].ModifiedWhen 
    FROM  dbo.Node [page] 
    INNER JOIN dbo.ClientAccount [created] ON [created].UserId = [page].CreatedByUserId 
    INNER JOIN dbo.ClientAccount [modified] ON [modified].UserId = [page].ModifiedByUserId 
    INNER JOIN dbo.Node [pageParent] ON [pageParent].NodeGUID = [page].ParentGUID 
    -- add another JOIN on Node using ParentGUID (parent of parent) 
    INNER JOIN dbo.Node [pageParent2] ON [pageParent2].NodeGUID = [pageParent].ParentGUID 
    WHERE [page].[Type] = 16 
    AND [page].IsShortcut = 0 
    AND [page].ApprovalStatus = 1 
    

    親の親はServer(ルートレベルである)ので、今、私の結論はでアップ行きますアクティブなページ

  • Archive Folder - そして、それは別のページの以前のリビジョン

私は唯一のアクティブなページは、私はJOINをするつもりたいですFolders親のみ

7.)ここでマークアップについて説明します。 MCMSテンプレートには、プレースホルダ領域が1つしかありませんでした。 NodePlaceholderテーブルには、テンプレートに複数のプレースホルダ領域がある場合に便利なプレースホルダの名前が示されます。簡単にするために私はNodePlaceholdercontentに参加するつもりです。

SELECT 
    [page].Id 
    ,[page].NodeGuid 
    ,[page].Name 
    /* remove parent names */ 
    ,[created].Username as 'CreatedBy' 
    ,[page].CreatedWhen 
    ,[modified].Username as 'ModifiedBy' 
    ,[page].ModifiedWhen 
    ,html.PropValue as 'HTML' -- add the markup 
FROM  dbo.Node [page] 
INNER JOIN dbo.ClientAccount [created] ON [created].UserId = [page].CreatedByUserId 
INNER JOIN dbo.ClientAccount [modified] ON [modified].UserId = [page].ModifiedByUserId 
-- change alias to "folders" 
INNER JOIN dbo.Node [folders] ON [folders].NodeGUID = [page].ParentGUID AND [folders].Name = 'Folders' 
-- join on PlaceholderContent to get the HTML 
-- this table will also have references to any static files contained in the page (such as images) so we filter those out by PropName = 'HTML' 
INNER JOIN dbo.NodePlaceholderContent html ON html.NodeId = [page].Id AND html.PropName = 'HTML' 
WHERE [page].[Type] = 16 
AND [page].IsShortcut = 0 
AND [page].ApprovalStatus = 1 

8))の相対パス。この時点で、私はページがシステム(すなわちである場所を特定しようとしているに少し捕まってしまったそうか、それはどのようなチャネルに住んでない、1 &の処理に戻って2、type = 16は、投稿またはページ(同じものではありませんが、関連しています)のいずれかです。だから私たちは、私たちのページをポストレコードにジョインして、パスを決定します。私は本当に道の残りの部分を取得するのに役立った(とNode.Type列挙型を識別)this excerpt from Microsoft Content Management Server 2002: a complete guideつまずいたいくつかのGoogle検索後

SELECT 
    [page].Id 
    ,[page].NodeGuid 
    ,[page].Name 
    ,[post].DisplayName as 'Title' -- add page Title from the post record 
    ,[pageParent].Name 
    ,[pageParent2].Name 
    ,[created].Username as 'CreatedBy' 
    ,[page].CreatedWhen 
    ,[modified].Username as 'ModifiedBy' 
    ,[page].ModifiedWhen 
    ,html.PropValue as 'HTML' 
FROM  dbo.Node [page] 
INNER JOIN dbo.ClientAccount [created] ON [created].UserId = [page].CreatedByUserId 
INNER JOIN dbo.ClientAccount [modified] ON [modified].UserId = [page].ModifiedByUserId 
INNER JOIN dbo.Node [folders] ON [folders].NodeGUID = [page].ParentGUID AND [folders].Name = 'Folders' 
INNER JOIN dbo.NodePlaceholderContent html ON html.NodeId = [page].Id AND html.PropName = 'HTML' 
-- join using followGUID to get the posting 
INNER JOIN dbo.Node [post] ON [post].FollowGUID = [page].NodeGUID 
WHERE [page].[Type] = 16 
AND [page].IsShortcut = 0 
AND [page].ApprovalStatus = 1 

9)今、最後のステップは、ポストの親を続けるためにありますいくつかのLEFT JOINSがParentGUIDチェーンを強化しています。このクエリは、LEFT JOINSを使用して階層を視覚的に表現します。さておき、私のタスクは、リソースギャラリーのコンテンツをエクスポート伴わなかった(画像/ドキュメントは/ etc)として

SELECT 
    CASE WHEN postParent9.Name IS NULL THEN '' ELSE postParent9.Name + ' > ' END + 
    CASE WHEN postParent8.Name IS NULL THEN '' ELSE postParent8.Name + ' > ' END + 
    CASE WHEN postParent7.Name IS NULL THEN '' ELSE postParent7.Name + ' > ' END + 
    CASE WHEN postParent6.Name IS NULL THEN '' ELSE postParent6.Name + ' > ' END + 
    CASE WHEN postParent5.Name IS NULL THEN '' ELSE postParent5.Name + ' > ' END + 
    CASE WHEN postParent4.Name IS NULL THEN '' ELSE postParent4.Name + ' > ' END + 
    CASE WHEN postParent3.Name IS NULL THEN '' ELSE postParent3.Name + ' > ' END + 
    CASE WHEN postParent2.Name IS NULL THEN '' ELSE postParent2.Name + ' > ' END + 
    CASE WHEN postParent1.Name IS NULL THEN '' ELSE postParent1.Name + ' > ' END + 
    page.Name as [Path] 
    ,page.Name + '.htm' as [PageName] 
    ,post.DisplayName as [PageTitle] 
    ,CASE page.[Type] 
     WHEN  1 THEN 'Server' 
     WHEN  4 THEN 'Channel' 
     WHEN  16 THEN 'Post/Page' 
     WHEN  64 THEN 'Resource Gallery' 
     WHEN 256 THEN 'Resource Gallery Item (images/documents)' 
     WHEN 16384 THEN 'Template Gallery' 
     WHEN 65536 THEN 'Template' END as [Type] 
    ,page.CreatedWhen as 'Created' 
    ,page.ModifiedWhen as 'Modified' 
    ,html.PropValue as 'HTML' 
FROM  dbo.Node page 
INNER JOIN dbo.Node folders ON folders.NodeGUID = page.ParentGUID AND folders.Name = 'Folders' 
INNER JOIN dbo.NodePlaceholderContent html ON html.NodeId = page.Id AND html.PropName = 'HTML' 
INNER JOIN dbo.Node post ON post.FollowGUID = page.NodeGUID AND post.IsShortcut = 1 
LEFT JOIN dbo.Node postParent1 ON postParent1.NodeGuid = post.ParentGUID 
LEFT JOIN dbo.Node postParent2 ON postParent2.NodeGuid = postParent1.ParentGUID 
LEFT JOIN dbo.Node postParent3 ON postParent3.NodeGuid = postParent2.ParentGUID 
LEFT JOIN dbo.Node postParent4 ON postParent4.NodeGuid = postParent3.ParentGUID 
LEFT JOIN dbo.Node postParent5 ON postParent5.NodeGuid = postParent4.ParentGUID 
LEFT JOIN dbo.Node postParent6 ON postParent6.NodeGuid = postParent5.ParentGUID 
LEFT JOIN dbo.Node postParent7 ON postParent7.NodeGuid = postParent6.ParentGUID 
LEFT JOIN dbo.Node postParent8 ON postParent8.NodeGuid = postParent7.ParentGUID 
LEFT JOIN dbo.Node postParent9 ON postParent9.NodeGuid = postParent8.ParentGUID 

しかし、あなたのように、これらの作品を必要としない場合、その上の良いスタートを得るためにここに十分な情報があるはずですよく

これは、MCMS 2002から移行している他の人に役立つことを望みます。

関連する問題