<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5771635142749205751</id><updated>2011-11-28T02:33:29.140+02:00</updated><category term='Fixes'/><category term='XML'/><category term='OpenFlashChart'/><category term='LotusScript'/><category term='JavaScript'/><category term='XPath'/><category term='LotusNotes'/><category term='Sharepoint'/><category term='ExtJS'/><category term='.NET'/><title type='text'>Rafal Ziolkowski, Software Development</title><subtitle type='html'>Lotus Notes, Microsoft .NET, ASP.NET, Sharepoint, SQL Server</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ziuek.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5771635142749205751/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ziuek.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Rafal Ziolkowski</name><uri>http://www.blogger.com/profile/16102276697210685909</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_AXopwSQOzO4/SXIwoWRCd-I/AAAAAAAAAP0/-QdGAhaOowo/S220/user_55325_8f2614_huge.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>11</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5771635142749205751.post-6441328361925583604</id><published>2009-12-09T11:39:00.001+02:00</published><updated>2009-12-09T11:39:50.243+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XPath'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='XML'/><title type='text'>Selecting uniqe text nodes from XML file using XPath</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Problem&lt;/span&gt;&lt;br /&gt;How to get list of unique text values from XML document, for example to build a kind of dictionary from these node values.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Solution&lt;/span&gt;&lt;br /&gt;&lt;i&gt;nodename&lt;/i&gt; is name of node to select from. &lt;br /&gt;&lt;b&gt;preceding&lt;/b&gt; axis get everything what is before start tag of selected node.&lt;br /&gt;It is also possible to use &lt;b&gt;following&lt;/b&gt; axis to get everything what follows current node, with this axis, XPath will return results in reversed order&lt;br /&gt;&lt;br /&gt;Code snippets&lt;br /&gt;&lt;code&gt;&lt;br /&gt;//&lt;i&gt;nodename&lt;/i&gt;[not(.=preceding::text())]/text()&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;or&lt;br /&gt;&lt;code&gt;&lt;br /&gt;//&lt;i&gt;nodename&lt;/i&gt;[not(.= following::text())]/text()&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5771635142749205751-6441328361925583604?l=ziuek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ziuek.blogspot.com/feeds/6441328361925583604/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5771635142749205751&amp;postID=6441328361925583604' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5771635142749205751/posts/default/6441328361925583604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5771635142749205751/posts/default/6441328361925583604'/><link rel='alternate' type='text/html' href='http://ziuek.blogspot.com/2009/12/selecting-uniqe-text-nodes-from-xml.html' title='Selecting uniqe text nodes from XML file using XPath'/><author><name>Rafal Ziolkowski</name><uri>http://www.blogger.com/profile/16102276697210685909</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_AXopwSQOzO4/SXIwoWRCd-I/AAAAAAAAAP0/-QdGAhaOowo/S220/user_55325_8f2614_huge.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5771635142749205751.post-8653072121503199779</id><published>2009-08-13T14:28:00.005+03:00</published><updated>2009-08-13T14:35:20.242+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='LotusNotes'/><title type='text'>LotusDomino views and JSON</title><content type='html'>This gonna be really short post.&lt;br /&gt;&lt;br /&gt;It is easy to obtain data from view as XML string, but to get this data as JSON it seems to be hard work.... not exactly :) I have just found really usefull parameter called &lt;span style="font-weight:bold;"&gt;Outputformat&lt;/span&gt; where we can set value &lt;span style="font-weight:bold;"&gt;JSON&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Here is how does it look:&lt;br /&gt;http://&lt;span style="font-style:italic;"&gt;&amp;lt;your server here&amp;gt;&lt;/span&gt;/&lt;span style="font-style:italic;"&gt;&amp;lt;your data base here&amp;gt;&lt;/span&gt;.nsf/&lt;span style="font-style:italic;"&gt;&amp;lt;your view here&amp;gt;&lt;/span&gt;?ReadViewEntries&amp;&lt;span style="font-weight:bold;"&gt;Outputformat=JSON&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5771635142749205751-8653072121503199779?l=ziuek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ziuek.blogspot.com/feeds/8653072121503199779/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5771635142749205751&amp;postID=8653072121503199779' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5771635142749205751/posts/default/8653072121503199779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5771635142749205751/posts/default/8653072121503199779'/><link rel='alternate' type='text/html' href='http://ziuek.blogspot.com/2009/08/lotusdomino-views-and-json.html' title='LotusDomino views and JSON'/><author><name>Rafal Ziolkowski</name><uri>http://www.blogger.com/profile/16102276697210685909</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_AXopwSQOzO4/SXIwoWRCd-I/AAAAAAAAAP0/-QdGAhaOowo/S220/user_55325_8f2614_huge.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5771635142749205751.post-5647315701943369950</id><published>2009-07-08T22:58:00.001+03:00</published><updated>2009-07-08T22:59:50.484+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtJS'/><title type='text'>ExtJS and .NET WebService - Remote domain access</title><content type='html'>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;In last article I showed how easy is access to .NET WebService from ExtJS JavaScript Library. This solution has one big disadvantage. Due to security reasons HTTPRequest method used for performing AJAX calls is restricted to in-domain calls only. What in the case if our WebService is located on different machine and different domain? You will find answer for this question in this article.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Solution&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;As I mentioned before it impossible to access data located in different domain using HTTPRequest method, but we can use some trick. It is possible, using JavaScript to add any html tag to current document - even SCRIPT tag. As all we know SCRIPT tag allows to include JavaScript code into document and also SCRIPT tag can have URL where JavaScript code is located. This is not limited to the same domain, like in HTTPRequest case. Let's imagine that our source code in this case is remotelly and dynamically produced data returned as valid JavaScript code. When document is ready, we can acces this data and that's all. There 2 drawbacks of this solution. Performace is slightly worse (we need to call some remote domain, etc) and we have to prepare server side to handle script-tag requests. On ExtJS side we can just use ScriptTagProxy object class instead of regular HttpProxy.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Let's take data from last article:&lt;/p&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;{ &lt;span class="str"&gt;"d"&lt;/span&gt;: [{&lt;span class="str"&gt;"AgentID"&lt;/span&gt;: 1, &lt;span class="str"&gt;"FirstName"&lt;/span&gt;: &lt;span class="str"&gt;"Jelena"&lt;/span&gt;, &lt;span class="str"&gt;"LastName"&lt;/span&gt;: &lt;span class="str"&gt;"Akerhus"&lt;/span&gt;},{&lt;span class="str"&gt;"AgentID"&lt;/span&gt;: 2, &lt;span class="str"&gt;"FirstName"&lt;/span&gt;: &lt;span class="str"&gt;"Londo"&lt;/span&gt;, &lt;span class="str"&gt;"LastName"&lt;/span&gt;: &lt;span class="str"&gt;"Molari"&lt;/span&gt;}]}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;To make it to work with ExtJS ScriptTagProxy class we need to return data in format like this:&lt;/p&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;stcCallback001({ &lt;span class="str"&gt;"d"&lt;/span&gt;: [{&lt;span class="str"&gt;"AgentID"&lt;/span&gt;: 1, &lt;span class="str"&gt;"FirstName"&lt;/span&gt;: &lt;span class="str"&gt;"Jelena"&lt;/span&gt;, &lt;span class="str"&gt;"LastName"&lt;/span&gt;: &lt;span class="str"&gt;"Akerhus"&lt;/span&gt;},{&lt;span class="str"&gt;"AgentID"&lt;/span&gt;: 2, &lt;span class="str"&gt;"FirstName"&lt;/span&gt;: &lt;span class="str"&gt;"Londo"&lt;/span&gt;, &lt;span class="str"&gt;"LastName"&lt;/span&gt;: &lt;span class="str"&gt;"Molari"&lt;/span&gt;}]});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Hey, does it look like JavaScript function call with our data provided as parameter? Yes exactly! Name for callback function is provided by ScriptTagProxy class as parameter added to URL. Default name for this callback is... callback. URL to acces remote data source will look like this:&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;code&gt;&lt;a href="http://your-remoted-domain/ScriptTagProxyHandler?callback=stcCallback001"&gt;http://your-remoted-domain/ScriptTagProxyHandler?callback=stcCallback001&lt;/a&gt;&lt;/code&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;ScriptTagProxy will do the job to extract data and put it into the store. All we need is to specify ScriptTagProxy instead of HttpProxy. Let's take code from last article and change proxy.&lt;/p&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; store = &lt;span class="kwrd"&gt;new&lt;/span&gt; Ext.data.JsonStore({ &lt;br /&gt;    autoLoad: &lt;span class="kwrd"&gt;true&lt;/span&gt;, &lt;br /&gt;    proxy: &lt;span class="kwrd"&gt;new&lt;/span&gt; Ext.data.ScriptTagProxy({ &lt;br /&gt;        url: &lt;span class="str"&gt;'http://your-remote-domain/ScriptTagProxyHandler'&lt;/span&gt;, &lt;br /&gt;    }), &lt;br /&gt;    root: &lt;span class="str"&gt;'d'&lt;/span&gt;, &lt;br /&gt;    id: &lt;span class="str"&gt;'Id'&lt;/span&gt;, &lt;br /&gt;    fields: [&lt;span class="str"&gt;'Id'&lt;/span&gt;, &lt;span class="str"&gt;'FirstName'&lt;/span&gt;, &lt;span class="str"&gt;'LastName'&lt;/span&gt;, &lt;span class="str"&gt;'BirthDate'&lt;/span&gt;] &lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Now we need figure out how can we make our web service work with ScriptTagProxy. It could be easilly achieved with solution called PageProxy. What is PageProxy? In simple words: this is an aspx web page wich will receive all requests, and using reflection forward them to web service, then it will get back the response, enclousure with javascript callback function and forward it to request's sender.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Create aspx page and put this code there:&lt;/p&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;partial&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; SimpleScriptPageProxy : Page&lt;br /&gt;{&lt;br /&gt;    &lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Page_Load(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;br /&gt;    {&lt;br /&gt;        StringBuilder sb = &lt;span class="kwrd"&gt;new&lt;/span&gt; StringBuilder();&lt;br /&gt;        &lt;span class="kwrd"&gt;string&lt;/span&gt; result = &lt;span class="str"&gt;""&lt;/span&gt;;&lt;br /&gt;        &lt;span class="kwrd"&gt;string&lt;/span&gt; callback = &lt;span class="str"&gt;""&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;try&lt;/span&gt;&lt;br /&gt;        {&lt;br /&gt;            &lt;span class="rem"&gt;// Get method name in web service GET call format&lt;/span&gt;&lt;br /&gt;            &lt;span class="kwrd"&gt;string&lt;/span&gt; methodName = Request.PathInfo.Replace(&lt;span class="str"&gt;"/"&lt;/span&gt;, &lt;span class="str"&gt;""&lt;/span&gt;);&lt;br /&gt;            &lt;span class="rem"&gt;// Get name of callback function&lt;/span&gt;&lt;br /&gt;            callback = Request[&lt;span class="str"&gt;"callback"&lt;/span&gt;].ToString();&lt;br /&gt;&lt;br /&gt;            &lt;span class="rem"&gt;// Invoke web service method and serialize response to json&lt;/span&gt;&lt;br /&gt;            &lt;span class="rem"&gt;// !Important!: Service is type of our web service&lt;/span&gt;&lt;br /&gt;            result = jsonSerialize(invokeMethod(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(Service), methodName));&lt;br /&gt;        }&lt;br /&gt;        &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception ex)&lt;br /&gt;        {&lt;br /&gt;            result = jsonSerialize(ex); &lt;span class="rem"&gt;// When somethig wrong happens, just return exception serialized to json&lt;/span&gt;&lt;br /&gt;        }&lt;br /&gt;        &lt;span class="rem"&gt;// Prepare and send back response&lt;/span&gt;&lt;br /&gt;        sb.AppendFormat(&lt;span class="str"&gt;"{0}({{ d: {1} }});"&lt;/span&gt;, callback, result);&lt;br /&gt;        Response.Write(sb.ToString());&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// This method invokes fn method on type Type and returns answer.&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;param name="type"&amp;gt;Type of class with method&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;param name="fn"&amp;gt;Function name&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="rem"&gt;/// &amp;lt;returns&amp;gt;Method result&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; invokeMethod(Type type, &lt;span class="kwrd"&gt;string&lt;/span&gt; fn)&lt;br /&gt;    {&lt;br /&gt;        &lt;span class="kwrd"&gt;object&lt;/span&gt; result;&lt;br /&gt;        &lt;span class="kwrd"&gt;object&lt;/span&gt; instance = Activator.CreateInstance(type);&lt;br /&gt;        MethodInfo method = type.GetMethod(fn);&lt;br /&gt;        ParameterInfo[] parameters = method.GetParameters();&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (parameters.Length == 0)&lt;br /&gt;        {&lt;br /&gt;            result = method.Invoke(instance, &lt;span class="kwrd"&gt;null&lt;/span&gt;);&lt;br /&gt;        }&lt;br /&gt;        &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;br /&gt;        {&lt;br /&gt;            List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; paramValues = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt;();&lt;br /&gt;            &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;int&lt;/span&gt; i = 0; parameters.Length &amp;gt; i; i++)&lt;br /&gt;            {&lt;br /&gt;                &lt;span class="kwrd"&gt;string&lt;/span&gt; paramName = parameters[i].Name;&lt;br /&gt;                &lt;span class="kwrd"&gt;string&lt;/span&gt; paramValue = Request[paramName]; &lt;span class="rem"&gt;// Get parameters directly from Request object&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;                paramValues.Add(paramValue);&lt;br /&gt;            }&lt;br /&gt;            result = method.Invoke(instance, paramValues.ToArray());&lt;br /&gt;        }&lt;br /&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; result;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span class="rem"&gt;// Helper method for json serialization&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; jsonSerialize(&lt;span class="kwrd"&gt;object&lt;/span&gt; o)&lt;br /&gt;    {&lt;br /&gt;        JavaScriptSerializer serializer = &lt;span class="kwrd"&gt;new&lt;/span&gt; JavaScriptSerializer();&lt;br /&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; serializer.Serialize(o);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Set url to this web page in ScriptTagProxy and that's all. If You like to send any parameters to web service You can send them with request using GET or POST methods.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5771635142749205751-5647315701943369950?l=ziuek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ziuek.blogspot.com/feeds/5647315701943369950/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5771635142749205751&amp;postID=5647315701943369950' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5771635142749205751/posts/default/5647315701943369950'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5771635142749205751/posts/default/5647315701943369950'/><link rel='alternate' type='text/html' href='http://ziuek.blogspot.com/2009/07/extjs-and-net-webservice-remote-domain.html' title='ExtJS and .NET WebService - Remote domain access'/><author><name>Rafal Ziolkowski</name><uri>http://www.blogger.com/profile/16102276697210685909</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_AXopwSQOzO4/SXIwoWRCd-I/AAAAAAAAAP0/-QdGAhaOowo/S220/user_55325_8f2614_huge.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5771635142749205751.post-41425909695603328</id><published>2009-04-30T10:24:00.012+03:00</published><updated>2009-05-01T02:22:00.009+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtJS'/><title type='text'>ExtJS and .NET WebServices</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Introduction&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;ExtJS is very powerful JavaScript library, perfect for creating rich graphical user interface in web browser. You can make applications of many purposes and integrate data from many sources and technologies using XML, JSON or own interchange format. On the other hand .NET provides great   server side features like entity framework, Linq and many more powerful classes. In this article I would like to show You how to integrate both technologies in the most convenient way and use strengths from both of them.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Solution&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When You are trying to access different data sources on different servers, the best way in today's world is to use web services. In this way You can build SOA solution, accessible by many suppliers using different technologies. When we have decided to use ExtJS as GUI part and ASP.NET as server part, it would be ideally to use ASP.NET web services directly. Natively ExtJS does not support SOAP XML data source. You can write own data proxy if You like, but I will show You that it is not necessary. ASP.NET webservices, starting from version 2.0 allows You to talk in JSON format instead of SOAP XML. &lt;br /&gt;&lt;br /&gt;Like in most cases, when You want to configure behavior of .NET classes You can use attributes. In this we need to decorate web service class with ScriptService attribute (form System.Web.Script.Services namespace), and then decorate methods with ScriptMethod attribute. Class attribute does not need any configuration, but we have to add some to method decorator also. All we need to specify is method response format, in this case ResponseFormat=ResponseFormat.Json and allow to talk to web service method using GET HTTP method. That is all we need on server side, let's go then to GUI part.&lt;br /&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="rem"&gt;// Entity class declaration&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Agent {&lt;br /&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; _agentID;&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; AgentID { get { &lt;span class="kwrd"&gt;return&lt;/span&gt; _agentID; } set { _agentID = &lt;span class="kwrd"&gt;value&lt;/span&gt;; } }&lt;br /&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; _firstName;&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; FirstName { get { &lt;span class="kwrd"&gt;return&lt;/span&gt; _firstName; } set { _firstName= &lt;span class="kwrd"&gt;value&lt;/span&gt;; } }&lt;br /&gt;    &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; _lastName;&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; LastName { get { &lt;span class="kwrd"&gt;return&lt;/span&gt; _lastName; } set { _lastName= &lt;span class="kwrd"&gt;value&lt;/span&gt;; } }&lt;br /&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; Agent() {}&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; Agent(&lt;span class="kwrd"&gt;int&lt;/span&gt; agentID, &lt;span class="kwrd"&gt;string&lt;/span&gt; firstName, &lt;span class="kwrd"&gt;string&lt;/span&gt; lastName) {&lt;br /&gt;        _agentID = agentID;&lt;br /&gt;        _firstName= firstName;&lt;br /&gt;        _lastName= lastName;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;// WebService declaration&lt;/span&gt;&lt;br /&gt;[ScriptService]&lt;br /&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Service : System.Web.Services.WebService&lt;br /&gt;{&lt;br /&gt;    [WebMethod]&lt;br /&gt;    [ScriptMethod(ResponseFormat = ResponseFormat.Json, UseHttpGet = &lt;span class="kwrd"&gt;true&lt;/span&gt;, XmlSerializeString = &lt;span class="kwrd"&gt;false&lt;/span&gt;)]&lt;br /&gt;    &lt;span class="kwrd"&gt;public&lt;/span&gt; List&amp;lt;Agent&amp;gt; GetAgents() {&lt;br /&gt;        List&amp;lt;Agent&amp;gt; agents = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;Agent&amp;gt;();&lt;br /&gt;        agents.Add( &lt;span class="kwrd"&gt;new&lt;/span&gt; Agent(&lt;span class="str"&gt;'1'&lt;/span&gt;, &lt;span class="str"&gt;'Jelena'&lt;/span&gt;, &lt;span class="str"&gt;'Akerhus'&lt;/span&gt;) );&lt;br /&gt;        agents.Add( &lt;span class="kwrd"&gt;new&lt;/span&gt; Agent(&lt;span class="str"&gt;'2'&lt;/span&gt;, &lt;span class="str"&gt;'Londo'&lt;/span&gt;, &lt;span class="str"&gt;'Molari'&lt;/span&gt;) );&lt;br /&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; agents;&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This WebService will produce data structure looking like this:&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;{ &lt;span class="str"&gt;"d"&lt;/span&gt;: [{&lt;span class="str"&gt;"AgentID"&lt;/span&gt;: 1, &lt;span class="str"&gt;"FirstName"&lt;/span&gt;: &lt;span class="str"&gt;"Jelena"&lt;/span&gt;, &lt;span class="str"&gt;"LastName"&lt;/span&gt;: &lt;span class="str"&gt;"Akerhus"&lt;/span&gt;},{&lt;span class="str"&gt;"AgentID"&lt;/span&gt;: 2, &lt;span class="str"&gt;"FirstName"&lt;/span&gt;: &lt;span class="str"&gt;"Londo"&lt;/span&gt;, &lt;span class="str"&gt;"LastName"&lt;/span&gt;: &lt;span class="str"&gt;"Molari"&lt;/span&gt;}]}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;We can access this data using json enabled data store in ExtJS, called Ext.data.JsonStore:&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="rem"&gt;// Create store&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; myStore = &lt;span class="kwrd"&gt;new&lt;/span&gt; Ext.data.JsonStore({&lt;br /&gt;    &lt;span class="rem"&gt;// Load data at once&lt;/span&gt;&lt;br /&gt;    autoLoad: &lt;span class="kwrd"&gt;true&lt;/span&gt;,&lt;br /&gt;    &lt;span class="rem"&gt;// Override default http proxy settings&lt;/span&gt;&lt;br /&gt;    proxy: &lt;span class="kwrd"&gt;new&lt;/span&gt; Ext.data.HttpProxy({&lt;br /&gt;        &lt;span class="rem"&gt;// Call web service method using GET syntax&lt;/span&gt;&lt;br /&gt;        url: &lt;span class="str"&gt;'Service.asmx/GetAgents'&lt;/span&gt;,&lt;br /&gt;        &lt;span class="rem"&gt;// Ask for Json response&lt;/span&gt;&lt;br /&gt;        headers: {&lt;span class="str"&gt;'Content-type'&lt;/span&gt;: &lt;span class="str"&gt;'application/json'&lt;/span&gt;}&lt;br /&gt;    }),&lt;br /&gt;    &lt;span class="rem"&gt;// Root variable &lt;/span&gt;&lt;br /&gt;    root: &lt;span class="str"&gt;'d'&lt;/span&gt;,&lt;br /&gt;    &lt;span class="rem"&gt;// Record identifier&lt;/span&gt;&lt;br /&gt;    id: &lt;span class="str"&gt;'AgentID'&lt;/span&gt;,&lt;br /&gt;    &lt;span class="rem"&gt;// Fields declaration&lt;/span&gt;&lt;br /&gt;    fields: [&lt;span class="str"&gt;'AgentID'&lt;/span&gt;, &lt;span class="str"&gt;'FirstName'&lt;/span&gt;, &lt;span class="str"&gt;'LastName'&lt;/span&gt;]&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And show obtained information using data grid:&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; grid = &lt;span class="kwrd"&gt;new&lt;/span&gt; Ext.grid.GridPanel({&lt;br /&gt;    &lt;span class="rem"&gt;// Set store&lt;/span&gt;&lt;br /&gt;    store: myStore,&lt;br /&gt;    &lt;span class="rem"&gt;// Columns definition&lt;/span&gt;&lt;br /&gt;    columns: [&lt;br /&gt;        { dataIndex: &lt;span class="str"&gt;'AgentID'&lt;/span&gt; },&lt;br /&gt;        { dataIndex: &lt;span class="str"&gt;'FirstName'&lt;/span&gt; },&lt;br /&gt;        { dataIndex: &lt;span class="str"&gt;'LastName'&lt;/span&gt; }&lt;br /&gt;    ],&lt;br /&gt;    &lt;span class="rem"&gt;// Render grid to dom elemnent with id set to panel&lt;/span&gt;&lt;br /&gt;    renderTo: &lt;span class="str"&gt;'panel'&lt;/span&gt;&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;In this scenario we have obtained data from ASP.NET WebService and show it in ExtJS data grid. This approach has one big disadvantage: WebService have to be located within the same domain. In the next article I will show You how to perform Cross domain call from ExtJS to ASP.NET web service in simple steps.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5771635142749205751-41425909695603328?l=ziuek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ziuek.blogspot.com/feeds/41425909695603328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5771635142749205751&amp;postID=41425909695603328' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5771635142749205751/posts/default/41425909695603328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5771635142749205751/posts/default/41425909695603328'/><link rel='alternate' type='text/html' href='http://ziuek.blogspot.com/2009/04/extjs-and-net-webservices.html' title='ExtJS and .NET WebServices'/><author><name>Rafal Ziolkowski</name><uri>http://www.blogger.com/profile/16102276697210685909</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_AXopwSQOzO4/SXIwoWRCd-I/AAAAAAAAAP0/-QdGAhaOowo/S220/user_55325_8f2614_huge.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5771635142749205751.post-2758081827906543487</id><published>2009-03-05T12:27:00.009+02:00</published><updated>2009-05-01T02:28:40.101+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtJS'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenFlashChart'/><category scheme='http://www.blogger.com/atom/ns#' term='Fixes'/><title type='text'>Ext.ux.Chart.OFC.Panel, Internet Explorer and Error #2032</title><content type='html'>&lt;span style="font-weight:bold;"&gt;Problem&lt;/span&gt;&lt;br /&gt;While using Ext.ux.Chart.OFC.Panel I have encountered problems with statically delivered data (from js). I made panel embedding ofc panel, and I have created ofc panel in the simplest way (in my opinion): &lt;br /&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;this&lt;/span&gt;.chart = &lt;span class="kwrd"&gt;new&lt;/span&gt; Ext.ux.Chart.OFC.Panel ({&lt;br /&gt; chartURL: &lt;span class="str"&gt;'shared/open-flash-chart/open-flash-chart.swf'&lt;/span&gt;,&lt;br /&gt; width: &lt;span class="kwrd"&gt;this&lt;/span&gt;.width,&lt;br /&gt; height: &lt;span class="kwrd"&gt;this&lt;/span&gt;.height,&lt;br /&gt; ofcCfg:{&lt;br /&gt;  autoSize : &lt;span class="kwrd"&gt;true&lt;/span&gt;&lt;br /&gt; },&lt;br /&gt; chartData: &lt;span class="kwrd"&gt;this&lt;/span&gt;.data&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Ok, it works perfectly in FF but IE cries with #2032 error from OFC - which means no data to load was found. I have spent some time on reading forums (ExtJS, OFC) but without luck. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Solution&lt;/span&gt;&lt;br /&gt;Finally while experimenting/debugging (PITA factor for IE is high here) I found finally two solutions:&lt;br /&gt;&lt;br /&gt;1. You can extend ofc panel config by adding mediaMask="Whatever" and autoMask = true, loadMask is optional in this case:&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt; mediaMask: &lt;span class="str"&gt;'Loading chart...'&lt;/span&gt;,&lt;br /&gt; autoMask: &lt;span class="kwrd"&gt;true&lt;/span&gt;,&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;2. Your can add random value to URL pointing to SWF file&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt; chartURL: &lt;span class="str"&gt;'shared/open-flash-chart/open-flash-chart.swf?r='&lt;/span&gt;+Math.random(),&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Hopefully it will save someone's plenty of time.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Remarks&lt;/span&gt;&lt;br /&gt;&lt;a href="http://teethgrinder.co.uk/open-flash-chart-2/"&gt;Open Flash Chart&lt;/a&gt; is open source LGPL licenced flash chart component.&lt;br /&gt;&lt;br /&gt;Ext.ux.Chart is part of &lt;a href="http://code.google.com/p/uxmedia/"&gt;Ext.ux.Media&lt;/a&gt; developed by Active Group and licenced under GPL3 licence.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5771635142749205751-2758081827906543487?l=ziuek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ziuek.blogspot.com/feeds/2758081827906543487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5771635142749205751&amp;postID=2758081827906543487' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5771635142749205751/posts/default/2758081827906543487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5771635142749205751/posts/default/2758081827906543487'/><link rel='alternate' type='text/html' href='http://ziuek.blogspot.com/2009/03/extuxchartofcpanel-internet-explorer.html' title='Ext.ux.Chart.OFC.Panel, Internet Explorer and Error #2032'/><author><name>Rafal Ziolkowski</name><uri>http://www.blogger.com/profile/16102276697210685909</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_AXopwSQOzO4/SXIwoWRCd-I/AAAAAAAAAP0/-QdGAhaOowo/S220/user_55325_8f2614_huge.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5771635142749205751.post-1911088749635896818</id><published>2009-01-09T15:36:00.015+02:00</published><updated>2009-05-01T02:33:12.814+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>How to call secured Domino WebService from .NET application</title><content type='html'>When You will try to perform remote call to WebService made in Lotus Domino with access allowed only for authenticated users You will get login screen as an response. It is possible to disable this feature by setting "allow public access" true on WebService design element, but for security reasons it is not recommended. It is possible to send authentication information using two scenarios: Basic Authentication and Cookie Based Authentication.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Basic Authentication&lt;/span&gt;&lt;br /&gt;This scenario is quite easy. It requires Internet access in Domino set to Basic Authentication. &lt;br /&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="rem"&gt;// Create WebService proxy class instance&lt;/span&gt;&lt;br /&gt;WebReference.WebServiceTestService service = &lt;span class="kwrd"&gt;new&lt;/span&gt; ConnectDominoWSTest.WebReference.WebServiceTestService();&lt;br /&gt;&lt;span class="rem"&gt;// Enable pre-authentication&lt;/span&gt;&lt;br /&gt;service.PreAuthenticate = &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;br /&gt;&lt;span class="rem"&gt;// Allow redirection (domino will redirect to logon screen and back to web service)&lt;/span&gt;&lt;br /&gt;service.AllowAutoRedirect = &lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;br /&gt;&lt;span class="rem"&gt;// Setting up credentials&lt;/span&gt;&lt;br /&gt;service.Credentials = &lt;span class="kwrd"&gt;new&lt;/span&gt; NetworkCredential(&lt;span class="str"&gt;"YourUsername"&lt;/span&gt;, &lt;span class="str"&gt;"YourPassword"&lt;/span&gt;);   &lt;br /&gt;&lt;span class="rem"&gt;// Perform Webservice call&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; s = service.HELLOWORLD();&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Cookie Based Authentication&lt;/span&gt;&lt;br /&gt;Second scenario is more complicated, but thanks to .NET power it is possible to do. It requires Internet access in Domino set to Session-based authentication or Single sign-on. &lt;br /&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="rem"&gt;// Cookie container to store authentication cookie&lt;/span&gt;&lt;br /&gt;CookieContainer cookies = &lt;span class="kwrd"&gt;new&lt;/span&gt; CookieContainer();&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;// Prepare HTTP request&lt;/span&gt;&lt;br /&gt;HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(&lt;span class="str"&gt;"YourServer/names.nsf?login"&lt;/span&gt;);&lt;br /&gt;request.Method = &lt;span class="str"&gt;"POST"&lt;/span&gt;;&lt;br /&gt;request.AllowAutoRedirect = &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;br /&gt;request.ContentType = &lt;span class="str"&gt;"application/x-www-form-urlencoded"&lt;/span&gt;;&lt;br /&gt;request.CookieContainer = cookies;&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;// Prepare POST body&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; post = &lt;span class="str"&gt;"Username=YourUsername&amp;amp;Password=YourPassword"&lt;/span&gt;;&lt;br /&gt;&lt;span class="kwrd"&gt;byte&lt;/span&gt;[] bytes = Encoding.ASCII.GetBytes(post);&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;// Write data to request&lt;/span&gt;&lt;br /&gt;request.ContentLength = bytes.Length;&lt;br /&gt;Stream streamOut = request.GetRequestStream();&lt;br /&gt;streamOut.Write(bytes, 0, bytes.Length);&lt;br /&gt;streamOut.Close();&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;// Get response&lt;/span&gt;&lt;br /&gt;HttpWebResponse response = (HttpWebResponse)request.GetResponse();&lt;br /&gt;&lt;br /&gt;&lt;span class="rem"&gt;// Check if we are authenticated properly&lt;/span&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;if&lt;/span&gt; ((response.StatusCode == HttpStatusCode.Found) ||&lt;br /&gt;    (response.StatusCode == HttpStatusCode.Redirect) ||&lt;br /&gt;    (response.StatusCode == HttpStatusCode.Moved) ||&lt;br /&gt;    (response.StatusCode == HttpStatusCode.MovedPermanently)) {&lt;br /&gt;&lt;br /&gt;    &lt;span class="rem"&gt;// Create WebService proxy class instance&lt;/span&gt;&lt;br /&gt;    WebReference.WebServiceTestService service = &lt;span class="kwrd"&gt;new&lt;/span&gt; ConnectDominoWSTest.WebReference.WebServiceTestService();&lt;br /&gt;    &lt;span class="rem"&gt;// Set up authentication cookie&lt;/span&gt;&lt;br /&gt;    service.CookieContainer = cookies;&lt;br /&gt;    &lt;span class="rem"&gt;// Perform Webservice call&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;string&lt;/span&gt; s = service.HELLOWORLD();&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;In both scenarios it is used WebService proxy class generated from wsdl file.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5771635142749205751-1911088749635896818?l=ziuek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ziuek.blogspot.com/feeds/1911088749635896818/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5771635142749205751&amp;postID=1911088749635896818' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5771635142749205751/posts/default/1911088749635896818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5771635142749205751/posts/default/1911088749635896818'/><link rel='alternate' type='text/html' href='http://ziuek.blogspot.com/2009/01/how-to-call-secured-domino-webservice.html' title='How to call secured Domino WebService from .NET application'/><author><name>Rafal Ziolkowski</name><uri>http://www.blogger.com/profile/16102276697210685909</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_AXopwSQOzO4/SXIwoWRCd-I/AAAAAAAAAP0/-QdGAhaOowo/S220/user_55325_8f2614_huge.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5771635142749205751.post-455546704665457855</id><published>2009-01-06T13:30:00.013+02:00</published><updated>2009-05-01T02:39:31.096+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='ExtJS'/><title type='text'>How to set HTTP method in Ext.data.Store</title><content type='html'>Normally if You declare store in ExtJS the default HTTP method is POST. Sometimes You need send data using GET method, so ExtJS is fortunatelly flexible enough to make it possible. You'll just need to create You own HttpProxy and change this proxy method to GET.&lt;br /&gt;&lt;br /&gt;Default way using POST method:&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; securities = &lt;span class="kwrd"&gt;new&lt;/span&gt; Ext.data.JsonStore({&lt;br /&gt;url: &lt;span class="str"&gt;'some url...'&lt;/span&gt;,&lt;br /&gt;root: &lt;span class="str"&gt;'some json root...'&lt;/span&gt;,&lt;br /&gt;fields: [some fields...]&lt;br /&gt;});&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Store settings medified to send data using GET method:&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;var&lt;/span&gt; securities = &lt;span class="kwrd"&gt;new&lt;/span&gt; Ext.data.JsonStore({&lt;br /&gt;proxy: &lt;span class="kwrd"&gt;new&lt;/span&gt; Ext.data.HttpProxy({url: &lt;span class="str"&gt;'some url...'&lt;/span&gt;, method: &lt;span class="str"&gt;'GET'&lt;/span&gt;}),&lt;br /&gt;root: &lt;span class="str"&gt;'some json root...'&lt;/span&gt;,&lt;br /&gt;fields: [some fields...]&lt;br /&gt;});&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5771635142749205751-455546704665457855?l=ziuek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ziuek.blogspot.com/feeds/455546704665457855/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5771635142749205751&amp;postID=455546704665457855' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5771635142749205751/posts/default/455546704665457855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5771635142749205751/posts/default/455546704665457855'/><link rel='alternate' type='text/html' href='http://ziuek.blogspot.com/2009/01/how-to-set-http-method-in-extdatastore.html' title='How to set HTTP method in Ext.data.Store'/><author><name>Rafal Ziolkowski</name><uri>http://www.blogger.com/profile/16102276697210685909</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_AXopwSQOzO4/SXIwoWRCd-I/AAAAAAAAAP0/-QdGAhaOowo/S220/user_55325_8f2614_huge.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5771635142749205751.post-365045427894469604</id><published>2008-09-05T15:08:00.008+03:00</published><updated>2009-05-01T02:41:23.927+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LotusScript'/><title type='text'>How to be sure that You get whole file on FTP?</title><content type='html'>When I try to download file using FTP, sometimes it happened that I have got file cut somewhere in the middle. It happens because file upload hasn't been finished yet and I try to download the file. After file dowload we remove file on FTP.... and now You can say bye bye to the not-downloaded content. &lt;br /&gt;&lt;br /&gt;While changing some code I found solution for this problem. I have tried to implement function to move file from FTP. Just connect, get file, remove it and close connection. Simple, isn't it? But suddenly I realised that until the file is not uploaded completely I cannot remove it from FTP! Wow. I've just change the procedure to make 10 retries with 10 seconds wait and now I can enjoy the whole file :-)&lt;br /&gt;&lt;br /&gt;Solution presented bellow is made in LotusScript, but until it is based on Windows API FTP functions You can implement it in any environment based on Windows API. In this solution I am using NotesFTP class made by Paul D. Ray.&lt;br /&gt;&lt;br /&gt;I am curious if it is general behaviour for FTP protocol or some special servers?&lt;br /&gt;&lt;br /&gt;Here is the code:&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;Dim&lt;/span&gt; triesCnt &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;Long&lt;/span&gt;&lt;br /&gt; &lt;span class="kwrd"&gt;Dim&lt;/span&gt; ftp &lt;span class="kwrd"&gt;As&lt;/span&gt; &lt;span class="kwrd"&gt;New&lt;/span&gt; NotesFTPSession&lt;br /&gt; &lt;span class="kwrd"&gt;Call&lt;/span&gt; ftp.Connect (ftpServer, userName, password, INTERNET_FLAG_PASSIVE) &lt;br /&gt; &lt;br /&gt; &lt;span class="kwrd"&gt;On&lt;/span&gt; &lt;span class="kwrd"&gt;Error&lt;/span&gt; &lt;span class="kwrd"&gt;Resume&lt;/span&gt; &lt;span class="kwrd"&gt;Next&lt;/span&gt;&lt;br /&gt;again:&lt;br /&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt; triesCnt &amp;gt; 0 &lt;span class="kwrd"&gt;Then&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;'Retry after 10sec&lt;/span&gt;&lt;br /&gt;  Print &lt;span class="str"&gt;"MoveFileFTP, retry "&lt;/span&gt;+&lt;span class="kwrd"&gt;Cstr&lt;/span&gt;(triesCnt)&lt;br /&gt;  Sleep 10&lt;br /&gt; &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt; triesCnt &amp;gt; 10 &lt;span class="kwrd"&gt;Then&lt;/span&gt;&lt;br /&gt;  &lt;span class="rem"&gt;'If there are more than 10 tries, remove locafile and quit  &lt;/span&gt;&lt;br /&gt;  Print &lt;span class="str"&gt;"MoveFileFTP, unsuccesfull"&lt;/span&gt;&lt;br /&gt;  Kill localFileName&lt;br /&gt;  &lt;span class="kwrd"&gt;Goto&lt;/span&gt; finish&lt;br /&gt; &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;span class="kwrd"&gt;Call&lt;/span&gt; ftp.GetFile(remotFileName, localFileName, FTP_TRANSFER_TYPE_BINARY)&lt;br /&gt; &lt;br /&gt; triesCnt = triesCnt + 1&lt;br /&gt; &lt;span class="kwrd"&gt;Call&lt;/span&gt; ftp.DeleteFile(remotFileName)&lt;br /&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt; Err = NOTESFTP_DELETEFILE_FAILED &lt;span class="kwrd"&gt;Then&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;Resume&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;Goto&lt;/span&gt; again&lt;br /&gt; &lt;span class="kwrd"&gt;End&lt;/span&gt; &lt;span class="kwrd"&gt;If&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;finish: &lt;br /&gt; &lt;span class="kwrd"&gt;Call&lt;/span&gt; ftp.Disconnect&lt;br /&gt; Delete ftp&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5771635142749205751-365045427894469604?l=ziuek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ziuek.blogspot.com/feeds/365045427894469604/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5771635142749205751&amp;postID=365045427894469604' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5771635142749205751/posts/default/365045427894469604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5771635142749205751/posts/default/365045427894469604'/><link rel='alternate' type='text/html' href='http://ziuek.blogspot.com/2008/09/how-to-be-sure-that-you-get-whole-file.html' title='How to be sure that You get whole file on FTP?'/><author><name>Rafal Ziolkowski</name><uri>http://www.blogger.com/profile/16102276697210685909</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_AXopwSQOzO4/SXIwoWRCd-I/AAAAAAAAAP0/-QdGAhaOowo/S220/user_55325_8f2614_huge.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5771635142749205751.post-2653953771092077941</id><published>2008-07-24T01:00:00.012+03:00</published><updated>2009-05-01T02:45:04.511+03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><title type='text'>How to avoid uncheck last checkbox...</title><content type='html'>&lt;p align="justify"&gt;&lt;br /&gt;Let say, You need to have a group of checkboxes and at least one have to be checked.&lt;br /&gt;How can You do it?&lt;br /&gt;First we need a group, then we can add fake html tag attribute called &lt;b&gt;group&lt;/b&gt;. Then we need JavaScript function which handles checkbox click. It takes two arguments: event rising element and group to which it belongs to. This function looks for every input tag on document, but only when checkbox is unchecked (to rescue performance little bit). Then it tries to find every checkbox in group we sent to it. If there is not any checkbox checked left in the grop, it sets checked clicked checkbox again... easy? :D&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kwrd"&gt;function&lt;/span&gt; avoidUncheckLast(chk, group){&lt;br /&gt;    &lt;span class="kwrd"&gt;var&lt;/span&gt; theRestChecked = &lt;span class="kwrd"&gt;false&lt;/span&gt;;&lt;br /&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (chk.&lt;span class="kwrd"&gt;checked&lt;/span&gt; == &lt;span class="kwrd"&gt;false&lt;/span&gt;) {&lt;br /&gt;      &lt;span class="kwrd"&gt;var&lt;/span&gt; inputs = document.getElementsByTagName(&lt;span class="str"&gt;"input"&lt;/span&gt;);&lt;br /&gt;      &lt;span class="kwrd"&gt;for&lt;/span&gt; (&lt;span class="kwrd"&gt;var&lt;/span&gt; i = 0; i &amp;lt; inputs.length; i++) {&lt;br /&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (inputs[i].getAttribute(&lt;span class="str"&gt;"type"&lt;/span&gt;) == &lt;span class="str"&gt;"checkbox"&lt;/span&gt; &amp;amp;&amp;amp; &lt;br /&gt;          inputs[i].getAttribute(&lt;span class="str"&gt;"group"&lt;/span&gt;) == group) {&lt;br /&gt;          &lt;span class="kwrd"&gt;if&lt;/span&gt; (chk!=inputs[i]) &lt;br /&gt;            theRestChecked |= inputs[i].&lt;span class="kwrd"&gt;checked&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;      }&lt;br /&gt;      &lt;span class="kwrd"&gt;if&lt;/span&gt; (!theRestChecked) chk.&lt;span class="kwrd"&gt;checked&lt;/span&gt;=&lt;span class="kwrd"&gt;true&lt;/span&gt;;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;script&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;input&lt;/span&gt; &lt;span class="attr"&gt;type&lt;/span&gt;&lt;span class="kwrd"&gt;="checkbox"&lt;/span&gt; &lt;span class="attr"&gt;group&lt;/span&gt;&lt;span class="kwrd"&gt;="group1"&lt;/span&gt; &lt;span class="attr"&gt;onclick&lt;/span&gt;&lt;span class="kwrd"&gt;="avoidUncheckLast(this, 'group1');"&lt;/span&gt;&lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5771635142749205751-2653953771092077941?l=ziuek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ziuek.blogspot.com/feeds/2653953771092077941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5771635142749205751&amp;postID=2653953771092077941' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5771635142749205751/posts/default/2653953771092077941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5771635142749205751/posts/default/2653953771092077941'/><link rel='alternate' type='text/html' href='http://ziuek.blogspot.com/2008/07/how-to-avoid-uncheck-last-checkbox.html' title='How to avoid uncheck last checkbox...'/><author><name>Rafal Ziolkowski</name><uri>http://www.blogger.com/profile/16102276697210685909</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_AXopwSQOzO4/SXIwoWRCd-I/AAAAAAAAAP0/-QdGAhaOowo/S220/user_55325_8f2614_huge.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5771635142749205751.post-5046311531568019539</id><published>2008-07-21T12:17:00.005+03:00</published><updated>2009-01-18T00:33:51.701+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Sharepoint'/><category scheme='http://www.blogger.com/atom/ns#' term='Fixes'/><title type='text'>"File not found" when navigate to settings in Sharepoint</title><content type='html'>I have tried to run Sharepoint site collection. When I went to site settings I have got an error message "File not found", but which file? I said ok, I want to be clever, then I went to Event Log where I found error message from Sharepoint: "Error: Failure in loading assembly: Microsoft.SharePoint, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" after crawling for a while I found the solution (and cause).&lt;br /&gt;&lt;br /&gt;When You edit Your web.config using nice IIS pluggedin editor, this editor add namespace declaration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0" which is wrong here for some reasons. Just remove this namespace and be happy You have fixed Your problem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5771635142749205751-5046311531568019539?l=ziuek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ziuek.blogspot.com/feeds/5046311531568019539/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5771635142749205751&amp;postID=5046311531568019539' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5771635142749205751/posts/default/5046311531568019539'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5771635142749205751/posts/default/5046311531568019539'/><link rel='alternate' type='text/html' href='http://ziuek.blogspot.com/2008/07/file-not-found-when-navigate-to.html' title='&quot;File not found&quot; when navigate to settings in Sharepoint'/><author><name>Rafal Ziolkowski</name><uri>http://www.blogger.com/profile/16102276697210685909</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_AXopwSQOzO4/SXIwoWRCd-I/AAAAAAAAAP0/-QdGAhaOowo/S220/user_55325_8f2614_huge.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5771635142749205751.post-8181462609696186652</id><published>2008-06-18T23:51:00.002+03:00</published><updated>2008-06-18T23:58:08.912+03:00</updated><title type='text'>Let's begin</title><content type='html'>Hi,&lt;br /&gt;&lt;br /&gt;At least I kicked my ass and decided to post something. I wouldn't be impressive,, but I will list :-)&lt;br /&gt;&lt;br /&gt;I will put here information about problems I solved due to my work and hobby. Mainly I will focus on Lotus Notes 7.0, ASP.NET, Microsoft SQLServer and many more technologies I meet in my Developer's life.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5771635142749205751-8181462609696186652?l=ziuek.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ziuek.blogspot.com/feeds/8181462609696186652/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5771635142749205751&amp;postID=8181462609696186652' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5771635142749205751/posts/default/8181462609696186652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5771635142749205751/posts/default/8181462609696186652'/><link rel='alternate' type='text/html' href='http://ziuek.blogspot.com/2008/06/lets-begin.html' title='Let&apos;s begin'/><author><name>Rafal Ziolkowski</name><uri>http://www.blogger.com/profile/16102276697210685909</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='30' height='32' src='http://4.bp.blogspot.com/_AXopwSQOzO4/SXIwoWRCd-I/AAAAAAAAAP0/-QdGAhaOowo/S220/user_55325_8f2614_huge.jpg'/></author><thr:total>0</thr:total></entry></feed>
