<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.officezealot.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Don Reamey's InfoPath Weblog</title><link>http://blogs.officezealot.com/dreamey/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.2)</generator><item><title>Implementing XSL predicates or filters on InfoPath Forms Server 2010</title><link>http://blogs.officezealot.com/dreamey/archive/2010/01/21/21673.aspx</link><pubDate>Fri, 22 Jan 2010 06:44:00 GMT</pubDate><guid isPermaLink="false">a446e06f-2cc4-48dd-a534-c024bd1e2687:21673</guid><dc:creator>dreamey</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.officezealot.com/dreamey/comments/21673.aspx</comments><wfw:commentRss>http://blogs.officezealot.com/dreamey/commentrss.aspx?PostID=21673</wfw:commentRss><description>&lt;P style="MARGIN:0in;FONT-FAMILY:Calibri;FONT-SIZE:11pt;"&gt;If you downloaded the beta version of InfoPath Forms Service as part of SharePoint 2010 then you will get the chance to try out filtering data in browser forms.&lt;/P&gt;
&lt;P style="MARGIN:0in;FONT-FAMILY:Calibri;FONT-SIZE:11pt;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN:0in;FONT-FAMILY:Calibri;FONT-SIZE:11pt;"&gt;Filtering is supported on the following controls:&lt;/P&gt;
&lt;P style="MARGIN:0in;FONT-FAMILY:Calibri;FONT-SIZE:11pt;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN:0in;FONT-FAMILY:Calibri;FONT-SIZE:11pt;"&gt;Repeating tables, Repeating sections , List Box, Bulleted List, Drop-Down List Box and Numbered List.&lt;/P&gt;
&lt;P style="MARGIN:0in;FONT-FAMILY:Calibri;FONT-SIZE:11pt;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN:0in;FONT-FAMILY:Calibri;FONT-SIZE:11pt;"&gt;If your familiar with InfoPath 2007, then filters are applied to controls in the same way. You can review the following document for how you apply a filter: &lt;A href="http://office.microsoft.com/en-us/infopath/HP011066141033.aspx"&gt;http://office.microsoft.com/en-us/infopath/HP011066141033.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P style="MARGIN:0in;FONT-FAMILY:Calibri;FONT-SIZE:11pt;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN:0in;FONT-FAMILY:Calibri;FONT-SIZE:11pt;"&gt;What I want to discuss in this article is how the filters were implemented on the server.&lt;/P&gt;
&lt;P style="MARGIN:0in;FONT-FAMILY:Calibri;FONT-SIZE:11pt;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL style="FONT-STYLE:normal;MARGIN-TOP:0in;unicode-bidi:embed;FONT-FAMILY:Calibri;DIRECTION:ltr;MARGIN-BOTTOM:0in;MARGIN-LEFT:0.375in;FONT-SIZE:11pt;FONT-WEIGHT:normal;"&gt;
&lt;LI style="MARGIN-TOP:0px;MARGIN-BOTTOM:0px;VERTICAL-ALIGN:middle;"&gt;&lt;SPAN style="FONT-STYLE:normal;FONT-FAMILY:Calibri;FONT-SIZE:11pt;VERTICAL-ALIGN:baseline;FONT-WEIGHT:normal;TEXT-DECORATION:none;"&gt;Deploying the form.&lt;/SPAN&gt;&lt;/LI&gt;
&lt;OL style="FONT-STYLE:normal;MARGIN-TOP:0in;unicode-bidi:embed;FONT-FAMILY:Calibri;DIRECTION:ltr;MARGIN-BOTTOM:0in;MARGIN-LEFT:0.375in;FONT-SIZE:11pt;FONT-WEIGHT:normal;"&gt;
&lt;LI style="MARGIN-TOP:0px;MARGIN-BOTTOM:0px;VERTICAL-ALIGN:middle;"&gt;&lt;SPAN style="FONT-STYLE:normal;FONT-FAMILY:Calibri;FONT-SIZE:11pt;VERTICAL-ALIGN:baseline;FONT-WEIGHT:normal;TEXT-DECORATION:none;"&gt;When a form is deployed to InfoPath server the .XSN file which contains among other things the .XSL file. The .XSL file is where you will find the XSL predicates or filters. Unlike rules or calculations which are stored in the .XSF file and are InfoPath specific. The predicates found in the .XSL file are predicates which comply with standard XSL predicates in the form of:&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/OL&gt;
&lt;P style="MARGIN:0in 0in 0in 0.75in;FONT-FAMILY:Calibri;FONT-SIZE:11pt;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0in 0.75in;FONT-FAMILY:Calibri;FONT-SIZE:11pt;"&gt;x/y/z[expression]&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0in 0.75in;FONT-FAMILY:Calibri;FONT-SIZE:11pt;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0in 0.75in;FONT-FAMILY:Calibri;FONT-SIZE:11pt;"&gt;Where x/y/z is an Xpath and [expression] is an XSL predicate.&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0in 0.75in;FONT-FAMILY:Calibri;FONT-SIZE:11pt;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0in 0.75in;FONT-FAMILY:Calibri;FONT-SIZE:11pt;"&gt;During deployment the XSL is parsed and each expression is evaluated for several criteria. One of the criteria that is evaluated is complexity of the expression. This means several things such as does the expression contain constant values or does it have references to nodes in the main DOM or an auxiliary DOM.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;Based on the complexity of the expression the nodes involved in the expression may be marked to post back to the server when a value is changed. &lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0in 0.75in;FONT-FAMILY:Calibri;FONT-SIZE:11pt;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0in 0.75in;FONT-FAMILY:Calibri;FONT-SIZE:11pt;"&gt;Also during the deployment process JavaScript expressions are generated. In the case where an node is not marked to post back to the server the JavaScript expression would be used in the browser. Another form of complexity is when a JavaScript version of the expression can't be generated. This can occur when there are nodes that are "out of context" of the expression. When I say out of context I mean that the expression could reference nodes that are in an auxiliary DOM or nodes that are not a sibling of the nodes in the XPath expression.&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0in 0.75in;FONT-FAMILY:Calibri;FONT-SIZE:11pt;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0in 0.75in;FONT-FAMILY:Calibri;FONT-SIZE:11pt;"&gt;After the expressions are evaluated the deployment process continues and a binary form of the InfoPath Form data is written to the SharePoint database.&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0in 0.75in;FONT-FAMILY:Calibri;FONT-SIZE:11pt;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL style="FONT-STYLE:normal;MARGIN-TOP:0in;unicode-bidi:embed;FONT-FAMILY:Calibri;DIRECTION:ltr;MARGIN-BOTTOM:0in;MARGIN-LEFT:0.375in;FONT-SIZE:11pt;FONT-WEIGHT:normal;"&gt;
&lt;LI style="MARGIN-TOP:0px;MARGIN-BOTTOM:0px;VERTICAL-ALIGN:middle;"&gt;&lt;SPAN style="FONT-STYLE:normal;FONT-FAMILY:Calibri;FONT-SIZE:11pt;VERTICAL-ALIGN:baseline;FONT-WEIGHT:normal;TEXT-DECORATION:none;"&gt;Rendering of the form&lt;/SPAN&gt;&lt;/LI&gt;
&lt;OL style="FONT-STYLE:normal;MARGIN-TOP:0in;unicode-bidi:embed;FONT-FAMILY:Calibri;DIRECTION:ltr;MARGIN-BOTTOM:0in;MARGIN-LEFT:0.375in;FONT-SIZE:11pt;FONT-WEIGHT:normal;"&gt;
&lt;LI style="MARGIN-TOP:0px;MARGIN-BOTTOM:0px;VERTICAL-ALIGN:middle;"&gt;&lt;SPAN style="FONT-STYLE:normal;FONT-FAMILY:Calibri;FONT-SIZE:11pt;VERTICAL-ALIGN:baseline;FONT-WEIGHT:normal;TEXT-DECORATION:none;"&gt;When the form is rendered in the browser all of the filter expression will be evaluated on the server before the form is displayed.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;For instance if a List Box is contains the names of all of the United States and the filter expression is something like this:&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/OL&gt;
&lt;P style="MARGIN:0in 0in 0in 0.75in;FONT-FAMILY:Calibri;FONT-SIZE:11pt;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0in 0.75in;FONT-FAMILY:Calibri;FONT-SIZE:11pt;"&gt;[stateField = field1]&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0in 0.75in;FONT-FAMILY:Calibri;FONT-SIZE:11pt;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0in 0.75in;FONT-FAMILY:Calibri;FONT-SIZE:11pt;"&gt;Then the List Box filter expression will be evaluated and the data that satisfies the expression will be sent to the browser.&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0in 0.75in;FONT-FAMILY:Calibri;FONT-SIZE:11pt;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0in 0.75in;FONT-FAMILY:Calibri;FONT-SIZE:11pt;"&gt;For repeating sections and tables the rendering process behaves slightly different. The expression will still be evaluated however rows that do not satisfy the condition will be marked to not render in the browser. This means that if your repeating table contains 50 rows but only 1 row meets the filter criteria then all 50 rows will be sent to the browser but only one row will be visible in the browser.&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0in 0.75in;FONT-FAMILY:Calibri;FONT-SIZE:11pt;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0in 0.75in;FONT-FAMILY:Calibri;FONT-SIZE:11pt;"&gt;This is done because in InfoPath the data in repeating sections and repeating tables may be used in a calculation such as a summation. So in this case it is necessary to hide rows that don't satisfy the expression.&lt;/P&gt;
&lt;P style="MARGIN:0in 0in 0in 0.75in;FONT-FAMILY:Calibri;FONT-SIZE:11pt;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;OL style="FONT-STYLE:normal;MARGIN-TOP:0in;unicode-bidi:embed;FONT-FAMILY:Calibri;DIRECTION:ltr;MARGIN-BOTTOM:0in;MARGIN-LEFT:0.375in;FONT-SIZE:11pt;FONT-WEIGHT:normal;"&gt;
&lt;LI style="MARGIN-TOP:0px;MARGIN-BOTTOM:0px;VERTICAL-ALIGN:middle;"&gt;&lt;SPAN style="FONT-STYLE:normal;FONT-FAMILY:Calibri;FONT-SIZE:11pt;VERTICAL-ALIGN:baseline;FONT-WEIGHT:normal;TEXT-DECORATION:none;"&gt;Runtime of the Form&lt;/SPAN&gt;&lt;/LI&gt;
&lt;OL style="FONT-STYLE:normal;MARGIN-TOP:0in;unicode-bidi:embed;FONT-FAMILY:Calibri;DIRECTION:ltr;MARGIN-BOTTOM:0in;MARGIN-LEFT:0.375in;FONT-SIZE:11pt;FONT-WEIGHT:normal;"&gt;
&lt;LI style="MARGIN-TOP:0px;MARGIN-BOTTOM:0px;VERTICAL-ALIGN:middle;"&gt;&lt;SPAN style="FONT-STYLE:normal;FONT-FAMILY:Calibri;FONT-SIZE:11pt;VERTICAL-ALIGN:baseline;FONT-WEIGHT:normal;TEXT-DECORATION:none;"&gt;When the form is up and running and the user is entering data each field in the browser is mapped to a node in the XML. If one of the nodes in the XML is part of a filter expression then filter will be evaluated when the node is changed. At this point one of two things will happen. One, if the filter is marked to post back the form will send data to the server and the filter will be evaluated on the server and the rendering process will take place again. Two,&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;if the filter is not marked to post back then the filter will be evaluated in the browser and no post back will occur.&lt;/SPAN&gt;&lt;/LI&gt;&lt;/OL&gt;&lt;/OL&gt;
&lt;P style="MARGIN:0in;FONT-FAMILY:Calibri;FONT-SIZE:11pt;"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.officezealot.com/aggbug.aspx?PostID=21673" width="1" height="1"&gt;</description><category domain="http://blogs.officezealot.com/dreamey/archive/tags/SharePoint/default.aspx">SharePoint</category><category domain="http://blogs.officezealot.com/dreamey/archive/tags/Office+2010/default.aspx">Office 2010</category><category domain="http://blogs.officezealot.com/dreamey/archive/tags/InfoPath+2010/default.aspx">InfoPath 2010</category><category domain="http://blogs.officezealot.com/dreamey/archive/tags/Filters/default.aspx">Filters</category><category domain="http://blogs.officezealot.com/dreamey/archive/tags/XSL/default.aspx">XSL</category><category domain="http://blogs.officezealot.com/dreamey/archive/tags/predicate/default.aspx">predicate</category></item><item><title>InfoPath Server Form Invocation - part 1</title><link>http://blogs.officezealot.com/dreamey/archive/2008/08/04/21132.aspx</link><pubDate>Mon, 04 Aug 2008 21:20:00 GMT</pubDate><guid isPermaLink="false">a446e06f-2cc4-48dd-a534-c024bd1e2687:21132</guid><dc:creator>dreamey</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.officezealot.com/dreamey/comments/21132.aspx</comments><wfw:commentRss>http://blogs.officezealot.com/dreamey/commentrss.aspx?PostID=21132</wfw:commentRss><description>&lt;P&gt;There are always questions on how does my form know where to open, in the browser or in the rich client? &lt;/P&gt;
&lt;P&gt;The simple answer is to set the document library settings to open in the preferred environment. This can be either the InfoPath rich client or the browser.&lt;/P&gt;
&lt;P&gt;The problems start to arise when you want to copy and paste a link and put it in email or IM to someone. The issue is how document libraries interact with the list items.&lt;/P&gt;
&lt;P&gt;A when you click on an item in a document library there is SharePoint Java Script that gets activated and the script determines some things about your environment. These things are the default item open setting, permissions, type of document etc.&lt;/P&gt;
&lt;P&gt;Depending on what the default open item is set to SharePoint may try to invoke InfoPath client or it may try to send the request to InfoPath Forms Service. &lt;/P&gt;
&lt;P&gt;&amp;nbsp;Once the decision is made to send the request to InfoPath forms service the URL should look something like this:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://server/_layouts/FormServer.aspx?XsnLocation=http://server/documentlibrary/Forms/template.xsn&amp;amp;SaveLocation=http://server/documentlibrary&amp;amp;DefaultItemOpen=1"&gt;http://server/_layouts/FormServer.aspx?XsnLocation=http://server/documentlibrary/Forms/template.xsn&amp;amp;SaveLocation=http://server/documentlibrary&amp;amp;DefaultItemOpen=1&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;The important things to look at is the DefaultItemOpen. This URL parameter detemines how the server will try to render the form. &lt;/P&gt;
&lt;P&gt;DefaultItemOpen = 0 means try to render in the rich client&lt;/P&gt;
&lt;P&gt;DefaultItemOpen = 1 means try to render in the browser.&lt;/P&gt;
&lt;P&gt;There are other URL parameters such as OpenIn, SaveLocation, XsnLocation, XmlLocation. I will go into more detail about these later. I will also discuss how permissions are handled for forms.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.officezealot.com/aggbug.aspx?PostID=21132" width="1" height="1"&gt;</description><category domain="http://blogs.officezealot.com/dreamey/archive/tags/IPFS/default.aspx">IPFS</category></item><item><title>The power of the press</title><link>http://blogs.officezealot.com/dreamey/archive/2008/01/14/20729.aspx</link><pubDate>Tue, 15 Jan 2008 05:18:00 GMT</pubDate><guid isPermaLink="false">a446e06f-2cc4-48dd-a534-c024bd1e2687:20729</guid><dc:creator>dreamey</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.officezealot.com/dreamey/comments/20729.aspx</comments><wfw:commentRss>http://blogs.officezealot.com/dreamey/commentrss.aspx?PostID=20729</wfw:commentRss><description>&lt;P&gt;I just got the Jan 7th issue of Information Week and i was reading the letters to the editor. There were a couple of letters about Windows Vista in this issue. One of the letters I found very interesting. It stated how arrogant Microsoft was about creating an operating system that is in compatible with the previous version.&lt;/P&gt;
&lt;P&gt;The example the writer gave was "Vista isn't compatible with the lower Windows operating systems. For example, if a file is saved in Vista, it can't be opened in Windows; the file can't even be renamed."&lt;/P&gt;
&lt;P&gt;Wow! I couldn't believe this letter was published. If you read the quote the writer doesn't say what program they are using they just say if you save a file using Vista. What does that mean? Do they mean a Microsoft Word file? Hmm, I don't know.&lt;/P&gt;
&lt;P&gt;The problem is that someone is going to read this letter and take it as a factual piece of information.&lt;/P&gt;&lt;img src="http://blogs.officezealot.com/aggbug.aspx?PostID=20729" width="1" height="1"&gt;</description><category domain="http://blogs.officezealot.com/dreamey/archive/tags/Industry/default.aspx">Industry</category></item><item><title>Monitoring InfoPath Server</title><link>http://blogs.officezealot.com/dreamey/archive/2007/11/10/20634.aspx</link><pubDate>Sat, 10 Nov 2007 22:14:00 GMT</pubDate><guid isPermaLink="false">a446e06f-2cc4-48dd-a534-c024bd1e2687:20634</guid><dc:creator>dreamey</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.officezealot.com/dreamey/comments/20634.aspx</comments><wfw:commentRss>http://blogs.officezealot.com/dreamey/commentrss.aspx?PostID=20634</wfw:commentRss><description>&lt;P&gt;Now that InfoPath Server has been out for a while I wanted to get an idea of how people are using it and what type of health monitoring scenarios. The main scenarios we are looking at are around how admins can determine when InfoPath is doing something bad on the server. Such as, a user has deployed a form and it makes a large amount of data connections on start up. Each connection brings back large amounts of data. If this form is used by hundreds of users it could easily bring the overall performance of a server down.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;What other types of scenarios would be important to SharePoint administrators?&lt;/P&gt;&lt;img src="http://blogs.officezealot.com/aggbug.aspx?PostID=20634" width="1" height="1"&gt;</description><category domain="http://blogs.officezealot.com/dreamey/archive/tags/IPFS/default.aspx">IPFS</category></item><item><title>Dynamic languages vs. static languages.</title><link>http://blogs.officezealot.com/dreamey/archive/2007/01/23/20090.aspx</link><pubDate>Wed, 24 Jan 2007 06:00:00 GMT</pubDate><guid isPermaLink="false">a446e06f-2cc4-48dd-a534-c024bd1e2687:20090</guid><dc:creator>dreamey</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.officezealot.com/dreamey/comments/20090.aspx</comments><wfw:commentRss>http://blogs.officezealot.com/dreamey/commentrss.aspx?PostID=20090</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;"&gt;&lt;o:p&gt;&lt;FONT face=Calibri size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;FONT face=Calibri size=3&gt;I recently stated doing some work with JavaScript as part of working on infoPath Forms Server. I realized that you can do some pretty powerful and cool things with JavaScript however the lack of strong types is a little hard to get used to.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;"&gt;&lt;FONT face=Calibri size=3&gt;In Java script you can do things like:&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Candara','sans-serif';mso-bidi-font-family:'Times New Roman';mso-no-proof:yes;"&gt;function&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Candara','sans-serif';mso-bidi-font-family:'Times New Roman';mso-no-proof:yes;"&gt; TestFunction()&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Candara','sans-serif';mso-bidi-font-family:'Times New Roman';mso-no-proof:yes;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Candara','sans-serif';mso-bidi-font-family:'Times New Roman';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Candara','sans-serif';mso-bidi-font-family:'Times New Roman';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;var&lt;/SPAN&gt; myVariable = 33;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Candara','sans-serif';mso-bidi-font-family:'Times New Roman';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;alert(i);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Candara','sans-serif';mso-bidi-font-family:'Times New Roman';mso-no-proof:yes;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Candara','sans-serif';mso-bidi-font-family:'Times New Roman';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;myVariable = CallBack;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Candara','sans-serif';mso-bidi-font-family:'Times New Roman';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Candara','sans-serif';mso-bidi-font-family:'Times New Roman';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;myVariable();&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Candara','sans-serif';mso-bidi-font-family:'Times New Roman';mso-no-proof:yes;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Candara','sans-serif';mso-bidi-font-family:'Times New Roman';mso-no-proof:yes;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Candara','sans-serif';mso-bidi-font-family:'Times New Roman';mso-no-proof:yes;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;COLOR:blue;FONT-FAMILY:'Candara','sans-serif';mso-bidi-font-family:'Times New Roman';mso-no-proof:yes;"&gt;function&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Candara','sans-serif';mso-bidi-font-family:'Times New Roman';mso-no-proof:yes;"&gt; CallBack()&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Candara','sans-serif';mso-bidi-font-family:'Times New Roman';mso-no-proof:yes;"&gt;{&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;LINE-HEIGHT:normal;mso-layout-grid-align:none;"&gt;&lt;SPAN style="FONT-SIZE:9pt;FONT-FAMILY:'Candara','sans-serif';mso-bidi-font-family:'Times New Roman';mso-no-proof:yes;"&gt;&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;alert(&lt;SPAN style="COLOR:maroon;"&gt;"CallBack"&lt;/SPAN&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;"&gt;&lt;SPAN style="FONT-SIZE:9pt;LINE-HEIGHT:115%;FONT-FAMILY:'Candara','sans-serif';mso-bidi-font-family:'Times New Roman';mso-no-proof:yes;"&gt;}&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;"&gt;&lt;FONT face=Calibri size=3&gt;In this example I create a variable named &lt;I style="mso-bidi-font-style:normal;"&gt;myVariable&lt;/I&gt; and assign the integer value 33 to it. Then I assign the value or location of the function &lt;I style="mso-bidi-font-style:normal;"&gt;CallBack&lt;/I&gt; to the variable &lt;I style="mso-bidi-font-style:normal;"&gt;myVariable&lt;/I&gt;. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;"&gt;&lt;FONT face=Calibri size=3&gt;I then invoke the function by treating it as a function i.e. &lt;I style="mso-bidi-font-style:normal;"&gt;myVariable&lt;/I&gt;().&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;"&gt;&lt;FONT face=Calibri size=3&gt;This is pretty cool and very powerful. However, the problem comes when you start looking at a large complex code base. Since there are no types you can’t easily determine the type of a variable. What the InfoPath team has done is used a naming convention for the variables. This allows us to track the object back to a source file. &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;"&gt;&lt;FONT face=Calibri size=3&gt;However, since this is still a non typed language and there is no easy way to use the right click style &lt;I style="mso-bidi-font-style:normal;"&gt;go to definition&lt;/I&gt; found in Visual Studio and other tools.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;"&gt;&lt;SPAN style="FONT-FAMILY:'Candara','sans-serif';"&gt;&lt;FONT size=3&gt;When learning a new code base tools like this make things much easier. Working in JavaScript is analogous to walking around a dark room looking for a marble.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;"&gt;&lt;SPAN style="FONT-FAMILY:'Candara','sans-serif';"&gt;&lt;FONT size=3&gt;If anyone has any hints or tips on navigating large JavaScript code base let me know your thoughts.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.officezealot.com/aggbug.aspx?PostID=20090" width="1" height="1"&gt;</description><category domain="http://blogs.officezealot.com/dreamey/archive/tags/Languages/default.aspx">Languages</category><category domain="http://blogs.officezealot.com/dreamey/archive/tags/IPFS/default.aspx">IPFS</category></item></channel></rss>