SharePoint>カスタムページライブラリ&ページレイアウト
-
05-07-2019 - |
質問
サイト定義内にカスタムコンテンツタイプとページレイアウトがすべて含まれるカスタムページライブラリがあります。
期待どおりに動作します。私が回避できない唯一のことは、stsadmを介してpage-lib、ctype、page-layoutを使用してソリューションをアップグレードすると、page-layoutを除くすべてが更新されることです。
ctypeの新しいフィールド->問題ない page-libのビューの変更->問題ありません
更新されたPageLayout->エラー
ページレイアウトセクション:
<!-- specific page-layout to display LKW data -->
<File Url="CustomPage.aspx" Type="GhostableInLibrary" IgnoreIfAlreadyExists="TRUE" >
<Property Name="Title" Value="$Resources:CustomLayouts,Title;" />
<Property Name="MasterPageDescription"
Value="$Resources:cmscore,PageLayout_BlankWebPartPage_Description;" />
<Property Name="ContentType"
Value="$Resources:cmscore,contenttype_pagelayout_name;" />
<Property Name="PublishingPreviewImage"
Value="~SiteCollection/_catalogs/masterpage/$Resources:core,Culture;/Preview Images/BlankWebPartPage.png, ~SiteCollection/_catalogs/masterpage/$Resources:core,Culture;/Preview Images/BlankWebPartPage.png" />
<Property Name="PublishingAssociatedContentType"
Value=";#$Resources:FieldsCTypes,cTypeDisplayName;;#0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF3900D38AAFB8072F441984BC947D49503947;#" />
</File>
onet.xmlの関連セクション:
<Module Name="Home" Url="$Resources:cmscore,List_Pages_UrlName;Custom" Path="">
<File Url="Default.aspx" Type="GhostableInLibrary" IgnoreIfAlreadyExists="TRUE">
<Property Name="Title"
Value="$Resources:Layouts,DisplayName;" />
<Property Name="ContentType"
Value="$Resources:cmscore,contenttype_welcomepage_name;"/>
<Property Name="PublishingPageLayout"
Value="~SiteCollection/_catalogs/masterpage/CustomPage.aspx, $Resources:PalfingerPlatformsOrderRoot,LKWpageDefaultTitle;" />
<Property Name="PublishingPageContent"
Value="" />
</File>
</Module>
奇妙なことは、ページライブラリを持たないページレイアウトがある場合、ページレイアウトを更新できることです。 この問題は、カスタムページライブラリ内でカスタムページレイアウトを使用している場合にのみ発生します。
Google検索をいくつか行ってヒントを見つけました-問題は、ページレイアウトがゴースト化されていないことです。 これを小さなサンプルコードで確認しました:
SPFile file = folder.Files["Default.aspx"];
if (file.CustomizedPageStatus == SPCustomizedPageStatus.Customized)
{
file.RevertContentStream();
}
コードの実行後、ページレイアウトがアップグレードされ、新しいページレイアウトが使用されます。
問題は、これが私にとって本当の解決策ではないということです。 site-defを使用した1000個のサイトコレクション。およびページレイアウト。 それらすべてを更新するのは非常に苦痛です。誰かがこれの解決策を知っていますか?
解決
1つのことについてコメントしたいと思います。 IgnoreIfAlreadyExists =&quot; TRUE&quot;のように見えます。このリンクを参照すると、値が元に戻っている可能性があります。 FALSEにすると役立つはずです。
<File Url="CustomPage.aspx" Type="GhostableInLibrary" IgnoreIfAlreadyExists="TRUE" >