<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://k2underground.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>From The Bench</title><link>http://k2underground.com/blogs/fromthebench/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61120.2)</generator><item><title>Leverage existing SmartObjects to access new Sharepoint sites created with Templates or Site Definitions</title><link>http://k2underground.com/blogs/fromthebench/archive/2008/11/21/leverage-existing-smartobjects-to-access-new-sharepoint-sites-created-with-templates-or-site-definitions.aspx</link><pubDate>Fri, 21 Nov 2008 17:01:00 GMT</pubDate><guid isPermaLink="false">1c9bda6b-c6e6-4e79-8d32-b70ad0011ef7:27386</guid><dc:creator>Joseph</dc:creator><slash:comments>0</slash:comments><comments>http://k2underground.com/blogs/fromthebench/comments/27386.aspx</comments><wfw:commentRss>http://k2underground.com/blogs/fromthebench/commentrss.aspx?PostID=27386</wfw:commentRss><description>&lt;P&gt;Throughout the Sharepoint service interface you will find a curious little property called Sharepoint URL.&amp;nbsp;&amp;nbsp; This url refers to the "site" that you want to run the method against, for instance &lt;A href="http://localhost/somesite"&gt;http://localhost/somesite&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Attached is a Word Doc that walks you through a quick overview of getting an example of this running and understanding how you can leverage this in your processes.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://k2underground.com/aggbug.aspx?PostID=27386" width="1" height="1"&gt;</description><enclosure url="http://k2underground.com/blogs/fromthebench/attachment/27386.ashx" length="484864" type="application/msword" /></item><item><title>InfoPath Tip: InfoPath Wizards Part 2 - Conditional Formatting Is Your Friend</title><link>http://k2underground.com/blogs/fromthebench/archive/2008/11/19/infopath-tip-infopath-wizards-part-2-conditional-formatting-is-your-friend.aspx</link><pubDate>Wed, 19 Nov 2008 19:12:00 GMT</pubDate><guid isPermaLink="false">1c9bda6b-c6e6-4e79-8d32-b70ad0011ef7:27350</guid><dc:creator>jscott</dc:creator><slash:comments>0</slash:comments><comments>http://k2underground.com/blogs/fromthebench/comments/27350.aspx</comments><wfw:commentRss>http://k2underground.com/blogs/fromthebench/commentrss.aspx?PostID=27350</wfw:commentRss><description>&lt;p class="MsoNormal"&gt;In my last post, I talked about how to create an online wizard using InfoPath and Forms Services. It was a pretty simple process, but I did mention there was a pitfall regarding data validation.&lt;br&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;The pitfall is when using data validation on multiple views in a wizard scenario, the submit button is typically on the last view/page of the wizard. The submit button is responsible for causing data validation to fire. This can create an issue if one of the controls you used 3 pages back has a validation problem. The user is told validation failed, but what they aren’t told is which view contains the offending field. &lt;/p&gt;&lt;p class="MsoNormal"&gt;One way to address this issue is by using conditional formatting.&lt;/p&gt;&lt;p class="MsoNormal"&gt;Conditional formatting allows you to hide or disable controls based on conditions in the form, hence the name. Additionally, there are other formatting options such as read-only or text formatting options.&lt;/p&gt;&lt;p class="MsoNormal"&gt;This approach works best when dealing with situations where the data validation pertains to required fields. You may be able to handle more complex situations, but it will take some creativity and a combination of rules and conditional formatting. For the purpose of this article, I am going to stick to required fields.&lt;/p&gt;&lt;p class="MsoNormal"&gt;Conditional formatting doesn’t actually validate the data, but what it can do is prevent the user from advancing in the wizard if they haven’t filled in all the required fields.&lt;span style="mso-spacerun:yes;"&gt;  &lt;/span&gt;The trick is you don’t apply the formatting rules to the field; you apply the formatting to the navigation button.&lt;/p&gt;&lt;p class="MsoNormal"&gt;In our wizard scenario, to advance from step to step (change from one IP view to the next) we had to provide the user with a NEXT button. What we are going to do is set the conditional formatting to disable the NEXT button if our field we are requiring has been left blank.&lt;/p&gt;&lt;p class="MsoNormal"&gt;First, locate the navigation button on your view, right click and choose “conditional formatting.” You will be presented with a conditional formatting dialogue box. You have the option of adding multiple formatting rules. &lt;/p&gt;&lt;p class="MsoNormal"&gt;Next, click the add button and you will be presented with the “Conditional Format” window. The first line in the window is where you will define the condition.&lt;span style="mso-spacerun:yes;"&gt;  &lt;/span&gt;For this example,I am going to assume I have a field called “name” that I am going to require.In the conditional format window, I would select the “name” field from the first drop down box. The middle drop down is your comparison argument. For this scenario, I am going to select “Is blank”. The third drop down box becomes unavailable since the comparison argument I chose doesn’t’ make a comparison against another field. &lt;span style="mso-spacerun:yes;"&gt; &lt;/span&gt;At this point,you could also click the “And” button which would allow you to add another condition rule to check if you had more than one field required. For example, you could say if Name is blank OR address is blank. Once you click the “And” button, you are given a drop down list so that you may specify the logic that needs to be applied to the second condition.&lt;/p&gt;&lt;p class="MsoNormal"&gt;The bottom half of the window is what sort of formatting isapplied based on the conditions we just defined above. Since I am checking to see if the field is blank because I am going to require that field (in this case the “name” field), I will check “Disable this control.”&lt;span style="mso-spacerun:yes;"&gt;  &lt;/span&gt;The NEXT button will remain on our page, but the user will be unable to click it unless they have provided a value for the name field.&lt;/p&gt;&lt;p class="MsoNormal"&gt;These steps would need to be repeated on the navigation buttons on the rest of the views in our wizard. These steps could even be applied to the submit button on the last view, to prevent submission of the form if certain fields on that page are blank.&lt;/p&gt;&lt;p class="MsoNormal"&gt;The goal of this approach is to prevent the user from advancing to the next page in the wizard if all the fields we need have not been filled out, so refrain from creating conditional formatting rules that reference fields on other views as we are only interested in checking to see if this step in our wizard have been fully completed before allowing the user to advance to the next step.&lt;/p&gt;&lt;p class="MsoNormal"&gt;Granted there are situations where this approach will not work because the validation required is more complex, but works great for scenarios where the need is simply to check if the field has been completed or not.&lt;/p&gt;&lt;img src="http://k2underground.com/aggbug.aspx?PostID=27350" width="1" height="1"&gt;</description></item><item><title>InfoPath Tip: Creating a wizard using InfoPath and Form Services</title><link>http://k2underground.com/blogs/fromthebench/archive/2008/11/17/infopath-tip-creating-a-wizard-using-infopath-and-form-services.aspx</link><pubDate>Mon, 17 Nov 2008 17:33:00 GMT</pubDate><guid isPermaLink="false">1c9bda6b-c6e6-4e79-8d32-b70ad0011ef7:27298</guid><dc:creator>jscott</dc:creator><slash:comments>2</slash:comments><comments>http://k2underground.com/blogs/fromthebench/comments/27298.aspx</comments><wfw:commentRss>http://k2underground.com/blogs/fromthebench/commentrss.aspx?PostID=27298</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;"&gt;&lt;FONT face=Calibri size=3&gt;It would seem that InfoPath and I are crossing paths on a more frequent basis these days. I was assigned to assist a client with an interesting idea, they wanted to use InfoPath and Form Services to create a wizard (i.e. a series of web pages) interface for the start of a process, &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;"&gt;&lt;FONT face=Calibri size=3&gt;I admit, I had to crack the InfoPath book for this one, but what I found out is that it is actually simple to accomplish! &lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;"&gt;&lt;FONT face=Calibri size=3&gt;First, you will need to create an InfoPath form with a view for each step (page) in the wizard. For example, let’s assume that you want to create a wizard that consists of 3 steps. You will have a view for Step 1, Step 2 and Step 3. Each view will contain fields for the information that needs to be collected during that step, PLUS one extra feature: the “next” button.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;"&gt;&lt;FONT face=Calibri size=3&gt;The nice thing about using Form Services with InfoPath in this scenario is that moving between the pages in our wizard doesn’t require anything special other than a button or two that surfaces the ability to move between the views. The reason is that MOSS manages the session for you and automatically saves the information you are collecting as part of the session as you move from page to page.&lt;SPAN style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/SPAN&gt;Visit with the MOSS Administrator to make sure session state has been enabled in your configuration.&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;As I mentioned, each of the views will need to have a button on the page that moves the wizard from one view to the next. The configuration of the button is pretty simple. All that is required is one rule on the button that is set to change the view of the form. For example, the button on “Step 1” view would have a rule to change the view to “Step 2”. If you are not sure where to set the rules for your button, just right click on the control and choose Button Properties &lt;/FONT&gt;&lt;SPAN style="FONT-FAMILY:Wingdings;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri;mso-char-type:symbol;mso-symbol-font-family:Wingdings;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;"&gt;&lt;SPAN style="mso-char-type:symbol;mso-symbol-font-family:Wingdings;"&gt;à&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt; Rules… &lt;/FONT&gt;&lt;SPAN style="FONT-FAMILY:Wingdings;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri;mso-char-type:symbol;mso-symbol-font-family:Wingdings;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;"&gt;&lt;SPAN style="mso-char-type:symbol;mso-symbol-font-family:Wingdings;"&gt;à&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt; Add… &lt;/FONT&gt;&lt;SPAN style="FONT-FAMILY:Wingdings;mso-ascii-font-family:Calibri;mso-hansi-font-family:Calibri;mso-char-type:symbol;mso-symbol-font-family:Wingdings;mso-ascii-theme-font:minor-latin;mso-hansi-theme-font:minor-latin;"&gt;&lt;SPAN style="mso-char-type:symbol;mso-symbol-font-family:Wingdings;"&gt;à&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT face=Calibri&gt; Add Action…&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="mso-no-proof:yes;"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt; &lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;The one key thing to keep in mind when working with InfoPath is that IP is all about the rules. So be prepared for several dialogue boxes and lots of clicking “OK”.&lt;SPAN style="mso-no-proof:yes;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;"&gt;&lt;SPAN style="mso-no-proof:yes;"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;The final view in the wizard (in this scenario “Step 3”), the button will be configured as a a submit button instead of using it to change views. If you wanted to add extra functionality, the submit button could be configured to change the view to confirmation page after submit. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;"&gt;&lt;SPAN style="mso-no-proof:yes;"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Once the views have been created and the buttons added to control navigation and submission, the IP form is ready to be integrated into a K2 process. All the data that is collected in the various views of the form is saved as part of the session allowing it all to be submitted to K2 during the final step. K2 treats the form just as it would any other InfoPath form, so nothing special is needed within K2 outside of the normal InfoPath integration steps.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;"&gt;&lt;SPAN style="mso-no-proof:yes;"&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;I was pleasantly surprised with how simple it was to setup a wizard, but it isn’t without a few pitfalls. The primary issue is using multiple views in this configuration is going to cause an interesting situation if the form designer decides to use field validation. IP’s default behavior is to fire validation upon submit. IP will validate all controls configured for validation on all the views, but it will not tell you which control is causing the validation error. There is a pretty quick solution to the situation, but I’ll save that for another post. In the mean time, you can find an example InfoPath form attached to this post.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 10pt;"&gt;&lt;SPAN style="mso-no-proof:yes;"&gt;Until next time....&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://k2underground.com/aggbug.aspx?PostID=27298" width="1" height="1"&gt;</description><enclosure url="http://k2underground.com/blogs/fromthebench/attachment/27298.ashx" length="4731" type="application/x-zip-compressed" /></item><item><title>InfoPath Tip: My form won't open in Form Services!</title><link>http://k2underground.com/blogs/fromthebench/archive/2008/11/13/infopath-tip-my-form-won-t-open-in-form-services.aspx</link><pubDate>Thu, 13 Nov 2008 17:13:00 GMT</pubDate><guid isPermaLink="false">1c9bda6b-c6e6-4e79-8d32-b70ad0011ef7:27251</guid><dc:creator>jscott</dc:creator><slash:comments>1</slash:comments><comments>http://k2underground.com/blogs/fromthebench/comments/27251.aspx</comments><wfw:commentRss>http://k2underground.com/blogs/fromthebench/commentrss.aspx?PostID=27251</wfw:commentRss><description>&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt;When working at a client site, I ran into a situation where my InfoPath form became cross with me and refused to open in Forms Services. This was confusing because everything had been working great up until that point. Isn’t it that way with most relationships?&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&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;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt;I had been working on my form making changes. One of the changes caused an error in&amp;nbsp;the form which prevented it from opening&amp;nbsp;using just the web browser. Below are a few things to check if you find yourself in a situation where your IP form refuses to open using Form Services.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&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 0.5in;TEXT-INDENT:-0.25in;mso-list:l0 level1 lfo1;tab-stops:list .5in;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;mso-fareast-font-family:Arial;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;1)&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt;Check the current patch level of the K2 software&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt;. I feel it is always a good rule of thumb to make sure you have the latest and greatest. To find out what level you are on, go into the Control Panel &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Wingdings;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;mso-char-type:symbol;mso-symbol-font-family:Wingdings;"&gt;&lt;SPAN style="mso-char-type:symbol;mso-symbol-font-family:Wingdings;"&gt;à&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt; Add Remove Programs &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Wingdings;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;mso-char-type:symbol;mso-symbol-font-family:Wingdings;"&gt;&lt;SPAN style="mso-char-type:symbol;mso-symbol-font-family:Wingdings;"&gt;à&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt; Check “Show Updates” and compare the version number of the K2 bits to the latest version number listed in the K2 customer portal at &lt;A href="http://portal.k2workflow.com/"&gt;&lt;FONT color=#800080&gt;http://portal.k2workflow.com&lt;/FONT&gt;&lt;/A&gt;. The latest updates and releases can be found under Downloads &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Wingdings;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;mso-char-type:symbol;mso-symbol-font-family:Wingdings;"&gt;&lt;SPAN style="mso-char-type:symbol;mso-symbol-font-family:Wingdings;"&gt;à&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt; BlackPearl.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt 0.25in;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&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 0.5in;TEXT-INDENT:-0.25in;mso-list:l0 level1 lfo1;tab-stops:list .5in;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;mso-fareast-font-family:Arial;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;2)&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt;Check to make sure “Web Browser” is selected in the InfoPath Integration wizard. &lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt;When you add an IP form to your K2 process, you are asked if you want to open the form in InfoPath, Web Browser with No InfoPath or Web Browser. To check this setting, click on the purple InfoPath Integration icon in the upper right hand corner of the design canvas in K2 Designer for Visual Studio. In the wizard window, choose your form and click the edit button on the menu bar above. In the next window, check the “Form Client” option to ensure “web browser” is selected.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&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 0.5in;TEXT-INDENT:-0.25in;mso-list:l0 level1 lfo1;tab-stops:list .5in;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;mso-fareast-font-family:Arial;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;3)&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt;Check the Form Library settings in MOSS.&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt; All is in vain if the MOSS form library itself isn’t configured to open the form template in a web browser. During deployment, the form library setting will be made based on your choices when you added your InfoPath form to the process. From time to time, a situation may arise where the form library doesn’t get configured. It could be due to an environmental issue or the form client option was incorrectly set. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&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 0.5in;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt;In any case, it is a good idea to double check. Navigate to your form library in MOSS, choose Settings &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Wingdings;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;mso-char-type:symbol;mso-symbol-font-family:Wingdings;"&gt;&lt;SPAN style="mso-char-type:symbol;mso-symbol-font-family:Wingdings;"&gt;à&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt; Form Library Settings. Under General Settings, you will find an option for “Advanced Settings.” Here, there will be an option for “Browser-enabled documents” which will need to be set to “Display as web page.” Make the change if needed and click OK to save your changes.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt 0.5in;TEXT-INDENT:-0.25in;mso-list:l0 level1 lfo1;tab-stops:list .5in;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;mso-fareast-font-family:Arial;"&gt;&lt;SPAN style="mso-list:Ignore;"&gt;4)&lt;SPAN style="FONT:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;B style="mso-bidi-font-weight:normal;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt;Check the design of your form. &lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt;This was the problem in my situation. I had made changes to the form that caused an error. Whenever you make changes to or when you originally design your form, always run the design checker.&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&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 0.5in;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt;Before you begin, you will need to open Tools &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Wingdings;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;mso-char-type:symbol;mso-symbol-font-family:Wingdings;"&gt;&lt;SPAN style="mso-char-type:symbol;mso-symbol-font-family:Wingdings;"&gt;à&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt; Form Options &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Wingdings;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;mso-char-type:symbol;mso-symbol-font-family:Wingdings;"&gt;&lt;SPAN style="mso-char-type:symbol;mso-symbol-font-family:Wingdings;"&gt;à&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt; Compatibility and ensure you have checked “Design a form template that can be opened in a browser or InfoPath.” Also on this page, there will be a text box where you will enter the URL of your MOSS website. InfoPath will use this URL to contact your MOSS server to check the design of the form template.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt 0.5in;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&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 0.5in;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt;To check your design, choose Tools &lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Wingdings;mso-ascii-font-family:Arial;mso-hansi-font-family:Arial;mso-bidi-font-family:Arial;mso-char-type:symbol;mso-symbol-font-family:Wingdings;"&gt;&lt;SPAN style="mso-char-type:symbol;mso-symbol-font-family:Wingdings;"&gt;à&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt; Design Checker from inside InfoPath. If your form has any errors or warnings, they will be displayed on the right side of the window. My form had an error with an image I chose to use and was the source of my troubles. I corrected the issue and redeployed. Success!&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt 0.5in;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt;Please note that these are not in any particular order and assumes you are working in an environment that has been properly configured. You will need to be using the enterpirse version of MOSS which includes Form Serivces, or installed the stand alone Form Services product. A good way to check to see if Form Services is working properly before you get started with K2 is simply create a form library and check the setting from step 3 above. Then, create a web enabled form in InfoPath and deploy directly to your MOSS/FS server from InfoPath. Try to open the form from the library to see if it opens in a web browser as expected. If it works, you are ready to start working with K2. If not, I see additional troubleshooting steps in your future and quality time with the MOSS administrator.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt;In my case, since the form had been working before I made changes I should have ran design checker first. It could be considered a best practice to always run design checker to make sure you aren't setting yourself up for an issue later. What is the saying, "An ounce of prevention is worth a pound of cure?"&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt;Have fun!&lt;/SPAN&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P class=MsoNormal style="MARGIN:0in 0in 0pt 0.5in;"&gt;&lt;SPAN style="FONT-SIZE:10pt;FONT-FAMILY:Arial;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://k2underground.com/aggbug.aspx?PostID=27251" width="1" height="1"&gt;</description></item><item><title>InfoPath and Process Deployment Tip</title><link>http://k2underground.com/blogs/fromthebench/archive/2008/10/31/infopath-and-process-deployment-tip.aspx</link><pubDate>Fri, 31 Oct 2008 21:10:00 GMT</pubDate><guid isPermaLink="false">1c9bda6b-c6e6-4e79-8d32-b70ad0011ef7:27012</guid><dc:creator>jscott</dc:creator><slash:comments>0</slash:comments><comments>http://k2underground.com/blogs/fromthebench/comments/27012.aspx</comments><wfw:commentRss>http://k2underground.com/blogs/fromthebench/commentrss.aspx?PostID=27012</wfw:commentRss><description>&lt;P&gt;This will be one of the more brief posts you may read in this blog, but for those of you out there that are the adventurous sort who find yourselves being drawn to InfoPath like a moth to a flame, I have a little nugget for you to keep in mind when working with IP.&lt;/P&gt;
&lt;P&gt;If most of you do like I do, you go straight to the InfoPath Form Templates directory&amp;nbsp; to make design changes to your IP form. Something to keep in mind is that you must close your InfoPath form before attempting to deploy. Should you forget and leave the form open, your deploy will fail. &lt;/P&gt;
&lt;P&gt;And as always, if you are editing your IP form directly and bypassing the InfoPath integration wizard in Visual Studio, be sure to go back in VS and run the InfoPath Integration Wizard and chose "Refresh" to update the K2 process with any schema changes you may have made to the form. If your changes were purely cosmetic you won't have to worry, but always good to do just in case.&lt;/P&gt;
&lt;P&gt;Have fun!&lt;/P&gt;&lt;img src="http://k2underground.com/aggbug.aspx?PostID=27012" width="1" height="1"&gt;</description></item><item><title>How to use the Not class for filtering SmartObject list results</title><link>http://k2underground.com/blogs/fromthebench/archive/2008/10/31/quick-tip-how-to-use-the-not-class-for-filtering-smartobject-list-results.aspx</link><pubDate>Fri, 31 Oct 2008 14:02:00 GMT</pubDate><guid isPermaLink="false">1c9bda6b-c6e6-4e79-8d32-b70ad0011ef7:27003</guid><dc:creator>MarkJGeisler</dc:creator><slash:comments>0</slash:comments><comments>http://k2underground.com/blogs/fromthebench/comments/27003.aspx</comments><wfw:commentRss>http://k2underground.com/blogs/fromthebench/commentrss.aspx?PostID=27003</wfw:commentRss><description>&lt;P&gt;In the Developers Reference there is a great example on how to build a composite filter for SmartObject list results.&amp;nbsp; For the most part following this example will get you far, but the Not class can seem a little confusing at first.&amp;nbsp; You will want to use&amp;nbsp;this class if you need to exclude SmOs&amp;nbsp;from your&amp;nbsp;result list where field values meet some criteria (which&amp;nbsp;has the same behavior&amp;nbsp;to the Transact SQL "NOT"&amp;nbsp;function or &amp;lt;&amp;gt; operator).&amp;nbsp; The classes in the SourceCode.SmartObjects.Client.Filters namespace give you what you need to programmatically build SmartObject List filters:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void SetProductData()&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Create the SmO server object, create and open a connection with &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // the connection string located in the web.config&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SmartObjectClientServer smoClientServer = new SmartObjectClientServer();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; smoClientServer.CreateConnection();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; smoClientServer.Connection.Open(ConfigurationManager.AppSettings["SmOServerConnectionString"]);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Create the SmO "ACMEProduct", create a list object for the default SmartBox list method&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // and set the SmO's the method that it will execute&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SmartObject partsSmO = smoClientServer.GetSmartObject("ACMEProduct");&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SmartListMethod smoListMethod = partsSmO.ListMethods["GetList"];&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; partsSmO.MethodToExecute = smoListMethod.Name;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Create an equals filter using the constructor that takes the Description field name and&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // the text value "Rocket Skates".&amp;nbsp; This will filter out any results in the SmO list not matching that criteria only.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The equivilant TSQL statement would be WHERE [&amp;lt;Field Name&amp;gt;] = '&amp;lt;Field Value&amp;gt;'&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Equals equalsFilter = new Equals(new PropertyExpression("Description", PropertyType.Text),&lt;BR&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; new ValueExpression("Rocket Skates", PropertyType.Text));&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The Not filter implements the opposite behavior (filter out the given field and value).&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // The equivilant TSQL statement would be WHERE [&amp;lt;Field Name&amp;gt;] &amp;lt;&amp;gt; '&amp;lt;Field Value&amp;gt;' or if using the&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // IN keyword, WHERE [&amp;lt;Field Name&amp;gt;] NOT IN ('&amp;lt;Field Value&amp;gt;')&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Not notEqualsFilter = new Not(equalsFilter);&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Assign the filter to the SmartListMethod property&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; smoListMethod.Filter = notEqualsFilter;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // For this example I will just return a DataTable from the SmartObject and assign it to a&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // GridView web server control&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //DataTable partsDataTable = ;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.partsGridView.DataSource = smoClientServer.ExecuteListDataTable(partsSmO);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.partsGridView.DataBind();&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; smoClientServer.Connection.Close();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;That's all there is to it as far as this simple filter goes, but hopefully&amp;nbsp;it shows the capabilities available for writing much more complex and useful filters for your own applications.&lt;/P&gt;&lt;img src="http://k2underground.com/aggbug.aspx?PostID=27003" width="1" height="1"&gt;</description><category domain="http://k2underground.com/blogs/fromthebench/archive/tags/SmartObject+list+filter+not/default.aspx">SmartObject list filter not</category></item><item><title>How to do a SELECT DISTINCT against a SmartObject</title><link>http://k2underground.com/blogs/fromthebench/archive/2008/10/30/how-to-do-a-select-distinct-against-a-smartobject.aspx</link><pubDate>Thu, 30 Oct 2008 10:06:45 GMT</pubDate><guid isPermaLink="false">1c9bda6b-c6e6-4e79-8d32-b70ad0011ef7:26983</guid><dc:creator>Bob</dc:creator><slash:comments>0</slash:comments><comments>http://k2underground.com/blogs/fromthebench/comments/26983.aspx</comments><wfw:commentRss>http://k2underground.com/blogs/fromthebench/commentrss.aspx?PostID=26983</wfw:commentRss><description>&lt;p&gt;I was asked recently if it was possible to do a SELECT DISTINCT against a SmartObject GetList method.&amp;#160; You can so I thought I'd share it here.&amp;#160; The key is to use the .NET Data Provider API.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SourceCode.SmartObjects.Client.SmartObjectClientServer serverName = new SmartObjectClientServer(); &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //define the SmartObject method to be called   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string strSelectCmd = &amp;quot;SELECT DISTINCT Building FROM Department&amp;quot;; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //redefine the connection string information   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SourceCode.Data.SmartObjectsClient.SOConnection oConn = new SourceCode.Data.SmartObjectsClient.SOConnection(&amp;quot;localhost&amp;quot;, 5555);    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SourceCode.Data.SmartObjectsClient.SOCommand oCmd = new SourceCode.Data.SmartObjectsClient.SOCommand(strSelectCmd, oConn);    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SourceCode.Data.SmartObjectsClient.SODataReader oRdr = null; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //may be repetitive code   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oCmd.CommandType = CommandType.Text; &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; // Write to Responses Smobject - get ID back   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oRdr = oCmd.ExecuteReader(CommandBehavior.CloseConnection); &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; int nRecCount = 0;   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; string strValue = &amp;quot;&amp;quot;;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; //loop through the record adding info to the notes field    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (oRdr != null)    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; while (oRdr.Read())    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; nRecCount++;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; strValue = oRdr[&amp;quot;Building&amp;quot;].ToString();    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; else    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; oRdr.Close();&lt;/p&gt;&lt;img src="http://k2underground.com/aggbug.aspx?PostID=26983" width="1" height="1"&gt;</description></item><item><title>How to Extract a a Deployed SmartObject Definition File from K2 blackpearl</title><link>http://k2underground.com/blogs/fromthebench/archive/2008/10/30/how-to-extract-a-a-deployed-smartobject-definition-file-from-k2-blackpearl.aspx</link><pubDate>Thu, 30 Oct 2008 10:00:51 GMT</pubDate><guid isPermaLink="false">1c9bda6b-c6e6-4e79-8d32-b70ad0011ef7:26982</guid><dc:creator>Bob</dc:creator><slash:comments>0</slash:comments><comments>http://k2underground.com/blogs/fromthebench/comments/26982.aspx</comments><wfw:commentRss>http://k2underground.com/blogs/fromthebench/commentrss.aspx?PostID=26982</wfw:commentRss><description>&lt;p&gt;Sometimes it is necessary to retrieve the SmartObject definition file (SODX) for a SmartObject that has already been deployed to the server.&amp;#160;&amp;#160; Perhaps you lost the original SODX and didn't have source control in place.&amp;#160; There are a couple of ways to recover an SODX:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;K2 Object Browser in Visual Studio&lt;/li&gt;    &lt;li&gt;SmartObject Service Tester (aka Amazing SmartObject Utility)&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;K2 Object Browser in Visual Studio&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;1. Open Visual Studio&lt;/p&gt;  &lt;p&gt;2. Open/Create a K2 project&lt;/p&gt;  &lt;p&gt;3. Open &amp;#8220;K2 Object Browser&amp;#8221;&lt;/p&gt;  &lt;p&gt;4. Select the &amp;#8220;Environment&amp;#8221; tab&lt;/p&gt;  &lt;p&gt;5. Expand SmartObject Server(s)&lt;/p&gt;  &lt;p&gt;6. Drill down to the desired SmartObject&lt;/p&gt;  &lt;p&gt;7. Right click on it and select &amp;#8220;Save to Local&amp;#8221;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://k2underground.com/blogs/fromthebench/WindowsLiveWriter/HowtoExtractaaDeployedSmartObjectDefinit_548A/clip_image002_2.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="244" alt="clip_image002" src="http://k2underground.com/blogs/fromthebench/WindowsLiveWriter/HowtoExtractaaDeployedSmartObjectDefinit_548A/clip_image002_thumb.jpg" width="207" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;8. You should now see the SODX in the process.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://k2underground.com/blogs/fromthebench/WindowsLiveWriter/HowtoExtractaaDeployedSmartObjectDefinit_548A/clip_image002%5B4%5D.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="76" alt="clip_image002[4]" src="http://k2underground.com/blogs/fromthebench/WindowsLiveWriter/HowtoExtractaaDeployedSmartObjectDefinit_548A/clip_image002%5B4%5D_thumb.jpg" width="241" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;SmartObject Service Tester (aka Amazing SmartObject Utility)&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;1. Open the SmartObject Service Tester/Amazing SmartObject utility &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;NOTE: before version 0807 this utility was called the &amp;quot;Amazing SmartObject Utility&amp;quot; and was available on &lt;a href="http://k2underground.com/k2/ProjectHome.aspx?ProjectID=47"&gt;K2 Underground - blackmarket&lt;/a&gt;.&amp;#160; With version 0807 it is installed with the K2 server components in the folder ...\blackpearl\servicebroker\SmartObject Service Tester.exe&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;2. Drill down to your desired smartobject&lt;/p&gt;  &lt;p&gt;3. Right click on it and select &amp;#8220;To Sodx&amp;#8221;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://k2underground.com/blogs/fromthebench/WindowsLiveWriter/HowtoExtractaaDeployedSmartObjectDefinit_548A/clip_image002%5B6%5D.jpg"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="157" alt="clip_image002[6]" src="http://k2underground.com/blogs/fromthebench/WindowsLiveWriter/HowtoExtractaaDeployedSmartObjectDefinit_548A/clip_image002%5B6%5D_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;4. Provide a location and name for the generated SODX file&lt;/p&gt;  &lt;p&gt;5. You should now have the SODX at that location.&lt;/p&gt;&lt;img src="http://k2underground.com/aggbug.aspx?PostID=26982" width="1" height="1"&gt;</description></item><item><title>SmartObject Logging</title><link>http://k2underground.com/blogs/fromthebench/archive/2008/10/24/smartobject-logging.aspx</link><pubDate>Fri, 24 Oct 2008 21:51:00 GMT</pubDate><guid isPermaLink="false">1c9bda6b-c6e6-4e79-8d32-b70ad0011ef7:26893</guid><dc:creator>Bob</dc:creator><slash:comments>0</slash:comments><comments>http://k2underground.com/blogs/fromthebench/comments/26893.aspx</comments><wfw:commentRss>http://k2underground.com/blogs/fromthebench/commentrss.aspx?PostID=26893</wfw:commentRss><description>K2 blackpearl exposes quite an extensive and configurable logging framework.&amp;nbsp; The most commonly used logging within K2 blackpearl is the host server logging. &amp;nbsp; &lt;A title="KB 309" href="http://kb.k2workflow.com/Articles/KB000309.aspx" target=_blank&gt;KB 309 &lt;/A&gt;is devoted to the topic of host server logging and it’s various levels of configuration and extensibility.&amp;nbsp; If you haven’t read this KB yet, I highly recommend doing so as it is a very useful document.&amp;nbsp; The topic of this post however will be a lesser known area of logging: SmartObject logging.&lt;BR&gt;&lt;BR&gt;SmartObject logging permits you to monitor the messages (called “packages”) that flow into and out of the services layer.&amp;nbsp; So this means you can see what and who submitted a request to the services layer and what if any results came out, all through configurable logging.&amp;nbsp; This can be very useful when trying to track down SmartObject / ServiceObject issues.&lt;BR&gt;&lt;BR&gt;To enable this (this is all done on the K2 server):&lt;BR&gt;&lt;BR&gt;&amp;nbsp; 1. Edit the file&amp;nbsp; C:\Program Files\K2 blackpearl\Host Server\Bin\ SourceCode.SmartObjects.Runtime.config&lt;BR&gt;&lt;BR&gt;&amp;nbsp; 2. Within the ‘logging’ repeating node change the ‘log=”no”’ to ‘log=”yes”’ for the desired log types.&amp;nbsp; I’d recommend turning them all on to see what types of information you can view.&lt;BR&gt;&lt;BR&gt;&amp;nbsp; &amp;lt;logging&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;serviceauthentication log="yes" path="c:\program files\k2 blackpearl\ServiceBroker\Logs\serviceauth.log" overwrite="no" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;timestamping log="yes" path="c:\program files\k2 blackpearl\ServiceBroker\Logs\timestamp.log" overwrite="no" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;brokerpackagein log="yes" path="c:\program files\k2 blackpearl\ServiceBroker\Logs\brokerpackagein.log" overwrite="no" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;brokerpackageout log="yes" path="c:\program files\k2 blackpearl\ServiceBroker\Logs\brokerpackageout.log" overwrite="no" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;servicepackagein log="yes" path="c:\program files\k2 blackpearl\ServiceBroker\Logs\servicepackagein.log" overwrite="no" /&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;servicepackageout log="yes" path="c:\program files\k2 blackpearl\ServiceBroker\Logs\servicepackageout.log" overwrite="no" /&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;/logging&amp;gt;&lt;BR&gt;&lt;BR&gt;&amp;nbsp; 3.&amp;nbsp; Save this file and restart the K2 service&lt;BR&gt;&lt;BR&gt;&amp;nbsp; 4.&amp;nbsp; Now do something with a SmartObject&lt;BR&gt;&lt;BR&gt;&amp;nbsp; 5.&amp;nbsp; Browse to the directly setup as the logging directory in the config file (in step 2 above it is c:\program files\k2 blackpearl\ServiceBroker\Logs\).&lt;BR&gt;&lt;BR&gt;&amp;nbsp; 6.&amp;nbsp; You should now see the logged files.&amp;nbsp; For example, if I open up files:&lt;BR&gt;&lt;BR&gt;
&lt;UL&gt;
&lt;LI&gt;&amp;nbsp; &lt;SPAN style="FONT-WEIGHT:bold;"&gt;Servicepackagein.log&lt;/SPAN&gt; captures the details about the submission to the method:&lt;/LI&gt;&lt;/UL&gt;-------------------------&lt;BR&gt;10/24/2008 3:33:04 PM&lt;BR&gt;&lt;BR&gt;&amp;lt;serviceinstance guid="fa523850-e46c-46aa-b31a-5207a288329f" name="DestinationsDynamicWebService" type="DynamicWebService.ServiceBroker"&amp;gt;&amp;lt;metadata&amp;gt;&amp;lt;display&amp;gt;&amp;lt;displayname&amp;gt;Destinations Dynamic Web Service&amp;lt;/displayname&amp;gt;&amp;lt;description&amp;gt;Provides K2 [blackpearl] with the capabilities required to interface with web service.&amp;lt;/description&amp;gt;&amp;lt;/display&amp;gt;&amp;lt;service /&amp;gt;&amp;lt;/metadata&amp;gt;&amp;lt;serviceobject&amp;gt;&amp;lt;objects&amp;gt;&amp;lt;object name="GetDestinations" type="" version="" active="true"&amp;gt;&amp;lt;metadata&amp;gt;&amp;lt;display&amp;gt;&amp;lt;displayname&amp;gt;GetDestinations&amp;lt;/displayname&amp;gt;&amp;lt;description /&amp;gt;&amp;lt;/display&amp;gt;&amp;lt;service /&amp;gt;&amp;lt;/metadata&amp;gt;&amp;lt;properties&amp;gt;&amp;lt;property name="approvalGroup" type="System.Int32" sotype="number"&amp;gt;&amp;lt;metadata&amp;gt;&amp;lt;display&amp;gt;&amp;lt;displayname&amp;gt;approvalGroup&amp;lt;/displayname&amp;gt;&amp;lt;description /&amp;gt;&amp;lt;/display&amp;gt;&amp;lt;service /&amp;gt;&amp;lt;/metadata&amp;gt;&amp;lt;value&amp;gt;1&amp;lt;/value&amp;gt;&amp;lt;/property&amp;gt;&amp;lt;property name="ReturnValue" type="System.String" sotype="text"&amp;gt;&amp;lt;metadata&amp;gt;&amp;lt;display&amp;gt;&amp;lt;displayname&amp;gt;ReturnValue&amp;lt;/displayname&amp;gt;&amp;lt;description&amp;gt;Return Value&amp;lt;/description&amp;gt;&amp;lt;/display&amp;gt;&amp;lt;service /&amp;gt;&amp;lt;/metadata&amp;gt;&amp;lt;/property&amp;gt;&amp;lt;/properties&amp;gt;&amp;lt;methods&amp;gt;&amp;lt;method name="List" type="list"&amp;gt;&amp;lt;metadata&amp;gt;&amp;lt;display&amp;gt;&amp;lt;displayname&amp;gt;List&amp;lt;/displayname&amp;gt;&amp;lt;description&amp;gt;List&amp;lt;/description&amp;gt;&amp;lt;/display&amp;gt;&amp;lt;service /&amp;gt;&amp;lt;/metadata&amp;gt;&amp;lt;validation&amp;gt;&amp;lt;requiredproperties /&amp;gt;&amp;lt;/validation&amp;gt;&amp;lt;parameters class="SourceCode.SmartObjects.Services.ServiceSDK.Objects.MethodParameters, SourceCode.SmartObjects.Services.ServiceSDK, Version=4.0.0.0, Culture=neutral, PublicKeyToken=16a2c5aaaa1b130d" /&amp;gt;&amp;lt;input&amp;gt;&amp;lt;property name="approvalGroup" /&amp;gt;&amp;lt;/input&amp;gt;&amp;lt;return&amp;gt;&amp;lt;property name="ReturnValue" /&amp;gt;&amp;lt;/return&amp;gt;&amp;lt;/method&amp;gt;&amp;lt;/methods&amp;gt;&amp;lt;/object&amp;gt;&amp;lt;/objects&amp;gt;&amp;lt;/serviceobject&amp;gt;&amp;lt;serviceconfig&amp;gt;&amp;lt;serviceauthentication securityprovider="" impersonate="true" isrequired="false"&amp;gt;&amp;lt;username&amp;gt;K2:K2DEMO\bpservice&amp;lt;/username&amp;gt;&amp;lt;extra /&amp;gt;&amp;lt;/serviceauthentication&amp;gt;&amp;lt;settings&amp;gt;&amp;lt;key name="URL" isrequired="true"&amp;gt;http://localhost/DestinationsWS/Destinations2.asmx&amp;lt;/key&amp;gt;&amp;lt;key name="TypeMapping" isrequired="false"&amp;gt;&amp;lt;object type="SourceCode.SmartObjects.Services.ServiceSDK.Objects.TypeMappings"&amp;gt;&amp;lt;typemappings&amp;gt;&amp;lt;mapping name="system.uint32" sotype="number" /&amp;gt;&amp;lt;mapping name="system.byte" sotype="text" /&amp;gt;&amp;lt;mapping name="system.uint64" sotype="number" /&amp;gt;&amp;lt;mapping name="system.int32" sotype="number" /&amp;gt;&amp;lt;mapping name="system.char" sotype="text" /&amp;gt;&amp;lt;mapping name="system.single" sotype="decimal" /&amp;gt;&amp;lt;mapping name="system.boolean" sotype="yesno" /&amp;gt;&amp;lt;mapping name="system.int64" sotype="number" /&amp;gt;&amp;lt;mapping name="system.datetime" sotype="datetime" /&amp;gt;&amp;lt;mapping name="system.decimal" sotype="decimal" /&amp;gt;&amp;lt;mapping name="system.uint16" sotype="number" /&amp;gt;&amp;lt;mapping name="system.int16" sotype="number" /&amp;gt;&amp;lt;mapping name="system.guid" sotype="guid" /&amp;gt;&amp;lt;mapping name="system.sbyte" sotype="text" /&amp;gt;&amp;lt;mapping name="system.double" sotype="decimal" /&amp;gt;&amp;lt;mapping name="system.string" sotype="text" /&amp;gt;&amp;lt;/typemappings&amp;gt;&amp;lt;/object&amp;gt;&amp;lt;/key&amp;gt;&amp;lt;/settings&amp;gt;&amp;lt;/serviceconfig&amp;gt;&amp;lt;/serviceinstance&amp;gt;&lt;BR&gt;&lt;BR&gt;
&lt;UL&gt;
&lt;LI&gt;&amp;nbsp; &lt;SPAN style="FONT-WEIGHT:bold;"&gt;Servicepackageout.log&lt;/SPAN&gt; captures the results of the methods that have been executed:&lt;/LI&gt;&lt;/UL&gt;-------------------------&lt;BR&gt;10/24/2008 3:33:04 PM&lt;BR&gt;&amp;nbsp; &lt;BR&gt;&amp;lt;DocumentElement&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;GetDestinations&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ReturnValue&amp;gt;DENALLIX\Codi&amp;lt;/ReturnValue&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;/GetDestinations&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;GetDestinations&amp;gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ReturnValue&amp;gt;DENALLIX\Administrator&amp;lt;/ReturnValue&amp;gt;&lt;BR&gt;&amp;nbsp; &amp;lt;/GetDestinations&amp;gt;&lt;BR&gt;&amp;lt;/DocumentElement&amp;gt;&amp;nbsp; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&lt;BR&gt;&lt;img src="http://k2underground.com/aggbug.aspx?PostID=26893" width="1" height="1"&gt;</description></item><item><title>Using a repeating XML node to start child IPCs</title><link>http://k2underground.com/blogs/fromthebench/archive/2008/10/22/using-a-repeating-xml-node-to-start-child-ipcs.aspx</link><pubDate>Wed, 22 Oct 2008 19:57:56 GMT</pubDate><guid isPermaLink="false">1c9bda6b-c6e6-4e79-8d32-b70ad0011ef7:26817</guid><dc:creator>Bob</dc:creator><slash:comments>0</slash:comments><comments>http://k2underground.com/blogs/fromthebench/comments/26817.aspx</comments><wfw:commentRss>http://k2underground.com/blogs/fromthebench/commentrss.aspx?PostID=26817</wfw:commentRss><description>&lt;p&gt;The below example was recently worked up and provides good insight into a little know feature.&amp;#160; It has also been added to the updated version of the &lt;a href="http://www.k2underground.com/files/folders/technical_product_documents/entry20948.aspx"&gt;K2 blackpearl Roles and Advanced Destination Rules document&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;A repeating XML node or SmartObject GetList method can be leveraged to kick off an unknown number of IPC events, each with data is mapped to the target process in a Process data field.&lt;/p&gt;  &lt;p&gt;The following example illustrates this with a repeating section of an XML field..&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Step 1&lt;/b&gt;. Create a repeating XML doc that looks something like the following.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&amp;lt;OrderXML&amp;gt;     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Order&amp;gt;Order1312&amp;lt;/Order&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Order&amp;gt;Order2412&amp;lt;/Order&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Order&amp;gt;Order3412&amp;lt;/Order&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Order&amp;gt;Order4531&amp;lt;/Order&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Order&amp;gt;Order5751&amp;lt;/Order&amp;gt;      &lt;br /&gt;&amp;lt;/OrderXML&amp;gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;b&gt;Step 2&lt;/b&gt;. Create a process-level XML data field with the above schema (called IPCXML in this example).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://k2underground.com/blogs/fromthebench/WindowsLiveWriter/UsingarepeatingXMLnodetostartchildIPCs_DD20/image_2.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="90" alt="image" src="http://k2underground.com/blogs/fromthebench/WindowsLiveWriter/UsingarepeatingXMLnodetostartchildIPCs_DD20/image_thumb.png" width="159" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;b&gt;Step 3&lt;/b&gt;. Add a Default Activity to the design canvas and go to the Advanced Destination Rules.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://k2underground.com/blogs/fromthebench/WindowsLiveWriter/UsingarepeatingXMLnodetostartchildIPCs_DD20/image_6.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="113" alt="image" src="http://k2underground.com/blogs/fromthebench/WindowsLiveWriter/UsingarepeatingXMLnodetostartchildIPCs_DD20/image_thumb_2.png" width="295" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;b&gt;Step 4&lt;/b&gt;. Select &amp;#8220;Plan Per Slot (No Destinations)&amp;#8221; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://k2underground.com/blogs/fromthebench/WindowsLiveWriter/UsingarepeatingXMLnodetostartchildIPCs_DD20/image_8.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="67" alt="image" src="http://k2underground.com/blogs/fromthebench/WindowsLiveWriter/UsingarepeatingXMLnodetostartchildIPCs_DD20/image_thumb_3.png" width="316" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;b&gt;Step 5&lt;/b&gt;. Use the &amp;#8220;Select a list field to determine how many slots should be created&amp;#8221; option and point it to the repeating node in your XML schema, and then finish the wizard. This option will repeat through the XML schema and start a new IPC for each node entry. This data can be used as initialization data for the child process&lt;/p&gt;  &lt;p&gt;&lt;a href="http://k2underground.com/blogs/fromthebench/WindowsLiveWriter/UsingarepeatingXMLnodetostartchildIPCs_DD20/image_10.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="92" alt="image" src="http://k2underground.com/blogs/fromthebench/WindowsLiveWriter/UsingarepeatingXMLnodetostartchildIPCs_DD20/image_thumb_4.png" width="441" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;b&gt;Step 6&lt;/b&gt;. Drop an IPC Event on the activity. On the Field Mapping page map a data field in your child process to the ActivityInstanceDestInstanceData. K2 Server takes the repeating XML node&amp;#8217;s value (at runtime it is stored in the InstanceData) and copies it into the data field in the child process (in the example called &amp;quot;IData).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://k2underground.com/blogs/fromthebench/WindowsLiveWriter/UsingarepeatingXMLnodetostartchildIPCs_DD20/image_12.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="237" alt="image" src="http://k2underground.com/blogs/fromthebench/WindowsLiveWriter/UsingarepeatingXMLnodetostartchildIPCs_DD20/image_thumb_5.png" width="767" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The parent process starts a new IPC process for every repeating node entry and passes the XML node value to the data field in the child process. In this example it starts 5 child processes via IPC and each instance has a process data field containing a unique order number.&lt;/p&gt;&lt;img src="http://k2underground.com/aggbug.aspx?PostID=26817" width="1" height="1"&gt;</description></item><item><title>Sharepoint Site Migration with Data</title><link>http://k2underground.com/blogs/fromthebench/archive/2008/09/29/sharepoint-site-migration-with-data.aspx</link><pubDate>Mon, 29 Sep 2008 16:46:00 GMT</pubDate><guid isPermaLink="false">1c9bda6b-c6e6-4e79-8d32-b70ad0011ef7:26371</guid><dc:creator>Joseph</dc:creator><slash:comments>0</slash:comments><comments>http://k2underground.com/blogs/fromthebench/comments/26371.aspx</comments><wfw:commentRss>http://k2underground.com/blogs/fromthebench/commentrss.aspx?PostID=26371</wfw:commentRss><description>It is becoming increasingly popular for dropdownlists in your aspx and infopath forms to be based on SharePoint lists which are easily maintained in enterprises where SharePoint is already being leveraged for other purposes.  The attached Word document details a time-saver that can be used when migrating a process from your VPC or development environment into a QA, testing or production environment.  While there are still other todo's involved such as redeploying the SmartObjects that are driven off of these SharePoint lists,  the atttached document is something you can pass on to the most novice SharePoint admin and have them successfully migrate your sites.&lt;img src="http://k2underground.com/aggbug.aspx?PostID=26371" width="1" height="1"&gt;</description><enclosure url="http://k2underground.com/blogs/fromthebench/attachment/26371.ashx" length="989696" type="application/msword" /></item><item><title>Update Design Template in VS and K2 blackpearl 807</title><link>http://k2underground.com/blogs/fromthebench/archive/2008/09/24/update-design-template-in-vs-and-k2-blackpearl-807.aspx</link><pubDate>Wed, 24 Sep 2008 18:28:00 GMT</pubDate><guid isPermaLink="false">1c9bda6b-c6e6-4e79-8d32-b70ad0011ef7:26297</guid><dc:creator>Bob</dc:creator><slash:comments>1</slash:comments><comments>http://k2underground.com/blogs/fromthebench/comments/26297.aspx</comments><wfw:commentRss>http://k2underground.com/blogs/fromthebench/commentrss.aspx?PostID=26297</wfw:commentRss><description>&lt;p&gt;With the release today of K2 blackpearl 0807 I wanted to highlight something that was stated in the release notes as I think it worthwhile understanding this.&lt;/p&gt;&lt;p&gt;As stated in the 807 release notes:&lt;/p&gt;&lt;blockquote&gt;&lt;blockquote&gt;&lt;p&gt;&lt;b&gt;UPDATING DEVELOPER MODIFIED SCHEDULES&lt;/b&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;i&gt;Note: Where the schedules of existing K2 processes have been modified it is necessary to update the process and redeploy.&lt;/i&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;K2 does not generate code in the out of the box templates and wizards. Rather, it copies the schedule from the 1033 folder and then collects only XML configuration information when the template runs. When the XOML files are updated, for instance in a service pack, the new base code in the XOML template is not automatically updated for existing processes. If a developer has modified the schedules behind an existing activity in a project, the right-click menu is made available so that the XOML can be selectively reloaded.&lt;br&gt;&lt;/p&gt;&lt;p&gt;Customizations, including code and XOML, are overwritten by the new base code when the design template is updated. However, rerunning the wizard will not update the XOML model because it is not generated from within the wizard like code used to be generated in K2.net 2003. &lt;i&gt;Note: Custom code in Server events will not be overwritten.&lt;/i&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;Complete the following steps&lt;/p&gt;&lt;p&gt;1. Open the existing process in K2 Designer for Visual Studio.&lt;br&gt;2. Right-click on the design canvas and select ‘Update Design Template’.&lt;br&gt;3. Select the items to be updated by checking the relevant check box.&lt;br&gt;4. Click Finish.&lt;br&gt;5. Save and redeploy the process. &lt;/p&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;p&gt;&amp;nbsp;It is important to understand what "Update Design Templates" does and that it can overwrite any code modifications.&amp;nbsp; What is new to 807 is:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;i&gt;"Note: Custom code in Server events will not be overwritten.&lt;/i&gt;"&lt;br&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Pre-807 this functionality would allow for overwriting of ALL artifacts within a K2 process, including Server Events.&amp;nbsp; Now with 807, Server Events will not be updated.&amp;nbsp; Since the majority of custom code within a K2 process resides within a Server Event, this provides some level of protection against large scale custom code loss.&amp;nbsp; For non-Server Event customizations, the "Update Design Templates" component does permit for very granular artifact updating.&amp;nbsp; Specific Activities/Events/Lines/Rules can be included/excluded from the updating process.&lt;br&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://k2underground.com/aggbug.aspx?PostID=26297" width="1" height="1"&gt;</description></item><item><title>How to Enable Viewing of Managed User's Worklists in K2 Workspace</title><link>http://k2underground.com/blogs/fromthebench/archive/2008/09/03/how-to-enable-viewing-of-managed-user-s-worklists-in-k2-workspace.aspx</link><pubDate>Wed, 03 Sep 2008 17:30:00 GMT</pubDate><guid isPermaLink="false">1c9bda6b-c6e6-4e79-8d32-b70ad0011ef7:25867</guid><dc:creator>Bob</dc:creator><slash:comments>0</slash:comments><comments>http://k2underground.com/blogs/fromthebench/comments/25867.aspx</comments><wfw:commentRss>http://k2underground.com/blogs/fromthebench/commentrss.aspx?PostID=25867</wfw:commentRss><description>&lt;P&gt;To enable managed users in K2 Workspace:&lt;/P&gt;
&lt;P&gt;- Open K2 Workspace&lt;/P&gt;
&lt;P&gt;- Go to Management &lt;/P&gt;
&lt;P&gt;- Right click on the Workflow Services &lt;/P&gt;
&lt;P&gt;- Select Edit Settings&lt;/P&gt;
&lt;P&gt;- Select the ‘Advanced Settings’ tab&lt;/P&gt;
&lt;P&gt;- Check the ‘Display Worklist of Managed Users’ (see below)&lt;/P&gt;
&lt;P&gt;&lt;A href="http://k2underground.com/blogs/fromthebench/WindowsLiveWriter/HowtoEnableViewingofManagedUsersWorklist_BDFA/clip_image002_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT:0px;BORDER-TOP:0px;BORDER-LEFT:0px;BORDER-BOTTOM:0px;" height=377 alt=clip_image002 src="http://k2underground.com/blogs/fromthebench/WindowsLiveWriter/HowtoEnableViewingofManagedUsersWorklist_BDFA/clip_image002_thumb.jpg" width=1028 border=0&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;- Click ‘Save’&lt;/P&gt;
&lt;P&gt;Now to view the actual managed user's worklist:&lt;/P&gt;
&lt;P&gt;- click on the home icon in the navagation bar&lt;/P&gt;
&lt;P&gt;- click on the 'Worklist' label in the left hand panel&lt;/P&gt;
&lt;P&gt;- you should notice the other user (in this example the managed user is "Allen"):&lt;/P&gt;
&lt;P&gt;&lt;A href="http://k2underground.com/blogs/fromthebench/WindowsLiveWriter/HowtoEnableViewingofManagedUsersWorklist_BDFA/clip_image004_2.jpg"&gt;&lt;IMG style="BORDER-RIGHT:0px;BORDER-TOP:0px;BORDER-LEFT:0px;BORDER-BOTTOM:0px;" height=232 alt=clip_image004 src="http://k2underground.com/blogs/fromthebench/WindowsLiveWriter/HowtoEnableViewingofManagedUsersWorklist_BDFA/clip_image004_thumb.jpg" width=877 border=0&gt;&lt;/A&gt;&lt;/P&gt;&lt;img src="http://k2underground.com/aggbug.aspx?PostID=25867" width="1" height="1"&gt;</description></item><item><title>How to pass the K2 context object to a .NET class</title><link>http://k2underground.com/blogs/fromthebench/archive/2008/08/21/how-to-pass-the-k2-context-object-to-a-net-class.aspx</link><pubDate>Thu, 21 Aug 2008 19:05:00 GMT</pubDate><guid isPermaLink="false">1c9bda6b-c6e6-4e79-8d32-b70ad0011ef7:25620</guid><dc:creator>Bob</dc:creator><slash:comments>1</slash:comments><comments>http://k2underground.com/blogs/fromthebench/comments/25620.aspx</comments><wfw:commentRss>http://k2underground.com/blogs/fromthebench/commentrss.aspx?PostID=25620</wfw:commentRss><description>&lt;P&gt;Sometimes it is useful to be able to incorporate a .NET class into a K2 process and then simply pass the 'K2' object to it.&amp;nbsp; You can find the 'K2' object by right clicking on an entity within the Visual Studio K2 process design canvas and selecting 'View Code'.&amp;nbsp; If you do this on a server event, you should see something like the following:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp;namespace ExtenderProject_5209c95b25e34cc9818a87fe0626ef49&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public partial class EventItem_1a29b669690b4cabbd32c50172e10a00 : ICodeExtender&amp;lt;hostContext&amp;gt;&lt;BR&gt;&amp;nbsp;{&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void Main(Project_2b407f6aa5a8407fa1224a6db17dfa90.EventItemContext_1245195e18b64c50948bf28edce9a5a6 K2)&lt;BR&gt;&lt;/FONT&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&lt;/FONT&gt; &lt;BR&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Notice the K2 object that I have put in bold.&amp;nbsp; This is commonly referred to as the K2 context object since it permits programmatic access to most everything you need at that point in the process definition.&lt;/P&gt;
&lt;P&gt;If I now wanted to create a reusuable .NET class that uses this context object I will have problems.&amp;nbsp; The reason is that you will notice that K2 dynamically generates the object type with a GUID.&amp;nbsp; Thus this datatype will change from instance to instance.&amp;nbsp;&amp;nbsp; On the surface that seems to make this reusuable effort impossible.&amp;nbsp; However there is a way.&lt;/P&gt;
&lt;P&gt;1.&amp;nbsp; Create a simple .NET class in an assembly (that referenced the SourceCode.KO dll).&amp;nbsp; Notice below that I am using a static object type (not dynamically generated with a GUID) as the input parameter of the method:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;namespace ClassLibrary1&lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class Class1&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void SetFolioField(SourceCode.KO.ServerEventContext K2)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; K2.ProcessInstance.Folio = "SET FROM ASSEMBLY VIA CONTEXT OBJECT";&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;}&lt;/FONT&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;2.&amp;nbsp;I added a reference in my KPRX to this DLL&lt;/P&gt;
&lt;P&gt;&lt;BR&gt;3.&amp;nbsp;In a Server Event I then added the following code:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="courier new,courier"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public void Main(Project_2b407f6aa5a8407fa1224a6db17dfa90.EventItemContext_1245195e18b64c50948bf28edce9a5a6 K2)&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ClassLibrary1.Class1 oMyClass = new ClassLibrary1.Class1();&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; oMyClass.SetFolioField(&lt;STRONG&gt;K2.GetServerContext()&lt;/STRONG&gt;);&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Notice in step 3, the K2.GetServerContext() method.&amp;nbsp; This is the key as it will cast the dynamically generated class into a static object type.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://k2underground.com/aggbug.aspx?PostID=25620" width="1" height="1"&gt;</description></item><item><title>VPC config instructions for disk differencing and network access</title><link>http://k2underground.com/blogs/fromthebench/archive/2008/08/14/vpc-config-instructions-for-disk-differencing-and-network-access.aspx</link><pubDate>Fri, 15 Aug 2008 02:26:00 GMT</pubDate><guid isPermaLink="false">1c9bda6b-c6e6-4e79-8d32-b70ad0011ef7:25526</guid><dc:creator>Joseph</dc:creator><slash:comments>0</slash:comments><comments>http://k2underground.com/blogs/fromthebench/comments/25526.aspx</comments><wfw:commentRss>http://k2underground.com/blogs/fromthebench/commentrss.aspx?PostID=25526</wfw:commentRss><description>&lt;P&gt;I had a request from a customer for instruction on setting up a VPC to use differencing disks.&amp;nbsp; Attached is a word document you pass around to this affect.&amp;nbsp; It also includes instructions on configuring a VPC based server to safely access your network through your own computers connection without polluting your business network with unwanted server broadcasts.&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;Here's the table of contents:&lt;BR&gt;&lt;/P&gt;
&lt;P&gt;Preparing for differencing&lt;/P&gt;
&lt;P&gt;Create the Differencing disk&lt;/P&gt;
&lt;P&gt;Setup a new VPC to utilize the diff disk&lt;/P&gt;
&lt;P&gt;Customize the VPC with typical settings&lt;/P&gt;
&lt;P&gt;Configure networking so your VPC can access your network&lt;/P&gt;&lt;img src="http://k2underground.com/aggbug.aspx?PostID=25526" width="1" height="1"&gt;</description><enclosure url="http://k2underground.com/blogs/fromthebench/attachment/25526.ashx" length="53760" type="application/octet-stream" /><category domain="http://k2underground.com/blogs/fromthebench/archive/tags/access+local+area+network/default.aspx">access local area network</category><category domain="http://k2underground.com/blogs/fromthebench/archive/tags/differencing+disks/default.aspx">differencing disks</category><category domain="http://k2underground.com/blogs/fromthebench/archive/tags/VPC/default.aspx">VPC</category><category domain="http://k2underground.com/blogs/fromthebench/archive/tags/Microsoft+Virtual+PC/default.aspx">Microsoft Virtual PC</category><category domain="http://k2underground.com/blogs/fromthebench/archive/tags/access+internet/default.aspx">access internet</category><category domain="http://k2underground.com/blogs/fromthebench/archive/tags/undo+disks/default.aspx">undo disks</category><category domain="http://k2underground.com/blogs/fromthebench/archive/tags/vhd/default.aspx">vhd</category></item></channel></rss>