<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-1801897191064504903</atom:id><lastBuildDate>Fri, 30 Aug 2024 00:04:25 +0000</lastBuildDate><category>asp.net</category><category>iis</category><category>.net web adf</category><category>arcgis server</category><category>asp.net ajax</category><category>dataitem</category><category>events</category><category>javascript</category><category>lifecycle</category><category>ajax</category><category>authentication</category><category>flex</category><category>httphandler</category><category>iis6</category><category>iis7</category><category>interesting</category><category>jsf</category><category>oop</category><category>phaselistener</category><category>task framework</category><category>.net</category><category>Dataset</category><category>TaskResultNode</category><category>TaskResults</category><category>actionscript</category><category>adf.net</category><category>arcsde</category><category>async postback</category><category>brain</category><category>callback</category><category>callbacks</category><category>clouds</category><category>config file</category><category>configuration file</category><category>direct connect</category><category>esri .net web adf</category><category>flash</category><category>flex library</category><category>flex tool</category><category>free</category><category>fun</category><category>glassfish</category><category>html</category><category>j2ee</category><category>java ee</category><category>java servlet</category><category>java web adf</category><category>json</category><category>json converter</category><category>json serializer</category><category>learning</category><category>login</category><category>objected oriented javascript</category><category>partial postback</category><category>php</category><category>scriptblock</category><category>sde</category><category>servlet</category><category>svn</category><category>svn client</category><category>tomcat</category><category>viewsate</category><category>web development tools</category><category>xml</category><title>GIS Programming using ArcGIS, Java, JavaScript, Flex, .net, google maps etc.</title><description></description><link>http://arcgisdeveloper.blogspot.com/</link><managingEditor>noreply@blogger.com (arcgis_developer)</managingEditor><generator>Blogger</generator><openSearch:totalResults>29</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1801897191064504903.post-4777035520131430713</guid><pubDate>Sat, 21 Nov 2009 18:59:00 +0000</pubDate><atom:updated>2009-11-21T10:59:24.467-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">brain</category><category domain="http://www.blogger.com/atom/ns#">learning</category><title>How to keep track of what you learnt?</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://www.freestylemind.com/wp-content/uploads/2009/11/brain.jpg&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;319&quot; src=&quot;http://www.freestylemind.com/wp-content/uploads/2009/11/brain.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;This is a nice article that resonated with the method that I use to learn. I use the notepad approach, I keep a diary/notepad and write what I learn and it serves dual purposes, as an index for my learnings (so that I can go back and quickly reference) and the act of writing it makes me retain it longer.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://www.freestylemind.com/how-to-keep-track-of-what-youve-learnt/&quot;&gt;http://www.freestylemind.com/how-to-keep-track-of-what-youve-learnt/&lt;/a&gt;</description><link>http://arcgisdeveloper.blogspot.com/2009/11/how-to-keep-track-of-what-you-learnt.html</link><author>noreply@blogger.com (arcgis_developer)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1801897191064504903.post-6409795166771649114</guid><pubDate>Thu, 05 Nov 2009 14:54:00 +0000</pubDate><atom:updated>2009-11-05T21:46:48.195-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.net</category><category domain="http://www.blogger.com/atom/ns#">asp.net</category><category domain="http://www.blogger.com/atom/ns#">config file</category><category domain="http://www.blogger.com/atom/ns#">configuration file</category><category domain="http://www.blogger.com/atom/ns#">xml</category><title>.NET - Serialization to XML and back - Saving/reading custom configuration files</title><description>XML serialization in the .net framework is a powerful and very useful technology, yet I wasn&#39;t too familiar with it, so I felt I should blog about it. One of the situation where I think it is very appropriate to use this is to create custom configurations and read/save/modify them for web (server) or desktop applications. Using the asp.net Cache class it is also possible to assign the serialized file as a cache dependency thereby re-read and re-hydrate the serialized object from the xml file. This is a perfect scenario for xml configuration files. The below links are references and the code is from &quot;switch on the code c# xml serialization tutorial&quot;, link shown below.&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://stackoverflow.com/questions/1186743/replacement-for-xml-serialization&quot;&gt;http://stackoverflow.com/questions/1186743/replacement-for-xml-serialization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://code.google.com/apis/protocolbuffers/docs/javatutorial.html&quot;&gt;http://code.google.com/apis/protocolbuffers/docs/javatutorial.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[&lt;b&gt;Great&lt;/b&gt;] &lt;a href=&quot;http://www.switchonthecode.com/tutorials/csharp-tutorial-xml-serialization&quot;&gt;http://www.switchonthecode.com/tutorials/csharp-tutorial-xml-serialization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.developer.com/net/csharp/article.php/3110371/SerializationDeserialization-in-NET.htm&quot;&gt;http://www.developer.com/net/csharp/article.php/3110371/SerializationDeserialization-in-NET.htm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[&lt;b&gt;Great&lt;/b&gt;] &lt;a href=&quot;http://www.dotnetjohn.com/articles.aspx?articleid=173&quot;&gt;http://www.dotnetjohn.com/articles.aspx?articleid=173&lt;/a&gt; &lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;STEP 1&lt;/span&gt;: Create a simple .net class (Plain old .NET object, PONO), for example:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;geshifilter&quot;&gt;&lt;div class=&quot;csharp geshifilter-csharp&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0600ff;&quot;&gt;class&lt;/span&gt; Movie&lt;br /&gt;
&lt;span style=&quot;color: black;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color: #0600ff;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0600ff;&quot;&gt;string&lt;/span&gt; Name&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color: black;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #0600ff;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: #0600ff;&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: black;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color: #0600ff;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0600ff;&quot;&gt;int&lt;/span&gt; Rating&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color: black;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #0600ff;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: #0600ff;&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: black;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color: #0600ff;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: teal;&quot;&gt;DateTime&lt;/span&gt; ReleaseDate&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color: black;&quot;&gt;{&lt;/span&gt; &lt;span style=&quot;color: #0600ff;&quot;&gt;get&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: #0600ff;&quot;&gt;set&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;;&lt;/span&gt; &lt;span style=&quot;color: black;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: black;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;STEP 2&lt;/span&gt;: Serialize it to Xml using the XmlSerializer class:&lt;/b&gt;&lt;br /&gt;
&lt;div class=&quot;csharp geshifilter-csharp&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;csharp geshifilter-csharp&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;div class=&quot;csharp geshifilter-csharp&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: #0600ff;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color: #0600ff;&quot;&gt;void&lt;/span&gt; SerializeToXML&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;Movie movie&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: black;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; XmlSerializer serializer &lt;span style=&quot;color: #296d26;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0600ff;&quot;&gt;new&lt;/span&gt; XmlSerializer&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;typeof&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;Movie&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; TextWriter textWriter &lt;span style=&quot;color: #296d26;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0600ff;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: teal;&quot;&gt;StreamWriter&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;@&quot;C:\movie.xml&quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; serializer.&lt;span style=&quot;color: black;&quot;&gt;Serialize&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;textWriter, movie&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; textWriter.&lt;span style=&quot;color: black;&quot;&gt;Close&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: black;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;
&lt;b&gt;&lt;span style=&quot;color: black;&quot;&gt;It would produce an XML file, named movie.xml, as:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;div class=&quot;geshifilter&quot;&gt;&lt;div class=&quot;xml geshifilter-xml&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;div class=&quot;xml geshifilter-xml&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;div class=&quot;xml geshifilter-xml&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;?xml&lt;/span&gt; &lt;span style=&quot;color: #060066;&quot;&gt;version&lt;/span&gt;=&lt;span style=&quot;color: red;&quot;&gt;&quot;1.0&quot;&lt;/span&gt; &lt;span style=&quot;color: #060066;&quot;&gt;encoding&lt;/span&gt;=&lt;span style=&quot;color: red;&quot;&gt;&quot;utf-8&quot;&lt;/span&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;?&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;Movie&lt;/span&gt; &lt;span style=&quot;color: #060066;&quot;&gt;xmlns:xsi&lt;/span&gt;=&lt;span style=&quot;color: red;&quot;&gt;&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: black;&quot;&gt; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #060066;&quot;&gt;xmlns:xsd&lt;/span&gt;=&lt;span style=&quot;color: red;&quot;&gt;&quot;http://www.w3.org/2001/XMLSchema&quot;&lt;/span&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;Title&lt;span style=&quot;color: #0600ff;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;Starship Troopers&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;/Title&lt;span style=&quot;color: #0600ff;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;Rating&lt;span style=&quot;color: #0600ff;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;6.9&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;/Rating&lt;span style=&quot;color: #0600ff;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;ReleaseDate&lt;span style=&quot;color: #0600ff;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;1997-11-07T00:00:00&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;/ReleaseDate&lt;span style=&quot;color: #0600ff;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;/Movie&lt;span style=&quot;color: #0600ff;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;div class=&quot;xml geshifilter-xml&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;div class=&quot;xml geshifilter-xml&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt; &lt;span style=&quot;color: #060066;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div style=&quot;font-family: inherit;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;STEP 3&lt;/span&gt;: Modify the Xml file and deserialize (update and re-hydrate) the .net object from the xml file:&lt;/b&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
&lt;div class=&quot;xml geshifilter-xml&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;div class=&quot;geshifilter&quot;&gt;&lt;div class=&quot;csharp geshifilter-csharp&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;static&lt;/span&gt; &lt;span style=&quot;color: black;&quot;&gt;&lt;/span&gt;Movie&lt;span style=&quot;color: black;&quot;&gt;&lt;/span&gt; DeserializeFromXML&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: black;&quot;&gt;{&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;XmlSerializer deserializer &lt;span style=&quot;color: #296d26;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0600ff;&quot;&gt;new&lt;/span&gt; XmlSerializer&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;typeof&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: teal;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;/span&gt;Movie&lt;span style=&quot;color: black;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;TextReader textReader &lt;span style=&quot;color: #296d26;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #0600ff;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: teal;&quot;&gt;StreamReader&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;@&quot;C:\movie.xml&quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; Movie movie &lt;span style=&quot;color: #296d26;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;Movie&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;deserializer.&lt;span style=&quot;color: black;&quot;&gt;Deserialize&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;textReader&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp; &amp;nbsp;textReader.&lt;span style=&quot;color: black;&quot;&gt;Close&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #0600ff;&quot;&gt;return&lt;/span&gt; movie&lt;span style=&quot;color: black;&quot;&gt;;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;color: black;&quot;&gt;}&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;span style=&quot;color: black;&quot;&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;&lt;span style=&quot;color: #0600ff;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;&lt;span style=&quot;color: black;&quot;&gt; &lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/div&gt;</description><link>http://arcgisdeveloper.blogspot.com/2009/11/net-serialization-to-xml-and-back.html</link><author>noreply@blogger.com (arcgis_developer)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1801897191064504903.post-3059791098741284585</guid><pubDate>Thu, 05 Nov 2009 05:22:00 +0000</pubDate><atom:updated>2009-11-04T21:24:48.462-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">actionscript</category><category domain="http://www.blogger.com/atom/ns#">flash</category><category domain="http://www.blogger.com/atom/ns#">flex</category><title>Flex: Export chart / graph or some other component to image (save as image)</title><description>This was a non trivial issue prior to Flex 3 - most people had approached this using a mix of client and server side technologies, even using javascript as well. But most of the solutions were not simple or elegant, this is where Flex3 came to the rescue with the &lt;a href=&quot;http://livedocs.adobe.com/flex/3/langref/mx/graphics/ImageSnapshot.html&quot;&gt;ImageSnapshot &lt;/a&gt;class. &lt;a href=&quot;http://dougmccune.com/blog/2007/06/03/save-a-snapshot-image-of-a-flex-app-without-a-server/&quot;&gt;Doug McCune &lt;/a&gt;created an interesting approach using javascript and serializing image bytes to the browser address bar, although not simple, it is creative and that dynamic chart is great.&lt;br /&gt;
&lt;br /&gt;
Today it is a very simple thing to do. It is a two fold problem with a very easy implementation thanks to the awesome flex framework.&lt;a href=&quot;http://www.scottlogic.co.uk/blog/oof/2009/03/save-flex-chart-as-image/&quot;&gt;Graham Odds&lt;/a&gt; wrote a great article on how to do this and I&#39;m elaborating on his article. &lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Save the UIComponent as an image (you can specify the image format) using the ImageSnapshot class&lt;/li&gt;
&lt;li&gt;Send the image to be saved to the user&#39;s computer (using the FileReference class from Flash 10)&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;All &lt;a href=&quot;http://livedocs.adobe.com/flex/3/langref/mx/core/UIComponent.html&quot;&gt;UIComponents&lt;/a&gt; in flex extend &lt;a href=&quot;http://livedocs.adobe.com/flex/3/langref/flash/display/DisplayObject.html&quot;&gt;DisplayObject&lt;/a&gt; which can be exported to an image, e.g. png,, jpg, etc using the &lt;a href=&quot;http://livedocs.adobe.com/flex/3/langref/mx/graphics/ImageSnapshot.html&quot;&gt;ImageSnapshot &lt;/a&gt;class. Currently there are two classes that can take BitMapData or ByteArray&amp;nbsp; and convert them to an image format, class that implement interface &lt;a href=&quot;http://livedocs.adobe.com/flex/3/langref/mx/graphics/codec/IImageEncoder.html&quot;&gt;IImageEncoder&lt;/a&gt; allow this. The image encoders are: &lt;a href=&quot;http://livedocs.adobe.com/flex/3/langref/mx/graphics/codec/JPEGEncoder.html&quot;&gt;JPEGEncoder &lt;/a&gt;and &lt;a href=&quot;http://livedocs.adobe.com/flex/3/langref/mx/graphics/codec/PNGEncoder.html&quot;&gt;PNGEncoder&lt;/a&gt;. Once it is exported to an image, the byte data can now be transferred to the user&#39;s computer and saved as a file.This is done using the &lt;a href=&quot;http://livedocs.adobe.com/flex/3/langref/flash/net/FileReference.html&quot;&gt;FileReference &lt;/a&gt;class introduced in Flash 10. &lt;br /&gt;
&lt;br /&gt;
Below is the code snippet to do this (&lt;a href=&quot;http://www.scottlogic.co.uk/blog/oof/2009/03/save-flex-chart-as-image/&quot;&gt;source&lt;/a&gt;) :&lt;br /&gt;
&lt;div class=&quot;wp_syntax&quot;&gt;&lt;div class=&quot;code&quot;&gt;&lt;pre class=&quot;actionscript3&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span style=&quot;color: #3f5fbf;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;&lt;pre class=&quot;actionscript3&quot; style=&quot;font-family: monospace;&quot;&gt;&lt;span style=&quot;color: #3f5fbf;&quot;&gt;/**
 * Attempts to save the chart to the user&#39;s file-system.
 */&lt;/span&gt;
&lt;span style=&quot;color: #0033ff; font-weight: bold;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color: #339966; font-weight: bold;&quot;&gt;function&lt;/span&gt; saveChart&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: black; font-weight: bold;&quot;&gt;:&lt;/span&gt;&lt;span style=&quot;color: #0033ff; font-weight: bold;&quot;&gt;void&lt;/span&gt;
&lt;span style=&quot;color: black;&quot;&gt;{&lt;/span&gt;
    &lt;span style=&quot;color: #6699cc; font-weight: bold;&quot;&gt;var&lt;/span&gt; image&lt;span style=&quot;color: black; font-weight: bold;&quot;&gt;:&lt;/span&gt;ImageSnapshot = &lt;a href=&quot;http://livedocs.adobe.com/flex/3/langref/mx/graphics/ImageSnapshot.html&quot;&gt;ImageSnapshot&lt;/a&gt;.captureImage&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;myChart, &lt;span style=&quot;color: black; font-weight: bold;&quot;&gt;300&lt;/span&gt;, &lt;span style=&quot;color: #0033ff; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;a href=&quot;http://livedocs.adobe.com/flex/3/langref/mx/graphics/codec/PNGEncoder.html&quot;&gt;PNGEncoder&lt;/a&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;;
    &lt;span style=&quot;color: #6699cc; font-weight: bold;&quot;&gt;var&lt;/span&gt; file&lt;span style=&quot;color: black; font-weight: bold;&quot;&gt;:&lt;/span&gt;&lt;a href=&quot;http://livedocs.adobe.com/flex/3/langref/flash/net/FileReference.html&quot;&gt;&lt;span style=&quot;color: #004993;&quot;&gt;FileReference&lt;/span&gt; &lt;/a&gt;= &lt;span style=&quot;color: #0033ff; font-weight: bold;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color: #004993;&quot;&gt;FileReference&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;;
    file.&lt;span style=&quot;color: #004993;&quot;&gt;save&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;(&lt;/span&gt;image.&lt;span style=&quot;color: #004993;&quot;&gt;data&lt;/span&gt;, &lt;span style=&quot;color: #990000;&quot;&gt;&quot;chart.png&quot;&lt;/span&gt;&lt;span style=&quot;color: black;&quot;&gt;)&lt;/span&gt;;
&lt;span style=&quot;color: black;&quot;&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;</description><link>http://arcgisdeveloper.blogspot.com/2009/11/flex-export-chart-graph-or-some-other.html</link><author>noreply@blogger.com (arcgis_developer)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1801897191064504903.post-4885177815578836859</guid><pubDate>Sun, 01 Nov 2009 06:40:00 +0000</pubDate><atom:updated>2009-10-31T23:40:59.164-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">flex</category><category domain="http://www.blogger.com/atom/ns#">flex library</category><category domain="http://www.blogger.com/atom/ns#">flex tool</category><title>Transform any flex component with resizing, dragging with handles</title><description>Try it out yourself:&lt;br /&gt;
&lt;br /&gt;
&lt;div id=&quot;ohHeader&quot;&gt;&lt;embed bgcolor=&quot;#333333&quot; height=&quot;200&quot; id=&quot;HomePageObjectHandlesDemo.swf&quot; name=&quot;HomePageObjectHandlesDemo.swf&quot; quality=&quot;high&quot; src=&quot;http://www.rogue-development.com/swf/HomePageObjectHandlesDemo.swf&quot; type=&quot;application/x-shockwave-flash&quot; width=&quot;100%&quot; /&gt;&lt;/embed&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
This is called &quot;Flex Object Handles&quot; available from &lt;a href=&quot;http://www.rogue-development.com/objectHandles.html&quot;&gt;Marc Hughes&lt;/a&gt;. This project is available on &lt;a href=&quot;http://code.google.com/p/flex-object-handles/wiki/ObjectHandlesUsage&quot;&gt;google code &lt;/a&gt;and has excellent &lt;a href=&quot;http://www.rogue-development.com/objectHandles/diagramTutorial/index.html&quot;&gt;tutorials&lt;/a&gt;, documentation, forum activity&amp;nbsp;and support. This library supports using a custom container for flex components to enable thme to be resizable, draggable, moveable&amp;nbsp; and provides handles etc.&lt;br /&gt;
&lt;br /&gt;
Another example:&lt;br /&gt;
&lt;div id=&quot;ohHeader&quot;&gt;&lt;embed bgcolor=&quot;#333333&quot; height=&quot;200&quot; id=&quot;degrafaExample.swf&quot; name=&quot;degrafaExample.swf&quot; quality=&quot;high&quot; src=&quot;http://rogue-development.com/objectHandles/degrafaExample/OH_Degrafa.swf&quot; type=&quot;application/x-shockwave-flash&quot; width=&quot;100%&quot; /&gt;&lt;/embed&gt;&lt;br /&gt;
&lt;/div&gt;</description><link>http://arcgisdeveloper.blogspot.com/2009/10/transform-any-flex-component-with.html</link><author>noreply@blogger.com (arcgis_developer)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1801897191064504903.post-7046039758293084263</guid><pubDate>Thu, 29 Oct 2009 05:58:00 +0000</pubDate><atom:updated>2009-10-28T22:58:55.726-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">free</category><category domain="http://www.blogger.com/atom/ns#">interesting</category><title>Interesting article on how a plane ticket can be free</title><description>In europe there are plane tickets that costs around $20. How is this possible?&lt;br /&gt;
The article below explains this.&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://www.wired.com/techbiz/it/magazine/16-03/ff_free_air&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;300&quot; src=&quot;http://www.wired.com/images/article/magazine/1603/ff_free_air_f.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><link>http://arcgisdeveloper.blogspot.com/2009/10/interesting-article-on-how-plane-ticket.html</link><author>noreply@blogger.com (arcgis_developer)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1801897191064504903.post-7320977410167753628</guid><pubDate>Thu, 29 Oct 2009 05:54:00 +0000</pubDate><atom:updated>2009-10-28T22:59:54.657-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">clouds</category><category domain="http://www.blogger.com/atom/ns#">fun</category><category domain="http://www.blogger.com/atom/ns#">interesting</category><title>Awesome cloud formation in the sky</title><description>&lt;div&gt;This cloud formation really stuck in my mind invoking some crazy imaginations. What if we had huge tubes like these as conduits to space, or maybe a halo ring/conduit around our planet with a habitats in it. Pretty cool :)&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://magazine.gritfx.com/wp-content/uploads/2009/09/morninggloryclouds.jpg&quot; /&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
Here&#39;s some more cool looking clouds:&lt;br /&gt;
* &lt;a href=&quot;http://www.webdesignerdepot.com/2009/10/the-weirdest-clouds-that-youll-ever-see/&quot;&gt;http://www.webdesignerdepot.com/2009/10/the-weirdest-clouds-that-youll-ever-see/&lt;/a&gt;&lt;br /&gt;
* &lt;a href=&quot;http://www.wired.com/wiredscience/2009/09/clouds/&quot;&gt;http://www.wired.com/wiredscience/2009/09/clouds/&lt;/a&gt;</description><link>http://arcgisdeveloper.blogspot.com/2009/10/awesome-cloud-formation-in-sky.html</link><author>noreply@blogger.com (arcgis_developer)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1801897191064504903.post-1129987906342068344</guid><pubDate>Fri, 23 Oct 2009 00:56:00 +0000</pubDate><atom:updated>2009-10-31T00:07:04.148-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.net web adf</category><category domain="http://www.blogger.com/atom/ns#">ajax</category><category domain="http://www.blogger.com/atom/ns#">arcgis server</category><category domain="http://www.blogger.com/atom/ns#">asp.net ajax</category><category domain="http://www.blogger.com/atom/ns#">esri .net web adf</category><category domain="http://www.blogger.com/atom/ns#">javascript</category><title>How to trigger some javascript (client-interaction) the very first  time the page is requested in an ESRI .NET web ADF based web application?</title><description>&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 8pt;&quot;&gt;&lt;span style=&quot;font-family: arial; font-size: 19px;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 8pt;&quot;&gt;Since the esri .net web adf is based on &lt;a href=&quot;http://asp.net/&quot;&gt;asp.net&lt;/a&gt; ajax we can leverage the client application and page lifecycle to trigger activities in different phases of the lifecycle.&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;The below illustrates what happens during first page load, partial page postback, and browser close/moving away:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 8pt;&quot;&gt;&amp;nbsp;&lt;span style=&quot;font-weight: bold;&quot;&gt;A. During first initial page request: (1st time the page is loaded or refreshed)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-left: 0.5in;&quot;&gt;&lt;span style=&quot;-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: yellow; color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;&quot;&gt;APP&lt;/span&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;&quot;&gt;_init&lt;br /&gt;
&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;span style=&quot;-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: yellow; color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;&quot;&gt;APP&lt;/span&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;&quot;&gt;_load&lt;br /&gt;
&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;span style=&quot;-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: yellow; color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;&quot;&gt;APP&lt;/span&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;&quot;&gt;_page_Load&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;&quot;&gt;Notes:&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 8pt;&quot;&gt;The &lt;b&gt;init&lt;/b&gt; event of the &lt;b&gt;Application&lt;/b&gt; instance is raised &lt;b&gt;&lt;i&gt;only one time&lt;/i&gt;&lt;/b&gt; for the life of the page in the browser. It is not raised for subsequent asynchronous postbacks. During an initial request, &lt;b&gt;no&lt;/b&gt; PageRequestManager events are raised.&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal;&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;&quot;&gt;&lt;span style=&quot;font-family: Verdana; font-size: 11px; font-weight: bold;&quot;&gt;B. During Asynchronous postback (aka partial page postback, ajax request using &lt;a href=&quot;http://asp.net/&quot;&gt;asp.net&lt;/a&gt; ajax)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-left: 0.5in;&quot;&gt;&lt;span style=&quot;-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: lime; color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;&quot;&gt;PRM&lt;/span&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;&quot;&gt;_init_request&lt;br /&gt;
&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;span style=&quot;-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: lime; color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;&quot;&gt;PRM&lt;/span&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;&quot;&gt;_begin_request&lt;br /&gt;
&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;span style=&quot;-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: aqua; color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;&quot;&gt;WRM&lt;/span&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;&quot;&gt;_invoking_request&lt;br /&gt;
&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;span style=&quot;-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: aqua; color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;&quot;&gt;WRM&lt;/span&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;&quot;&gt;_completedRequest&lt;br /&gt;
&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;span style=&quot;-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: lime; color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;&quot;&gt;PRM&lt;/span&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;&quot;&gt;_page_loading&lt;br /&gt;
&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;span style=&quot;-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: lime; color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;&quot;&gt;PRM&lt;/span&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;&quot;&gt;_page_loaded&lt;br /&gt;
&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;span style=&quot;-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: yellow; color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;&quot;&gt;APP&lt;/span&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;&quot;&gt;_load&lt;br /&gt;
&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;span style=&quot;-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: lime; color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;&quot;&gt;PRM&lt;/span&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;&quot;&gt;_end_request&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 8pt;&quot;&gt;C. During browser close or browsing away from the page:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-left: 0.5in;&quot;&gt;&lt;span style=&quot;-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: lime; color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;&quot;&gt;PRM&lt;/span&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;&quot;&gt;_init_request&lt;br /&gt;
&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;span style=&quot;-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: yellow; color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;&quot;&gt;APP&lt;/span&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;&quot;&gt;_unload&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 8pt;&quot;&gt;Where&lt;span style=&quot;font-family: arial; font-size: 13px;&quot;&gt;&lt;span style=&quot;-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: yellow; font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 8pt;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 8pt;&quot;&gt;&lt;span style=&quot;font-family: arial; font-size: 13px;&quot;&gt;&lt;span style=&quot;-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: yellow; font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 8pt;&quot;&gt;APP&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 8pt;&quot;&gt; = Sys.Application object&lt;br /&gt;
&lt;span style=&quot;font-family: arial; font-size: 13px;&quot;&gt;&lt;span style=&quot;-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: lime; font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 8pt;&quot;&gt;PRM&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 8pt;&quot;&gt; = Sys.WebForms.PageRequestmanager&lt;br /&gt;
&lt;span style=&quot;font-family: arial; font-size: 13px;&quot;&gt;&lt;span style=&quot;-moz-background-clip: border; -moz-background-inline-policy: continuous; -moz-background-origin: padding; background: aqua; font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 8pt;&quot;&gt;WRM&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Verdana&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 8pt;&quot;&gt; = &lt;a href=&quot;http://www.asp.net/AJAX/Documentation/Live/ClientReference/Sys.Net/WebrequestManagerClass/default.aspx&quot;&gt;Sys.Net.WebRequestManager&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal;&quot;&gt;&lt;span style=&quot;font-family: Verdana; font-size: 11px;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoListParagraph&quot; style=&quot;line-height: normal; text-indent: -0.25in;&quot;&gt;&lt;span style=&quot;color: black; font-size: 10pt;&quot;&gt;1)&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;; font-size-adjust: none; font-stretch: normal;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;font-size: small;&quot;&gt; 1)&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black; font-size: 10pt;&quot;&gt;Create a file and place it&amp;nbsp; as follows: YourWebApp&lt;/span&gt;&lt;span style=&quot;color: #b40000; font-size: 10pt;&quot;&gt;/javascript/&lt;/span&gt;&lt;span style=&quot;color: black; font-size: 10pt;&quot;&gt;ocgis.js&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;table border=&quot;1&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-bottom: medium none; border-collapse: collapse; border-left: medium none; border-right: medium none; border-top: medium none; margin-left: 0.25in;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;border-bottom: black 1pt solid; border-left: black 1pt solid; border-right: black 1pt solid; border-top: black 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in; width: 6.65in;&quot; valign=&quot;top&quot; width=&quot;638&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal;&quot;&gt;&lt;span style=&quot;color: olive; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;//contents&lt;/span&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: olive; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;of&lt;/span&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: olive; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;file&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #0000c8; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;if&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt; (&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #0000c8; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;typeof&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;&amp;nbsp;myns== &lt;/span&gt;&lt;span style=&quot;color: green; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;&#39;undefined&#39;&lt;/span&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;) {&amp;nbsp;myns&amp;nbsp;= {}; }&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal;&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;myns.didOnce = &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #c86400; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;false&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal;&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;myns.initAppEventHandler = &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #0000c8; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;function&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;(sender) {&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;myns.loadAppEventHandler();&lt;br /&gt;
}&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal;&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;myns.loadAppEventHandler = &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #0000c8; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;function&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;(sender) {&lt;br /&gt;
&lt;span style=&quot;font-family: arial; font-size: 13px;&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #0000c8; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;var&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt; prm = Sys.WebForms.PageRequestManager.getInstance();&lt;br /&gt;
&lt;span style=&quot;font-family: arial; font-size: 13px;&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #0000c8; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;if&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt; (!ocgis.didOnce) {&lt;br /&gt;
&lt;span style=&quot;font-family: arial; font-size: 13px;&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style=&quot;color: #0064c8; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;alert&lt;/span&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;color: green; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;&quot;TODO: initiate things and show panel using javascript....&quot;&lt;/span&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;);&lt;br /&gt;
&lt;span style=&quot;font-family: arial; font-size: 13px;&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;myns.didOnce = &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #c86400; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;true&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;;&lt;br /&gt;
&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;
}&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 13px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-left: 0.25in;&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;&quot;&gt;&lt;span style=&quot;font-family: arial;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;2)&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;; font-size-adjust: none; font-stretch: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black; font-size: 10pt;&quot;&gt;In the &lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #0000c8; font-size: 10pt;&quot;&gt;default&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: black; font-size: 10pt;&quot;&gt;.aspx page, Insert the below right before &amp;lt;/body&amp;gt; , i.e. end of body tag&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;table border=&quot;1&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-bottom: medium none; border-collapse: collapse; border-left: medium none; border-right: medium none; border-top: medium none; margin-left: 0.25in;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;border-bottom: black 1pt solid; border-left: black 1pt solid; border-right: black 1pt solid; border-top: black 1pt solid; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in; width: 6.65in;&quot; valign=&quot;top&quot; width=&quot;638&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal;&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;&amp;lt;script language&lt;/span&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: green; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;&quot;javascript&quot;&lt;/span&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt; type=&lt;/span&gt;&lt;span style=&quot;color: green; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;&quot;text/javascript&quot;&lt;/span&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt; src=&lt;/span&gt;&lt;span style=&quot;color: green; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;&quot;javascript/myns.js&quot;&lt;/span&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt; &amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;span style=&quot;font-family: arial; font-size: 13px;&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;&amp;lt;script &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;language&lt;/span&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: green; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;&quot;javascript&quot;&lt;/span&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;&lt;span style=&quot;font-family: arial; font-size: 13px;&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt; type=&lt;/span&gt;&lt;span style=&quot;color: green; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;&quot;text/javascript&quot;&lt;/span&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal;&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Sys.Application.add_init(myns.initAppEventHandler);&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal;&quot;&gt;&lt;span style=&quot;color: black; font-family: &amp;quot;Gill Sans MT&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 9pt;&quot;&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Sys.Application.add_load(myns.loadAppEventHandler);&lt;br /&gt;
&amp;lt;/script&amp;gt;&amp;nbsp;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 13px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
The diagram below does a great job of showing the events from the 3 main objects in a nice sequence diagram:&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisUHdFiDrzT4CXku9DwiO4LLB9AeVm4pHHQExx7uv5ezx9TT6rrDPIXt2VKIjgt3CngXFNn3wR2zoHlye70-hHNNt0f3Op_MVarnEG8vq1WYMhPuimfisW6eXWRHCdCZzSp-jj2fpbiYw/s1600-h/asp.net_ajax_client_lifecycle.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisUHdFiDrzT4CXku9DwiO4LLB9AeVm4pHHQExx7uv5ezx9TT6rrDPIXt2VKIjgt3CngXFNn3wR2zoHlye70-hHNNt0f3Op_MVarnEG8vq1WYMhPuimfisW6eXWRHCdCZzSp-jj2fpbiYw/s640/asp.net_ajax_client_lifecycle.jpg&quot; vr=&quot;true&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><link>http://arcgisdeveloper.blogspot.com/2009/10/how-to-trigger-some-javascript-client.html</link><author>noreply@blogger.com (arcgis_developer)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisUHdFiDrzT4CXku9DwiO4LLB9AeVm4pHHQExx7uv5ezx9TT6rrDPIXt2VKIjgt3CngXFNn3wR2zoHlye70-hHNNt0f3Op_MVarnEG8vq1WYMhPuimfisW6eXWRHCdCZzSp-jj2fpbiYw/s72-c/asp.net_ajax_client_lifecycle.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1801897191064504903.post-9173411236673328668</guid><pubDate>Tue, 20 Oct 2009 08:10:00 +0000</pubDate><atom:updated>2009-10-20T01:17:17.414-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">glassfish</category><category domain="http://www.blogger.com/atom/ns#">iis</category><category domain="http://www.blogger.com/atom/ns#">php</category><category domain="http://www.blogger.com/atom/ns#">svn</category><category domain="http://www.blogger.com/atom/ns#">svn client</category><title>Cool web app client for SVN repository</title><description>I&#39;ve been searching for an easy to use, web client for SVN repositories. I had come across &lt;a href=&quot;http://www.polarion.com/products/svn/svn_webclient.php&quot;&gt;svnwebclient &lt;/a&gt;from &lt;a href=&quot;http://www.polarion.com/&quot;&gt;Polarion&lt;/a&gt;, and it seems very promising, useful, with lots of features e.g. compare, diff, changeset, etc., but it requires a Java Container. I&#39;m familiar with Tomcat which is free, so I installed it on it but performance wasn&#39;t great and Tomcat was using nearly 40% of CPU on a quad core when it was busy. I didn&#39;t venture with Jetty since the docs are horrible. I played with WebLogic a while ago, but purchasing that is not an option now. I looked into glassfish from Sun, downloaded and installed it. The installation was smooth, it even has a very nice web management tool for the server. However, when i deployed svnwebclient it caused the server to be unresponsive and was using 350-450mb of memory, so again performance was bad, so I abandoned that route.&lt;br /&gt;
&quot;glassfish v3 preview&quot; docs:&amp;nbsp;&lt;a href=&quot;http://docs.sun.com/app/docs/doc/820-7689/aboaa?a=view&quot;&gt;http://docs.sun.com/app/docs/doc/820-7689/aboaa?a=view&lt;/a&gt;&lt;br /&gt;
&lt;table&gt;&lt;tbody&gt;
&lt;tr&gt; &lt;td&gt;&lt;br /&gt;
Screenshots of&amp;nbsp;&lt;span style=&quot;-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px;&quot;&gt;&lt;a href=&quot;http://www.polarion.com/products/svn/svn_webclient.php&quot;&gt;svnwebclient&amp;nbsp;&amp;nbsp;&lt;/a&gt;&lt;/span&gt;from Polarion:&lt;br /&gt;
&lt;span style=&quot;-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: Arial; font-size: 13px; line-height: 19px;&quot;&gt;&lt;a href=&quot;http://www.polarion.com/products/alm/screenshots/screen_zoom.php?image=http://www.polarion.org/projects/svnwebclient/images/sc4b.gif&amp;amp;text=Compare%20SVN%20Files&quot; onclick=&quot;window.open(this.href,&#39;Screenshot&#39;,&#39;scrollbars=yes,resizable=yes,width=985,height=533&#39;); return false;&quot; style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px;&quot;&gt;&lt;img alt=&quot;Online Subversion file comparison screenshot&quot; border=&quot;0&quot; src=&quot;http://www.polarion.org/projects/svnwebclient/images/sc4s.gif&quot; style=&quot;border-bottom-style: none; border-color: initial; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; border-width: initial;&quot; title=&quot;Diff Subversion-managed files on line&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: Arial; font-size: 13px; line-height: 19px;&quot;&gt;&lt;a href=&quot;http://www.polarion.com/products/alm/screenshots/screen_zoom.php?image=http://www.polarion.org/projects/svnwebclient/images/sc4b.gif&amp;amp;text=Compare%20SVN%20Files&quot; onclick=&quot;window.open(this.href,&#39;Screenshot&#39;,&#39;scrollbars=yes,resizable=yes,width=985,height=533&#39;); return false;&quot; style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px;&quot;&gt;Compare SVN Files&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt; &lt;td&gt;&lt;br /&gt;
&lt;span style=&quot;-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: Arial; font-size: 13px; line-height: 19px;&quot;&gt;&lt;a href=&quot;http://www.polarion.com/products/alm/screenshots/screen_zoom.php?image=http://www.polarion.org/projects/svnwebclient/images/sc1b.gif&amp;amp;text=SVN%20Repository%20Browser&quot; onclick=&quot;window.open(this.href,&#39;Screenshot&#39;,&#39;scrollbars=yes,resizable=yes,width=985,height=533&#39;); return false;&quot; style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #333399;&quot;&gt;&lt;img alt=&quot;Subversion repository browser screenshot&quot; border=&quot;0&quot; src=&quot;http://www.polarion.org/projects/svnwebclient/images/sc1s.gif&quot; style=&quot;border-bottom-style: none; border-color: initial; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; border-width: initial;&quot; title=&quot;Easy graphical browsing of SVN repository&quot; /&gt;&lt;br /&gt;
Subversion repository browser&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt; &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
This made me look at other web clients running on other frameworks, and so I found &lt;a href=&quot;http://www.websvn.info/&quot;&gt;websvn&lt;/a&gt;, which runs on php. I tried installing it on my personal windows vista home premium x64 OS and found it was surprisingly easy to install. However, I was really frustrated with windows vista, absolutely horrible for doing any sys admin type of work, e.g. &quot;run as&quot; context menu has been removed, remote desktop has been removed, all menus, shortcuts, control panels have been re-arranged and so many more issues with it, which is another story.&lt;br /&gt;
&lt;br /&gt;
Here&#39;s the installation instructions for websvn on a windows box (in my case IIS 6):&lt;br /&gt;
&lt;br /&gt;
1) Go to&amp;nbsp;&lt;a href=&quot;http://php.iis.net/&quot;&gt;http://php.iis.net/&lt;/a&gt;&amp;nbsp;and click on the install to initiate the &quot;Web Platform Installer&quot; program, which will download a ~15mb file to set up php on IIS 6/7. Below is the actual download location:&lt;br /&gt;
&lt;a href=&quot;http://windows.php.net/downloads/releases/php-5.2.11-nts-Win32-VC6-x86.msi&quot;&gt;http://windows.php.net/downloads/releases/php-5.2.11-nts-Win32-VC6-x86.msi&amp;nbsp;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
2) that program should setup the IIS mapping for .php extension. which should be mapped to the fastcgi extension, in my case it was located at &lt;b&gt;c:\program files (x86)\PHP\php-cgi.exe&lt;/b&gt;.&lt;br /&gt;
&lt;br /&gt;
3) Now simply copy and paste the contents of the websvn web app into an IIS virtual directory and convert that directory to an IIS app&lt;br /&gt;
&lt;br /&gt;
4) finally, copy the file c:\inetput\wwwroot\websvn\include\distconfig.php and paste it as config.php. Read thru the contents of that file and change the necessary&amp;nbsp;parameters&amp;nbsp;to reference your SVN service&lt;br /&gt;
&lt;br /&gt;
That&#39;s it.&lt;br /&gt;
&lt;br /&gt;
Links for PHP on IIS 6 or 7:&lt;br /&gt;
&lt;span style=&quot;color: #434343; font-family: Verdana; font-size: 11px;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul class=&quot;square-bullets bump-left&quot; style=&quot;list-style-type: none; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 5px; padding-left: 0px; padding-right: 0px; padding-top: 5px;&quot;&gt;&lt;li style=&quot;-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: initial; background-image: url(http://i2.iis.net/themes/iis/images/bg-square-bullet.png?cdn_id={77d0100d}); background-position: 0% 6px; background-repeat: no-repeat; line-height: 1.3em; list-style-type: none; margin-bottom: 0px; margin-left: 12px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 13px; padding-right: 0px; padding-top: 0px;&quot;&gt;Use the&amp;nbsp;&lt;a href=&quot;http://go.microsoft.com/fwlink/?LinkId=123470&quot; style=&quot;color: #034af3; font-weight: normal; list-style-type: none; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;&quot;&gt;Microsoft SQL Server 2005 Driver for PHP&lt;/a&gt;&amp;nbsp;for fast and reliable connectivity to SQL&lt;/li&gt;
&lt;li style=&quot;-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: initial; background-image: url(http://i2.iis.net/themes/iis/images/bg-square-bullet.png?cdn_id={77d0100d}); background-position: 0% 6px; background-repeat: no-repeat; line-height: 1.3em; list-style-type: none; margin-bottom: 0px; margin-left: 12px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 13px; padding-right: 0px; padding-top: 0px;&quot;&gt;Learn how to&amp;nbsp;&lt;a href=&quot;http://learn.iis.net/page.aspx/375/setting-up-fastcgi-for-php/&quot; style=&quot;color: #034af3; font-weight: normal; list-style-type: none; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;&quot;&gt;Setup FastCGI&lt;/a&gt;&amp;nbsp;to run PHP apps on&amp;nbsp;&lt;a href=&quot;http://learn.iis.net/page.aspx/247/using-fastcgi-to-host-php-applications-on-iis-60/&quot; style=&quot;color: #034af3; font-weight: normal; list-style-type: none; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;&quot;&gt;IIS 6.0&lt;/a&gt;&amp;nbsp;or&amp;nbsp;&lt;a href=&quot;http://learn.iis.net/page.aspx/246/using-fastcgi-to-host-php-applications-on-iis-70/&quot; style=&quot;color: #034af3; font-weight: normal; list-style-type: none; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;&quot;&gt;IIS 7.0&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: initial; background-image: url(http://i2.iis.net/themes/iis/images/bg-square-bullet.png?cdn_id={77d0100d}); background-position: 0% 6px; background-repeat: no-repeat; line-height: 1.3em; list-style-type: none; margin-bottom: 0px; margin-left: 12px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 13px; padding-right: 0px; padding-top: 0px;&quot;&gt;Refer to the&amp;nbsp;&lt;a href=&quot;http://www.iis.net/ConfigReference/system.webServer/fastCgi&quot; style=&quot;color: #034af3; font-weight: normal; list-style-type: none; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;&quot;&gt;Configuration Reference&lt;/a&gt;&amp;nbsp;for FastCGI configuration examples.&lt;/li&gt;
&lt;li style=&quot;-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: initial; background-image: url(http://i2.iis.net/themes/iis/images/bg-square-bullet.png?cdn_id={77d0100d}); background-position: 0% 6px; background-repeat: no-repeat; line-height: 1.3em; list-style-type: none; margin-bottom: 0px; margin-left: 12px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 13px; padding-right: 0px; padding-top: 0px;&quot;&gt;Learn more about&amp;nbsp;&lt;a href=&quot;http://learn.iis.net/page.aspx/24/running-php-applications/&quot; style=&quot;color: #034af3; font-weight: normal; list-style-type: none; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; text-decoration: none;&quot;&gt;PHP Applications&lt;/a&gt;&amp;nbsp;on IIS&lt;/li&gt;
&lt;/ul&gt;</description><link>http://arcgisdeveloper.blogspot.com/2009/10/cool-web-app-client-for-svn-repository.html</link><author>noreply@blogger.com (arcgis_developer)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1801897191064504903.post-6576506655692465073</guid><pubDate>Sun, 18 Oct 2009 05:36:00 +0000</pubDate><atom:updated>2009-10-17T23:11:12.647-07:00</atom:updated><title>Internet, network, traffic analysis statistics for web apps in html, asp.net, flex, jsf etc.</title><description>Often we would like to analyze the flow of traffic to an application we build, so I thought I&#39;d put a small list of tools to use. Most of these tools are fairly easy to setup and there are lots of info on the web, so I won&#39;t go into a detailed discussion on how to use them.&lt;br /&gt;
&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red;&quot;&gt;The tools are divided into 2 groups:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Traffic analysis online services that require no installation by you. Does require you to embed some javascript code into your application to send signals to the monitoring service. Some services also have flex libraries (google analytics) that can be used directly from actionscript.&lt;/li&gt;
&lt;li&gt;Log parsing programs that require installation on your web server which will go through the logs created by IIS, apache, tomcat etc webservers to analyze traffic. Does not require any modification to the individual web apps. Will monitor all level of traffic (pages, resources, web apps, domains etc.) Will only monitor entire traffic to the configured servers.&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red;&quot;&gt;Some example tools:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;http://www.google.com/analytics/&quot;&gt;Google Analytics&lt;/a&gt;&amp;nbsp;: free, easy to setup.&amp;nbsp;Requires js code to be embedded in each of your pages that you want to monitor.&lt;br /&gt;
&lt;/li&gt;

&lt;ol&gt;&lt;li&gt;create google account&lt;/li&gt;
&lt;li&gt;register to use their service (free)&lt;/li&gt;
&lt;li&gt;create a new site profile&lt;/li&gt;

&lt;ol&gt;&lt;li&gt;can be created for both internet sites or intranet/secure sites as well&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;add the generated js code to your site (after all page elements have loaded, just before the close of the  tag)&lt;/li&gt;
&lt;li&gt;it takes up to 24 hours to register and show activation&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;&lt;a href=&quot;http://www.statcounter.com/&quot;&gt;StatCounter&lt;/a&gt;&amp;nbsp;: free easy to use. Requires js code to be embedded in each of your pages that you want to monitor.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.smartertools.com/SmarterStats/Features/Web-Log-Analytics-Website-Statistics.aspx&quot;&gt;SmarterStats&lt;/a&gt; from SmarterTools:&lt;/li&gt;

&lt;ol&gt;&lt;li&gt;requires installation&lt;/li&gt;
&lt;li&gt;commercial product but free for one web app&lt;/li&gt;
&lt;li&gt;works by parsing web server logs&lt;/li&gt;
&lt;li&gt;no modification to the web app or individual pages required&lt;/li&gt;
&lt;li&gt;web based sophisticated GUI for generating reports, charts, maps and advanced analysis&lt;/li&gt;
&lt;li&gt;my experience: it is really cool, easy to use, install and configure. but the only pro is that the free version is limited to one web app.&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;&lt;a href=&quot;http://awstats.sourceforge.net/&quot;&gt;AWStats &lt;/a&gt;&amp;nbsp;- free advanced statistics tool&lt;/li&gt;

&lt;ol&gt;&lt;li&gt;requires installation&lt;/li&gt;
&lt;li&gt;free GNU GPL&lt;/li&gt;
&lt;li&gt;for advanced users&amp;nbsp;&lt;/li&gt;
&lt;li&gt;complicated installation (requires perl, command line)&lt;/li&gt;
&lt;li&gt;complicated usage, command line (no UI)&amp;nbsp;&lt;/li&gt;

&lt;ol&gt;&lt;li&gt;run perl scripts from command line to generate reports/charts/maps etc. in html&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;log parser&lt;/li&gt;
&lt;/ol&gt;
&lt;li&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;&lt;span style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: red;&quot;&gt;Google search keywords:&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;* more like &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;awstats&lt;/span&gt;:&amp;nbsp;&lt;a href=&quot;http://www.google.com/search?hl=en&amp;amp;q=related:awstats.sourceforge.net/&quot;&gt;http://www.google.com/search?hl=en&amp;amp;q=related:awstats.sourceforge.net/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;ul&gt;&lt;li&gt;MRUnix &lt;a href=&quot;http://www.mrunix.net/webalizer/&quot;&gt;Webalizer&lt;/a&gt;&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.weblogexpert.com/&quot;&gt;WebLog Expert&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.weblogexpert.com/&quot;&gt;Analog &lt;/a&gt;&amp;nbsp;WWW logfile analysis&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://piwik.org/&quot;&gt;Piwik&lt;/a&gt; web analytics&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.sawmill.net/&quot;&gt;sawmill.net&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.webtrends.com/&quot;&gt;webtrends&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;visitors - &lt;a href=&quot;http://www.hping.org/visitors&quot;&gt;http://www.hping.org/visitors&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Logaholic&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;/div&gt;&lt;br /&gt;
* more tools like &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;statcounter&lt;/span&gt;:&amp;nbsp;&lt;a href=&quot;http://www.google.com/search?hl=en&amp;amp;q=related:www.statcounter.com/&quot;&gt;http://www.google.com/search?hl=en&amp;amp;q=related:www.statcounter.com/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;GoStats.com&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;http://www.sitemeter.com&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;www.freestatscounter.com&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;www.shinystat.com&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;extremetracking.com&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;easycounter.com&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;www.addfreestats.com&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;</description><link>http://arcgisdeveloper.blogspot.com/2009/10/internet-network-traffic-analysis.html</link><author>noreply@blogger.com (arcgis_developer)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1801897191064504903.post-6513621558917760579</guid><pubDate>Sun, 18 Oct 2009 04:41:00 +0000</pubDate><atom:updated>2009-10-17T21:53:25.729-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">arcgis server</category><category domain="http://www.blogger.com/atom/ns#">arcsde</category><category domain="http://www.blogger.com/atom/ns#">direct connect</category><category domain="http://www.blogger.com/atom/ns#">sde</category><title>Direct Connect to ArcGIS ArcSDE through a firewall</title><description>&lt;b&gt;Direct Connect&lt;/b&gt; (DC) is now the ESRI recommended connection method to connect to an ArcSDE database running on SQL Server 2000/2005/2008, Oracle etc databases. This is recommended for various reasons concerning efficiency, performance, memory and scalability. As opposed to &#39;&lt;span style=&quot;font-weight: bold;&quot;&gt;Application connect&lt;/span&gt;&#39;, direct connect does not spawn a process (&lt;span style=&quot;font-weight: bold;&quot;&gt;giosrvr&lt;/span&gt;) on the ArcSDE server and does not require the arcsde (&lt;span style=&quot;font-weight: bold;&quot;&gt;giomgr&lt;/span&gt;) services to be listening on designated ports for geodatabases. Not only that, but DC (running on SQL Server) requires only one port to communicate to all geodatabases inside ArcSDE - the sql server port, usually &lt;span style=&quot;font-weight: bold;&quot;&gt;1433&lt;/span&gt;. So if there&#39;s a firewall between the ArcSDE server and ArcGIS server/desktop, then opening port 1433 would suffice. One more great reason to use DC.&lt;br /&gt;
&lt;br /&gt;
To add even more, ArcGIS 9.3, 9.3.1 and 9.2 SP5 can backward connect to 9/9.1/9.2 running on most databases.The following rules are used to govern how connections between different versions of ArcGIS clients and geodatabases operate:&lt;br /&gt;
&lt;ul style=&quot;margin-top: 0in;&quot; type=&quot;disc&quot;&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 12.0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in;&quot;&gt;Current releases of ArcGIS clients can      connect to and use previous releases of the geodatabase. For example, an      ArcGIS 9.1 client can connect to and use an ArcGIS 9 geodatabase.&lt;/li&gt;
&lt;/ul&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 12.0pt;&quot;&gt;You should be aware of the following, though:&lt;br /&gt;
&lt;/div&gt;&lt;ul style=&quot;margin-top: 0in;&quot; type=&quot;disc&quot;&gt;&lt;ul style=&quot;margin-top: 0in;&quot; type=&quot;circle&quot;&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; mso-list: l0 level2 lfo1; tab-stops: list 1.0in;&quot;&gt;If the       ArcGIS client is using a direct connection to an ArcSDE 9.2 or prior       geodatabase, connections cannot be made from the newer client to the       older geodatabase. For example, an ArcGIS 9.2 client cannot make a direct       connection to an ArcSDE 9.1 geodatabase.&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; mso-list: l0 level2 lfo1; tab-stops: list 1.0in;&quot;&gt;Functionality       specific to the current release is not available when connecting to a       previous release of the geodatabase. For example, if you connect from an       ArcGIS 9.1 client to an ArcGIS 9 personal geodatabase, you will only have       access to functionality available at ArcGIS 9. &lt;/li&gt;
&lt;/ul&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 12.0pt; mso-list: l0 level1 lfo1; tab-stops: list .5in;&quot;&gt;Previous releases of ArcGIS clients      cannot connect to and use geodatabases created with later versions of      ArcGIS. For example, an ArcGIS 9.1 client cannot connect to and use an      ArcGIS 9.2 geodatabase.&lt;/li&gt;
&lt;/ul&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 12.0pt;&quot;&gt;The exceptions to this rule are as follows:&lt;br /&gt;
&lt;/div&gt;&lt;ul style=&quot;margin-top: 0in;&quot; type=&quot;disc&quot;&gt;&lt;ul style=&quot;margin-top: 0in;&quot; type=&quot;circle&quot;&gt;&lt;li class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; mso-list: l0 level2 lfo1; tab-stops: list 1.0in;&quot;&gt;ArcGIS       9.2 Service Pack 5 (SP5) can open and edit a 9.3 geodatabase. Be aware,       though, that functionality specific to the current geodatabase release is       not available when connecting from a previous release of the client       application.&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: .0001pt; margin-bottom: 0in; mso-list: l0 level2 lfo1; tab-stops: list 1.0in;&quot;&gt;ArcGIS 9       can open and edit a 9.1 geodatabase.&lt;/li&gt;
&lt;/ul&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: arial; font-size: 13px;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: arial; font-size: 13px;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: arial; font-size: 13px;&quot;&gt;&lt;table border=&quot;1&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-bottom-style: none; border-collapse: collapse; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 2.25pt; border-left-color: rgb(79, 129, 189); border-left-style: solid; border-left-width: 1pt; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: rgb(79, 129, 189); border-top-style: solid; border-top-width: 1pt; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Client release&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 2.25pt; border-left-color: initial; border-left-style: none; border-left-width: initial; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: rgb(79, 129, 189); border-top-style: solid; border-top-width: 1pt; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Personal geodatabase release&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 2.25pt; border-left-color: initial; border-left-style: none; border-left-width: initial; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: rgb(79, 129, 189); border-top-style: solid; border-top-width: 1pt; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;File geodatabase release&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 2.25pt; border-left-color: initial; border-left-style: none; border-left-width: initial; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: rgb(79, 129, 189); border-top-style: solid; border-top-width: 1pt; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;ArcSDE geodatabase using a direct connection&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 2.25pt; border-left-color: initial; border-left-style: none; border-left-width: initial; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: rgb(79, 129, 189); border-top-style: solid; border-top-width: 1pt; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;ArcSDE geodatabase using an ArcSDE service connection&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: #d3dfee; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: rgb(79, 129, 189); border-left-style: solid; border-left-width: 1pt; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;8.3&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: #d3dfee; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: initial; border-left-style: none; border-left-width: initial; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;8.3&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: #d3dfee; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: initial; border-left-style: none; border-left-width: initial; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;NA&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: #d3dfee; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: initial; border-left-style: none; border-left-width: initial; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;8.3&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: #d3dfee; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: initial; border-left-style: none; border-left-width: initial; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;8.3&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: rgb(79, 129, 189); border-left-style: solid; border-left-width: 1pt; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;9&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: initial; border-left-style: none; border-left-width: initial; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;9, 9.1&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: initial; border-left-style: none; border-left-width: initial; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;NA&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: initial; border-left-style: none; border-left-width: initial; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;9&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: initial; border-left-style: none; border-left-width: initial; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;9, 9.1&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: #d3dfee; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: rgb(79, 129, 189); border-left-style: solid; border-left-width: 1pt; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;9.1&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: #d3dfee; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: initial; border-left-style: none; border-left-width: initial; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;9, 9.1&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: #d3dfee; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: initial; border-left-style: none; border-left-width: initial; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;NA&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: #d3dfee; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: initial; border-left-style: none; border-left-width: initial; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;9.1&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: #d3dfee; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: initial; border-left-style: none; border-left-width: initial; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;9, 9.1&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: rgb(79, 129, 189); border-left-style: solid; border-left-width: 1pt; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;9.2&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: initial; border-left-style: none; border-left-width: initial; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;9, 9.1, 9.2&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: initial; border-left-style: none; border-left-width: initial; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;9.2&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: initial; border-left-style: none; border-left-width: initial; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;9.2&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: initial; border-left-style: none; border-left-width: initial; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;9, 9.1, 9.2&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: #d3dfee; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: rgb(79, 129, 189); border-left-style: solid; border-left-width: 1pt; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;9.2 SP5&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: #d3dfee; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: initial; border-left-style: none; border-left-width: initial; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;9, 9.1, 9.2, 9.3&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: #d3dfee; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: initial; border-left-style: none; border-left-width: initial; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;9.2, 9.3&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: #d3dfee; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: initial; border-left-style: none; border-left-width: initial; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;9.2, 9.3&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: #d3dfee; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: initial; border-left-style: none; border-left-width: initial; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;9, 9.1, 9.2, 9.3&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: rgb(79, 129, 189); border-left-style: solid; border-left-width: 1pt; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;9.3&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: initial; border-left-style: none; border-left-width: initial; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;9, 9.1, 9.2, 9.3, 9.3.1&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: initial; border-left-style: none; border-left-width: initial; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;9.2, 9.3, 9.3.1&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: initial; border-left-style: none; border-left-width: initial; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;9.3, 9.3.1&lt;br /&gt;
If client has pre-9.3 geodatabase direct connect files* installed, can connect to 9, 9.1, and 9.2&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: initial; border-left-style: none; border-left-width: initial; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;9, 9.1, 9.2, 9.3, 9.3.1&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: #d3dfee; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: rgb(79, 129, 189); border-left-style: solid; border-left-width: 1pt; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;9.3.1&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: #d3dfee; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: initial; border-left-style: none; border-left-width: initial; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;9, 9.1, 9.2, 9.3, 9.3.1&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: #d3dfee; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: initial; border-left-style: none; border-left-width: initial; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;9.2, 9.3, 9.3.1&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: #d3dfee; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: initial; border-left-style: none; border-left-width: initial; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;9.3, 9.3.1&lt;br /&gt;
If client has pre-9.3 geodatabase direct connect files* installed, can connect to 9, 9.1, and 9.2&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;td style=&quot;-webkit-background-clip: initial; -webkit-background-origin: initial; background-attachment: initial; background-color: #d3dfee; background-image: initial; background-position: initial initial; background-repeat: initial; border-bottom-color: rgb(79, 129, 189); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: initial; border-left-style: none; border-left-width: initial; border-right-color: rgb(79, 129, 189); border-right-style: solid; border-right-width: 1pt; border-top-color: initial; border-top-style: none; border-top-width: initial; padding-bottom: 0in; padding-left: 5.4pt; padding-right: 5.4pt; padding-top: 0in;&quot; valign=&quot;top&quot;&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;9, 9.1, 9.2, 9.3, 9.3.1&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: arial; font-size: 13px;&quot;&gt;Sources:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: arial; font-size: 13px;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: arial; font-size: 13px;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: arial; font-size: 13px;&quot;&gt;&lt;ul style=&quot;margin-top: 0in;&quot; type=&quot;disc&quot;&gt;&lt;li class=&quot;MsoNormal&quot;&gt;Direct connections to ArcSDE geodatabases – Inside the geodb – the geodb dev blog&lt;br /&gt;
&lt;a href=&quot;http://blogs.esri.com/Dev/blogs/geodatabase/archive/2008/07/09/Direct-connections-to-ArcSDE-geodatabases.aspx&quot;&gt;http://blogs.esri.com/Dev/blogs/geodatabase/archive/2008/07/09/Direct-connections-to-ArcSDE-geodatabases.aspx&lt;/a&gt;&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot;&gt;Compatibility between clients and geodatabases&lt;br /&gt;
&lt;a href=&quot;http://webhelp.esri.com/arcgisdesktop/9.3/index.cfm?TopicName=Compatibility_between_clients_and_geodatabases&quot;&gt;http://webhelp.esri.com/arcgisdesktop/9.3/index.cfm?TopicName=Compatibility_between_clients_and_geodatabases&lt;/a&gt;&lt;/li&gt;
&lt;li class=&quot;MsoNormal&quot;&gt;Product Compatibility Matrix for Clients and Servers of ArcSDE technology in ArcGIS Server&amp;nbsp;&lt;span style=&quot;font-size: 11px; line-height: 12px;&quot;&gt;&lt;a href=&quot;http://wikis.esri.com/wiki/display/SupportCenter/Product+Compatibility+Matrix?CFID=22846180&amp;amp;CFTOKEN=40614129&amp;amp;jsessionid=c330aa152f7d284e7547&quot;&gt;http://wikis.esri.com/wiki/display/SupportCenter/Product+Compatibility+Matrix?CFID=22846180&amp;amp;CFTOKEN=40614129&amp;amp;jsessionid=c330aa152f7d284e7547&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/span&gt;</description><link>http://arcgisdeveloper.blogspot.com/2009/10/direct-connect-to-arcgis-arcsde-through.html</link><author>noreply@blogger.com (arcgis_developer)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1801897191064504903.post-8918145173234687878</guid><pubDate>Sat, 17 Oct 2009 14:47:00 +0000</pubDate><atom:updated>2009-10-17T07:47:13.041-07:00</atom:updated><title>How to create a floating window (dialog, panel) in the ESRI Sample flexviewer?</title><description>How to create a floating window (dialog, panel) in the flexviewer?&lt;br /&gt;
&lt;br /&gt;
There are many scenarios when you&#39;d like to have a new window open from an action triggered from inside a widget or the InfoPopup. This is one way to do it. &lt;br /&gt;
1) Create you custom component, e.g. TitleWindow, Panel, or create a draggable panel&lt;br /&gt;
2) Add properties/methods to that component&lt;br /&gt;
3) Use PopupManager to create/re-use that component to show information from the widget&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;code&gt;
//Widget Code
private var myPopup:MyCustomComponent=null;

private function onButtonClick(infoData:Object):void {
 if (this.myPopup) {
    PopupManager.centerPopup(myPopup);
    PopupManager.bringToFront(myPopup); 
 } else {
    this.myPopup = new MyCustomComponent();
    PopupManager.addPopup(myPopup, this, false);
    PopupManager.centerPopup(myPopup);
    PopupManager.bringToFront(myPopup); 
 }
 //change properties of myPopup
 myPopup.title = &quot;Details for &quot; + infoData.title;
 myPopup.featureId = infoData.featureId;
 myPopup.fetchFeatureDetails();
}
&lt;/code&gt;&lt;/pre&gt;</description><link>http://arcgisdeveloper.blogspot.com/2009/10/how-to-create-floating-window-dialog.html</link><author>noreply@blogger.com (arcgis_developer)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1801897191064504903.post-2370997161774743784</guid><pubDate>Sun, 11 Oct 2009 23:58:00 +0000</pubDate><atom:updated>2009-10-11T17:04:10.886-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">asp.net</category><category domain="http://www.blogger.com/atom/ns#">httphandler</category><category domain="http://www.blogger.com/atom/ns#">iis</category><title>How to prevent certain file types from being served by IIS</title><description>&lt;style&gt;
 &lt;!--  /* Font Definitions */  @font-face  {font-family:&quot;Cambria Math&quot;;  panose-1:2 4 5 3 5 4 6 3 2 4;  mso-font-charset:0;  mso-generic-font-family:roman;  mso-font-pitch:variable;  mso-font-signature:-1610611985 1107304683 0 0 159 0;} @font-face  {font-family:Calibri;  panose-1:2 15 5 2 2 2 4 3 2 4;  mso-font-charset:0;  mso-generic-font-family:swiss;  mso-font-pitch:variable;  mso-font-signature:-1610611985 1073750139 0 0 159 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal  {mso-style-unhide:no;  mso-style-qformat:yes;  mso-style-parent:&quot;&quot;;  margin-top:0in;  margin-right:0in;  margin-bottom:10.0pt;  margin-left:0in;  line-height:115%;  mso-pagination:widow-orphan;  font-size:11.0pt;  font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;  mso-fareast-font-family:Calibri;  mso-bidi-font-family:&quot;Times New Roman&quot;;} p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph  {mso-style-priority:34;  mso-style-unhide:no;  mso-style-qformat:yes;  margin-top:0in;  margin-right:0in;  margin-bottom:10.0pt;  margin-left:.5in;  mso-add-space:auto;  line-height:115%;  mso-pagination:widow-orphan;  font-size:11.0pt;  font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;  mso-fareast-font-family:Calibri;  mso-bidi-font-family:&quot;Times New Roman&quot;;} p.MsoListParagraphCxSpFirst, li.MsoListParagraphCxSpFirst, div.MsoListParagraphCxSpFirst  {mso-style-priority:34;  mso-style-unhide:no;  mso-style-qformat:yes;  mso-style-type:export-only;  margin-top:0in;  margin-right:0in;  margin-bottom:0in;  margin-left:.5in;  margin-bottom:.0001pt;  mso-add-space:auto;  line-height:115%;  mso-pagination:widow-orphan;  font-size:11.0pt;  font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;  mso-fareast-font-family:Calibri;  mso-bidi-font-family:&quot;Times New Roman&quot;;} p.MsoListParagraphCxSpMiddle, li.MsoListParagraphCxSpMiddle, div.MsoListParagraphCxSpMiddle  {mso-style-priority:34;  mso-style-unhide:no;  mso-style-qformat:yes;  mso-style-type:export-only;  margin-top:0in;  margin-right:0in;  margin-bottom:0in;  margin-left:.5in;  margin-bottom:.0001pt;  mso-add-space:auto;  line-height:115%;  mso-pagination:widow-orphan;  font-size:11.0pt;  font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;  mso-fareast-font-family:Calibri;  mso-bidi-font-family:&quot;Times New Roman&quot;;} p.MsoListParagraphCxSpLast, li.MsoListParagraphCxSpLast, div.MsoListParagraphCxSpLast  {mso-style-priority:34;  mso-style-unhide:no;  mso-style-qformat:yes;  mso-style-type:export-only;  margin-top:0in;  margin-right:0in;  margin-bottom:10.0pt;  margin-left:.5in;  mso-add-space:auto;  line-height:115%;  mso-pagination:widow-orphan;  font-size:11.0pt;  font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;  mso-fareast-font-family:Calibri;  mso-bidi-font-family:&quot;Times New Roman&quot;;} span.searchterm  {mso-style-name:searchterm;  mso-style-unhide:no;} .MsoChpDefault  {mso-style-type:export-only;  mso-default-props:yes;  font-size:10.0pt;  mso-ansi-font-size:10.0pt;  mso-bidi-font-size:10.0pt;  mso-ascii-font-family:Calibri;  mso-fareast-font-family:Calibri;  mso-hansi-font-family:Calibri;} @page Section1  {size:8.5in 11.0in;  margin:1.0in 1.0in 1.0in 1.0in;  mso-header-margin:.5in;  mso-footer-margin:.5in;  mso-paper-source:0;} div.Section1  {page:Section1;}  /* List Definitions */  @list l0  {mso-list-id:1855414455;  mso-list-type:hybrid;  mso-list-template-ids:1576799164 67698705 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l0:level1  {mso-level-text:&quot;%1\)&quot;;  mso-level-tab-stop:none;  mso-level-number-position:left;  text-indent:-.25in;} ol  {margin-bottom:0in;} ul  {margin-bottom:0in;} --&gt; 
&lt;/style&gt;&lt;style&gt;
 &lt;!--  /* Font Definitions */  @font-face  {font-family:&quot;Cambria Math&quot;;  panose-1:2 4 5 3 5 4 6 3 2 4;  mso-font-charset:0;  mso-generic-font-family:roman;  mso-font-pitch:variable;  mso-font-signature:-1610611985 1107304683 0 0 159 0;} @font-face  {font-family:Calibri;  panose-1:2 15 5 2 2 2 4 3 2 4;  mso-font-charset:0;  mso-generic-font-family:swiss;  mso-font-pitch:variable;  mso-font-signature:-1610611985 1073750139 0 0 159 0;}  /* Style Definitions */  p.MsoNormal, li.MsoNormal, div.MsoNormal  {mso-style-unhide:no;  mso-style-qformat:yes;  mso-style-parent:&quot;&quot;;  margin-top:0in;  margin-right:0in;  margin-bottom:10.0pt;  margin-left:0in;  line-height:115%;  mso-pagination:widow-orphan;  font-size:11.0pt;  font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;  mso-fareast-font-family:Calibri;  mso-bidi-font-family:&quot;Times New Roman&quot;;} p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph  {mso-style-priority:34;  mso-style-unhide:no;  mso-style-qformat:yes;  margin-top:0in;  margin-right:0in;  margin-bottom:10.0pt;  margin-left:.5in;  mso-add-space:auto;  line-height:115%;  mso-pagination:widow-orphan;  font-size:11.0pt;  font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;  mso-fareast-font-family:Calibri;  mso-bidi-font-family:&quot;Times New Roman&quot;;} p.MsoListParagraphCxSpFirst, li.MsoListParagraphCxSpFirst, div.MsoListParagraphCxSpFirst  {mso-style-priority:34;  mso-style-unhide:no;  mso-style-qformat:yes;  mso-style-type:export-only;  margin-top:0in;  margin-right:0in;  margin-bottom:0in;  margin-left:.5in;  margin-bottom:.0001pt;  mso-add-space:auto;  line-height:115%;  mso-pagination:widow-orphan;  font-size:11.0pt;  font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;  mso-fareast-font-family:Calibri;  mso-bidi-font-family:&quot;Times New Roman&quot;;} p.MsoListParagraphCxSpMiddle, li.MsoListParagraphCxSpMiddle, div.MsoListParagraphCxSpMiddle  {mso-style-priority:34;  mso-style-unhide:no;  mso-style-qformat:yes;  mso-style-type:export-only;  margin-top:0in;  margin-right:0in;  margin-bottom:0in;  margin-left:.5in;  margin-bottom:.0001pt;  mso-add-space:auto;  line-height:115%;  mso-pagination:widow-orphan;  font-size:11.0pt;  font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;  mso-fareast-font-family:Calibri;  mso-bidi-font-family:&quot;Times New Roman&quot;;} p.MsoListParagraphCxSpLast, li.MsoListParagraphCxSpLast, div.MsoListParagraphCxSpLast  {mso-style-priority:34;  mso-style-unhide:no;  mso-style-qformat:yes;  mso-style-type:export-only;  margin-top:0in;  margin-right:0in;  margin-bottom:10.0pt;  margin-left:.5in;  mso-add-space:auto;  line-height:115%;  mso-pagination:widow-orphan;  font-size:11.0pt;  font-family:&quot;Calibri&quot;,&quot;sans-serif&quot;;  mso-fareast-font-family:Calibri;  mso-bidi-font-family:&quot;Times New Roman&quot;;} span.searchterm  {mso-style-name:searchterm;  mso-style-unhide:no;} .MsoChpDefault  {mso-style-type:export-only;  mso-default-props:yes;  font-size:10.0pt;  mso-ansi-font-size:10.0pt;  mso-bidi-font-size:10.0pt;  mso-ascii-font-family:Calibri;  mso-fareast-font-family:Calibri;  mso-hansi-font-family:Calibri;} @page Section1  {size:8.5in 11.0in;  margin:1.0in 1.0in 1.0in 1.0in;  mso-header-margin:.5in;  mso-footer-margin:.5in;  mso-paper-source:0;} div.Section1  {page:Section1;}  /* List Definitions */  @list l0  {mso-list-id:1855414455;  mso-list-type:hybrid;  mso-list-template-ids:1576799164 67698705 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;} @list l0:level1  {mso-level-text:&quot;%1\)&quot;;  mso-level-tab-stop:none;  mso-level-number-position:left;  text-indent:-.25in;} @list l0:level2  {mso-level-number-format:alpha-lower;  mso-level-tab-stop:none;  mso-level-number-position:left;  text-indent:-.25in;} ol  {margin-bottom:0in;} ul  {margin-bottom:0in;} --&gt; 
&lt;/style&gt;  &lt;br /&gt;
&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;How to prevent certain types of files from being served by the server (IIS)?&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoListParagraph&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt; text-indent: -0.25in;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;1)&lt;span style=&quot;font-family: &#39;Times New Roman&#39;; font-size: 7pt; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;In web.config, under the httpHandlers section (which is under system.web section, add the below:&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin: 0in 0in 0.0001pt 0.25in;&quot;&gt;&lt;span style=&quot;color: blue; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #a31515; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;add&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: red; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;verb&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;&quot;&lt;span style=&quot;color: blue;&quot;&gt;*&lt;/span&gt;&quot;&lt;span style=&quot;color: blue;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;path&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color: blue;&quot;&gt;*.blah&lt;/span&gt;&quot;&lt;span style=&quot;color: blue;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: red;&quot;&gt;type&lt;/span&gt;&lt;span style=&quot;color: blue;&quot;&gt;=&lt;/span&gt;&quot;&lt;span style=&quot;color: blue;&quot;&gt;System.Web.HttpForbiddenHandler&lt;/span&gt;&quot;&lt;span style=&quot;color: blue;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoListParagraphCxSpFirst&quot; style=&quot;line-height: normal; margin-bottom: 0.0001pt; text-indent: -0.25in;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;2)&lt;span style=&quot;font-family: &#39;Times New Roman&#39;; font-size: 7pt; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Using the IIS managment console, add a new application extension mapping for &lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;*.blah&lt;/span&gt;&lt;/b&gt; &lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoListParagraphCxSpMiddle&quot; style=&quot;line-height: normal; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;a.&lt;span style=&quot;font-family: &#39;Times New Roman&#39;; font-size: 7pt; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Go to IIS control panel&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoListParagraphCxSpMiddle&quot; style=&quot;line-height: normal; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;b.&lt;span style=&quot;font-family: &#39;Times New Roman&#39;; font-size: 7pt; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Expand the webiste, go to the desired web app using the IIS mngment console, e.g. it may be located at &lt;b style=&quot;color: #3333ff;&quot;&gt;c:\inetpub\wwwroot\MyWebApp1&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoListParagraphCxSpMiddle&quot; style=&quot;line-height: normal; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;c.&lt;span style=&quot;font-family: &#39;Times New Roman&#39;; font-size: 7pt; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Go to the properties of that webiste&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoListParagraphCxSpMiddle&quot; style=&quot;line-height: normal; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;d.&lt;span style=&quot;font-family: &#39;Times New Roman&#39;; font-size: 7pt; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Go to the &quot;Directory&quot; tab&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoListParagraphCxSpMiddle&quot; style=&quot;line-height: normal; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;e.&lt;span style=&quot;font-family: &#39;Times New Roman&#39;; font-size: 7pt; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Click the &quot;configuration&quot; button, this should open up a new dialog window&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoListParagraphCxSpMiddle&quot; style=&quot;line-height: normal; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;f.&lt;span style=&quot;font-family: &#39;Times New Roman&#39;; font-size: 7pt; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Copy the executable path (dll) for the .aspx mapping, usually located at:&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: blue; font-family: &#39;Courier New&#39;; font-size: 10pt;&quot;&gt;c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_isapi.dll&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoListParagraphCxSpMiddle&quot; style=&quot;line-height: normal; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;g.&lt;span style=&quot;font-family: &#39;Times New Roman&#39;; font-size: 7pt; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Click on &quot;add&quot; button to add new type of mapping for our file type, e.g. *.blah&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoListParagraphCxSpMiddle&quot; style=&quot;line-height: normal; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;h.&lt;span style=&quot;font-family: &#39;Times New Roman&#39;; font-size: 7pt; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Paste the dll location for the aspnet engine(handles aspx pages)&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoListParagraphCxSpMiddle&quot; style=&quot;line-height: normal; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;i.&lt;span style=&quot;font-family: &#39;Times New Roman&#39;; font-size: 7pt; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;type &quot;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;.blah&lt;/span&gt;&lt;/b&gt;&quot; (without the quotes) in the extension text area (this can be replace with any file extension eg: js/html/PDF)&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoListParagraphCxSpMiddle&quot; style=&quot;line-height: normal; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;j.&lt;span style=&quot;font-family: &#39;Times New Roman&#39;; font-size: 7pt; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;while still in the &quot;add/edit application extension mapping&quot; window click the &quot;limit to&quot; radio button and type &quot;GET,HEAD,POST,DEBUG&quot;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;MsoListParagraphCxSpLast&quot; style=&quot;line-height: normal; margin: 0in 0in 0.0001pt 1in; text-indent: -0.25in;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;k.&lt;span style=&quot;font-family: &#39;Times New Roman&#39;; font-size: 7pt; font-style: normal; font-variant: normal; font-weight: normal; line-height: normal;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;ensure that the &quot;script engine&quot; radio button is selected but not the &quot;verify the file exists&quot; radio button&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUwSEgNbIdInJ3EJM6Iz7o8DjiAaadZobDIeSf5f0SSEA_9GN_QJKXVGGNuooJy-FT6VAKNKqmoXlqLC7FedioWRXn-NVsqWqfRmOMyc5ekCTVURJSQCAVqanGW3XpPF0saaxr5qol1_4/s1600-h/iis_extension_mapping_blah.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUwSEgNbIdInJ3EJM6Iz7o8DjiAaadZobDIeSf5f0SSEA_9GN_QJKXVGGNuooJy-FT6VAKNKqmoXlqLC7FedioWRXn-NVsqWqfRmOMyc5ekCTVURJSQCAVqanGW3XpPF0saaxr5qol1_4/s400/iis_extension_mapping_blah.jpg&quot; /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;/div&gt;</description><link>http://arcgisdeveloper.blogspot.com/2009/10/how-to-prevent-certain-file-types-from.html</link><author>noreply@blogger.com (arcgis_developer)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUwSEgNbIdInJ3EJM6Iz7o8DjiAaadZobDIeSf5f0SSEA_9GN_QJKXVGGNuooJy-FT6VAKNKqmoXlqLC7FedioWRXn-NVsqWqfRmOMyc5ekCTVURJSQCAVqanGW3XpPF0saaxr5qol1_4/s72-c/iis_extension_mapping_blah.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1801897191064504903.post-8638490887620224655</guid><pubDate>Sun, 11 Oct 2009 18:15:00 +0000</pubDate><atom:updated>2009-10-11T11:15:20.615-07:00</atom:updated><title>Test blog by email</title><description>&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 15px; &quot;&gt;&lt;table class=&quot;article &quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; border=&quot;0&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class=&quot;image&quot; valign=&quot;top&quot; rowspan=&quot;2&quot; style=&quot;width: 140px; padding-right: 10px; text-align: center; font-size: 17px; font-weight: bold; padding-bottom: 20px; &quot;&gt; &lt;a href=&quot;http://dealnews.com/lw/artclick.html?2,323612,1049508&quot; style=&quot;color: rgb(48, 48, 154); text-decoration: none; &quot;&gt;&lt;img src=&quot;http://images.dealnews.com/products/images/700000/745784-large&quot; width=&quot;69&quot; height=&quot;125&quot; alt=&quot;Polk Audio Monitor 70 Floor-Standing Speaker for $170 + free shipping&quot; title=&quot;Polk Audio Monitor 70 Floor-Standing Speaker for $170 + free shipping&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/td&gt; &lt;td valign=&quot;top&quot; colspan=&quot;2&quot;&gt;&lt;h3 style=&quot;margin-top: 0px; padding-top: 0px; margin-bottom: 6px; font-size: 15px; margin-right: 0px; margin-left: 0px; &quot;&gt;&lt;span class=&quot;new&quot; style=&quot;color: rgb(219, 18, 46); &quot;&gt;New:&lt;/span&gt; &lt;a href=&quot;http://dealnews.com/Polk-Audio-Monitor-70-Floor-Standing-Speaker-for-170-free-shipping/323612.html&quot; style=&quot;color: rgb(48, 48, 154); text-decoration: none; &quot;&gt;Polk Audio Monitor 70 Floor-Standing Speaker for &lt;span class=&quot;price&quot; style=&quot;color: rgb(216, 106, 70); &quot;&gt;$170&lt;/span&gt; + free shipping&lt;/a&gt;&lt;/h3&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;copy&quot; valign=&quot;top&quot; style=&quot;border-bottom-width: 1px; border-bottom-style: solid; border-bottom-color: rgb(181, 181, 181); padding-right: 20px; min-width: 613px; padding-bottom: 20px; &quot;&gt;&lt;div class=&quot;art body&quot;&gt; For its newsletter subscribers only, &lt;a href=&quot;http://newegg.com&quot;&gt;newegg.com&lt;/a&gt; offers the &lt;a href=&quot;http://dealnews.com/lw/artclick.html?2,323612,1049508&quot; style=&quot;color: rgb(48, 48, 154); &quot;&gt;Polk Audio Monitor 70 Floor-Standing Loudspeaker&lt;/a&gt; in Black for $229.99. Coupon code &amp;quot;EMCMLLX24&amp;quot; cuts it to &lt;strong&gt;$169.99&lt;/strong&gt;. With &lt;strong&gt;free shipping&lt;/strong&gt;, that&amp;#39;s $9 under our September mention and the lowest total price we could find by $58. It has two 6-1/2&amp;quot; subwoofers, two 6-1/2&amp;quot; midwoofers, and a 1&amp;quot; tweeter. Deal ends October 15.&lt;/div&gt; &lt;div class=&quot;info&quot; style=&quot;margin-top: 8px; font-size: 12px; &quot;&gt;Posted 1 hr 13 min ago &lt;a title=&quot;More Speakers&quot; href=&quot;http://dealnews.com/categories/Electronics/Audio-Components/Speakers/147.html&quot; style=&quot;color: rgb(48, 48, 154); padding-left: 18px; text-decoration: none; &quot;&gt;&lt;span class=&quot;sprite carat&quot; style=&quot;display: inline-block; background-image: url(http://images.dealnews.com/dealnews/sprites/std_2.png); background-repeat: no-repeat; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; vertical-align: middle; width: 16px; height: 20px; text-decoration: none; background-position: 0px -40px; &quot;&gt;&lt;/span&gt;More Speakers&lt;/a&gt; &lt;a title=&quot;Newegg Coupons&quot; href=&quot;http://dealnews.com/Newegg-Coupons.html&quot; style=&quot;color: rgb(48, 48, 154); padding-left: 18px; text-decoration: none; &quot;&gt;&lt;span class=&quot;sprite carat&quot; style=&quot;display: inline-block; background-image: url(http://images.dealnews.com/dealnews/sprites/std_2.png); background-repeat: no-repeat; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: transparent; vertical-align: middle; width: 16px; height: 20px; text-decoration: none; background-position: 0px -40px; &quot;&gt;&lt;/span&gt;Newegg Coupons&lt;/a&gt;&lt;/div&gt; &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/span&gt; </description><link>http://arcgisdeveloper.blogspot.com/2009/10/test-blog-by-email.html</link><author>noreply@blogger.com (arcgis_developer)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1801897191064504903.post-8241928217848117236</guid><pubDate>Sun, 11 Oct 2009 07:25:00 +0000</pubDate><atom:updated>2009-10-11T09:14:18.860-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">asp.net</category><category domain="http://www.blogger.com/atom/ns#">authentication</category><category domain="http://www.blogger.com/atom/ns#">httphandler</category><category domain="http://www.blogger.com/atom/ns#">iis</category><category domain="http://www.blogger.com/atom/ns#">iis6</category><category domain="http://www.blogger.com/atom/ns#">iis7</category><title>asp.net - How to add an HttpHandler to replace a folder or page</title><description>Lets say you wanted to replace the static config.xml file from a certain folder in your web app with some dynamically served data. For example, custom config xml based on the logged in user&#39;s role. This could be done easily with asp.net&#39;s httphandlers.&lt;br /&gt;
Steps:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;create a HttpHandler to serve your data based on who is logged in,&lt;br /&gt;
For example you can use:&lt;br /&gt;
&lt;span style=&quot;font-family: -webkit-monospace; font-size: 13px; white-space: nowrap;&quot;&gt;&lt;a href=&quot;http://www.java2s.com/Code/ASP/Session-Cookie/ContextUserIdentityIsAuthenticated.htm&quot;&gt;Context.User.Identity.IsAuthenticated&lt;/a&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;or &lt;/span&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.web.security.membership.getuser.aspx&quot;&gt;Membership.GetUser()&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Add that httpHandler to the web.config file and specify the&lt;span style=&quot;color: #444444; font-family: Verdana; font-size: 11px; line-height: 17px;&quot;&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre style=&quot;background-color: #fbfbfb; border-bottom-color: rgb(206, 206, 206); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(206, 206, 206); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(206, 206, 206); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(206, 206, 206); border-top-style: solid; border-top-width: 1px; font-family: monospace; font-size: 12px; min-height: 40px; overflow-x: auto; overflow-y: auto; padding-bottom: 5px; padding-left: 5px; padding-right: 5px; padding-top: 5px; width: 650px;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: maroon;&quot;&gt;add&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;verb&lt;/span&gt;=&lt;span style=&quot;color: blue;&quot;&gt;&quot;*&quot;&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;path&lt;/span&gt;=&lt;span style=&quot;color: blue;&quot;&gt;&quot;MyWebApp1/config.xml&quot;&lt;/span&gt; &lt;span style=&quot;color: red;&quot;&gt;type&lt;/span&gt;=&lt;span style=&quot;color: blue;&quot;&gt;&quot;MyNS.ConfigXmlHandler&lt;span style=&quot;color: #444444;&quot;&gt;&lt;span style=&quot;color: blue;&quot;&gt;&quot;&lt;/span&gt; &lt;span style=&quot;color: blue;&quot;&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Modify the IIS settings for your webapp (here it is MyWebApp1), usually your webapp is located in c:\inetpub\wwwroot\MyWebApp1. Using the IIS management console, find the node for MyWebApp1 and modify its properties. Add an application extension mapping for &#39;.xml&#39;, so that the asp.net engine processes it. This way the request for xml files will be routed via the aspnet dll. &lt;/li&gt;
&lt;li&gt;asdf &lt;/li&gt;
&lt;li&gt;Caveat: Step 1 would be same for all IIS versions, but the other steps would be different based on which IIS you use, basically different from IIS5/6 with IIS7. &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/bb515343.aspx&quot;&gt;Configure HttpHandlers in IIS&lt;/a&gt;,&amp;nbsp;&amp;nbsp;&lt;a href=&quot;http://stackoverflow.com/questions/716049/what-is-the-difference-between-classic-and-integrated-in-iis7&quot;&gt;Difference between IIS 7 integrated and classic mode&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;div&gt;Resources:&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Good basic explanation of HttpHandlers and HttpModules for asp.net: &lt;a href=&quot;http://www.c-sharpcorner.com/UploadFile/shivprasadk/1234612222008053711AM/12346.aspx&quot;&gt;Link&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;How to register HttpHandler: &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/46c5ddfy.aspx&quot;&gt;Link&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;What is the difference between IIS7 classic mode vs integrated mode. (classs and defaultAppPool) : &lt;a href=&quot;http://stackoverflow.com/questions/759304/what-is-the-difference-between-defaultapppool-and-classic-net-apppool-in-iis7&quot;&gt;Link&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://stackoverflow.com/questions/716049/what-is-the-difference-between-classic-and-integrated-in-iis7&quot;&gt;Difference between IIS 7 integrated and classic mode&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</description><link>http://arcgisdeveloper.blogspot.com/2009/10/aspnet-how-to-add-httphandler-to.html</link><author>noreply@blogger.com (arcgis_developer)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1801897191064504903.post-6086647795909112091</guid><pubDate>Sun, 11 Oct 2009 07:25:00 +0000</pubDate><atom:updated>2009-10-11T09:14:50.841-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">asp.net</category><category domain="http://www.blogger.com/atom/ns#">iis</category><category domain="http://www.blogger.com/atom/ns#">iis6</category><category domain="http://www.blogger.com/atom/ns#">iis7</category><title>An Intro to IIS 7 - classic mode and integrated mode</title><description>&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://mvolo.com/blogs/serverside/archive/2007/12/08/IIS-7.0-Breaking-Changes-ASP.NET-2.0-applications-Integrated-mode.aspx&quot;&gt;Breaking Changes for ASP.NET 2.0 applications running in Integrated mode on IIS 7.0&lt;/a&gt;&lt;br /&gt;
This blogpost from the product manager/lead architect of IIS7 talks about&amp;nbsp;&lt;/li&gt;

&lt;ul&gt;&lt;li&gt;which mode to use,&amp;nbsp;&lt;/li&gt;
&lt;li&gt;how to migrate apps created for previous IIS versions to the new IIS7 integrated architecture,&amp;nbsp;&lt;/li&gt;
&lt;li&gt;older apps can be used on IIS7 with no modifications by using IIS 7 classic mode, but the author recommends against it and encourages migration to integrated mode whenever possible.&amp;nbsp;&lt;/li&gt;

&lt;ul&gt;&lt;li&gt;Switching the IIS 7 ASP.NET integration mode to classic mode: &lt;a href=&quot;http://www.iis.net/default.aspx?i=928&amp;amp;subtabid=25&amp;amp;tabid=2&amp;amp;p=2#changemode&quot;&gt;Link&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;several common errors/warnings received when deploying an app created for older IIS to the new IIS and their workarounds.&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;&lt;a href=&quot;http://learn.iis.net/page.aspx/244/how-to-take-advantage-of-the-iis7-integrated-pipeline/&quot;&gt;How to Take Advantage of the IIS 7.0 Integrated Pipeline&lt;/a&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;</description><link>http://arcgisdeveloper.blogspot.com/2009/10/intro-to-iis-7-classic-mode-and.html</link><author>noreply@blogger.com (arcgis_developer)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1801897191064504903.post-8514236187673072684</guid><pubDate>Mon, 26 Jan 2009 19:09:00 +0000</pubDate><atom:updated>2009-10-11T09:15:25.138-07:00</atom:updated><title>Post from Word 2007</title><description>Please ignore this, i was testing blogging directly from word.&lt;br /&gt;
&lt;br /&gt;
Afdasdf &lt;br /&gt;
Blah &lt;br /&gt;
Asdfsdf &lt;br /&gt;
Asdfsdf &lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Asdfasdf &lt;/li&gt;
&lt;li&gt;Asdfasdf &lt;/li&gt;
&lt;li&gt;Asdf &lt;/li&gt;
&lt;li&gt;Adsf &lt;/li&gt;
&lt;li&gt;Adsf &lt;/li&gt;
&lt;li&gt;Sdaf &lt;/li&gt;
&lt;li&gt;Asdfa &lt;/li&gt;
&lt;li&gt;Dsfadsfsdf &lt;/li&gt;
&lt;/ul&gt;List 2: &lt;br /&gt;
&lt;ol&gt;&lt;li&gt;Asdfsdf &lt;/li&gt;
&lt;li&gt;Asdfasdf &lt;/li&gt;
&lt;li&gt;Asdf &lt;/li&gt;
&lt;li&gt;Asdf &lt;/li&gt;
&lt;li&gt;Asdf &lt;br /&gt;
&lt;table border=&quot;0&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;colgroup&gt;&lt;col style=&quot;width: 91px;&quot;&gt;&lt;/col&gt;&lt;col style=&quot;width: 91px;&quot;&gt;&lt;/col&gt;&lt;col style=&quot;width: 91px;&quot;&gt;&lt;/col&gt;&lt;col style=&quot;width: 91px;&quot;&gt;&lt;/col&gt;&lt;col style=&quot;width: 91px;&quot;&gt;&lt;/col&gt;&lt;col style=&quot;width: 91px;&quot;&gt;&lt;/col&gt;&lt;col style=&quot;width: 91px;&quot;&gt;&lt;/col&gt;&lt;/colgroup&gt;&lt;tbody valign=&quot;top&quot;&gt;
&lt;tr&gt;&lt;td style=&quot;background: #b8cce4; border-bottom: solid black 0.5pt; border-left: solid black 0.5pt; border-right: solid black 0.5pt; border-top: solid black 0.5pt; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;background: #d9d9d9; border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: solid black 0.5pt; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;1&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;background: #d9d9d9; border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: solid black 0.5pt; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;2&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;background: #d9d9d9; border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: solid black 0.5pt; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;3&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;background: #d9d9d9; border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: solid black 0.5pt; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;4&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;background: #d9d9d9; border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: solid black 0.5pt; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;5&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;background: #d9d9d9; border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: solid black 0.5pt; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;6&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background: #b8cce4; border-bottom: solid black 0.5pt; border-left: solid black 0.5pt; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;A&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Asdf&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;asdf&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Hg&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;asdf&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Asdf&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background: #b8cce4; border-bottom: solid black 0.5pt; border-left: solid black 0.5pt; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;B&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Asdf&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Sd&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;adsf&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Asdf&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Asdf&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background: #b8cce4; border-bottom: solid black 0.5pt; border-left: solid black 0.5pt; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;C&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Asdf&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Asdfasdf&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Fsd&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Asdf&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Asdf&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;br /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background: #b8cce4; border-bottom: solid black 0.5pt; border-left: solid black 0.5pt; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;D&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Sdaf&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;sadf&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Sdf&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;br /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background: #b8cce4; border-bottom: solid black 0.5pt; border-left: solid black 0.5pt; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;E&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Asdf&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Sdf&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Sdf&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Asdf&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Asdf&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Asdf&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background: #b8cce4; border-bottom: solid black 0.5pt; border-left: solid black 0.5pt; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;F&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Asasdf&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Asdf&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;Asdf&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;asdf&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td style=&quot;background: #b8cce4; border-bottom: solid black 0.5pt; border-left: solid black 0.5pt; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;span style=&quot;font-size: 10pt;&quot;&gt;G&lt;/span&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;br /&gt;
&lt;/td&gt;&lt;td style=&quot;border-bottom: solid black 0.5pt; border-left: none; border-right: solid black 0.5pt; border-top: none; padding-left: 7px; padding-right: 7px;&quot;&gt;&lt;br /&gt;
&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;</description><link>http://arcgisdeveloper.blogspot.com/2009/01/post-from-word-2007.html</link><author>noreply@blogger.com (arcgis_developer)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1801897191064504903.post-4396142715382846228</guid><pubDate>Thu, 22 Jan 2009 02:50:00 +0000</pubDate><atom:updated>2009-10-11T09:16:42.437-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">javascript</category><category domain="http://www.blogger.com/atom/ns#">objected oriented javascript</category><category domain="http://www.blogger.com/atom/ns#">oop</category><title>Object Oriented Javascript Programming</title><description>&lt;script language=&quot;javascript&quot; type=&quot;text/javascript&quot;&gt;var com;if(typeof com==&#39;undefined&#39;||com==null){com={};};if(typeof com.clt==&#39;undefined&#39;){com.clt={};};com.clt.numCustomTimerObj=0;com.clt.createDelegate=function(instance,method){return function(){return method.apply(instance,arguments);}};function dget(id){return document.getElementById(id);}com.clt.CustomTimer=function(id,numTicks,divId,tableId,tableRowId){com.clt.numCustomTimerObj++;this.id=id;this.currentTick=0;this.numTicks=numTicks;this.divId=divId;this.divEl=dget(this.divId);this.divElEventHandlers=new Array();this.backgroundColor=&#39;gray&#39;;this.height=&#39;10px&#39;;this.activeColor=&#39;red&#39;;this.tableCellWidth=&#39;1px&#39;;this.tableId=tableId;this.tableRowId=tableRowId;this.tableEl=null;this.tableRowEl=null;this.timerProg;this.updateIntervalInMs=1000;this.progDivContainerEl=null;this.progDivContainerId=null;this.progressDivId=null;this.progressDivEl=null;this.widthFactor=2;this.tickEventHandlers=new Array();this.startTime=null;this.state=&#39;created&#39;;this.prevTickEventTime=null;this.totalTickEvents=0;};com.clt.CustomTimer.prototype.update=function(){};com.clt.CustomTimer.prototype.addTickEventHandler=function(handler){var index=this.tickEventHandlers.length;this.tickEventHandlers[index]=handler;return index;};com.clt.CustomTimer.prototype.removeTickEventHandler=function(indexOrFunction){if(typeof indexOrFunction==&#39;number&#39;){if(indexOrFunction&gt;=this.tickEventHandlers.length){return null;}; var f=this.tickEventHandlers[indexOrFunction];this.tickEventHandlers[indexOrFunction]=null;return f;}else{for(var i=0;i&lt;this.tickEventHandlers.length;i++){if(this.tickEventHandlers[i]==indexOrFunction){var f=this.tickEventHandlers[i];this.tickEventHandlers[i]=null;return f;}}} return null;}; com.clt.CustomTimer.prototype.raiseTickEvent=function(){this.totalTickEvents++;var endTime=new Date();this.currentTick=0;this.resetUI();this.state=&#39;started&#39;;var txt=&quot;start time: &quot;+this.startTime+&quot;\nprev tick time:&quot;+this.prevTickEventTime+&quot;\nend time:&quot;+endTime+&quot;\nTotalTickEvents: &quot;+this.totalTickEvents;this.prevTickEventTime=endTime;for(var i=0;i&lt;this.tickEventHandlers.length;i++){var f=this.tickEventHandlers[i];if(f){if(f!=null&amp;&amp;typeof f==&#39;function&#39;){var self=this;f(txt,self);}}}};com.clt.CustomTimer.prototype.setNumTicks=function(totalTicks){this.numTicks=totalTicks;this.reset();};com.clt.CustomTimer.prototype.setUpdateInterval=function(inMilliseconds){this.updateIntervalInMs=inMilliseconds;};com.clt.CustomTimer.prototype.createHTML2=function(){if(this.divEl){if(this.progDivContainerEl){}else{if(this.progDivContainerId){}else{this.progDivContainerId=this.id+&quot;_Container&quot;;};this.progDivContainerEl=dget(this.progDivContainerId);if(this.progDivContainerEl){}else{this.progDivContainerEl=document.createElement(&quot;div&quot;);this.progDivContainerEl.id=this.progDivContainerId;this.divEl.appendChild(this.progDivContainerEl);};this.progDivContainerEl.style.backgroundColor=this.backgroundColor;this.progDivContainerEl.style.width=&quot;&quot;+(this.numTicks*this.widthFactor)+&quot;px&quot;;this.progDivContainerEl.style.height=this.height;this.progDivContainerEl.style.border=&quot;1px solid black&quot;;};if(this.progressDivEl){}else{if(this.progressDivId){}else{this.progressDivId=this.id+&quot;_ProgressBar&quot;;};this.progressDivEl=dget(this.progressDivId);if(this.progressDivEl){}else{this.progressDivEl=document.createElement(&quot;div&quot;);this.progressDivEl.id=this.progressDivId;this.progDivContainerEl.appendChild(this.progressDivEl);};this.progressDivEl.style.backgroundColor=this.activeColor;this.progressDivEl.style.width=&quot;0px&quot;;this.progressDivEl.style.height=&quot;10px&quot;;};this.reset();this.state=&#39;initialized&#39;;}else{if(typeof log!=&#39;undefined&#39;){log(&#39;Unable to createHTML2(), DIV element is null&#39;,&#39;warn&#39;);}}};com.clt.CustomTimer.prototype.createHTML=function(){if(this.divEl){this.tableEl=dget(this.tableId);if(this.tableEl){}else{if(this.tableId){}else{this.tableId=this.id+&quot;_Table&quot;;};this.tableEl=dget(this.tableId);if(this.tableEl){}else{this.tableEl=document.createElement(&quot;table&quot;);this.tableId=this.id+&quot;_Table&quot;;this.divEl.appendChild(this.tableEl);};this.tableEl.id=this.tableId;this.tableEl.style.backgroundColor=this.backgroundColor;this.tableEl.style.height=this.height;};this.tableRowEl=dget(this.tableRowId);if(this.tableRowEl){}else{if(this.tableRowId){}else{this.tableRowId=this.id+&quot;_TableRow&quot;;};this.tableRowEl=dget(this.tableRowId);if(this.tableRowEl){}else{this.tableRowEl=document.createElement(&quot;tr&quot;);this.tableRowEl.id=this.tableRowId;this.tableEl.appendChild(this.tableRowEl);};this.tableRowEl.style.backgroundColor=this.backgroundColor;};if(this.tableEl&amp;&amp;this.tableRowEl){this.reset();this.state=&#39;initialized&#39;;}else{}}else{if(typeof log!=&#39;undefined&#39;){log(&#39;Unable to createHTML2(), DIV element is null&#39;,&#39;warn&#39;);}}};com.clt.CustomTimer.prototype.start=function(){if(this.state==&#39;paused&#39;){this.resume();return;};this.startTime=new Date();var f=com.clt.createDelegate(this,this.tickTock);f();this.timerProg=setInterval(f,this.updateIntervalInMs);this.state=&#39;started&#39;;};com.clt.CustomTimer.prototype.tickTock=function(){if(this.numTicks){if(this.currentTick&lt;=this.numTicks){if(this.startTime==null){this.startTime=new Date();};if(this.tableRowEl){var el1=this.tableRowEl.getElementsByTagName(&quot;td&quot;)[this.currentTick];if(el1);el1.style.backgroundColor=this.activeColor;};if(this.progressDivEl){this.progressDivEl.style.width=&quot;&quot;+(this.widthFactor*(this.currentTick))+&quot;px&quot;;};if(this.currentTick==this.numTicks){this.raiseTickEvent();return;};this.currentTick++;}else{}}};com.clt.CustomTimer.prototype.resume=function(){var f=com.clt.createDelegate(this,this.tickTock);this.tickTock();this.timerProg=setInterval(f,this.updateIntervalInMs);this.state=&#39;started&#39;;}; com.clt.CustomTimer.prototype.pause=function(){if(this.numTicks){clearInterval(this.timerProg);this.state=&#39;paused&#39;;}else{}};com.clt.CustomTimer.prototype.reInitializeTimer=function(tickIntervalInMS,widthFactor){var numTicks=tickIntervalInMS/1000;this.reset();this.numTicks=numTicks;this.widthFactor=widthFactor;this.createHTML2();this.start();};com.clt.CustomTimer.prototype.resetUI=function(){if(this.tableRowEl){this.tableRowEl.innerHTML=&quot;&quot;;this.createRows();};if(this.progressDivEl){this.progressDivEl.style.width=&quot;0px&quot;;}};com.clt.CustomTimer.prototype.reset=function(){if(this.numTicks){this.currentTick=0;clearTimeout(this.timerProg);this.resetUI();this.state=&#39;stopped&#39;;}else{}};com.clt.CustomTimer.prototype.createRows=function(){if(this.tableRowEl&amp;&amp;this.numTicks){for(var i=0;i&lt;this.numTicks;i++){var tdElem=document.createElement(&quot;td&quot;);tdElem.style.backgroundColor=this.backgroundColor;tdElem.style.width=this.tableCellWidth;tdElem.innerHTML=&#39;&#39;;this.tableRowEl.appendChild(tdElem);}}else{}};com.clt.CustomTimer.prototype.dispose=function(removeParentDiv){if(this.tickEventHandlers){this.tickEventHandlers.splice(0,this.tickEventHandlers.length);this.tickEventHandlers=null;};if(this.progDivContainerId){var el=dget(this.progDivContainerId);if(el)el.parentNode.removeChild(el);el=null;};if(this.tableId){var el=dget(this.tableId);if(el)el.parentNode.removeChild(el);el=null;};this.tableEl=null;this.progDivContainerEl=null;this.progressDivEl=null;this.tableEl=null;this.tableRowEl=null;if(removeParentDiv){if(this.divEl);this.divEl.parentNode.removeChild(this.divEl);var domEl1=dget(this.divId);if(domEl1){domEl1.parentNode.removeChild(domEl1);domEl1=null;}};this.divEl=null;if(this.timerProg){clearInterval(this.timerProg);this.timerProg=null;};this.id=null;this.currentTick=null;this.numTicks=null;this.updateIntervalInMs=null;this.widthFactor=null;this.startTime=null;this.divId=null;this.tableId=null;this.tableRowId=null;this.progDivContainerId=null;this.progressDivId=null;this.state=&#39;disposed&#39;;return true;};com.clt.CustomTimer.prototype.timerDiv_onclick=function(event){if(!this){alert(&#39;Timer is not available&#39;);return;};var timerState=this.state;if(timerState==null){alert(&#39;Timer state is NULL&#39;);return;};var userConfirm=false;if(timerState==&#39;stopped&#39;){userConfirm=confirm(&#39;Are you sure you want to START the timer?&#39;);if(userConfirm){this.reset();this.start();}}else if(timerState==&#39;started&#39;){userConfirm=confirm(&#39;Are you sure you want to PAUSE the timer?&#39;);if(userConfirm){this.pause();}}else if(timerState==&#39;paused&#39;){userConfirm=confirm(&#39;Are you sure you want the timer to CONTINUE?&#39;);if(userConfirm){this.start();}}else if(timerState==&#39;disposed&#39;){alert(&#39;Timer is not available&#39;);}else if(timerState==&#39;created&#39;){this.createHTML2();this.start();}else if(timerState==&#39;initialized&#39;){this.start();}else{alert(&#39;Invalid timer state[&#39;+timerState+&#39;], doing nothing.&#39;);}};var customTimer;startTimer=function(){var timerDivId=&#39;timerDiv&#39;;customTimer=new com.clt.CustomTimer(&#39;customTimer1&#39;,30,timerDivId);customTimer.createHTML2();customTimer.createHTML();customTimer.addTickEventHandler(function(txt,timerObj){alert(txt+&#39;\n&#39;+timerObj.id);});var delegateF=com.clt.createDelegate(customTimer,customTimer.timerDiv_onclick);var elem=document.getElementById(timerDivId);if(elem&amp;&amp;elem.addEventListener){elem.addEventListener(&quot;click&quot;,delegateF,false);}else if(elem){elem.onclick=delegateF;};customTimer.start();}&lt;/script&gt;
&lt;div&gt;

Example of using closure to access &#39;this&#39; object in a different context, e.g. in a global context when using setTimeout or setInterval.
&lt;/div&gt;&lt;pre name=&quot;code&quot; class=&quot;javascript:collapse&quot;&gt;
//Example of using closures to access &#39;this&#39; object in a different context,
//e.g. in a global context when using setTimeout()
function Person(name, count) {
 this.name = name;
 this.count = count;
}
Person.prototype.countDown = function() {
 var self = this;
 var closureFunc = function() {
     console.log(self.name + &quot;: &quot; + self.count);

     self.count–;

     if (self.count &gt; 0) {
         self.countDown();
     }
 }
 setTimeout(closureFunc, 500);
}
&lt;/pre&gt;
The usage is pretty simple: 
&lt;ol&gt;
&lt;li&gt;just copy the code to a file or run the code&lt;/li&gt;
&lt;li&gt;then instantiate a timer by hooking it to an existing div tag on the page&lt;/li&gt;
&lt;li&gt;then invoke two functions on the timer object: timer.createHTML(); timer.start();&lt;/li&gt;
&lt;/ol&gt;&lt;span onclick=&quot;startTimer();&quot;&gt;click here to try it.&lt;/span&gt;&lt;div id=&#39;timerDiv&#39;&gt;
&lt;/div&gt;
&lt;div&gt;

&lt;b&gt;Example Usage: &lt;/b&gt;
&lt;textarea name=&quot;code&quot; class=&quot;javascript:collapse&quot;&gt;
var timerDivId = &#39;timerDiv&#39;;
var customTimer = new com.clt.CustomTimer(&#39;customTimer1&#39;, 30, timerDivId);
customTimer.createHTML2();
customTimer.createHTML();
customTimer.addTickEventHandler(function(txt, timerObj) { alert(txt+&#39;\n&#39;+timerObj.id); });
var delegateF = com.clt.createDelegate(customTimer, customTimer.timerDiv_onclick);
var elem = document.getElementById(timerDivId);
if (elem &amp;&amp; elem.addEventListener) {
   elem.addEventListener(&quot;click&quot;, delegateF, false);    
} else if (elem) {
   elem.onclick = delegateF;
}
customTimer.start();
&lt;/textarea &gt;
&lt;/div&gt;&lt;b style=&quot;border-bottom: 1px dotted blue;&quot;&gt;
Now here&#39;s the javascript for the CustomTimer. 
&lt;/b&gt;

&lt;pre name=&quot;code&quot; class=&quot;javascript:collapse&quot;&gt;
/*
    Usage:

    var myCt = new com.clt.CustomTimer(&#39;myCt&#39;, 20, &#39;div1&#39;);
    myCt.createHTML();      //creates tabular div progress bar
        [and/or]
    myCt.createHTML2();     //creates continuous div progress bar
    myCt.addTickEventHandler(function(txt, timerObj) { alert(txt+&#39;\n&#39;+timerObj.id); });
    myCt.addTickEventHandler(function(txt, timerObj) { fireAjaxWebRequest(....); })
    
    //optionally add extra event handlers to the timer div
    //$addHandler($get(&#39;div1&#39;), &#39;click&#39;, com.clt.createDelegate(myCt, myCt.timerDiv_onclick));

    myCt.start();
    myCt.pause();
    myCt.resume(); or myCt.tickTock();

    myCt.reset();
    myCt.start();
    
    To reInitialize with a different time and widthFactor:
    ---------------------------------------------------------------------
    myCt.reInitializeTimer(15000, 2);
            OR
    reInitializeTimer = function(queryIntervalInMS, widthFactor) {
        var numTicks = queryIntervalInMS / 1000;
        var timerId = _timerObject.id;
        _timerObject.dispose(false);
        _timerObject = new com.clt.CustomTimer(timerId, numTicks, &#39;timerDivId&#39;);
        if (_timerObject) {
            _timerObject.widthFactor = widthFactor;
            _timerObject.createHTML2();
            _timerObject.addTickEventHandler(_timerEventHandler);
            _timerObject.start();
        }
    }
    
 */
var com;
if (typeof com == &#39;undefined&#39; || com == null) {
    com = {};
}
if (typeof com.clt == &#39;undefined&#39;) {
    com.clt = {};
}
//public static variable
com.clt.numCustomTimerObj = 0;
//Utility function
com.clt.createDelegate = function(instance, method){
    return function() {
        return method.apply(instance, arguments);
    }
}
//function in global namespace, usage: var divEl = dget(&#39;div1&#39;);
function dget(id){
    return document.getElementById(id);
}



/*********************************************************************************

Implements:
 Observer design pattern: listeners/eventHandlers are registered, events fired and
    corresponding listeners/eventHandlers are invoked.
TODO:
    use a logger - if IE use logging in a txtbox,
        if firefox &amp; firebug use console.log(),
        if ie &amp; &#39;asp.net ajax&#39; use sys.debug.trace()
        
Dependencies:
    - asp.net ajax library:
        - $clearHandlers
        - $addHandler
        - $removeHandler
    - homegrown:
        - log(&quot;message&quot;,&quot;optional_log_level=debug&quot;) 

*********************************************************************************/

/*
valid values for CustomTimer.state =
 started, paused, stopped, created, initialized, disposed

cycle:
 - created (when constructed)
 - initialized (when everything is ready, including html)
 - started
 - paused (optional)
 - stopped (when reset)
 - disposed
*/

com.clt.CustomTimer = function(id, numTicks, divId, tableId, tableRowId) {
    com.clt.numCustomTimerObj++;
    this.id = id;
    this.currentTick = 0;
    this.numTicks = numTicks;
    this.divId = divId;
    this.divEl = dget(this.divId);
    this.divElEventHandlers = new Array();

 this.backgroundColor = &#39;gray&#39;;
 this.height = &#39;10px&#39;;
 this.activeColor = &#39;red&#39;;

 this.tableCellWidth = &#39;1px&#39;;
    this.tableId = tableId;
    this.tableRowId = tableRowId;
    this.tableEl = null;
    this.tableRowEl = null;

    this.timerProg;
    this.updateIntervalInMs = 1000;

    this.progDivContainerEl = null;
    this.progDivContainerId = null;
    this.progressDivId = null;
    this.progressDivEl = null;
    //multiplier for progress bar when using div instead of table
    this.widthFactor = 2;

    this.tickEventHandlers = new Array();
    this.startTime = null;
    this.state = &#39;created&#39;;
 this.prevTickEventTime = null;
 this.totalTickEvents = 0; 
}

com.clt.CustomTimer.prototype.update = function() {

}

com.clt.CustomTimer.prototype.addTickEventHandler = function(handler) {
    var index = this.tickEventHandlers.length;
    this.tickEventHandlers[index] = handler;
    return index;
}

// removes by index or the function eventHandler Object
com.clt.CustomTimer.prototype.removeTickEventHandler = function(indexOrFunction) {
    if (typeof indexOrFunction == &#39;number&#39;) {
        if (indexOrFunction &gt;= this.tickEventHandlers.length) {
            //error
            return null;
        }
        var f = this.tickEventHandlers[indexOrFunction];
        this.tickEventHandlers[indexOrFunction] = null;
        return f;
    } else {
        for (var i = 0; i &lt; this.tickEventHandlers.length; i++) {
            if (this.tickEventHandlers[i] == indexOrFunction) {
                var f = this.tickEventHandlers[i];
                this.tickEventHandlers[i] = null;
                return f;
            }
        }
    }
    return null;
}


/*
    @param data:Object = {&#39;startTime&#39;:this.startTime, &#39;prevTickTime&#39;:prevTickTime, &#39;endTime&#39;:new Date()}
*/
com.clt.CustomTimer.prototype.raiseTickEvent = function() {
 this.totalTickEvents++;
 var endTime = new Date();
 this.currentTick = 0;
 this.resetUI(); 
 this.state = &#39;started&#39;;
 
 //var dataObj = {&#39;startTime&#39;:this.startTime.getTime(), &#39;prevTickTime&#39;:prevTickTime.getTime(), &#39;endTime&#39;:endTime.getTime()}
 
 var txt = &quot;start time: &quot; + this.startTime + &quot;\nprev tick time:&quot;+this.prevTickEventTime
  +&quot;\nend time:&quot; + endTime + &quot;\nTotalTickEvents: &quot; + this.totalTickEvents;
    this.prevTickEventTime = endTime; 
 for (var i = 0; i &lt; this.tickEventHandlers.length; i++) {
        var f = this.tickEventHandlers[i];
        if (f) {
            if (f != null &amp;&amp; typeof f == &#39;function&#39;) {
    var self = this;
                f(txt, self);
            }
        }
    }
}

com.clt.CustomTimer.prototype.setNumTicks = function(totalTicks) {
    this.numTicks = totalTicks;
    this.reset();
}

com.clt.CustomTimer.prototype.setUpdateInterval = function(inMilliseconds){
    this.updateIntervalInMs = inMilliseconds;
}

//this creates a div progress bar as opposed to a tabular prog bar
com.clt.CustomTimer.prototype.createHTML2 = function() {
    if (this.divEl) {
        if (this.progDivContainerEl) {
            //do nothing
        } else {
            if (this.progDivContainerId) {
                //do nothing, use specified divId
            } else {
                //define a new ID for this div tag
                this.progDivContainerId = this.id + &quot;_Container&quot;;
            }

            this.progDivContainerEl = dget(this.progDivContainerId);
            if (this.progDivContainerEl) {
                // do nothing, use existing div
            } else {
                // create a new div, append to parent
                this.progDivContainerEl = document.createElement(&quot;div&quot;);
                this.progDivContainerEl.id = this.progDivContainerId;
                this.divEl.appendChild(this.progDivContainerEl);
            }

            this.progDivContainerEl.style.backgroundColor = this.backgroundColor;
            this.progDivContainerEl.style.width = &quot;&quot; + (this.numTicks * this.widthFactor) + &quot;px&quot;;
            this.progDivContainerEl.style.height = this.height;
            this.progDivContainerEl.style.border = &quot;1px solid black&quot;;
        }

        //.....

        if (this.progressDivEl) {
            //do nothing
        } else {
            if (this.progressDivId) {
                //do nothing
            } else {
                this.progressDivId = this.id + &quot;_ProgressBar&quot;;
            }

            this.progressDivEl = dget(this.progressDivId);
            if (this.progressDivEl) {
                //do nothing, use existing div
            } else {
                //create a new div, append to parent
                this.progressDivEl = document.createElement(&quot;div&quot;);
                this.progressDivEl.id = this.progressDivId;
                this.progDivContainerEl.appendChild(this.progressDivEl);
            }

            this.progressDivEl.style.backgroundColor = this.activeColor;
            this.progressDivEl.style.width = &quot;0px&quot;;
            this.progressDivEl.style.height = &quot;10px&quot;;
        }
        this.reset();
        this.state = &#39;initialized&#39;;
    } else {
        //log error
        if(typeof log != &#39;undefined&#39;) {
   log(&#39;Unable to createHTML2(), DIV element is null&#39;,&#39;warn&#39;);
  }
    }
}

//creates a tabular progres bar with discrete visible timer steps/ticks
com.clt.CustomTimer.prototype.createHTML = function() {
    if (this.divEl) {
        this.tableEl = dget(this.tableId);
        if (this.tableEl) {
            //do noting
        } else {
            if (this.tableId) {
                //do nothing
            } else {
                this.tableId = this.id + &quot;_Table&quot;;
            }

            this.tableEl = dget(this.tableId);
            if (this.tableEl) {
                //do nothing
            } else {
                this.tableEl = document.createElement(&quot;table&quot;);
                this.tableId = this.id + &quot;_Table&quot;;
                this.divEl.appendChild(this.tableEl);
            }
            this.tableEl.id = this.tableId;
            this.tableEl.style.backgroundColor = this.backgroundColor;
            this.tableEl.style.height = this.height;
        }

        //......


        this.tableRowEl = dget(this.tableRowId);
        if (this.tableRowEl) {
            //do nothing
        } else {
            if (this.tableRowId) {
                //do nothing
            } else {
                this.tableRowId = this.id + &quot;_TableRow&quot;;
            }

            this.tableRowEl = dget(this.tableRowId);
            if (this.tableRowEl) {
                //do nothing
            } else {
                this.tableRowEl = document.createElement(&quot;tr&quot;);
                this.tableRowEl.id = this.tableRowId;
                this.tableEl.appendChild(this.tableRowEl);
            }
            this.tableRowEl.style.backgroundColor = this.backgroundColor;
        }

        if (this.tableEl &amp;&amp; this.tableRowEl) {
            this.reset();
            this.state = &#39;initialized&#39;;
            //this.createRows();
        } else {
            //serious error - log message
        }
    } else {
        //error
        if(typeof log != &#39;undefined&#39;) {
   log(&#39;Unable to createHTML2(), DIV element is null&#39;,&#39;warn&#39;);
  }
    }
}

//this updates the progress bar after a 1 sec, i.e. if numTicks=10, then timer will stop at exactly the 10th second mark
com.clt.CustomTimer.prototype.start = function() {
    if (this.state == &#39;paused&#39;) {
        this.resume();
        return;
    }        
    this.startTime = new Date();
    var f = com.clt.createDelegate(this, this.tickTock);
    //this.timerProg = setTimeout(f, this.updateIntervalInMs);
    f(); //execute a tick immediately
    this.timerProg = setInterval(f, this.updateIntervalInMs);
    this.state = &#39;started&#39;;
}

//this updates the progress bar immediately, i.e. if numTicks=10, then timer will stop at 11th second mark
com.clt.CustomTimer.prototype.tickTock = function() {
    if (this.numTicks) {
        if (this.currentTick &lt;= this.numTicks) {
            if (this.startTime == null) {
                this.startTime = new Date();
            }

            if (this.tableRowEl) {
                var el1 = this.tableRowEl.getElementsByTagName(&quot;td&quot;)[this.currentTick];
                if (el1)
                    el1.style.backgroundColor = this.activeColor;
            }

            if (this.progressDivEl) {
                this.progressDivEl.style.width = &quot;&quot; + (this.widthFactor * (this.currentTick)) + &quot;px&quot;;
            }

            if (this.currentTick == this.numTicks) {
                this.raiseTickEvent();
                return;
                //clearInterval(this.timerProg);
            }

            this.currentTick++;
            //var f = com.clt.createDelegate(this, this.tickTock);
            //this.timerProg = setTimeout(f, this.updateIntervalInMs);
        } else {
            //clearInterval(this.timerProg);
        }
    }
}

com.clt.CustomTimer.prototype.resume = function() {
    var f = com.clt.createDelegate(this, this.tickTock);
    this.tickTock();
    this.timerProg = setInterval(f, this.updateIntervalInMs);
    this.state = &#39;started&#39;;
}

com.clt.CustomTimer.prototype.pause = function() {
    if (this.numTicks) {
        //clearTimeout(this.timerProg);
        clearInterval(this.timerProg);
        this.state = &#39;paused&#39;;
    } else {

    }
}

com.clt.CustomTimer.prototype.reInitializeTimer = function(tickIntervalInMS, widthFactor) {
    var numTicks = tickIntervalInMS / 1000;
    this.reset();
    this.numTicks = numTicks;
    this.widthFactor = widthFactor;
    this.createHTML2();
    this.start();
}

com.clt.CustomTimer.prototype.resetUI = function() {
 if (this.tableRowEl) {
  this.tableRowEl.innerHTML = &quot;&quot;;
  this.createRows();
 }
 if (this.progressDivEl) {
  this.progressDivEl.style.width = &quot;0px&quot;;
 }
}

com.clt.CustomTimer.prototype.reset = function() {
    if (this.numTicks) {
        this.currentTick = 0;
        //this.startTime = null;
        clearTimeout(this.timerProg);
  this.resetUI();
        this.state = &#39;stopped&#39;;
    } else {
        //log error msg
    }
}

com.clt.CustomTimer.prototype.createRows = function() {
    if (this.tableRowEl &amp;&amp; this.numTicks) {
        for (var i = 0; i &lt; this.numTicks; i++) {
            var tdElem = document.createElement(&quot;td&quot;);
            tdElem.style.backgroundColor = this.backgroundColor;
            tdElem.style.width = this.tableCellWidth;
            tdElem.innerHTML = &#39;&#39;; //&#39;&amp;nbsp;&#39;
            this.tableRowEl.appendChild(tdElem);
        }
    } else {
        //log error msg
    }
}

com.clt.CustomTimer.prototype.dispose = function(removeParentDiv) {
    //remove any eventHandlers for DOM nodes

    //set reference to event handlers to null
    if (this.tickEventHandlers) {
        this.tickEventHandlers.splice(0, this.tickEventHandlers.length);
        this.tickEventHandlers = null;
    }

    //remove html DOM elements &amp; set reference to DOM nodes to null
    if (this.progDivContainerId) {
        var el = dget(this.progDivContainerId);
        if (el) el.parentNode.removeChild(el);
        el = null;
    }
    if (this.tableId) {
        var el = dget(this.tableId);
        if (el) el.parentNode.removeChild(el);
        el = null;
    }

    this.tableEl = null;
    this.progDivContainerEl = null;
    this.progressDivEl = null;
    this.tableEl = null;
    this.tableRowEl = null;
    if (removeParentDiv) {
        if (this.divEl)
            this.divEl.parentNode.removeChild(this.divEl);
        var domEl1 = dget(this.divId);
        if (domEl1) {
            domEl1.parentNode.removeChild(domEl1);
            domEl1 = null;
        }            
    }
    this.divEl = null;

    ///

    if (this.timerProg) {
        clearInterval(this.timerProg);
        this.timerProg = null;
    }

    //set everything else to null, not necessary
    this.id = null;
    this.currentTick = null;
    this.numTicks = null;
    this.updateIntervalInMs = null;
    this.widthFactor = null;
    this.startTime = null;

    this.divId = null;
    this.tableId = null;
    this.tableRowId = null;
    this.progDivContainerId = null;
    this.progressDivId = null;
    this.state = &#39;disposed&#39;;
    
    return true;
}

com.clt.CustomTimer.prototype.timerDiv_onclick = function(event) {
    if (!this) {
        alert(&#39;Timer is not available&#39;);
        return;
    }
    var timerState = this.state;
    if (timerState == null) {
        alert(&#39;Timer state is NULL&#39;);
        return;
    }

    var userConfirm = false;
    if (timerState == &#39;stopped&#39;) {
        userConfirm = confirm(&#39;Are you sure you want to START the timer?&#39;);
        if (userConfirm) {
            this.reset();
            this.start();
        }
    } else if (timerState == &#39;started&#39;) {
        userConfirm = confirm(&#39;Are you sure you want to PAUSE the timer?&#39;);
        if (userConfirm) {
            this.pause();
        }
    } else if (timerState == &#39;paused&#39;) {
        userConfirm = confirm(&#39;Are you sure you want the timer to CONTINUE?&#39;);
        if (userConfirm) {
            this.start();
        }
    } else if (timerState == &#39;disposed&#39;) {
        alert(&#39;Timer is not available&#39;);
    } else if (timerState == &#39;created&#39;) {
        this.createHTML2();
        //add event handlers
        this.start();
    } else if (timerState == &#39;initialized&#39;) {
        this.start();
    } else {
        alert(&#39;Invalid timer state[&#39; + timerState + &#39;], doing nothing.&#39;);
    }
}

//============================== END CLASS ==========================
&lt;/pre&gt;
</description><link>http://arcgisdeveloper.blogspot.com/2009/01/object-oriented-javascript-programming.html</link><author>noreply@blogger.com (arcgis_developer)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1801897191064504903.post-8129465463887558189</guid><pubDate>Mon, 29 Dec 2008 22:28:00 +0000</pubDate><atom:updated>2008-12-29T14:51:13.597-08:00</atom:updated><title>ArcGIS Server and Image Server sample deployment archcitecture</title><description>This post is about a system diagram that explains a sample deployment using ArcGIS Server, ArcSDE and Image Server at 9.2. The concepts at 9.3 are similar but there&#39;s more integration enhancements.
&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;
Legend:&lt;/span&gt;&lt;ul&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;SOC &lt;/span&gt;- Server Object Container, ArcGISSOC.exe process&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;SOM &lt;/span&gt;- Server Object Manager, ArcGISSOM.exe process&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;MXD &lt;/span&gt;- Map Document authored with ArcMap &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:13px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;Image Server&lt;/span&gt; - a windows service to manage Image Service Providers, service name: &#39;ESRI Image Server&#39;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;ISP &lt;/span&gt;- Image Service Provider, workhorse of the Image Server, comparable to the &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;SOC&lt;/span&gt;. Runs as a separate process (windows service with a name similar to &#39;ESRI Image ServiceProvider: 3383&#39;). Each ISP runs on a different TCP/IP port. &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;ISCDef &lt;/span&gt;- Image Service Compiled definition, a binary file which is the compiled image service definition components&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;ISDef &lt;/span&gt;- Image Service definition, an xml configuration file (comparable to &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;MXD &lt;/span&gt;for vector data)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;ArcSDE &lt;/span&gt;- A layer on top of a Relational Database System to add spatial capabilities to it&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;GeoDB &lt;/span&gt;- Geodatabase. Can be an ArcSDE geodb, file based geodb etc&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;ArcGIS Server Cache&lt;/span&gt; - image files of the cached Map Service corresponding to Map Document (MXD)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;Raster Data&lt;/span&gt; - any type of imagery file/data&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;
&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;/li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;
&lt;/span&gt;&lt;/ul&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;
&lt;/span&gt;
&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzVMdQCy4PonjD-_fYGbyKehfLjIXFpiv4XbEAqrkfUDHOvwbO6CHdOJ4cGo4va9pVxruNaikkBuGoL9aGkokLC86kjU8ACLJZb16-ihqnN6pc6R8WBrMQj6HCaqaB2MnKtAYSQf10jzw/s1600-h/AGS_ImageServer_Sample_Deployment_Architecture.jpg&quot;&gt;&lt;img style=&quot;float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 400px; height: 312px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzVMdQCy4PonjD-_fYGbyKehfLjIXFpiv4XbEAqrkfUDHOvwbO6CHdOJ4cGo4va9pVxruNaikkBuGoL9aGkokLC86kjU8ACLJZb16-ihqnN6pc6R8WBrMQj6HCaqaB2MnKtAYSQf10jzw/s400/AGS_ImageServer_Sample_Deployment_Architecture.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5285348296202411378&quot; /&gt;&lt;/a&gt;</description><link>http://arcgisdeveloper.blogspot.com/2008/12/arcgis-server-and-image-server-sample.html</link><author>noreply@blogger.com (arcgis_developer)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzVMdQCy4PonjD-_fYGbyKehfLjIXFpiv4XbEAqrkfUDHOvwbO6CHdOJ4cGo4va9pVxruNaikkBuGoL9aGkokLC86kjU8ACLJZb16-ihqnN6pc6R8WBrMQj6HCaqaB2MnKtAYSQf10jzw/s72-c/AGS_ImageServer_Sample_Deployment_Architecture.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1801897191064504903.post-82584633418275191</guid><pubDate>Sat, 27 Dec 2008 06:33:00 +0000</pubDate><atom:updated>2008-12-26T22:34:10.626-08:00</atom:updated><title>Creating a JavaScript Custom Timer</title><description>TODO
&lt;pre name=&quot;code&quot; class=&quot;jscript&quot;&gt;
&lt;/pre&gt;</description><link>http://arcgisdeveloper.blogspot.com/2008/12/creating-javascript-custom-timer.html</link><author>noreply@blogger.com (arcgis_developer)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1801897191064504903.post-5248190187752986941</guid><pubDate>Fri, 26 Dec 2008 21:48:00 +0000</pubDate><atom:updated>2008-12-26T22:20:05.998-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ajax</category><category domain="http://www.blogger.com/atom/ns#">events</category><category domain="http://www.blogger.com/atom/ns#">java web adf</category><category domain="http://www.blogger.com/atom/ns#">jsf</category><category domain="http://www.blogger.com/atom/ns#">lifecycle</category><category domain="http://www.blogger.com/atom/ns#">phaselistener</category><title>A study of ESRI Java web adf lifecycle &amp; events - how they fit it in the servlet and JSF lifecycle and events</title><description>ESRI has a Java web Application Development Framework (ADF) for ArcGIS Server, similar to Oracle&#39;s web ADF and other web frameworks. The ESRI web ADF is an API for building mapping web applications and consists of a set of JSF server controls, e.g. TOC control, Map control, OverviewMap control, Navigation control, PrintTask control etc. &lt;div&gt;
&lt;/div&gt;&lt;div&gt;A very high-level workflow is:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;use a full-fledged WYSIWYG desktop editor for creating and symbolizing maps and data, aka ArcMap
&lt;/li&gt;&lt;li&gt;publish that map as a web mapping service (MapService) using ArcGIS Server
&lt;/li&gt;&lt;li&gt;consume that MapService in a web application created using the ESRI web ADF (either in .net or java)
&lt;/li&gt;&lt;li&gt;make changes to the map if necessary and restart MapService. &lt;/li&gt;&lt;li&gt;The data changes are automatically picked up, e.g. data added/deleted/updated&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;It is a complicated and sophisticated framework built on top of the JSF framework. &lt;/div&gt;&lt;div&gt;The JSF components of the ESRI java web ADF are also Ajax enabled.
&lt;/div&gt;&lt;div&gt;It exposes its own task framework for building tasks/wizards/workflows on using the various JSF controls it exposes.&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;Sun outlines a few approaches for creating Ajax-enabled components in JSF. &lt;a href=&quot;https://blueprints.dev.java.net/bpcatalog/ee5/ajax/usingJSFwithAJAX.html&quot;&gt;Link,&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href=&quot;http://download.developers.sun.com.cn/event/javaone/2006/TS-1615/TS-1615.pdf&quot;&gt;Link2.&lt;/a&gt;&lt;/div&gt;&lt;div&gt;At ArcGIS Server 9.2, the JSF components are ajax-enabled using the&lt;a href=&quot;https://blueprints.dev.java.net/bpcatalog/ee5/ajax/phaselistener.html&quot;&gt; PhaseListener approach&lt;/a&gt;. This approach is nicely explained in this &lt;a href=&quot;http://www.accu-usa.org/Slides/ajax-java-accu-2006.pdf&quot;&gt;pdf slideshow&lt;/a&gt; and the below diagram:
&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDsgOgD8W10xVfO0oKNwe8b-DMae_BYi-8nWaOzdfmbXJ8gMUJv1YUvold5k8yvP5nfZp52hhXxIATmdeQZPXqGBqGZrAUgeOxaVy60hTqcvVfMlWT8mJLGA0iqwOfG0448tWGVGojVTc/s1600-h/jsf_phaselistener_ajax.jpg&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 413px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDsgOgD8W10xVfO0oKNwe8b-DMae_BYi-8nWaOzdfmbXJ8gMUJv1YUvold5k8yvP5nfZp52hhXxIATmdeQZPXqGBqGZrAUgeOxaVy60hTqcvVfMlWT8mJLGA0iqwOfG0448tWGVGojVTc/s400/jsf_phaselistener_ajax.jpg&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5284225080661979602&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;The ADF uses a PhaseListener (PostBackPhaseListener.java) to handle all Ajax requests. It us also responsible for rendering xml fragments that contain the update state for each ajax-enabled web adf control. The xml fragments are transformed to html via an xslt using some pre-existing xsl files and the client javascript updates the UI elements on the browser. &lt;/div&gt;&lt;div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;Similar to the doc and case study outlined by Sun, the PhaseListener is triggered by keywords in the HttpRequest QueryString (Request Parameters). The keyword being &quot;doAJAX=true&quot; in this case.&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Each ADF JSF component can have 1 or more AjaxRenderers associated with it. The purpose of the AjaxRenderer is to detect changes in the JSF component&#39;s state, and render xml fragments of any changes to the state. The way to detect change is flexible, they serialize the variables of the JSF component and compare it with a new serialized state, or custom code can be written.  &lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;Anyways, I&#39;ve digressed, the ajax implementation of the JSF controls is another topic for another post. &lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;Today I&#39;d like to talk about something that&#39;s very important when developing other phaseListeners, servlets in a web adf application - when do the ADF lifecycle &amp;amp; events get kicked off in relation to the standard jsf phases and servlet lifecycles? &lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;Web ADF lifecycle:&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;1) very first request to the Java EE container for the web app:&lt;/div&gt;&lt;div&gt;new WebApplication()
&lt;/div&gt;&lt;div&gt;webcontext.Initialization - webcontext instance1&lt;/div&gt;&lt;div&gt;webcontext.Passivation - webcontext instance1&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;2) 2nd ajax request&lt;/div&gt;&lt;div&gt;webcontext.activation - webcontext instance1&lt;/div&gt;&lt;div&gt;webcontext.passivation - webcontext instance1&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;3) 1st request from a new client&lt;/div&gt;&lt;div&gt;webcontext.initialization - webcontext instance2&lt;/div&gt;&lt;div&gt;webcontext.passivation - webcontext instance2&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;4)  2nd ajax request from the 2nd client&lt;/div&gt;&lt;div&gt;webcontext.activation - webcontext instance2&lt;/div&gt;&lt;div&gt;webcontext.passivation - webcontext instance2&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;5) final request from 2nd client&lt;/div&gt;&lt;div&gt;webcontext.activation  - webcontext instance2&lt;/div&gt;&lt;div&gt;webcontext.passivation - webcontext instance2&lt;/div&gt;&lt;div&gt;webcontext.destruction - webcontext instance2&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;6) final request from 1st client&lt;/div&gt;&lt;div&gt;&lt;div&gt;webcontext.activation - webcontext instance1&lt;/div&gt;&lt;div&gt;webcontext.passivation - webcontext instance1&lt;/div&gt;&lt;div&gt;webcontext.destruction - webcontext instance1&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;7) Web Application is removed or Java EE container is shut down&lt;/div&gt;&lt;div&gt;WebApplication.destroy()&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;There are 6 JSF phases and the ADF phases exist in between those.&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;
&lt;div&gt;Servlet lifecycle:&lt;/div&gt;&lt;div&gt;ContextInitialized - creates an ADF WebApplication class instance (&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(153, 153, 153);&quot;&gt;1 per web application, exists in application scope&lt;/span&gt;)&lt;/div&gt;ADFServletContextListener
&lt;div&gt;
&lt;/div&gt;&lt;div&gt;ContextDestroyed - destroys an ADF WebApplication class instance (&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(153, 153, 153);&quot;&gt;1 per web application, exists in application scope&lt;/span&gt;)&lt;/div&gt;&lt;div&gt;&lt;/div&gt;
&lt;div&gt;JSF lifecycle:&lt;/div&gt;
&lt;div&gt;&lt;/div&gt;
&lt;div&gt;RESTORE_VIEW:&lt;/div&gt;&lt;div&gt;beforePhase: ADF &lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(204, 0, 0);&quot;&gt;webContext.activate()&lt;/span&gt;  - there is no predefined phase for this, it can happen as soon as possible&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;&lt;div&gt;APPLY_REQUEST_VALUES:&lt;/div&gt;&lt;div&gt;PostBackPhaseListener is kicked off if an ajax request is made- calls all AjaxRenderers to gather xml fragments of changed JSF web control states. &lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;RENDER_RESPONSE:&lt;/div&gt;&lt;div&gt;afterPhase: &lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(255, 0, 0);&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;ADF webContext.passivate()&lt;/span&gt;&lt;/span&gt; - this event can happen before render_response or before response_complete (since response_complete may happen before render_response), basically this is the last event of the web adf lifecycle for an http request (once the webcontext has been initialized).&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;RESPONSE_COMPLETE event:&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(204, 0, 0);&quot;&gt;ADF webContext.passivate&lt;/span&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;
&lt;b&gt;&lt;i&gt;The below is a java class that will show you when the various lifecycle/events of the ESRI java web ADF are being executed&lt;/i&gt;&lt;/b&gt;
&lt;pre name=&quot;code&quot; class=&quot;java:collapse&quot;&gt;
package com.ncedis.adf.web.common;

import java.util.Iterator;
import java.util.Map;

import org.apache.log4j.Logger;

import com.esri.adf.web.data.WebContext;
import com.esri.adf.web.data.WebContextInitialize;
import com.esri.adf.web.data.WebContextObserver;
import com.esri.adf.web.data.WebLifecycle;

public class WebADFLifecycleNotifier implements WebContextObserver, WebContextInitialize, WebLifecycle
{
 private static final long serialVersionUID = -5663664360161434104L;
 private static final Logger logger = Logger.getLogger(WebADFLifecycleNotifier.class);
 
 private boolean isStartup = true;
 private WebContext webContext;

 public void update(WebContext webContext, Object obj)
 {
  logger.debug(&quot;WebContext.refresh() has been invoked, which invoked me(WebContextObserver) ...&quot;);
  if (isStartup)
  {  }
  this.webContext = webContext; 
  isStartup = false;
 }
 
 
 public static String arrayToString(Object[] array)
 {
  if (array == null)
   return null;
  
  StringBuilder sb = new StringBuilder();
  for (int i = 0; i &lt; array.length; i++)
  {
   sb.append(&quot;\t&quot;+array[i]+&quot;\n&quot;);
  }
  return sb.toString();
 } 
 
 public void destroy()
 {
  logger.debug(&quot;WebContext.destory() has been invoked, which invoked me ... [Terminating Client session]\n&quot;);
  logger.debug(&quot;Printing stack trace [NOT ERROR]-\n&quot; + arrayToString(Thread.currentThread().getStackTrace()));  
  isStartup = true;
  webContext = null;
 }

 public void init(WebContext webContext)
 {
  logger.debug(&quot;WebContext.init() has been invoked, which invoked me ... [Received new Client Session Request]&quot;);
  webContext.addObserver(this);
  this.webContext = webContext;
  
  if (logger.isDebugEnabled())
  {
   try
   {
    StringBuffer sb = new StringBuffer(&quot;NONE&quot;);
    Map attribs = webContext.getAttributes();
    if (!attribs.isEmpty())
    { 
     sb = new StringBuffer(&quot;[&quot;);
     for (Iterator iter = attribs.entrySet().iterator(); iter.hasNext();)
     {
      Map.Entry element = (Map.Entry) iter.next();
      sb.append(element.getKey()).append(&quot;, &quot;);   
     }
     sb.replace(sb.length()-1, sb.length(), &quot;]&quot;);
    }
    logger.debug(&quot;WebContext.attributes = &quot; + sb.toString());
   } 
   catch (Exception ex) 
   {
    logger.warn(&quot;Unable to print webContext.attributes - &quot; + ex.getMessage() + &quot; - &quot; + ex.getStackTrace()[1]);
   }
  }
  
  /**
   * NOTE IMPORTANT: some managed-beans could be instantiated at this stage, 
   * but their properties are set later during the webapp execution.
   * 
   */
 }
 
 public void activate()
 {
  logger.debug(&quot;WebContext.activate() has been invoked, which invoked me ... [Client http-request is received]&quot;); 
  isStartup = false;
 }

 public void passivate()
 {
  logger.debug(&quot;WebContext.passivate() has been invoked, which invoked me ... [Done with servicing HTTP-request] \n&quot;);
  isStartup = false;
 }
}
&lt;/pre&gt;

To better understand the web adf lifecycle with respect to the adf events/servlet events, we should create a PhaseListener class that outputs a message before and after every phase. 
&lt;i&gt;This class should be as follows:&lt;/i&gt;
&lt;pre name=&quot;code&quot; class=&quot;java:collapse&quot;&gt;
package com.ncedis.adf.web.faces;

import javax.faces.event.PhaseEvent;
import javax.faces.event.PhaseId;
import javax.faces.event.PhaseListener;

import org.apache.log4j.Logger;

public class VerboseTestPhaseListener implements PhaseListener
{
 private static final long serialVersionUID = 131479863251034948L;
 private static final Logger logger = Logger.getLogger(VerboseTestPhaseListener.class);

 public void afterPhase(PhaseEvent event)
 {
   logger.debug(event.getPhaseId().toString() + &quot; afterPhase&quot;);   
   if (event.getPhaseId() == PhaseId.RENDER_RESPONSE) 
    logger.debug(&quot;Done with Request!\n&quot;); 
   
 }

 public void beforePhase(PhaseEvent event)
 {
  //this is actually not the beginning of the new request.
  //if (event.getPhaseId() == PhaseId.RESTORE_VIEW) logger.debug(&quot;Processing new Request!&quot;);          
    logger.debug(event.getPhaseId().toString() + &quot; beforePhase&quot;);
 }

 public PhaseId getPhaseId()
 {
  return PhaseId.ANY_PHASE;
 }
 
}
&lt;/pre&gt;
The above java class must be instantiated by the jsf managed-bean facility and inserted as an attribute of webcontext using the dependency injection framework of jsf. In simpler words, you&#39;ll have to modify the faces-config.xml file and declaratively add this class as an attribute of the webcontext instance as follows below:
&lt;textarea name=&quot;code&quot; class=&quot;xml&quot;&gt;

    &lt;!--Create Map Context--&gt;
    &lt;managed-bean&gt;
        &lt;managed-bean-name&gt;mapContext&lt;/managed-bean-name&gt;
        &lt;managed-bean-class&gt;com.esri.adf.web.data.WebContext&lt;/managed-bean-class&gt;
        &lt;managed-bean-scope&gt;session&lt;/managed-bean-scope&gt;
        &lt;managed-property&gt;
            &lt;property-name&gt;webSession&lt;/property-name&gt;
            &lt;value&gt;#{esriWebSession}&lt;/value&gt;
        &lt;/managed-property&gt;
        &lt;managed-property&gt;
            &lt;property-name&gt;attributes&lt;/property-name&gt;
            &lt;map-entries&gt;
                &lt;map-entry&gt;
                    &lt;key&gt;map&lt;/key&gt;
                    &lt;value&gt;#{map}&lt;/value&gt;
                &lt;/map-entry&gt;
                &lt;map-entry&gt;
                    &lt;key&gt;printingTask&lt;/key&gt;
                    &lt;value&gt;#{printingTask}&lt;/value&gt;
                &lt;/map-entry&gt;
            ...
            ...
            ...  
                &lt;map-entry&gt;
                    &lt;key&gt;webAdfLifecycleNotifier&lt;/key&gt;
                    &lt;value&gt;#{webAdfLifecycleNotifier}&lt;/value&gt;
                &lt;/map-entry&gt;                                                                                          
            &lt;/map-entries&gt;
        &lt;/managed-property&gt;
        &lt;managed-property&gt;
            &lt;property-name&gt;resources&lt;/property-name&gt;
            &lt;map-entries&gt;&lt;/map-entries&gt;
        &lt;/managed-property&gt;
    &lt;/managed-bean&gt;

    &lt;!-- create an instance of web adf lifecycle notifier class in session scope --&gt;
    &lt;managed-bean&gt;
        &lt;managed-bean-name&gt;webAdfLifecycleNotifier&lt;/managed-bean-name&gt;
        &lt;managed-bean-class&gt;com.ncedis.adf.web.common.WebADFLifecycleNotifier&lt;/managed-bean-class&gt;
        &lt;managed-bean-scope&gt;none&lt;/managed-bean-scope&gt;
    &lt;/managed-bean&gt; 
&lt;/textarea&gt;</description><link>http://arcgisdeveloper.blogspot.com/2008/12/study-of-esri-java-web-adf-lifecycle.html</link><author>noreply@blogger.com (arcgis_developer)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDsgOgD8W10xVfO0oKNwe8b-DMae_BYi-8nWaOzdfmbXJ8gMUJv1YUvold5k8yvP5nfZp52hhXxIATmdeQZPXqGBqGZrAUgeOxaVy60hTqcvVfMlWT8mJLGA0iqwOfG0448tWGVGojVTc/s72-c/jsf_phaselistener_ajax.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1801897191064504903.post-6737027849805629254</guid><pubDate>Fri, 26 Dec 2008 20:52:00 +0000</pubDate><atom:updated>2008-12-26T21:44:16.477-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">asp.net ajax</category><category domain="http://www.blogger.com/atom/ns#">callback</category><category domain="http://www.blogger.com/atom/ns#">callbacks</category><category domain="http://www.blogger.com/atom/ns#">dataitem</category><category domain="http://www.blogger.com/atom/ns#">json</category><category domain="http://www.blogger.com/atom/ns#">json converter</category><category domain="http://www.blogger.com/atom/ns#">json serializer</category><category domain="http://www.blogger.com/atom/ns#">scriptblock</category><title>Passing Callbacks as asp.net ajax DataItems or ScriptBlocks without piggybacking on an ESRI web adf control</title><description>&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;In the previous post I talked about passing callbackresults collection from web adf controls as DataItems on the ScriptManager back to the client-side code for processing (updating client-side rendered controls). What if we didn&#39;t want to piggyback on a web adf control and append to its callbacks, what if we just want to pass a javascript as callbacks without piggybacking?
&lt;/span&gt;
&lt;/div&gt;
&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;
&lt;/span&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;This is possible using a JSON serializer, and which is what i talk about in this post. &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;Usually this is what we do: &lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;1) take a map control or task control  and add callbacks to it, e.g.  
     &lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(153, 0, 0);&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:&#39;courier new&#39;;&quot;&gt;Map1.Callbacks.AddRange(TaskResults1.Callbacks)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;          OR&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;     &lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(153, 0, 0);&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:&#39;courier new&#39;;&quot;&gt;Map1.Callbacks.Add(CallbackResult.CreateJavaScript(&quot;alert(&#39;hi&#39;);&quot;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;2) Then we serialize it to json: &lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(153, 0, 0);&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:&#39;courier new&#39;;&quot;&gt;Map1.Callbacks.ToString()&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;3) Then we register it as DataItems on the ScriptManager control
        &lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(153, 0, 0);&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:&#39;courier new&#39;;&quot;&gt;myScriptMgr.RegisterDataItem(Page, Map1.Callbacks.ToString())&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;4) The asp.net ajax framework sends that dataItem string to the client, and we
      have a js handler that takes all DataItems from the Page (&quot;__Page&quot;) and&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;      processes it, usually by passing the dataItem string to the js function,
      &lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(153, 0, 0);&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:&#39;courier new&#39;;&quot;&gt;ESRI.ADF.System.processCallbackResult(dataItemString)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;Now if we skip step(1),  and add callbacks to an empty callbackresultcollection, e.g.
&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:x-small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(153, 0, 0);&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:&#39;courier new&#39;;&quot;&gt;new CallbackResultCollection.add(CallbackResult.CreateJavascript(&quot;alert(&#39;hi&#39;);&quot;))&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;,
it won&#39;t be serialized properly and will not work. &lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;There&#39;s two ways to pass javascript back to the client without a web adf component: &lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;1) We can make use of the backward compatibility for AGS9.2 callback framework in the ESRI.ADF.System.js file, method: processCallbackResult. But note that we are not using the callback framework, we are just passing a string that makes use of that old format, e.g.&lt;/div&gt;&lt;div&gt;pass the below as a dataitem or scriptblock:&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:&#39;courier new&#39;;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(153, 0, 0);&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;&quot;///:::///:::javascript::: alert(&#39;hi&#39;);&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;2) We can pass the new format, which is a json formatted data, for example:&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(153, 0, 0);&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:&#39;courier new&#39;;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;&#39;[{&quot;id&quot;:null,&quot;type&quot;:&quot;&quot;,&quot;action&quot;:&quot;javascript&quot;,&quot;params&quot;:[&quot;alert(\u0027 --hi-- \u0027);&quot;]}]&#39;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(153, 0, 0);&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:&#39;courier new&#39;;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;Dim jsonCallback As String = &quot;[{{ {0}id{0}:null,{0}type{0}:{0}{0},{0}action{0}:{0}javascript{0},{0}params{0}:[{0}{1}{0}]}}]&quot;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: rgb(153, 0, 0);&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:&#39;courier new&#39;;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;ScriptManager1.RegisterDataItem(Page, String.Format(jsonCallback, ControlChars.Quote, &quot;alert(&#39;hi);&quot;))&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;
&lt;/div&gt;
&lt;pre name=&quot;code&quot; class=&quot;vb.net&quot;&gt;
&#39;&#39;&#39; &amp;lt;summary&amp;gt;
&#39;&#39;&#39; To create an ESRI ADF usable json formatted response that can be processed by
&#39;&#39;&#39; client-side js function:
&#39;&#39;&#39; ESRI.ADF.System.processCallbackResult(string),
&#39;&#39;&#39;
&#39;&#39;&#39; where an example of string is:
&#39;&#39;&#39; [{&quot;id&quot;:null,&quot;type&quot;:&quot;&quot;,&quot;action&quot;:&quot;javascript&quot;,&quot;params&quot;:[&quot;alert(\u0027 --hi-- \u0027);&quot;]}]
&#39;&#39;&#39;
&#39;&#39;&#39; &amp;lt;/summary&amp;gt;
&#39;&#39;&#39; &amp;lt;param name=&quot;paramValue&quot;&amp;gt;depends on the action type, e.g. js code snippet, html code snippet etc
&#39;&#39;&#39;&amp;lt;/param&amp;gt;
&#39;&#39;&#39; &amp;lt;param name=&quot;action&quot;&amp;gt;valid values:
&#39;&#39;&#39; javascript, content, innercontent, set, invoke, image, include
&#39;&#39;&#39;&amp;lt;/param&amp;gt;
&#39;&#39;&#39; &amp;lt;returns&amp;gt;json formatted callback result to be handled by ESRI.ADF.System.processCallbackResult(result)&amp;lt;/returns&amp;gt;
&#39;&#39;&#39; &amp;lt;remarks&amp;gt;&amp;lt;/remarks&amp;gt;
Public Function createJsonCallbackResult(ByVal paramValue As String, ByVal action As String) As String
 Dim params() As String = {paramValue}
 Dim hash As Hashtable = New Hashtable()
 hash.Add(&quot;id&quot;, Nothing)
 hash.Add(&quot;type&quot;, &quot;&quot;)
 hash.Add(&quot;action&quot;, action)
 hash.Add(&quot;params&quot;, params)

 Dim jsonConverter As System.Web.Script.Serialization.JavaScriptSerializer = New System.Web.Script.Serialization.JavaScriptSerializer()
 Dim jsonResponseStr As String = jsonConverter.Serialize(hash)
 &#39;Dim jsonCallback As String = &quot;[{{ {0}id{0}:null,{0}type{0}:{0}{0},{0}action{0}:{0}javascript{0},{0}params{0}:[{0}{1}{0}]}}]&quot;
 Return jsonResponseStr
End Function
&lt;/pre&gt;</description><link>http://arcgisdeveloper.blogspot.com/2008/12/passing-callbacks-as-aspnet-ajax.html</link><author>noreply@blogger.com (arcgis_developer)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1801897191064504903.post-3968586322849199951</guid><pubDate>Fri, 26 Dec 2008 16:18:00 +0000</pubDate><atom:updated>2009-04-22T19:52:40.103-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.net web adf</category><category domain="http://www.blogger.com/atom/ns#">asp.net ajax</category><category domain="http://www.blogger.com/atom/ns#">async postback</category><category domain="http://www.blogger.com/atom/ns#">dataitem</category><category domain="http://www.blogger.com/atom/ns#">partial postback</category><title>Async/Partial Postbacks from client-side javascript and passing arguments to update web ADF controls and others.</title><description>&lt;b&gt;A mechanism for making partial postbacks from client-side scripts and passing arguments&lt;/b&gt;

Pros:
1) easily to call server-side page/code-behind methods using javascript and pass arguments.
2) easily add new methods to be called with minimal modification to page, code etc.
3) extensible: pass in as many args as necessary, change # of args
4) Update web adf controls, custom controls that implement ICallbackEventHandler &amp;amp; IPostbackEventHandler
5) Update UpdatePanels
6) Update other controls via javascript

Cons:
1) Not the most elegant
2) Not a great framework
3) Not usable if Page implements ICallbackEventHandler
4) ...???...

&lt;hr /&gt;
First step is to cause a partial postback (aka sync postback) from a button (doesn&#39;t have to be inside an UpdatePanel) which will update web ADF controls  (or updatePanels) and/or execute javascript response from server. The js response can also be used to update other client-side controls.
Code that goes in the aspx page to create the hidden web controls.&lt;span class=&quot;Apple-style-span&quot; style=&quot;white-space: pre;font-family:-webkit-monospace;font-size:13;&quot;  &gt; &lt;/span&gt;

&lt;i&gt;Here&#39;s the declarative code for the hidden button and a textbox for accepting arguments:&lt;/i&gt;
&lt;pre name=&quot;code&quot; class=&quot;xml&quot;&gt;
&lt;!-- HIDDEN PARAMETERS --&gt;
&lt;div id=&quot;hidden_input_div&quot; style=&quot;visibility: hidden; display: none; height: 0px; width: 0px; position: absolute;&quot;&gt;
&lt;!-- this textbox is used to pass parameters/args to the server --&gt;
&lt;asp:textbox id=&quot;evtArgsTxtBox&quot; runat=&quot;server&quot;&gt;&lt;/asp:textbox&gt;
&lt;!-- this button is used to cause programmatic partial postbacks using javascript --&gt;
&lt;asp:button id=&quot;hiddenButton1&quot; runat=&quot;server&quot; text=&quot;Hidden Button&quot;&gt;&lt;/asp:button&gt;
&lt;/div&gt;
&lt;/pre&gt;

&lt;b&gt;&lt;i&gt;Server-side Code to register the web controls which will cause Async Postback:&lt;/i&gt;&lt;/b&gt;
&lt;pre name=&quot;code&quot; class=&quot;vb.net&quot;&gt;
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim sMgr1 As ScriptManager = ScriptManager.GetCurrent(Page)
&#39; Register the controls that will issue postbacks asynchronously.  Note that controls
&#39; registered in this way must implement either INamingContainer, IPostBackDataHandler, or
&#39; IPostBackEventHandler.
&#39; These controls do not need to be contained in an UpdatePanel, and if they are, then
&#39; there is no need to register them this way, they are already async enabled.

If (sMgr1 IsNot Nothing) Then
sMgr1.RegisterAsyncPostBackControl(div1_btn1)
sMgr1.RegisterAsyncPostBackControl(hiddenButton1)
End If
End Sub
&lt;/pre&gt;


Because partial postbacks go through the entire apsx page lifecycle, regular asp.net web control properties are updated during the &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/aa720471%28VS.71%29.aspx&quot;&gt;&#39;process postback data&#39;&lt;/a&gt; phase for a webcontrol (more: &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/aa719775.aspx&quot;&gt;webcontrol execution lifecyle&lt;/a&gt;).
In this case the TextBox webcontrol, &#39;evtArgsTxtBox.Text&#39; property is updated during partial postback and the value set by the client-side js is available on the server. Alternatively if this approach doesn&#39;t work, you can also retrieve post values from the QueryString, Page.Request.Params[&#39;evtArgsTxtBox&#39;]

Inside the server-side method, we can update esri web adf controls very easily, we can also update any other control inside an asp.net ajax UpdatePanel. Once the web adf controls are updated, their changed client-side state is collected as Callbacks. The callbacks are passed to the client-side js function so that the esri web adf js framework can update the web adf controls. In this case we are serializing the web adf control callbacks as json and passing them to the client as asp.net ajax DataItems, which will then be evaluated by the client-side function ESRI.ADF.System.processCallbackResult(&#39;string&#39;). For asp.net controls inside an UpdatePanel, we do not need to pass any js to the client, those controls are rendered and the asp.net ajax framework handles the update automatically.

I use &lt;a href=&quot;http://www.ben-rush.net/blog/PermaLink.aspx?guid=b7868d12-1147-49f4-8a35-df70102acc65&amp;amp;dotnet=consultant&quot;&gt;RegisterDataItem()&lt;/a&gt; instead of the &lt;a href=&quot;http://www.asp.net/Ajax/Documentation/Live/mref/M_System_Web_UI_ScriptManager_RegisterClientScriptBlock_5_0feb167c.aspx&quot;&gt;ClientScriptBlock()&lt;/a&gt; for the ScriptManager control because using the latter causes script bloating inside the head element of the page. Observe that with firebug.

&lt;b&gt;&lt;i&gt;Server-side code to handle the async/partial postback from asp:button, &#39;hiddenButton1&#39; click event:&lt;/i&gt;&lt;/b&gt;
&lt;pre name=&quot;code&quot; class=&quot;vb.net:collapse&quot;&gt;
Protected Sub hiddenButton1_Load(ByVal sender As Object, ByVal e As System.EventArgs)
&#39;always  executed
logger.Debug(&quot;HiddenButton1.Load event ...&quot;)
End Sub

&#39;&#39;&#39; * The purpose of this function is to execute server-side code/methods
&#39;&#39;&#39;   which are invoked from clientside js.
&#39;&#39;&#39; * It also receives arguments passed from the client.
&#39;&#39;&#39; * This method can only work with partial page postback and can only
&#39;&#39;&#39;   update server web controls of type:
&#39;&#39;&#39;   1) web adf controls since they impelemt IPostbackEventHandler and ICallbackEventHandler
&#39;&#39;&#39;   2) controls inside UpdatePanels
&#39;&#39;&#39;
&#39;&#39;&#39; It can also pass javascript back to the client for execution, and so other
&#39;&#39;&#39; controls can be updated via js code.
&#39;&#39;&#39;
&#39;&#39;&#39; The hidden asp.net textbox contol, &#39;evtArgsTxtBox&#39; contains the argument for this method.
&#39;&#39;&#39; That textbox.value is populated by client-side js.
&#39;&#39;&#39; The format for the value is:
&#39;&#39;&#39;  @executionKeyword:@arg1
&#39;&#39;&#39;
&#39;&#39;&#39; Note that the value for @arg1 can be in any format,
&#39;&#39;&#39; e.g.
&#39;&#39;&#39; when calling DisplayLayers(), @arg1 format is &quot;layer1;layer2;layer3&quot;
&#39;&#39;&#39; when calling FindAddress(),
&#39;&#39;&#39;    @arg1 format is &quot;123 Main St&quot;
&#39;&#39;&#39;    or for finding intersections &quot;Main St &amp;amp; Pole St&quot;
Protected Sub hiddenButton1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles hiddenButton1.Click

Me.layerNamesEvtArg = Nothing

Dim eventArgument As String = evtArgsTxtBox.Text
logger.Debug(&quot;Handling Control Event, hiddenButton1.Click, EvtArg received: &quot; &amp;amp; eventArgument)
evtArgsTxtBox.Text = &quot;&quot;

Dim scriptMgr As ScriptManager = ScriptManager.GetCurrent(Page)
If (scriptMgr IsNot Nothing And Not scriptMgr.IsInAsyncPostBack) Then
&#39;DataItems &amp;amp; ScriptBlocks can only be registered during Partial Postbacks.
Return
End If

Dim jsCodeResetTxtBox As String = &quot;$get(&#39;&quot; + evtArgsTxtBox.ClientID + &quot;&#39;).value = &#39;&#39;;&quot;
Dim evtArgsCallback As CallbackResult = CallbackResult.CreateJavaScript(jsCodeResetTxtBox)

If (String.IsNullOrEmpty(eventArgument)) Then
logger.Warn(&quot;eventArgument is null or empty&quot;)
Dim jsCodeToExec As String = &quot;alert(&#39;eventArg was not set:&quot; + eventArgument + &quot;&#39;)&quot;

&#39;Doesn&#39;t work
Dim cbResp As String = CallbackResult.CreateJavaScript(jsCodeToExec).ToString()
&#39;This works
cbResp = &quot;[&quot; &amp;amp; createJsonCallbackResult(jsCodeToExec, &quot;javascript&quot;) _
&amp;amp; &quot;,&quot; &amp;amp; createJsonCallbackResult(jsCodeResetTxtBox, &quot;javascript&quot;) &amp;amp; &quot;]&quot;

ScriptManager1.RegisterDataItem(Page, cbResp)
Return
End If

eventArgument = eventArgument.Trim()

If eventArgument.Contains(&quot;ClearHighlight&quot;) Then
ClearHighlight()
Map1.CallbackResults.Add(evtArgsCallback)
Map1.CallbackResults.Add(CallbackResult.CreateJavaScript(&quot;clearClientsideMapGraphics();&quot;))
scriptMgr.RegisterDataItem(Page, Map1.CallbackResults.ToString)
ElseIf eventArgument.Contains(&quot;SuggestPossibleMatches&quot;) Then
Dim jsCode As String = &quot;///:::///:::javascript::: alert(&quot;&quot;some message&quot;&quot;);&quot;
Dim jsCodeCallback As String = String.Format(&quot;ESRI.ADF.System.processCallbackResult(&#39;{0}&#39;);&quot;, _
    jsCode.Replace(&quot;\&quot;, &quot;\\&quot;))
ScriptManager.RegisterClientScriptBlock(Page, sender.GetType, _
                &quot;SuggestPossibleMatches_Click&quot;, jsCodeCallback, True)

ElseIf eventArgument.Contains(&quot;FindAddress&quot;) Then
Dim jsCode As String = FindAddressPartialPostback(eventArgument)
Map1.CallbackResults.Add(evtArgsCallback)
Map1.CallbackResults.Add(CallbackResult.CreateJavaScript(&quot;log(&#39;executed FindAddress() on server&#39;);&quot;))

&#39;-----------Client ScriptBlock approach-----------:
&#39;Dim mapCallbackResult As String = String.Format(&quot;ESRI.ADF.System.processCallbackResult(&#39;{0}&#39;);&quot;, _
&#39;    Map1.CallbackResults.ToString().Replace(&quot;\&quot;, &quot;\\&quot;))
&#39;Dim sumCallbackResult As String = mapCallbackResult &amp;amp; &quot;;&quot; &amp;amp; jsCode
&#39;    ScriptManager.RegisterClientScriptBlock(Page, sender.GetType, &quot;hiddenButton1_Click&quot;, sumCallbackResult, True)

&#39;-----------DataItem approach------------:
If (Not eventArgument.Contains(&quot;&amp;amp;&quot;)) Then
    &#39;only if it is an address search, update FindAddress Panel
    Map1.CallbackResults.Add(CallbackResult.CreateJavaScript(jsCode))
End If
scriptMgr.RegisterDataItem(Page, Map1.CallbackResults.ToString)

ElseIf eventArgument.Contains(&quot;FindStreet&quot;) Then
Dim jsCode As String = FindByStreetName(eventArgument)
Map1.CallbackResults.Add(evtArgsCallback)
Map1.CallbackResults.Add(CallbackResult.CreateJavaScript(&quot;log(&#39;executed FindByStreetName() on server&#39;);&quot;))
scriptMgr.RegisterDataItem(Page, Map1.CallbackResults.ToString)
ElseIf eventArgument.Contains(&quot;FindFolioNumber&quot;) Then
FindParcelByFolioNumber(eventArgument)
Map1.CallbackResults.Add(evtArgsCallback)
scriptMgr.RegisterDataItem(Page, Map1.CallbackResults.ToString)
ElseIf eventArgument.Contains(&quot;DisplayLayers&quot;) Then
Dim jsCode As String = DisplayLayers(eventArgument)
Map1.CallbackResults.Add(evtArgsCallback)
scriptMgr.RegisterDataItem(Page, Map1.CallbackResults.ToString)
ElseIf eventArgument.Contains(&quot;SaveMapToFile&quot;) Then
Dim jsCode As String = SaveMapToFile(eventArgument)
If (jsCode IsNot Nothing) Then
    Map1.CallbackResults.Add(evtArgsCallback)
    Map1.CallbackResults.Add(CallbackResult.CreateJavaScript(&quot;log(&#39;executed SaveMapToFile() on server&#39;);&quot;))
    Map1.CallbackResults.Add(CallbackResult.CreateJavaScript(jsCode))
    scriptMgr.RegisterDataItem(Page, Map1.CallbackResults.ToString)
End If

End If

End Sub
&lt;/pre&gt;

&lt;b&gt;&lt;i&gt;Client-side code to handle the DataItems passed from asp.net ajax framework.
Note that this js code must be executed after the asp.net ajax js libraries &amp;amp; esri web adf have been loaded on client and all page elements have been loaded. Therefore, this can be declared at the bottom of the aspx page. &lt;/i&gt;&lt;/b&gt;
&lt;pre name=&quot;code&quot; class=&quot;jscript:collapse&quot;&gt;
Sys.Application.add_init(initAppEventHandler);

function initAppEventHandler(sender) {
var prm = Sys.WebForms.PageRequestManager.getInstance();
if (!prm.get_isInAsyncPostBack()) {   
   //to handle dataItems that are sent back during a PartialPostBack
   prm.add_pageLoading(partialPostBackDataItemHandler);   
}
}

function partialPostBackDataItemHandler(sender, args) {
if (_dataItems[&#39;__Page&#39;] != null) {
   ESRI.ADF.System.processCallbackResult(_dataItems[&#39;__Page&#39;]);
}

if (_dataItems[&#39;_SOME_CONTROL_NAME&#39;] != null) {
   //do something, like replace contents of a server-side web control
   //$get(&#39;_SOME_CONTROL_NAME&#39;).innerHTML = dataItems[&#39;_SOME_CONTROL_NAME&#39;];
}

//... and so on. handle other dataItems passed from server.
}
&lt;/pre&gt;

There&#39;s one more thing we need to add to be able to use these functions defined in our MyPage.aspx from client-side javascript code. Due to a bug in firefox and sometimes security limitations on asp.net ajax library, javascript code may not be able to simulate an user-event, e.g. click. Which means. $get(&#39;hiddenButton1&#39;).click() may not work in firefox or other browsers. &lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-style: italic;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-style: italic; font-weight: bold;&quot;&gt;
&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-style: italic;&quot;&gt;To fix this we need to use the below code:&lt;/span&gt;&lt;/span&gt;
&lt;pre name=&quot;code&quot; class=&quot;jscript:collapse&quot;&gt;
/**
Why create this method?
someButton.click() - doesn&#39;t work as desired on firefox, we wanted it to
fire a partial page postback using asp.net ajax ScriptManager, but it
caused the whole page to reload. It works fine in IE7 though.

Mozilla/Firefox incorrectly generates the default action for mouse and
printable character keyboard events, when they are dispatched on form
elements.
Ref:
http://forums.asp.net/p/1343661/2728613.aspx
http://www.howtocreate.co.uk/tutorials/javascript/domevents (browse down to &#39;Manually firing events&#39;
google search: manaully fire event, fireforx fire an event
*/
function fireClickEvent(elemName) {
var el = $get(elemName);
if (el) {
   if (el.fireEvent) { //IE
       el.click();
       /*
       if (isIE())
           el.click();
       else
           el.fireEvent(&quot;onclick&quot;);
       */
   } else { //firefox
       var clickEvt = window.document.createEvent(&quot;MouseEvent&quot;);
       //initEvent(evtName, bubbles?, cancellable?)
       clickEvt.initEvent(&quot;click&quot;, true, true);
       el.dispatchEvent(clickEvt);
   }
} else {
   alert(&quot;Unable to send Partial Postback to server&quot;
     +&quot;\nUnable to find DOM element with ID &#39;&quot;+elemName+&quot;&#39;&quot;);
}
}

&lt;/pre&gt;

Now, finally the fun part, using what we just built. Let&#39;s say we wanted to invoke the FindAddress() method on our MyPage.aspx page and pass in the arguments. On the server, the FindAddress() method would display the results in the TaskResults control, zoom in to the result on the map and highlight the result. The TaskResults, and Map web adf controls can be updated on the server and their changes will be reflected on the server as long as we pass their CallbackResult collections to the client and invoke the js method, processCallbackResult(...).

&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-style: italic;&quot;&gt;Client-side javascript code to invoke MyPage.aspx.cs.FindAddress() server-side method:&lt;/span&gt;&lt;/span&gt;
&lt;pre name=&quot;code&quot; class=&quot;jscript&quot;&gt;
//write code to get the value for street, city etc.
var message = &quot;FindAddress:&quot;+address;
$get(&#39;evtArgsTxtBox&#39;).value = message;
fireClickEvent(&#39;hiddenButton1);
&lt;/pre&gt;

&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-style: italic;&quot;&gt;Server-side FindAddress() method:&lt;/span&gt;&lt;/span&gt;
&lt;pre name=&quot;code&quot; class=&quot;vb.net:collapse&quot;&gt;
&#39;&#39;&#39;@param eventArgument = &quot;FindAddress: 123 Main St&quot; or
&#39;&#39;&#39;   &quot;FindAddress: Main St &amp;amp; Pole St&quot;
Private Function FindAddress(ByVal eventArgument As String) As String

   Dim responseSearch As String = &quot;&quot;
   Dim responseMap As String = &quot;&quot;
   Dim sResults As String = &quot;&quot;

   Dim argArray() As String = eventArgument.Split(&quot;:&quot;)
   Dim searchtype As String = argArray(0)
   Dim searchvalue As String = argArray(1)
   Dim searchArray() As String = Split(searchvalue, &quot;;&quot;)
   Dim datasetLabel As String = &quot;&quot;
   datasetLabel = &quot;Address: &quot; &amp;amp; searchvalue

   Dim gisresource As ESRI.ArcGIS.ADF.Web.DataSources.IGISResource = _
           GeocodeResourceManager1.GetResource(0)
   If Not GeocodeResourceManager1.Initialized Then
       GeocodeResourceManager1.Initialize()
   End If
   If Not gisresource.Initialized Then
       gisresource.Initialize()
   End If
   Dim igf As ESRI.ArcGIS.ADF.Web.DataSources.IGeocodeFunctionality = gisresource.CreateFunctionality(GetType(ESRI.ArcGIS.ADF.Web.DataSources.IGeocodeFunctionality), Nothing)

   Dim addressfields As System.Collections.Generic.List(Of ESRI.ArcGIS.ADF.Web.Geocode.Field) = igf.GetAddressFields()

   Dim avc As New System.Collections.Generic.List(Of ESRI.ArcGIS.ADF.Web.Geocode.AddressValue)
   Dim av1 As New ESRI.ArcGIS.ADF.Web.Geocode.AddressValue(&quot;STREET&quot;, searchArray(0))
   &#39; how to find intersection? Example:
   &#39; Dim av3 As New ESRI.ArcGIS.ADF.Web.Geocode.AddressValue(&quot;STREET&quot;, &quot;pepperfish bay &amp;amp; harbor view way&quot;)
   avc.Add(av1)
   If searchArray.Length &gt; 1 Then
       Dim av2 As New ESRI.ArcGIS.ADF.Web.Geocode.AddressValue(&quot;ZONE&quot;, searchArray(1))
       avc.Add(av2)
   End If

   Dim dt As System.Data.DataTable
   Dim recordcount As Integer
   igf.MinCandidateScore = 30
   igf.MinMatchScore = 60
   igf.ShowAllCandidates = True
   dt = igf.FindAddressCandidates(avc, False, True)

   Dim showTaskResultsFP As CallbackResult = _
     CallbackResult.CreateJavaScript( _
     &quot; var __trpElem = $find(&#39;TaskResultsPanel&#39;);&quot; &amp;amp; _
     &quot; if (__trpElem &amp;amp;&amp;amp; __trpElem.show) __trpElem.show();&quot;)

   If (dt IsNot Nothing And dt.Rows IsNot Nothing And dt.Rows.Count &gt; 0) Then
       dt.TableName = datasetLabel
       recordcount = dt.Rows.Count

       &#39;TODO optionally remove duplicates if a perfect match

       sResults = CreateLocationsTable(dt)
       Dim taskResultCBR As CallbackResultCollection = _
ADFUtils.GetInstance().AddToTaskResults(Map1, dt, &quot;TaskResults1&quot;, Nothing, Nothing, Nothing, datasetLabel)
       Map1.CallbackResults.AddRange(taskResultCBR)
       Map1.CallbackResults.Add(showTaskResultsFP)

       If dt.Rows.Count = 1 Then
           Map1.Extent = GetFirstFeatureExtent(dt)
       Else
           &#39;Map1.RefreshResource(&quot;Graphics&quot;)
       End If

   Else
       dt = New DataTable(datasetLabel)
       Dim dc1 As DataColumn = New DataColumn(&quot;Search&quot;)
       dt.Columns.Add(dc1)
       Dim dr1 As DataRow = dt.NewRow()
       dr1(dc1) = &quot;returned no results&quot;
       dt.Rows.Add(dr1)

       Dim str As SimpleTaskResult = New SimpleTaskResult(&quot;Find Intersection (0) : None&quot;, &quot;No results found&quot;)
       TaskResults1.DisplayResults(Nothing, Nothing, Nothing, str)
       Dim taskResultCBR As CallbackResultCollection = TaskResults1.CallbackResults
       Map1.CallbackResults.AddRange(taskResultCBR)
       Map1.CallbackResults.Add(showTaskResultsFP)
       sResults = &quot;&lt;b&gt;&quot; &amp;amp; datasetLabel &amp;amp; &quot;&lt;/b&gt;
No matching locations found&quot;

   End If

   responseSearch = &quot;showResultsAddress(&quot;&quot;&quot; &amp;amp; sResults &amp;amp; &quot;&quot;&quot;);&quot;
   Return responseSearch

End Function
&lt;/pre&gt;

Using this pattern, we can easily add new methods, call those methods from javascript and modify existing methods.

References and more info:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://resources.esri.com/help/9.3/arcgisserver/adf/dotnet/developer/ADF/ajax_postbackmodel.htm&quot;&gt;ESRI discussion on using this approach&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://resources.esri.com/help/9.3/arcgisserver/adf/dotnet/developer/samples/Web_Applications/Common_PartialPostback/171DE35A-20B1-4B8E-BE8E-A8781F5B659F.htm&quot;&gt;ESRI web adf app sample on using Partial Postbacks&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://forums.esri.com/Thread.asp?c=158&amp;amp;f=2276&amp;amp;t=262670&quot;&gt;Similar approach for updating web ADF controls&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;</description><link>http://arcgisdeveloper.blogspot.com/2008/12/asyncpartial-postbacks-from-client-side.html</link><author>noreply@blogger.com (arcgis_developer)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1801897191064504903.post-6654007091096982501</guid><pubDate>Tue, 23 Dec 2008 18:54:00 +0000</pubDate><atom:updated>2008-12-23T12:40:32.331-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">adf.net</category><category domain="http://www.blogger.com/atom/ns#">arcgis server</category><category domain="http://www.blogger.com/atom/ns#">asp.net</category><category domain="http://www.blogger.com/atom/ns#">authentication</category><category domain="http://www.blogger.com/atom/ns#">login</category><category domain="http://www.blogger.com/atom/ns#">task framework</category><title>Authentication/Login based ArcGIS ADF Task</title><description>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTdWg_98Tw5kjoGqydz_O2D2cWKjbN-HqduYqOUf2wMYx4zBOGsayntM3fnmKRnK0-dU4VmHhGdWA0gdsfA8WH59FmdBVx-TTmmJthvLN2a-R6pP0TV5RAKLsiB_gFAOxF-CLgWeUQrRg/s1600-h/SearchCIPTask_NotLoggedIn.JPG&quot;&gt;&lt;img style=&quot;float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 315px; height: 190px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTdWg_98Tw5kjoGqydz_O2D2cWKjbN-HqduYqOUf2wMYx4zBOGsayntM3fnmKRnK0-dU4VmHhGdWA0gdsfA8WH59FmdBVx-TTmmJthvLN2a-R6pP0TV5RAKLsiB_gFAOxF-CLgWeUQrRg/s400/SearchCIPTask_NotLoggedIn.JPG&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5283086906108742978&quot; /&gt;&lt;/a&gt;

&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7soYRXUog92_mDBFbZDyH2BGO64ZtGogSr-7AlhA2l8_ULuhfZ3Ovoi-jDRMROViykUp-ASJDKcrlNcMfeJuYCKrsiHMvrac7iLquzZ0gkQR_LeQyaaGY_WbIUnGhoBeE31o9AXPb4eA/s1600-h/SearchCIPTask_LoggedIn.JPG&quot;&gt;&lt;img style=&quot;float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 400px; height: 308px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi7soYRXUog92_mDBFbZDyH2BGO64ZtGogSr-7AlhA2l8_ULuhfZ3Ovoi-jDRMROViykUp-ASJDKcrlNcMfeJuYCKrsiHMvrac7iLquzZ0gkQR_LeQyaaGY_WbIUnGhoBeE31o9AXPb4eA/s400/SearchCIPTask_LoggedIn.JPG&quot; border=&quot;0&quot; alt=&quot;&quot;id=&quot;BLOGGER_PHOTO_ID_5283087096084858274&quot; /&gt;&lt;/a&gt;

&lt;br/&gt;
How do you use the ArcGIS Server .net ADF Task Framework to create a Task which will take into account whether an user is authenticated or logged in?

Easy. Basically, we can extend any ADF task or override the &lt;span style=&quot;font-weight: bold;&quot;&gt;Render &lt;/span&gt;method to render only when logged in. We use a session variable to indicate if user is logged in. The benefits of this is that we can use any type of login mechanism, asp.net&#39;s login control, or anything else, as long as we set a session variable to indicate login status when the user is logged in. If we use asp.net&#39;s login control, we can set an eventHandler for loggedIn event to set the session variable.

The code below extends the out of the box SearchAttributesTask from the ADF so that it renders only when our user is logged in. Now note that this customTask is not a full blown task, it is just a class that extends an existing task, as simple as that.
&lt;pre name=&quot;code&quot; class=&quot;vb&quot;&gt;
Imports Microsoft.VisualBasic
Imports ESRI.ArcGIS.ADF.Tasks
Imports log4net
Imports ESRI.ArcGIS.ADF.Web.UI.WebControls

Namespace WebMapApp
    Public Class LoginBasedSearchAttributesTask
        Inherits SearchAttributesTask

        Private Shared ReadOnly logger As ILog = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)


        Public Overrides Sub ExecuteTask()
            MyBase.ExecuteTask()
        End Sub

        Protected Overrides Sub OnLoad(ByVal e As System.EventArgs)
            MyBase.OnLoad(e)
        End Sub

        Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)

            Dim Session As HttpSessionState = HttpContext.Current.Session
            Dim isRenderObj As Object = Session(&quot;loggedInSuccess&quot;)
            If (isRenderObj IsNot Nothing) Then
                Dim isRender As Boolean = CType(isRenderObj, Boolean)
                If (isRender) Then
                    MyBase.Render(writer)
                Else
                    writer.RenderBeginTag(&quot;div&quot;)
                    writer.AddStyleAttribute(HtmlTextWriterStyle.Color, &quot;red&quot;)
                    writer.AddStyleAttribute(HtmlTextWriterStyle.FontSize, &quot;9pt&quot;)
                    writer.Write(&quot;You are required to login to use this task, to login go to the CIP menu and then Login&quot;)
                    writer.RenderEndTag()
                    Return
                End If
            End If

        End Sub

    End Class
End Namespace

&lt;/pre&gt;

There&#39;s one more thing left, we need to write the declarative code inside default.aspx for this CustomTask. We should note that the Render() method is called during partial page postbacks or full postbacks, and not during callbacks. So this approach won&#39;t work without a asp.net ajax ScriptManager (e.g. in ADF9.2 apps). We wrap our task inside an ajax:UpdatePanel, and then put that ajax:UpdatePanel inside another esri:FloatingPanel. 

Note, that the updateMode is set to conditional for efficiency reasons, minimizing http response from the server on every postback. Because of this we need to manually update the UpdatePanel, so when the user logins, the codebehind page should call &lt;span style=&quot;font-weight:bold;&quot;&gt;SearchCIPUP.update()&lt;/span&gt;, so that this task is re-rendered. 

Because our custom task is inside another FloatingPanel, we should remember to disable the visual elements, e.g. titlebar, closebutton, borders etc of the inner-task, as shown below.

&lt;pre name=&quot;code&quot; class=&quot;xml&quot;&gt;
    &lt;esri:FloatingPanel ID=&quot;FP2&quot; runat=&quot;server&quot;
        style=&quot;z-index:500; position: absolute; left: 250px; top: 200px&quot;
        Font-Bold=&quot;false&quot;
  Visible=&quot;True&quot; ExpandCollapseButton=&quot;False&quot; 
  Title=&quot;Search CIP Task&quot; TitleBarColor=&quot;WhiteSmoke&quot; TitleBarForeColor=&quot;White&quot;   
  Height=&quot;100px&quot; Width=&quot;250px&quot; WidthResizable=&quot;False&quot; HeightResizable=&quot;False&quot; Docked=&quot;False&quot; 
     EnableViewState=&quot;False&quot;&gt;    
        &lt;asp:UpdatePanel ID=&quot;SearchCIPUP&quot; runat=&quot;server&quot; UpdateMode=&quot;Conditional&quot; ChildrenAsTriggers=&quot;true&quot;&gt;
            &lt;ContentTemplate&gt;
                &lt;uc1:LoginBasedSearchAttributesTask ID=&quot;SearchCIPTask&quot; runat=&quot;server&quot; 
                    Style=&quot;position:relative;top:0px;left:0px;&quot;
                    Width=&quot;200px&quot; Visible=&quot;True&quot;
                    BackColor=&quot;White&quot; 
                    Font-Names=&quot;Verdana&quot; Font-Size=&quot;8pt&quot; ForeColor=&quot;Black&quot;
                    TitleBarHeight=&quot;0px&quot;
                    Transparency=&quot;30&quot;  
                    ActivityIndicatorImage=&quot;~/images/LoadingProgressBar.gif&quot;         
                    FeatureHighlightColor=&quot;Coral&quot; 
                    FeatureSelectionColor=&quot;Aqua&quot;
                    TitleBarSeparatorLine=&quot;False&quot;                    
                    ToolTip=&quot;Searches Multiple Layers for Tag #&quot;                 
                    Title=&quot;Search CIP Task&quot; 
                    LabelText=&quot;Search for CIP Tag #&quot;                    
                    UseCustomLayerFormat=&quot;True&quot; 
                    SearchFields=&quot;.............&quot;
                    CustomLayerFormats=&quot;..............&quot; 
                    WebResourceLocation=&quot;/aspnet_client/ESRI/WebADF/&quot;
                    DockingContainerElementID=&quot;TaskManager2_FP2_Contents&quot;
                    HeightResizable=&quot;False&quot; 
                    ExpandCollapseButton=&quot;False&quot; 
                    Draggable=&quot;False&quot; 
                    Docked=&quot;True&quot; 
                    CloseButton=&quot;False&quot; 
                    TitleBarCssClass=&quot;SearchCIPTaskTitleBarCSS&quot; 
                    CssClass=&quot;SearchCIPTaskCSS&quot;                    
                    EnableViewState=&quot;False&quot;&gt;
                    &lt;TaskResultsContainers&gt;
                        &lt;esri:BuddyControl Name=&quot;TaskResults1&quot; /&gt;
                    &lt;/TaskResultsContainers&gt;
                &lt;/uc1:LoginBasedSearchAttributesTask&gt;                
            &lt;/ContentTemplate&gt;
        &lt;/asp:UpdatePanel&gt;
    &lt;/esri:FloatingPanel&gt;

&lt;/pre&gt; 

The CSS code: 
&lt;pre name=&quot;code&quot; class=&quot;css&quot;&gt;
        .SearchCIPTaskTitleBarCSS
        {
         display:none;
         visibility:hidden;
         width:0px;
         height:0px;
        }
        .SearchCIPTaskCSS
        {
         height:100%;
         width:100%;
         border: none 0px transparent;
         position: relative;
         background-color:White;
        }
&lt;/pre&gt;

There you go, it&#39;s as simple as that. It works beautifully.</description><link>http://arcgisdeveloper.blogspot.com/2008/12/authenticationlogin-based-arcgis-adf.html</link><author>noreply@blogger.com (arcgis_developer)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTdWg_98Tw5kjoGqydz_O2D2cWKjbN-HqduYqOUf2wMYx4zBOGsayntM3fnmKRnK0-dU4VmHhGdWA0gdsfA8WH59FmdBVx-TTmmJthvLN2a-R6pP0TV5RAKLsiB_gFAOxF-CLgWeUQrRg/s72-c/SearchCIPTask_NotLoggedIn.JPG" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1801897191064504903.post-5024219011444568638</guid><pubDate>Tue, 23 Dec 2008 17:26:00 +0000</pubDate><atom:updated>2008-12-23T13:12:42.630-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">html</category><category domain="http://www.blogger.com/atom/ns#">javascript</category><category domain="http://www.blogger.com/atom/ns#">oop</category><title>Great JavaScript articles, references</title><description>&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: verdana;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;great resources:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: verdana;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;We know that dom manipulation in js is slower than innerHTML, but when innerHTML isn&#39;t fast enough?
&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;http://blog.stevenlevithan.com/archives/faster-than-innerhtml&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: verdana;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;http://blog.stevenlevithan.com/archives/faster-than-innerhtml&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: verdana;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;Object oriented programming and SetTimeout (what to do when we require context for a js object when executing global functions like settimeout?) &lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;http://www.kevlindev.com/blog/?p=72&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: verdana;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;http://www.kevlindev.com/blog/?p=72&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: verdana;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;Need the reference info for the DOM element, refer to Mozilla&#39;s great developer center. Gecko DOM reference.
&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://developer.mozilla.org/en/Gecko_DOM_Reference&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: verdana;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;https://developer.mozilla.org/en/Gecko_DOM_Reference&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: verdana;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;a href=&quot;https://developer.mozilla.org/en/DOM/element&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: verdana;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;https://developer.mozilla.org/en/DOM/element&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: verdana; font-size: 13px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;Object Oriented Programming in JS, an intro: &lt;/span&gt;&lt;a href=&quot;http://nefariousdesigns.co.uk/archive/2006/05/object-oriented-javascript&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;http://nefariousdesigns.co.uk/archive/2006/05/object-oriented-javascript&lt;/span&gt;&lt;/a&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;
&lt;/span&gt;
&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;</description><link>http://arcgisdeveloper.blogspot.com/2008/12/great-javascript-articles-references.html</link><author>noreply@blogger.com (arcgis_developer)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1801897191064504903.post-3237501478095763616</guid><pubDate>Tue, 23 Dec 2008 17:02:00 +0000</pubDate><atom:updated>2008-12-26T13:45:03.897-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">.net web adf</category><category domain="http://www.blogger.com/atom/ns#">dataitem</category><category domain="http://www.blogger.com/atom/ns#">Dataset</category><category domain="http://www.blogger.com/atom/ns#">TaskResultNode</category><category domain="http://www.blogger.com/atom/ns#">TaskResults</category><title>Workflow for adding DataTable, DataSet to ADF TaskResults WebControl</title><description>&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:verdana;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;I&#39;ve found out the hard way on several occassions that the ArcGIS Server 9.3 .NET ADF has issues if things are not done the way they are explicitly outlined in the samples. Now any good API will contain necessary information to inform the developer if there is any particular patterns to follow, e.g. when addings results to a TaskResults webControl, if we set gl.renderOnClient = true after adding to the GraphicsDataSet, it won&#39;t render on client. Does this seem reasonable? There&#39;s lots and lots of peculiarities with the ArcGIS Server ADF API, and the API docs contains virtually no info other than input &amp;amp; return types, which is no more info than what Visual Studio&#39;s Object Browser offers. In fact, yo&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;u&#39;ll probably get more info from using dotNetReflector than looking at the ADF API docs. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:verdana;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:verdana;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;How can it be made better?&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:verdana;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;Very simple, hire a skilled developer to write the docs who has some programming experience and exposure to other APIs as well. They should write the docs by looking at the code and samples, the docs are not inert. &lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:verdana;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:verdana;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;Take a look at other good API&#39;s out there, e.g. Sun Java API, Ext JS API. &lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:verdana;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:verdana;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;Add PreConditions, PostConditions to methods, constructors etc. for each input, return parameters&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:verdana;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:verdana;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;Add links to the return, input types (this is the least that could be expected)&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:verdana;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:verdana;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;Add diagrams to explain complex design patterns (object models, class diagrams etc)&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:verdana;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;   style=&quot; ;font-family:verdana;font-size:13px;&quot;&gt;Avoid the use of Utility classes for each namespace&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;   style=&quot; ;font-family:verdana;font-size:13px;&quot;&gt;
&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:verdana;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:verdana;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot; ;font-family:verdana;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;Anyways&lt;/span&gt;, this is the workflow that I found I had to follow in order to add datatables to the TaskResults WebControl and render them on the client (any deviation and it won&#39;t work): &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:verdana;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;Convert the DataTable dt to a GraphicsLayer,
&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:x-small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:&#39;courier new&#39;;&quot;&gt;GraphicsLayer gl = &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:x-small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:&#39;courier new&#39;;&quot;&gt;ESRI.ArcGIS.ADF.Web.Converter.&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:x-small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:&#39;courier new&#39;;&quot;&gt;ConvertToGraphicsLayer(dt)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:verdana;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;Get the appropriate LayerFormat, lf, from web.config or MapResourceManager or create your own one&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:x-small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:&#39;courier new&#39;;&quot;&gt;lf.apply(gl)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:x-small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:&#39;courier new&#39;;&quot;&gt;gl.renderOnClient = true&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:verdana;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;for each DataRow in GraphicsLayer (which is a subclass of DataTable), set the IsSelectedRow to true, 
&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:x-small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:&#39;courier new&#39;;&quot;&gt;dataRow.IsSelectedColumn = true&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:verdana;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;Create a new GraphicsDataSet, gds (which is a subclass of DataSet)&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:verdana;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;Add that GraphicsLayer, gl to the gds
&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:georgia;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:x-small;&quot;&gt;gds.Tables.Add(gl)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:verdana;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;If you&#39;re inside the ExecuteTask() method of a Custom ADF Task, then you can
&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:x-small;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:&#39;courier new&#39;;&quot;&gt;Me.Results = gds&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:verdana;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:small;&quot;&gt;Or you can create a TaskResultNode, 
&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-family:georgia;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:x-small;&quot;&gt;TaskResultNode resultTRN = adfTaskResultsInstance.CreateTaskResultNode(null, null, null, gds, false, true);
Me.Results = resultTRN&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;</description><link>http://arcgisdeveloper.blogspot.com/2008/12/workflow-for-adding-datatable-dataset.html</link><author>noreply@blogger.com (arcgis_developer)</author><thr:total>0</thr:total></item></channel></rss>