tag:blogger.com,1999:blog-70485078504249396772024-02-08T04:07:56.918+01:00Veit Sanner's BlogSharePoint | Nintex | Project StuffUnknownnoreply@blogger.comBlogger10125tag:blogger.com,1999:blog-7048507850424939677.post-41745613603899695302014-01-27T15:00:00.000+01:002014-01-28T14:38:08.424+01:00New Authoring ProcessWith my commitment to revive this blog with new content I have also switched to a new authoring and publishing process.<br />
<br />
Previously I wrote all my blog posts directly in <em>Blogger’s HTMl editor</em>. At the beginning of my blog it was the most sensible thing for me to do. Blogger provided me with an interface to directly write my articles into the publishing engine. And it was a good choice. But over time I began to regularly fiddle with the HTML which was generated while typing into <em>Blogger’s editor</em>. And I did not focus on the area which is most important: <em>content</em>.<br />
<br />
Besides my blog I have been looking for an editor solution which provides me a simple and universal user experience from my <em>Windows laptop</em> which I have for work and on my private <em>iMac</em>. Early on I found <em><a href="http://daringfireball.net/projects/markdown/">Markdown</a></em> a very interesting solution. You are basically typing plain text into an editor with formatting commands. And the <a href="http://daringfireball.net/projects/markdown/syntax">available commands</a> are quite comprehensive for a blog post. This is then rendered into formatted output, e.g. HTML. Fundamentally, you can use just a simple text editor like <em>Notepad</em> or <em><a href="http://notepad-plus-plus.org/">Notepad++</a></em> on Windows, or <em>TextEdit</em> or <em><a href="http://www.barebones.com/products/textwrangler/">TextWrangler</a></em> on OS X. <br />
<br />
But in my case I would still need a <em>Markdown processor</em> which renders the final HTML, because <em>Blogger</em> does not directly support <em>Markdown</em>. The text files can be synced for example with a cloud storage solution like <em>Dropbox</em> or <em>Google Drive</em> between my computers.<br />
<br />
But until recently there were two major flaws:<br />
<ol>
<li>Although I am just saving and loading text files, the available Markdown editors for <em>Windows 7/8/8.1</em> and <em>OS X</em> did not work very well together. There were encoding issues and problems with the different ways the system interprets special characters, e.g. <em>line breaks</em>.</li>
<li>The publishing process for the blog would have suffered a serious break. After I have created an article with a <em>Markdown editor</em>, I would need to <br />
<ul>
<li>export the <em>Markdown</em> as HTML</li>
<li>Open the HTML file.</li>
<li>Copy the correct HTML fragment</li>
<li>Paste the fragment into <em>Blogger</em>.</li>
</ul>
</li>
</ol>
With both of those drawbacks I did not want to use <em>Markdown</em> in my writing process.<br />
<br />
Then I discovered a very nice Chrome app with the name <a class="g-profile" href="https://plus.google.com/110816046787593496375" target="_blank">+StackEdit</a>. The Chrome app appears to be a link which redirects you to <a href="https://stackedit.io/">stackedit.io</a>. And since it is just web application I am able to use it from basically any browser.<br />
<center>
<br />
<img alt="StackEdit Chrome App" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNlDAufSXiV7v7DuR9M5VloEiCzx79DSeE4YW51Jsva8enRJzvbbbMln8f_BdfkNlqsgophg5qwEjaHm3H4JR6SVx6ns0wdC_Q5QLp-WbUezKMgtAIBmFpiFKfhX-Yjb0jtH49lKRQou_8/w400-h306-no/2014-01-22+StackEdit+-+New+Authoring+Process.png" title="StackEdit Chrome App" /> <br />
</center>
Although the data can be stored inside the browser, I decided to use the <em>Google Drive</em> integration, so my posts can be easily shared between multiple computers. And now comes the killer argument: <em>I can directly publish from StackEdit to Blogger</em> — no manual fiddling required. Exactly what I wanted in the first place.<br />
<br />
<center>
<img alt="Auhtoring Process" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggsZKD2g4LRJY2xthCq4g5sqERWeRccyjCHzRUewvdoVrWj4ALjfr17xlIakCW1eyUWJKgsqTHU2EoynJzG-PFORR9yvAqQzYmLq-o5Bhg3r4VJS6pL1B6DK5GjUQL_oQhqGJCF4Rurnpz/w1140-h651-no/Publishing+Process.png" title="Authoring Process" /></center>
With the new setup I have now published two new blog posts and have some more in preparation. And the new setup has proven itself. How does your authoring process looks like?Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-7048507850424939677.post-17707526969686884872014-01-20T01:00:00.000+01:002014-01-20T17:20:24.109+01:00Green Gamification<h2 id="device-with-a-twist">
Device with a Twist</h2>
At my company’s new year kick-off everyone got a present which at first sight does not have much in common with our daily work: Creating rich intranets based on SharePoint. It might be even seen as a pure <em>geek gadget</em>: a DIN A4 sized solar panel and a rechargeable battery. The solar panel is used to charge the battery. And the battery then can be used to charge for example your mobile phone.<br />
But now comes the twist. <em><a href="https://www.blogger.com/%5bhttp://www.changers.com%5d">Changers</a></em>, the company behind it, has created an online community which allows you to upload your <em>CO<sub>2</sub> savings</em> by charging your devices with solar energy. And this community provides multiple incentives to regularly use your device. You can<br />
<ol>
<li>Track how much <em>CO<sub>2</sub></em> you have saved by charging your mobile devices with solar energy.</li>
<li>Track how many <em>watt-hours</em> of energy you have created.</li>
<li>Earn badges by achieving certain energy saving levels</li>
<li>Start a green energy competition with your peers, e.g. colleagues or friends.</li>
<li>Earn <em>credits</em> and redeem those at partner shops.</li>
<li>Post about your achievements into your social networks.</li>
<li><em>and more</em></li>
</ol>
All of the above incentives are typical for <a href="http://en.wikipedia.org/wiki/Gamification">gamification</a>. By making the path to the environmental objective <em>use green energy</em> more enjoyable the founders of <a href="https://www.blogger.com/%5bhttp://www.changers.com%5d">Changers</a> bait you into this direction.<br />
<div class="se-section-delimiter">
</div>
<h2 id="drive-engagement">
Drive Engagement</h2>
A similar strategy is used by many online communities and social networks. They aim for an increase in user numbers as well as a high engagement rate of existing users. The <em><a href="http://msdn.microsoft.com/">Microsoft Developer Network</a></em> for example has an extensive <em><a href="http://msdn.microsoft.com/en-US/ff395928.aspx#_Recognition_System">Recognition System</a></em> which covers many areas of community interactions. From <em>points</em> , over <em>bronze</em>, <em>silver</em> and <em>gold medals</em> to <em>achievements</em> you there are many ways to reward you. The overall objective: <em>User engagement</em>.<br />
Something comparable can be achieved with <em>SharePoint 2013</em>’s <em>Reputation System</em>. The Reputation System allows to reward users for their contribution to a community. And consequently the engagement and the quality of the SharePoint community sites should increase. But before you begin, you should definitely check the default settings which activities are rewarded. Because otherwise you might end-up with unwanted user behavior of due to wrong incentives.<br />
<div class="se-section-delimiter">
</div>
<h2 id="heavy-cloudy-with-a-chance-of">
Heavy Cloudy with a Chance of…</h2>
Looking out of my window I realize that the sun is still hiding somewhere behind clouds and the weather forecast for the next days is not much better. I am pretty much on the verge in building my <em>green energy credit empire</em>. So let’s hope for sunny days.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-7048507850424939677.post-41678955332801635812013-12-22T20:39:00.004+01:002013-12-23T11:58:22.689+01:00Looking back and aheadAt the end of a year I have the tendency to look back at the past year and set a vision of what lies in the twelve months to come.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGATbvN1rtizbBPGvmgmWfhs-0cHPJbCsMXUVbK_eT6JZdDXEXYzEKrBuGQEhukQT6DYWiqDTQM4I7ExUpUNqzTGLsDJJcd1-FXWnEailFkXhb8RNbTHt7Doi7MkCQYHS5qOhCnNqINyNo/s1600/looking+back+post+stats..png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGATbvN1rtizbBPGvmgmWfhs-0cHPJbCsMXUVbK_eT6JZdDXEXYzEKrBuGQEhukQT6DYWiqDTQM4I7ExUpUNqzTGLsDJJcd1-FXWnEailFkXhb8RNbTHt7Doi7MkCQYHS5qOhCnNqINyNo/s320/looking+back+post+stats..png" /></a></div>
<br />
When I look at the post history from this year I must admit that this blog was pretty silent in 2013. I published only three posts in January - which is eleven months ago. Then nothing has happened until this post. <em>Wow, time flew by</em>.<br />
<br />
What has kept me from publishing new posts in this time? Frankly, I cannot attribute to a single cause. There were multiple reasons for this:<br />
<ul>
<li>I have started a new job in February which provided new challenges.</li>
<li>In my prior job I was regularly involved in Nintex projects. In my new job my projects are most of the time around <strong><em>software architecture</em></strong> and <strong><em>quality assurance</em></strong> in <strong><em>SharePoint development projects</em></strong>. <em>(SharePoint will never let you go ;-))</em></li>
<li><em>and many other reasons.</em></li>
</ul>
So with the new tasks in my daily job, I am going to shift the core topics of this blog more in the direction of <strong><em>software architecture</em></strong> and <strong><em>quality assurance</em></strong>. Nintex posts will still be published from time to time but the majority of posts will be around software architecture and quality assurance in the context of SharePoint.<br />
<br />
Additionally, I have become a regular consumer of <strong><em>lifehack</em></strong> and <strong><em>personal effectiveness</em></strong> sites. So when an interesting topic from this area comes up, I am going to discuss this as well. <br />
<br />
So stay tuned.Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-7048507850424939677.post-74312540762965626822013-01-24T11:24:00.000+01:002013-02-06T01:14:27.454+01:00Readlist 02/2013: Search in SharePoint 2013With this month I start a post series with <a href="http://goo.gl/Z3JSs" target="_blank">Readlists</a>. Each posts contains some links to articles devoted to one topic. besides introducing a new tag "Readlist" there is also a page where all reading lists can be accessed.<br />
<br />
February 2013 is all about <i>Search in SharePoint 2013</i>.<br />
<br />
<br />
<center>
<iframe frameborder="0" height="1300" src="http://readlists.com/fe2a2bf2/embed" width="450"></iframe></center>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-7048507850424939677.post-42591126728949615742013-01-22T13:30:00.000+01:002013-01-22T18:29:52.672+01:00Integrating Nintex Workflow with Twitter Pt. 2<i style="color: #666666;">This is the second part in the series <b>Integrating Nintex Workflow with Twitter</b>. Please go to <a href="http://vsanner.blogspot.com/2013/01/integrating-nintex-workflow-with.html">part 1</a> to see the full story.</i>
<br />
<br />
In the first part of this series we have created a content <i>News Page,</i> a page layout and deployed the feature to a <i>SharePoint Publishing site</i>. The page has an extra field which is used to enter the message sent to Twitter.<br />
<br />
This part covers the workflow which is used to tweet the availability of a new <i>News Page</i>. In order to get the following to work you need <i>Nintex Workflow 2010</i> with <i>Nintex Live</i> enabled. <i>(If you want to know how enable Nintex Live take a look at the Installation Manual which can be found on <a href="http://goo.gl/8lGVT" target="_blank">Nintex's Support Pages</a>.)</i><br />
<br />
<h2>
Step 1: Creating the Workflow</h2>
<div>
The workflow for this scenario should be executed everytime a new page with version 1.0 of our content type is approved. Consequently, for updates to the content no tweet is sent. Nintex offers the possibility to hook into the <i>item changed</i> event for <i>list workflows</i>. Therefore go to the library <i>Pages</i> of your publishing site and create a new Nintex Workflow.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDI6GLV3njuwh3RXudSDd4dzb99chSHUD1axmYzV86pXhzwRFwOMe9odE4UaHU38SbFMQfCp3Dqsu0kT-z-s4j_P5b9CcjjCbVSGK8XXhd4dEUJ259cvPJpTBnUE4ODlyChHiqPCqFBwkA/s1600/Create+Nintex+Workflow.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="215" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhDI6GLV3njuwh3RXudSDd4dzb99chSHUD1axmYzV86pXhzwRFwOMe9odE4UaHU38SbFMQfCp3Dqsu0kT-z-s4j_P5b9CcjjCbVSGK8XXhd4dEUJ259cvPJpTBnUE4ODlyChHiqPCqFBwkA/s400/Create+Nintex+Workflow.png" width="400" /></a></div>
<br />
<h2>
Step 2: Add Actions from Nintex Live Catalog</h2>
<div>
Nintex provides the activities <i>Google URL shortener</i> and <i>Twitter Tweet</i> through the <i>Live Catalog</i>. <i>(The Nintex Live functionality is a seperate feature which has to be activated on the current site collection.)</i> Open the catalog from the ribbon.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQi61cXLunXdIoFUm2KiOlP-hF4ZqX3ppOzG3L9C2txV7lJaFWTmDYYeWCeRgVA7-HUq45ZWuLqLMazKEPBVPEjqv2UJwdsFz8iGHGE-dTzeWJR4YQmDFo-RDNIA3xm68D2_2LUvlYykli/s1600/Nintex+Live+Catalog.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="63" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgQi61cXLunXdIoFUm2KiOlP-hF4ZqX3ppOzG3L9C2txV7lJaFWTmDYYeWCeRgVA7-HUq45ZWuLqLMazKEPBVPEjqv2UJwdsFz8iGHGE-dTzeWJR4YQmDFo-RDNIA3xm68D2_2LUvlYykli/s320/Nintex+Live+Catalog.png" width="320" /></a></div>
<br /></div>
<div>
<br /></div>
<div>
Then use the search function to locate <i>Twitter Tweet</i> as well as <i>Google URL shortener</i> and add both activities.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqQVXYQT6yRBKG9boq4qQOADopWcM-odxzGczXs1xv_UBHwZW2exIFCJ29rUMEibmgHOrbOWYnzBK27g5Qmuhyo1FzVkAUBu3tmnX8Attc-YBsevvrgpDVmfOIUT5v2LZZNILMEX8LQPbC/s1600/Adding+Twitter+Tweet.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="311" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqQVXYQT6yRBKG9boq4qQOADopWcM-odxzGczXs1xv_UBHwZW2exIFCJ29rUMEibmgHOrbOWYnzBK27g5Qmuhyo1FzVkAUBu3tmnX8Attc-YBsevvrgpDVmfOIUT5v2LZZNILMEX8LQPbC/s400/Adding+Twitter+Tweet.png" width="400" /></a></div>
<br />
<br />
After adding both activities your workflow activity catalog looks like this:</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7FG7YL_dY2_NqQ1wjV9PJoTXGvyChQvRMxA5Dv-v_HuMagr3-_cLozwvRcUA_rUAG0gFHogPkD6th_sBLIM3PGk2HTIizxak-7KRjQ9Z_MwMD97YiGtq0fD0ivURdhWKntdTd24ZcW1Rk/s1600/after+adding+activities.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7FG7YL_dY2_NqQ1wjV9PJoTXGvyChQvRMxA5Dv-v_HuMagr3-_cLozwvRcUA_rUAG0gFHogPkD6th_sBLIM3PGk2HTIizxak-7KRjQ9Z_MwMD97YiGtq0fD0ivURdhWKntdTd24ZcW1Rk/s400/after+adding+activities.png" width="144" /></a></div>
<br /></div>
<h2>
Step 3: Configuring the URL shortener</h2>
<div>
Add the activity <i>Google URL shortener</i> to your workflow and configure it as shown below. The workflow variable <i>Item URL shortened</i>, in which the shortened URL is saved, has the type <i>Single line of text</i>.</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg57wzGbHFRtmiKCCLWsqTLGyVnRIBFRfTmSUxjSEwr-SupFs7e1GPlFsZmRbNpqa9Mj2g0Oauz949gGAGNwc6yhcegmkEh5Lmuphw0fV2jLgYcJl5Tp-U6Ms4TtF5_UVhFZkdoZnPJC790/s1600/2013-01-19+18_11_03-Workflow+Designer.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="348" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg57wzGbHFRtmiKCCLWsqTLGyVnRIBFRfTmSUxjSEwr-SupFs7e1GPlFsZmRbNpqa9Mj2g0Oauz949gGAGNwc6yhcegmkEh5Lmuphw0fV2jLgYcJl5Tp-U6Ms4TtF5_UVhFZkdoZnPJC790/s400/2013-01-19+18_11_03-Workflow+Designer.png" width="400" /></a></div>
<br />
<h2>
Step 4: Configuring Twitter Tweet</h2>
<div>
All you need now is the activity <i>Twitter Tweet</i>. Add it to the workflow and configure it as shown in the image.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIsRkRdEux8r20D-IlSfUriWq-5dWpbYjFyv8hyxREe5juNxMtZRSl6nxsrv1obtBWyLtyaasD_7KyDd0m0lUGkl3iePZlVSJDd4aLjwG3B9Cjjnr2hyfhgBSRAhqkil35U3oERjm7s7EK/s1600/Action+Twitter+Tweet.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="346" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIsRkRdEux8r20D-IlSfUriWq-5dWpbYjFyv8hyxREe5juNxMtZRSl6nxsrv1obtBWyLtyaasD_7KyDd0m0lUGkl3iePZlVSJDd4aLjwG3B9Cjjnr2hyfhgBSRAhqkil35U3oERjm7s7EK/s400/Action+Twitter+Tweet.png" width="400" /></a></div>
<div>
<br /></div>
<div>
Enter as <i>Authorizing User</i> someone who can approve <i>Nintex Live's</i> access request to your company's <i>Twitter</i> account. As <i>Twitter text</i> we set the content of the field <i>TWITTERMESSAGE</i> from the content type <i>News Page</i> as well as the shortened URL.<br />
<h2>
Step 4: Configuring the Startup Options</h2>
<div>
We want to run this workflow after a page based on the content type News Page was approved for the first time, i.e. Version 1.0. Subsequent updates to the content should not trigger further tweets. Therefore open the workflow settings and set the following start up options:</div>
<div>
<br />
<ol>
<li>Uncheck <i>Start manually</i></li>
<li>Set <i>Start when items are modified</i> to <i>Conditional</i></li>
</ol>
</div>
Open the dialog Conditional Startup Options by clicking on the button <i>Conditions</i>. Configure the conditions in the following way:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhV3VrzV6cRIb2B2Qnc-oW7KVIVlltA6Mml8DU3nIMZhO9i4vhAUm20R6VRvUsHOPkSWwBU0rWcsJ0rYWHowLdjwOeBVEgP0yZQ90d5hdd4xKQhvRse60gtVgqxbO4h18rQENCDbCdwXCSk/s1600/2013-01-19+18_34_05-Workflow+Designer.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="397" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhV3VrzV6cRIb2B2Qnc-oW7KVIVlltA6Mml8DU3nIMZhO9i4vhAUm20R6VRvUsHOPkSWwBU0rWcsJ0rYWHowLdjwOeBVEgP0yZQ90d5hdd4xKQhvRse60gtVgqxbO4h18rQENCDbCdwXCSk/s400/2013-01-19+18_34_05-Workflow+Designer.png" width="400" /></a></div>
<br />
Close the dialog by clicking on Save. Set the name of the workflow to <i>Twitter about News Page</i>.Your workflow settings should look like this:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZAG7bZPZ9DxF31PDWm1MjLyJ4lbpYaU8lraFcVKzcnbZJiM-FyiDUchmw1SKyJ7TbLUTC57xnSS4qmQ1pjZEYuefM2v56YwUt6GgfLN9LwmGUXwbseUct8W9387TfiGaRZ3msW6-4UlsJ/s1600/2013-01-19+18_31_20-Workflow+Designer.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="356" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZAG7bZPZ9DxF31PDWm1MjLyJ4lbpYaU8lraFcVKzcnbZJiM-FyiDUchmw1SKyJ7TbLUTC57xnSS4qmQ1pjZEYuefM2v56YwUt6GgfLN9LwmGUXwbseUct8W9387TfiGaRZ3msW6-4UlsJ/s400/2013-01-19+18_31_20-Workflow+Designer.png" width="400" /></a></div>
<br />
Close the workflow settings by hitting on <i>Save </i>then publish the workflow.<br />
<br />
<h2>
Conclusion</h2>
<div>
In this post you have created a workflow which tweets the availability of a News Page. Next week's post is about the experience of the News editor and how the result looks like on Twitter.</div>
<div>
<br /></div>
<div>
<i>Complete code from this week is available on codeplex: <a href="http://goo.gl/uHkP5" target="_blank">http://vsanner.codeplex.com</a>, Project: 2013-01 SocialMedia-2</i>
</div>
<br /></div>
<div>
<br /></div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-7048507850424939677.post-57683893942121286992013-01-14T20:35:00.000+01:002013-01-14T20:35:27.553+01:00Integrating Nintex Workflow with Twitter Pt. 1<h2>
Overview</h2>
One common scenario for corporate Internet sites is to sent notifications when a new article is published via social networks to their followers. With the availability of Nintex Live it became possible to twitter a tweet. In one of the later versions a similar activity for <a href="http://goo.gl/0gtcR">Yammer</a> became available. In this post I will show how you can use the "Twitter a Tweet" activity to notify your Twitter followers about new articles.<br />
<br />
This is going to be a two part series. In the first part I will create a <i>News Page</i> content type and page layout. In the second part I will show you the workflow which ensures that every time a <i>News Page</i> was approved the notification is sent to Twitter.<br />
<br />
<h2>
Step 1: Content Type News Page</h2>
In order to get started open Visual Studio 2010 and create an empty SharePoint project. Then add a new content type to this project based on <i>Page</i>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5uSQ4cGfzqd1uQ20oUussfrkkMXlEfJa5R8S1TKzliNzWVkJf_sdUKxlbOemmgxZ05YVuZLrLaL0p7jdAVszCVpnF9NvKFi1vTgDK1lvIRmpUU4fsKBdeboe7HWL0TpeXo9FIxgJKBuOB/s1600/2013-01-12+18_28_50-SharePoint+Customization+Wizard.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="252" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5uSQ4cGfzqd1uQ20oUussfrkkMXlEfJa5R8S1TKzliNzWVkJf_sdUKxlbOemmgxZ05YVuZLrLaL0p7jdAVszCVpnF9NvKFi1vTgDK1lvIRmpUU4fsKBdeboe7HWL0TpeXo9FIxgJKBuOB/s320/2013-01-12+18_28_50-SharePoint+Customization+Wizard.png" width="320" /></a></div>
<br />
Modify the added content type to look like the this:<br />
<br />
<!-- code formatted by http://manoli.net/csharpformat/ -->
<br />
<div class="csharpcode">
<pre><span class="lnum"> 1: </span><span class="rem"><!-- Parent ContentType: Page (0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF39) --></span></pre>
<pre><span class="lnum"> 2: </span> <span class="kwrd"><</span><span class="html">ContentType</span> <span class="attr">ID</span><span class="kwrd">="0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF3900d765018dfe204899adbdfeca8fd70d8f"</span></pre>
<pre><span class="lnum"> 3: </span> <span class="attr">Name</span><span class="kwrd">="News Page"</span></pre>
<pre><span class="lnum"> 4: </span> <span class="attr">Group</span><span class="kwrd">="Social Media"</span></pre>
<pre><span class="lnum"> 5: </span> <span class="attr">Description</span><span class="kwrd">="News Page with Twitter Message"</span></pre>
<pre><span class="lnum"> 6: </span> <span class="attr">Inherits</span><span class="kwrd">="TRUE"</span></pre>
<pre><span class="lnum"> 7: </span> <span class="attr">Version</span><span class="kwrd">="0"</span><span class="kwrd">></span></pre>
</div>
<br />
<br />
<h2>
Step 2: Field <i>Twitter Message</i></h2>
The field is used by editors to define the message which is sent to Twitter. Just add before the content type declaration from step 1 following field:<br />
<br />
<!-- code formatted by http://manoli.net/csharpformat/ -->
<br />
<div class="csharpcode">
<pre><span class="lnum"> 1: </span><span class="kwrd"><</span><span class="html">Field</span> <span class="attr">ID</span><span class="kwrd">="{D46E8C75-4C20-4118-A367-A553429602F0}"</span></pre>
<pre><span class="lnum"> 2: </span> <span class="attr">StaticName</span><span class="kwrd">="TWITTERMESSAGE"</span></pre>
<pre><span class="lnum"> 3: </span> <span class="attr">Name</span><span class="kwrd">="TWITTERMESSAGE"</span></pre>
<pre><span class="lnum"> 4: </span> <span class="attr">Title</span><span class="kwrd">="Twitter Message"</span></pre>
<pre><span class="lnum"> 5: </span> <span class="attr">DisplayName</span><span class="kwrd">="Twitter Message"</span></pre>
<pre><span class="lnum"> 6: </span> <span class="attr">Type</span><span class="kwrd">="Text"</span></pre>
<pre><span class="lnum"> 7: </span> <span class="attr">Group</span><span class="kwrd">="Social Media"</span></pre>
<pre><span class="lnum"> 8: </span> <span class="attr">TextOnly</span><span class="kwrd">="TRUE"</span></pre>
<pre><span class="lnum"> 9: </span> <span class="attr">ShowAlways</span><span class="kwrd">="TRUE"</span></pre>
<pre><span class="lnum"> 10: </span> <span class="attr">Hidden</span><span class="kwrd">="FALSE"</span></pre>
<pre><span class="lnum"> 11: </span> <span class="attr">MaxLength</span><span class="kwrd">="119"</span></pre>
<pre><span class="lnum"> 12: </span> <span class="kwrd">/></span></pre>
</div>
<br />
<b>Please note:</b> <i>MaxLength </i>(line 11) is set to 119. This allows us to append URL to the article during the workflow.<br />
<br />
Then add the field to the <i>News Page</i> content type declaration:<br />
<br />
<!-- code formatted by http://manoli.net/csharpformat/ -->
<br />
<div class="csharpcode">
<pre><span class="lnum"> 1: </span><span class="rem"><!-- Parent ContentType: Page (0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF39) --></span></pre>
<pre><span class="lnum"> 2: </span> <span class="kwrd"><</span><span class="html">ContentType</span> <span class="attr">ID</span><span class="kwrd">="0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF3900d765018dfe204899adbdfeca8fd70d8f"</span></pre>
<pre><span class="lnum"> 3: </span> <span class="attr">Name</span><span class="kwrd">="News Page"</span></pre>
<pre><span class="lnum"> 4: </span> <span class="attr">Group</span><span class="kwrd">="Social Media"</span></pre>
<pre><span class="lnum"> 5: </span> <span class="attr">Description</span><span class="kwrd">="News Page with Twitter Message"</span></pre>
<pre><span class="lnum"> 6: </span> <span class="attr">Inherits</span><span class="kwrd">="TRUE"</span></pre>
<pre><span class="lnum"> 7: </span> <span class="attr">Version</span><span class="kwrd">="0"</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 8: </span> <span class="kwrd"><</span><span class="html">FieldRefs</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 9: </span> <span class="kwrd"><</span><span class="html">FieldRef</span> <span class="attr">ID</span><span class="kwrd">="{D46E8C75-4C20-4118-A367-A553429602F0}"</span> <span class="attr">Name</span><span class="kwrd">="TWITTERMESSAGE"</span> <span class="attr">Required</span><span class="kwrd">="TRUE"</span><span class="kwrd">/></span></pre>
<pre><span class="lnum"> 10: </span> <span class="kwrd"></</span><span class="html">FieldRefs</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 11: </span> <span class="kwrd"></</span><span class="html">ContentType</span><span class="kwrd">></span></pre>
</div>
<br />
<h2>
<b>Step 3: Binding the News Page to the library Pages</b></h2>
And finally before the closing Elements tag insert the content type binding. This ensures that the content type is available in the library <i>Pages</i>.<br />
<br />
<!-- code formatted by http://manoli.net/csharpformat/ -->
<br />
<div class="csharpcode">
<pre><span class="lnum"> 1: </span><span class="rem"><!-- Bind Content Type to Pages library--></span></pre>
<pre><span class="lnum"> 2: </span> <span class="kwrd"><</span><span class="html">ContentTypeBinding</span></pre>
<pre><span class="lnum"> 3: </span> <span class="attr">ContentTypeId</span><span class="kwrd">="0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF3900d765018dfe204899adbdfeca8fd70d8f"</span></pre>
<pre><span class="lnum"> 4: </span> <span class="attr">ListUrl</span><span class="kwrd">="$Resources:cmscore,List_Pages_UrlName;"</span></pre>
<pre><span class="lnum"> 5: </span> <span class="kwrd">/></span></pre>
</div>
<br />
<h2>
Step 4: Adding the Page Layout</h2>
<div>
As of now we have defined the content type News Page and have added a field to hold the message sent to Twitter. What is still missing is a page layout which allow editors to create a news page and define the message content. Add a new module named <i>PageLayouts</i> to the project. Then rename the file<i> Sample.txt</i> to <i>NewsPage.aspx</i>.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7pIUdAuPCAsko1_Sa8-XhXM4WnVDwfJOlBUwMZC6nySYsvGJvBE-mzI8R94z1vFFaPxUgF5ehKay3wl20tsXTMdAB7SJupIJ4ZmFle7ErCoIYAU8vXkdvahRk8PXwp5TojmGe-8tCUmid/s1600/2013-01-12+19_55_40-.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="248" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7pIUdAuPCAsko1_Sa8-XhXM4WnVDwfJOlBUwMZC6nySYsvGJvBE-mzI8R94z1vFFaPxUgF5ehKay3wl20tsXTMdAB7SJupIJ4ZmFle7ErCoIYAU8vXkdvahRk8PXwp5TojmGe-8tCUmid/s320/2013-01-12+19_55_40-.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
Open <i>NewsPage.aspx </i>and paste the following code into the file:</div>
<div>
<!-- code formatted by http://manoli.net/csharpformat/ -->
<br />
<div class="csharpcode">
<pre><span class="lnum"> 1: </span><span class="asp"><%@ Page language="C#" Inherits="Microsoft.SharePoint.Publishing.PublishingLayoutPage,Microsoft.SharePoint.Publishing,Version=14.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e9429c" %></span></pre>
<pre><span class="lnum"> 2: </span><span class="asp"><%@ Register Tagprefix="SharePointWebControls" Namespace="Microsoft.SharePoint.WebControls" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %></span></pre>
<pre><span class="lnum"> 3: </span><span class="asp"><%@ Register Tagprefix="WebPartPages" Namespace="Microsoft.SharePoint.WebPartPages" Assembly="Microsoft.SharePoint, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %></span> </pre>
<pre><span class="lnum"> 4: </span><span class="asp"><%@ Register Tagprefix="PublishingWebControls" Namespace="Microsoft.SharePoint.Publishing.WebControls" Assembly="Microsoft.SharePoint.Publishing, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %></span> </pre>
<pre><span class="lnum"> 5: </span><span class="asp"><%@ Register Tagprefix="PublishingNavigation" Namespace="Microsoft.SharePoint.Publishing.Navigation" Assembly="Microsoft.SharePoint.Publishing, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" %></span></pre>
<pre><span class="lnum"> 6: </span> </pre>
<pre><span class="lnum"> 7: </span><span class="kwrd"><</span><span class="html">asp:Content</span> <span class="attr">ContentPlaceholderID</span><span class="kwrd">="PlaceHolderAdditionalPageHead"</span> <span class="attr">runat</span><span class="kwrd">="server"</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 8: </span> <span class="kwrd"><</span><span class="html">SharePointWebControls:UIVersionedContent</span> <span class="attr">ID</span><span class="kwrd">="UIVersionedContent1"</span> <span class="attr">UIVersion</span><span class="kwrd">="4"</span> <span class="attr">runat</span><span class="kwrd">="server"</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 9: </span> <span class="kwrd"><</span><span class="html">ContentTemplate</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 10: </span> <span class="kwrd"><</span><span class="html">SharePointWebControls:CssRegistration</span> <span class="attr">name</span><span class="kwrd">="<% $SPUrl:~sitecollection/Style Library/~language/Core Styles/pageLayouts.css %>"</span> <span class="attr">runat</span><span class="kwrd">="server"</span><span class="kwrd">/></span></pre>
<pre><span class="lnum"> 11: </span> <span class="kwrd"><</span><span class="html">PublishingWebControls:editmodepanel</span> <span class="attr">runat</span><span class="kwrd">="server"</span> <span class="attr">id</span><span class="kwrd">="editmodestyles"</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 12: </span> <span class="rem"><!-- Styles for edit mode only--></span></pre>
<pre><span class="lnum"> 13: </span> <span class="kwrd"><</span><span class="html">SharePointWebControls:CssRegistration</span> <span class="attr">ID</span><span class="kwrd">="CssRegistration1"</span> <span class="attr">name</span><span class="kwrd">="<% $SPUrl:~sitecollection/Style Library/~language/Core Styles/zz2_editMode.css %>"</span> <span class="attr">runat</span><span class="kwrd">="server"</span><span class="kwrd">/></span></pre>
<pre><span class="lnum"> 14: </span> <span class="kwrd"><</span><span class="html">style</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 15: </span> .ms-long{width:900px !important;}</pre>
<pre><span class="lnum"> 16: </span> <span class="kwrd"></</span><span class="html">style</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 17: </span> <span class="kwrd"></</span><span class="html">PublishingWebControls:editmodepanel</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 18: </span> <span class="kwrd"></</span><span class="html">ContentTemplate</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 19: </span> <span class="kwrd"></</span><span class="html">SharePointWebControls:UIVersionedContent</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 20: </span> <span class="kwrd"><</span><span class="html">SharePointWebControls:UIVersionedContent</span> <span class="attr">ID</span><span class="kwrd">="UIVersionedContent2"</span> <span class="attr">UIVersion</span><span class="kwrd">="4"</span> <span class="attr">runat</span><span class="kwrd">="server"</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 21: </span> <span class="kwrd"><</span><span class="html">ContentTemplate</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 22: </span> <span class="kwrd"><</span><span class="html">SharePointWebControls:CssRegistration</span> <span class="attr">name</span><span class="kwrd">="<% $SPUrl:~sitecollection/Style Library/~language/Core Styles/page-layouts-21.css %>"</span> <span class="attr">runat</span><span class="kwrd">="server"</span><span class="kwrd">/></span></pre>
<pre><span class="lnum"> 23: </span> <span class="kwrd"><</span><span class="html">PublishingWebControls:EditModePanel</span> <span class="attr">ID</span><span class="kwrd">="EditModePanel1"</span> <span class="attr">runat</span><span class="kwrd">="server"</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 24: </span> <span class="rem"><!-- Styles for edit mode only--></span></pre>
<pre><span class="lnum"> 25: </span> <span class="kwrd"><</span><span class="html">SharePointWebControls:CssRegistration</span> <span class="attr">ID</span><span class="kwrd">="CssRegistration2"</span> <span class="attr">name</span><span class="kwrd">="<% $SPUrl:~sitecollection/Style Library/~language/Core Styles/edit-mode-21.css %>"</span></pre>
<pre><span class="lnum"> 26: </span> <span class="attr">After</span><span class="kwrd">="<% $SPUrl:~sitecollection/Style Library/~language/Core Styles/page-layouts-21.css %>"</span> <span class="attr">runat</span><span class="kwrd">="server"</span><span class="kwrd">/></span></pre>
<pre><span class="lnum"> 27: </span> <span class="kwrd"></</span><span class="html">PublishingWebControls:EditModePanel</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 28: </span> <span class="kwrd"></</span><span class="html">ContentTemplate</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 29: </span> <span class="kwrd"></</span><span class="html">SharePointWebControls:UIVersionedContent</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 30: </span> <span class="kwrd"><</span><span class="html">SharePointWebControls:CssRegistration</span> <span class="attr">ID</span><span class="kwrd">="CssRegistration3"</span> <span class="attr">name</span><span class="kwrd">="<% $SPUrl:~sitecollection/Style Library/~language/Core Styles/rca.css %>"</span> <span class="attr">runat</span><span class="kwrd">="server"</span><span class="kwrd">/></span></pre>
<pre><span class="lnum"> 31: </span> <span class="kwrd"><</span><span class="html">SharePointWebControls:FieldValue</span> <span class="attr">id</span><span class="kwrd">="PageStylesField"</span> <span class="attr">FieldName</span><span class="kwrd">="HeaderStyleDefinitions"</span> <span class="attr">runat</span><span class="kwrd">="server"</span><span class="kwrd">/></span></pre>
<pre><span class="lnum"> 32: </span><span class="kwrd"></</span><span class="html">asp:Content</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 33: </span> </pre>
<pre><span class="lnum"> 34: </span> </pre>
<pre><span class="lnum"> 35: </span><span class="kwrd"><</span><span class="html">asp:Content</span> <span class="attr">ContentPlaceholderID</span><span class="kwrd">="PlaceHolderPageTitle"</span> <span class="attr">runat</span><span class="kwrd">="server"</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 36: </span> <span class="kwrd"><</span><span class="html">SharePointWebControls:FieldValue</span> <span class="attr">id</span><span class="kwrd">="PageTitle"</span> <span class="attr">FieldName</span><span class="kwrd">="Title"</span> <span class="attr">runat</span><span class="kwrd">="server"</span><span class="kwrd">/></span></pre>
<pre><span class="lnum"> 37: </span><span class="kwrd"></</span><span class="html">asp:Content</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 38: </span> </pre>
<pre><span class="lnum"> 39: </span> </pre>
<pre><span class="lnum"> 40: </span><span class="kwrd"><</span><span class="html">asp:Content</span> <span class="attr">ContentPlaceholderID</span><span class="kwrd">="PlaceHolderPageTitleInTitleArea"</span> <span class="attr">runat</span><span class="kwrd">="server"</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 41: </span> <span class="kwrd"><</span><span class="html">SharePointWebControls:UIVersionedContent</span> <span class="attr">ID</span><span class="kwrd">="UIVersionedContent3"</span> <span class="attr">UIVersion</span><span class="kwrd">="4"</span> <span class="attr">runat</span><span class="kwrd">="server"</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 42: </span> <span class="kwrd"><</span><span class="html">ContentTemplate</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 43: </span> <span class="kwrd"><</span><span class="html">SharePointWebControls:TextField</span> <span class="attr">runat</span><span class="kwrd">="server"</span> <span class="attr">id</span><span class="kwrd">="TitleField"</span> <span class="attr">FieldName</span><span class="kwrd">="Title"</span><span class="kwrd">/></span></pre>
<pre><span class="lnum"> 44: </span> <span class="kwrd"></</span><span class="html">ContentTemplate</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 45: </span> <span class="kwrd"></</span><span class="html">SharePointWebControls:UIVersionedContent</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 46: </span> <span class="kwrd"><</span><span class="html">SharePointWebControls:UIVersionedContent</span> <span class="attr">ID</span><span class="kwrd">="UIVersionedContent4"</span> <span class="attr">UIVersion</span><span class="kwrd">="4"</span> <span class="attr">runat</span><span class="kwrd">="server"</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 47: </span> <span class="kwrd"><</span><span class="html">ContentTemplate</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 48: </span> <span class="kwrd"><</span><span class="html">SharePointWebControls:FieldValue</span> <span class="attr">FieldName</span><span class="kwrd">="Title"</span> <span class="attr">runat</span><span class="kwrd">="server"</span><span class="kwrd">/></span></pre>
<pre><span class="lnum"> 49: </span> <span class="kwrd"></</span><span class="html">ContentTemplate</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 50: </span> <span class="kwrd"></</span><span class="html">SharePointWebControls:UIVersionedContent</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 51: </span><span class="kwrd"></</span><span class="html">asp:Content</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 52: </span> </pre>
<pre><span class="lnum"> 53: </span> </pre>
<pre><span class="lnum"> 54: </span><span class="kwrd"><</span><span class="html">asp:Content</span> <span class="attr">ContentPlaceHolderId</span><span class="kwrd">="PlaceHolderTitleBreadcrumb"</span> <span class="attr">runat</span><span class="kwrd">="server"</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 55: </span> <span class="kwrd"><</span><span class="html">SharePointWebControls:VersionedPlaceHolder</span> <span class="attr">ID</span><span class="kwrd">="VersionedPlaceHolder1"</span> <span class="attr">UIVersion</span><span class="kwrd">="4"</span> <span class="attr">runat</span><span class="kwrd">="server"</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 56: </span> <span class="kwrd"><</span><span class="html">ContentTemplate</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 57: </span> <span class="kwrd"><</span><span class="html">asp:SiteMapPath</span> <span class="attr">ID</span><span class="kwrd">="siteMapPath"</span> <span class="attr">runat</span><span class="kwrd">="server"</span> <span class="attr">SiteMapProvider</span><span class="kwrd">="CurrentNavigation"</span> <span class="attr">RenderCurrentNodeAsLink</span><span class="kwrd">="false"</span> <span class="attr">SkipLinkText</span><span class="kwrd">=""</span> <span class="attr">CurrentNodeStyle-CssClass</span><span class="kwrd">="current"</span> <span class="attr">NodeStyle-CssClass</span><span class="kwrd">="ms-sitemapdirectional"</span><span class="kwrd">/></span></pre>
<pre><span class="lnum"> 58: </span> <span class="kwrd"></</span><span class="html">ContentTemplate</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 59: </span> <span class="kwrd"></</span><span class="html">SharePointWebControls:VersionedPlaceHolder</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 60: </span> <span class="kwrd"><</span><span class="html">SharePointWebControls:UIVersionedContent</span> <span class="attr">ID</span><span class="kwrd">="UIVersionedContent5"</span> <span class="attr">UIVersion</span><span class="kwrd">="4"</span> <span class="attr">runat</span><span class="kwrd">="server"</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 61: </span> <span class="kwrd"><</span><span class="html">ContentTemplate</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 62: </span> <span class="kwrd"><</span><span class="html">SharePointWebControls:ListSiteMapPath</span> <span class="attr">runat</span><span class="kwrd">="server"</span> <span class="attr">SiteMapProviders</span><span class="kwrd">="CurrentNavigation"</span> <span class="attr">RenderCurrentNodeAsLink</span><span class="kwrd">="false"</span> <span class="attr">PathSeparator</span><span class="kwrd">=""</span> <span class="attr">CssClass</span><span class="kwrd">="s4-breadcrumb"</span> <span class="attr">NodeStyle-CssClass</span><span class="kwrd">="s4-breadcrumbNode"</span> <span class="attr">CurrentNodeStyle-CssClass</span><span class="kwrd">="s4-breadcrumbCurrentNode"</span> <span class="attr">RootNodeStyle-CssClass</span><span class="kwrd">="s4-breadcrumbRootNode"</span> <span class="attr">NodeImageOffsetX</span>=<span class="attr">0</span> <span class="attr">NodeImageOffsetY</span>=<span class="attr">353</span> <span class="attr">NodeImageWidth</span>=<span class="attr">16</span> <span class="attr">NodeImageHeight</span>=<span class="attr">16</span> <span class="attr">NodeImageUrl</span><span class="kwrd">="/_layouts/images/fgimg.png"</span> <span class="attr">HideInteriorRootNodes</span><span class="kwrd">="true"</span> <span class="attr">SkipLinkText</span><span class="kwrd">=""</span> <span class="kwrd">/></span></pre>
<pre><span class="lnum"> 63: </span> <span class="kwrd"></</span><span class="html">ContentTemplate</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 64: </span> <span class="kwrd"></</span><span class="html">SharePointWebControls:UIVersionedContent</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 65: </span><span class="kwrd"></</span><span class="html">asp:Content</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 66: </span> </pre>
<pre><span class="lnum"> 67: </span> </pre>
<pre><span class="lnum"> 68: </span><span class="kwrd"><</span><span class="html">asp:Content</span> <span class="attr">ContentPlaceholderID</span><span class="kwrd">="PlaceHolderMain"</span> <span class="attr">runat</span><span class="kwrd">="server"</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 69: </span> <span class="kwrd"><</span><span class="html">SharePointWebControls:UIVersionedContent</span> <span class="attr">ID</span><span class="kwrd">="UIVersionedContent6"</span> <span class="attr">UIVersion</span><span class="kwrd">="4"</span> <span class="attr">runat</span><span class="kwrd">="server"</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 70: </span> <span class="kwrd"><</span><span class="html">ContentTemplate</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 71: </span> <span class="kwrd"><</span><span class="html">table</span> <span class="attr">id</span><span class="kwrd">="MSO_ContentTable"</span> <span class="attr">cellpadding</span><span class="kwrd">="0"</span> <span class="attr">cellspacing</span><span class="kwrd">="0"</span> <span class="attr">border</span><span class="kwrd">="0"</span> <span class="attr">width</span><span class="kwrd">="100%"</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 72: </span> <span class="kwrd"><</span><span class="html">tr</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 73: </span> <span class="kwrd"><</span><span class="html">td</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 74: </span> <span class="kwrd"><</span><span class="html">div</span> <span class="attr">class</span><span class="kwrd">="pageContent"</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 75: </span> <span class="kwrd"><</span><span class="html">PublishingWebControls:RichHtmlField</span> <span class="attr">id</span><span class="kwrd">="content"</span> <span class="attr">FieldName</span><span class="kwrd">="PublishingPageContent"</span> <span class="attr">runat</span><span class="kwrd">="server"</span> <span class="kwrd">/></span></pre>
<pre><span class="lnum"> 76: </span> <span class="kwrd"></</span><span class="html">div</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 77: </span> <span class="kwrd"></</span><span class="html">td</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 78: </span> <span class="kwrd"></</span><span class="html">tr</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 79: </span> <span class="kwrd"></</span><span class="html">table</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 80: </span> <span class="kwrd"><</span><span class="html">PublishingWebControls:editmodepanel</span> <span class="attr">runat</span><span class="kwrd">="server"</span> <span class="attr">id</span><span class="kwrd">="editmodepanel2"</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 81: </span> <span class="rem"><!-- Add field controls here to bind custom metadata viewable and editable in edit mode only.--></span> </pre>
<pre><span class="lnum"> 82: </span> <span class="kwrd"><</span><span class="html">table</span> <span class="attr">cellpadding</span><span class="kwrd">="10"</span> <span class="attr">cellspacing</span><span class="kwrd">="0"</span> <span class="attr">align</span><span class="kwrd">="left"</span> <span class="attr">class</span><span class="kwrd">="editModePanel"</span> <span class="attr">width</span><span class="kwrd">="100%"</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 83: </span> <span class="kwrd"><</span><span class="html">tr</span> <span class="attr">valign</span><span class="kwrd">="top"</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 84: </span> <span class="kwrd"><</span><span class="html">td</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 85: </span> <span class="kwrd"><</span><span class="html">asp:label</span> <span class="attr">text</span><span class="kwrd">="Please enter your twitter message."</span> <span class="attr">runat</span><span class="kwrd">="server"</span> <span class="kwrd">/></span></pre>
<pre><span class="lnum"> 86: </span> <span class="kwrd"></</span><span class="html">td</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 87: </span> <span class="kwrd"><</span><span class="html">td</span> <span class="attr">width</span><span class="kwrd">="950"</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 88: </span> <span class="kwrd"><</span><span class="html">SharePointWebControls:TextField</span> <span class="attr">FieldName</span><span class="kwrd">="TWITTERMESSAGE"</span> <span class="attr">runat</span><span class="kwrd">="server"</span> <span class="kwrd">/></span></pre>
<pre><span class="lnum"> 89: </span> <span class="kwrd"></</span><span class="html">td</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 90: </span> <span class="kwrd"></</span><span class="html">tr</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 91: </span> <span class="kwrd"></</span><span class="html">table</span><span class="kwrd">></span> </pre>
<pre><span class="lnum"> 92: </span> <span class="kwrd"></</span><span class="html">PublishingWebControls:editmodepanel</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 93: </span> <span class="kwrd"></</span><span class="html">ContentTemplate</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 94: </span> <span class="kwrd"></</span><span class="html">SharePointWebControls:UIVersionedContent</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 95: </span><span class="kwrd"></</span><span class="html">asp:Content</span><span class="kwrd">></span></pre>
</div>
</div>
<br />
In line 80 the edit mode panel begins. This section is only displayed when a user edits the page. This is where we allow the editor to enter the Twitter message. In line 88 we bind a TextField control to the field <i>TWITTERMESSAGE</i> of the content type.<br />
<br />
<h2>
Step 5: Binding the Page Layout to the Content Type</h2>
<div>
<span class="kwrd">Although we have just defined the page layout. there is currently no binding between the page layout and the content type. In order to create this binding, update the <i>elements.xml</i> of the module with these lines:</span><br />
<span class="kwrd"><br /></span></div>
<div>
<!-- code formatted by http://manoli.net/csharpformat/ -->
<br />
<div class="csharpcode">
<pre><span class="lnum"> 1: </span><span class="kwrd"><</span><span class="html">Module</span> <span class="attr">Name</span><span class="kwrd">="PageLayouts"</span> <span class="attr">Url</span><span class="kwrd">="_catalogs/masterpage"</span> <span class="attr">Path</span><span class="kwrd">="PageLayouts"</span> <span class="kwrd">></span></pre>
<pre><span class="lnum"> 2: </span> <span class="kwrd"><</span><span class="html">File</span> <span class="attr">Path</span><span class="kwrd">="NewsPage.aspx"</span> <span class="attr">Url</span><span class="kwrd">="PageLayouts/NewsPage.aspx"</span> <span class="attr">Type</span><span class="kwrd">="GhostableInLibrary"</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 3: </span> <span class="kwrd"><</span><span class="html">Property</span></pre>
<pre><span class="lnum"> 4: </span> <span class="attr">Name</span><span class="kwrd">="PublishingAssociatedContentType"</span></pre>
<pre><span class="lnum"> 5: </span> <span class="attr">Value</span><span class="kwrd">=";#News Page;#0x010100C568DB52D9D0A14D9B2FDCC96666E9F2007948130EC3DB064584E219954237AF3900d765018dfe204899adbdfeca8fd70d8f"</span><span class="kwrd">/></span></pre>
<pre><span class="lnum"> 6: </span> <span class="kwrd"><</span><span class="html">Property</span></pre>
<pre><span class="lnum"> 7: </span> <span class="attr">Name</span><span class="kwrd">="Title"</span></pre>
<pre><span class="lnum"> 8: </span> <span class="attr">Value</span><span class="kwrd">="News Page (Twitter)"</span><span class="kwrd">/></span></pre>
<pre><span class="lnum"> 9: </span> <span class="kwrd"></</span><span class="html">File</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 10: </span><span class="kwrd"></</span><span class="html">Module</span><span class="kwrd">></span></pre>
</div>
<br />
The first Property element binds the page layout to the content type.<br />
<br />
<h2>
Conclusion</h2>
During this post we have create a content type which has a page layout and stores a twitter message. The next post will be covering the workflow will be available by next week.<br />
<br />
<i>Complete code from this week is available on codeplex: <a href="http://goo.gl/uHkP5" target="_blank">http://vsanner.codeplex.com</a>, Project: 2013-01 SocialMedia-1</i><br />
<pre><span class="kwrd">
</span></pre>
<pre><span class="kwrd">
</span></pre>
</div>
Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-7048507850424939677.post-75730652849685471682012-02-23T14:59:00.000+01:002012-02-23T16:48:43.701+01:00How to use Workflow Constants as Environment InformationAfter showing how workflow constants can help you with environment information in my last post <a href="http://vsanner.blogspot.com/2012/02/how-to-handle-environment-variables.html" target="_blank">How to Handle Environment Variables with Nintex Workflow</a>, I am going to explain how workflow constants can be used in your deployment scripts.<br />
<br />
Starting of we create a workflow constant at website level. Therefore go to the <i>Site Settings</i> of the site where you want to use the workflow constant, then select <i>Manage workflow constants </i>under<i> Nintex Workflow.</i> Select <i>New</i> from the ribbon and create a workflow constant with the following settings:<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlGL0eP31cJr-TxOxZfI6c8VDA4GbJV1VOMSiK1swqB86oUKhQMUdCxgE2l3UoYoUhtctS2RF0AHvR7q6FgnCTzcsC4Xov8prBhETWig6DnV0BToPp03WbHYqPOmFetTCxmxrZm4KRAbxS/s1600/add_wf_constant.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="285" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlGL0eP31cJr-TxOxZfI6c8VDA4GbJV1VOMSiK1swqB86oUKhQMUdCxgE2l3UoYoUhtctS2RF0AHvR7q6FgnCTzcsC4Xov8prBhETWig6DnV0BToPp03WbHYqPOmFetTCxmxrZm4KRAbxS/s400/add_wf_constant.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">click to enlarge</td></tr>
</tbody></table>
<br />
<br />
Then open the command prompt and switch to the Nintex Workflow 2010 install folder.<i> (Typically: C:\Program Files\Nintex\Nintex Workflow 2010)</i>. In order to export the workflow constant you have just created enter the following command:<br />
<br />
<div class="csharpcode">
<pre class="alt"><span class="lnum"> 1: </span>nwadmin -o ExportWorkflowConstants -siteUrl [url to your site] -outputFile wfconst_dev.xml -includeSite</pre>
</div>
<br />
The output file <i>wfconst_dev.xml</i> contains all workflow constants which do exists at the selected site. As you can guess by the file extension this is a XML which can be edited. Opening the XML you will see something like this:<br />
<br />
<div class="csharpcode">
<pre class="alt"><span class="lnum"> 1: </span><span class="kwrd"><?</span><span class="html">xml</span> <span class="attr">version</span><span class="kwrd">="1.0"</span>?<span class="kwrd">></span></pre>
<pre><span class="lnum"> 2: </span><span class="kwrd"><</span><span class="html">ArrayOfWorkflowConstant</span><span class="kwrd">></span></pre>
<pre class="alt"><span class="lnum"> 3: </span> <span class="kwrd"><</span><span class="html">WorkflowConstant</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 4: </span> <span class="kwrd"><</span><span class="html">SiteId</span><span class="kwrd">></span>662cb00b-6401-4a66-af25-8e33982bacbd<span class="kwrd"></</span><span class="html">SiteId</span><span class="kwrd">></span></pre>
<pre class="alt"><span class="lnum"> 5: </span> <span class="kwrd"><</span><span class="html">WebId</span><span class="kwrd">></span>a37b2ecd-d760-41ef-a3dc-a20c633e2480<span class="kwrd"></</span><span class="html">WebId</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 6: </span> <span class="kwrd"><</span><span class="html">Id</span><span class="kwrd">></span>3<span class="kwrd"></</span><span class="html">Id</span><span class="kwrd">></span></pre>
<pre class="alt"><span class="lnum"> 7: </span> <span class="kwrd"><</span><span class="html">Title</span><span class="kwrd">></span>CRM web service<span class="kwrd"></</span><span class="html">Title</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 8: </span> <span class="kwrd"><</span><span class="html">Description</span><span class="kwrd">/></span></pre>
<pre class="alt"><span class="lnum"> 9: </span> <span class="kwrd"><</span><span class="html">Value</span><span class="kwrd">></span>http://crmdev/MSCRMServices/2007/CrmService.asmx<span class="kwrd"></</span><span class="html">Value</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 10: </span> <span class="kwrd"><</span><span class="html">Sensitive</span><span class="kwrd">></span>false<span class="kwrd"></</span><span class="html">Sensitive</span><span class="kwrd">></span></pre>
<pre class="alt"><span class="lnum"> 11: </span> <span class="kwrd"><</span><span class="html">Type</span><span class="kwrd">></span>String<span class="kwrd"></</span><span class="html">Type</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 12: </span> <span class="kwrd"><</span><span class="html">AdminOnly</span><span class="kwrd">></span>false<span class="kwrd"></</span><span class="html">AdminOnly</span><span class="kwrd">></span></pre>
<pre class="alt"><span class="lnum"> 13: </span> <span class="kwrd"></</span><span class="html">WorkflowConstant</span><span class="kwrd">></span></pre>
<pre><span class="lnum"> 14: </span><span class="kwrd"></</span><span class="html">ArrayOfWorkflowConstant</span><span class="kwrd">></span></pre>
</div>
<br />
You can change the URL of the web service in line 9 to http://crmtest/MSCRMServices/2007/CrmService.asmx in order to have the correct setting for the test environment. When you save the changed file save it as <i>wfconst_test.xml</i>. Usually I have a file with workflow constants for every environment:<br />
<br />
<ul>
<li> <i>wfconst_dev.xml</i>
</li>
<li><i><span style="font-style: normal;"> </span><i>wfconst_test.xml</i>
</i></li>
<li><i><i><span style="font-style: normal;"> </span><i>wfconst_prod.xml</i>
</i></i></li>
</ul>
<br />
With the following command you can import the file with the workflow constants into your target environment:<br />
<br />
<div class="csharpcode">
<pre class="alt"><span class="lnum"> 1: </span>nwadmin -o ImportWorkflowConstants -siteUrl [url to your site]
-inputFile wfconst_test.xml -handleExisting Overwrite -includeSite</pre>
<pre class="alt"></pre>
<pre class="alt"></pre>
</div>
<br />
This should take care of most aspects you have to consider for configuration management.<br />
<br />
<br />Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-7048507850424939677.post-20718478429654937542012-02-14T11:13:00.002+01:002012-02-14T11:13:23.173+01:00How to Handle Environment Variables with Nintex WorkflowA topic you sure will run across is how to handle environment variables when you deploy workflows designed with Nintex Workflow. The values are by definition just valid for one specific environment, and have to be changed in order to deploy the workflow into another environment. Example for environment variables are URLs of web services or service accounts, which are different between development, test and production system.<br />
<br />
Basically, there are three ways how you can handle this information:<br />
<br />
<ol>
<li>store the information within the workflow activity</li>
<li>create a workflow variable</li>
<li>create a workflow constant</li>
</ol>
<div>
Most people start with <i>alternative 1</i>. The environment specific information is directly configured on the workflow activities. This has one advantage: You are pretty fast when you configure the activities the first time. But in the long run the disadvantages outweigh. After deploying the workflow from environment to the next stage, you have to update all affected activities. Beside the fact that this is time-killing, it is also error-prone. Furthermore, such a workflow requires some effort if you put it under source control. For every functional change you implement, you have to update all workflow variants (e.g. for development, test, production).<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilazH535UYhEwo6REVVK757tWhAEFHjdI8qpXdxL0Gc4NkzHHllUGEgFI0m9fGJNRy6og7TCPTxViUbT_1W9Car5vvC4jIvLxKHLoXCxfFCdneNshGFVNByvs8-LtbaOjUcR6MRJGL-8ME/s1600/alternative_1.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="157" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEilazH535UYhEwo6REVVK757tWhAEFHjdI8qpXdxL0Gc4NkzHHllUGEgFI0m9fGJNRy6og7TCPTxViUbT_1W9Car5vvC4jIvLxKHLoXCxfFCdneNshGFVNByvs8-LtbaOjUcR6MRJGL-8ME/s400/alternative_1.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Alternative 1: Configuration values are set in the workflow activity. </td></tr>
</tbody></table>
<br /></div>
<div>
<br /></div>
<div>
With <i>alternative 2</i> you will set the workflow variables carrying the environment specific information to the beginning of the workflow. So you do not have to scan the complete workflow for activities that require an update. Consequently, the risk of a faulty configuration is also mitigated. But you still have the issue, that you have a workflow variant for each environment which has to be maintained in the source code management system. And this method cannot be applied to credentials for service accounts.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0fIpXzjKay3Z7xawEYEUy6975AN_RZyMnOiEgrfR0HJ6awhwS4A6qQlt5Dcp-xiJyl_11sDbvbQh-tIcOw8riOm8nS73KIgNZlvoGATkpgGagh-X58Kg_AWCtI1OsEoSd-GGeW59PbULT/s1600/alternative_2.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="318" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0fIpXzjKay3Z7xawEYEUy6975AN_RZyMnOiEgrfR0HJ6awhwS4A6qQlt5Dcp-xiJyl_11sDbvbQh-tIcOw8riOm8nS73KIgNZlvoGATkpgGagh-X58Kg_AWCtI1OsEoSd-GGeW59PbULT/s400/alternative_2.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Alternative 2: Configuration value is set in the beginning of the workflow.</td></tr>
</tbody></table>
<br /></div>
<div>
<br /></div>
<div>
The issue that you have to maintain a variant for every environment is resolved with <i>alternative 3</i>. In this solution you create a workflow constant for every environment information your workflow requires. Therefore the workflow does not have to be altered when you deploy it into another environment.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPNZpBFzx11DBIoSt_JbTZ9hzvmY55eRtVGaUe9eJeedPhZpzC38jeUpe9AMDfB8lsNA94EGqw3RxVxGVjstYhqlH3Behw4-uh3e9RQgygCowALu0qnXlAQp-sqc_dKS2aPJXHWzxgGDaO/s1600/alternative_3.PNG" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="218" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPNZpBFzx11DBIoSt_JbTZ9hzvmY55eRtVGaUe9eJeedPhZpzC38jeUpe9AMDfB8lsNA94EGqw3RxVxGVjstYhqlH3Behw4-uh3e9RQgygCowALu0qnXlAQp-sqc_dKS2aPJXHWzxgGDaO/s400/alternative_3.PNG" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Alternative 3: Configuration values are set with workflow constants.</td></tr>
</tbody></table>
<br /></div>
<div>
<br /></div>
<div>
<i>How workflow constants can be created using a script will be featured in my next post.</i></div>Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-7048507850424939677.post-83283712433354215012012-01-27T10:19:00.000+01:002012-04-13T16:10:12.229+02:00How long does "Delay for..." really wait?<span style="font-family: inherit;">First looking at the action "Pause for..." I was thinking think that I could configure the delay period precisely to the minute.</span><br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<span style="font-family: inherit;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE3Xgbe1jwaY5kHRrhcgQ7toeWvUyKkW-1-EA6n4S8ftrFOeS08IDb40FmAzPG4HDSPdbHAZQDDap_hoW7M13G6gs4E9xZma_Zo5R18C5EVApYVVevJTA-YOBvuHaBTj1SJnf_ubn4iiUf/s1600/delayfor.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="231" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE3Xgbe1jwaY5kHRrhcgQ7toeWvUyKkW-1-EA6n4S8ftrFOeS08IDb40FmAzPG4HDSPdbHAZQDDap_hoW7M13G6gs4E9xZma_Zo5R18C5EVApYVVevJTA-YOBvuHaBTj1SJnf_ubn4iiUf/s400/delayfor.png" width="400" /></a></span></div>
<span style="font-family: inherit;"><br /><br />However, when I used this activity I discovered that the activity did not behave as I as expected. This was especially true when I entered an interval shorter than five minutes. I always waited longer than configured.<br /><br />Looking deeper, I found out that the cause for this is the SPTimerJob <i>job-workflow</i> which controls the triggers for "</span>Pause for...<span style="font-family: inherit;">". This timer job runs with the standard configuration every five minutes. If you set "</span>Pause for...<span style="font-family: inherit;">" to a shorter interval, the trigger send by the timer job will be sent every five minutes anyway. The same applies when you set the action to pause the workflow for any period of time that lies between the configured schedule for <i>job-workflow</i>.<br /><br />Of course, an option to solve this issue is to reconfigure the timer job to run in shorter intervals. But ask yourself if this is really necessary. In my experience this is mostly annoying during demos or the design phase. If your workflow design relies on a shorter interval you should consider a redesign. The workflow engine has not been designed for timing actions to the minute.<br /><br />Nintex advises, that the full impact of shortening the interval below the standard configuration of minutes cannot be estimated. Therefore the following change should only be done for demo and development systems.<br /> </span><br />
<ul>
<li><span style="font-family: inherit;">SharePoint 2007</span><br /><span style="font-family: 'Courier New', Courier, monospace;">stsadm -o setproperty -propertyname "job-workflow" -propertyvalue "every 1 minutes between 0 and 59" -url http://<webapplication></span></li>
<li><span style="font-family: inherit;">SharePoint 2010</span><br /><span style="font-family: 'Courier New', Courier, monospace;">Set-SPTimerJob -Identity 'job-workflow' -Schedule 'every 1 minutes between 0 and 59' </span></li>
</ul>
<span style="font-family: inherit;">If you have more issues with the responsiveness of the timer job, Comeron McConnel has collected some tips what you can do in his post <a href="http://goo.gl/WcmSZ" target="_blank">Increasing the responsiveness of the workflow timer job</a> on Nintex Connect.</span><br />
<br />
<span style="font-family: inherit;">This behavior also applies to all actions where you can enter a specific time or a time interval. Examples:</span><br />
<br />
<ul>
<li><span style="font-family: inherit;">Flexi Task (escalation)</span></li>
<li><span style="font-family: inherit;">Pause for / Delay For</span></li>
<li><span style="font-family: inherit;">Pause until / Delay until</span></li>
<li><span style="font-family: inherit;">Change State</span></li>
<li><span style="font-family: inherit;">Loop</span></li>
<li>...</li>
</ul>Unknownnoreply@blogger.com4Unknown location.80.972662559069619 -124.101562568.443004559069621 -164.53125 90 -83.671875tag:blogger.com,1999:blog-7048507850424939677.post-7511561642366149112012-01-25T21:27:00.001+01:002012-01-27T00:41:26.929+01:00Run Now in Nintex Workflow 2010<span style="font-family: inherit;">With version 2.3 Nintex introduced <i>Run Now</i> into Nintex Workflow 2010. Nintex promises that with <i>Run Now</i> the integration with other system will be easier, because workflow designers can test actions with <i>Run Now</i> support already during the design stage. It is not necessary to start and step through the workflow until you reach the actions.<br /><br /></span><div>
<span style="font-family: inherit;"><b>Can it keep up to the promise?</b><br /></span></div>
<div>
<span style="font-family: inherit;"><i>Run Now</i> can be accesed on all supported actions during the workflow design stage. Start with a new blank workflow and then drag an integration action into the design area. I will be using Query LDAP for the rest of this post. The other actions work alike.</span><div style="margin-bottom: 1em;">
<div style="background-color: white; color: #4c4c4c; font-family: Verdana, Arial, sans-serif; font-size: 11px; line-height: 18px;">
<br /></div>
<div class="separator" style="background-color: white; clear: both; color: #4c4c4c; font-family: Verdana, Arial, sans-serif; font-size: 11px; line-height: 18px; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRyTkI8xrw7S0ntNlB66iD8uTgqXLiARNylaGOvQqf1380K9iCUhOgc8ZWgnEO9bgXAIaVtuqrfCKFBtgOIwK9iCULxjQVjHdUkDV56xMdmrHnWYSUrPk10XrIMYRLZLL38kn4JWHDkX_S/s1600/012312_2136_RunNowinNin1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRyTkI8xrw7S0ntNlB66iD8uTgqXLiARNylaGOvQqf1380K9iCUhOgc8ZWgnEO9bgXAIaVtuqrfCKFBtgOIwK9iCULxjQVjHdUkDV56xMdmrHnWYSUrPk10XrIMYRLZLL38kn4JWHDkX_S/s1600/012312_2136_RunNowinNin1.png" /></a></div>
<div class="separator" style="background-color: white; clear: both; color: #4c4c4c; font-family: Verdana, Arial, sans-serif; font-size: 11px; line-height: 18px; text-align: left;">
</div>
<br /><span style="font-family: inherit;">After you have configured the action select "Run Now" in the ribbon. A new window is displayed where you can test the configuration. If you are using workflow variables for the configuration you can replace them with actual values. And remember: <br /><br /><i>As soon as you press execute the target system will behave as if you execute the action from the workflow. Meaning you are able to create, read, update and delete data in the connected system.</i></span></div>
<div style="margin-bottom: 1em;">
<i><br /></i><div class="separator" style="background-color: white; clear: both; color: #4c4c4c; font-family: Verdana, Arial, sans-serif; font-size: 11px; line-height: 18px; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxfnDTdJrtkIaibDnLfmEOfHxuhw3p1C8JPxiDsPXdam02F1uOfkM2ajlVUxE4BfHKprmAXxznL7MX6Jz5CcLJY9AnGe4YpmJW6oT5l3R6HK4l634k6hoSqyEdCYwBYmmkj4xeHYx8brO6/s1600/012312_2136_RunNowinNin2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxfnDTdJrtkIaibDnLfmEOfHxuhw3p1C8JPxiDsPXdam02F1uOfkM2ajlVUxE4BfHKprmAXxznL7MX6Jz5CcLJY9AnGe4YpmJW6oT5l3R6HK4l634k6hoSqyEdCYwBYmmkj4xeHYx8brO6/s1600/012312_2136_RunNowinNin2.png" /></a></div>
<span style="font-family: inherit;">Once you click "Execute" in the ribbon area the action is executed and the configuration is tested. The result is afterwards displayed in the lower part of the window.</span><div class="separator" style="background-color: white; clear: both; color: #4c4c4c; font-family: Verdana, Arial, sans-serif; font-size: 11px; line-height: 18px; text-align: left;">
<span style="text-align: -webkit-auto;"><br /></span></div>
<div class="separator" style="background-color: white; clear: both; color: #4c4c4c; font-family: Verdana, Arial, sans-serif; font-size: 11px; line-height: 18px; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivoME8HY933gsn_wz1iQ1TDrBVVJQsrCwGV33qbj6YM_0vJX7cYwwHruSn34kymqQKSco8UsOdv-GBkacgq4dXBuAOgIEMsQ0GxfiPhyphenhyphenJari1HuIbgA3GaKmbELtlbXP8LxCLC65Dbb476/s1600/012312_2136_RunNowinNin3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivoME8HY933gsn_wz1iQ1TDrBVVJQsrCwGV33qbj6YM_0vJX7cYwwHruSn34kymqQKSco8UsOdv-GBkacgq4dXBuAOgIEMsQ0GxfiPhyphenhyphenJari1HuIbgA3GaKmbELtlbXP8LxCLC65Dbb476/s1600/012312_2136_RunNowinNin3.png" /></a></div>
<div class="separator" style="background-color: white; clear: both; color: #4c4c4c; font-family: Verdana, Arial, sans-serif; font-size: 11px; line-height: 18px; text-align: left;">
<span style="text-align: -webkit-auto;"><br /></span></div>
<span style="font-family: inherit;"><b>Conclusion</b><br /><i>Run Now</i> definitely makes configuring workflow actions lot easier. Any change to the configuration can be directly tested. There is no need to step through the workflow every time you make a change to the configuration in order to check that everything still works just fine. Further on, it is possible to test how the action behaves for different configurations if you use workflow variables.<br /><br />An additional benefit is that you can easily retrieve the result from actions which support this feature. This can be then used to configure subsequent actions correctly. <br /><br />Overall I say that <i>Run Now</i> helps during the design and testing of your Nintex Workflows. And it will not only shorten the time required to bring workflows which integrate with other system, but it will also help to make the workflows more robust. Promise is kept.<br /><br /><b>List of actions supporting Run Now: </b><br /><ul>
<li><span style="font-family: inherit;">Build String </span></li>
<li><span style="font-family: inherit;">Call Web Service </span></li>
<li><span style="font-family: inherit;">Execute SQL </span></li>
<li><span style="font-family: inherit;">Query BCS </span></li>
<li><span style="font-family: inherit;">Query LDAP </span></li>
<li><span style="font-family: inherit;">Query List </span></li>
<li><span style="font-family: inherit;">Query XML </span></li>
<li><span style="font-family: inherit;">Regular Expression </span></li>
<li><span style="font-family: inherit;">Web Request</span></li>
</ul>
</span><ul style="background-color: white; color: #4c4c4c; line-height: 18px; text-align: -webkit-auto;">
</ul>
<div style="background-color: white; color: #4c4c4c; font-family: Verdana, Arial, sans-serif; font-size: 11px; line-height: 18px;">
<br /></div>
</div>
</div>Unknownnoreply@blogger.com4