私は最近、MCMS 2002(Wordpressに移行)からコンテンツページをエクスポートする同様のプロセスを行ってきました。
これは100%正しいデータ取得方法ではありませんが、それは私のために働いています。
ここでは、データベースからページコンテンツを取得するために取ったプロセスを示します。すでにほとんどのデータを格納したテーブルがNode
とNodePlaceholderContent
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から移行している他の人に役立つことを望みます。