<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8847849020161444601</id><updated>2011-11-28T08:40:09.112+08:00</updated><category term='SOAP'/><category term='Speech Recognition'/><category term='Firefox'/><category term='Firebug'/><category term='Sphinx'/><category term='3D'/><category term='Sharepoint Designer'/><category term='Chrome'/><category term='Javascript'/><category term='Sharepoint'/><category term='Webpart'/><category term='Chart'/><category term='Cookies'/><category term='Archive'/><category term='Google'/><title type='text'>Share My Point</title><subtitle type='html'>My Learning Curve</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://share-my-point.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8847849020161444601/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://share-my-point.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Ben</name><uri>http://www.blogger.com/profile/09767997689019543948</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_CrIo67Onh0Y/SZmDTut8j7I/AAAAAAAAAU0/ibQw38Lrnig/S220/cute1.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>10</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8847849020161444601.post-5239758977331940591</id><published>2009-06-25T11:55:00.004+08:00</published><updated>2009-06-25T17:10:00.508+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sharepoint'/><title type='text'>於Sharepoint中使用window.onload</title><content type='html'>window.&lt;wbr&gt;onload是很多developer常用的技巧，&lt;wbr&gt;在網頁載入完畢後去執行javascript。&lt;br /&gt;你可能試過用相同的方法，於 tag中寫了window.onload 的function，好像這樣&lt;br /&gt;&lt;code&gt;window.onload = function(){&lt;br /&gt;     alert('Window is onload!!');&lt;br /&gt;}&lt;/code&gt;&lt;br /&gt;但在網頁載入完成後，卻沒有觸發到event，&lt;wbr&gt;為什麼會這樣的呢？&lt;br /&gt;原因是在 tag內有這個&lt;br /&gt;&lt;code&gt;onload="javascript:if (typeof(_spBodyOnLoadWrapper) != 'undefined') _spBodyOnLoadWrapper();"&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;那麼當你需要加window.onload function時要怎辦？&lt;br /&gt;其實_&lt;wbr&gt;spBodyOnLoadWrapper這個function會&lt;wbr&gt;執行Arry _&lt;wbr&gt;spBodyOnLoadFunctionNames中的fun&lt;wbr&gt;ction&lt;br /&gt;&lt;br /&gt;例子：&lt;br /&gt;&lt;code&gt;fucntion runMeDuringOnload(){&lt;br /&gt;     alert('I am onload');&lt;br /&gt;}&lt;br /&gt;_spBodyOnLoadFunctionNames.&lt;wbr&gt;push('runMeDuringOnload'); &lt;/code&gt;&lt;br /&gt;這樣就能執行&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8847849020161444601-5239758977331940591?l=share-my-point.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://share-my-point.blogspot.com/feeds/5239758977331940591/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://share-my-point.blogspot.com/2009/06/sharepointwindowonload.html#comment-form' title='32 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8847849020161444601/posts/default/5239758977331940591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8847849020161444601/posts/default/5239758977331940591'/><link rel='alternate' type='text/html' href='http://share-my-point.blogspot.com/2009/06/sharepointwindowonload.html' title='於Sharepoint中使用window.onload'/><author><name>Ben</name><uri>http://www.blogger.com/profile/09767997689019543948</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_CrIo67Onh0Y/SZmDTut8j7I/AAAAAAAAAU0/ibQw38Lrnig/S220/cute1.jpg'/></author><thr:total>32</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8847849020161444601.post-3164699277612371143</id><published>2009-05-20T17:51:00.013+08:00</published><updated>2009-05-20T18:34:26.168+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Firebug'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>網頁開發好幫手 - Firebug ，簡易使用教程</title><content type='html'>&lt;span style="font-weight: bold;"&gt;什麼是Firebug？&lt;/span&gt;&lt;br /&gt;Firebug是Firefox的一個附加元件(plug-in)，有著很多強大的功能，特別有助於網頁的開發。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;如何安裝Firebug？&lt;/span&gt;&lt;br /&gt;先到Firefox的附加元件下載頁，搜尋Firebug就能輕易找到。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_CrIo67Onh0Y/ShPS3aO-OaI/AAAAAAAAAXw/FR0B7KVyuDk/s1600-h/ScreenHunter_01+May.+20+17.42.gif"&gt;&lt;img style="cursor: pointer; width: 320px; height: 222px;" src="http://1.bp.blogspot.com/_CrIo67Onh0Y/ShPS3aO-OaI/AAAAAAAAAXw/FR0B7KVyuDk/s320/ScreenHunter_01+May.+20+17.42.gif" alt="" id="BLOGGER_PHOTO_ID_5337841832740927906" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;安裝完成後，可以於右下角找到一個「曱甴」的圖示，按下就能開啟Firebug的介面。開啟所有項目。(Cookie是另一附加元件的選項 - FireCookie)&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_CrIo67Onh0Y/ShPTWi-fyeI/AAAAAAAAAX4/yRjpSciLaO8/s1600-h/ScreenHunter_05+May.+20+17.50.gif"&gt;&lt;img style="cursor: pointer; width: 320px; height: 95px;" src="http://3.bp.blogspot.com/_CrIo67Onh0Y/ShPTWi-fyeI/AAAAAAAAAX4/yRjpSciLaO8/s320/ScreenHunter_05+May.+20+17.50.gif" alt="" id="BLOGGER_PHOTO_ID_5337842367663688162" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;開啟完成後，你就可以體驗到Firebug的強大功能了。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Firebug有什麼功能呢？&lt;/span&gt;&lt;br /&gt;1 - 網頁瀏覽速度一目了然&lt;br /&gt;先選取「網路」(Net)，每一個HTML Request的大小、存取時間、標頭(Header)甚至回應(Response)的內容也能一覽無遺。讓你可以準備知道要求(Request)是否成功發出，與及能網頁瀏覽時速度的樽頸位置。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_CrIo67Onh0Y/ShPUOuwReOI/AAAAAAAAAYA/btlwPr8_txY/s1600-h/ScreenHunter_03+May.+20+17.48.gif"&gt;&lt;img style="cursor: pointer; width: 320px; height: 183px;" src="http://1.bp.blogspot.com/_CrIo67Onh0Y/ShPUOuwReOI/AAAAAAAAAYA/btlwPr8_txY/s320/ScreenHunter_03+May.+20+17.48.gif" alt="" id="BLOGGER_PHOTO_ID_5337843332897929442" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2 - 直接執行Javascript指令&lt;br /&gt;選擇「主控台」(Console)，就能看到Firebug的log，當中包括了Javascript的exception與及其他重要資料。同時，在下方可以鍵入你想執行的Javascript指令，方便於瀏覽網頁過程中進行測試。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_CrIo67Onh0Y/ShPVQgsMX7I/AAAAAAAAAYI/EgQYWd8Fipg/s1600-h/ScreenHunter_06+May.+20+17.59.gif"&gt;&lt;img style="cursor: pointer; width: 320px; height: 87px;" src="http://4.bp.blogspot.com/_CrIo67Onh0Y/ShPVQgsMX7I/AAAAAAAAAYI/EgQYWd8Fipg/s320/ScreenHunter_06+May.+20+17.59.gif" alt="" id="BLOGGER_PHOTO_ID_5337844462994087858" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3 - 觀察網頁內容&lt;br /&gt;先選取「觀察」，再把滑鼠移至網頁內，下面的html原始碼會標亮相應內容，令你能即時知道該部份的原始碼，方便修改。同時，右方的樣式(style)會顯示該部份受影響的css style(包括被override)，令你清楚每個字、每一個table的style是怎樣形成。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_CrIo67Onh0Y/ShPW3R0v0yI/AAAAAAAAAYQ/Ww7oVLa9JtA/s1600-h/ScreenHunter_07+May.+20+18.03.gif"&gt;&lt;img style="cursor: pointer; width: 320px; height: 177px;" src="http://2.bp.blogspot.com/_CrIo67Onh0Y/ShPW3R0v0yI/AAAAAAAAAYQ/Ww7oVLa9JtA/s320/ScreenHunter_07+May.+20+18.03.gif" alt="" id="BLOGGER_PHOTO_ID_5337846228529959714" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;4 - 網頁內容即時修改功能&lt;br /&gt;在觀察的過程中，在html原始碼上右鍵，選擇「編輯html」或在原始瑪上連按左鍵，就能對該部份作出修改，效果亦會即時在瀏覽器上出現，當然這不會影響原檔案。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_CrIo67Onh0Y/ShPYCTH55KI/AAAAAAAAAYg/FM2WysOz8zA/s1600-h/ScreenHunter_08+May.+20+18.11.gif"&gt;&lt;img style="cursor: pointer; width: 320px; height: 177px;" src="http://4.bp.blogspot.com/_CrIo67Onh0Y/ShPYCTH55KI/AAAAAAAAAYg/FM2WysOz8zA/s320/ScreenHunter_08+May.+20+18.11.gif" alt="" id="BLOGGER_PHOTO_ID_5337847517368935586" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;你亦可對樣式(style)進行修改，或是暫時關閉某些樣式的設定，同樣效果也是即時在瀏覽器上出現。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_CrIo67Onh0Y/ShPX95Fr22I/AAAAAAAAAYY/oG9hQAXmdag/s1600-h/ScreenHunter_09+May.+20+18.13.gif"&gt;&lt;img style="cursor: pointer; width: 268px; height: 225px;" src="http://4.bp.blogspot.com/_CrIo67Onh0Y/ShPX95Fr22I/AAAAAAAAAYY/oG9hQAXmdag/s320/ScreenHunter_09+May.+20+18.13.gif" alt="" id="BLOGGER_PHOTO_ID_5337847441660828514" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;5 - 設立script中斷點&lt;br /&gt;先選擇「Script」，在原始碼左邊點擊來設立中斷點，以後再使用各樣trace功能來debug。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_CrIo67Onh0Y/ShPZ9EAoegI/AAAAAAAAAYo/n8vvj6ODc8U/s1600-h/ScreenHunter_10+May.+20+18.19.gif"&gt;&lt;img style="cursor: pointer; width: 320px; height: 96px;" src="http://2.bp.blogspot.com/_CrIo67Onh0Y/ShPZ9EAoegI/AAAAAAAAAYo/n8vvj6ODc8U/s320/ScreenHunter_10+May.+20+18.19.gif" alt="" id="BLOGGER_PHOTO_ID_5337849626435811842" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;6 - 詳列DOM內容&lt;br /&gt;先選擇「DOM」，就能看到現有網頁內各DOM的情況。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_CrIo67Onh0Y/ShPamtwTRWI/AAAAAAAAAYw/J9iA2IBcuyY/s1600-h/ScreenHunter_11+May.+20+18.24.gif"&gt;&lt;img style="cursor: pointer; width: 320px; height: 87px;" src="http://3.bp.blogspot.com/_CrIo67Onh0Y/ShPamtwTRWI/AAAAAAAAAYw/J9iA2IBcuyY/s320/ScreenHunter_11+May.+20+18.24.gif" alt="" id="BLOGGER_PHOTO_ID_5337850342016238946" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Firebug功能實在非常強大，靈活運用幾乎能解決大部份遇到的frontend編程問題。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;還有什麼有關Firebug的資訊？&lt;/span&gt;&lt;br /&gt;其實Firebug已經開返了非Firefox使用的版本名叫「Firebug Lite」&lt;br /&gt;http://getfirebug.com/lite.html&lt;br /&gt;另外，你可以安裝其他Firefox元件來加強Firebug的功能，例如：FireCookie，可以讓你即時觀察現處網頁的Cookie與及進行修改。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_CrIo67Onh0Y/ShPb_w9X5BI/AAAAAAAAAY4/E-7JGJD3goA/s1600-h/ScreenHunter_12+May.+20+18.30.gif"&gt;&lt;img style="cursor: pointer; width: 320px; height: 87px;" src="http://4.bp.blogspot.com/_CrIo67Onh0Y/ShPb_w9X5BI/AAAAAAAAAY4/E-7JGJD3goA/s320/ScreenHunter_12+May.+20+18.30.gif" alt="" id="BLOGGER_PHOTO_ID_5337851871884731410" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;快來試一試，你就會知道網頁開發並不是什麼難事。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8847849020161444601-3164699277612371143?l=share-my-point.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://share-my-point.blogspot.com/feeds/3164699277612371143/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://share-my-point.blogspot.com/2009/05/firebug.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8847849020161444601/posts/default/3164699277612371143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8847849020161444601/posts/default/3164699277612371143'/><link rel='alternate' type='text/html' href='http://share-my-point.blogspot.com/2009/05/firebug.html' title='網頁開發好幫手 - Firebug ，簡易使用教程'/><author><name>Ben</name><uri>http://www.blogger.com/profile/09767997689019543948</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_CrIo67Onh0Y/SZmDTut8j7I/AAAAAAAAAU0/ibQw38Lrnig/S220/cute1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_CrIo67Onh0Y/ShPS3aO-OaI/AAAAAAAAAXw/FR0B7KVyuDk/s72-c/ScreenHunter_01+May.+20+17.42.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8847849020161444601.post-3761012694839369768</id><published>2009-04-03T17:14:00.007+08:00</published><updated>2009-04-03T17:55:20.022+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='SOAP'/><category scheme='http://www.blogger.com/atom/ns#' term='Chart'/><category scheme='http://www.blogger.com/atom/ns#' term='Sharepoint'/><title type='text'>繪製Sharepoint表單(List)的圖表(Chart)</title><content type='html'>在Sharepoint中可以用Excel service來製作圖表，但是資料來源卻不能是Sharepoint中的表單，市面上有不少的webpart配以flash來做到，但是要有質素的就要付錢，不用錢的質素卻令人卻步，加上用上他人的flash來製作，限制很大，不容易修改。&lt;br /&gt;&lt;br /&gt;簡單講解整個流程&lt;br /&gt;1) 利用ajax call Sharepoint web service來提取表單的內容。&lt;br /&gt;2) 將內容編輯成所需要的格式&lt;br /&gt;3) 使用javascript library &lt;a href="http://code.google.com/p/flotr/"&gt;Flotr&lt;/a&gt; 去繪畫圖表&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;在看了 &lt;a href="http://darrenjohnstone.net/2007/06/15/drawing-charts-in-office-live/"&gt;http://darrenjohnstone.net/2007/06/15/drawing-charts-in-office-live/&lt;/a&gt; 中的做法之後，得到了一點啟發，就是利用ajax與Sharepoint SOAP的web service去提取表單資料，但這示範中的後段部份是用flash，難易控制外觀，加上xslt transform真的不易處理，所以放棄了後面的部份，而只使用前段利用web service去提取資料的部份。&lt;br /&gt;&lt;br /&gt;以下是這段source code的中心，簡單的示範如何去用ajax call sharepoint web service，只要明白這個部份，基本上就可以利用web service去做更多效果。&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;pre&gt;// Gets all of the list items in a specified list and view&lt;br /&gt;// Params:&lt;br /&gt;// list: list name&lt;br /&gt;// view: view name&lt;br /&gt;// columns: an array of column names in the view to retrieve&lt;br /&gt;//&lt;br /&gt;// Returns:&lt;br /&gt;// The response XML from lists.asmx--&gt;GetListItems or null on an error&lt;br /&gt;this.getListItems = function(list, view, columns)&lt;br /&gt;{&lt;br /&gt;var a = new ActiveXObject("Microsoft.XMLHTTP");&lt;br /&gt;var cols = "&lt;viewfields&gt;";&lt;br /&gt;if(a == null) return null;&lt;br /&gt;for (var i = 0; i &lt; name="'"&gt;";&lt;br /&gt;}&lt;br /&gt;cols += "&lt;/fieldref&gt;";&lt;br /&gt;&lt;br /&gt;a.Open("POST", this.getRootUrl() + "_vti_bin/Lists.asmx", false);&lt;br /&gt;a.setRequestHeader("Content-Type", "text/xml; charset=utf-8");&lt;br /&gt;a.setRequestHeader("SOAPAction", "http://schemas.microsoft.com/sharepoint/soap/GetListItems");&lt;br /&gt;var d = ''&lt;br /&gt;+ "&lt;soap:envelope xsi="\" xsd="\" soap="\"&gt;"&lt;br /&gt;+ "&lt;soap:body&gt;"&lt;br /&gt;+ "&lt;getlistitems xmlns="\"&gt;"&lt;br /&gt;+ "&lt;listname&gt;" + list + "&lt;/listname&gt;";&lt;br /&gt;&lt;br /&gt;if (view != "")&lt;br /&gt; d += "&lt;viewname&gt;" + view + "&lt;/viewname&gt;";&lt;br /&gt;d += "&lt;viewfields&gt;" + cols + "&lt;/viewfields&gt;"&lt;br /&gt;+ "&lt;/getlistitems&gt;"&lt;br /&gt;+ "&lt;/soap:body&gt;"&lt;br /&gt;+ "&lt;/soap:envelope&gt;";&lt;br /&gt;a.Send(d);&lt;br /&gt;&lt;br /&gt;if (a.status != 200)&lt;br /&gt; return null;&lt;br /&gt;else&lt;br /&gt; return a.responseXML;&lt;br /&gt;}&lt;/viewfields&gt;&lt;/pre&gt;&lt;/blockquote&gt;這一段就是利用ajax call的部份，值得留意的是firefox與其他非IE瀏覽器並不支援Microsoft.XMLHTTP 的，所以我使用了XMLHttpRequest來取代，讀取回來的是xml格式的表單數據，所以下一部份就是要在xml提取所需要的資料了。&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;未完待續...&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8847849020161444601-3761012694839369768?l=share-my-point.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://share-my-point.blogspot.com/feeds/3761012694839369768/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://share-my-point.blogspot.com/2009/04/sharepointlistchart.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8847849020161444601/posts/default/3761012694839369768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8847849020161444601/posts/default/3761012694839369768'/><link rel='alternate' type='text/html' href='http://share-my-point.blogspot.com/2009/04/sharepointlistchart.html' title='繪製Sharepoint表單(List)的圖表(Chart)'/><author><name>Ben</name><uri>http://www.blogger.com/profile/09767997689019543948</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_CrIo67Onh0Y/SZmDTut8j7I/AAAAAAAAAU0/ibQw38Lrnig/S220/cute1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8847849020161444601.post-1022046507136721465</id><published>2009-04-01T15:19:00.002+08:00</published><updated>2009-04-01T15:23:25.049+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='3D'/><category scheme='http://www.blogger.com/atom/ns#' term='Chrome'/><category scheme='http://www.blogger.com/atom/ns#' term='Google'/><title type='text'>Google Chrome 帶你進入3D既網上世界</title><content type='html'>Google又有搞作，安裝Google Chrome with 3D之後，再配戴3D眼鏡，你就可以睇到3D既網頁啦。&lt;br /&gt;http://www.google.com/intl/en/landing/chrome/cadie/&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.google.com/intl/en/landing/chrome/cadie/step1.jpg"&gt;&lt;img style="cursor: pointer; width: 250px; height: 225px;" src="http://www.google.com/intl/en/landing/chrome/cadie/step1.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.google.com/intl/en/landing/chrome/cadie/step2.jpg"&gt;&lt;img style="cursor: pointer; width: 250px; height: 225px;" src="http://www.google.com/intl/en/landing/chrome/cadie/step2.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8847849020161444601-1022046507136721465?l=share-my-point.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://share-my-point.blogspot.com/feeds/1022046507136721465/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://share-my-point.blogspot.com/2009/04/google-chrome-3d.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8847849020161444601/posts/default/1022046507136721465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8847849020161444601/posts/default/1022046507136721465'/><link rel='alternate' type='text/html' href='http://share-my-point.blogspot.com/2009/04/google-chrome-3d.html' title='Google Chrome 帶你進入3D既網上世界'/><author><name>Ben</name><uri>http://www.blogger.com/profile/09767997689019543948</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_CrIo67Onh0Y/SZmDTut8j7I/AAAAAAAAAU0/ibQw38Lrnig/S220/cute1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8847849020161444601.post-4659374803189841761</id><published>2009-03-19T23:24:00.007+08:00</published><updated>2009-03-19T23:38:53.710+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><title type='text'>Javascript原來可以這樣玩…</title><content type='html'>今日在網上看了一篇文章，原來Javascript可以做出這樣不可思議的效果&lt;br /&gt;請看看以下這圖，這個波能在視窗中自由穿梭，視窗數量、大小、位置都可以自由控制，而且還與用家的行動同步，即是你可以去改變視窗，與此同時波可以繼續走，看著它感到有點不可思議。&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_CrIo67Onh0Y/ScJlAk2BL9I/AAAAAAAAAXQ/CAwsqa5jcOA/s1600-h/record_+2009-03-19+23.29.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 302px;" src="http://4.bp.blogspot.com/_CrIo67Onh0Y/ScJlAk2BL9I/AAAAAAAAAXQ/CAwsqa5jcOA/s320/record_+2009-03-19+23.29.jpg" alt="" id="BLOGGER_PHOTO_ID_5314921570815258578" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;快到以下連結試試看~&lt;br /&gt;&lt;a href="http://experiments.instrum3nt.com/markmahoney/ball/#"&gt;http://experiments.instrum3nt.com/markmahoney/ball/#&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8847849020161444601-4659374803189841761?l=share-my-point.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://share-my-point.blogspot.com/feeds/4659374803189841761/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://share-my-point.blogspot.com/2009/03/javascript.html#comment-form' title='1 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8847849020161444601/posts/default/4659374803189841761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8847849020161444601/posts/default/4659374803189841761'/><link rel='alternate' type='text/html' href='http://share-my-point.blogspot.com/2009/03/javascript.html' title='Javascript原來可以這樣玩…'/><author><name>Ben</name><uri>http://www.blogger.com/profile/09767997689019543948</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_CrIo67Onh0Y/SZmDTut8j7I/AAAAAAAAAU0/ibQw38Lrnig/S220/cute1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_CrIo67Onh0Y/ScJlAk2BL9I/AAAAAAAAAXQ/CAwsqa5jcOA/s72-c/record_+2009-03-19+23.29.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8847849020161444601.post-1924741243670863733</id><published>2009-03-05T09:39:00.003+08:00</published><updated>2009-03-19T23:19:40.503+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cookies'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>Cookies的容量限制</title><content type='html'>想過試用著cookies去記錄用戶的操作模式(user behavior)，但用的時候卻發覺cookies可接納的容量太少了，想多存一點資料的話看來不能由cookies入手。&lt;br /&gt;Cookies的限制有多少？大致如下&lt;br /&gt;1) 每個domain只可以儲20個cookies&lt;br /&gt;2) 每個cookies的size只有4k&lt;br /&gt;&lt;br /&gt;Firefox的限制似乎更大，一個domain的cookies總容量大約只有10k，再多的話便會有機會出現連線中斷的情況了，這點不太肯定，有錯的請指証。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8847849020161444601-1924741243670863733?l=share-my-point.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://share-my-point.blogspot.com/feeds/1924741243670863733/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://share-my-point.blogspot.com/2009/03/cookies.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8847849020161444601/posts/default/1924741243670863733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8847849020161444601/posts/default/1924741243670863733'/><link rel='alternate' type='text/html' href='http://share-my-point.blogspot.com/2009/03/cookies.html' title='Cookies的容量限制'/><author><name>Ben</name><uri>http://www.blogger.com/profile/09767997689019543948</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_CrIo67Onh0Y/SZmDTut8j7I/AAAAAAAAAU0/ibQw38Lrnig/S220/cute1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8847849020161444601.post-8571811315764506539</id><published>2009-03-04T23:25:00.004+08:00</published><updated>2009-03-05T00:02:20.420+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sphinx'/><category scheme='http://www.blogger.com/atom/ns#' term='Speech Recognition'/><title type='text'>Open Source Speech Recognition Engines - CMU Sphinx</title><content type='html'>一直都是寫sharepoint好像有點單調，所以也寫一下其他的文章吧！&lt;br /&gt;最近工作需要關係，要去找一些有關Speech Recognition既open source engine，今天就為大家介紹一下Sphinx。&lt;br /&gt;&lt;br /&gt;最新版的Sphinx4是以Java為核心的，比起之前用c++的第1至第3版本用起來容易很多，只要下載整個src，解壓lib的檔案，再行ant就完成基本設定，可以直接行demo了。但之前要編寫model與dictionary等等的過程就難得多了，小弟也在進條階段，有興趣的可以試試下。&lt;br /&gt;&lt;br /&gt;參考網址：&lt;br /&gt;http://cmusphinx.sourceforge.net/html/cmusphinx.php&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8847849020161444601-8571811315764506539?l=share-my-point.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://share-my-point.blogspot.com/feeds/8571811315764506539/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://share-my-point.blogspot.com/2009/03/open-source-speech-recognition-engines.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8847849020161444601/posts/default/8571811315764506539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8847849020161444601/posts/default/8571811315764506539'/><link rel='alternate' type='text/html' href='http://share-my-point.blogspot.com/2009/03/open-source-speech-recognition-engines.html' title='Open Source Speech Recognition Engines - CMU Sphinx'/><author><name>Ben</name><uri>http://www.blogger.com/profile/09767997689019543948</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_CrIo67Onh0Y/SZmDTut8j7I/AAAAAAAAAU0/ibQw38Lrnig/S220/cute1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8847849020161444601.post-8682764796945179434</id><published>2009-02-18T11:26:00.013+08:00</published><updated>2009-03-04T23:02:08.958+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Webpart'/><category scheme='http://www.blogger.com/atom/ns#' term='Sharepoint Designer'/><category scheme='http://www.blogger.com/atom/ns#' term='Archive'/><category scheme='http://www.blogger.com/atom/ns#' term='Sharepoint'/><title type='text'>活用DataFormWebpart小技巧 - 製作Archive列表</title><content type='html'>Sharepoint Designer是一個主要用來編輯網頁layout既工具(雖然個人認為其編輯介面相當不濟)，同時間亦可以插入與Sharepoint相關的用具，如：webpart、sharepoint controls等等&lt;br /&gt;其中一個常用的webpart是DataFormWebpart，多數是用作表列式的去列出List中的資料。今次會做一個簡單的例子，示範如何用DataFormWebpart去製作一個網頁封存(Archive)。&lt;br /&gt;&lt;br /&gt;1) 首先打開Data Source Library去選擇想製作Archive的List。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_CrIo67Onh0Y/Sa6Ttq6zXiI/AAAAAAAAAWQ/iJ3V1LUGHmo/s1600-h/2009-02-18001.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 227px;" src="http://2.bp.blogspot.com/_CrIo67Onh0Y/Sa6Ttq6zXiI/AAAAAAAAAWQ/iJ3V1LUGHmo/s320/2009-02-18001.jpg" alt="" id="BLOGGER_PHOTO_ID_5309343423540715042" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;2) 把整個List拖進網頁內，就會出現最簡單的列表，亦是我們最常用的表列功能。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_CrIo67Onh0Y/Sa6URJRDppI/AAAAAAAAAWY/9MS4-tcxQG8/s1600-h/2009-02-18002.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 90px;" src="http://4.bp.blogspot.com/_CrIo67Onh0Y/Sa6URJRDppI/AAAAAAAAAWY/9MS4-tcxQG8/s320/2009-02-18002.jpg" alt="" id="BLOGGER_PHOTO_ID_5309344032982541970" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;3) 為了讓Archive中能夠以日期(月份+年份)去分類顯示，所以先在List中多加一個Field，叫做ArchiveDate，而ArchiveDate是一個跟據EventDate計算出來的數值，計算方法如圖所示一樣，這樣就會顯示出如Jan04的格式了。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_CrIo67Onh0Y/Sa6VD9VV9EI/AAAAAAAAAWg/KxY3fC8FSEM/s1600-h/2009-02-18005.jpg"&gt;&lt;img style="cursor: pointer; width: 228px; height: 320px;" src="http://1.bp.blogspot.com/_CrIo67Onh0Y/Sa6VD9VV9EI/AAAAAAAAAWg/KxY3fC8FSEM/s320/2009-02-18005.jpg" alt="" id="BLOGGER_PHOTO_ID_5309344905952621634" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;4) 回到網頁內的DataFormWebpart，在Sort and Group中，以ArchiveDate來把資料分組，再以EventDate來作優先排序。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_CrIo67Onh0Y/Sa6VzZClR5I/AAAAAAAAAWo/TMSOzPxNXPg/s1600-h/2009-02-18007.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 175px;" src="http://3.bp.blogspot.com/_CrIo67Onh0Y/Sa6VzZClR5I/AAAAAAAAAWo/TMSOzPxNXPg/s320/2009-02-18007.jpg" alt="" id="BLOGGER_PHOTO_ID_5309345720843978642" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;5) 你可以在原始碼中加入&lt;span style="font-style: italic;"&gt;(&lt;xsl:value-of select="count(nodeset)"&gt;)&lt;/xsl:value-of&gt;&lt;/span&gt;，這樣就可以在每個分組上加上文章的總數。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_CrIo67Onh0Y/Sa6WVtntCoI/AAAAAAAAAWw/9F1rB1Cku70/s1600-h/2009-02-18008.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 83px;" src="http://4.bp.blogspot.com/_CrIo67Onh0Y/Sa6WVtntCoI/AAAAAAAAAWw/9F1rB1Cku70/s320/2009-02-18008.jpg" alt="" id="BLOGGER_PHOTO_ID_5309346310483937922" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;6) 分組完成後，再在主題上加上連結。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_CrIo67Onh0Y/Sa6WqV90H8I/AAAAAAAAAW4/RzSc_Vr93Mo/s1600-h/2009-02-18010.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 226px;" src="http://2.bp.blogspot.com/_CrIo67Onh0Y/Sa6WqV90H8I/AAAAAAAAAW4/RzSc_Vr93Mo/s320/2009-02-18010.jpg" alt="" id="BLOGGER_PHOTO_ID_5309346664911478722" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;7) 那便大功告成了！&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_CrIo67Onh0Y/Sa6X22FqUhI/AAAAAAAAAXA/EDt-OXbJXcY/s1600-h/record_+2009-03-04+22.59.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 110px;" src="http://2.bp.blogspot.com/_CrIo67Onh0Y/Sa6X22FqUhI/AAAAAAAAAXA/EDt-OXbJXcY/s320/record_+2009-03-04+22.59.jpg" alt="" id="BLOGGER_PHOTO_ID_5309347979204383250" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8847849020161444601-8682764796945179434?l=share-my-point.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://share-my-point.blogspot.com/feeds/8682764796945179434/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://share-my-point.blogspot.com/2009/02/dataformwebpart-archive.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8847849020161444601/posts/default/8682764796945179434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8847849020161444601/posts/default/8682764796945179434'/><link rel='alternate' type='text/html' href='http://share-my-point.blogspot.com/2009/02/dataformwebpart-archive.html' title='活用DataFormWebpart小技巧 - 製作Archive列表'/><author><name>Ben</name><uri>http://www.blogger.com/profile/09767997689019543948</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_CrIo67Onh0Y/SZmDTut8j7I/AAAAAAAAAU0/ibQw38Lrnig/S220/cute1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_CrIo67Onh0Y/Sa6Ttq6zXiI/AAAAAAAAAWQ/iJ3V1LUGHmo/s72-c/2009-02-18001.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8847849020161444601.post-1636089905492766589</id><published>2009-02-18T00:51:00.002+08:00</published><updated>2009-02-18T00:52:16.515+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Webpart'/><category scheme='http://www.blogger.com/atom/ns#' term='Sharepoint'/><title type='text'>Sharepoint2007 - 自製Sitemap Webpart</title><content type='html'>小弟最近需要一個sitemap，但在Sharepoint中default的可以調控的選項太少，不太方便，所以直接寫了一個簡單的webpart去把左面navigation清楚的顯示出來。&lt;br /&gt;&lt;br /&gt;如何建立webpart在&lt;a href="http://share-my-point.blogspot.com/2009/02/sharepoint-2007-webpart.html"&gt;這個&lt;/a&gt;post中已經教了大家，所以直接落去code的部份，究竟如何讀取navigation中的項目。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;using Microsoft.SharePoint.Navigation;&lt;br /&gt;&lt;br /&gt;// get current site info&lt;br /&gt;SPWeb spweb = SPContext.Current.Web;&lt;br /&gt;string spsiteurl = spweb.Url;&lt;br /&gt;&lt;br /&gt;// get navigation&lt;br /&gt;SPNavigation nav = spweb.Navigation;&lt;br /&gt;SPNavigationNodeCollection nodeColl = nav.QuickLaunch;&lt;br /&gt;foreach (SPNavigationNode node in nodeColl )&lt;br /&gt;{&lt;br /&gt;  output.Write(node .Title+" - "+node .Url);&lt;br /&gt;}&lt;/blockquote&gt;&lt;br /&gt;這是最簡單去表列所有node既方法，但是我們還需要管理權限的問題，讓用戶只能去到他所能看到的項目。所以加入了這個function去檢查用家的權限&lt;br /&gt;&lt;blockquote&gt;// function to check if a user has the permission to read this node&lt;br /&gt;private bool canReadNode(SPUser user, SPNavigationNode node)&lt;br /&gt;{&lt;br /&gt;  string audience = "";&lt;br /&gt;&lt;br /&gt;  if (node.Properties["Audience"].ToString().StartsWith(";"))&lt;br /&gt;  {&lt;br /&gt;      audience = node.Properties["Audience"].ToString().Replace(";;;;", "");&lt;br /&gt;  }&lt;br /&gt;  else&lt;br /&gt;  {&lt;br /&gt;      audience = "";&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  if (audience.Equals(""))&lt;br /&gt;  { return true; }&lt;br /&gt;  else&lt;br /&gt;  {&lt;br /&gt;      string[] stringSeparators = new string[] { "," };&lt;br /&gt;      String[] groupList = audience.Split(stringSeparators, StringSplitOptions.RemoveEmptyEntries);&lt;br /&gt;      foreach (String groupName in groupList)&lt;br /&gt;      {&lt;br /&gt;          if (bIsInGroup(user, groupName))&lt;br /&gt;          {&lt;br /&gt;              return true;&lt;br /&gt;          }&lt;br /&gt;      }&lt;br /&gt;  }&lt;br /&gt;  return false;&lt;br /&gt;}&lt;/blockquote&gt;&lt;blockquote&gt;//function to check if an user is in a group&lt;br /&gt;private bool bIsInGroup(SPUser user, string strname)&lt;br /&gt;{&lt;br /&gt;try&lt;br /&gt;{&lt;br /&gt;    foreach (SPGroup group in user.Groups)&lt;br /&gt;    {&lt;br /&gt;      if (group.Name == strname)&lt;br /&gt;          return true;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;catch (Exception exception)&lt;br /&gt;{&lt;br /&gt;WriteLogEvent(string.Format("An Error Occured | Exception Message:{0} StackTrace: {1}", exception.Message, exception.StackTrace));&lt;br /&gt;}&lt;br /&gt;return false;&lt;br /&gt;}&lt;/blockquote&gt;其實SPNavigationNode還有其他的property如IsExternal與及Children等等，大家有興趣的可以繼續慢慢研究。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8847849020161444601-1636089905492766589?l=share-my-point.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://share-my-point.blogspot.com/feeds/1636089905492766589/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://share-my-point.blogspot.com/2009/02/sharepoint2007-sitemap-webpart_18.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8847849020161444601/posts/default/1636089905492766589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8847849020161444601/posts/default/1636089905492766589'/><link rel='alternate' type='text/html' href='http://share-my-point.blogspot.com/2009/02/sharepoint2007-sitemap-webpart_18.html' title='Sharepoint2007 - 自製Sitemap Webpart'/><author><name>Ben</name><uri>http://www.blogger.com/profile/09767997689019543948</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_CrIo67Onh0Y/SZmDTut8j7I/AAAAAAAAAU0/ibQw38Lrnig/S220/cute1.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8847849020161444601.post-4089965655296974964</id><published>2009-02-16T23:25:00.000+08:00</published><updated>2009-02-18T00:25:24.335+08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Webpart'/><category scheme='http://www.blogger.com/atom/ns#' term='Sharepoint'/><title type='text'>Sharepoint 2007 - 自製Webpart上手之路</title><content type='html'>Webpart是Sharepoint中常用的小模組，功能就像Widgets沒有兩樣，可以用來顯示表單(List)的內容，或是做出不同的小工具快可以。&lt;br /&gt;&lt;br /&gt;傳統的編製Webpart方法頗為煩複，由編寫程式、生成dll、插入GAC(global assembly cache)再修改web.config，單看最簡單的Helloworld教程，恐怕也得花你兩三個小時才能學懂。但現在只要用STSDEV (Simple Tools for SharePoint 2007 Development)，一切就會變得簡單快捷。以下就來一個簡單使用教程&lt;br /&gt;&lt;br /&gt;1) 首先，到http://www.codeplex.com/stsdev下載主程式(選Binary的就可以直接使用)。&lt;br /&gt;2) 把下載回來的檔案解壓到你的磁碟&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_CrIo67Onh0Y/SZriJWyel_I/AAAAAAAAAVQ/1AlIq55Jg74/s1600-h/2009-02-17001.jpg"&gt;&lt;img style="cursor: pointer; width: 347px; height: 188px;" src="http://4.bp.blogspot.com/_CrIo67Onh0Y/SZriJWyel_I/AAAAAAAAAVQ/1AlIq55Jg74/s320/2009-02-17001.jpg" alt="" id="BLOGGER_PHOTO_ID_5303800161546180594" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3) 打開你的Visual Studio，把STSDEV加入到External Tools中&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_CrIo67Onh0Y/SZrjdj4AzWI/AAAAAAAAAVY/JlyghQCsr-A/s1600-h/2009-02-17002.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 215px;" src="http://3.bp.blogspot.com/_CrIo67Onh0Y/SZrjdj4AzWI/AAAAAAAAAVY/JlyghQCsr-A/s320/2009-02-17002.jpg" alt="" id="BLOGGER_PHOTO_ID_5303801608168066402" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_CrIo67Onh0Y/SZrjn3oXH-I/AAAAAAAAAVg/bRZkWwCo4I0/s1600-h/2009-02-17003.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 317px;" src="http://3.bp.blogspot.com/_CrIo67Onh0Y/SZrjn3oXH-I/AAAAAAAAAVg/bRZkWwCo4I0/s320/2009-02-17003.jpg" alt="" id="BLOGGER_PHOTO_ID_5303801785269821410" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;4) 執行STSDEV，並建立新的webpart的project (如果之前沒有做過key file也可同時在此製作)&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_CrIo67Onh0Y/SZrkQJVc3oI/AAAAAAAAAVo/HMH0dzRFtR8/s1600-h/2009-02-17005.jpg"&gt;&lt;img style="cursor: pointer; width: 367px; height: 144px;" src="http://1.bp.blogspot.com/_CrIo67Onh0Y/SZrkQJVc3oI/AAAAAAAAAVo/HMH0dzRFtR8/s320/2009-02-17005.jpg" alt="" id="BLOGGER_PHOTO_ID_5303802477217111682" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;5) 打開剛創建了的project，會見到已經有兩個helloworld的webpart準備好了，你可以更改或著加增新的cs，如新增了新的cs file，也請更改一下feature.xml等config file。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_CrIo67Onh0Y/SZrkvpnDEFI/AAAAAAAAAVw/HbtiTnog6pw/s1600-h/2009-02-17007.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 232px;" src="http://2.bp.blogspot.com/_CrIo67Onh0Y/SZrkvpnDEFI/AAAAAAAAAVw/HbtiTnog6pw/s320/2009-02-17007.jpg" alt="" id="BLOGGER_PHOTO_ID_5303803018456797266" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;6) 寫好了webpart的內容後，在上面點選DebugDeploy做第一次的Deploy，之後要更新的話，選DebugUpgrade就可以了。&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_CrIo67Onh0Y/SZrk4al1HBI/AAAAAAAAAV4/IEV0kKOkp5E/s1600-h/2009-02-17008.jpg"&gt;&lt;img style="cursor: pointer; width: 209px; height: 195px;" src="http://3.bp.blogspot.com/_CrIo67Onh0Y/SZrk4al1HBI/AAAAAAAAAV4/IEV0kKOkp5E/s320/2009-02-17008.jpg" alt="" id="BLOGGER_PHOTO_ID_5303803169043979282" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;7) 最後在你的site collection setting入面新增剛deploy的webpart便大功告成。你可以在webpart選擇畫面中揀選你的webpart了。&lt;br /&gt;&lt;br /&gt;順帶一提，一個project是一整個feature，可以在site feature中activate整個feature，而且一個project中可以同時有多個webpart的。STSDEV提供的功能不止這麼簡單，大家試著玩玩吧！就可以發覺可以調教的東西多的事。如果看了以上的內容還未明白的話，還可以到它的網頁中看video。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8847849020161444601-4089965655296974964?l=share-my-point.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://share-my-point.blogspot.com/feeds/4089965655296974964/comments/default' title='張貼意見'/><link rel='replies' type='text/html' href='http://share-my-point.blogspot.com/2009/02/sharepoint-2007-webpart.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8847849020161444601/posts/default/4089965655296974964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8847849020161444601/posts/default/4089965655296974964'/><link rel='alternate' type='text/html' href='http://share-my-point.blogspot.com/2009/02/sharepoint-2007-webpart.html' title='Sharepoint 2007 - 自製Webpart上手之路'/><author><name>Ben</name><uri>http://www.blogger.com/profile/09767997689019543948</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://2.bp.blogspot.com/_CrIo67Onh0Y/SZmDTut8j7I/AAAAAAAAAU0/ibQw38Lrnig/S220/cute1.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_CrIo67Onh0Y/SZriJWyel_I/AAAAAAAAAVQ/1AlIq55Jg74/s72-c/2009-02-17001.jpg' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
