將經典頁面轉換成現代客戶端頁面
部落格地址:http://blog.csdn.net/FoxDave
經典SharePoint網站往往都是經典頁面如wiki頁面、web部件頁面,這些頁面無法通過現代化介面展示。但是經典網站卻可以承載現代化客戶端頁面,本篇就是介紹如何這樣做。在我們最大化使用現代化列表和庫的介面、將網站連線到Office 365組之後,把頁面轉換為現代化客戶端頁面是我們最後的任務。
SharePoint PnP現代化框架 (Nuget,source code)支援頁面的轉換,我們將在下面進行講解。
重要資訊:SharePoint PnP現代化框架目前是預覽版,如果遇到任何問題請在PnP Tools GitHub issue list提出。
開始之前
預設情況下現代化網站頁面功能在大多數網站是啟用的,但是可能後來被關閉了。如果是這種情況,掃描工具會告訴我們哪些網站關閉了現代化頁面功能。修復這個問題可以使用下面的PnP中示例的PowerShell指令碼:
$minimumVersion = New-Object System.Version("2.24.1803.0")
if (-not (Get-InstalledModule -Name SharePointPnPPowerShellOnline -MinimumVersion $minimumVersion -ErrorAction Ignore))
{
Install-Module SharePointPnPPowerShellOnline -MinimumVersion $minimumVersion -Scope CurrentUser
}
Import-Module SharePointPnPPowerShellOnline -DisableNameChecking -MinimumVersion $minimumVersion
Connect-PnPOnline -Url "<your web url>"
# Enable modern page feature
Enable-PnPFeature -Identity "B6917CB1-93A0-4B97-A84D-7CF49975D4EC" -Scope Web -Force
頁面轉換解決方案概述
下面的圖片分4個步驟解釋了頁面轉換過程:
1. 在開始的時候我們需要告訴轉換引擎我們想要如何轉換頁面,這是通過提供一個頁面轉換模型操作的。該模型是一個XML檔案,描述了每個經典web部件需要對映成等價的現代化web部件。每個經典web部件包含一個關於相關屬性和對映資訊的列表。
2. 下一步是分析我們想要轉換的頁面:轉換引擎會將頁面分解為web部件的集合 (wiki文字會分解為一個或多個wiki文字web部件)並嘗試檢測使用的佈局。
3. 從步驟2的分析中獲得的資訊對於將web部件對映為現代化等價的內容還有些不足,因此在本步驟中我們將通過呼叫函式來增強我們獲得的資訊:這些函式使用步驟2中獲得的屬性,基於步驟2中輸入的屬性來生成新的屬性。本步驟結束後我們就有了所有需要的資訊去對映web部件,除此之外我們需要呼叫定義選擇器去了解我們需要哪個對映,免得一個經典web部件能夠對映到多個客戶端配置。
4. 最後一個步驟就是建立並配置客戶端頁面了,然後將對映的現代化客戶端web部件新增上去。
針對.NET開發者的頁面轉換快速開始
頁面轉換引擎是用.NET構建的,通過nuget包發行。在我們將這個包新增到解決方案時,可以看到兩個額外的檔案被新增到了解決方案中。
webpartmapping.xml和webpartmapping_latestfrompackage.xml表示描述如何轉換的轉換模型。我們往往會根據我們的需要對webpartmapping.xml檔案進行調整,例如對我們自己的web部件新增額外的對映。如果在之後我們安裝了更新版本的nuget包,我們的webpartmapping.xml檔案預設不會被覆蓋,但是會覆蓋webpartmapping_latestfrompackage.xml。因此我們可以使用這個檔案來對我們自己的對映跟最新的既有對映進行比較,並進行需要的修改。
我們現在可以使用下面的來自Modernization.PageTransformation sample on GitHub的程式碼來在給定的網站中轉換所有頁面。
string siteUrl = "https://contoso.sharepoint.com/sites/mytestsite";
string userName = "joe@contoso.onmicrosoft.com";
AuthenticationManager am = new AuthenticationManager();
using (var cc = am.GetSharePointOnlineAuthenticatedContextTenant(siteUrl, userName, GetSecureString("Password")))
{
var pageTransformator = new PageTransformator(cc);
var pages = cc.Web.GetPages();
foreach (var page in pages)
{
PageTransformationInformation pti = new PageTransformationInformation(page)
{
// If target page exists, then overwrite it
Overwrite = true,
};
try
{
Console.WriteLine($"Transforming page {page.FieldValues["FileLeafRef"]}");
pageTransformator.Transform(pti);
}
catch(ArgumentException ex)
{
Console.WriteLine($"Page {page.FieldValues["FileLeafRef"]} could not be transformed: {ex.Message}");
}
}
}
使用PowerShell快速開始頁面轉換
頁面轉換引擎也能在PowerShell中使用。它允許引擎在網站現代化指令碼中進行整合,除了頁面轉換還做一些其他的如安裝解決方案、將網站連線到Office 365組、應用租戶品牌等事情。下面的指令碼顯示瞭如何使用PowerShell呼叫轉換引擎。
function Use-PnPModernizationFramework
{
param(
[string] $PathToModernizationBinaries
)
begin
{
}
process
{
Add-Type -Path "$PathToModernizationBinaries\SharePointPnP.Modernization.Framework.dll"
}
end
{
return $PathToModernizationBinaries
}
}
function Invoke-PnPModernizationPageTransformation
{
param(
[string] $PathToModernizationBinaries,
[string] $WebPartMappingFile = $null,
$Page,
[bool] $Overwrite = $false,
[bool] $HandleWikiImagesAndVideos = $true,
[bool] $ReplaceHomePageWithDefaultHomePage = $false,
[bool] $TargetPageTakesSourcePageName = $false
)
begin
{
}
process
{
[bool] $transformOK = $true
try
{
# Create the PageTransformationInformation object and populate it
$pageTransformationInformation = New-Object -TypeName SharePointPnP.Modernization.Framework.Transform.PageTransformationInformation -ArgumentList $Page
$pageTransformationInformation.Overwrite = $Overwrite
$pageTransformationInformation.HandleWikiImagesAndVideos = $HandleWikiImagesAndVideos
$pageTransformationInformation.ReplaceHomePageWithDefaultHomePage = $ReplaceHomePageWithDefaultHomePage
$pageTransformationInformation.TargetPageTakesSourcePageName = $TargetPageTakesSourcePageName
# Instantiate the page transformator
$pageTransformator = $null
if ($WebPartMappingFile -ne "")
{
$pageTransformator = New-Object -TypeName SharePointPnP.Modernization.Framework.Transform.PageTransformator -ArgumentList $Page.Context, "$WebPartMappingFile"
}
else
{
$pageTransformator = New-Object -TypeName SharePointPnP.Modernization.Framework.Transform.PageTransformator -ArgumentList $Page.Context, "$PathToModernizationBinaries\webpartmapping.xml"
}
# Transform
$pageTransformator.Transform($pageTransformationInformation)
}
catch [Exception]
{
Write-Host $_.Exception.Message -ForegroundColor Red
$transformOK = $false
}
}
end
{
return $transformOK
}
}
#######################################################
# MAIN section #
#######################################################
# variables
$CAMLQueryByExtension = "<View Scope='Recursive'><Query><Where><Contains><FieldRef Name='File_x0020_Type'/><Value Type='text'>aspx</Value></Contains></Where></Query></View>"
$CAMLQueryByExtensionAndName = "<View Scope='Recursive'><Query><Where><And><Contains><FieldRef Name='File_x0020_Type'/><Value Type='text'>aspx</Value></Contains><BeginsWith><FieldRef Name='FileLeafRef'/><Value Type='text'>{0}</Value></BeginsWith></And></Where></Query></View>"
$binaryFolder = "C:\github\BertPnPTools\Solutions\SharePoint.Modernization\SharePointPnP.Modernization.Framework\bin\Debug"
# Load the SharePoint Modernization framework
Use-PnPModernizationFramework -PathToModernizationBinaries $binaryFolder
# Connect to site
Connect-PnPOnline -Url https://bertonline.sharepoint.com/sites/espctest2 -Verbose
# Get all pages
# [string] $query = $CAMLQueryByExtension
# Get specific aspx page(s)
[string] $query = [string]::Format($CAMLQueryByExtensionAndName, "contentbyquery.aspx")
# Load the pages
$pages = Get-PnPListItem -List SitePages -Query $query
# Modernize the found pages
foreach($page in $pages)
{
Write-Host "Modernizing " $page.FieldValues["FileLeafRef"] "..."
if (Invoke-PnPModernizationPageTransformation -Page $page -WebPartMappingFile "$binaryFolder\webpartmapping.xml" -Overwrite $true)
{
Write-Host "Done!" -ForegroundColor Green
}
}
相關文章
- 客戶端內嵌Vue頁面客戶端Vue
- 前端學習筆記:通過H5頁面呼叫不同客戶端的原生頁面前端筆記H5客戶端
- HTML頁面轉換為Sharepoint母版頁(實戰)HTML
- js頁面跳轉的問題(跳轉到父頁面、最外層頁面、本頁面)JS
- 頁面資料賦值轉換賦值
- 網頁SSH客戶端的實現網頁客戶端
- 學習和配置頁面轉換模型模型
- 經典面試題:從 URL 輸入到頁面展現到底發生什麼?面試題
- QQ音樂Android客戶端Web頁面通用效能優化實踐Android客戶端Web優化
- PHP中實現頁面跳轉PHP
- WPF手動實現切換頁面
- Flutter頁面保活及保持頁面跳轉位置Flutter
- Flutter頁面跳轉Flutter
- vue頁面跳轉Vue
- react跳轉url,跳轉外鏈,新頁面開啟頁面React
- 頭條Android客戶端開發面經分享Android客戶端
- 重定向到登入頁面後跳轉原頁面
- nginx 設定 404 500 頁面跳轉到指定頁面Nginx
- 提升現代web app中的頁面效能WebAPP
- 2024-05-03 uni跳轉頁面a成功後會立即再跳轉到頁面b,導致無法展現頁面a ==》頁面a業務邏輯沒捋清楚
- 實現不同頁面不同頁首
- router跳轉page頁面
- JavaScript 頁面跳轉效果JavaScript
- Flutter:如何跳轉頁面?Flutter
- asyUI分頁中,如何實現頁面跳轉,再返回時,...UI
- 解決手機端和 PC 端跳轉不同頁面
- 404頁面自動跳轉到首頁
- 使用 Python 旋轉PDF頁面、或調整PDF頁面順序Python
- 如何處理手機端和 PC 端跳轉不同頁面
- html頁面轉PDF的功能HTML
- JavaScript頁面跳轉程式碼JavaScript
- 頁面旋轉動畫效果動畫
- 使用html2canvas將頁面轉成圖,用canvas2image下載HTMLCanvas
- 如何判斷頁面是pc端還是移動端,進入不同的頁面
- 成品直播原始碼,html頁面點選按鈕實現頁面跳轉的兩種方法原始碼HTML
- uni-APP 新增頁面實現路由跳轉APP路由
- 特定頁面出現 BUG
- CSS實現頁面切換時的滑動效果CSS