<?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-2268727436968917954</id><updated>2012-01-02T17:33:13.005-06:00</updated><category term='resize'/><category term='datasource'/><category term='Publishing Infrastructure'/><category term='wss resources'/><category term='2008 mobile controls'/><category term='site definition'/><category term='bug'/><category term='iframe'/><category term='PFX'/><category term='OpenSSL'/><category term='Delete MasterPage'/><category term='MasterPage'/><category term='Keytool'/><category term='parsing'/><category term='theme  css'/><category term='remove theme'/><category term='JDE'/><category term='SiteDefinition'/><category term='BBDatePicker control'/><category term='sharepoint'/><category term='minimum'/><category term='Backup'/><category term='Alternate Access Mappings'/><category term='Delete SSP'/><category term='Axis'/><category term='RAPC'/><category term='JKS'/><category term='JAVA ENV'/><category term='web service'/><category term='height'/><category term='mobile page'/><category term='snapshot direcorty'/><category term='COD'/><category term='MDS'/><category term='cross domain'/><category term='ListTypeID'/><category term='solutionizing .NET'/><category term='DocAve'/><category term='WSE'/><category term='recovery'/><category term='VS 2008'/><category term='table'/><category term='delete capture'/><category term='Feature'/><category term='WSS4J'/><category term='trial period expired'/><category term='theme'/><category term='td'/><category term='administrator'/><category term='object'/><category term='WS-Security'/><category term='Project'/><category term='account change'/><category term='tr'/><category term='smartphone'/><category term='RegistrationId list'/><category term='move'/><category term='datareader'/><category term='STSDEV debug'/><category term='batch'/><category term='Onet'/><category term='PWA'/><category term='Event error'/><category term='X509'/><category term='webtemp'/><category term='delete theme'/><category term='blackberry'/><category term='user control'/><category term='site collection'/><category term='STSDEV UserControl WebPart'/><category term='STSDEV'/><category term='UserControl WebPart'/><category term='DateTime Picker'/><category term='subsite'/><category term='SOAP Header'/><title type='text'>Teddy's Tech Blog</title><subtitle type='html'>Programming life. Coding thinking. Step progressing.
Welcome to discuss any tech question.
Especially on dotnet and SharePoint.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>43</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-3328665749838866733</id><published>2011-09-29T10:08:00.001-05:00</published><updated>2011-09-29T10:08:16.984-05:00</updated><title type='text'>jQuery UI slider twisting for both iPad and iPhone, or any tablet.</title><content type='html'>I was working for improving our slider to be avaiable for both iPad and iPhone, however, from the reference of official jQuery UI, it addressed to target only for iPhone(&lt;a href="http://bugs.jqueryui.com/ticket/4143"&gt;http://bugs.jqueryui.com/ticket/4143&lt;/a&gt;). The one (&lt;a href="http://bugs.jqueryui.com/ticket/7001"&gt;http://bugs.jqueryui.com/ticket/7001&lt;/a&gt;) targeting to iPad is using the same of iPhone. It words well with iPhone but not iPad. By&amp;nbsp;checking the code, I found it is a small trick to adjust the code to work for both of them or&amp;nbsp;even more. Here follows the solution.&lt;br /&gt;&lt;br /&gt;You want to first&amp;nbsp;put code change as cscott's post first (&lt;a href="https://github.com/cscott/jquery-ui/commit/3744712e13271fa06a502be19bb8b3854fe66c59"&gt;https://github.com/cscott/jquery-ui/commit/3744712e13271fa06a502be19bb8b3854fe66c59&lt;/a&gt;) , then modify the code of file (jquery.ui.mouse.js or ui.mouse.js), finding the following one (around line No. 17th) and do following 2 steps:&lt;br /&gt;Step 1. Modify code:&lt;br /&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-family: Consolas;"&gt;(deleted)&amp;nbsp;var iPhone = (navigator.userAgent.indexOf(&lt;/span&gt;&lt;/span&gt;&lt;span style="color: maroon; font-family: Consolas;"&gt;&lt;span style="color: maroon; font-family: Consolas;"&gt;&lt;span style="color: maroon; font-family: Consolas;"&gt;'iPad'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-family: Consolas;"&gt;) != -1); &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Consolas; font-size: x-small;"&gt;&lt;span style="font-family: Consolas; font-size: x-small;"&gt;&lt;span style="font-family: Consolas; font-size: x-small;"&gt;&lt;span style="font-family: Consolas; font-size: x-small;"&gt;&lt;span style="font-size: small;"&gt;(added) var iPhonePad = (navigator.userAgent.indexOf(&lt;span style="color: maroon;"&gt;'iPad'&lt;/span&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-family: Consolas;"&gt;&lt;/span&gt;&lt;/span&gt;) != -1) ||(navigator.userAgent.indexOf(&lt;span style="color: maroon; font-family: Consolas;"&gt;&lt;span style="color: maroon; font-family: Consolas;"&gt;&lt;span style="color: maroon; font-family: Consolas;"&gt;'iPhone'&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Consolas;"&gt;&lt;span style="font-family: Consolas;"&gt;) != -1);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;Step 2. Replace all the keyword "iPhone" to "iPhonePad".&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: Consolas; font-size: x-small;"&gt;&lt;span style="font-family: Consolas; font-size: x-small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-3328665749838866733?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/3328665749838866733/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=3328665749838866733' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/3328665749838866733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/3328665749838866733'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2011/09/jquery-ui-slider-twisting-for-both-ipad.html' title='jQuery UI slider twisting for both iPad and iPhone, or any tablet.'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-2647126278436455546</id><published>2011-07-01T13:01:00.004-05:00</published><updated>2011-07-01T15:12:47.010-05:00</updated><title type='text'>Javascript function - Replace or remove the URL parameters</title><content type='html'>&lt;div&gt;&lt;div&gt;Well, I've been searching some functions for handle URL parameters to replace or remove on both of javascript or jQuery. However, I didn't find any fit one. This is what I wrote for such usage:&lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;div&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;    //Handle URL parameter, if newvalue is empty, remove the parameter or replace with new value.&lt;br /&gt;    replaceUrlParameter = function (url, param, newvalue) {&lt;br /&gt;        if (url.indexOf("#")) {&lt;br /&gt;            url = url.split("#")[0];&lt;br /&gt;        }&lt;br /&gt;        var headUrl = url.split("?")[0];&lt;br /&gt;        var arrayParam = url.split("?")[1].split("&amp;amp;");&lt;br /&gt;        var idx = null;&lt;br /&gt;        for (i = 0; i &amp;lt; arrayParam.length; i++) {&lt;br /&gt;            if (arrayParam[i].split("=")[0] == param) {&lt;br /&gt;                idx = i;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        if (idx != null) {&lt;br /&gt;            var newUrl = null;&lt;br /&gt;            if (newvalue != "") {&lt;br /&gt;                var newParam = param + "=" + newvalue;&lt;br /&gt;                newUrl = arrayParam.splice(idx, 1, newParam);&lt;br /&gt;            }&lt;br /&gt;            else {&lt;br /&gt;                var removedArray = arrayParam.splice(idx, 1);&lt;br /&gt;                newUrl = headUrl + "?" + arrayParam.join("&amp;amp;");&lt;br /&gt;            }&lt;br /&gt;            return newUrl;&lt;br /&gt;        }&lt;br /&gt;        else&lt;br /&gt;        { return url; }&lt;br /&gt;        return url;&lt;br /&gt;    }&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-2647126278436455546?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/2647126278436455546/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=2647126278436455546' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/2647126278436455546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/2647126278436455546'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2011/07/javascript-function-replace-or-remove.html' title='Javascript function - Replace or remove the URL parameters'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-6635911521551547216</id><published>2010-07-15T13:46:00.001-05:00</published><updated>2010-07-15T13:47:41.275-05:00</updated><title type='text'>2 Levels Common Table Expressions (CTE) Sample</title><content type='html'>&lt;div&gt;ALTER procedure [dbo].[sp_EndecaFeed_GetAll_ClassesHierarchy]&lt;/div&gt;&lt;div&gt;as&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;--List all hierarchy&lt;/div&gt;&lt;div&gt;with Hierarchy(ClassID, ClassName, FullName, ParentClassID, ParentHierarchy, Seq) as&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;(&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;select FullName = ClassID, ClassName, convert(nvarchar(1000), ClassName), ParentClassID, convert(nvarchar(1000), ClassName) as ParentHierarchy, Seq = 1&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;from Classes&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;union all&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;select FullName = p.ClassID, p.ClassName, convert(nvarchar(1000),FullName + '/' + p.ClassName), p.ParentClassID, convert(nvarchar(1000), FullName) as ParentHierarchy, Seq = Seq + 1&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;from Classes p&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;inner join Hierarchy c on c.ClassID = p.ParentClassID&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;)&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;--Filter out the redundant hierarchy&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;,ClassHierarchy(Row, ClassID, ClassName, FullName, ParentClassID, ParentHierarchy) as&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;(&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;select  ROW_NUMBER() OVER (PARTITION BY ClassID ORDER BY seq DESC), ClassID, ClassName, FullName, ParentClassID, ParentHierarchy&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt;  &lt;/span&gt;from Hierarchy&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;select Distinct CH.ClassID, CH.ClassName, FullName as Hierarchy, CH.ParentClassID, CH.ParentHierarchy&lt;/div&gt;&lt;div&gt;From   Products P,&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;ProductClasses PC,&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;ClassHierarchy CH&lt;/div&gt;&lt;div&gt;Where  P.ProductID = PC.ProductID AND&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;PC.ClassID = CH.ClassID AND&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;CH.Row = 1 AND&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;--Filter the hierarchy without associated with products&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;CH.ClassID in (select distinct ClassID from ProductClasses) AND&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;P.IsActive = 1 AND&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-tab-span" style="white-space:pre"&gt; &lt;/span&gt;P.HasContent = 'Y' &lt;/div&gt;&lt;div&gt;order by ClassID&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-6635911521551547216?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/6635911521551547216/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=6635911521551547216' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/6635911521551547216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/6635911521551547216'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2010/07/2-levels-common-table-expressions-cte.html' title='2 Levels Common Table Expressions (CTE) Sample'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-8455625981581107046</id><published>2009-08-10T16:22:00.024-05:00</published><updated>2010-01-18T09:47:32.339-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='height'/><category scheme='http://www.blogger.com/atom/ns#' term='cross domain'/><category scheme='http://www.blogger.com/atom/ns#' term='iframe'/><category scheme='http://www.blogger.com/atom/ns#' term='resize'/><title type='text'>iFrame automatically resize height by cross domain</title><content type='html'>After trying lots of solutions from &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;internet&lt;/span&gt;. Here follows my verified solution successfully.&lt;br /&gt;&lt;div&gt;There are totally 3 relevant files &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;involoved&lt;/span&gt;.&lt;br /&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;The main &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;aspx&lt;/span&gt; file ( which hosting &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;iframe&lt;/span&gt; of another site. (Under domain main.com) Notice: you should add &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;src&lt;/span&gt;="http://sub.com/index.jsp" in the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;iframe&lt;/span&gt;.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_t_xF2iQY_Jc/S1SCHNTN0lI/AAAAAAAAAIQ/T_qBcbUXhzs/s1600-h/1.jpg"&gt;&lt;img src="http://4.bp.blogspot.com/_t_xF2iQY_Jc/S1SCHNTN0lI/AAAAAAAAAIQ/T_qBcbUXhzs/s320/1.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5428106511229243986" style="cursor: pointer; width: 320px; height: 210px; " /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;The transmission html file (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;grAutoSize&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;htm&lt;/span&gt;) which link the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;iframe&lt;/span&gt; part with main site. (Under domain main.com)&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_t_xF2iQY_Jc/S1SCSAM6CKI/AAAAAAAAAIY/tx67eVBt-y8/s1600-h/2.jpg"&gt;&lt;img src="http://1.bp.blogspot.com/_t_xF2iQY_Jc/S1SCSAM6CKI/AAAAAAAAAIY/tx67eVBt-y8/s320/2.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5428106696691681442" style="cursor: pointer; width: 320px; height: 238px; " /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;The hosting site &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;JS&lt;/span&gt; file (refer.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;js&lt;/span&gt;) which referred by sub domain pages (Under domain sub.com). It could be different tech platform such as &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;JSP&lt;/span&gt;/&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;PHP&lt;/span&gt;/ASP. Here is index.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;jsp&lt;/span&gt;.&lt;br /&gt;Notice: the variable &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;urlC&lt;/span&gt; should be main.com/grAutoSize.htm.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_t_xF2iQY_Jc/S1SCfg4KELI/AAAAAAAAAIg/BG8b51oYUG4/s1600-h/3.jpg"&gt;&lt;img src="http://3.bp.blogspot.com/_t_xF2iQY_Jc/S1SCfg4KELI/AAAAAAAAAIg/BG8b51oYUG4/s320/3.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5428106928801321138" style="cursor: pointer; width: 320px; height: 294px; " /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;You don't need add document.domain = xxx.com for this solution. Also it was tested to working with IE7, IE8, Mozilla &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;Firefox&lt;/span&gt; 3, Google Chrome 2, Safari 4.&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-8455625981581107046?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/8455625981581107046/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=8455625981581107046' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/8455625981581107046'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/8455625981581107046'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2009/08/iframe-automatically-resize-height-by.html' title='iFrame automatically resize height by cross domain'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_t_xF2iQY_Jc/S1SCHNTN0lI/AAAAAAAAAIQ/T_qBcbUXhzs/s72-c/1.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-5418810347583226902</id><published>2009-06-09T11:04:00.013-05:00</published><updated>2009-06-10T13:22:28.582-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JKS'/><category scheme='http://www.blogger.com/atom/ns#' term='PFX'/><category scheme='http://www.blogger.com/atom/ns#' term='SOAP Header'/><category scheme='http://www.blogger.com/atom/ns#' term='WSS4J'/><category scheme='http://www.blogger.com/atom/ns#' term='X509'/><category scheme='http://www.blogger.com/atom/ns#' term='VS 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='web service'/><category scheme='http://www.blogger.com/atom/ns#' term='Axis'/><category scheme='http://www.blogger.com/atom/ns#' term='WS-Security'/><category scheme='http://www.blogger.com/atom/ns#' term='WSE'/><title type='text'>Steps to use VS 2008 with WSE 3.0 to create client for calling to Axis2 Web Services WSDL file</title><content type='html'>I've been working on this case a few days and finally made it work.&lt;div&gt;The case need to create .net framework 3 web site client to refer the Axis2 web services with WSS4J Security (WS-Security specification 1.0). Need to custom SOAP Header and signature.&lt;/div&gt;&lt;div&gt;As all knows, visual studio 2008 doesn't integrated with WSE 3.0, also since the current VS project is web site instead of web application, the proxy file of web service is dynamic with DLL file which means you are not able to change it. Here find a new way to tackle with it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here's the main steps and code reference.&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Setup WSE 3.0 (Download from Microsoft web site and install)&lt;/li&gt;&lt;li&gt;Convert the JKS to PFX keystore file. ( Mentioned at last blog post)&lt;/li&gt;&lt;li&gt;Create a new Class Library project into the solution.&lt;/li&gt;&lt;li&gt;Add web reference and designate the WSDL (Provided from Axis2 web service) file. ( You will find the proxy file named reference.vb in the same folder with wsdl file at this Class Library project.&lt;/li&gt;&lt;li&gt;Click to open WSE 3.0 configuration tool and click menu open the file app.config which in Class Library project folder.&lt;/li&gt;&lt;li&gt;Click on "Enable this project for Web Services Enhancements" under General panel, and Enable Policy and Add a new Policy with a new name under Policy panel. If you want to get debugging soap packet, Enable Message Trace and designate Input and Output File under Diagnostics panel and then click menu File and Save it.&lt;/li&gt;&lt;li&gt;Update part of the app.config as follows snapshot:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_t_xF2iQY_Jc/Si_zXN1ztmI/AAAAAAAAAF4/WSO9BQ_Vk7E/s1600-h/webconfig.JPG"&gt;&lt;img src="http://1.bp.blogspot.com/_t_xF2iQY_Jc/Si_zXN1ztmI/AAAAAAAAAF4/WSO9BQ_Vk7E/s400/webconfig.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5345758862889956962" style="cursor: pointer; width: 400px; height: 77px; " /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Find the file named wse3policyCache.config and update it as snapshot:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_t_xF2iQY_Jc/Si_1VznjDqI/AAAAAAAAAGA/UOwGyGBg3so/s1600-h/wseconfig.JPG"&gt;&lt;img src="http://4.bp.blogspot.com/_t_xF2iQY_Jc/Si_1VznjDqI/AAAAAAAAAGA/UOwGyGBg3so/s400/wseconfig.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5345761037694209698" style="cursor: pointer; width: 400px; height: 65px; " /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Create a new class file as bottom coding:&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Build the Class Library project and debugging.&lt;/li&gt;&lt;li&gt;From main web site, add reference for this new project and there should be a new dll happens in Bin folder.&lt;/li&gt;&lt;li&gt;Refer to the DLL project namespace with web service name to access.&lt;/li&gt;&lt;li&gt;Rebuild main web site and test them out.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;File: CustomSecurityAssertion.vb&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;Imports System&lt;/div&gt;&lt;div&gt;Imports System.Collections.Generic&lt;/div&gt;&lt;div&gt;Imports System.Text&lt;/div&gt;&lt;div&gt;Imports System.Xml&lt;/div&gt;&lt;div&gt;Imports System.Security.Cryptography.X509Certificates&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Imports Microsoft.Web.Services3&lt;/div&gt;&lt;div&gt;Imports Microsoft.Web.Services3.Design&lt;/div&gt;&lt;div&gt;Imports Microsoft.Web.Services3.Security&lt;/div&gt;&lt;div&gt;Imports Microsoft.Web.Services3.Security.Tokens&lt;/div&gt;&lt;div&gt;Namespace GiftRegistryProxy&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;    Class CustomSecurityAssertion&lt;/div&gt;&lt;div&gt;        Inherits SecurityPolicyAssertion&lt;/div&gt;&lt;div&gt;        Dim serviceX509TokenProviderValue As TokenProvider(Of X509SecurityToken)&lt;/div&gt;&lt;div&gt;        Dim clientX509TokenProviderValue As TokenProvider(Of X509SecurityToken)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;        Public Property ClientX509TokenProvider() As TokenProvider(Of X509SecurityToken)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;            Get&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;                Return clientX509TokenProviderValue&lt;/div&gt;&lt;div&gt;            End Get&lt;/div&gt;&lt;div&gt;            Set(ByVal value As TokenProvider(Of X509SecurityToken))&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;                clientX509TokenProviderValue = value&lt;/div&gt;&lt;div&gt;            End Set&lt;/div&gt;&lt;div&gt;        End Property&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;        Public Property ServiceX509TokenProvider() As TokenProvider(Of X509SecurityToken)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;            Get&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;                Return serviceX509TokenProviderValue&lt;/div&gt;&lt;div&gt;            End Get&lt;/div&gt;&lt;div&gt;            Set(ByVal value As TokenProvider(Of X509SecurityToken))&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;                serviceX509TokenProviderValue = value&lt;/div&gt;&lt;div&gt;            End Set&lt;/div&gt;&lt;div&gt;        End Property&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;        Public Sub New()&lt;/div&gt;&lt;div&gt;        End Sub 'New&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;        Public Overrides Function CreateClientOutputFilter(ByVal context As FilterCreationContext) As SoapFilter&lt;/div&gt;&lt;div&gt;            Return New CustomSecurityClientOutputFilter(Me)&lt;/div&gt;&lt;div&gt;        End Function 'CreateClientOutputFilter&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;        Public Overrides Function CreateClientInputFilter(ByVal context As FilterCreationContext) As SoapFilter&lt;/div&gt;&lt;div&gt;            Return Nothing&lt;/div&gt;&lt;div&gt;        End Function 'CreateClientInputFilter&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;        Public Overrides Function CreateServiceInputFilter(ByVal context As FilterCreationContext) As SoapFilter&lt;/div&gt;&lt;div&gt;            Return New CustomSecurityServerInputFilter(Me)&lt;/div&gt;&lt;div&gt;        End Function 'CreateServiceInputFilter&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;        Public Overrides Function CreateServiceOutputFilter(ByVal context As FilterCreationContext) As SoapFilter&lt;/div&gt;&lt;div&gt;            Return New CustomSecurityServerOutputFilter(Me)&lt;/div&gt;&lt;div&gt;        End Function 'CreateServiceOutputFilter&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;        Public Overrides Sub ReadXml(ByVal reader As XmlReader, ByVal extensions As IDictionary(Of String, Type))&lt;/div&gt;&lt;div&gt;            If reader Is Nothing Then&lt;/div&gt;&lt;div&gt;                Throw New ArgumentNullException("reader")&lt;/div&gt;&lt;div&gt;            End If&lt;/div&gt;&lt;div&gt;            If extensions Is Nothing Then&lt;/div&gt;&lt;div&gt;                Throw New ArgumentNullException("extensions")&lt;/div&gt;&lt;div&gt;            End If&lt;/div&gt;&lt;div&gt;            Dim isEmpty As Boolean = reader.IsEmptyElement&lt;/div&gt;&lt;div&gt;            MyBase.ReadAttributes(reader)&lt;/div&gt;&lt;div&gt;            reader.ReadStartElement("CustomSecurityAssertion")&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;            If Not isEmpty Then&lt;/div&gt;&lt;div&gt;                ' Read the contents of the &lt;clienttoken&gt; element.&lt;/clienttoken&gt;&lt;/div&gt;&lt;div&gt;                If reader.MoveToContent() = XmlNodeType.Element AndAlso reader.Name = "clientToken" Then&lt;/div&gt;&lt;div&gt;                    reader.ReadStartElement()&lt;/div&gt;&lt;div&gt;                    reader.MoveToContent()&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;                    ' Get the registed security token provider for X.509 certificate security credentials. &lt;/div&gt;&lt;div&gt;                    Dim type As Type = extensions(reader.Name)&lt;/div&gt;&lt;div&gt;                    Dim instance As Object = Activator.CreateInstance(type)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;                    If instance Is Nothing Then&lt;/div&gt;&lt;div&gt;                        Throw New InvalidOperationException(String.Format(System.Globalization.CultureInfo.CurrentCulture, "Unable to instantiate policy extension of type 0End.", type.AssemblyQualifiedName))&lt;/div&gt;&lt;div&gt;                    End If&lt;/div&gt;&lt;div&gt;                    Dim clientProvider As TokenProvider(Of X509SecurityToken) = CType(instance, TokenProvider(Of X509SecurityToken))&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;                    ' Read the child elements that provide the details about the client's X.509 certificate. &lt;/div&gt;&lt;div&gt;                    clientProvider.ReadXml(reader, extensions)&lt;/div&gt;&lt;div&gt;                    Me.ClientX509TokenProvider = clientProvider&lt;/div&gt;&lt;div&gt;                    reader.ReadEndElement()&lt;/div&gt;&lt;div&gt;                End If&lt;/div&gt;&lt;div&gt;                ' Read the contents of the &lt;servicetoken&gt; element.&lt;/servicetoken&gt;&lt;/div&gt;&lt;div&gt;                If reader.MoveToContent() = XmlNodeType.Element AndAlso reader.Name = "serviceToken" Then&lt;/div&gt;&lt;div&gt;                    reader.ReadStartElement()&lt;/div&gt;&lt;div&gt;                    reader.MoveToContent()&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;                    ' Get the registed security token provider for X.509 certificate security credentials. &lt;/div&gt;&lt;div&gt;                    Dim type As Type = extensions(reader.Name)&lt;/div&gt;&lt;div&gt;                    Dim instance As Object = Activator.CreateInstance(type)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;                    If instance Is Nothing Then&lt;/div&gt;&lt;div&gt;                        Throw New InvalidOperationException(String.Format(System.Globalization.CultureInfo.CurrentCulture, "Unable to instantiate policy extension of type 0End.", type.AssemblyQualifiedName))&lt;/div&gt;&lt;div&gt;                    End If&lt;/div&gt;&lt;div&gt;                    Dim serviceProvider As TokenProvider(Of X509SecurityToken) = CType(instance, TokenProvider(Of X509SecurityToken))&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;                    ' Read the child elements that provide the details about the client's X.509 certificate. &lt;/div&gt;&lt;div&gt;                    serviceProvider.ReadXml(reader, extensions)&lt;/div&gt;&lt;div&gt;                    Me.ServiceX509TokenProvider = serviceProvider&lt;/div&gt;&lt;div&gt;                    reader.ReadEndElement()&lt;/div&gt;&lt;div&gt;                End If&lt;/div&gt;&lt;div&gt;                MyBase.ReadElements(reader, extensions)&lt;/div&gt;&lt;div&gt;                reader.ReadEndElement()&lt;/div&gt;&lt;div&gt;            End If&lt;/div&gt;&lt;div&gt;        End Sub&lt;/div&gt;&lt;div&gt;        Public Overrides Function GetExtensions() As IEnumerable(Of KeyValuePair(Of String, Type))&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;            ' Add the CustomSecurityAssertion custom policy assertion to the list of registered&lt;/div&gt;&lt;div&gt;            ' policy extensions.&lt;/div&gt;&lt;div&gt;            Dim extensions As New List(Of KeyValuePair(Of String, Type))&lt;/div&gt;&lt;div&gt;            extensions.Add(New KeyValuePair(Of String, Type)("CustomSecurityAssertion", Me.GetType()))&lt;/div&gt;&lt;div&gt;            If (Not serviceX509TokenProviderValue Is Nothing) Then&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;                ' Add any policy extensions that read child elements of the &lt;servicetoken&gt; element&lt;/servicetoken&gt;&lt;/div&gt;&lt;div&gt;                ' to the list of registered policy extensions.&lt;/div&gt;&lt;div&gt;                Dim innerExtensions As IEnumerable(Of KeyValuePair(Of String, Type)) = serviceX509TokenProviderValue.GetExtensions()&lt;/div&gt;&lt;div&gt;                If (Not innerExtensions Is Nothing) Then&lt;/div&gt;&lt;div&gt;                    Dim extension As KeyValuePair(Of String, Type)&lt;/div&gt;&lt;div&gt;                    For Each extension In innerExtensions&lt;/div&gt;&lt;div&gt;                        extensions.Add(extension)&lt;/div&gt;&lt;div&gt;                    Next&lt;/div&gt;&lt;div&gt;                End If&lt;/div&gt;&lt;div&gt;            End If&lt;/div&gt;&lt;div&gt;            If (Not clientX509TokenProviderValue Is Nothing) Then&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;                ' Add any policy extensions that read child elements of the &lt;clienttoken&gt; element&lt;/clienttoken&gt;&lt;/div&gt;&lt;div&gt;                ' to the list of registered policy extensions.&lt;/div&gt;&lt;div&gt;                Dim innerExtensions As IEnumerable(Of KeyValuePair(Of String, Type)) = clientX509TokenProviderValue.GetExtensions()&lt;/div&gt;&lt;div&gt;                If (Not innerExtensions Is Nothing) Then&lt;/div&gt;&lt;div&gt;                    Dim extension As KeyValuePair(Of String, Type)&lt;/div&gt;&lt;div&gt;                    For Each extension In innerExtensions&lt;/div&gt;&lt;div&gt;                        extensions.Add(extension)&lt;/div&gt;&lt;div&gt;                    Next&lt;/div&gt;&lt;div&gt;                End If&lt;/div&gt;&lt;div&gt;            End If&lt;/div&gt;&lt;div&gt;            Return extensions&lt;/div&gt;&lt;div&gt;        End Function&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;    End Class 'CustomSecurityAssertion&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;    Class RequestState&lt;/div&gt;&lt;div&gt;        Private clientTokenValue As SecurityToken&lt;/div&gt;&lt;div&gt;        Private serverTokenValue As SecurityToken&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;        Public Sub New(ByVal cToken As SecurityToken, ByVal sToken As SecurityToken)&lt;/div&gt;&lt;div&gt;            clientTokenValue = cToken&lt;/div&gt;&lt;div&gt;            serverTokenValue = sToken&lt;/div&gt;&lt;div&gt;        End Sub 'New&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;        Public ReadOnly Property ClientToken() As SecurityToken&lt;/div&gt;&lt;div&gt;            Get&lt;/div&gt;&lt;div&gt;                Return clientTokenValue&lt;/div&gt;&lt;div&gt;            End Get&lt;/div&gt;&lt;div&gt;        End Property&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;        Public ReadOnly Property ServerToken() As SecurityToken&lt;/div&gt;&lt;div&gt;            Get&lt;/div&gt;&lt;div&gt;                Return serverTokenValue&lt;/div&gt;&lt;div&gt;            End Get&lt;/div&gt;&lt;div&gt;        End Property&lt;/div&gt;&lt;div&gt;    End Class 'RequestState &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;    Class CustomSecurityServerInputFilter&lt;/div&gt;&lt;div&gt;        Inherits ReceiveSecurityFilter&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;        Public Sub New(ByVal parentAssertion As CustomSecurityAssertion)&lt;/div&gt;&lt;div&gt;            MyBase.New(parentAssertion.ServiceActor, False)&lt;/div&gt;&lt;div&gt;        End Sub 'New&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;        Public Overrides Sub ValidateMessageSecurity(ByVal envelope As SoapEnvelope, ByVal security As Security)&lt;/div&gt;&lt;div&gt;            Dim clientToken As SecurityToken = Nothing&lt;/div&gt;&lt;div&gt;            Dim serverToken As SecurityToken = Nothing&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;            ' Ensure incoming SOAP messages are signed and encrypted.&lt;/div&gt;&lt;div&gt;            Dim elem As ISecurityElement&lt;/div&gt;&lt;div&gt;            For Each elem In security.Elements&lt;/div&gt;&lt;div&gt;                If TypeOf elem Is MessageSignature Then&lt;/div&gt;&lt;div&gt;                    Dim sig As MessageSignature = CType(elem, MessageSignature)&lt;/div&gt;&lt;div&gt;                    clientToken = sig.SigningToken&lt;/div&gt;&lt;div&gt;                End If&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;                If TypeOf elem Is EncryptedData Then&lt;/div&gt;&lt;div&gt;                    Dim enc As EncryptedData = CType(elem, EncryptedData)&lt;/div&gt;&lt;div&gt;                    serverToken = enc.SecurityToken&lt;/div&gt;&lt;div&gt;                End If&lt;/div&gt;&lt;div&gt;            Next elem&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;            If clientToken Is Nothing OrElse serverToken Is Nothing Then&lt;/div&gt;&lt;div&gt;                Throw New Exception("Incoming message did not meet security requirements")&lt;/div&gt;&lt;div&gt;            End If&lt;/div&gt;&lt;div&gt;            Dim state As New RequestState(clientToken, serverToken)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;            envelope.Context.OperationState.Set(state)&lt;/div&gt;&lt;div&gt;        End Sub 'ValidateMessageSecurity&lt;/div&gt;&lt;div&gt;    End Class 'CustomSecurityServerInputFilter&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;    Class CustomSecurityServerOutputFilter&lt;/div&gt;&lt;div&gt;        Inherits SendSecurityFilter&lt;/div&gt;&lt;div&gt;        Public Sub New(ByVal parentAssertion As CustomSecurityAssertion)&lt;/div&gt;&lt;div&gt;            MyBase.New(parentAssertion.ServiceActor, False)&lt;/div&gt;&lt;div&gt;        End Sub 'New&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;        Public Overrides Sub SecureMessage(ByVal envelope As SoapEnvelope, ByVal security As Security)&lt;/div&gt;&lt;div&gt;            Dim state As RequestState = envelope.Context.OperationState.Get(Of RequestState)()&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;            ' Sign the message with the Web service's security token.&lt;/div&gt;&lt;div&gt;            security.Tokens.Add(state.ServerToken)&lt;/div&gt;&lt;div&gt;            security.Elements.Add(New MessageSignature(state.ServerToken))&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;            ' Encrypt the message with the client's security token.&lt;/div&gt;&lt;div&gt;            security.Elements.Add(New EncryptedData(state.ClientToken))&lt;/div&gt;&lt;div&gt;        End Sub 'SecureMessage&lt;/div&gt;&lt;div&gt;    End Class 'CustomSecurityServerOutputFilter&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;    Class CustomSecurityClientInputFilter&lt;/div&gt;&lt;div&gt;        Inherits ReceiveSecurityFilter&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;        Public Sub New(ByVal parentAssertion As CustomSecurityAssertion)&lt;/div&gt;&lt;div&gt;            MyBase.New(parentAssertion.ServiceActor, True)&lt;/div&gt;&lt;div&gt;        End Sub 'New&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;        Public Overrides Sub ValidateMessageSecurity(ByVal envelope As SoapEnvelope, ByVal security As Security)&lt;/div&gt;&lt;div&gt;            Dim state As RequestState&lt;/div&gt;&lt;div&gt;            Dim signed As Boolean = False&lt;/div&gt;&lt;div&gt;            Dim encrypted As Boolean = False&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;            ' Get the request state out of the operation state.&lt;/div&gt;&lt;div&gt;            state = envelope.Context.OperationState.Get(Of RequestState)()&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;            ' Make sure the message was signed with the server's security token.&lt;/div&gt;&lt;div&gt;            Dim elem As ISecurityElement&lt;/div&gt;&lt;div&gt;            For Each elem In security.Elements&lt;/div&gt;&lt;div&gt;                If TypeOf elem Is MessageSignature Then&lt;/div&gt;&lt;div&gt;                    Dim sig As MessageSignature = CType(elem, MessageSignature)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;                    If sig.SigningToken.Equals(state.ServerToken) Then&lt;/div&gt;&lt;div&gt;                        signed = True&lt;/div&gt;&lt;div&gt;                    End If&lt;/div&gt;&lt;div&gt;                End If&lt;/div&gt;&lt;div&gt;                If TypeOf elem Is EncryptedData Then&lt;/div&gt;&lt;div&gt;                    Dim enc As EncryptedData = CType(elem, EncryptedData)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;                    If enc.SecurityToken.Equals(state.ClientToken) Then&lt;/div&gt;&lt;div&gt;                        encrypted = True&lt;/div&gt;&lt;div&gt;                    End If&lt;/div&gt;&lt;div&gt;                End If&lt;/div&gt;&lt;div&gt;            Next elem&lt;/div&gt;&lt;div&gt;            If Not signed OrElse Not encrypted Then&lt;/div&gt;&lt;div&gt;                Throw New Exception("Response message does not meet security requirements")&lt;/div&gt;&lt;div&gt;            End If&lt;/div&gt;&lt;div&gt;        End Sub 'ValidateMessageSecurity&lt;/div&gt;&lt;div&gt;    End Class 'CustomSecurityClientInputFilter&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;    Class CustomSecurityClientOutputFilter&lt;/div&gt;&lt;div&gt;        Inherits SendSecurityFilter&lt;/div&gt;&lt;div&gt;        Private clientToken As SecurityToken&lt;/div&gt;&lt;div&gt;        Private serverToken As SecurityToken&lt;/div&gt;&lt;div&gt;        Protected keystore As String = System.Configuration.ConfigurationManager.AppSettings("keystore")&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;        Public Sub New(ByVal parentAssertion As CustomSecurityAssertion)&lt;/div&gt;&lt;div&gt;            MyBase.New(parentAssertion.ServiceActor, True)&lt;/div&gt;&lt;div&gt;            ' Get the client security token.&lt;/div&gt;&lt;div&gt;            'clientToken = X509TokenProvider.CreateToken(StoreLocation.CurrentUser, StoreName.My, "CN=Customretailergrworksservice, OU=Custom, O=MarCoole, L=Walnut Creek, S=California, C=US")&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;            '####################### Start update for key handler&lt;/div&gt;&lt;div&gt;            Dim cert As X509Certificate2 = New X509Certificate2(keystore, "CustomGRWorksServiceRetailer")&lt;/div&gt;&lt;div&gt;            clientToken = New X509SecurityToken(cert)&lt;/div&gt;&lt;div&gt;            '####################### End update for key handler&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;            ' Get the server security token.&lt;/div&gt;&lt;div&gt;            serverToken = X509TokenProvider.CreateToken(StoreLocation.LocalMachine, StoreName.My, "CN=Customretailergrworksservice, OU=Custom, O=MarCoole, L=Walnut Creek, S=California, C=US")&lt;/div&gt;&lt;div&gt;        End Sub 'New&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;        Public Overrides Sub SecureMessage(ByVal envelope As SoapEnvelope, ByVal security As Security)&lt;/div&gt;&lt;div&gt;            'Dim token As X509SecurityToken = GetSecurityToken("CN=Customretailergrworksservice, OU=Custom, O=MarCoole, L=Walnut Creek, S=California, C=US")&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;            '####################### Start update for key handler&lt;/div&gt;&lt;div&gt;            Dim cert As X509Certificate2 = New X509Certificate2(keystore, "CustomGRWorksServiceRetailer")&lt;/div&gt;&lt;div&gt;            Dim token = New X509SecurityToken(cert)&lt;/div&gt;&lt;div&gt;            '####################### End update for key handler&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;            If token Is Nothing Then&lt;/div&gt;&lt;div&gt;                Throw New SecurityFault("Message Requirements could not be satisfied.")&lt;/div&gt;&lt;div&gt;            End If&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;            ' Add the security token to the WS-Security SOAP header. &lt;/div&gt;&lt;div&gt;            security.Tokens.Add(token)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;            ' Specify the security token to sign the message with.&lt;/div&gt;&lt;div&gt;            Dim sig As New MessageSignature(token)&lt;/div&gt;&lt;div&gt;            security.Elements.Add(sig)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;            '######################################### Start xml header definition&lt;/div&gt;&lt;div&gt;            security.EncodedMustUnderstand = "0"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;            'creating the custom &lt;wsse:security&gt; element in the outgoing message&lt;/wsse:security&gt;&lt;/div&gt;&lt;div&gt;            Dim securityNode As XmlNode = envelope.CreateNode(XmlNodeType.Element, "wsse:Security", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd")&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;            'creating the &lt;wsse:binarysecuritytoken&gt; element&lt;/wsse:binarysecuritytoken&gt;&lt;/div&gt;&lt;div&gt;            Dim binarySecurityTokenNode As XmlNode = envelope.CreateNode(XmlNodeType.Element, "wsse:BinarySecurityToken", "")&lt;/div&gt;&lt;div&gt;            Dim binaryElement As XmlElement = binarySecurityTokenNode&lt;/div&gt;&lt;div&gt;            binaryElement.SetAttribute("xmlns:wsu", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd")&lt;/div&gt;&lt;div&gt;            binaryElement.SetAttribute("ValueType", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3")&lt;/div&gt;&lt;div&gt;            binaryElement.SetAttribute("wsu:Id", "CertId-3221922")&lt;/div&gt;&lt;div&gt;            binaryElement.SetAttribute("EncodingType", "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary")&lt;/div&gt;&lt;div&gt;            binarySecurityTokenNode.InnerText = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;            securityNode.AppendChild(binarySecurityTokenNode)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;            envelope.ImportNode(securityNode, True)&lt;/div&gt;&lt;div&gt;            Dim node As XmlNode = envelope.Header&lt;/div&gt;&lt;div&gt;            node.AppendChild(securityNode)&lt;/div&gt;&lt;div&gt;            '######################################### End xml header definition&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;        End Sub 'SecureMessage&lt;/div&gt;&lt;div&gt;    End Class 'CustomSecurityClientOutputFilter&lt;/div&gt;&lt;div&gt;End Namespace&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-5418810347583226902?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/5418810347583226902/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=5418810347583226902' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/5418810347583226902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/5418810347583226902'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2009/06/steps-to-use-vs-2008-with-wse-30-to.html' title='Steps to use VS 2008 with WSE 3.0 to create client for calling to Axis2 Web Services WSDL file'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_t_xF2iQY_Jc/Si_zXN1ztmI/AAAAAAAAAF4/WSO9BQ_Vk7E/s72-c/webconfig.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-120715602209638022</id><published>2009-06-09T10:38:00.004-05:00</published><updated>2009-06-09T11:03:41.282-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JKS'/><category scheme='http://www.blogger.com/atom/ns#' term='PFX'/><category scheme='http://www.blogger.com/atom/ns#' term='Keytool'/><category scheme='http://www.blogger.com/atom/ns#' term='WS-Security'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenSSL'/><title type='text'>How to convert Java JKS keystore to Microsoft PFX certificate</title><content type='html'>&lt;div&gt;I have some case need to create .NET WSE 3 Client to refer Axis2 Web Services with WSS4J OASIS Security( WS-Security specification 1.0), if you have only the Java format keystore, you have to convert it to MS format for signatures upon web service call.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;Steps which were testified successfully follows here:&lt;div&gt;&lt;ol&gt;&lt;li&gt;Download J2SE package and setup JDK and JRE 6 on workstation. (There are many internet information about it, so omit here)&lt;/li&gt;&lt;li&gt;Download KeyTool IUI version 2.4.1 (Match with JRE 6) from (http://yellowcat1.free.fr/index_ktl.html) and unzip to some folder and double click to run file run_ktl.bat to open visiable KeyTool IUI window&lt;/li&gt;&lt;li&gt;Click menu [View] - [Select task] - [Export] - [Keystore's entry] - [Private key]&lt;/li&gt;&lt;li&gt;Click browser icon to pick up the keystore JKS file and enter the keystore password in Source.&lt;/li&gt;&lt;li&gt;Click to select PEM format on both Target Private key file and Certificates chain file:&lt;/li&gt;&lt;li&gt;Click the save icon to designate some local folder to save the 2 PEM files.&lt;/li&gt;&lt;li&gt;Manullay create a text file merged.pem and merge these 2 PEM files to one pem file. ( Use notepad to open the 2 PEM files and respectively copy to merge in, CERTIFICATE first and then RSA PRIVATE KEY.&lt;/li&gt;&lt;li&gt;Download and setup OpenSSL (http://www.slproweb.com/products/Win32OpenSSL.html)&lt;/li&gt;&lt;li&gt;Open command line and run follows: ( Assume the openssl in C root and you want the PFX file name: pfxname&lt;br /&gt;C:\OpenSSL\bin\openssl pkcs12  -export -out pfxname.pfx -in merged.pem&lt;/li&gt;&lt;li&gt;You will find the pfx file in current folder then.&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-120715602209638022?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/120715602209638022/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=120715602209638022' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/120715602209638022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/120715602209638022'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2009/06/how-to-convert-java-jks-keystore-to.html' title='How to convert Java JKS keystore to Microsoft PFX certificate'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-7751493598319444210</id><published>2009-01-29T10:26:00.020-06:00</published><updated>2009-02-13T14:22:56.107-06:00</updated><title type='text'>Snapshots</title><content type='html'>&lt;span style="color:#660000;"&gt;Sharepoint for BlackBerry App (Web Part implement)&lt;/span&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_t_xF2iQY_Jc/SYHtb37VTuI/AAAAAAAAAFI/OyUrtrQZGOU/s1600-h/1-29-2009+11-45-53+AM.png"&gt;&lt;/a&gt;&lt;a href="http://1.bp.blogspot.com/_t_xF2iQY_Jc/SYHwRnSnyPI/AAAAAAAAAFQ/eqVg3LFiF98/s1600-h/1-29-2009+11-45-53+AM.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5296778822159943922" style="WIDTH: 214px; CURSOR: hand; HEIGHT: 320px" alt="" src="http://1.bp.blogspot.com/_t_xF2iQY_Jc/SYHwRnSnyPI/AAAAAAAAAFQ/eqVg3LFiF98/s320/1-29-2009+11-45-53+AM.png" border="0" /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/_t_xF2iQY_Jc/SYHtX9uoUVI/AAAAAAAAAE4/x9v6G7kBlBU/s1600-h/1-29-2009+11-44-45+AM.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5296775632727331154" style="WIDTH: 214px; CURSOR: hand; HEIGHT: 320px" alt="" src="http://3.bp.blogspot.com/_t_xF2iQY_Jc/SYHtX9uoUVI/AAAAAAAAAE4/x9v6G7kBlBU/s320/1-29-2009+11-44-45+AM.png" border="0" /&gt;&lt;/a&gt;&lt;a href="http://3.bp.blogspot.com/_t_xF2iQY_Jc/SYHtYYPe-gI/AAAAAAAAAFA/Vkf0JUq9t2g/s1600-h/1-29-2009+11-45-07+AM.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5296775639844452866" style="WIDTH: 218px; CURSOR: hand; HEIGHT: 320px" alt="" src="http://3.bp.blogspot.com/_t_xF2iQY_Jc/SYHtYYPe-gI/AAAAAAAAAFA/Vkf0JUq9t2g/s320/1-29-2009+11-45-07+AM.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;span style="color:#660000;"&gt;DocAve of TSM for SharePoint&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://3.bp.blogspot.com/_t_xF2iQY_Jc/SYHtXgdllHI/AAAAAAAAAEw/9Z4ddXTiPio/s1600-h/1-29-2009+10-49-51+AM.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5296775624871220338" style="WIDTH: 320px; CURSOR: hand; HEIGHT: 240px" alt="" src="http://3.bp.blogspot.com/_t_xF2iQY_Jc/SYHtXgdllHI/AAAAAAAAAEw/9Z4ddXTiPio/s320/1-29-2009+10-49-51+AM.png" border="0" /&gt;&lt;/a&gt; &lt;a href="http://4.bp.blogspot.com/_t_xF2iQY_Jc/SYHtXfgL3LI/AAAAAAAAAEo/a3T1ItEYlxA/s1600-h/1-29-2009+10-39-03+AM.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5296775624613682354" style="WIDTH: 320px; CURSOR: hand; HEIGHT: 167px" alt="" src="http://4.bp.blogspot.com/_t_xF2iQY_Jc/SYHtXfgL3LI/AAAAAAAAAEo/a3T1ItEYlxA/s320/1-29-2009+10-39-03+AM.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="color:#660000;"&gt;SharePoint Portal&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://1.bp.blogspot.com/_t_xF2iQY_Jc/SYHtXImdOwI/AAAAAAAAAEg/9TD8a2j7mno/s1600-h/1-29-2009+10-36-15+AM.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5296775618465970946" style="WIDTH: 320px; CURSOR: hand; HEIGHT: 167px" alt="" src="http://1.bp.blogspot.com/_t_xF2iQY_Jc/SYHtXImdOwI/AAAAAAAAAEg/9TD8a2j7mno/s320/1-29-2009+10-36-15+AM.png" border="0" /&gt;&lt;/a&gt; &lt;a href="http://4.bp.blogspot.com/_t_xF2iQY_Jc/SYHtMEio_YI/AAAAAAAAAEY/_bYd2YK03H8/s1600-h/1-29-2009+10-34-35+AM.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5296775428397661570" style="WIDTH: 320px; CURSOR: hand; HEIGHT: 167px" alt="" src="http://4.bp.blogspot.com/_t_xF2iQY_Jc/SYHtMEio_YI/AAAAAAAAAEY/_bYd2YK03H8/s320/1-29-2009+10-34-35+AM.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://3.bp.blogspot.com/_t_xF2iQY_Jc/SYHtIaw6QeI/AAAAAAAAAEQ/TCHkU7_7smM/s1600-h/1-29-2009+10-34-03+AM.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5296775365643616738" style="WIDTH: 320px; CURSOR: hand; HEIGHT: 167px" alt="" src="http://3.bp.blogspot.com/_t_xF2iQY_Jc/SYHtIaw6QeI/AAAAAAAAAEQ/TCHkU7_7smM/s320/1-29-2009+10-34-03+AM.png" border="0" /&gt;&lt;/a&gt; &lt;a href="http://3.bp.blogspot.com/_t_xF2iQY_Jc/SYHtFKSPOeI/AAAAAAAAAEI/1kFo0pkIY7c/s1600-h/1-29-2009+10-31-46+AM.png"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://1.bp.blogspot.com/_t_xF2iQY_Jc/SYHstdyk9XI/AAAAAAAAADw/-P-OFbNlx_I/s1600-h/1-29-2009+10-31-21+AM.png"&gt;&lt;/a&gt; &lt;a href="http://4.bp.blogspot.com/_t_xF2iQY_Jc/SYHspzcVF-I/AAAAAAAAADo/qVMum9PvlJo/s1600-h/1-29-2009+10-30-26+AM.png"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://4.bp.blogspot.com/_t_xF2iQY_Jc/SYHsjIFc1XI/AAAAAAAAADg/fX1sNey0V5g/s1600-h/1-29-2009+10-29-12+AM.png"&gt;&lt;/a&gt; &lt;a href="http://1.bp.blogspot.com/_t_xF2iQY_Jc/SYHsdLKNaTI/AAAAAAAAADY/ku8tXEhDbC0/s1600-h/1-29-2009+10-27-21+AM.png"&gt;&lt;/a&gt; &lt;a href="http://3.bp.blogspot.com/_t_xF2iQY_Jc/SYHsYBpj0BI/AAAAAAAAADQ/PwQuD_UmS6g/s1600-h/1-29-2009+10-26-50+AM.png"&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-7751493598319444210?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/7751493598319444210/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=7751493598319444210' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/7751493598319444210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/7751493598319444210'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2009/01/snapshots.html' title='Snapshots'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_t_xF2iQY_Jc/SYHwRnSnyPI/AAAAAAAAAFQ/eqVg3LFiF98/s72-c/1-29-2009+11-45-53+AM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-2375617655562896786</id><published>2009-01-14T13:12:00.003-06:00</published><updated>2009-01-14T13:17:53.200-06:00</updated><title type='text'>A publishing site definition solution snapshot.</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_t_xF2iQY_Jc/SW46T4EbWkI/AAAAAAAAACo/jadKnqlft8E/s1600-h/1-14-2009+1-12-21+PM.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5291230725349792322" style="WIDTH: 186px; CURSOR: hand; HEIGHT: 320px" alt="" src="http://3.bp.blogspot.com/_t_xF2iQY_Jc/SW46T4EbWkI/AAAAAAAAACo/jadKnqlft8E/s320/1-14-2009+1-12-21+PM.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-2375617655562896786?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/2375617655562896786/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=2375617655562896786' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/2375617655562896786'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/2375617655562896786'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2009/01/publishing-site-definition-solution.html' title='A publishing site definition solution snapshot.'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_t_xF2iQY_Jc/SW46T4EbWkI/AAAAAAAAACo/jadKnqlft8E/s72-c/1-14-2009+1-12-21+PM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-6290385249653618333</id><published>2009-01-14T13:03:00.004-06:00</published><updated>2009-01-14T13:21:53.385-06:00</updated><title type='text'>The Microsoft SharePoint Theme Definition Xml Bug</title><content type='html'>&lt;div&gt;Blowing snow outside and even can not to see the faced person. Keep dig out my second version of custom theme.&lt;br /&gt;&lt;br /&gt;The bug description: you can not define the TemplateID of 12\TEMPLATE\LAYOUTS\1033\SPTHEMES.XML with the same first 8 letters naming or it will show you error of "A theme with the name "XXXX" and version already exists on the server".&lt;br /&gt;&lt;br /&gt;I met such error when I create my second version of one custom theme. &lt;/div&gt;&lt;a href="http://1.bp.blogspot.com/_t_xF2iQY_Jc/SW47SNV82TI/AAAAAAAAADA/CJ3kjhhxL2w/s1600-h/1-14-2009+1-09-58+PM.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5291231796212324658" style="WIDTH: 208px; CURSOR: hand; HEIGHT: 320px" alt="" src="http://1.bp.blogspot.com/_t_xF2iQY_Jc/SW47SNV82TI/AAAAAAAAADA/CJ3kjhhxL2w/s320/1-14-2009+1-09-58+PM.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://2.bp.blogspot.com/_t_xF2iQY_Jc/SW45Eu2XweI/AAAAAAAAACg/cpqCEkjWnw0/s1600-h/1-14-2009+1-09-58+PM.png"&gt;&lt;/a&gt;&lt;a href="http://1.bp.blogspot.com/_t_xF2iQY_Jc/SW46rXnLK4I/AAAAAAAAACw/LYSr9Jt_x-g/s1600-h/1-14-2009+12-57-41+PM.png"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-6290385249653618333?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/6290385249653618333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=6290385249653618333' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/6290385249653618333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/6290385249653618333'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2009/01/microsoft-sharepoint-theme-definition.html' title='The Microsoft SharePoint Theme Definition Xml Bug'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_t_xF2iQY_Jc/SW47SNV82TI/AAAAAAAAADA/CJ3kjhhxL2w/s72-c/1-14-2009+1-09-58+PM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-6014799890698729263</id><published>2009-01-14T12:29:00.009-06:00</published><updated>2009-01-14T13:23:43.928-06:00</updated><title type='text'>10 steps to create custom field control by STSDEV</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_t_xF2iQY_Jc/SW47DppAO5I/AAAAAAAAAC4/pnyOvEEj57s/s1600-h/1-14-2009+12-57-41+PM.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5291231546110393234" style="FLOAT: right; MARGIN: 0px 0px 10px 10px; WIDTH: 178px; CURSOR: hand; HEIGHT: 320px" alt="" src="http://3.bp.blogspot.com/_t_xF2iQY_Jc/SW47DppAO5I/AAAAAAAAAC4/pnyOvEEj57s/s320/1-14-2009+12-57-41+PM.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;a href="http://4.bp.blogspot.com/_t_xF2iQY_Jc/SW42NHJjGuI/AAAAAAAAACY/50IKWBEhM3k/s1600-h/1-14-2009+12-57-41+PM.png"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;Basically, the field control is a easy implement to deploy.&lt;br /&gt;There's a Field Control template within SharePoint template when you create by VS 2008.&lt;br /&gt;Usually, best bet is create one by VS SharePoint template and test it out then pack by STSDEV and deploy. Here is the 10 main steps:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;VS 2008 - Tools - STSDEV (need configured first), create a STSDEV solution by solution type: Empty solution (C# assembly), don't forget to create a correlative key.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Open the C# solution and add a new SharePoint Empty project by this solution.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Add a new Field Control into the SharePoint project.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Create a XXXXFieldRending.ascx file to TEMPLATE\CONTROLTEMPLATES\XXXXFieldRending.ascx&lt;br /&gt;Here is the example code:&lt;br /&gt;&lt;br /&gt;&amp;lt%@ Control Language="C#" Debug="true"%&amp;gt&lt;br /&gt;&amp;lt%@ Assembly Name="Microsoft.SharePoint,Version=12.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c" %&amp;gt&lt;br /&gt;&amp;lt%@ Register TagPrefix="SharePoint" Assembly="Microsoft.SharePoint,Version=12.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c" namespace="Microsoft.SharePoint.WebControls"%&amp;gt&lt;br /&gt;&lt;br /&gt;&amp;ltSharePoint:RenderingTemplate ID="KBIDFieldRendering" runat="server"&amp;gt&lt;br /&gt;    &amp;ltTemplate&amp;gt&lt;br /&gt;        &amp;lttable class="ms-form"&amp;gt&lt;br /&gt;            &amp;lttr&amp;gt&lt;br /&gt;                &amp;lttd&amp;gt&lt;br /&gt;                &amp;ltasp:Literal ID="Desc_Category" runat="server"&amp;gt&amp;lt/asp:Literal&amp;gt&lt;br /&gt;                &amp;ltasp:Literal ID="Category" runat="server"&amp;gt&amp;lt/asp:Literal&amp;gt&lt;br /&gt;                &amp;ltasp:Literal ID="Desc_KBID" runat="server"&amp;gt&amp;lt/asp:Literal&amp;gt&lt;br /&gt;                &amp;ltasp:Literal ID="KBID" runat="server"&amp;gt&amp;lt/asp:Literal&amp;gt&lt;br /&gt;                &amp;lt/td&amp;gt&lt;br /&gt;            &amp;lt/tr&amp;gt&lt;br /&gt;        &amp;lt/table&amp;gt&lt;br /&gt;    &amp;lt/Template&amp;gt&lt;br /&gt;&amp;lt/SharePoint:RenderingTemplate&amp;gt&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Open TEMPLATE\XML\fldtypes_XXXX.xml, get assembly string and put in Field Name="FieldTypeClass", RenderPattern Name="DisplayPattern" can be finally put and test.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Update and overwrite the XXXX\XXXX.FieldControl.cs&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Debugging and compiling SharePoint project to test working fine. (Need copy ascx, xml and dll file to correct system folders and then iisreset)&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Drag folder XXXX and TEMPLATE into the STSDEV project, XXXX within project root, TEMPLATE is supposed to put in Rootfiles\&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Debug and compile the STSDEV project at DebugBuild mode.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Change mode to DebugDeploy and build STSDEV project for deploy to MOSS site. You will see the correct field type when you create a new column in site.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-6014799890698729263?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/6014799890698729263/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=6014799890698729263' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/6014799890698729263'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/6014799890698729263'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2009/01/10-steps-to-create-custom-field-control.html' title='10 steps to create custom field control by STSDEV'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_t_xF2iQY_Jc/SW47DppAO5I/AAAAAAAAAC4/pnyOvEEj57s/s72-c/1-14-2009+12-57-41+PM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-2824391809136455577</id><published>2008-12-24T10:52:00.003-06:00</published><updated>2008-12-24T13:37:47.526-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delete MasterPage'/><title type='text'>How to delete master page from Master Page Gallery</title><content type='html'>As title description, you will find the window pops up the error message as following:&lt;br /&gt;&lt;blockquote&gt;This item cannot be deleted because it is still referenced by other pages. &lt;/blockquote&gt;The delete method:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Open Site Action-Master Page Gallery, click New -Folder to create a new temp folder.&lt;/li&gt;&lt;li&gt;Open the site by SharePoint Designer, click left tree menu to open _catalogs\masterpage, and drag the master file into the temp folder.&lt;/li&gt;&lt;li&gt;Back to IE-Master Page Gallery and press F5 to refresh and then dropdown the temp folder and click [Delete].&lt;/li&gt;&lt;li&gt;Back SharePoint Designer and press [Delete] button to delete the temp folder and press F5 to refresh.&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-2824391809136455577?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/2824391809136455577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=2824391809136455577' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/2824391809136455577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/2824391809136455577'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2008/12/how-to-delete-master-page-from-master.html' title='How to delete master page from Master Page Gallery'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-58122308031018319</id><published>2008-12-17T14:17:00.002-06:00</published><updated>2008-12-17T14:37:57.112-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='theme  css'/><title type='text'>Update the Theme CSS immediately.</title><content type='html'>Once you are doing change css for a page redering to see, you will find it doesn't work immediately if you change something in theme.css or mossExtension.css.&lt;br /&gt;&lt;br /&gt;The way to make it works is doing iisreset, it's a permanent change.&lt;br /&gt;You can use SharePoint Designer to open another temporary file named like Xxxx1011-65001.css which is merged by both of theme.css and mossExtension.css. This file is under _themes\yourthemefolder.&lt;br /&gt;&lt;br /&gt;It will be available immediately.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-58122308031018319?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/58122308031018319/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=58122308031018319' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/58122308031018319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/58122308031018319'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2008/12/update-theme-css-immediately.html' title='Update the Theme CSS immediately.'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-3368120029968438522</id><published>2008-12-17T10:53:00.000-06:00</published><updated>2008-12-17T10:56:08.180-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RegistrationId list'/><title type='text'>RegistrationId List Template Type IDs</title><content type='html'>RegistrationId List Template Type IDs&lt;br /&gt;InvalidType = -1&lt;br /&gt;GenericList = 100&lt;br /&gt;DocumentLibrary = 101&lt;br /&gt;Survey = 102Links = 103&lt;br /&gt;Announcements = 104&lt;br /&gt;Contacts = 105&lt;br /&gt;Events = 106&lt;br /&gt;Tasks = 107&lt;br /&gt;DiscussionBoard = 108&lt;br /&gt;PictureLibrary = 109&lt;br /&gt;DataSources = 110&lt;br /&gt;WebTemplateCatalog = 111&lt;br /&gt;UserInformation = 112&lt;br /&gt;WebPartCatalog = 113&lt;br /&gt;ListTemplateCatalog = 114&lt;br /&gt;XMLForm = 115 (InfoPath Forms Library)&lt;br /&gt;MasterPageCatalog = 116&lt;br /&gt;NoCodeWorkflows = 117&lt;br /&gt;WorkflowProcess = 118&lt;br /&gt;WebPageLibrary = 119&lt;br /&gt;CustomGrid = 120&lt;br /&gt;DataConnectionLibrary = 130&lt;br /&gt;WorkflowHistory = 140&lt;br /&gt;GanttTasks = 150&lt;br /&gt;Meetings = 200&lt;br /&gt;Agenda = 201&lt;br /&gt;MeetingUser = 202&lt;br /&gt;Decision = 204&lt;br /&gt;MeetingObjective = 207&lt;br /&gt;TextBox = 210&lt;br /&gt;ThingsToBring = 211&lt;br /&gt;HomePageLibrary = 212&lt;br /&gt;Posts = 301&lt;br /&gt;Comments = 302&lt;br /&gt;Categories = 303&lt;br /&gt;Pages = 850&lt;br /&gt;IssueTracking = 1100&lt;br /&gt;AdminTasks = 1200&lt;br /&gt;Translation Management Library = 1300&lt;br /&gt;Languages &amp;amp; Translations = 1301&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-3368120029968438522?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/3368120029968438522/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=3368120029968438522' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/3368120029968438522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/3368120029968438522'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2008/12/registrationid-list-template-type-ids.html' title='RegistrationId List Template Type IDs'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-6311269364872313124</id><published>2008-12-08T16:06:00.002-06:00</published><updated>2008-12-08T16:11:50.942-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='remove theme'/><category scheme='http://www.blogger.com/atom/ns#' term='delete theme'/><title type='text'>How to remove the site theme from site settings</title><content type='html'>After you deployed custom theme by STSDEV and then retract and delete the solution.&lt;br /&gt;&lt;br /&gt;You will find it will still exist on site settings-site theme (&lt;a href="http://mysharepoint/_layouts/themeweb.aspx"&gt;http://mysharepoint/_layouts/themeweb.aspx&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;To remove it, open the file C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\LAYOUTS\1033\SPTHEMES.XML , find the corresponding templates and delete it.&lt;br /&gt;&lt;br /&gt;You will see it disappear from the theme management after iisreset.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-6311269364872313124?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/6311269364872313124/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=6311269364872313124' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/6311269364872313124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/6311269364872313124'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2008/12/how-to-remove-site-theme-from-site.html' title='How to remove the site theme from site settings'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-8677289038772849324</id><published>2008-12-08T13:33:00.003-06:00</published><updated>2008-12-08T13:43:55.736-06:00</updated><title type='text'>STSDEV with Theme function error handle</title><content type='html'>When you first time to create a solution for theme definition by STSDEV theme version. You might be see the error message when do a deployment as following:&lt;br /&gt;The 'ReceiverAssembly' attribute is invalid.&lt;br /&gt;&lt;br /&gt;The steps to fix this issue:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Install Reflector and running it. ( If there's not already, you are going to download it from &lt;a href="http://www.red-gate.com/products/reflector/"&gt;http://www.red-gate.com/products/reflector/&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;Run reflector and open the directory which host solution dll file. (Your solution folder\bin\Debug) And drag the dll into the reflector panel and then click the new added one.&lt;/li&gt;&lt;li&gt;Copy the name string from bottle panel of reflector and paste into "ReceiveAssembly item" of file feature.xml.&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-8677289038772849324?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/8677289038772849324/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=8677289038772849324' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/8677289038772849324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/8677289038772849324'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2008/12/stsdev-with-theme-function-error-handle.html' title='STSDEV with Theme function error handle'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-6531964075022248787</id><published>2008-11-25T09:44:00.007-06:00</published><updated>2008-11-25T10:20:41.349-06:00</updated><title type='text'>Most simple site definition master page. (Fix error)</title><content type='html'>When edit a most simple webpart page, you got error as following desc:&lt;br /&gt;&lt;br /&gt;The system cannot find the file specified. (Exception from HRESULT: 0x80070002)&lt;br /&gt;&lt;br /&gt;You will find the page element is right AuthoringContainer, remove the corresponding item in masterpage as following:&lt;br /&gt;&lt;br /&gt;&lt;?XML:NAMESPACE PREFIX = PublishingWebControls /&gt;&lt;publishingwebcontrols:authoringcontainer id="authoringcontrols" runat="server"&gt;&lt;br /&gt;&amp;lt;PublishingWebControls:AuthoringContainer id="authoringcontrols" runat="server" &amp;gt; &lt;br /&gt;&amp;lt;PublishingConsole:Console runat="server" / &amp;gt; &amp;lt;/PublishingWebControls:AuthoringContainer&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The final most simple masterpage will be :&lt;br /&gt;&lt;blockquote&gt;&lt;p&gt;&amp;lt;%-- Identifies this page as a .master page written in Microsoft Visual C# and registers tag prefixes, namespaces, assemblies, and controls. --%&amp;gt;&lt;br /&gt;&amp;lt;%@ Master language="C#" %&amp;gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&amp;gt;&lt;br /&gt;&amp;lt;%@ Import Namespace="Microsoft.SharePoint" %&amp;gt;&lt;br /&gt;&amp;lt;%@ Register Tagprefix="SPSWC" Namespace="Microsoft.SharePoint.Portal.WebControls" Assembly="Microsoft.SharePoint.Portal, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %&amp;gt;&lt;br /&gt;&amp;lt;%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %&amp;gt;&lt;br /&gt;&amp;lt;%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %&amp;gt;&lt;br /&gt;&amp;lt;%@ Register Tagprefix="PublishingWebControls" Namespace="Microsoft.SharePoint.Publishing.WebControls" Assembly="Microsoft.SharePoint.Publishing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %&amp;gt;&lt;br /&gt;&amp;lt;%@ Register Tagprefix="PublishingNavigation" Namespace="Microsoft.SharePoint.Publishing.Navigation" Assembly="Microsoft.SharePoint.Publishing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %&amp;gt;&lt;br /&gt;&amp;lt;%@ Register TagPrefix="wssuc" TagName="Welcome" src="~/_controltemplates/Welcome.ascx" %&amp;gt;&lt;br /&gt;&amp;lt;%@ Register TagPrefix="wssuc" TagName="DesignModeConsole" src="~/_controltemplates/DesignModeConsole.ascx" %&amp;gt;&lt;br /&gt;&amp;lt;%@ Register TagPrefix="PublishingVariations" TagName="VariationsLabelMenu" src="~/_controltemplates/VariationsLabelMenu.ascx" %&amp;gt;&lt;br /&gt;&amp;lt;%@ Register Tagprefix="PublishingConsole" TagName="Console" src="~/_controltemplates/PublishingConsole.ascx" %&amp;gt;&lt;br /&gt;&amp;lt;%@ Register TagPrefix="PublishingSiteAction" TagName="SiteActionMenu" src="~/_controltemplates/PublishingActionMenu.ascx" %&amp;gt;&lt;br /&gt;&amp;lt;%-- Uses the Microsoft Office namespace and schema. --%&amp;gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;WebPartPages:SPWebPartManager runat="server"/&amp;gt; &amp;lt;SharePoint:RobotsMetaTag runat="server"/&amp;gt;&lt;br /&gt;&amp;lt;%-- The head section includes a content placeholder for the page title and links to CSS and ECMAScript (JScript, JavaScript) files that run on the server. --%&amp;gt;&lt;br /&gt;&amp;lt;head runat="server"&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder runat="server" id="head"&amp;gt;&lt;br /&gt;&amp;lt;title&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder id="PlaceHolderPageTitle" runat="server" /&amp;gt;&lt;br /&gt;&amp;lt;/title&amp;gt; &amp;lt;/asp:ContentPlaceHolder&amp;gt; &amp;lt;Sharepoint:CssLink runat="server"/&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder id="PlaceHolderAdditionalPageHead" runat="server" /&amp;gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;%-- When loading the body of the .master page, SharePoint Server 2007 also loads the SpBodyOnLoadWrapper class. This class handles .js calls for the master page. --%&amp;gt;&lt;br /&gt;&amp;lt;body onload="javascript:_spBodyOnLoadWrapper();"&amp;gt;&lt;br /&gt;&amp;lt;%-- The SPWebPartManager manages all of the Web part controls, functionality, and events that occur on a Web page. --%&amp;gt;&lt;br /&gt;&amp;lt;form runat="server" onsubmit="return _spFormOnSubmitWrapper();"&amp;gt;&lt;br /&gt;&amp;lt;wssuc:Welcome id="explitLogout" runat="server"/&amp;gt;&lt;br /&gt;&amp;lt;PublishingSiteAction:SiteActionMenu runat="server"/&amp;gt;&lt;br /&gt;&amp;lt;%-- The PlaceHolderMain content placeholder defines where to place the page content for all the content from the page layout. The page layout can overwrite any content placeholder from the master page. Example: The PlaceHolderLeftNavBar can overwrite the left navigation bar. --%&amp;gt; &amp;lt;asp:ContentPlaceHolder id="PlaceHolderMain" runat="server" /&amp;gt; &lt;br /&gt;&amp;lt;asp:Panel visible="false" runat="server"&amp;gt;&lt;br /&gt;&amp;lt;%-- These ContentPlaceHolders ensure all default SharePoint Server pages render with this master page. If the system master page is set to any default master page, the only content placeholders required are those that are overridden by your page layouts. --%&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder id="PlaceHolderSearchArea" runat="server"/&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder id="PlaceHolderTitleBreadcrumb" runat="server"/&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder id="PlaceHolderPageTitleInTitleArea" runat="server"/&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder id="PlaceHolderLeftNavBar" runat="server"/&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder ID="PlaceHolderPageImage" runat="server"/&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder ID="PlaceHolderBodyLeftBorder" runat="server"/&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder ID="PlaceHolderNavSpacer" runat="server"/&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder ID="PlaceHolderTitleLeftBorder" runat="server"/&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder ID="PlaceHolderTitleAreaSeparator" runat="server"/&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder ID="PlaceHolderMiniConsole" runat="server"/&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder id="PlaceHolderCalendarNavigator" runat ="server" /&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder id="PlaceHolderLeftActions" runat ="server"/&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder id="PlaceHolderPageDescription" runat ="server"/&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder id="PlaceHolderBodyAreaClass" runat ="server"/&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder id="PlaceHolderTitleAreaClass" runat ="server"/&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder id="PlaceHolderBodyRightMargin" runat="server" /&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder ID="PlaceHolderTitleRightMargin" runat="server" /&amp;gt;&lt;br /&gt;&amp;lt;/asp:Panel&amp;gt;&lt;br /&gt;&amp;lt;/form&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-6531964075022248787?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/6531964075022248787/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=6531964075022248787' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/6531964075022248787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/6531964075022248787'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2008/11/most-simple-site-definition-master-page.html' title='Most simple site definition master page. (Fix error)'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-2336182112461996243</id><published>2008-11-20T15:34:00.004-06:00</published><updated>2008-11-20T15:41:40.468-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DocAve'/><category scheme='http://www.blogger.com/atom/ns#' term='Feature'/><category scheme='http://www.blogger.com/atom/ns#' term='Backup'/><title type='text'>Fix DocAve Granular Backup error</title><content type='html'>Got the error when using AvePoint DocAve v5 to granular backup the full moss sites as following description from the report log.&lt;br /&gt;Feature 'a0e5a010-1329-49d4-9e09-f280cdbed37d' for list template '10102' is not installed in this farm. The operation could not be completed.&lt;br /&gt;11/20/2008 15:11:13=Backup Statistic Before List(&lt;a href="http://mysharepoint/Documents):14"&gt;http://mysharepoint/Documents):14&lt;/a&gt; MB data, 7(0) sites, 19(0) webs, 154(1) lists, 1801(0) items.&lt;br /&gt;&lt;br /&gt;After searching the feature id from 12 hive\TEMPLATE\FEATURES, it belongs to IPFSWebFeatures. Check the corresponding list, it's documents which can't be deleted as a list.&lt;br /&gt;Hence open command line, and input following command to install this feature.&lt;br /&gt;&lt;span style="color:#000099;"&gt;stsadm -o installfeature -filename IPFSWebFeatures\feature.xml&lt;br /&gt;iisreset -noforce&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Then it works.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-2336182112461996243?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/2336182112461996243/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=2336182112461996243' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/2336182112461996243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/2336182112461996243'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2008/11/fixing-docave-granular-backup-error.html' title='Fix DocAve Granular Backup error'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-8693787238328798875</id><published>2008-11-11T16:38:00.003-06:00</published><updated>2008-11-11T16:57:04.126-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='trial period expired'/><category scheme='http://www.blogger.com/atom/ns#' term='Publishing Infrastructure'/><title type='text'>The trial period for this product has expired</title><content type='html'>&lt;p&gt;After restart prod server. All other site collection features working fine except &lt;span style="color:#000099;"&gt;Office SharePoint Server Publishing Infrastructure&lt;/span&gt; .It show me web page message "&lt;span style="color:#ff0000;"&gt;The trial period for this product has expired&lt;/span&gt;."&lt;/p&gt;&lt;br /&gt;&lt;p&gt;The MOSS is working on a 6 boxes load balance environment. I tried to upgrade to Enterprise license, change the app pool's running account to local administrators group, also added into Distributed COM Users group. Still doesn't work. &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Detailed message:Feature receiver assembly 'Microsoft.SharePoint.Publishing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c', class 'Microsoft.SharePoint.Publishing.PublishingFeatureHandler', method 'FeatureActivated' for feature '22a9ef51-737b-4ff2-9346-694633fe4416' threw an exception: Microsoft.SharePoint.SPException: The trial period for this product has expired. at Microsoft.SharePoint.Publishing.CmsSecurityUtilities.EnsureEvaluationNotExpired() at Microsoft.SharePoint.Publishing.PublishingFeatureHandler.FeatureActivated(SPFeatureReceiverProperties receiverProperties) at Microsoft.SharePoint.SPFeature.DoActivationCallout(Boolean fActivate, Boolean fForce) Feature Activation: Threw an exception, attempting to roll back. Feature 'Publishing' (ID: '22a9ef51-737b-4ff2-9346-694633fe4416'). Exception: Microsoft.SharePoint.SPException: The trial period for this product has expired. at Microsoft.SharePoint.Publishing.CmsSecurityUtilities.EnsureEvaluationNotExpired() at Microsoft.SharePoint.Publishing.PublishingFeatureHandler.FeatureActivated(SPFeatureReceiverProperties receiverProperties) at Microsoft.SharePoint.SPFeature.DoActivationCallout(Boolean fActivate, Boolean fForce) at Microsoft.SharePoint.SPFeature.Activate(SPSite siteParent, SPWeb webParent, SPFeaturePropertyCollection props, Boolean fForce) &lt;/p&gt;&lt;br /&gt;Finally, fixed the error. The entire process here:&lt;br /&gt;&lt;br /&gt;You will find this error from not enough rights to read registry from internet.&lt;br /&gt;&lt;br /&gt;The IIS application pool running account need to read DCOM and registry table for getting the production information.&lt;br /&gt;&lt;br /&gt;By checking local group administrators and Distributed COM Users, I found the running accounts there. And then checking DCOM rights by command "dcomcnfg.exe" , still looks fine. So exclude this possibility.&lt;br /&gt;&lt;br /&gt;Now open "regedit" to checking registry table. Open \HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office Server\12.0&lt;br /&gt;&lt;br /&gt;It show me several item's path has inexistent driver. This is right the reason.&lt;br /&gt;&lt;br /&gt;After found back the missing drivers, it does work.&lt;br /&gt;&lt;br /&gt;What a tricky error message.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-8693787238328798875?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/8693787238328798875/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=8693787238328798875' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/8693787238328798875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/8693787238328798875'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2008/11/trial-period-for-this-product-has.html' title='The trial period for this product has expired'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-8859574127075945252</id><published>2008-10-31T12:01:00.002-05:00</published><updated>2008-10-31T12:21:01.242-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='blackberry'/><category scheme='http://www.blogger.com/atom/ns#' term='bug'/><category scheme='http://www.blogger.com/atom/ns#' term='td'/><category scheme='http://www.blogger.com/atom/ns#' term='table'/><category scheme='http://www.blogger.com/atom/ns#' term='tr'/><title type='text'>BlackBerry browser's table redering bug and mending</title><content type='html'>If you open a web page and there's a table which have rowspan or colspan in it.&lt;br /&gt;You will find it's always can't display properly in the last row. It will miss handle rowspan or colspan in last column. That's basically happens on testified BlackBerry 8830 and 8700. It's also believable for others which include simulator and real device.&lt;br /&gt;Whatever you use .NET GridView, Repeater, Datalist or others, it would happen definitely.&lt;br /&gt;&lt;br /&gt;There are 2 method to fix this bug.&lt;br /&gt;&lt;br /&gt;1. Add a new same structure blank row in the end of the table. Here is an example&lt;br /&gt;It actually add a new &amp;lt;tr&amp;gt;&amp;lt;/tr&amp;gt; in the end.&lt;br /&gt;&lt;br /&gt;&amp;lt;table border="1" cellpadding="0" cellspacing="0"&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;&amp;lt;td valign="middle" rowspan="2"&amp;gt;HW&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;HW&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;HW&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td valign="middle" rowspan="2"&amp;gt;HW&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;HW&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;HW&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;&amp;lt;td valign="middle" rowspan="2"&amp;gt;HW&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;HW&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;HW&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td valign="middle" rowspan="2"&amp;gt;HW&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;HW&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;HW&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;br /&gt;&lt;br /&gt;2. Add a new same structure blank column in the end of the table. Here's an example.&lt;br /&gt;It actually add a new &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt; in each &amp;lt;/tr&amp;gt;.&lt;br /&gt;&lt;br /&gt;&amp;lt;table border="1" cellpadding="0" cellspacing="0"&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;&amp;lt;td valign="middle" rowspan="2"&amp;gt;HW&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;HW&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;HW&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td valign="middle" rowspan="2"&amp;gt;HW&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;HW&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;HW&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;&amp;lt;td valign="middle" rowspan="2"&amp;gt;HW&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;HW&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;HW&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td valign="middle" rowspan="2"&amp;gt;HW&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;tr&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;HW&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;HW&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-8859574127075945252?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/8859574127075945252/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=8859574127075945252' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/8859574127075945252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/8859574127075945252'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2008/10/blackberry-browsers-table-redering-bug.html' title='BlackBerry browser&apos;s table redering bug and mending'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-5284916900056904961</id><published>2008-10-28T14:55:00.001-05:00</published><updated>2008-10-28T14:58:26.206-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Alternate Access Mappings'/><category scheme='http://www.blogger.com/atom/ns#' term='batch'/><title type='text'>A batch file with datatime attribute for backup Alternate Access Mappings</title><content type='html'>Here show you a batch script for backing up AAM&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;c:&lt;br /&gt;cd\&lt;br /&gt;cls&lt;br /&gt;@echo Backup Alternate Access Mappings&lt;br /&gt;@for /f "tokens=2" %%i in ('date /t') do&lt;br /&gt;@set thedate=%%i&lt;br /&gt;@set mm=%thedate:~0,2%&lt;br /&gt;@set dd=%thedate:~3,2%&lt;br /&gt;@set yyyy=%thedate:~6,4%&lt;br /&gt;stsadm -o enumalternatedomains &gt;&gt;&lt;br /&gt;E:\data\Backup\AAM\AlternateAccessMappings_%mm%%dd%%yyyy%.txt&lt;br /&gt;@echo Done&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-5284916900056904961?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/5284916900056904961/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=5284916900056904961' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/5284916900056904961'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/5284916900056904961'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2008/10/batch-file-with-datatime-attribute-for.html' title='A batch file with datatime attribute for backup Alternate Access Mappings'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-7871127624204828280</id><published>2008-10-24T11:27:00.004-05:00</published><updated>2008-10-24T11:32:47.970-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='BBDatePicker control'/><category scheme='http://www.blogger.com/atom/ns#' term='smartphone'/><category scheme='http://www.blogger.com/atom/ns#' term='DateTime Picker'/><title type='text'>A DateTime Picker control designed for smartphone browser.</title><content type='html'>Based on Visual Studio .Net 2008 (with C#), I wrote a datetime picker for smartphone web, especially for BlackBerry.&lt;br /&gt;&lt;br /&gt;The first version is actually a DatePicker named BBDatePicker for BlackBerry. I use it on WebPart and show for BlackBerry browser.&lt;br /&gt;&lt;br /&gt;I will share with whose commenter here.&lt;br /&gt;Send email to me (&lt;a href="mailto:teddyyu@live.com"&gt;teddyyu@live.com&lt;/a&gt;) if you want get one.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-7871127624204828280?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/7871127624204828280/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=7871127624204828280' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/7871127624204828280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/7871127624204828280'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2008/10/datetime-picker-control-designed-for.html' title='A DateTime Picker control designed for smartphone browser.'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-2790864093625886147</id><published>2008-10-23T17:12:00.003-05:00</published><updated>2008-10-23T17:19:04.528-05:00</updated><title type='text'>How to join custom reference DLL file in when deploy WebPart by STSDEV</title><content type='html'>Three steps for refer custermized dll such as custom control.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Refer the dll of custom project in.&lt;/li&gt;&lt;li&gt;Sign a key assembly in the custom dll souce project.&lt;/li&gt;&lt;li&gt;Drag the dll into windows assembly and deployment corresponding wss virual directory.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-2790864093625886147?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/2790864093625886147/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=2790864093625886147' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/2790864093625886147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/2790864093625886147'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2008/10/how-to-join-custom-reference-dll-file.html' title='How to join custom reference DLL file in when deploy WebPart by STSDEV'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-4681712742120425476</id><published>2008-10-21T15:25:00.004-05:00</published><updated>2008-10-21T15:50:47.933-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='STSDEV debug'/><category scheme='http://www.blogger.com/atom/ns#' term='sharepoint'/><title type='text'>STSDEV Debugging for WebPart, Site Definition or workflow.</title><content type='html'>After deploy the app (webpart etc) into SharePoint site, you want to debug your app as below steps:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Enable debug in project properties.&lt;br /&gt;&lt;br /&gt;Right click project and click properties, click [Build] in left panel.&lt;br /&gt;Select the method in Configuration which is the deploy method you just done.&lt;br /&gt;Click to select both "Define DEBUG constant" and "Define TRACE constant".&lt;br /&gt;Click right-bottom "Advanced.." button and change [Debug Info:] to "full".&lt;br /&gt;Click [OK] and save all.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Set breakpoint in debug area of your program&lt;/li&gt;&lt;li&gt;Run "iisapp" in command line to choose which SharePoint run time "w3wp.exe" you should pick up. You can pick it by your running sharepoint site name.&lt;/li&gt;&lt;li&gt;Click menu [Debug] - [Attach to Process...], and click the picked "w3wp.exe" and click [Attach] button, go on click [Attach] button on pop up warning window.&lt;/li&gt;&lt;li&gt;Back to the page which host your app (webpart) and refresh or redeploy. &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;You will see the debug yellow bar pausing on your code for now. You can now use same debugging method by F11/F10 of VS.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-4681712742120425476?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/4681712742120425476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=4681712742120425476' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/4681712742120425476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/4681712742120425476'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2008/10/stsdev-debugging-for-webpart-site.html' title='STSDEV Debugging for WebPart, Site Definition or workflow.'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-3505814811934007979</id><published>2008-10-21T11:11:00.006-05:00</published><updated>2008-10-21T11:26:05.829-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sharepoint'/><category scheme='http://www.blogger.com/atom/ns#' term='snapshot direcorty'/><category scheme='http://www.blogger.com/atom/ns#' term='Delete SSP'/><title type='text'>Error handle while try to remove SSP</title><content type='html'>"The snapshot directory does not exist or is not properly configured."&lt;br /&gt;&lt;br /&gt;Occasionally, it happened when I tried to delete SSP in SharePoint farm for verify a disaster/recovery procedure. The SSP can not be deleted successfully and not any changes even delete more times.&lt;br /&gt;&lt;br /&gt;I then searched from microsoft and internet but get nothing back. What's the snapshot directory ? The error description looks weird and unreachable by internet.&lt;br /&gt;&lt;br /&gt;By checking 12 hive logs, get "Delete site operation cancelled by user. Check the log files for additional details. " Hence I tried to delete the SSP host web application manually first and then go on delete the SSP. It worked then.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-3505814811934007979?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/3505814811934007979/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=3505814811934007979' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/3505814811934007979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/3505814811934007979'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2008/10/error-handle-while-try-to-remove-ssp.html' title='Error handle while try to remove SSP'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-8924704169185907258</id><published>2008-10-17T16:16:00.004-05:00</published><updated>2008-10-17T16:58:59.409-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='account change'/><category scheme='http://www.blogger.com/atom/ns#' term='administrator'/><category scheme='http://www.blogger.com/atom/ns#' term='PWA'/><category scheme='http://www.blogger.com/atom/ns#' term='Project'/><title type='text'>Where to change PWA administrator account ?</title><content type='html'>When you do a PWA migration to another environment, you will find the PWA can't be access by account of new environment. Once you want to change it from SharePoint central administration, you will find the PWA owner place is gray which is not able to be changed.&lt;br /&gt;&lt;br /&gt;Actually, the PWA account control is not belongs to SharePoint management, it is still within Project control area. I have ever tried to find the owner information from the SharePoint Project content db and Config db but failed, I also spend couple minutes to search it from those 4 Project DB (Draft, Achieve, Published and Reporting) but still can't. If you know where it is specific table to hold, please put comment to let me know. I would appreciate of  you.&lt;br /&gt;&lt;br /&gt;Here is the steps:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;You will have to open &lt;a href="http://yoursite/PWA"&gt;http://yoursite/PWA&lt;/a&gt; by the previous administrator account which was created by project server procedure. If you can see the [Site Action] in the page left upper corner, that means you have rights to handle.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;You want to click [Server Settings] in left quick launch panel, click [Manage Users] under Security panel. You will find the administrator account in new opened page and you may create a new user with assign administrators Security Group for maximum the user rights. &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Now by sign in a different user, you will have all the rights to control new PWA site collection.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-8924704169185907258?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/8924704169185907258/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=8924704169185907258' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/8924704169185907258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/8924704169185907258'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2008/10/where-to-change-pwa-administrator.html' title='Where to change PWA administrator account ?'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-2452590067235672527</id><published>2008-10-17T12:50:00.003-05:00</published><updated>2008-10-17T13:11:51.255-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='site collection'/><category scheme='http://www.blogger.com/atom/ns#' term='sharepoint'/><category scheme='http://www.blogger.com/atom/ns#' term='recovery'/><category scheme='http://www.blogger.com/atom/ns#' term='delete capture'/><category scheme='http://www.blogger.com/atom/ns#' term='subsite'/><title type='text'>The usage of Microsoft IT Site Delete Capture Feature 1.1</title><content type='html'>When try to recover a sub-site by the method of the instruction of document which is "stsadm -o store". I received the error message "Your backup is from a different version of Windows Sharepoint Services and cannot be restored to a server running the current version." I almost gave it up.&lt;br /&gt;I got back to test it again for draft my mutiple levels recovery precedure. It looks the microsoft existing solution just missing the part of site and site collection recovery which is what MS IT Site Delete Capture do.&lt;br /&gt;There's just one difference on it, i.e. Site-collection and Sub-site.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;For Site-collection which was created by central administration. Use the command:&lt;br /&gt;"stsadm -o restore -url http://www.yoursite.com/sites/deletedsitecollectionname -filename deletedsitecollectionname"&lt;/li&gt;&lt;li&gt;For Sub-site which was created by user site action. Use the command:&lt;br /&gt;"stsadm -o import -url http://www.yoursite.com/deletedsubsitename -filename deletedsubsitename&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;For PWA workspaces or other same level site, you want to use the same operation with sub-site.&lt;/p&gt;&lt;p&gt;For lower level such as document library, list and items, the 2 level recycle bin take over the recovery.&lt;/p&gt;&lt;p&gt;For higher level such as web application, farm. you probably need operate the sharepoint central administration with database tools together.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-2452590067235672527?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/2452590067235672527/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=2452590067235672527' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/2452590067235672527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/2452590067235672527'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2008/10/usage-of-microsoft-it-site-delete.html' title='The usage of Microsoft IT Site Delete Capture Feature 1.1'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-1692717975440788287</id><published>2008-10-13T15:45:00.002-05:00</published><updated>2008-10-13T15:50:02.715-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wss resources'/><category scheme='http://www.blogger.com/atom/ns#' term='parsing'/><title type='text'>WSS Resources parsing</title><content type='html'>How to get the value from &amp;lt;%$Resources:wss, mobile_field_separator%&amp;gt; ?&lt;br /&gt;You just need to open 12 hive\CONFIG\Resources\wss.resx to find the name "mobile_field_separator", likewise, if the Resources:wss is something else, just need to find the file name of that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-1692717975440788287?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/1692717975440788287/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=1692717975440788287' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/1692717975440788287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/1692717975440788287'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2008/10/wss-resources-parsing.html' title='WSS Resources parsing'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-837270881274473911</id><published>2008-10-13T15:04:00.010-05:00</published><updated>2008-10-17T12:49:36.480-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sharepoint'/><category scheme='http://www.blogger.com/atom/ns#' term='mobile page'/><category scheme='http://www.blogger.com/atom/ns#' term='ListTypeID'/><title type='text'>How to get ListTypeID from current created site and list library.</title><content type='html'>For customizing a BlackBerry smartphone site page, you probably need to set your RendingTemplate for your mobile web app hosting place, generally, I will put it in a list library such as document library or custom list. This way, you will need to find the specific ListTypeID to define your RendingTemplate ID name as "Mobile_ListTypeID_View_Contents".&lt;br /&gt;&lt;br /&gt;Here is the quickest method to find it.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;If these TypeId were customized in this new site definition Onet.xml file, you will have to find it from Onet.xml file within %12 hive%\TEMPLATE\SITETEMPLATES\Site_Type\xml\&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Normally, you will find it from where you created it. You want to find this create.aspx first, such as &lt;a href="http://sharepointsite/_layouts/create.aspx"&gt;http://sharepointsite/_layouts/create.aspx&lt;/a&gt;. You need back to this create page and move the mouse to each library or type and see the bottom status bar, there should be a link such "&lt;a href="http://mysharepoint//_layouts/new.aspx?FeatureId={00bfea71-e717-4e80-aa17-d0c71b360101}&amp;amp;ListTemplate=101"&gt;http://mysharepoint/_layouts/new.aspx?FeatureId={00bfea71-e717-4e80-aa17-d0c71b360101}&amp;amp;ListTemplate=101&lt;/a&gt;" . You got, the last number is what you just need. (101 in this case) &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Hope these will helpful.&lt;br /&gt;Please post comment to discuss if you have any question.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-837270881274473911?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/837270881274473911/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=837270881274473911' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/837270881274473911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/837270881274473911'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2008/10/how-to-get-listtypeid-from-current.html' title='How to get ListTypeID from current created site and list library.'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-6327609646674607772</id><published>2008-10-10T11:38:00.014-05:00</published><updated>2008-10-16T14:44:13.409-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='datareader'/><category scheme='http://www.blogger.com/atom/ns#' term='object'/><category scheme='http://www.blogger.com/atom/ns#' term='web service'/><category scheme='http://www.blogger.com/atom/ns#' term='datasource'/><title type='text'>A standard datareader to object sample web service</title><content type='html'>In one of my BlackBerry application, the requirements need to use MDS studio with background Oracle database, To push a table based query result present in blackberry smartphone screen. &lt;br /&gt;&lt;br /&gt;Considering the MDS studio doen't support XML based dataset parsing and serializing. I have to think about other solution.&lt;br /&gt;&lt;br /&gt;The MDS mainstream developing model is that invoke web service to generate a WSDL reference interface and then by MDS Data definitions and Message inbound/outbound mechanism to generate application.&lt;br /&gt;&lt;br /&gt;Here is an example to get Oracle table to push up an object based data structure for MDS refer to. I feels like this is best solutino currently.&lt;br /&gt;&lt;br /&gt;Originally, LINQ plus Generic solution is a good solution. But currently the Oracle still doesn't support LINQ without third part middleware supportings. Hope Microsoft can push out an solution with LINQ using on Oracle. &lt;br /&gt;&lt;br /&gt;using System;using System.Collections;&lt;br /&gt;using System.ComponentModel;&lt;br /&gt;using System.Data;&lt;br /&gt;using System.Linq;&lt;br /&gt;using System.Web;&lt;br /&gt;using System.Web.Services;&lt;br /&gt;using System.Web.Services.Protocols;&lt;br /&gt;using System.Xml.Linq;&lt;br /&gt;using System.Data.OracleClient;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;&lt;br /&gt;namespace HourlySalesByObject&lt;br /&gt;{&lt;br /&gt;/// &lt;summary&gt;&lt;br /&gt;/// Summary description for GetHourlySalesByStoreObject&lt;br /&gt;/// [WebService(Namespace = "&lt;a href="http://services/"&gt;http://services/&lt;/a&gt;")]&lt;br /&gt;[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]&lt;br /&gt;[ToolboxItem(false)]&lt;br /&gt;// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.&lt;br /&gt;// [System.Web.Script.Services.ScriptService]&lt;br /&gt;public class&lt;br /&gt;GetHourlySalesByStoreObject : System.Web.Services.WebService&lt;br /&gt;{&lt;br /&gt;[WebMethod] public List&lt;hourlysale&gt; GetHourlySalesByStore_Sunday(int store_num)&lt;br /&gt;{&lt;br /&gt;List&lt;hourlysale&gt; hourlySales = new List&lt;hourlysale&gt;();&lt;br /&gt;using (OracleConnection conn = new OracleConnection("Data Source=RTKTEST;Persist Security Info=True;User ID=korgiej;Password=korgiej;Unicode=True"))&lt;br /&gt;{&lt;br /&gt;OracleCommand cmd = conn.CreateCommand();&lt;br /&gt;try&lt;br /&gt;{&lt;br /&gt;conn.Open();&lt;br /&gt;cmd.CommandText =&lt;br /&gt;"select * from (select STORE, EOW_DATE, HOUR, SUNDAY_TRANSACTIONS,&lt;br /&gt;SUNDAY_AV_DOLLARS, SUNDAY_TOTAL_DOLLARS from PAM_HOURLY_SALES where STORE =" + store_num + " order by EOW_DATE desc) where rownum &lt;= 50"; &lt;p&gt;&lt;/p&gt;&lt;p&gt;cmd.CommandType = CommandType.Text; &lt;/p&gt;&lt;p&gt;OracleDataAdapter da = new OracleDataAdapter(cmd); &lt;/p&gt;&lt;p&gt;//DataSet ds = new DataSet();&lt;br /&gt;//ds.Clear();&lt;br /&gt;//da.Fill(ds);&lt;br /&gt;//conn.Close(); &lt;/p&gt;&lt;p&gt;using (OracleDataReader odr = cmd.ExecuteReader())&lt;br /&gt;{&lt;br /&gt;while&lt;br /&gt;(odr.Read())&lt;br /&gt;{&lt;br /&gt;HourlySale hourlySale = new HourlySale();&lt;br /&gt;hourlySale.store = odr["STORE"].ToString();&lt;br /&gt;hourlySale.eow_date = Convert.ToDateTime(odr["EOW_DATE"]);&lt;br /&gt;hourlySale.hour = Convert.ToInt16(odr["HOUR"]);&lt;br /&gt;hourlySale.transactions = Convert.ToDecimal(odr["SUNDAY_TRANSACTIONS"]);&lt;br /&gt;hourlySale.av_dollars = Convert.ToDecimal(odr["SUNDAY_AV_DOLLARS"]);&lt;br /&gt;hourlySale.total_dollars = Convert.ToDecimal(odr["SUNDAY_TOTAL_DOLLARS"]);&lt;br /&gt;hourlySales.Add(hourlySale);&lt;br /&gt;}&lt;br /&gt;//List&lt;hourlysales&gt; hourlySales = new List&lt;hourlysales&gt;();&lt;br /&gt;//foreach (DataRow row in ds.Tables[0].Rows)&lt;br /&gt;//{&lt;br /&gt;//hourlySale.store = row["STORE"].ToString();&lt;br /&gt;//hourlySale.eow_date = Convert.ToDateTime(row["EOW_DATE"]);&lt;br /&gt;//hourlySale.hour = Convert.ToInt16(row["HOUR"]);&lt;br /&gt;//hourlySale.transactions = Convert.ToDecimal(row["SUNDAY_TRANSACTIONS"].ToString());&lt;br /&gt;//hourlySale.av_dollars = Convert.ToDecimal(row["SUNDAY_AV_DOLLARS"].ToString());&lt;br /&gt;//hourlySale.total_dollars = Convert.ToDecimal(row["SUNDAY_TOTAL_DOLLARS"].ToString());&lt;br /&gt;// }&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;catch (Exception e)&lt;br /&gt;{ hourlySales = null; }&lt;br /&gt;}&lt;br /&gt;return hourlySales;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public class HourlySale&lt;br /&gt;{&lt;br /&gt;public&lt;br /&gt;HourlySale() {}&lt;br /&gt;public string store { get; set; }&lt;br /&gt;public DateTime eow_date { get; set; }&lt;br /&gt;public Int16 hour { get; set; }&lt;br /&gt;public Decimal transactions { get; set; }&lt;br /&gt;public Decimal av_dollars { get; set; }&lt;br /&gt;public Decimal total_dollars { get; set; }&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;/blockquote&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/2268727436968917954-6327609646674607772?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/6327609646674607772/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=6327609646674607772' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/6327609646674607772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/6327609646674607772'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2008/10/standard-datareader-to-object-sample.html' title='A standard datareader to object sample web service'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-3173728582741893239</id><published>2008-10-07T11:10:00.002-05:00</published><updated>2008-10-07T11:13:43.318-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RAPC'/><category scheme='http://www.blogger.com/atom/ns#' term='JDE'/><category scheme='http://www.blogger.com/atom/ns#' term='JAVA ENV'/><category scheme='http://www.blogger.com/atom/ns#' term='COD'/><category scheme='http://www.blogger.com/atom/ns#' term='MDS'/><title type='text'>Error while compile MDS or JDE project after remove JDK and JRE</title><content type='html'>You will probably get following errors after remove the JAVA env.&lt;br /&gt;&lt;br /&gt;"The rapc compiler failed to run." and "Error Generating Launcher COD"&lt;br /&gt;&lt;br /&gt;That caused by the JAVA_HOME or Path which lead jave env to a different place after you removed JAVA. As long as you change this to a proper one, it will work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-3173728582741893239?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/3173728582741893239/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=3173728582741893239' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/3173728582741893239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/3173728582741893239'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2008/10/error-while-compile-mds-or-jde-project.html' title='Error while compile MDS or JDE project after remove JDK and JRE'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-7840730047249501242</id><published>2008-10-07T08:22:00.002-05:00</published><updated>2008-10-07T08:34:13.969-05:00</updated><title type='text'>The RIM Code Signing</title><content type='html'>Once you get everything done and try to launch your custom app into your blackberry handheld. You will find you need to pay $20 for a code signing. Or you will get the error "blackberry Error starting Module attempts to access a secure API."&lt;br /&gt;&lt;br /&gt;That's really cheeky. Feels like a trap. I finially decide to give up BlackBerry JDE development platform and back to MDS. &lt;br /&gt;&lt;br /&gt;That certainly will result in the restrict of developing of BlackBerry application.&lt;br /&gt;People will stand off BB dev gradually. Don't know how the hell they think about it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-7840730047249501242?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/7840730047249501242/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=7840730047249501242' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/7840730047249501242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/7840730047249501242'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2008/10/rim-code-signing.html' title='The RIM Code Signing'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-4925276978235688525</id><published>2008-10-02T14:10:00.004-05:00</published><updated>2008-10-02T14:30:43.613-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='minimum'/><category scheme='http://www.blogger.com/atom/ns#' term='blackberry'/><category scheme='http://www.blogger.com/atom/ns#' term='MasterPage'/><category scheme='http://www.blogger.com/atom/ns#' term='smartphone'/><category scheme='http://www.blogger.com/atom/ns#' term='STSDEV'/><title type='text'>Create a minimum master page site definition by STSDEV</title><content type='html'>Working on BlackBerry &amp;amp; SharePoint site buildings. It's indispensability to build a SharePoint smartphone site. Integrated this site with the existing mobile pages (12 hive\TEMPLATE\LAYOUTS\MOBILE) together. It can commercially provide valuable web applications. Here show you how to implement it.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Refer the previous post named "&lt;a href="http://teddyhai.blogspot.com/2008/10/create-site-definition-by-stsdev-refer.html"&gt;Create Site Definition by STSDEV &lt;/a&gt;" to create a default site definition.&lt;/li&gt;&lt;li&gt;Refer the previous post named "&lt;a href="http://teddyhai.blogspot.com/2008/10/creating-and-deploying-custom-master.html"&gt;Creating and Deploying a Custom Master Page with STSDEV&lt;/a&gt;" to merge Heather base master page.&lt;/li&gt;&lt;li&gt;Replace the master page by following content and keep the same name "SharePointersDemoCustom.master" then redeploy by VS 2008.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&amp;lt;%-- Identifies this page as a .master page written in Microsoft Visual C# and registers tag prefixes, namespaces, assemblies, and controls. --%&amp;gt;&lt;br /&gt;&amp;lt;%@ Master language="C#" %&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"&amp;gt;&lt;br /&gt;&amp;lt;%@ Import Namespace="Microsoft.SharePoint" %&amp;gt;&lt;br /&gt;&amp;lt;%@ Register Tagprefix="SPSWC" Namespace="Microsoft.SharePoint.Portal.WebControls" Assembly="Microsoft.SharePoint.Portal, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %&amp;gt;&lt;br /&gt;&amp;lt;%@ Register Tagprefix="SharePoint" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %&amp;gt;&lt;br /&gt;&amp;lt;%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %&amp;gt;&lt;br /&gt;&amp;lt;%@ Register Tagprefix="PublishingWebControls" Namespace="Microsoft.SharePoint.Publishing.WebControls" Assembly="Microsoft.SharePoint.Publishing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %&amp;gt;&lt;br /&gt;&amp;lt;%@ Register Tagprefix="PublishingNavigation" Namespace="Microsoft.SharePoint.Publishing.Navigation" Assembly="Microsoft.SharePoint.Publishing, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %&amp;gt;&lt;br /&gt;&amp;lt;%@ Register TagPrefix="wssuc" TagName="Welcome" src="~/_controltemplates/Welcome.ascx" %&amp;gt;&lt;br /&gt;&amp;lt;%@ Register TagPrefix="wssuc" TagName="DesignModeConsole" src="~/_controltemplates/DesignModeConsole.ascx" %&amp;gt;&lt;br /&gt;&amp;lt;%@ Register TagPrefix="PublishingVariations" TagName="VariationsLabelMenu" src="~/_controltemplates/VariationsLabelMenu.ascx" %&amp;gt;&lt;br /&gt;&amp;lt;%@ Register Tagprefix="PublishingConsole" TagName="Console" src="~/_controltemplates/PublishingConsole.ascx" %&amp;gt;&lt;br /&gt;&amp;lt;%@ Register TagPrefix="PublishingSiteAction" TagName="SiteActionMenu" src="~/_controltemplates/PublishingActionMenu.ascx" %&amp;gt;&lt;br /&gt;&amp;lt;%-- Uses the Microsoft Office namespace and schema. --%&amp;gt;&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;  &amp;lt;WebPartPages:SPWebPartManager runat="server"/&amp;gt;&lt;br /&gt;  &amp;lt;SharePoint:RobotsMetaTag runat="server"/&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;%-- The head section includes a content placeholder for the page title and links to CSS and ECMAScript (JScript, JavaScript) files that run on the server. --%&amp;gt;&lt;br /&gt;  &amp;lt;head runat="server"&amp;gt;&lt;br /&gt;    &amp;lt;asp:ContentPlaceHolder runat="server" id="head"&amp;gt;&lt;br /&gt;      &amp;lt;title&amp;gt;&lt;br /&gt;        &amp;lt;asp:ContentPlaceHolder id="PlaceHolderPageTitle" runat="server" /&amp;gt;&lt;br /&gt;      &amp;lt;/title&amp;gt;&lt;br /&gt;    &amp;lt;/asp:ContentPlaceHolder&amp;gt;&lt;br /&gt;    &amp;lt;Sharepoint:CssLink runat="server"/&amp;gt;&lt;br /&gt;    &amp;lt;asp:ContentPlaceHolder id="PlaceHolderAdditionalPageHead" runat="server" /&amp;gt;&lt;br /&gt;  &amp;lt;/head&amp;gt;&lt;br /&gt;  &lt;br /&gt;  &amp;lt;%-- When loading the body of the .master page, SharePoint Server 2007 also loads the SpBodyOnLoadWrapper class. This class handles .js calls for the master page. --%&amp;gt;&lt;br /&gt;  &amp;lt;body onload="javascript:_spBodyOnLoadWrapper();"&amp;gt;&lt;br /&gt;    &amp;lt;%-- The SPWebPartManager manages all of the Web part controls, functionality, and events that occur on a Web page. --%&amp;gt;&lt;br /&gt;    &amp;lt;form runat="server" onsubmit="return _spFormOnSubmitWrapper();"&amp;gt;&lt;br /&gt;      &amp;lt;wssuc:Welcome id="explitLogout" runat="server"/&amp;gt;&lt;br /&gt;      &amp;lt;PublishingSiteAction:SiteActionMenu runat="server"/&amp;gt;  &lt;br /&gt;      &amp;lt;PublishingWebControls:AuthoringContainer id="authoringcontrols" runat="server"&amp;gt;&lt;br /&gt;        &amp;lt;PublishingConsole:Console runat="server" /&amp;gt;&lt;br /&gt;      &amp;lt;/PublishingWebControls:AuthoringContainer&amp;gt;&lt;br /&gt;      &amp;lt;%-- The PlaceHolderMain content placeholder defines where to place the page content for all the content from the page layout. The page layout can overwrite any content placeholder from the master page. Example: The PlaceHolderLeftNavBar can overwrite the left navigation bar. --%&amp;gt;&lt;br /&gt;      &amp;lt;asp:ContentPlaceHolder id="PlaceHolderMain" runat="server" /&amp;gt;&lt;br /&gt;        &amp;lt;asp:Panel visible="false" runat="server"&amp;gt;&lt;br /&gt;        &amp;lt;%-- These ContentPlaceHolders ensure all default SharePoint Server pages render with this master page. If the system master page is set to any default master page, the only content placeholders required are those that are overridden by your page layouts. --%&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder id="PlaceHolderSearchArea" runat="server"/&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder id="PlaceHolderTitleBreadcrumb" runat="server"/&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder id="PlaceHolderPageTitleInTitleArea"  runat="server"/&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder id="PlaceHolderLeftNavBar" runat="server"/&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder ID="PlaceHolderPageImage" runat="server"/&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder ID="PlaceHolderBodyLeftBorder" runat="server"/&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder ID="PlaceHolderNavSpacer" runat="server"/&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder ID="PlaceHolderTitleLeftBorder" runat="server"/&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder ID="PlaceHolderTitleAreaSeparator" runat="server"/&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder ID="PlaceHolderMiniConsole" runat="server"/&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder id="PlaceHolderCalendarNavigator" runat ="server" /&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder id="PlaceHolderLeftActions" runat ="server"/&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder id="PlaceHolderPageDescription" runat ="server"/&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder id="PlaceHolderBodyAreaClass" runat ="server"/&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder id="PlaceHolderTitleAreaClass" runat ="server"/&amp;gt;&lt;br /&gt;&amp;lt;asp:ContentPlaceHolder id="PlaceHolderBodyRightMargin" runat="server" /&amp;gt;&lt;br /&gt;&amp;lt;/asp:Panel&amp;gt;&lt;br /&gt;    &amp;lt;/form&amp;gt;&lt;br /&gt;  &amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-4925276978235688525?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/4925276978235688525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=4925276978235688525' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/4925276978235688525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/4925276978235688525'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2008/10/create-minimum-master-page-site.html' title='Create a minimum master page site definition by STSDEV'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-9142678484459632968</id><published>2008-10-02T08:59:00.009-05:00</published><updated>2008-10-02T10:41:58.988-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Onet'/><category scheme='http://www.blogger.com/atom/ns#' term='MasterPage'/><category scheme='http://www.blogger.com/atom/ns#' term='SiteDefinition'/><category scheme='http://www.blogger.com/atom/ns#' term='STSDEV'/><title type='text'>Creating and Deploying a Custom Master Page with STSDev (Refer to SharePointers)</title><content type='html'>&lt;p&gt;(Continue from last one: Create Site Definition by STSDEV)&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 1: Add the base master page to the project&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;If you haven't already done so, download and unzip the base master page from Heather Solomon's site. &lt;/p&gt;&lt;ol&gt;&lt;li&gt;Right click on your 'RootFiles\TEMPLATE\SiteTemplates\YourSiteTemplateName' directory and choose 'Add Existing Item' &lt;/li&gt;&lt;li&gt;Select the base master page from your file system and click 'Add' &lt;/li&gt;&lt;li&gt;Rename the file 'SharePointersDemoCustom.master'.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;Step 2: Editing the Default.aspx file&lt;/strong&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Open the default.aspx file &lt;/li&gt;&lt;li&gt;At the top of the page, change the 'Page' directives 'MasterPageFile' attribute to '~masterurl/custom.master' (note that this value can only be 'default.master' or 'custom.master' but you can name your file whatever you like because the onet.xml file's &lt;module&gt;element contains the reference to the actual file)&lt;/li&gt;&lt;li&gt;Save the file&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;Step 3: Editing the onet.xml file&lt;/strong&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Open the onet.xml file &lt;/li&gt;&lt;li&gt;In the &amp;lt;listtemplates&amp;gt; &lt;listtemplates&gt;node add the following child node:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;ListTemplate Name="mplib" DisplayName="$Resources:MasterPageGallery;"&lt;br /&gt;Description="$Resources:global_onet_mplib_desc;"&lt;br /&gt;SetupPath="global\lists\mplib" Type="116"&lt;br /&gt;BaseType="1" Path="GLOBAL" Hidden="TRUE"&lt;br /&gt;HiddenList="TRUE" NoCrawl="TRUE" Unique="TRUE"&lt;br /&gt;Catalog="TRUE" OnQuickLaunch="FALSE" SecurityBits="11"&lt;br /&gt;AllowDeletion="False" AllowEveryoneViewItems="TRUE"&lt;br /&gt;Image="/_layouts/images/itdl.gif" AlwaysIncludeContent="TRUE"&lt;br /&gt;DocumentTemplate="100" /&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Find the &amp;lt;configuration&amp;gt; node the 'ID' attribute of 0 (zero) &lt;/li&gt;&lt;li&gt;Add the 'MasterUrl' attribute to the &amp;lt;configuration&amp;gt; node like so:&lt;br /&gt;&lt;br /&gt;&amp;lt;Configuration ID="0" Name="Blank" MasterUrl="_catalogs/masterpage/SharePointersDemoCustom.master"&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The &amp;lt;configuration&amp;gt; node you just modified should have a &amp;lt;modules&amp;gt; child element. Add the following &amp;lt;modules&amp;gt; tag as a child of this node&lt;br /&gt;&lt;br /&gt;&amp;lt;Module Name="CustomMasterPage" /&amp;gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Now go to the outer &amp;lt;Modules&amp;gt; tag that is a child of the main &amp;lt;Project&amp;gt; node and add the following child &amp;lt;Module&amp;gt; node&lt;br /&gt;&lt;br /&gt;&amp;lt;Module Name="CustomMasterPage" List="116" Url="_catalogs/masterpage" RootWebOnly="FALSE"&amp;gt;&lt;br /&gt;&amp;lt;File Url="SharePointersDemoCustom.master" Type="GhostableInLibrary" IgnoreIfAlreadyExists="TRUE" /&amp;gt;&lt;br /&gt;&amp;lt;/Module&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Step 4: Deploy the project&lt;/strong&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Again, STSDEV makes this a breeze. If this is the first time you've deployed this solution change your build configuration to DebugDeploy and do a build, otherwise do a DebugRedeploy.&lt;/li&gt;&lt;li&gt;Now create a new site based on your site definition and see if your masterpage is working correctly. (Note, it should look pretty ugly since we haven't modified the UI yet.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;Step 5: Start tweaking that master page!&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Here's a bunch of really good resources for customizing your master pages all in one place. Heather Solomon really is the expert when it comes to SharePoint branding:&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-9142678484459632968?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/9142678484459632968/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=9142678484459632968' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/9142678484459632968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/9142678484459632968'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2008/10/creating-and-deploying-custom-master.html' title='Creating and Deploying a Custom Master Page with STSDev (Refer to SharePointers)'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-3989709340303916499</id><published>2008-10-02T08:37:00.009-05:00</published><updated>2008-10-02T09:59:38.773-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webtemp'/><category scheme='http://www.blogger.com/atom/ns#' term='Onet'/><category scheme='http://www.blogger.com/atom/ns#' term='site definition'/><category scheme='http://www.blogger.com/atom/ns#' term='STSDEV'/><title type='text'>Create Site Definition by STSDEV (Refer to SharePointers)</title><content type='html'>This is a refer for a record to deposit.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Part 1: Generate the STSDEV solution&lt;/strong&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Open Visual Studio and run STSDEV (should be an option on your tools menu if you ran through the tutorials, see above link) &lt;/li&gt;&lt;li&gt;Choose to create an empty solution with C# assembly &lt;/li&gt;&lt;li&gt;Click 'Create the Solution' &lt;/li&gt;&lt;li&gt;After you create the solution, you'll need to open it from the file system. STSDEV does not automatically open it for you in Visual Studio.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;strong&gt;Part 2: Set up the project structure&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Even the most basic site definition needs at least 3 files: a webtemp.xml file, an onet.xml file, and a default.aspx file. So let's create these files in the appropriate places.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;right click on the 'RootFiles' folder and add a new folder called 'TEMPLATE' &lt;/li&gt;&lt;li&gt;Under the 'TEMPLATE' folder you created add a new folder called '1033' &lt;/li&gt;&lt;li&gt;Under the '1033' folder you created create a new folder called 'XML' &lt;/li&gt;&lt;li&gt;In the 'TEMPLATE/1033/XML' folder add a new XML file called 'webtemp.YourSiteName.xml', where your site name is what you want to call your site.&lt;br /&gt;Under the 'TEMPLATE' folder you created add a new folder called 'SiteTemplates'&lt;br /&gt;Under the 'SiteTemplates' folder create a folder called 'Your Site Name', with the name of the site you'd like to use. &lt;/li&gt;&lt;li&gt;In the 'Your Site Name' folder, create a folder called 'xml'Following those steps should set up your directory structure.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;strong&gt;Part 3: The webtemp*.xml file&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;According to the MSDN documentation: 'The WebTemp*.xml files contain the site definition configurations that are available on the Template Selection section of the New SharePoint Site page'. So the details of this file determine how your site definition information will show up on the 'Create New Site' page.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Go to the &lt;a href="http://msdn2.microsoft.com/en-us/library/ms447717.aspx"&gt;WebTemp.xml documentation page&lt;/a&gt; and copy the xml code into your webtemp*.xml file. &lt;/li&gt;&lt;li&gt;Delete all the &amp;lt;template&amp;gt; nodes except for the first one &lt;/li&gt;&lt;li&gt;In the only remaining &amp;lt;template&amp;gt; node, delete all the &amp;lt;configuration&amp;gt; nodes except the first one &lt;/li&gt;&lt;li&gt;Enter a name for the &amp;lt;template&amp;gt; node 'Name' attribute (ensure this is the same name as your directory name in the SiteTemplates folder)&lt;/li&gt;&lt;li&gt;Enter an id for the &amp;lt;template&amp;gt; node 'ID' attribute (if you've never done this before, start with 11001, this is because certain ID ranges are reserved. You'll notice that most of the out of the box templates are in the 10000 range, so hopefully anything in the 11000 range will be ok). &lt;/li&gt;&lt;li&gt;Give the &amp;lt;configuration&amp;gt; node ID attribute a value of '0' (zero) &lt;/li&gt;&lt;li&gt;Give the &amp;lt;configuration&amp;gt; node Title attribute a title of your choosing. &lt;/li&gt;&lt;li&gt;Give the &amp;lt;configuration&amp;gt; &lt;configuration&gt;&lt;configuration&gt;node Description attribute a description of your choosing. &lt;/li&gt;&lt;li&gt;Give the &amp;lt;configuration&amp;gt; node DisplayCategory attribute a category of your choosing (choosing 'Development' is a good idea, this will be the name of the tab on the 'Create Site' page that your site definition appears under)&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;strong&gt;Part 4a: Copying the onet.xml and default.aspx pages.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Since I will only be talking about the minimum needed to get your simple site definition working,&lt;br /&gt;after you complete this (or before) you might want to read up on the &lt;a href="http://msdn2.microsoft.com/en-us/library/ms474369.aspx"&gt;documentation for onet.xml&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Because the onet.xml and default.aspx files are fairly long I won't post it here. What I do is use the version that is generated from VSeWSS. If you don't have this, &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=3e1dcccd-1cca-433a-bb4d-97b96bf7ab63&amp;amp;displaylang=en"&gt;download it&lt;/a&gt; because it is pretty useful, and generates solutions for you as well. I actually used this all the time before STSDEV came out and I decided that STSDEV generated what I considered to be cleaner and more well structured solutions. I have a template directory that contains most of the files that I use that I just copy into my solutions as I create them. I'll give the instructions on how to get the onet.xml and default.aspx file into your solution if you have VSeWSS v1.1 installed.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Right click on your solution node for your STSDev Project and choose Add &gt; New Project &lt;/li&gt;&lt;li&gt;Choose 'Blank Site Definition' and create it &lt;/li&gt;&lt;li&gt;In the project expand the 'Site Definition' folder and you'll see an onet.xml file, copy this to the 'TEMPLATE/SiteTemplates/Your Site Name/xml' folder in your STSDEV project &lt;/li&gt;&lt;li&gt;In the same 'Site Definition' folder you found the onet.xml file in, you'll see a default.aspx file, copy this to the 'TEMPLATE/SiteTemplates/Your Site Name'.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Part 4b: Modifying the onet.xml fileThere are only a few changes you need to make to the onet.xml file.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Set the &amp;lt;project&amp;gt;node's 'Title' attribute to whatever you like. &lt;/li&gt;&lt;li&gt;Set the &amp;lt;project&amp;gt;node's 'Revision' attribute to '1'. &lt;/li&gt;&lt;li&gt;Set the &amp;lt;configuration&amp;gt;node's (under &amp;lt;project&amp;gt;) 'ID' attribute to '0' (zero).&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;strong&gt;Part 5: Deploy your solution&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;This is where STSDEV really shines, you basically don't need to do anything to get your site deployed other than select the 'DebugDeploy' configuration and do a build. If you did everything correctly you should be able to test your deployment by going to your site collection's home page and choosing Site Settings &gt; Create and create a new site using your template.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-3989709340303916499?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/3989709340303916499/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=3989709340303916499' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/3989709340303916499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/3989709340303916499'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2008/10/create-site-definition-by-stsdev-refer.html' title='Create Site Definition by STSDEV (Refer to SharePointers)'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-6997931465069096976</id><published>2008-09-30T16:09:00.004-05:00</published><updated>2008-09-30T16:27:11.707-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sharepoint'/><category scheme='http://www.blogger.com/atom/ns#' term='move'/><title type='text'>How to move the shared documents between 2 different farm</title><content type='html'>&lt;p&gt;Finally, I found a easy way to move the shared documents to another farm without lossing the versions, date, owner informations.&lt;br /&gt;Here is the steps. &lt;/p&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Create a temp sub-site based from publishing template group within the same web application of shared document. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;Use [move] function to move all documents from [Shared Documents] list to temp sub-site. If want keep folder structure, create the same folder structure first and then move.&lt;br /&gt;[move] function can be found - [site action] - [site settings] - [Modify all site settings] - [Content and structure] - [Actions]&lt;/li&gt;&lt;a href="http://4.bp.blogspot.com/_t_xF2iQY_Jc/SOKZWntdfKI/AAAAAAAAACQ/bDZ-o69Wl_0/s1600-h/9-30-2008+4-25-45+PM.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5251928729363250338" style="CURSOR: hand" alt="" src="http://4.bp.blogspot.com/_t_xF2iQY_Jc/SOKZWntdfKI/AAAAAAAAACQ/bDZ-o69Wl_0/s320/9-30-2008+4-25-45+PM.png" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;li&gt;Use stsadm export/import to clone this sub-site to another farm.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Use reverse way to [move] all documents within sub-site to a new [Shared Documents] list.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-6997931465069096976?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/6997931465069096976/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=6997931465069096976' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/6997931465069096976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/6997931465069096976'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2008/09/how-to-move-shared-documents-between-2.html' title='How to move the shared documents between 2 different farm'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_t_xF2iQY_Jc/SOKZWntdfKI/AAAAAAAAACQ/bDZ-o69Wl_0/s72-c/9-30-2008+4-25-45+PM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-6025195939432693620</id><published>2008-09-26T16:16:00.002-05:00</published><updated>2008-09-26T16:23:17.532-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='2008 mobile controls'/><title type='text'>The depression of missing mobile controls in VS 2008</title><content type='html'>I did add a user control based oracle gridview page into web part and deployed to sharepoint site. &lt;br /&gt;But met one curious thing, if show the user control on normal web page directly, the paging function running fine. Once running to click page number within web part, it does't work. How depression it is.&lt;br /&gt;It seems I have to use those mobile specially controls to put in the page, not sure if it will be running well in web part. But seems no other better choice.&lt;br /&gt;For now, met another worse thing, that is the mobile control is not default installation within visual studio 2008. That's unacceptable. I always suspected I missed when installation time. But that's not my fault finally.&lt;br /&gt;You have to setup it manually.&lt;br /&gt;Mobile Web Forms in Visual Studio 2008&lt;br /&gt;You can download the mobile templates from &lt;a href="http://blogs.msdn.com/webdevtools/archive/2007/09/17/tip-trick-asp-net-mobile-development-with-visual-studio-2008.aspx"&gt;the Web Development Tools Team Blog Post&lt;/a&gt; .&lt;br /&gt;There is a "readme" file attached to each of the extracted Zip folders.  But to make it simpler, once you install and unzip the package, you get a folder "ASP.NET Mobile Templates" and inside that you might find a bunch of folders.&lt;br /&gt;&lt;br /&gt;Copy the Zip folders inside each of the "ASP.NET Web Application" Folders into your system's Visual Studio Templates folder.  For instance, there is a folder for "ASP.NET Web Application CS".  You need to copy the contents of this file into&lt;br /&gt;&lt;br /&gt;c:\Documents and Settings\&lt;username&gt;\My Documents\Visual Studio 2008\Templates\ItemTemplates\Visual C#&lt;br /&gt;&lt;br /&gt;Similarly you would copy the contents of the "VB" folder into the Visual Basic folder under "ItemTemplates" above.&lt;br /&gt;&lt;br /&gt;Once you copy these and restart Visual Studio 2008, you would be able to get the "Mobile Web Form", "Mobile Web User Control" and "Mobile Web Configuration File" under "My Templates" in "Add New Item" Wizard.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-6025195939432693620?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/6025195939432693620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=6025195939432693620' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/6025195939432693620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/6025195939432693620'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2008/09/depression-of-missing-mobile-controls.html' title='The depression of missing mobile controls in VS 2008'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-501602276076166605</id><published>2008-09-25T08:11:00.001-05:00</published><updated>2008-09-25T08:13:26.420-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Event error'/><title type='text'>Error handle</title><content type='html'>When restart vitual server of MOSS setup, it pop up system event error as following:&lt;br /&gt;Event Type: Error&lt;br /&gt;Event Source: DCOM&lt;br /&gt;Event Category: None&lt;br /&gt;Event ID: 10016&lt;br /&gt;Date:  9/25/2008&lt;br /&gt;Time:  8:01:47 AM&lt;br /&gt;User:  NT AUTHORITY\NETWORK SERVICE&lt;br /&gt;Computer: MYSHAREPOINT&lt;br /&gt;Description:&lt;br /&gt;The application-specific permission settings do not grant Local Activation permission for the COM Server application with CLSID &lt;br /&gt;{61738644-F196-11D0-9953-00C04FD919C1}&lt;br /&gt; to the user NT AUTHORITY\NETWORK SERVICE SID (S-1-5-20).  This security permission can be modified using the Component Services administrative tool.&lt;br /&gt;&lt;br /&gt;For more information, see Help and Support Center at http://go.microsoft.com/fwlink/events.asp.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The correct fix steps are:&lt;br /&gt;Copy the GUID following the CLSID above, and Start--&gt;Run--&gt;regedit&lt;br /&gt;&lt;br /&gt;With the registry editor open, ensure that your cursor is on the computer at the beginning of the tree (make sure you are not in the middle of some previous edit session in the registry editor).&lt;br /&gt;&lt;br /&gt;Edit--&gt;Find and paste in the GUID. It'll stop at the application entry - and you will want to note the application name on the right side pane. In this example, it was the IIS WAMREG admin service that popped up.&lt;br /&gt;&lt;br /&gt;Now, open Component Services (typically, from the server - Start--&gt;Administrative Tools--&gt;Component Services), expand Component Services, Computers, My Computer, DCOM Config. Scroll down and find the application (IIS WAMREG in this case). Right-Click--&gt;Properties and select the Security tab. You'll have some options here - the first block Launch and Activation Permissions - ensure that the Customize radio button is selected, and click Edit. Now, add your service account - giving it launch and activate - and in some requirements - remote launch / activate permission.&lt;br /&gt;&lt;br /&gt;Restart IIS and continue on.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-501602276076166605?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/501602276076166605/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=501602276076166605' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/501602276076166605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/501602276076166605'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2008/09/error-handle.html' title='Error handle'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-2411094385221351719</id><published>2008-09-19T11:58:00.002-05:00</published><updated>2008-09-19T12:06:58.914-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='user control'/><title type='text'>The key point when use a user control in a web part to compile</title><content type='html'>You will find the user control always raise the inherit error.&lt;br /&gt;The correct inherit in your ascx file should be like following syntax.&lt;br /&gt;&lt;strong&gt;Inherits="UCWebPartSl.WebUCOne, UCWebPartSl, Version=1.0.0.0, Culture=neutral, PublicKeyToken=a01114482a6f77cc"&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-2411094385221351719?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/2411094385221351719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=2411094385221351719' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/2411094385221351719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/2411094385221351719'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2008/09/key-point-when-use-user-control-in-web.html' title='The key point when use a user control in a web part to compile'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-9372339415084304</id><published>2008-09-15T14:11:00.005-05:00</published><updated>2008-09-15T16:59:09.917-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='theme'/><category scheme='http://www.blogger.com/atom/ns#' term='solutionizing .NET'/><category scheme='http://www.blogger.com/atom/ns#' term='STSDEV'/><title type='text'>Debugging the theme by STSDEV</title><content type='html'>It's great to use Solutionizing .NET STSDEV Theme Solution Generator.&lt;br /&gt;If you want to deploying page based solutions especially for Theme, now there is a great tool you can easy to use it. (download from here http://www.codeplex.com/Solutionizing/Release/ProjectReleases.aspx?ReleaseId=17314)&lt;br /&gt;&lt;br /&gt;You can find the snapshot of usage here &lt;br /&gt;(http://solutionizing.net/2008/09/14/stsdev-theme-solution-generator/)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Here I just want to tell you about the debugging.&lt;br /&gt;Once you changed any elements about Theme such as CSS settings(theme.css) or images.&lt;br /&gt;You are not able to see any changes in sites whatever you use the [DebugUpgrage] or [DebugRedeploy] method on STSDEV deployment.&lt;br /&gt;What you need to do is change the theme selections, you will find changes then attach to process "w3wp.exe" for debugging.&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_t_xF2iQY_Jc/SM615dkTFcI/AAAAAAAAACI/RQu2SHz7su8/s1600-h/9-15-2008+2-21-52+PM.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_t_xF2iQY_Jc/SM615dkTFcI/AAAAAAAAACI/RQu2SHz7su8/s320/9-15-2008+2-21-52+PM.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5246330614727251394" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-9372339415084304?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/9372339415084304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=9372339415084304' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/9372339415084304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/9372339415084304'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2008/09/debugging-theme-by-stsdev.html' title='Debugging the theme by STSDEV'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_t_xF2iQY_Jc/SM615dkTFcI/AAAAAAAAACI/RQu2SHz7su8/s72-c/9-15-2008+2-21-52+PM.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-3461636197001542785</id><published>2008-09-15T11:10:00.001-05:00</published><updated>2008-09-15T11:10:59.541-05:00</updated><title type='text'>A good CSSs reference of theme</title><content type='html'>http://www.heathersolomon.com/content/sp07cssreference.htm&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-3461636197001542785?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/3461636197001542785/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=3461636197001542785' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/3461636197001542785'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/3461636197001542785'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2008/09/good-csss-reference-of-theme.html' title='A good CSSs reference of theme'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-6416771321993303483</id><published>2008-09-12T11:37:00.001-05:00</published><updated>2009-04-16T23:33:51.057-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='STSDEV UserControl WebPart'/><title type='text'>Use User Control in Web Part (Deploy by STSDEV)</title><content type='html'>&lt;ol&gt;&lt;li&gt;Open STSDEV to create a new project with web part template as snapshot.&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_t_xF2iQY_Jc/SMqfJrKA5LI/AAAAAAAAAB0/126Q1dB5Nlg/s1600-h/912007.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5245179704578729138" style="" alt="" src="http://3.bp.blogspot.com/_t_xF2iQY_Jc/SMqfJrKA5LI/AAAAAAAAAB0/126Q1dB5Nlg/s320/912007.png" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Add a User Control in Project.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Create directory structure in project as snapshot.&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_t_xF2iQY_Jc/SMqffrurXXI/AAAAAAAAAB8/1PAeGXad7Ig/s1600-h/912008.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5245180082689629554" style="" alt="" src="http://2.bp.blogspot.com/_t_xF2iQY_Jc/SMqffrurXXI/AAAAAAAAAB8/1PAeGXad7Ig/s320/912008.png" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Change the CustomWebPart1.cs file as following snippet.&lt;br /&gt;&lt;br /&gt;&lt;div style="border: 1px solid black; padding: 10px;"&gt;&lt;br /&gt;using System;&lt;br /&gt;using System.Web;&lt;br /&gt;using System.Web.UI;&lt;br /&gt;using System.Web.UI.WebControls;&lt;br /&gt;using System.Web.UI.WebControls.WebParts;&lt;br /&gt;namespace UCWebPartSl&lt;br /&gt;{&lt;br /&gt;public class CustomWebPart1 : WebPart&lt;br /&gt;{&lt;br /&gt;UserControl userControl;&lt;br /&gt;protected override void CreateChildControls()&lt;br /&gt;{&lt;br /&gt;//Label lblHello = new Label();&lt;br /&gt;//lblHello.Text = "Hello";&lt;br /&gt;//Controls.Add(lblHello);&lt;br /&gt;base.CreateChildControls();&lt;br /&gt;userControl =(UserControl)Page.LoadControl(@"/_controltemplates/WebUCOne.ascx");&lt;br /&gt;this.Controls.Add(userControl);&lt;br /&gt;}&lt;br /&gt;protected override void Render(HtmlTextWriter writer)&lt;br /&gt;{&lt;br /&gt;//base.Render(writer);&lt;br /&gt;userControl.RenderControl(writer);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;/div&gt;&lt;br /&gt;&lt;/li&gt;&lt;p align="left"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_t_xF2iQY_Jc/SegGRelbifI/AAAAAAAAAFY/lIix3xdZ1ZY/s1600-h/webuc.jpg"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;&lt;li&gt;Change the "Inherits" in WebUCOne.ascx file as following snippet. This assembly can be fetch by Reflector tool.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_t_xF2iQY_Jc/SegGjwkDVKI/AAAAAAAAAFg/avXN-yqjPlk/s1600-h/webuc.jpg"&gt;&lt;img style="cursor: pointer; width: 400px; height: 40px;" src="http://1.bp.blogspot.com/_t_xF2iQY_Jc/SegGjwkDVKI/AAAAAAAAAFg/avXN-yqjPlk/s400/webuc.jpg" alt="" id="BLOGGER_PHOTO_ID_5325513770766914722" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Build on "DebugDeploy" mode.&lt;/li&gt;&lt;li&gt;Activate the web part feature in Site Collection Features management page.&lt;/li&gt;&lt;li&gt;Add web part to any page as snapshot.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-6416771321993303483?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/6416771321993303483/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=6416771321993303483' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/6416771321993303483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/6416771321993303483'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2008/09/use-user-control-in-web-part-deploy-by.html' title='Use User Control in Web Part (Deploy by STSDEV)'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_t_xF2iQY_Jc/SMqfJrKA5LI/AAAAAAAAAB0/126Q1dB5Nlg/s72-c/912007.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-4251649107471092791</id><published>2008-09-12T11:08:00.000-05:00</published><updated>2008-09-12T13:18:55.425-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UserControl WebPart'/><title type='text'>Use User Control in Web Part (manually deploy to 12 hive system)</title><content type='html'>Refer "Use User Control in Web Part (manually deploy to Inetpub)".&lt;br /&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;div&gt;Just need adjust below project directory and snippet. And copy ascx file to 12 hive\TEMPLATE\CONTROLTEMPLATES&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_t_xF2iQY_Jc/SMqYWiscnvI/AAAAAAAAABk/dxaAkqP5sq4/s1600-h/912006.png"&gt;&lt;/a&gt;&lt;a href="http://4.bp.blogspot.com/_t_xF2iQY_Jc/SMqYy5ZYlBI/AAAAAAAAABs/XIfw3pJ5kiQ/s1600-h/912006.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5245172716194534418" style="CURSOR: hand" alt="" src="http://4.bp.blogspot.com/_t_xF2iQY_Jc/SMqYy5ZYlBI/AAAAAAAAABs/XIfw3pJ5kiQ/s400/912006.jpg" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://2.bp.blogspot.com/_t_xF2iQY_Jc/SMqXrWkkhrI/AAAAAAAAABU/beE__cALFNo/s1600-h/912005.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5245171487075501746" style="CURSOR: hand" alt="" src="http://2.bp.blogspot.com/_t_xF2iQY_Jc/SMqXrWkkhrI/AAAAAAAAABU/beE__cALFNo/s320/912005.png" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-4251649107471092791?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/4251649107471092791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=4251649107471092791' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/4251649107471092791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/4251649107471092791'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2008/09/use-user-control-in-web-part-manually.html' title='Use User Control in Web Part (manually deploy to 12 hive system)'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_t_xF2iQY_Jc/SMqYy5ZYlBI/AAAAAAAAABs/XIfw3pJ5kiQ/s72-c/912006.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2268727436968917954.post-8482485533311594655</id><published>2008-09-12T09:52:00.000-05:00</published><updated>2008-09-12T21:56:52.861-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='UserControl WebPart'/><title type='text'>Use User Control in WebPart (manually deploy to Inetpub)</title><content type='html'>Talked with 黎明 (msn group's friend) last night about his new creative about moss webpart experiences. That is User Control usage in Web Part. I adviced him to write it down to something like blog. He told me he did never write that. For a technical deposit. I draft that here.&lt;br /&gt;1. Create User Control.&lt;br /&gt;&lt;br /&gt;Create a C# Web Application by VS 2008&lt;br /&gt;&lt;br /&gt;Add new User Control as you like show and compile it. Snapshot show you how it looks like.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_t_xF2iQY_Jc/SMqHHhD6qZI/AAAAAAAAAAM/cfjlwfjKnMo/s1600-h/912.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5245153279229995410" style="CURSOR: hand" height="313" alt="" src="http://1.bp.blogspot.com/_t_xF2iQY_Jc/SMqHHhD6qZI/AAAAAAAAAAM/cfjlwfjKnMo/s320/912.png" width="492" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2. Add existing user control to a web part and deploy web part.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;&lt;p&gt;Create a new web part by wss extension of vs 1.2&lt;/p&gt;&lt;/li&gt;&lt;li&gt;Create a new folder "wpresources" in project. And add existing ascx file in this folder.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_t_xF2iQY_Jc/SMqLC14j1zI/AAAAAAAAAAk/ODlUsX3r5h0/s1600-h/912002.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5245157596966672178" style="WIDTH: 448px; CURSOR: hand; HEIGHT: 305px" height="271" alt="" src="http://3.bp.blogspot.com/_t_xF2iQY_Jc/SMqLC14j1zI/AAAAAAAAAAk/ODlUsX3r5h0/s320/912002.png" width="420" border="0" /&gt;&lt;/a&gt;&lt;a href="http://2.bp.blogspot.com/_t_xF2iQY_Jc/SMqK4Zp4yAI/AAAAAAAAAAc/v62cmadj6cs/s1600-h/912002.png"&gt;&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Change web part CS file as below snappit. &lt;/li&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;p&gt;namespace UCPart{&lt;br /&gt;[Guid("c60b2566-0113-490a-9581-8ecbac96a81a")] &lt;/p&gt;&lt;br /&gt;&lt;p&gt;public class WebPart1 : System.Web.UI.WebControls.WebParts.WebPart&lt;br /&gt;{ &lt;/p&gt;&lt;br /&gt;&lt;p&gt;public WebPart1()&lt;br /&gt;{&lt;br /&gt;} &lt;/p&gt;&lt;br /&gt;&lt;p&gt;UserControl userControl; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;protected override void CreateChildControls()&lt;br /&gt;{&lt;br /&gt;base.CreateChildControls();&lt;br /&gt;userControl =&lt;br /&gt;(UserControl)Page.LoadControl(@"/wpresources/WebUCOne.ascx");&lt;br /&gt;this.Controls.Add(userControl);&lt;br /&gt;} &lt;/p&gt;&lt;br /&gt;&lt;p&gt;protected override void&lt;br /&gt;Render(HtmlTextWriter writer)&lt;br /&gt;{&lt;br /&gt;//base.Render(writer);&lt;br /&gt;userControl.RenderControl(writer);&lt;br /&gt;} }}&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Change AssemblyInfo.cs file to add "using System.Security;" to the using part and add below snippet to the last row.&lt;br /&gt;[assembly: AllowPartiallyTrustedCallers]&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Change C:\Inetpub\wwwroot\wss\VirtualDirectories\portal.mysharepoint80\Web.Config file. Add SafeControl and change Trust Level as below&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;safecontrol safe="True" typename="*" namespace="UCPart" assembly="UCPart, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9f4da00116c38ec5"&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;trust originurl="" level="Full"&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Change the output path of project properties to&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;..\..\..\..\..\Inetpub\wwwroot\wss\VirtualDirectories\portal.mysharepoint80\bin\&lt;/blockquote&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Build the project and copy WebUCOne.ascx file to folder&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;C:\Inetpub\wwwroot\wss\VirtualDirectories\portal.mysharepoint80\wpresources&lt;/blockquote&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Run "iisreset -noforce" on command line&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Open [portal] -[site action]-[Gallery]-[Web Part Gallery]-[New], find the one you created and click [Populate Gallery].&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Add this web part to any page to show.&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_t_xF2iQY_Jc/SMqPHBnWa3I/AAAAAAAAAAs/V2ksLOes3uY/s1600-h/192003.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5245162066881702770" style="CURSOR: hand" alt="" src="http://3.bp.blogspot.com/_t_xF2iQY_Jc/SMqPHBnWa3I/AAAAAAAAAAs/V2ksLOes3uY/s320/192003.png" border="0" /&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2268727436968917954-8482485533311594655?l=teddyhai.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://teddyhai.blogspot.com/feeds/8482485533311594655/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2268727436968917954&amp;postID=8482485533311594655' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/8482485533311594655'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2268727436968917954/posts/default/8482485533311594655'/><link rel='alternate' type='text/html' href='http://teddyhai.blogspot.com/2008/09/use-user-control-in-webpart-manually.html' title='Use User Control in WebPart (manually deploy to Inetpub)'/><author><name>Teddy Yu</name><uri>http://www.blogger.com/profile/06489448383807390607</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_t_xF2iQY_Jc/SMqHHhD6qZI/AAAAAAAAAAM/cfjlwfjKnMo/s72-c/912.png' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
