我在公司用WSS V2建了個人Portal,用來放工作日誌、自製元件的參考文件/FAQ,以及日常管理用的簡單表單等。趁著過年主機升級,順勢將WSS V2升級到WSS V3,然後將幾個常用的重大清單搬至新機,至於一些只有自己在用的舊內容就先擱著,日後再說。

花了一天多搬搬弄弄,以下是我的心得:

1.WSS V2的清單範本(List Template)是將清單(含內容)搬到另一台的好方法,但V2的List Template不能拿到V3用,而V2雖可以就地昇級(In-Place Upgrade)成WSS V3,但因為不想直接拿舊站台開刀(怕萬一搞壞連V2都沒得用),又懶得複製一個環境來試,所以我沒嘗試V2->V3的昇級。

2.搬清單,我選擇的方法是先將V2清單轉成Excel,再用它在V3中建立成List(建立新清單時,可以選擇由Excel建立)。有些欄位資料需要手工修改,可以透過T-SQL搞定,例如: V2轉Excel時會保留RichText,建在V3時,字型、大小會走樣,所以我用以下的語法,去舊DB抄原文過來,同理,要將修改日期與原清單中的項目一致,也可如法砲製。
update AllUserData
set ntext2=W2.ntext2
from AllUserData W3,WSSData.dbo.UserData W2
where W3.nvarchar1=W2.nvarchar1
and W3.tp_listid='37FFF135-B94B-4AF7-9193-8F9503A95F09'
and W2.tp_ListId='3721B173-EC96-42A7-B663-F7261BDC8334'

3.V3比V2更容易客製化! 舉個例子來說,以前為了要在NewForm.aspx中讀到登入使用者姓名,不知白了多少頭髮: 由於NewForm.aspx中不允許加上Server-Side的Code,所以我寫了獨立的UserInfo.aspx取得使用者資料,NewForm.aspx中則用IFrame嵌入UserInfo.aspx,再透過Javascript跨Frame讀取使用者姓名,呼~~~
V3的web.config中允許我們開放ASPX中可以加入Server-Side Code:
<PageParserPaths>
<PageParserPath VirtualPath="/Lists/List/NewForm.aspx" CompilationMode="Always" AllowServerSideScript="true" />
</PageParserPaths>
解除封印後,我們只要寫一行Code就搞定收工!
<script type="text/javascript">
document.all("userName").value = '<% = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss ") + SPControl.GetContextWeb(Context).CurrentUser.Name %>';
...
</script>


Comments

# by 小熊子

可不可以有更好的潛盾機呀~可以升級 v2 list -> v3 …我有好多要搬,快哭出來了 :(

# by Steve

沒想到相隔8年, 仍然為了在SharePoint 2013上顯示使用者工號而找到黑大這一篇!!! 所有google到的資訊都指出必須加上<PageParserPath>的設定解除封印 但也google到許多人提問在2013上此招無效! 正確的說, 只有VirtualPath="/*" 有效, 只要改成 VirtualPath="/abc/xyz/info.aspx" 都仍然被擋住 有兩個懷疑的方向, 一個是增加了其他設定需要調整, 但這不太合理, 因為最寬鬆也最危險的/*反而可以執行 第二個懷疑可能是WSS底層的virtual path不知道偷偷轉到哪裡去了, 所以virtual path怎麼設定都不對 看來需要回頭用黑大在V2使用的方法, 用iFrame嵌入其他頁面來顯示了

Post a comment