<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>blackpearl &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://en.wordpress.com/tag/blackpearl/</link>
	<description>Feed of posts on WordPress.com tagged "blackpearl"</description>
	<pubDate>Sun, 29 Nov 2009 16:51:10 +0000</pubDate>

	<generator>http://en.wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[The New Kid on the block called 4.5]]></title>
<link>http://srikantha.wordpress.com/2009/11/06/the-new-kid-on-the-block-called-4-5/</link>
<pubDate>Fri, 06 Nov 2009 09:08:42 +0000</pubDate>
<dc:creator>jey</dc:creator>
<guid>http://srikantha.wordpress.com/2009/11/06/the-new-kid-on-the-block-called-4-5/</guid>
<description><![CDATA[Oh yeah, now we have an official name for what was code named &#8220;090x&#8221;. It is K2 4.5 and, ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Oh yeah, now we have an official name for what was code named &#8220;090x&#8221;. It is K2 4.5 and, we will have K2 blackpearl 4.5, K2 blackpoint 4.5 and K2 connect for SAP 4.5 entering beta cycles shortly. This release is a major milestone for K2 as the fourth generation K2 technology released in August 2007 now matures into the next level.</p>
<p>One of my favourite features of K2 to look forward to in this release is called the &#8220;Inline Functions&#8221;. With Inline Functions, one can construct complex rule evaluations very easily without writing code. There is an impressive array of pre-built functions made available. There are things like GetXmlValue() for working with Infopath content, PadLeft() and other string manipulation functions, Conversion functions for type casting and your standard logical functions.</p>
<p>In the screen shots below you will see the inline functions in action:</p>

		<style type='text/css'>
			#gallery-2 {
				margin: auto;
			}
			#gallery-2 .gallery-item {
				float: left;
				margin-top: 10px;
				text-align: center;
				width: 33%;			}
			#gallery-2 img {
				border: 2px solid #cfcfcf;
			}
			#gallery-2 .gallery-caption {
				margin-left: 0;
			}
		</style>
		<!-- see gallery_shortcode() in wp-includes/media.php -->
		<div id='gallery-2' class='gallery galleryid-799 snap_nopreview'><dl class='gallery-item'>
			<dt class='gallery-icon'>
				<a href='http://wpcom.files.wordpress.com/2007/12/stats-tabs-after.png' title='New Stats Tabs'><img width="150" height="69" src="http://wpcom.files.wordpress.com/2007/12/stats-tabs-after.png?w=150&#038;h=69" class="attachment-thumbnail" alt="" title="New Stats Tabs" /></a>
			</dt></dl>
			<br style='clear: both;' />
		</div>

<p>Inline functions can be called everywhere within a K2 process. Combining them with smart objects will open up interesting scenarios. There is also an API made available for extending these out-of-the-box functions with your own custom goodies.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[How to move K2 [blackpearl] data from one farm to another]]></title>
<link>http://blackbobo.wordpress.com/2009/08/06/how-to-move-k2-blackpearl-data-from-one-farm-to-another/</link>
<pubDate>Thu, 06 Aug 2009 21:43:00 +0000</pubDate>
<dc:creator>blackbobo</dc:creator>
<guid>http://blackbobo.wordpress.com/2009/08/06/how-to-move-k2-blackpearl-data-from-one-farm-to-another/</guid>
<description><![CDATA[Sometimes it can be useful to recreate the same situation that you have in a K2 farm elsewhere: if y]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p align="justify">Sometimes it can be useful to recreate the same situation that you have in a K2 farm elsewhere:</p>
<ul>
<li>if you got some troubles in a production environment and you want to investigate on them without corrupting the environment further</li>
<li>if you want to test an hotfix or upgrade and you want to do that having exactly the same situation that you will find in your final environment</li>
<li>if you want to stress test a clone of your production environment without interrupting the service</li>
</ul>
<p align="justify">K2 [blackpearl] comes with 14 databases. As far as it concerns processes data, however, only two databases have the main impact:</p>
<ul>
<li>K2Server: it is the transactional database used for workflow execution and tasklist retrieval</li>
<li>K2ServerLog: it is the logging database used for reporting data, smart object and viewflow</li>
</ul>
<p align="justify">While the server is running some dedicated threads move data that&#8217;s no more needed for execution from the K2Server to the K2ServerLog database.</p>
<p align="justify">In order to move data from one farm to another it is sufficient to replace these two databases in the destination farm with the ones from the source farm (either via detach/attach or backup/restore).</p>
<p align="justify">At that point it is enough to run the following T-SQL script in the K2Server database of the destination farm before restarting the K2 server service:</p>
<p>USE [K2Server]</p>
<p>&#8211; Setting K2 Server and removing extra entries</p>
<p>DECLARE @HOSTNAME NVARCHAR(20)</p>
<p>DECLARE @LICENSE NVARCHAR(20)</p>
<p>SELECT @LICENSE = [LicenseKey], @HOSTNAME=[HostName] FROM [HostServer].[dbo].[LicenseKeys] WHERE [HostName] = &#8216;<span style="color:orange;">dest farm hostname</span>&#8216;</p>
<p>UPDATE [_Server] set [Name]=@HOSTNAME, [LicenseKey]=@LICENSE WHERE [ID] = 1</p>
<p>DELETE FROM [_Server] WHERE ID &#62; 1</p>
<p>&#8211; Update Server Users</p>
<p>DELETE FROM [_ServerUser]</p>
<p>INSERT INTO [_ServerUser] VALUES (&#8216;<span style="color:orange;">K2:DENALLIX\Administrator</span>&#8216;, 1,1,1)</p>
<p>INSERT INTO [_ServerUser] VALUES (&#8216;<span style="color:orange;">&#8216;K2:DENALLIX\K2Admin</span>&#8216;, 1,1,1)</p>
<p>INSERT INTO [_ServerUser] VALUES (&#8216;<span style="color:orange;">&#8216;K2:DENALLIX\K2App</span>&#8216;, 1,1,1)</p>
<p>&#8211; Update Settings…</p>
<p>UPDATE [_Setting] SET [Value] = &#8216;Integrated=True;IsPrimaryLogin=True;Authenticate=True;EncryptedPassword=False;Host=&#8217; + @HOSTNAME + &#8216;;Port=5555&#8242; WHERE [Name] = &#8216;UMData&#8217;</p>
<p>&#8211;Update String Tables</p>
<p>UPDATE [_StringTable] SET [Value] = @HOSTNAME</p>
<p>WHERE [Root] = &#8216;Production&#8217; AND [Name] = &#8216;Mail Server&#8217;</p>
<p>UPDATE [_StringTable] SET [Value] = &#8216;Integrated=True;IsPrimaryLogin=True;Authenticate=True;EncryptedPassword=False;Host=&#8217; + @HOSTNAME + &#8216;;Port=5555&#8242;</p>
<p>WHERE [Root] = &#8216;Production&#8217; AND [Name] = &#8216;SmartObject Server&#8217;</p>
<p>UPDATE [_StringTable] SET [Value] = &#8216;Integrated=True;IsPrimaryLogin=True;Authenticate=True;EncryptedPassword=False;Host=&#8217; + @HOSTNAME + &#8216;;Port=5555&#8242;</p>
<p>WHERE [Root] = &#8216;Production&#8217; AND [Name] = &#8216;ServiceObject Server&#8217;</p>
<p>UPDATE [_StringTable] SET [Value] = &#8216;Integrated=True;IsPrimaryLogin=True;Authenticate=True;EncryptedPassword=False;Host=&#8217; + @HOSTNAME + &#8216;;Port=5555&#8242;</p>
<p>WHERE [Root] = &#8216;Production&#8217; AND [Name] = &#8216;Category Server&#8217;</p>
<p>UPDATE [_StringTable] SET [Value] = &#8216;http://&#8217; + @HOSTNAME + &#8216;:8081&#8242;</p>
<p>WHERE [Root] = &#8216;Production&#8217; AND [Name] = &#8216;Web Service URL&#8217;</p>
<p>UPDATE [_StringTable] SET [Value] = &#8216;Integrated=True;IsPrimaryLogin=True;Authenticate=True;EncryptedPassword=False;Host=&#8217; + @HOSTNAME + &#8216;;Port=5252&#8242;</p>
<p>WHERE [Root] = &#8216;Production&#8217; AND [Name] = &#8216;Workflow Server&#8217;</p>
<p>UPDATE [_StringTable] SET [Value] = &#8216;Integrated=True;IsPrimaryLogin=True;Authenticate=True;EncryptedPassword=False;Host=&#8217; + @HOSTNAME + &#8216;;Port=5555&#8242;</p>
<p>WHERE [Root] = &#8216;Production&#8217; AND [Name] = &#8216;Workflow Management Server&#8217;</p>
<p>&#8211; ** NOTE &#8211; The Actioners might need to be updated with new labels??</p>
<p>&#8211;select * from _Actioners</p>
<p align="justify">The script updates all the relevant tables… it is only needed to change the hostname and the server users (highlighted) accordingly.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Silverlight 3 &amp; RIA Services based K2 View Flow]]></title>
<link>http://blackbobo.wordpress.com/2009/08/03/silverlight-3-ria-services-based-k2-view-flow/</link>
<pubDate>Mon, 03 Aug 2009 20:12:00 +0000</pubDate>
<dc:creator>blackbobo</dc:creator>
<guid>http://blackbobo.wordpress.com/2009/08/03/silverlight-3-ria-services-based-k2-view-flow/</guid>
<description><![CDATA[The customer I&#8217;m currently working for asked me to realize a POC of a custom view flow for K2 ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><div>The customer I&#8217;m currently working for asked me to realize a POC of a custom view flow for K2 [blackpearl]. The reason for that was because they wanted to make data provided natively by K2 together with custom data coming from external sources to be exposed as a whole in a graphical business process view flow. In order to do that they needed to understand how easy and fast would have been to write an application that pulls data down from the process engine and shows that data in a graphical format on the web.<br />
For what is concerning the UI I had no choice, they wanted the view flow to be exposed via web so Silverlight was definitively the right answer.<br />
As far as is concerning the K2 flow data access instead, I knew that I had 2 choices:</div>
<ul>
<li>
<div>To use the <strong>ViewProcessInstance</strong> method of <strong>SourceCode.Workflow.Client.Connection </strong>to retrieve an xml representation of the process instance flow (it is essentially what the OOB ViewFlow does under the hood)</div>
</li>
<li>
<div>To access directly the K2ServerLog database in order to extract the information I needed</div>
</li>
</ul>
<p>Even if the first choice should have been the right one for many reasons:</p>
<ul>
<li>
<div>Coding over data provided from a documented API should be faster than reading the same data from a partially documented database</div>
</li>
<li>
<div>What would happen at my code if K2ServerLog changed due to a K2 hotfix?</div>
</li>
<li>
<div>Why do not follow the same path that SourceCode itself followed?</div>
</li>
</ul>
<p>I finally decided for the second one because:</p>
<ul>
<li>
<div>I saw that accessing K2ServerLog directly performs better than calling K2 server to retrieve the same data</div>
</li>
<li>
<div>Accessing K2ServerLog directly instead of calling K2 server doesn&#8217;t load K2 server</div>
</li>
<li>
<div>The K2ServerLog schema is not changed frequently… the actual one has pretty much the same structure it had in K2.NET 2003</div>
</li>
<li>
<div>K2ServerLog tables and schemas are documented in the K2 [blackpearl] official documentation</div>
</li>
<li>
<div>K2ServerLog is the logging &#8211; not transactional – database, thus accessing it should not disrupt K2 Server execution performances</div>
</li>
<li>
<div>I had few time to realize my POC and I knew well the structure of K2ServerLog because I already studied it before for other purposes</div>
</li>
<li>
<div>I wanted to try RIA Services in a real scenario… <span style="font-family:Wingdings;">J</span></div>
</li>
</ul>
<p align="justify">I started defining constraints (keys, foreign keys, relationships…) on a copy of K2ServerLog database (K2ServerLog itself comes with no constraints). This would have helped LINQ to SQL to create entities and associations in the appropriate manner. Obviously constraints were only needed for development and were not meant to be used at runtime. What I obtained finally is the following (I extracted below only the part that is relevant for my View Flow):</p>
<p align="justify"><a href="http://blackbobo.wordpress.com/files/2009/08/1.jpg"><img src="http://blackbobo.wordpress.com/files/2009/08/1.jpg?w=300" border="0" alt="" /></a></p>
<p>After that I created a new Silverlight Application and I enabled .NET RIA Services integration:</p>
<p align="justify"><a href="http://blackbobo.wordpress.com/files/2009/08/2.jpg"><img src="http://blackbobo.wordpress.com/files/2009/08/2.jpg?w=300" border="0" alt="" /></a></p>
<div>I added a new <strong>LINQ to SQL Classes</strong> item and I followed the wizard to make it pointing to my modified K2ServerLog database and to include the desired tables.</div>
<div>I finally obtained the ERM for the K2ServerLog database:</div>
<p><a href="http://blackbobo.wordpress.com/files/2009/08/3.jpg"><img src="http://blackbobo.wordpress.com/files/2009/08/3.jpg?w=300" border="0" alt="" /></a></p>
<div>I added a new <strong>Domain Service Class</strong> item (including metadata classes). I added a custom method to the domain service in order to get a process instance and all the related entities given its id:</div>
<p><span style="font-family:Courier New;"><span style="color:blue;">public</span> <span style="color:#2b91af;">_ProcInst</span> Get_ProcInstById(<span style="color:#2b91af;">Int32</span> procInstId) </span><br />
<span style="font-family:Courier New;">{ </span><br />
<span style="font-family:Courier New;"><span style="color:#2b91af;">DataLoadOptions</span> loadOptions = <span style="color:blue;">new</span> <span style="color:#2b91af;">DataLoadOptions</span>(); </span><span style="font-family:Courier New;"><br />
<span style="color:green;"> </span></span><br />
<span style="font-family:Courier New;"><span style="color:green;">// ProcInst </span></span><br />
<span style="font-family:Courier New;">loadOptions.LoadWith&#60;<span style="color:#2b91af;">_ProcInst</span>&#62;(p =&#62; p._Proc);</span><br />
<span style="font-family:Courier New;">loadOptions.LoadWith&#60;<span style="color:#2b91af;">_ProcInst</span>&#62;(p =&#62; p._ActInsts); </span><br />
<span style="font-family:Courier New;"></span><br />
<span style="font-family:Courier New;"><span style="color:green;">// Proc </span></span><br />
<span style="font-family:Courier New;">loadOptions.LoadWith&#60;<span style="color:#2b91af;">_Proc</span>&#62;(p =&#62; p._Acts); </span><br />
<span style="font-family:Courier New;">loadOptions.LoadWith&#60;<span style="color:#2b91af;">_Proc</span>&#62;(p =&#62; p._Lines); </span><br />
<span style="font-family:Courier New;"></span></p>
<p><span style="font-family:Courier New;"><span style="color:green;">// Act </span></span><br />
<span style="font-family:Courier New;">loadOptions.LoadWith&#60;<span style="color:#2b91af;">_Act</span>&#62;(a =&#62; a._Events); </span></p>
<p><span style="font-family:Courier New;"><span style="color:green;">// Line </span></span><br />
<span style="font-family:Courier New;">loadOptions.LoadWith&#60;<span style="color:#2b91af;">_Line</span>&#62;(l =&#62; l._Act); </span><br />
<span style="font-family:Courier New;">loadOptions.LoadWith&#60;<span style="color:#2b91af;">_Line</span>&#62;(l =&#62; l._Act1); </span><br />
<span style="font-family:Courier New;">loadOptions.LoadWith&#60;<span style="color:#2b91af;">_Line</span>&#62;(l =&#62; l._LineInsts); </span><br />
<span style="font-family:Courier New;"></span><br />
<span style="font-family:Courier New;"><span style="color:blue;">this</span>.Context.LoadOptions = loadOptions; </span><br />
<span style="font-family:Courier New;"></span><br />
<span style="font-family:Courier New;"><span style="color:#2b91af;">_ProcInst</span> procInst = (<span style="color:blue;">from</span> o <span style="color:blue;">in</span> Context._ProcInsts </span><br />
<span style="font-family:Courier New;"><span style="color:blue;">where</span> o.ID == procInstId </span><br />
<span style="font-family:Courier New;"><span style="color:blue;">select</span> o).First(); </span><br />
<span style="font-family:Courier New;"></span><br />
<span style="font-family:Courier New;"><span style="color:blue;">return</span> procInst; </span></p>
<div><span style="font-family:Courier New;">}</span></div>
<p><span style="font-family:Courier New;">I decorated with the <span style="font-family:Courier New;color:#2b91af;">Include</span> attribute the same properties in the appropriate metadata classes:</p>
<p></span><span style="font-family:Courier New;"><span style="color:blue;">internal</span> <span style="color:blue;">sealed</span> <span style="color:blue;">class</span> <span style="color:#2b91af;">_LineMetadata<br />
</span></span><span style="font-family:Courier New;">{<br />
</span><span style="font-family:Courier New;"><span style="color:green;">// Metadata classes are not meant to be instantiated.<br />
</span></span><span style="font-family:Courier New;"><span style="color:blue;">private</span> _LineMetadata()<br />
</span><span style="font-family:Courier New;">{<br />
</span><span style="font-family:Courier New;">}<br />
</span><br />
<span style="font-family:Courier New;">[<span style="color:#2b91af;">Include</span>]<br />
</span><span style="font-family:Courier New;"><span style="color:blue;">public</span> <span style="color:#2b91af;">_Act</span> _Act;<br />
</span><br />
<span style="font-family:Courier New;">[<span style="color:#2b91af;">Include</span>]<br />
</span><span style="font-family:Courier New;"><span style="color:blue;">public</span> <span style="color:#2b91af;">_Act</span> _Act1;<br />
</span><br />
<span style="font-family:Courier New;">[<span style="color:#2b91af;">Include</span>]<br />
</span><span style="font-family:Courier New;"><span style="color:blue;">public</span> <span style="color:#2b91af;">EntitySet</span>&#60;<span style="color:#2b91af;">_LineInst</span>&#62; _LineInsts;</span></p>
<p>And that&#8217;s it; I was ready to code in Silverlight!!!</p>
<p>And that&#8217;s the result… I know it&#8217;s still not too rich but I haven&#8217;t spent too much time playing with effects:</p>
<p><a href="http://blackbobo.wordpress.com/files/2009/08/5.jpg"><img src="http://blackbobo.wordpress.com/files/2009/08/5.jpg?w=300" border="0" alt="" /></a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[K2 [blackpearl] Transactional Model]]></title>
<link>http://blackbobo.wordpress.com/2009/08/03/k2-blackpearl-transactional-model/</link>
<pubDate>Mon, 03 Aug 2009 16:07:00 +0000</pubDate>
<dc:creator>blackbobo</dc:creator>
<guid>http://blackbobo.wordpress.com/2009/08/03/k2-blackpearl-transactional-model/</guid>
<description><![CDATA[Being inspired by K2.NET 2003 documentation (see KB000066 for more details) and led by a direct expe]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><div><span><br />
Being inspired by K2.NET 2003 documentation (see <a href="http://kb.k2workflow.com/Articles/KB000066.aspx">KB000066</a> for more details) and led by a direct experience I decided to put down this post about the transactional model that lies behind K2 [blackpearl].<br />
</span></div>
<p><span style="font-size:90%;"><br />
<strong>Transaction Processing</strong><br />
</span></p>
<div><span>When you purchase an item from an online store, you exchange money (in the form of credit) for the item. If your credit is good, a series of related operations ensures that you get the item and the store gets your money. However, if a single operation in the series fails during the exchange, the entire exchange fails. You do not get the item and the store does not get your money. </span></div>
<div><span><br />
The technology responsible for making the exchange balanced and predictable is called transaction processing. Transactions ensure that data-oriented resources are not permanently updated unless all operations within the transactional unit complete successfully. By combining a set of related operations into a unit that either completely succeeds or completely fails, you can simplify error recovery and make your application more reliable.<br />
A transaction is a set of related tasks that either succeed or fail as a unit. In transaction processing terminology, the transaction either commits or aborts. For a transaction to commit, all participants must guarantee that any change to data will be permanent. Changes must persist despite system crashes or other unforeseen events. If even a single participant fails to make this guarantee, the entire transaction fails. All changes to data within the scope of the transaction are rolled back to a specific set point.</span>Automatic transaction processing is a service provided by COM+ that enables you to configure a class at design time to participate in a transaction at run time. To use this service, the class must derive directly or indirectly from the <strong>System.EnterpriseServices.ServicedComponent </strong>class.</p>
<p><span style="font-size:90%;"><br />
<strong>Writing Serviced Components </strong><br />
</span></p>
<div><span><br />
A serviced component is the mechanism that enables COM+ services to be available to .NET Framework classes. You can modify any Common Language Specification (CLS)–compliant class to use COM+ services. The <strong>System.EnterpriseServices</strong> namespace provides custom attributes and classes for accessing these services from managed code.<br />
If you are new to writing serviced components take a look <a href="http://msdn.microsoft.com/en-us/library/3x7357ez(VS.80).aspx">here</a>.<br />
If you are new to transaction isolation level in COM+ take a look <a href="http://msdn.microsoft.com/en-us/library/system.transactions.isolationlevel.aspx">here</a>.<br />
</span></div>
<p><span style="font-size:90%;"><br />
<strong>Enable Root Transactions in K2 [blackpearl] Server Events</strong><br />
</span></p>
<div>In order to make a K2 Server Event working in a transactional manner you need to configure this behaviour both at the Activity and Event level. It is as simple as checking two check boxes in the General Properties Wizard for the Activity and one of the contained Server Events:<br />
<a href="http://blackbobo.wordpress.com/files/2009/08/1.png"><br />
<img src="http://blackbobo.wordpress.com/files/2009/08/1.png?w=300" border="0" alt="" /><br />
</a></div>
<div><a href="http://blackbobo.wordpress.com/files/2009/08/3.png"><br />
<img src="http://blackbobo.wordpress.com/files/2009/08/3.png?w=300" border="0" alt="" /><br />
</a><br />
<a href="http://blackbobo.wordpress.com/files/2009/08/2.png"><br />
<img src="http://blackbobo.wordpress.com/files/2009/08/2.png?w=300" border="0" alt="" /><br />
</a></div>
<div><a href="http://blackbobo.wordpress.com/files/2009/08/5.png"><br />
<img src="http://blackbobo.wordpress.com/files/2009/08/5.png?w=276" border="0" alt="" /><br />
</a></div>
<p align="justify">There is only a rule to bear in mind: <span style="text-decoration:underline;">a transactional Activity can contain only a single Server Event marked as transactional</span>. This basically means that the transaction context does not flow across different Server Events within the same Activity. Missing this requirement may result in unexpected behaviour (like the process halting in running state indefinitely).<br />
What happens behind is that K2 [blackpearl] registers on the fly a transactional serviced component (<strong>K2STXH</strong>). This component is used this component as the root of the transaction when executing via reflection the code contained within the transactional Server Event.<br />
The aforementioned K2 transactional server component presents the following characteristics:</p>
<ul>
<li><strong>TransactionOption</strong> is <strong>RequiredNew</strong>: it means that a new transaction is created (the component is the root of the transaction)</li>
<li><strong>IsolationLevel</strong> is <strong>ReadCommitted</strong></li>
<p> </ul>
<p align="justify"><span style="font-size:90%;"><br />
<strong>Writing Serviced Components for K2 [blackpearl]</strong><br />
</span></p>
<p align="justify">You can write transactional serviced components and enlist them in a transaction originated from the K2 Server Event.<br />
In order to allow your serviced components to be enlisted in a transaction started from a K2 [blackpearl] Server Event you have to:</p>
<ul>
<li>Configure the TransactionOption as <strong>Required</strong> or, at least, <strong>Supported</strong>. This is because the serviced component that K2 uses as the root of the transaction has its transaction option configured as <strong>RequiredNew</strong>.Marking your serviced components as <strong>RequiredNew</strong> will generate a new transaction while marking them as <strong>NotSupported</strong> will make them not to take part to the transaction</li>
<li>You cannot configure them with a transaction isolation level higher than <strong>ReadCommitted</strong>. This is because the serviced component that K2 uses as the root of the transaction has its isolation level configured as <strong>ReadCommitted</strong></li>
<p> </ul>
</div>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Kerberos? Confused?]]></title>
<link>http://srikantha.wordpress.com/2009/06/14/kerberos-confused/</link>
<pubDate>Sun, 14 Jun 2009 10:10:35 +0000</pubDate>
<dc:creator>jey</dc:creator>
<guid>http://srikantha.wordpress.com/2009/06/14/kerberos-confused/</guid>
<description><![CDATA[Chris &#8220;community man&#8221; Geier from K2 has released a video on Kerberos &#8211; the necessa]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Chris &#8220;community man&#8221; Geier from K2 has released a video on Kerberos &#8211; the necessary evil that we all need to befriend &#8211; check this out <a href="http://k2underground.com/files/folders/howtok2/entry27136.aspx">here</a> &#8211; very useful.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[K2 v.next is in beta now]]></title>
<link>http://srikantha.wordpress.com/2009/05/28/k2-v-next-is-in-beta-now/</link>
<pubDate>Wed, 27 May 2009 17:46:11 +0000</pubDate>
<dc:creator>jey</dc:creator>
<guid>http://srikantha.wordpress.com/2009/05/28/k2-v-next-is-in-beta-now/</guid>
<description><![CDATA[The next update to K2 blackpearl is in beta now. This release will bring some key new features such ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>The next update to K2 blackpearl is in beta now. This release will bring some key new features such as</p>
<p><span>&#62;</span> The new Silverlight-based Process Designer for  SharePoint<br />
<span>&#62;</span> Inline functions, which allow for calculation,  boolean logic<br />
and text manipulation with no code<br />
<span>&#62;</span> An update to the API set for process instance  management</p>
<p>you can get it from the <a href="https://portal.k2.com">K2 customer portal</a> now.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Sharepoint SP2 and K2]]></title>
<link>http://srikantha.wordpress.com/2009/05/03/sharepoint-sp2-and-k2/</link>
<pubDate>Sun, 03 May 2009 08:21:34 +0000</pubDate>
<dc:creator>jey</dc:creator>
<guid>http://srikantha.wordpress.com/2009/05/03/sharepoint-sp2-and-k2/</guid>
<description><![CDATA[I have been playing around with the recently released SP2 for Sharepoint 2007 with K2. This was main]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I have been playing around with the recently released SP2 for Sharepoint 2007 with K2. This was mainly to check for any compatibility issues. I also wanted to look at the newly updated K2 blackpoint installer and the diag tools <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>My experience upgrading a K2 807 enabled Sharepoint server to SP2 went <!--more-->without issues. K2 continued to function well.</p>
<p><img class="alignnone size-full wp-image-734" title="807-and-sp2" src="http://srikantha.wordpress.com/files/2009/05/807-and-sp2.jpg" alt="807-and-sp2" width="479" height="349" /></p>
<p>My testing was done on a fairly simple MOSS VM. I have not done any performance benchmarks. I am also interested in the Forms Server enhancements made for MOSS <a href="http://support.microsoft.com/kb/953334">http://support.microsoft.com/kb/953334</a> But, that will be for another blog post.</p>
<p>My test run also covered K2 blackpoint (latest installer). I think the software works fine with SP2. BTW, The most awaited K2 update code named &#8216;090x&#8217; will officially support Sharepoint SP2 along with aligning with 2008 wave.</p>
<p><img class="alignnone size-full wp-image-729" title="sp2-and-point-updated-installer" src="http://srikantha.wordpress.com/files/2009/05/sp2-and-point-updated-installer.jpg" alt="sp2-and-point-updated-installer" width="480" height="534" /></p>
<p><img src="/Users/jEy/AppData/Local/Temp/moz-screenshot-3.jpg" alt="" /></p>
<p>The updated blackpoint installer (note: this is not an upgrade to existing blackpoint environments) is great &#8211; its diagtools are brilliant, helping you verify the install, settings, permissions, etc &#8211; a very valuable tool. It checks for  and fix issues reported.</p>
<p><img class="alignnone size-full wp-image-727" title="k2-blackpoint-diagtools" src="http://srikantha.wordpress.com/files/2009/05/k2-blackpoint-diagtools.jpg" alt="k2-blackpoint-diagtools" width="480" height="386" /></p>
<p>If you find any issues with upgrading to SP2 or installing K2 on an SP2 environment please log a support ticket with K2 or go to Forums on k2underground.com</p>
<p>UPDATE: There is a hotfix available for an issue that has been found when using Sharepoint integration tasks in K2 processes. Check this out -<a href="http://kb.k2workflow.com/Articles/KB000451.aspx"> KB000451 &#8211; Hotfix: After installing MOSS SP2, SharePoint Integration tasks are not created for the second and subsequent client events.</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[K2 KBs since 370 update]]></title>
<link>http://srikantha.wordpress.com/2009/04/30/k2-kbs-since-370-update/</link>
<pubDate>Thu, 30 Apr 2009 01:14:07 +0000</pubDate>
<dc:creator>jey</dc:creator>
<guid>http://srikantha.wordpress.com/2009/04/30/k2-kbs-since-370-update/</guid>
<description><![CDATA[There has been a number KBs made available since the release of the update 370. Take a look these an]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>There has been a number KBs made available since the release of the update 370. Take a look these and apply the relevant fixes if you have the issues mentioned occurring in your environment. There are also a few FYI type KBs which I have not included here. For a full list visit the <a href="https://portal.k2.com/Default.aspx">K2 customer portal</a>.</p>
<p><a href="http://kb.k2workflow.com/Articles/KB000375.aspx">KB000375</a> &#8211; Hotfix: Event Instances Report in the Process Overview Report shows events that belong to another activity.<!--more--><br />
When using the Activity Instance Report or the Process Overview Report in the Out of Box Reports in K2 Workspace the activities reported on are incorrect and reflect the data of a different activity or event.</p>
<p>KB000376 &#8211; Hotfix: Searching for users in K2 Workspace returns users with the wrong domain prefix.<br />
When using Multidomains in the same forest, occasionally the incorrect domain prefix is returned when searching for users in K2 Workspace.</p>
<p>KB000378 &#8211; Hotfix: Activity Instances Destinations Report in the Process Overview Report shows incorrect activity name<br />
When using the Activity Instances Destinations Report in the Process Overview Report of the Out of Box Reports in K2 Workspace, the data summary may incorrectly reflect the activity name for a different activity in the process.</p>
<p>KB000382 &#8211; Known Issue: An exception occurs when completing an asynchronous server event by calling the Update or Finish method from an external application.<br />
An exception occurs when completing an asynchronous server event by calling the Finish method from an external application.</p>
<p>KB000380 &#8211; Hotfix: The value of the “AllocatedUser” property (on an OpenWorkListItem method call), is not returned correctly<br />
There is a known issue related to the K2 blackpearl 0807 update KB000350 and KB000370 that when the OpenWorklistItem method is invoked, the WorklistItem’s AllocatedUser property has a null value</p>
<p>KB000383 &#8211; Known Issue: Loading a record with a SmartObject date property that is empty causes a &#8220;Specified cast is not valid&#8221; error<br />
When using the SmartObject Event Wizard to replicate datafields and one of the SmartObject properties is of Date/Time type, a &#8220;cast&#8221; error will occur if this source SmartObject property is left empty.</p>
<p>KB000384 &#8211; Hotfix: An exception occurs when completing an asynchronous server event by calling the Update or Finish method from an external application.<br />
An exception occurs when completing an asynchronous server event by calling the Update or Finish method from an external application.</p>
<p>KB000360 &#8211; K2 connect: How to cache credentials for K2 connect for SAP Security Labels<br />
K2 connect for SAP requires that a second set of user credentials be cached in association with the user&#8217;s primary identity. This article provides high level technical information on the options available to the developer and how they can be implemented along with a technical discussion of how the authentication procedure works for K2 connect for SAP.</p>
<p>KB000385 &#8211; Hotfix: Loading a record with a SmartObject date property that is empty causes a &#8220;Specified cast is not valid&#8221; error</p>
<p>KB000387 &#8211; SSO Error after K2 blackpearl Configuration Manager is run<br />
Error occurs after re running the K2 blackpearl Configuration Manager and user authenticates using SSO</p>
<p>KB000388 &#8211; Hotfix: Shared Activity Level Datafields will revert to default values when the client event is instantiated</p>
<p>KB000396 &#8211; Hotfix: K2 Migration Utility becomes unresponsive on &#8220;List InfoPath Documents&#8221; page<br />
While running the K2 Environment Migration Utlility the application encounters a problem and stops responding while attempting to retrieve the List of InfoPath Documents. No error message is displayed to the user.</p>
<p>KB000398 &#8211; Known Issue: K2 Designer for Visual Studio is unable to compile a project that contains a K2.net 2003 Artifact(s)<br />
When K2.net 2003 artifacts are imported or used in a K2 designer for Visual Studio project and later the user attempts to deploy the process, K2 designer for Visual Studio is unable to compile the K2.net 2003 Artifacts.</p>
<p>KB000397 &#8211; Hotfix: Release Worklist Item Using the K2 blackpearl API does not work as expected<br />
When the Administrator, or user with the appropriate rights attempts to release a worklist item when the destination was a user group using the SourceCode.Workflow.Management.WorkflowManagementServer.ReleaseWorklistItem, an exception occurs stating that the worklist item is not found</p>
<p>KB000389 &#8211; Hotfix: Object Reference error when an Escalation on an Activity is moved to a new process version by Error Repair<br />
An Object Reference error may occur after using the Error Repair tool on a process that has escalations<br />
configured for activities within the process. Once the Error Repair tool has moved the the process instance<br />
in error onto a new version of the process, the activity escalations in the process instance and the new<br />
process definition do not match.</p>
<p>KB000400 &#8211; Hotfix: K2 Designer for Visual Studio is unable to compile a project that contains a K2.net 2003 Artifact(s)<br />
When K2.net 2003 artifacts are imported or used in a K2 designer for Visual Studio project and later the user attempts to deploy the process, K2 designer for Visual Studio is unable to compile the K2.net 2003 Artifacts.</p>
<p>KB000402 &#8211; Hotfix: Error occurs when opening an InfoPath Client Event.<br />
When using InfoPath Workflow integration and Forms Services it will not open the InfoPath client events if the user opening them does not have at least contributor rights.</p>
<p>KB000390 &#8211; Hotfix: The returned XML for a SharePoint user(s) is not fully formed if they have minimal permissions available when working within SharePoint.</p>
<p>KB000407 &#8211; Hotfix: Issue with Notification Event Designer.<br />
If a notification is edited that contains Worklist Item URL data fields. The notification e-mail will be sent when the notification event is fired but the Worklist Item URL will not populate correctly with the runtime data. Re-opening the edited notification in the Notification Event Designer shows a blank e-mail body.</p>
<p>KB000393 &#8211; Hotfix: Intermittent error in SharePoint when moving documents to a Records Center<br />
Intermittent errors may occur on the SharePoint Web Frontend when a K2 process attempts to move a<br />
document to the SharePoint Records Center. These errors can, however, be successfully repaired<br />
by re-trying them from the Management Console.</p>
<p>KB000411 &#8211; Known Issue: Custom Reporting Services component not visible<br />
After installing K2 blackpoint 0902 (4.9040.1.0) the SOURCECODE data source in Visual Studio required for designing custom reports is missing.</p>
<p>KB000412 &#8211; Hotfix: K2.net 2003 ServerItem Not Found post Migration<br />
After migrating from K2.net 2003, processes which included a Asynchronous Server events throw an error</p>
<p>KB000413 &#8211; Hotfix: Error occurs when the &#8220;Active Directory Service 2&#8243; is invoked with 1500 or more process instances.<br />
There is a known issue related to the K2 blackpearl 0807 update KB000370 that when the &#8220;Active Directory Service 2&#8243; is invoked with 1500 or more process instances it will throw an “Out Of Memory” error. .</p>
<p>KB000410 &#8211; Workaround: K2 Connect for SAP &#8211; NLB Cluster Workaround Configuration<br />
Existing users of K2 connect for SAP may want to extend the capabilities of their envionment by clustering the K2 connect servers. Since this functionality is not fully supported in the current release, a workaround has been devised to facilitate this.</p>
<p>KB000404 &#8211; Hotfix: Multiple users opening connections that call the Impersonate method increase execution times with every new concurrent connection<br />
When multiple users open connections that use the Impersonate method on a K2 Connection, the execution times increase with every new concurrent connection.</p>
<p>KB000414 &#8211; Hotfix: InOut Parameters not returned correctly for a K2 connect custom method<br />
A K2 connect ServiceObject which includes a custom method, does not handle InOut Mappings correctly</p>
<p>KB000408 &#8211; Hotfix: When using IPC processes and data from the child process should be returned to the parent process, the data is not retrieved.<br />
When using IPC processes and sending and/or receiving information between processes, errors may occur intermittently due to data not being send through from the child process back to the parent process. Various memory, performance and threading enhancements have been made to the K2 Server, IPC&#8217;s and Escalations, which include:<br />
- Memory enhancements made to the K2Server to ensure that only relevant data is stored in the ProcessInstance state<br />
- Performance and threading enhancements made to IPC&#8217;s that would improve memory consumption<br />
- Performance and memory enhancements made to Escalations</p>
<p>KB000386 &#8211; Hotfix: Unable to retrieve column data from a system library in SharePoint using Process Event Integration<br />
The error message detailed below occurs in conjunction with the SharePoint Process Integration Wizard at run time. The individual checks a page back in from a SharePoint document library either an Item Checkin or an Item Update action (This error may persist for other event actions).  As soon as the action is attempted, the process goes into error.</p>
<p>KB000415 &#8211; Hotfix: Error received when trying to activate the K2 Workflow Integration Content Type feature.<br />
When installing K2 blackpoint 0902 (4.9040.1.0) using WSS an error occurs when trying to activate the K2 Features.</p>
<p>KB000377 &#8211; Hotfix: Browser Enabled forms render as XML when &#8220;InfoPath, Web browser if InfoPath not available&#8221; is selected<br />
When using InfoPath Forms Services and selecting the option &#8220;InfoPath, Web browser when InfoPath is not available&#8221;,<br />
the form is rendered as XML when opening the action in K2 Workspace and neither K2 for Visual Studio nor InfoPath is available.</p>
<p>KB000381 &#8211; Hotfix: Duplicated destination user in Activity Instance Destination Report<br />
There is a known issue related to the K2 blackpearl 0807 update KB000370 that when there are two parallel activities (Activity B and Activity C), both with a single destination user and both with Client Events where only Activity B is instantiated (because the line rule to Activity C is invalid (1=0)) then and error occurs in the Activity Instance Destinations report from Activity B which incorrectly shows two lines with the same user.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Process Map : Points to Ponder ]]></title>
<link>http://srikantha.wordpress.com/2009/04/18/process-map-points-to-ponder/</link>
<pubDate>Sat, 18 Apr 2009 08:15:19 +0000</pubDate>
<dc:creator>jey</dc:creator>
<guid>http://srikantha.wordpress.com/2009/04/18/process-map-points-to-ponder/</guid>
<description><![CDATA[Process design in K2 is simple. On the surface the process map can appear as pretty basic. It does n]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Process design in K2 is simple. On the surface the process map can appear as pretty basic. It does not really have many visual shapes to play with. I call K2 process map as a pure boxes and lines diagram. It has boxes which are called activities that are connected to each other via lines.<!--more--></p>
<p>What goes inside the boxes and behind the lines is what interesting. K2 process map only has one pre-defined activity called the &#8220;Start&#8221; Activity. This some times causes a bit of confusion. Firstly there is no matching &#8220;End&#8221; Activity in K2 as the process engine determines when a process instance ends. Also to reach the Start activity inside the process a process instance should have already been started <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Some process templates provide options to specify how a process can be started &#8211; namely sharepoint and infopath templates. But, any process map, regardless of how its start options are configured can be programatically started. This is what cool about K2. The options are endless.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[K2 blackpearl]]></title>
<link>http://bagofspanners.wordpress.com/2009/04/16/k2-blackpearl/</link>
<pubDate>Thu, 16 Apr 2009 20:37:53 +0000</pubDate>
<dc:creator>Jonathan</dc:creator>
<guid>http://bagofspanners.wordpress.com/2009/04/16/k2-blackpearl/</guid>
<description><![CDATA[Over the past several months I have been working closely with the team at K2 to develop workflow sol]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p><img src="http://www.bagofspanners.com/wp-content/uploads/2009/04/k2blackpearl.jpg" alt="k2blackpearl" title="k2blackpearl" width="250" height="317" align="right" />Over the past several months I have been working closely with the team at K2 to develop workflow solutions with K2 blackpearl &#8211; and have found myself dipping into the excellent (<em>and only</em>) book on the product so far &#8211; &#8220;P<a href="http://www.amazon.co.uk/Professional-K2-blackpearl-Wrox-Programmer/dp/0470293055">rofessional K2 blackpearl</a>&#8220;, published by Wrox Press.</p>
<h3>What is &#8220;K2 blackpearl&#8221;?</h3>
<p>K2 blackpearl seems to go by many names &#8211; depending on who you talk to it&#8217;s either a workflow solution, or a business process management solution. To further complicate matters, some people will claim that &#8220;workflow&#8221; and &#8220;business process&#8221; are two completely different things.</p>
<p>In simple terms, blackpearl takes over the job of &#8220;making things happen&#8221; in and around the various users and servers within an organisation &#8211; by delivering tasks to users, acting on the results of those tasks, kicking off external processes and even running code itself. All of this is executed according to rules, logic and scheduling designed with the suite of tools accompanying the product. If implemented properly, users will never be aware of the technical gymnastics blackpearl performs behind the scenes.</p>
<h3>A Lot to Learn</h3>
<p>As you might expect from a product set designed to interface with Microsoft SharePoint, web services, Infopath, Office, bespoke .NET applications, and even the mighty SAP, K2 blackpearl is an enormous product to learn and develop for &#8211; and you can&#8217;t help feeling a sense of awe that a company so much smaller than Microsoft attempted (<em>and succeeded</em>) in pulling off such a feat.</p>
<p>The problem therefore becomes similar to that of the SharePoint developer &#8211; where on earth do you start?  Luckily, K2 provide excellent training through their training courses, and also work closely with partners to flatten the learning curve a little. Until very recently however there was very little in the way of printed documentation.</p>
<h3>K2 blackpearl &#8211; the Book</h3>
<p>The book we had all heard mention of for many months finally went to print earlier this year, and what a book it is. The first afternoon it arrived in the office I grabbed it and had a look through during a coffee break. A manager asked what I thought of it&#8230;</p>
<blockquote><p>This is the book that K2 2003 never had &#8211; it&#8217;s excellent.</p></blockquote>
<p>Quite apart from the expected tour of features and functionality, the K2 blackpearl book comprehensively details the various server configurations you may see in the real world, and gives copious advice on specification for that infrastructure. It&#8217;s more a compilation of shared knowledge than a textbook &#8211; and this is reflected by the number of authors who contributed to it.</p>
<h3>The Community</h3>
<p>One of the surprises when learning about K2 is the direction the company has taking to connect with customers. They are one of the few organisations I have seen really <em>get</em> social networking &#8211; they host open developer forums, and actively participate in emerging networks such as Twitter. It&#8217;s a pleasant surprise to see the K2 consultants, developers and support engineers openly engaging with the community.</p>
<p>In many ways K2 (<em>or &#8220;SourceCode&#8221;, as they are perhaps more correctly termed</em>) remind me of a young Apple. They have a great product, and their people are talented, driven, and above all enthusiastic about the product set they are building. I&#8217;ll close by returning to the earlier observation &#8211; you can&#8217;t help but admire them for the breadth and scope of their vision &#8211; and the fact that they are pulling it off.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[K2 blackpearl and the Case Accelerator]]></title>
<link>http://bagofspanners.wordpress.com/2009/04/08/k2-blackpearl-and-the-case-accelerator/</link>
<pubDate>Wed, 08 Apr 2009 20:48:36 +0000</pubDate>
<dc:creator>Jonathan</dc:creator>
<guid>http://bagofspanners.wordpress.com/2009/04/08/k2-blackpearl-and-the-case-accelerator/</guid>
<description><![CDATA[For the last few days I have been working alongside the original developer of the Case Accelerator f]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>For the last few days I have been working alongside the original developer of the Case Accelerator from K2 &#8211; Igor Jericevich &#8211; doing some knowledge transfer and tutoring on the codebase and development concepts. I thought it might be interesting to share what the Case Accelerator is, and how it might be of use to you.</p>
<h3>What is the K2 Case Accelerator</h3>
<p>In loose terms, the Case Accelerator is a set of pre-built assemblies and Smart Objects that give you a huge head-start when developing case management systems with K2 blackpearl. It maps out a set of approaches to solving common case scenarios;</p>
<ul>
<li>Managing over-arching parent processes with unstructured child processes</li>
<li>Managing structured and unstructured data simultaneously</li>
<li>Provision for key performance indicators on overall case status</li>
<li>Provision for a &#8220;core&#8221; framework around which you can build application specific case solutions.</li>
</ul>
<p>One of the most impressive aspects of the code-base is the way the case &#8220;context&#8221; can be extended (via generics) to enumerate application specific objects and properties. The hard work has already been done for you &#8211; allowing simple inheritance and specification of interfaces to write &#8220;case enabled&#8221; classes.</p>
<h3>What Benefit is the Case Accelerator</h3>
<p>Unless you have developed case solutions in the past, it&#8217;s difficult to quantify in meaningful terms just what the guys at K2 have achieved with the Case Accelerator.</p>
<p>One of the classic problems faced when building enterprise workflow solutions is the need to provide common functionality across the enterprise (typically common interface designs), and to extend uniquely within specific areas of the business. The Case Accelerator neatly solves this by de-coupling parent and child processes &#8211; allowing both structured child processes to be fired <em>as well as</em> ad-hoc child processes.</p>
<p>A larger business process may have many smaller processes within it &#8211; some of them may happen at specific points during the wider process (an approval process, for example), whereas other child processes may be requested at any time (a review, for example). Solving both has traditionally meant spaghetti parallel process designs.</p>
<p>In coming months I will share some of the specific methods and techniques employed by the Case Accelerator with the wider community. I think the tool set is going to make process driven case management a much more realistic proposition to implement than it was even two years ago (<em>over which time incidentally I built a HUGE system which suffered from all the technical problems I have outlined above</em>).</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Blackpearl and VB]]></title>
<link>http://srikantha.wordpress.com/2009/04/04/blackpearl-and-vb/</link>
<pubDate>Sat, 04 Apr 2009 04:23:37 +0000</pubDate>
<dc:creator>jey</dc:creator>
<guid>http://srikantha.wordpress.com/2009/04/04/blackpearl-and-vb/</guid>
<description><![CDATA[Fellow insider Jason wrote about his experience migrating K2.net 2003 VB based processes to K2 black]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Fellow insider Jason wrote about his experience migrating K2.net 2003 VB based processes to K2 blackpearl. Take a look at <a href="http://www.k2underground.com/blogs/jmonty/archive/2009/04/02/migrating-to-k2-blackpearl-vb-net-support-in-k2-blackpearl-processes.aspx">http://www.k2underground.com/blogs/jmonty/archive/2009/04/02/migrating-to-k2-blackpearl-vb-net-support-in-k2-blackpearl-processes.aspx</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[K2 blackpoint, blocked API calls, and no registration of SmartObject servers]]></title>
<link>http://bagofspanners.wordpress.com/2009/03/30/k2-blackpoint-blocked-api-calls-and-no-registration-of-smartobject-servers/</link>
<pubDate>Mon, 30 Mar 2009 19:40:38 +0000</pubDate>
<dc:creator>Jonathan</dc:creator>
<guid>http://bagofspanners.wordpress.com/2009/03/30/k2-blackpoint-blocked-api-calls-and-no-registration-of-smartobject-servers/</guid>
<description><![CDATA[While talking to one of the developers from K2 today, I discovered a couple of things I hadn&#8217;t]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>While talking to one of the developers from K2 today, I discovered a couple of things I hadn&#8217;t previously realised about K2 blackpoint that will have profound implications for anybody trying to use it as a cheaper substitute for K2 blackpearl&#8230;</p>
<h3>A Reduced K2 client API</h3>
<p>The K2 blackpoint API is restricted &#8211; you cannot action worklist items through it.</p>
<p>This is huge. When I started looking at K2 blackpoint, and wondered what it was capable of doing, I immediately started thinking outside the box &#8211; about how the integrations around it could be used to extend it&#8217;s functionality.</p>
<p>I&#8217;ve written in a previous post about the existence of the SharePoint Workflow Integration &#8211; and the door it opens up to write bespoke ASP.NET forms (with the idea of also replacing the default Worklist webpart to intelligently open SharePoint workflow tasks for you in this case &#8211; essentially doing an end-run around K2 blackpoint to provide ASP.NET forms).</p>
<p>If ASP.NET forms cannot use the K2 client API to action worklist items, the entire proposition becomes much more difficult.</p>
<h3>No Registration of Bespoke SmartObject Servers</h3>
<p>This was unexpected, and I have still not confirmed it for myself. Apparently you cannot register your own SmartObject servers with K2 blackpoint. While this sounds like a huge spanner to throw in, it&#8217;s not actually that bad &#8211; web service integration still exists.</p>
<p>Thinking about it, custom SmartObject Server deployment would be difficult with K2 blackpoint anyway &#8211; if you recall that SmartObjects are really two parts (a server and an interface), there is no way of specifying the interface in blackpoint.</p>
<h3>And a Pleasant Surprise&#8230;</h3>
<p>During the day I was reminded of the SharePoint SmartObject integration built into blackpoint &#8211; easily overlooked (<em>I had forgotten all about it</em>) &#8211; that allows you to create a SmartObject describing everything in a site. Suddenly the toolbox I had been thinking about building (to return the number of items in a list, or the Nth item) isn&#8217;t needed at all.</p>
<p>For the next several months I will be working almost exclusively with K2 blackpearl &#8211; but gaining a grounding in K2 blackpoint over the last few weeks has been useful to re-inforce the concept of <em>not re-creating the wheel</em>.</p>
<p>It&#8217;s tempting when working in Visual Studio to always go to the code, and invent your way out of everywhere, rather than think about how you got somewhere in the first place. Developing solutions with K2 blackpoint forces you to <em>always</em> consider what you&#8217;re doing, and how you&#8217;re doing it.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Viewflow wonders]]></title>
<link>http://srikantha.wordpress.com/2009/03/12/viewflow-wonders/</link>
<pubDate>Thu, 12 Mar 2009 01:33:05 +0000</pubDate>
<dc:creator>jey</dc:creator>
<guid>http://srikantha.wordpress.com/2009/03/12/viewflow-wonders/</guid>
<description><![CDATA[K2 has a feature named viewflow &#8211; this is a visual rendering of a process instance &#8211; whi]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>K2 has a feature named viewflow &#8211; this is a visual rendering of a process instance &#8211; which allows authorised users to visualise the flow of a business process in real time. It is a colour coded map <!--more-->that gives indication as to where the current process instance is at, where it came from and the path it could take next. Clicking on the flow you can access reports that gives you more info on the process.</p>
<p>The viewflow control comes with K2 is a .NET component that is installed on the client machines. This control is supplied with XML data that represents the process state at real time. The control can be linked to any process instance as long as the instance ID is known. This can be very useful to provide URL links to processes that are run by users. In a Sharepoint environment for example we could embed this link in a list that can hold meta data about a purchase order raised by a user.</p>
<p>One issue with viewflow is that the process diagram in its entirety is displayed. In some cases this is not ideal.</p>
<p>The viewflow control is installed by the .aspx page hosted under the K2 workspace. There is a .cab file found under the K2 install directory, You can extract the ViewFlow control installer from here (C:\Program Files\K2 blackpearl\WorkSpace\Site\TaskListControl\K2ViewflowDeployer.cab) which houses the .MSI for deploying the viewflow control.</p>
<p>Question: How one might push the control to all client desktops in a SOE environment? If you simply copy this msi and create a logoff script for your users via group policy in AD within a week most of your users will have this control ready to go. My friend Marco told me about this. Recently I used this info to help another consultant. There you go Mate, I have <a href="http://en.wikipedia.org/wiki/Pay_it_forward">paid it forward</a>.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[SmartObject Service Tester]]></title>
<link>http://srikantha.wordpress.com/2009/02/15/smartobject-service-tester/</link>
<pubDate>Sun, 15 Feb 2009 13:27:37 +0000</pubDate>
<dc:creator>jey</dc:creator>
<guid>http://srikantha.wordpress.com/2009/02/15/smartobject-service-tester/</guid>
<description><![CDATA[Did you know there is a tool that ships with K2 for configuring and testing your service objects and]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Did you know there is a tool that ships with K2 for configuring and testing your service objects and smart objects? This tool called the &#8220;SmartObject Service Tester&#8221; is found in K2 blackpearlservice broker folder of your K2 server install directory.<!--more--></p>
<p><img class="alignnone size-full wp-image-643" title="smosertester1" src="http://srikantha.wordpress.com/files/2009/02/smosertester1.jpg" alt="" width="480" height="269" /></p>
<p>On launch it lists your service objects and smart objects found on the host server.</p>
<p><img class="alignnone size-full wp-image-645" title="smosertester21" src="http://srikantha.wordpress.com/files/2009/02/smosertester21.jpg" alt="smosertester21" width="480" height="72" /></p>
<p>You can register service types and instances from this tool as well. (some of this functionality is similar to what provided in the brokermanagement.exe and via the K2 workspace management console)</p>
<p>You can pick a service object and use the tool to generate a smartobject out of it for you.</p>
<p><img class="alignnone size-full wp-image-646" title="smosertester3" src="http://srikantha.wordpress.com/files/2009/02/smosertester3.jpg" alt="smosertester3" width="479" height="386" /></p>
<p>This generates the .sodx and provides an editor interface to manipulate this SmO definition</p>
<p><img class="alignnone size-full wp-image-647" title="smosertester4" src="http://srikantha.wordpress.com/files/2009/02/smosertester4.jpg" alt="smosertester4" width="480" height="322" /></p>
<p>In here you can change the names, category, edit/delete properties and methods and the either publish your SmO or generate the .sodx.</p>
<p>You can also execute the SmO and run tests with this tool. There is more to this tool, enjoy playing around.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Playing with Notifications again...]]></title>
<link>http://srikantha.wordpress.com/2009/02/06/playing-with-emails-again/</link>
<pubDate>Thu, 05 Feb 2009 15:44:49 +0000</pubDate>
<dc:creator>jey</dc:creator>
<guid>http://srikantha.wordpress.com/2009/02/06/playing-with-emails-again/</guid>
<description><![CDATA[I have been working with a client since December&#8217;08 (on and off) implementing an end to end K2]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>I have been working with a client since December&#8217;08 (on and off) implementing an end to end K2/Sharepoint/Formservices solution. One aspect of the K2 process application we have been building is to notify various parties involved about whats going on and what they have to do, etc via&#8230;surprise surprise&#8230; emails <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> <!--more--></p>
<p>We looked at out-of-the-box client event notifications, Mail events in process and the event bus. We have chosen to go with the event bus for a number of reasons and I think this highlights the value of this component of the K2 platform:<br />
1) We have about 26 different notifications<br />
2) Business wanted to manage the content of these emails<br />
3) The content will have a high degree of change in formatting, wording and data values from the process<br />
4) No need to guarantee delivery of these emails, any error in sending does not have to affect the process instances</p>
<p>We wanted to rapidly build this application using Infopath formservices and outsourcing the email bits to client stake holders would free up the developers from the pain of getting those email notifications right. The notification events were created in reaction to some &#8216;proxy&#8217; server events in the process. By giving business users the ability to change the email bits without a re-deploy means, less testing and immediate effect on process instances in motion &#8211; all are welcomed side effects.</p>
<p>The current inability to port email notifications from one environment to another automatically, works to our advantage to get the K2 workspace to be used in production directly by users sort out the emails there. We noted the lack of drag-n-drop ability for the XMLDatafields in the notification event designer UI and lack of file attachments but have managed to work around them. We created process datafields for some of these data values and made sure that is reflected by some server events. We also do some of the file attachment emails from within the process.</p>
<p>Got a few things to share re: out of the box task notifications. You can modify the message by updating the <a href="http://srikantha.wordpress.com/2007/10/22/task-notifications/">email template</a>. but, be careful! You must ensure you include the tag [UrlWithSN] somewhere in there (I put it behind an html comment block) as otherwise you will get an exception when trying to deploy the notification event. see my response to <a href="http://www.k2underground.com/forums/thread/28544.aspx">this post </a>on K2underground. Also you need to update the from email address used by K2 by updating the config files found under hostserverbin directory on the server install directory. (Search for string &#8220;K2@system.local&#8221;)</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Custom Security Provider]]></title>
<link>http://srikantha.wordpress.com/2009/01/19/custom-security-provider/</link>
<pubDate>Sun, 18 Jan 2009 21:32:45 +0000</pubDate>
<dc:creator>jey</dc:creator>
<guid>http://srikantha.wordpress.com/2009/01/19/custom-security-provider/</guid>
<description><![CDATA[By default K2 uses AD for its authentication and authorisation mechanisms. It also ships with a Secu]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>By default K2 uses AD for its authentication and authorisation mechanisms. It also <a href="http://srikantha.wordpress.com/2007/12/30/sqlum/">ships with</a> a Security provider which allows you to use a database as an alternative user information provider. You can also build your own custom Security Provider which can be plugged into K2.</p>
<p>The steps to achieve this involves writing a DLL implementing the IHostableSecurityProvider interface (SourceCode.HostServerInterfaces.dll in K2 install directory) and registering it with K2. You will need to update K2 database table entries and also need to sign and copy the DLL into the K2 install directory.</p>
<p>You will implement the methods required to work with your users and groups. K2 will use your code for authentication and authorisation.</p>
<p>This article has some <a href="http://k2underground.com/blogs/pitchblack/archive/2008/05/01/how-to-implement-a-custom-security-provider-example-for-k2-blackpearl.aspx%5C">sample code</a></p>
<p>Please check out these KBs: <a href="http://kb.k2workflow.com/articles/kb000331.aspx">http://kb.k2workflow.com/articles/kb000331.aspx</a>, <a href="http://kb.k2workflow.com/articles/kb000186.aspx">http://kb.k2workflow.com/articles/kb000186.aspx</a></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Old is Gold on Clustering]]></title>
<link>http://srikantha.wordpress.com/2009/01/08/old-is-gold-on-clustering/</link>
<pubDate>Thu, 08 Jan 2009 12:27:38 +0000</pubDate>
<dc:creator>jey</dc:creator>
<guid>http://srikantha.wordpress.com/2009/01/08/old-is-gold-on-clustering/</guid>
<description><![CDATA[Check this KB written for K2.net 2003 re: Scalability, Clustering and Sizing. It talks about Cluster]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Check this KB written for K2.net 2003 re: Scalability, Clustering and Sizing. It talks about Clustering in good detail, A <a href="http://kb.k2workflow.com/Articles/KB000103.aspx">very good read</a>.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Outlook add-in for K2]]></title>
<link>http://srikantha.wordpress.com/2009/01/07/outlook-add-in-for-k2/</link>
<pubDate>Wed, 07 Jan 2009 08:31:16 +0000</pubDate>
<dc:creator>jey</dc:creator>
<guid>http://srikantha.wordpress.com/2009/01/07/outlook-add-in-for-k2/</guid>
<description><![CDATA[Checkout this blackmarket project -  Outlook 2007 Tasks add-in. It allows you to pull your K2 tasks ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Checkout this blackmarket project -  <a href="http://www.k2underground.com/files/folders/blackpearl_tasklist_outlook_2007_add_in/default.aspx">Outlook 2007 Tasks add-in</a>. It allows you to pull your K2 tasks into Outlook and manage them inside Outlook.</p>
<p><img class="alignnone size-full wp-image-609" title="k2oladd-in" src="http://srikantha.wordpress.com/files/2009/01/k2oladd-in.jpg" alt="k2oladd-in" width="480" height="123" /></p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Spawning subprocesses...]]></title>
<link>http://srikantha.wordpress.com/2009/01/01/spawning-subprocesses/</link>
<pubDate>Thu, 01 Jan 2009 02:35:32 +0000</pubDate>
<dc:creator>jey</dc:creator>
<guid>http://srikantha.wordpress.com/2009/01/01/spawning-subprocesses/</guid>
<description><![CDATA[Here&#8217;s a post by Bob on kicking off child process instances to process a dynamic set of reques]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Here&#8217;s a <a href="http://k2underground.com/blogs/fromthebench/archive/2008/10/22/using-a-repeating-xml-node-to-start-child-ipcs.aspx">post by Bob</a> on kicking off child process instances to process a dynamic set of requests. Good trick to know.</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Email interaction with K2]]></title>
<link>http://srikantha.wordpress.com/2008/12/31/email-interaction-with-k2/</link>
<pubDate>Tue, 30 Dec 2008 16:24:06 +0000</pubDate>
<dc:creator>jey</dc:creator>
<guid>http://srikantha.wordpress.com/2008/12/31/email-interaction-with-k2/</guid>
<description><![CDATA[Recently I took part in a PoC activity with a prospect where I was asked to demonstrate how a user m]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>Recently I took part in a PoC activity with a prospect where I was asked to demonstrate how a user might complete a task assigned to them by simply emailing K2. Ever since I came across the &#8220;email enabled list&#8221; functionality of sharepoint I had a simple solution <!--more-->proposed to many of my clients. This is the first time though I had to do it. So, I rolled up my sleeves and got on to the job.</p>
<p>Email interaction can be used to kick-off a process instance or to complete a human or system task within K2. Email also can be sent out as notifications to users and systems such as phonenumber@smsgateway.com or messengerbot@messagejey.com, etc to provide really fancy functionality.</p>
<p>I launched my VM and started setting up mail and then sharepoint to email enable a list. I tested the functionality by sending email to the hardcoded email address (actionk2@company.com) and watched documents get created and attachments saved in to the document library I have created. Then I deployed a sharepoint events process using K2 which was tied to that email enabled doclib. All this process was doing is once kicked off by the Item added event, it was picking up the serial number of the task, user name of the actioner and the action they have chose from that email. Then a server event impersonated the user, opened the worklist item and actioned it off!</p>
</div>]]></content:encoded>
</item>
<item>
<title><![CDATA[Awesome forms for K2]]></title>
<link>http://srikantha.wordpress.com/2008/12/24/awesome-forms-for-k2/</link>
<pubDate>Wed, 24 Dec 2008 03:55:30 +0000</pubDate>
<dc:creator>jey</dc:creator>
<guid>http://srikantha.wordpress.com/2008/12/24/awesome-forms-for-k2/</guid>
<description><![CDATA[K2 partner iTechnology builds forms capabilities for K2. check this out For those who may have used ]]></description>
<content:encoded><![CDATA[<div class='snap_preview'><p>K2 partner <a href="http://www.myitechnology.com/">iTechnology</a> builds forms capabilities for K2. <a href="http://www.inobitsinc.com/Videos/iTFA/iTFA.htm">check this out</a></p>
<p>For those who may have used <a href="http://srikantha.wordpress.com/2007/05/07/the-power-of-simplicity/">AchieveForms with K2.net 2003</a> this forms <!--more-->accelerator would be very familiar. There is a forms event which allows you to build very functional forms very quickly with zero code. Screenshots below are taken from the video presentation hosted by <a href="http://www.inobitsinc.com/">inobits</a> (a K2 partner who is the exclusive distributor for iTechnology forms accelerator for K2 in USA)</p>

</div>]]></content:encoded>
</item>

</channel>
</rss>
