<?xml version="1.0" encoding="UTF-8"?>
<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/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule">

<channel>
	<title>Craig's Musings &#187; Services</title>
	<atom:link href="http://craigrandall.net/archives/categories/technology/services/feed/" rel="self" type="application/rss+xml" />
	<link>http://craigrandall.net</link>
	<description>Thoughts about software architecture, books and life</description>
	<lastBuildDate>Wed, 08 Feb 2012 22:52:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
<creativeCommons:license>http://creativecommons.org/licenses/by-sa/3.0/</creativeCommons:license>		<item>
		<title>Day community now a part of Adobe Enterprise Café</title>
		<link>http://craigrandall.net/archives/2010/12/day-in-cafe/</link>
		<comments>http://craigrandall.net/archives/2010/12/day-in-cafe/#comments</comments>
		<pubDate>Fri, 10 Dec 2010 16:20:01 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Content management]]></category>
		<category><![CDATA[Development Toolbox]]></category>
		<category><![CDATA[Open source]]></category>
		<category><![CDATA[Services]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[ADEP]]></category>
		<category><![CDATA[Cafe]]></category>
		<category><![CDATA[CEM]]></category>
		<category><![CDATA[Content]]></category>
		<category><![CDATA[Day]]></category>
		<category><![CDATA[Enterprise Cafe]]></category>
		<category><![CDATA[LiveCycle]]></category>
		<category><![CDATA[Omniture]]></category>

		<guid isPermaLink="false">http://craigrandall.net/?p=1433</guid>
		<description><![CDATA[TweetA little over a month ago, I encouraged my readers&#8211;many new from the Day Software (now Adobe) community via the Ignite conference in Berlin&#8211;to download and leverage Adobe Enterprise Café. &#8230;the Café is hard at work to integrate the Day community as well. However, you don&#8217;t need to wait for that new version of Café; [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton1433" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FhdBZtJ&amp;via=craigsmusings&amp;text=Day%20community%20now%20a%20part%20of%20Adobe%20Enterprise%20Caf%C3%A9&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2010%2F12%2Fday-in-cafe%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://craigrandall.net/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><p>A little over a month ago, I encouraged my readers&#8211;many new from the Day Software (now Adobe) community via the Ignite conference in Berlin&#8211;to <a title="When content meets apps, Berlin edition" href="http://craigrandall.net/archives/2010/11/when-content-meets-apps-berlin-edition/">download and leverage Adobe Enterprise Café</a>.</p>
<blockquote><p>&#8230;the Café is hard at work to integrate the Day community as well. However, you don&#8217;t need to wait for that new version of Café; you can install Café today and when the Day community is integrated, you&#8217;ll receive that update the next time you launch the Adobe AIR application.</p></blockquote>
<p>Hopefully you&#8217;re already receiving value from Café. If you held out for the Day community integration with Café, that day has arrived.</p>
<p>Presenting <strong>Adobe Enterprise Café 1.6</strong>!</p>
<p align="center"><iframe width="224" height="200" frameborder=0 scrolling="no" src="http://cafe.host.adobe.com/download/"></iframe></p>
<p>Update 7/29/2011: Now that the Adobe® Digital Enterprise Platform (ADEP) has been announced, I recommend that you upgrade to <strong>Adobe Enterprise Café 1.8</strong>, which features a new ADEP community that is the combination of the previous LiveCycle and Day Communities.</p>
<p align="center"><img src="http://craigrandall.net/adep/adep-in-cafe.png" alt="Adobe® Digital Enterprise Platform community within Adobe Enterprise Café (since v1.8)" /></p>
<p>For technical insights on ADEP, please follow the <a href="http://craigrandall.net/archives/categories/adobe/adep/" title="Craig's blog posts categorized under Adobe® Digital Enterprise Platform (ADEP)">ADEP category</a> and/or <a href="http://craigrandall.net/archives/tag/adep/" title="Craig's blog posts tagged for Adobe® Digital Enterprise Platform (ADEP)">ADEP tag</a> herein. Thanks.</p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2010/12/day-in-cafe/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>When content meets apps, Berlin edition</title>
		<link>http://craigrandall.net/archives/2010/11/when-content-meets-apps-berlin-edition/</link>
		<comments>http://craigrandall.net/archives/2010/11/when-content-meets-apps-berlin-edition/#comments</comments>
		<pubDate>Wed, 03 Nov 2010 20:22:52 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Content management]]></category>
		<category><![CDATA[Development Toolbox]]></category>
		<category><![CDATA[Services]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Applications]]></category>
		<category><![CDATA[Berlin]]></category>
		<category><![CDATA[CEM]]></category>
		<category><![CDATA[Content]]></category>
		<category><![CDATA[CRX]]></category>
		<category><![CDATA[Day]]></category>
		<category><![CDATA[dayignite]]></category>
		<category><![CDATA[Enterprise Cafe]]></category>
		<category><![CDATA[Ignite]]></category>
		<category><![CDATA[LiveCycle]]></category>
		<category><![CDATA[RIA]]></category>

		<guid isPermaLink="false">http://craigrandall.net/?p=1402</guid>
		<description><![CDATA[TweetThanks to everyone at Day Ignite Berlin 2010 who came to the technical track session that I presented this afternoon. In order to keep the conversation going, I&#8217;ve uploaded this presentation as follows: When Content Meets Applications View more presentations from Craig Randall. During this presentation I recommended that you consume my &#8220;Realizing great customer [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton1402" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FdjSnwP&amp;via=craigsmusings&amp;text=When%20content%20meets%20apps%2C%20Berlin%20edition&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2010%2F11%2Fwhen-content-meets-apps-berlin-edition%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://craigrandall.net/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><p>Thanks to everyone at Day Ignite Berlin 2010 who came to the technical track session that I presented this afternoon. In order to keep the conversation going, I&#8217;ve uploaded this presentation as follows:</p>
<div style="width:425px" id="__ss_5658958"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/craigrandall/when-content-meets-applications-5658958" title="When Content Meets Applications">When Content Meets Applications</a></strong><object id="__sse5658958" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=when-content-meets-applicationsber-101103145350-phpapp02&#038;stripped_title=when-content-meets-applications-5658958&#038;userName=craigrandall" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse5658958" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=when-content-meets-applicationsber-101103145350-phpapp02&#038;stripped_title=when-content-meets-applications-5658958&#038;userName=craigrandall" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/craigrandall">Craig Randall</a>.</div>
</div>
<p>During this presentation I recommended that you consume my &#8220;Realizing great customer experiences with LiveCycle ES3&#8243; presentation from Adobe MAX 2010, if you&#8217;re interested in more details about the architecture and capabilities of LiveCycle ES3. You will find that presentation <a href="http://craigrandall.net/archives/2010/10/realizing-great-customer-experiences-with-livecycle-es3/">here</a>.</p>
<p>I also asked you to consider downloading and installing <a href="http://www.adobe.com/devnet/enterprise/cafe.html" target="_blank">Adobe Enterprise Café</a>. Café, as we like to call it in Adobe, helps you stay in touch with the enterprise community, receive news, find information and aggregate content related to Adobe LiveCycle ES (Enterprise Suite), Acrobat, Connect, ColdFusion, the Adobe Flash Platform, and (since its v1.5 release) the Omniture community. Targeted at the general developer ecosystem, Café is the one tool you need to search across the entire community knowledge base and stay in touch with the Adobe teams. Furthermore, the Café is hard at work to integrate the Day community as well. However, you don&#8217;t need to wait for that new version of Café; you can install Café today and when the Day community is integrated, you&#8217;ll receive that update the next time you launch the Adobe AIR application.</p>
<p align="center"><iframe width="224" height="200" frameborder=0 scrolling="no" src="http://cafe.host.adobe.com/download/"></iframe></p>
<p>When I presented this session with Alex Choy in Chicago, <a title="@irina_guseva" href="http://twitter.com/irina_guseva/" target="_blank">Irina Guseva</a> of CMS Wire published her thoughts on the session: &#8220;<a href="http://www.cmswire.com/cms/web-engagement/apps-as-content-or-how-day-and-adobe-may-fit-together-008905.php" target="_blank">Apps as Content, or How Day and Adobe May Fit Together</a>.&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2010/11/when-content-meets-apps-berlin-edition/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Adobe, Day and open development</title>
		<link>http://craigrandall.net/archives/2010/10/adobe-day-and-open-development/</link>
		<comments>http://craigrandall.net/archives/2010/10/adobe-day-and-open-development/#comments</comments>
		<pubDate>Fri, 29 Oct 2010 20:37:13 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Content management]]></category>
		<category><![CDATA[Open source]]></category>
		<category><![CDATA[Services]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[adobemax]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[CEM]]></category>
		<category><![CDATA[CQ5]]></category>
		<category><![CDATA[CRX]]></category>
		<category><![CDATA[Day]]></category>
		<category><![CDATA[LiveCycle]]></category>
		<category><![CDATA[MAX]]></category>
		<category><![CDATA[open development]]></category>
		<category><![CDATA[WCM]]></category>

		<guid isPermaLink="false">http://craigrandall.net/?p=1395</guid>
		<description><![CDATA[TweetThanks to everyone at Adobe MAX 2010 who came to the session that David Nuescheler, Roy Fielding and I presented. If you weren&#8217;t able to attend our session, it&#8217;s provided below. Roy kicked off the discussion by talking about open development and how open development is critical to architecture. David followed Roy by showing how [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton1395" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FaYN4zU&amp;via=craigsmusings&amp;text=Adobe%2C%20Day%20and%20open%20development&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2010%2F10%2Fadobe-day-and-open-development%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://craigrandall.net/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><p>Thanks to everyone at Adobe MAX 2010 who came to the session that <a title="@davidnuescheler" href="http://twitter.com/davidnuescheler" target="_blank">David Nuescheler</a>, <a title="@fielding" href="http://twitter.com/fielding" target="_blank">Roy Fielding</a> and I presented. If you weren&#8217;t able to attend our session, it&#8217;s provided below.</p>
<p>Roy kicked off the discussion by talking about open development and how open development is critical to architecture. David followed Roy by showing how open development principles have been powerfully applied at Day to its products like CQ5, providing live demonstrations to our audience. I wrapped up this discussion by relating WCM and Day content infrastructure (e.g. Sling and CRX) to Adobe&#8217;s CEM platform and specifically to LiveCycle RIA. (For more detail on LiveCycle RIA and other aspects of the LiveCycle ES3 release, which is currently under development, please see <a title="Realizing great customer experiences with LiveCycle ES3" href="http://craigrandall.net/archives/2010/10/realizing-great-customer-experiences-with-livecycle-es3/">my previous post</a>.)</p>
<p>In order to keep the conversation going, I’ve uploaded this presentation as follows:</p>
<div style="width:425px" id="__ss_5611687"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/craigrandall/strengthening-adobes-enterprise-platform-with-day-software-and-open-development" title="Strengthening Adobe’s Enterprise Platform with Day Software and Open Development">Strengthening Adobe’s Enterprise Platform with Day Software and Open Development</a></strong><object id="__sse5611687" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=strengthening-adobes-enterprise-platform-with-day-software-and-open-development-101029150356-phpapp01&#038;stripped_title=strengthening-adobes-enterprise-platform-with-day-software-and-open-development&#038;userName=craigrandall" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse5611687" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=strengthening-adobes-enterprise-platform-with-day-software-and-open-development-101029150356-phpapp01&#038;stripped_title=strengthening-adobes-enterprise-platform-with-day-software-and-open-development&#038;userName=craigrandall" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/craigrandall">Craig Randall</a>, <a href="http://www.slideshare.net/uncled">David Nuescheler</a> and <a href="http://www.slideshare.net/royfielding">Roy Fielding</a>.</div>
</div>
<p>Update 11/5/2010: You can now <a title="Strengthening Adobe’s Enterprise Platform with Day Software and Open Development" href="http://2010.max.adobe.com/online/2010/MAX289_1288043052218KODZ" target="_blank">watch and listen to this MAX session online</a> (i.e. in synchronized fashion).</p>
<p>Update 12/3/2010: <a title="@jayankandathil" href="http://twitter.com/jayankandathil" target="_blank">Jayan</a> has done a nice job of rounding up LiveCycle-flavored MAX sessions, including this one, <a title="MAX 2010 Sessions With a LiveCycle Flavor" href="http://blogs.adobe.com/livecycle/2010/12/max-2010-sessions-with-a-livecycle-flavor.html" target="_blank">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2010/10/adobe-day-and-open-development/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Realizing great customer experiences with LiveCycle ES3</title>
		<link>http://craigrandall.net/archives/2010/10/realizing-great-customer-experiences-with-livecycle-es3/</link>
		<comments>http://craigrandall.net/archives/2010/10/realizing-great-customer-experiences-with-livecycle-es3/#comments</comments>
		<pubDate>Wed, 27 Oct 2010 20:47:08 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Adobe]]></category>
		<category><![CDATA[CX]]></category>
		<category><![CDATA[Services]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[UX]]></category>
		<category><![CDATA[adobemax]]></category>
		<category><![CDATA[CEM]]></category>
		<category><![CDATA[es3]]></category>
		<category><![CDATA[gravity]]></category>
		<category><![CDATA[LiveCycle]]></category>
		<category><![CDATA[MAX]]></category>
		<category><![CDATA[RIA]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[XD]]></category>
		<category><![CDATA[xoa]]></category>

		<guid isPermaLink="false">http://craigrandall.net/?p=1381</guid>
		<description><![CDATA[TweetThanks to everyone at Adobe MAX 2010 who came to the sessions that I presented. I enjoyed the interactivity during after after the presentations, especially listening to your thoughts on how Adobe CEM will enable you to realize your own customer experience vision as well as the growing expectations of your prospects, consumers, customers and [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton1381" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FbuzlaB&amp;via=craigsmusings&amp;text=Realizing%20great%20customer%20experiences%20with%20LiveCycle%20ES3&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2010%2F10%2Frealizing-great-customer-experiences-with-livecycle-es3%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://craigrandall.net/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><p>Thanks to everyone at Adobe MAX 2010 who came to the sessions that I presented. I enjoyed the interactivity during after after the presentations, especially listening to your thoughts on how Adobe CEM will enable you to realize your own customer experience vision as well as the growing expectations of your prospects, consumers, customers and clients.</p>
<p>In order to keep the conversation going, I’ve uploaded this presentation as follows:</p>
<div style="width:425px" id="__ss_5586245"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/craigrandall/realizing-great-customer-experiences-with-adobe-livecycle-es3" title="Realizing Great Customer Experiences with Adobe® LiveCycle® ES3">Realizing Great Customer Experiences with Adobe® LiveCycle® ES3</a></strong><object id="__sse5586245" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=realizing-great-customer-experiences-with-livecycle-es3-101027152845-phpapp02&#038;stripped_title=realizing-great-customer-experiences-with-adobe-livecycle-es3&#038;userName=craigrandall" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse5586245" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=realizing-great-customer-experiences-with-livecycle-es3-101027152845-phpapp02&#038;stripped_title=realizing-great-customer-experiences-with-adobe-livecycle-es3&#038;userName=craigrandall" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/craigrandall">Craig Randall</a>.</div>
</div>
<p><a href="http://craigrandall.net/files/Realizing-Great-Customer-Experiences-with-LiveCycle-ES3.mp3" class="wpaudio">Realizing Great Customer Experiences with Adobe® LiveCycle® ES3 &#8211; Craig Randall</a></p>
<p>Whether you were able to attend MAX or not, I encourage you to check out <a href="http://tv.adobe.com/channel/max/max-2010/" target="_blank">MAX 2010 on Adobe TV</a> (e.g. <a title="MAX 2010 keynotes on Adobe TV" href="http://tv.adobe.com/show/max-2010-keynotes/" target="_blank">here are the keynotes</a>). Please also visit the <a href="http://2010.max.adobe.com/sessions/catalog/" target="_blank">MAX 2010 session catalog</a> to browse all sessions and download presentations of interest.</p>
<p>Update 11/5/2010: You can now <a title="Realizing Great Customer Experiences with Adobe® LiveCycle® ES3" href="http://2010.max.adobe.com/online/2010/MAX241_1288038435750ILBH" target="_blank">watch and listen to this MAX session online</a> (i.e. in synchronized fashion). It appears that the good folks at MAX decided to post the slides and recording that corresponded to my first delivery (on Monday during MAX). While that session went well, I did receive some feedback that I incorporated into a revised deck that was also recorded (on Wednesday during MAX). Personally, I liked the latter content and delivery better than the first, and that is what is provided here in this blog post, above.</p>
<p>Update 12/3/2010: <a title="@jayankandathil" href="http://twitter.com/jayankandathil" target="_blank">Jayan</a> has done a nice job of rounding up LiveCycle-flavored MAX sessions, including this one, <a title="MAX 2010 Sessions With a LiveCycle Flavor" href="http://blogs.adobe.com/livecycle/2010/12/max-2010-sessions-with-a-livecycle-flavor.html" target="_blank">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2010/10/realizing-great-customer-experiences-with-livecycle-es3/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
<enclosure url="http://craigrandall.net/files/Realizing-Great-Customer-Experiences-with-LiveCycle-ES3.mp3" length="12123238" type="audio/mpeg" />
		</item>
		<item>
		<title>When content meets applications</title>
		<link>http://craigrandall.net/archives/2010/10/when-content-meets-apps/</link>
		<comments>http://craigrandall.net/archives/2010/10/when-content-meets-apps/#comments</comments>
		<pubDate>Thu, 14 Oct 2010 22:42:35 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Content management]]></category>
		<category><![CDATA[Development Toolbox]]></category>
		<category><![CDATA[Services]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Applications]]></category>
		<category><![CDATA[CEM]]></category>
		<category><![CDATA[Content]]></category>
		<category><![CDATA[CRX]]></category>
		<category><![CDATA[Day]]></category>
		<category><![CDATA[dayignite]]></category>
		<category><![CDATA[Ignite]]></category>
		<category><![CDATA[LiveCycle]]></category>
		<category><![CDATA[RIA]]></category>

		<guid isPermaLink="false">http://craigrandall.net/?p=1360</guid>
		<description><![CDATA[TweetThanks to everyone at Day Ignite Chicago 2010 who came to the technical track session that Alex and I presented&#8211;especially those who stood the entire time in a packed room. In order to keep the conversation going, I&#8217;ve uploaded this presentation as follows: When Content Meets Applications View more presentations from Craig Randall. We&#8217;re very [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton1360" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FpQZScB&amp;via=craigsmusings&amp;text=When%20content%20meets%20applications&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2010%2F10%2Fwhen-content-meets-apps%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://craigrandall.net/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><p>Thanks to everyone at Day Ignite Chicago 2010 who came to the technical track session that Alex and I presented&#8211;especially those who stood the entire time in a packed room.</p>
<p>In order to keep the conversation going, I&#8217;ve uploaded this presentation as follows:</p>
<div style="width:425px" id="__ss_5446976"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/craigrandall/when-content-meets-applications" title="When Content Meets Applications">When Content Meets Applications</a></strong><object id="__sse5446976" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=whencontentmeetsapps-101014172712-phpapp01&#038;stripped_title=when-content-meets-applications&#038;userName=craigrandall" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse5446976" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=whencontentmeetsapps-101014172712-phpapp01&#038;stripped_title=when-content-meets-applications&#038;userName=craigrandall" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/craigrandall">Craig Randall</a>.</div>
</div>
<p>We&#8217;re very excited at Adobe about the opportunity to work with those at Day Software as fellow colleagues. By working together with you, we believe that great things will emerge from the <em>unified delivery of content plus applications</em>.</p>
<p>P.S. If you&#8217;re not already watching the <a title="Results for #dayignite on Twitter" href="http://twitter.com/#search/%23dayignite" target="_blank">#dayignite</a> tweetstream, why not? <img src='http://craigrandall.net/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Update 10/18/2010: <a title="@irina_guseva" href="http://twitter.com/irina_guseva/" target="_blank">Irina Guseva</a> published her thoughts on this presentation on CMS Wire: &#8220;<a href="http://www.cmswire.com/cms/web-engagement/apps-as-content-or-how-day-and-adobe-may-fit-together-008905.php" target="_blank">Apps as Content, or How Day and Adobe May Fit Together</a>.&#8221;</p>
<p>Update 10/22/2010: Presentations from Day Ignite Chicago 2010 are appearing <a title="Day Ignite Chicago 2010 presentations on Slideshare" href="http://www.slideshare.net/event/day-ignite-chicago-2010/slideshows" target="_blank">here</a>. Presentations that will also be delivered during Day Ignite Berlin 2010 won&#8217;t appear on Slideshare until after both events have concluded. (That being said, you can see a thorough write-up of David Nuescheler&#8217;s presentation <a title="Sneak Peek into Day's CQ 5.4 CMS" href="http://www.cmswire.com/cms/web-engagement/sneak-peek-into-days-cq-54-cms-dayignite-008854.php" target="_blank">here</a>.) Event photos from Chicago are <a title="Day Ignite Chicago 2010 photos on Shutterfly" href="http://dayignite2010.shutterfly.com/pictures" target="_blank">here</a>.</p>
<p>Update on 10/27/2010: The message first delivered in Chicago around the <em>unified delivery of content and applications</em> was expanded upon in Los Angeles at Adobe MAX 2010, and that presentation is now available <a title="Realizing great customer experiences with LiveCycle ES3" href="http://craigrandall.net/archives/2010/10/realizing-great-customer-experiences-with-livecycle-es3/">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2010/10/when-content-meets-apps/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Understanding LiveCycle ES2&#8242;s application model</title>
		<link>http://craigrandall.net/archives/2010/05/livecycle-es2-app-model/</link>
		<comments>http://craigrandall.net/archives/2010/05/livecycle-es2-app-model/#comments</comments>
		<pubDate>Wed, 19 May 2010 23:15:42 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Adobe]]></category>
		<category><![CDATA[Content management]]></category>
		<category><![CDATA[Services]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[application]]></category>
		<category><![CDATA[appmodel]]></category>
		<category><![CDATA[asset]]></category>
		<category><![CDATA[ES2]]></category>
		<category><![CDATA[LiveCycle]]></category>
		<category><![CDATA[migration]]></category>
		<category><![CDATA[model]]></category>
		<category><![CDATA[process]]></category>
		<category><![CDATA[service]]></category>
		<category><![CDATA[Workbench]]></category>

		<guid isPermaLink="false">http://craigrandall.net/?p=1289</guid>
		<description><![CDATA[TweetNote: If you&#8217;re visiting this blog from the Adobe LiveCycle Developer Center or from the Adobe LiveCycle Blog, welcome to my musings. You&#8217;re invited to tell me what you want to know about LiveCycle via a comment. Thanks in advance! This longer-than-usual post is intended to help customers understand why the new application model exists [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton1289" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FaxiZP1&amp;via=craigsmusings&amp;text=Understanding%20LiveCycle%20ES2%26%238242%3Bs%20application%20model&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2010%2F05%2Flivecycle-es2-app-model%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://craigrandall.net/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><p>Note: If you&#8217;re visiting this blog from the <a href="http://www.adobe.com/devnet/livecycle/" target="_blank">Adobe LiveCycle Developer Center</a> or from the <a title="New In LiveCycle ES2 - 'Applications'"href="http://blogs.adobe.com/livecycle/2010/06/new_in_livecycle_es2_-_applica.html" target="_blank">Adobe LiveCycle Blog</a>, welcome to my musings. You&#8217;re invited to tell me what you want to know about LiveCycle via a comment. Thanks in advance! <img src='http://craigrandall.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>This longer-than-usual post is intended to help customers understand why the new application model exists in <a title="Adobe LiveCycle Enterprise Suite" href="http://www.adobe.com/products/livecycle/" target="_blank">LiveCycle ES2</a> and understand how to migrate LiveCycle ES assets into ES2 assets, based on business value into doing so. It is meant to complement, not reiterate, other content already published concerning the application model (e.g. the section on migration process, below, is just an example meant to whet the reader’s appetite for more detailed demonstration/conversation elsewhere).</p>
<p>So, without further ado&#8230;</p>
<p>Table of contents:</p>
<ol>
<li><a href="#intro">Introduction</a></li>
<li><a href="#principles">Application model principles</a></li>
<li><a href="#migration>Example migration to ES2 application model</a></li>
<li><a href="#conclusion">Conclusion</a></li>
<li><a href="#resources">Additional resources</a></li>
</ol>
<h3 id="intro">Introduction</h3>
<p>When Adobe LiveCycle ES2 released, major advancements and changes occurred in several areas of application development. The purpose of this white paper is to explain these advances specifically in the context of migrating existing LiveCycle assets into the new ES2 application model. However, before the migration process is described step by step, it&#8217;s important to understand the new model, why it is exists and when it should be leveraged.</p>
<p>The most notable changes to application development in LiveCycle ES2 are as follows:</p>
<ul>
<li>LiveCycle Applications</li>
<li>Versioning</li>
<li>Far and Near References</li>
</ul>
<p>All new development work in LiveCycle ES2 occurs in LiveCycle Applications.<a href="#footone">[1]</a> A new Applications view replaces the Processes and Resources views in LiveCycle Workbench ES2 as the primary view for application development. Both Processes and Resources views remain to support upgraded LiveCycle assets that have not yet been migrated to LiveCycle Applications.</p>
<p>LiveCycle Applications contain processes, forms, guides, data models, events, fragments, images, DDX files (Assembler document service), DSC&#8217;s, etc.<a href="#foottwo">[2]</a> A LiveCycle Application is a container of design-time assets. When a LiveCycle Application is deployed, services are delivered into the runtime, and at this point a particular service&#8217;s implementation becomes hidden from the consumer (e.g. there is no “File | New -> Service” that emits a service object in LiveCycle). Consumers continue to discover services via the LiveCycle Service Registry.</p>
<p>It is important to understand that from now on when you do something in Workbench the first thing you do is &#8220;File | New -> LiveCycle Application&#8221; and that the Application is the container for all your application assets.</p>
<p>A LiveCycle Application is the basis for a hardened, discrete versioning model in LiveCycle ES2. That is, application assets do not have versions of their own; they inherit the version of their parent LiveCycle Application. These version numbers are immutable, meaning that they do not change even when the application is deployed on different LiveCycle systems. In LiveCycle ES an edit/save gesture on an application assert <em>could</em> result in the creation of a new version of that asset; however, in LiveCycle ES2 such gestures will <em>not</em>&#8211;version is defined solely by the hosting application.</p>
<p>A LiveCycle Application is the context for how asset references are maintained. An asset referring to another asset in the same LiveCycle Application uses a relative <em>near reference</em>. When an asset refers to an asset in a different LiveCycle Application then it is a <em>far reference</em>. Far references are required to state LiveCycle Application name and version (e.g. repository:///Applications/NewCustomers/1.0/Loan/Forms/request.xdp).</p>
<p align="center"><img src="http://craigrandall.net/images/es2-appmodel-fig.1.png" alt="Applications, assets and references" /><br />Figure 1. Applications, Assets and References</p>
<p>In the above figure, there are two applications (i.e. App1 and App2) and a total of three application assets (i.e. A, B and C). The line between A and B represents a near reference (i.e. wholly contained by App1). The line between A and C represents a far reference (i.e. a reference that spans from one application to another application&#8211;specific version).</p>
<p>In the above figure, App1 and App2 can be versioned (i.e. 1.0, 1.1, 2.0, etc.); however, A, B and C cannot be versioned apart from their containing LiveCycle Application.</p>
<h3 id="principles">Application Model Principles</h3>
<p>So, why did LiveCycle ES2 usher in a new application model, and why should you want to upgrade to leveraging it?</p>
<p>In LiveCycle ES, there were services/processes, events, forms and Document Service Components (DSCs). Each object had distinct user interface with different semantics for how the object could be edited, locked, activated, secured, versioned and exported. Conceptual information that the user acquired while using one subsystem was not transferable to the other subsystems. One of the design goals of the LiveCycle ES2 application model was to normalize these behaviors and provide a consistent user model across the managed objects.</p>
<p>The LiveCycle ES2 application model provides hooks at strategic points in an asset’s runtime. The ability to transactionally deploy a collection of assets and the ability to intercept the runtime lookup of a named asset both represent key indirection points that can be leveraged in future versions of LiveCycle.</p>
<p>The LiveCycle ES2 application model enforces a consistent persistence model for the design-time assets. This, in turn, provides the foundation for supporting disconnected mode (offline or occasional connectivity), SCM integration and intuitive experience in Workbench (e.g. login/logout, open/save).</p>
<p>Your confidence during migration is of utmost importance. The LiveCycle ES2 application model addresses migration confidence by enabling existing investments to continue running in a &#8220;bug compatible&#8221; manner. Maintenance of existing systems can involve evolving an existing system on an as-needed basis.</p>
<p>The application model in ES2 supports two types of changes: semantic and non-semantic. Given that an application is a composition of assets, change can refer to the set of assets in the application and/or to the assets themselves—both their content and their associated metadata.</p>
<p>A non-semantic change represents an update that does not provide any new functionality over prior versions but rather represents an incremental refinement. Bug fixes and patches are good examples for a non-semantic change. A non-semantic change never requires consumers to be aware of the change. Non-semantic changes can be imposed by the producer on all of its consumers without requiring the participation of the consumer. </p>
<p>A semantic change represents an update that will introduce new capability above what is available in pre-existing versions. It is possible that a semantic change will necessitate that the consumers adjust the way that they interact with the objects. A semantic change must be explicitly requested by consumers, it is never implicitly forced upon them by the producer.</p>
<h3 id="migration">Example migration to ES2 application model</h3>
<p>So, now that you have a better understanding of a LiveCycle Application and the new application model in LiveCycle ES2, let&#8217;s walk through the process of migrating a LiveCycle ES (8.x) process to a LiveCycle ES2 (9.x) process:</p>
<ol>
<li>Deploy the LiveCycle ES LCA as LiveCycle Archives (8.x) (Compatibility mode).
<ul>
<li>The LiveCycle ES processes will run as-is on LiveCycle ES2 as LiveCycle is backward-compatible. If your goal is to simply move the running content to an ES2-based server (without taking advantage of any new capabilities) you are done.</li>
<li>If you want to leverage native ES2 functionality, you will need to follow the rest of these migration steps in order to convert the LiveCycle ES process to LiveCycle ES2 process. Converting the process will result in a service name change since the LiveCycle Application name (namespace), version, etc. become part of the service name in LiveCycle ES2.</li>
<li>Best practice: If you are adding new resources to the application the recommendation would be to do a full migration and import all assets into the new application, resetting the deployment identifiers. Mixing and matching legacy ES resources and the new ES2 application model is not recommended.</li>
</ul>
</li>
<li>In Workbench, create a new application (e.g. MyApplication).
<ul>
<li>Application name forms a namespace for assets therein.</li>
<li>You can optionally create folders within the application to specialize this namespace further.</li>
<li>For example, your development team may have particular standards for organization (e.g. based on asset type, based along functional lines, etc.).</li>
<li>In this particular migration, we&#8217;ll create a &#8220;processes&#8221; folder to receive the imported ES process assets.</li>
</ul>
</li>
<li>In Workbench, right-click on MyApplication/1.0/processes and select Import. In the dialog shown, select Process and click Next. In the next screen, select the LiveCycle ES process from its LiveCycle ES category. Click Finish.</li>
<li>The LiveCycle ES process will be added to the LiveCycle Application (i.e. MyApplication). Please note that this is a copy of the original process.
<ul>
<li>The service name of original process is the process name itself; however, the service name of the new process is ApplicationName/processes/ProcessName.</li>
<li>Assets in ES lived apart from a namespace (i.e. unqualified services at runtime). ES assets in ES2 operate in a global service namespace (implied) at runtime. Native ES2 assets operate in application-scoped namespaces.</li>
</ul>
</li>
<li>If the original LiveCycle ES process has dependencies on other LiveCycle ES sub-processes, the new LiveCycle ES2 process will also have the same dependencies (i.e. LiveCycle ES2 process depending on LiveCycle ES processes). Therefore, in order to create a self-sufficient LiveCycle ES2 LCA containing processes with the same functionality, we need to identify and reset these dependencies. That means finding each dependency, visiting it and pointing it to something new.
<ul>
<li>In order to point a dependency at something new, the desired dependency target must exist in the application.</li>
<li>Best practice: create self-contained applications.</li>
</ul>
</li>
<li>To remove dependencies from other LiveCycle ES processes, we’ll have to repeat steps #3 to #4 and import all those processes under the same LiveCycle Application (e.g. ApplicationName/processes/SubprocessName).</li>
<li>After importing all processes under the LiveCycle Application, we’ll have to edit all the processes individually in order to replace all the sub-process activity with the new processes.
<ul>
<li>Consider the following example: Process A uses process B (LiveCycle ES).
<ul>
<li>Both ES processes are imported into the LiveCycle Application, which results in processes A’ and B’ (LiveCycle ES2).</li>
<li>However, process A’ (LiveCycle ES2) still uses process B (LiveCycle ES).</li>
<li>We edit A’ and replace activity B with B’, using the same input/output parameters.</li>
</ul>
</li>
<li>This step requires manual editing of all processes using sub-processes, which is time-consuming and can be error-prone without sufficient attention to detail.</li>
</ul>
</li>
</ol>
<p>This example is simply focused on process asset migration, but, as previously noted, there are several other application asset types that may be migrated.</p>
<h3 id="conclusion">Conclusion</h3>
<p>Hopefully this paper has been helpful to your understanding of why there is a new application model in LiveCycle ES2 and how to take advantage of this capability with your LiveCycle ES investments in mind.</p>
<p>The LiveCycle team continues to work on enhancing migration support for its customers (e.g. increased automation), and it appreciates your feedback.</p>
<h3 id="resources">Additional Resources</h3>
<p>For a more detailed dive into the process of migrating LiveCycle ES applications and assets to LiveCycle ES2, please consider the following content:</p>
<ul>
<li><a href="http://livecycleapps.wordpress.com/2010/05/12/migrating-an-application-from-adobe%c2%ae-livecycle%c2%ae-es-to-es2/" target="_blank">Migrating an Application from Adobe LiveCycle ES to ES2</a> (guided demonstration by my LiveCycle colleague <a title="LiveCycle Espresso" href="http://livecycleapps.wordpress.com/ target="_blank">Seth Reilly</a>)</li>
<li><a href="http://help.adobe.com/en_US/livecycle/9.0/leverage_legacy_solutions.pdf" target="_blank">Leveraging Legacy Solutions in LiveCycle ES2</a> (document)</li>
</ul>
<h4>Footnotes</h4>
<ol>
<li>
<div id="footone"><em>LiveCycle Application</em> should not be confused with LCA, which stands for <em>LiveCycle Archive</em>. LiveCycle Archives continue to provide the ability to export an application along with its assets (i.e. variables, images, documents, etc. since ES, service endpoint configuration and security since ES Update 1, etc.). Asides: (a) legacy LCA&#8217;s are still supported in ES2 (i.e. it&#8217;s possible to create/import them), and (b) there are two kinds of native ES2 LCA&#8217;s: patch (a specifically selected set of assets) and full (one or more applications where all content from the application is involved&#8211;no need to explicitly enumerate assets).</div>
</li>
<li>
<div id="foottwo">These contained objects are called <em>assets</em> (i.e. application assets).</div>
</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2010/05/livecycle-es2-app-model/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>EMC Documentum Developer Edition</title>
		<link>http://craigrandall.net/archives/2009/05/emc-documentum-developer-edition/</link>
		<comments>http://craigrandall.net/archives/2009/05/emc-documentum-developer-edition/#comments</comments>
		<pubDate>Thu, 14 May 2009 17:03:43 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Content management]]></category>
		<category><![CDATA[Development Toolbox]]></category>
		<category><![CDATA[DFS]]></category>
		<category><![CDATA[Services]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[community]]></category>
		<category><![CDATA[Content Server]]></category>
		<category><![CDATA[content-enabled applications]]></category>
		<category><![CDATA[content-enabled apps]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[Documentum]]></category>
		<category><![CDATA[Documentum Developer Edition]]></category>
		<category><![CDATA[EMC]]></category>

		<guid isPermaLink="false">http://craigrandall.net/?p=1071</guid>
		<description><![CDATA[TweetToday we launched a new EMC Documentum developer-oriented community within the EMC Community Network. Front and center is the new developer edition of the EMC Documentum ECM Platform. So, what does this developer edition include? We believe it includes a lot of goodness for the development of content-enabled applications. First of all, free software for [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton1071" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FpiZrAz&amp;via=craigsmusings&amp;text=EMC%20Documentum%20Developer%20Edition&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2009%2F05%2Femc-documentum-developer-edition%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://craigrandall.net/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><p>Today we launched a new <a title="EMC Documentum Developer Community" href="https://community.emc.com/community/edn/documentum" target="_blank">EMC Documentum developer-oriented community</a> within the <a href="https://community.emc.com/index.jspa" target="_blank">EMC Community Network</a>. Front and center is the new developer edition of the EMC Documentum ECM Platform.</p>
<p>So, what does this developer edition include? We believe it includes a lot of goodness for the development of <a title="Building content-enabled applications" href="http://craigrandall.net/archives/2009/04/building-content-enabled-apps/">content-enabled applications</a>.</p>
<ul>
<li>First of all, <em>free</em> software for developers</li>
<li>A new one-click installation process for the core of the EMC Documentum ECM Platform</li>
<li>xDB and new XML components &#8211; please visit the just-launched <a href="https://community.emc.com/community/edn/xmltech" target="_blank">XML Technology Developer Community</a> for more details about our native XML database and other technologies</li>
<li>Integration between the resulting development environment and <a href="https://community.emc.com/community/edn/documentum" target="_blank">online community</a> resources and support mechanisms &#8211; think of this as a starting point and means to the ends <em>you want to pursue</em>, not an end in itself</li>
</ul>
<p>Essentially, we&#8217;re trying to provide a low-touch, <a title="Do it yourself" href="http://en.wikipedia.org/wiki/Do_it_yourself" target="_blank">DIY</a> experience. That being said, by integrating your local installation to an online community, the developer edition enables you to reach out to fellow developers and EMC employees as your pursuit your content management development interests grows. For example, you&#8217;ll find a range of white papers, documents and videos, as well as sample code in, for example, Java and C# (.NET). Topical tutorials available online are drawn from our Education Services library.</p>
<p>So, what is the process to obtain the free developer edition? We hope that it&#8217;s straightforward.</p>
<ol>
<li>Browse <a title="EMC Documentum Developer Community" href="https://community.emc.com/community/edn/documentum" target="_blank">here</a> and login into ECN/EDN</li>
<li>Navigate <a title="Documentum Content Server Developer Edition (registration)" href="https://developer-content.emc.com/downloads/documentum_dev_edition.htm" target="_blank">here</a> and complete a short (less than 30 seconds) registration form. Click the &#8220;Continue&#8221; button to proceed to the download site. (You may need to add ecn_communications@emc.com to your email safe senders list so as not to miss messages from that address (i.e. have them interpreted by Outlook as junk).)</li>
<li>Navigate the EMC SubscribeNet links to arrive at the FTP download (or HTTPS-based download, if you prefer). Note that the download is a bit more than 1.73 GB and represents a Zip archive, which means that you should ensure adequate disk space to extract, deploy, etc.</li>
<li>Commence your download.</li>
</ol>
<p>In a follow-up post, I&#8217;ll walk you through the installation experience and how to leverage the version of DFS that comes with the developer edition. BTW, if you&#8217;re too anxious to dive in and can&#8217;t wait for my post, go for it! There is an online getting started guide as well as an online tutorial for building your first application.</p>
<p>Cheers! <img src='http://craigrandall.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Update 5/20/2009: Well, I&#8217;m about to take a much needed vacation, and I have yet to follow-up with a walk-thru post. So, I wanted to at least provide some details here as to what this software requires system-wise. System requirements are as follows (and are displayed in the initial installer screen):</p>
<ul>
<li>No Microsoft SQL Server or SQL Server Express installed [1]</li>
<li>No other Documentum software installed [2]</li>
<li>Microsoft .NET 2.0 or higher [3]</li>
<li>Browser with Sun JRE 5.0 update 16 or higher [4]</li>
<li>Minimum of 3 GB RAM (4 GB RAM is recommended)</li>
<li>5 GB of free disk space [5]</li>
<li>Intel x86 CPU</li>
<li>Operating system&#8211;again 32-bit only for this release&#8211;is one of the following: Windows XP SP3, Windows Server 2003 SP2 or Windows Server 2003 R2 SP2</li>
<li>You must be logged in as a member of the Windows Administrators group, but not necessarily as Administrator</li>
</ul>
<p>Notes:<br />
[1] Be aware that if you already have Visual Studio (e.g. 2005 or 2008) installed on your target machine, you may need to first uninstall the version of SQL Server that may have been installed with the IDE. If you are running Windows SharePoint Services or UDDI on your target (Windows Server 2003) machine, you may also need to see what embedded database is supporting these services before proceeding with this developer edition installation.<br />
[2] Be sure to understand where you may still have Documentum-related configuration files on disk (e.g. dfc.properties, C:\Documentum, etc.).<br />
[3] Microsoft .NET Framework 3.0 is required for <a title="My posts tagged with both 'DFS' and 'WCF'" href="http://craigrandall.net/archives/tag/dfs+wcf/">WCF-based consumption of DFS endpoints</a>; so, I recommend .NET 3.0, which includes (requires as its foundation) .NET 2.0. .NET 3.5 is also supported by DFS, if you prefer to leverage WCF &#8220;v2.&#8221;<br />
[4] This is supported by Webtop and DA.<br />
[5] Keep in mind that, as I noted above, the Zip archive download is a bit more than 1.73 GB. The total size of its extracted contents is not that much larger, but you&#8217;re also starting to approach 4 GB; so, I recommend that you have 10 GB free disk space in order to complete the installation with room to spare before cleaning up the extracted bits and the original archive to reclaim that 4 GB.</p>
<p>&#8230;and, welcome, <a href="http://www.cmswire.com/cms/enterprise-cms/emc-releases-free-documentum-developer-edition-enterprise-cms-004660.php" target="_blank">CMS Watch</a> readers! <img src='http://craigrandall.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Update 7/16/2009: Be sure to run Windows Update after installing DevEd. Typically, you&#8217;ll need to apply SQL Server 2005 SP3. Note that if you upgrade a DevEd environment from 6.5 SP1 to 6.5 SP2 (via uninstall-reboot-install) that you should still run Windows Update after your upgrade, and you may need to re-apply SQL Server 2005 SP3.</p>
<p>When upgrading a DevEd environment from 6.5 SP1 to 6.5 SP2, I also recommend that following the uninstall and reboot, that you confirm C:\Documentum and C:\Program Files\Documentum are empty before you proceed to install the newer DevEd.</p>
<p>Finally, if you&#8217;re reading this blog but not the installation guide, please note that you should uninstall DevEd via Start | Programs | Documentum | Uninstall, not via Add/Remove Programs under Control Panel.</p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2009/05/emc-documentum-developer-edition/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Content-enabled applications empathized</title>
		<link>http://craigrandall.net/archives/2009/05/content-enabled-apps-empathized/</link>
		<comments>http://craigrandall.net/archives/2009/05/content-enabled-apps-empathized/#comments</comments>
		<pubDate>Fri, 01 May 2009 17:37:46 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[CMIS]]></category>
		<category><![CDATA[Content management]]></category>
		<category><![CDATA[DFS]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[case management]]></category>
		<category><![CDATA[content-enabled applications]]></category>
		<category><![CDATA[content-enabled apps]]></category>
		<category><![CDATA[ECM]]></category>
		<category><![CDATA[xCelerated Composition Platform]]></category>
		<category><![CDATA[xCP]]></category>

		<guid isPermaLink="false">http://craigrandall.net/?p=1040</guid>
		<description><![CDATA[TweetLaurence Hart was kind enough to pick-up my previous post on content-enabled applications and add his thoughts to the subject, especially concerning the role CMIS can play. From my first post: Content-enabled applications should facilitate the convergence of content, collaboration, interaction, and process. I agree with Laurence (aka JaneDoePie) that content is an enabler, not [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton1040" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FqTbOWw&amp;via=craigsmusings&amp;text=Content-enabled%20applications%20empathized&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2009%2F05%2Fcontent-enabled-apps-empathized%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://craigrandall.net/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><p><a title="Word of Pie" href="http://wordofpie.com/" target="_blank">Laurence Hart</a> was kind enough to pick-up my previous post on <a title="Building content-enabled applications" href="http://craigrandall.net/archives/2009/04/building-content-enabled-apps/">content-enabled applications</a> and add <a title="Content-Enabled Applications in the Age of CMIS" href="http://wordofpie.com/2009/04/28/content-enabled-applications-in-the-age-of-cmis/" target="_blank">his thoughts</a> to the subject, especially concerning the role <a title="Content Management Interoperability Services" href="http://craigrandall.net/archives/2008/09/cmis/">CMIS</a> can play.</p>
<p>From my first post: <strong>Content-enabled applications should facilitate the convergence of content, collaboration, interaction, and process.</strong></p>
<p>I agree with Laurence (aka <strike>JaneDoe</strike>Pie) that content is <em>an enabler</em>, not the center. All content-enabled applications &#8220;should be shaped to work with and enhance the process the users use to perform their work.&#8221;</p>
<p>Laurence offers case management as his favorite, generic content-enabled application in order to further ground the point that success is determined by the combination of content, user experience (interaction, more than just UI, IMHO) and process (e.g. collaborative workflow).</p>
<p>I&#8217;m in the middle of reading <a title="Subject To Change: Creating Great Products &#038; Services for an Uncertain World: Adaptive Path on Design" href="http://www.amazon.com/Subject-Change-Creating-Products-Uncertain/dp/0596516835" target="_blank">Subject To Change</a>, and already I&#8217;ve found its message highly relevant to the subject of content-enabled applications. For example, the book focuses on <em>experience strategy</em> and how to develop organizational <em>empathy</em> where the target users of your products or services are concerned. Specifically, in the case of case management, the book would argue that you, as case management application architect/designer, need to actually observe case workers in their native setting to appreciate how case management really works (or doesn&#8217;t). Go beyond theory and someone else&#8217;s analysis. Experience business activity firsthand in order to model reality into your solution.</p>
<p>Recently as part of the <strike>Case Management Solution Framework</strike>&nbsp;<a title="EMC Documentum xCelerated Composition Platform" href="http://www.emc.com/solutions/business-need/collaboration/documentum-xcelerated-composition-platform.htm" target="_blank">xCelerated Composition Platform</a> (xCP) released for D6.5 SP1, a sample application for grants management was shipped that illustrates how <a title="EMC Documentum Process Suite" href="http://www.emc.com/products/detail/software/process-suite.htm" target="_blank">Process Suite</a> components can be used to build case-based, content-enabled applications. You can <a title="Documentum Case Management Solution Framework Grants Management Sample Application, Version 6.5 SP1" href="https://emc.subscribenet.com/control/dctm/download?element=2192753" target="_blank">download this package from Powerlink</a> (authentication required). The easiest way to run this sample application is to install it using the express installer, which will install all the right components (with their compatible versions) and the <a title="A bit more detail on Documentum ARchives from Paul Warren" href="http://paulcwarren.wordpress.com/2009/01/09/documentum-composer-whats-in-an-install/" target="_blank">DAR file</a>. <strike>You can also download the express installer from Powerlink (authentication required).</strike>Please see the update below for the correct link.</p>
<p>A goal of a solution framework is to make it easier to build content-enabled applications such as those for case management. A solution framework should allow you to invest more time in becoming empathic in order to ship solutions that resonate well with your users and drive more efficient business as a result.</p>
<p>In this response, I wanted to focus on empathy&#8217;s role. Separately, I plan to pick up the <a title="Content Management Interoperability Services" href="http://craigrandall.net/archives/2008/09/cmis/">CMIS</a> angle raised by Laurence. Thanks in advance for joining our discussion online&#8230;</p>
<p>Update 5/1/2009: A PM colleague pointed out to me that the link to the &#8220;one click&#8221; installer that takes one from state &#8220;zero&#8221; (i.e. Windows but not database) to state &#8220;ready for proof of concept&#8221; is as follows: <a title="Documentum Case Management Solution Framework Installer, Version 6.5 SP1" href="https://emc.subscribenet.com/control/dctm/download?element=2193203" target="_blank">https://emc.subscribenet.com/control/dctm/download?element=2193203</a> (authentication required). Cheers!</p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2009/05/content-enabled-apps-empathized/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Addressing MaxReceivedMessageSize issues</title>
		<link>http://craigrandall.net/archives/2009/04/maxreceivedmessagesize/</link>
		<comments>http://craigrandall.net/archives/2009/04/maxreceivedmessagesize/#comments</comments>
		<pubDate>Mon, 20 Apr 2009 19:02:00 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[DFS]]></category>
		<category><![CDATA[Services]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[app.config]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Charles]]></category>
		<category><![CDATA[CommunicationException]]></category>
		<category><![CDATA[Fiddler]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[WCF]]></category>
		<category><![CDATA[web debugging proxy]]></category>
		<category><![CDATA[WSDL]]></category>

		<guid isPermaLink="false">http://craigrandall.net/archives/2009/04/maxreceivedmessagesize/</guid>
		<description><![CDATA[TweetIf you’re a .NET-based consumer of Enterprise Content Services (e.g. those offered via Documentum Foundation Services) and you experience a Windows Communication Foundation CommunicationException having to do with MaxReceivedMessageSize, you may be interested in the details of this post. This post applies both to direct-to-WSDL consumers and also to consumers that leverage the DFS productivity [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton995" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2Fq9piAC&amp;via=craigsmusings&amp;text=Addressing%20MaxReceivedMessageSize%20issues&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2009%2F04%2Fmaxreceivedmessagesize%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://craigrandall.net/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><p>If you’re a .NET-based consumer of Enterprise Content Services (e.g. those offered via <a href="http://craigrandall.net/archives/2007/05/documentum-foundation-services/">Documentum Foundation Services</a>) and you experience a Windows Communication Foundation CommunicationException having to do with MaxReceivedMessageSize, you may be interested in the details of this post. This post applies both to <a title="DFS Object service consumer #2 (2-part post)" href="http://craigrandall.net/archives/2008/07/dfs-object-service-consumer-2b/">direct-to-WSDL consumers</a> and also to <a title="DFS Object service consumer #1" href="http://craigrandall.net/archives/2008/07/dfs-object-service-consumer-1/">consumers that leverage the DFS productivity layer for .NET</a>. Guidance herein has more to do with WCF in general; however, it will be offered in a ECS/DFS context.</p>
<p>Depending on the size of incoming messages from services to your application, you may discover the need to increase the maximum received message size. For example, your application experiences the following exception raised by WCF:</p>
<blockquote><p>System.ServiceModel.CommunicationException : The maximum message size quota for incoming messages (65536) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.</p>
</blockquote>
<p>An example of exceeding quota could be application requests that result in data package-based responses with a large number of data objects and/or a set of data objects with significant metadata and/or content (e.g. ObjectService.get).</p>
<p>If you implement a direct-to-WSDL consumer of this service using Visual Studio and WCF’s Add Service Reference designer, you will by default introduce a per service binding application configuration file into the overall solution. Therefore, to declaratively increase the maximum received message size, you will edit app.config by focusing on increasing the value of the MaxReceivedMessageSize attribute on the appropriate (named) binding element from the default value in configuration as follows:</p>
<pre class="csharpcode"><span class="kwrd">&lt;?</span><span class="html">xml</span> <span class="attr">version</span><span class="kwrd">=&quot;1.0&quot;</span> <span class="attr">encoding</span><span class="kwrd">=&quot;utf-8&quot;</span> ?<span class="kwrd">&gt;</span>
<span class="kwrd">&lt;</span><span class="html">configuration</span><span class="kwrd">&gt;</span>
  <span class="kwrd">&lt;</span><span class="html">system.serviceModel</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">bindings</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">basicHttpBinding</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html"><strong>binding</strong></span> <span class="attr">name</span><span class="kwrd">=&quot;ObjectServicePortBinding&quot;</span> <span class="attr">closeTimeout</span><span class="kwrd">=&quot;00:01:00&quot;</span> <span class="attr">openTimeout</span><span class="kwrd">=&quot;00:01:00&quot;</span> <span class="attr">receiveTimeout</span><span class="kwrd">=&quot;00:10:00&quot;</span> <span class="attr">sendTimeout</span><span class="kwrd">=&quot;00:01:00&quot;</span> <span class="attr">allowCookies</span><span class="kwrd">=&quot;false&quot;</span> <span class="attr">bypassProxyOnLocal</span><span class="kwrd">=&quot;false&quot;</span> <span class="attr">hostNameComparisonMode</span><span class="kwrd">=&quot;StrongWildcard&quot;</span> <span class="attr">maxBufferSize</span><span class="kwrd">=&quot;65536&quot;</span> <span class="attr">maxBufferPoolSize</span><span class="kwrd">=&quot;524288&quot;</span> <span class="attr"><strong>maxReceivedMessageSize</strong></span><span class="kwrd">=&quot;65536&quot;</span> <span class="attr">messageEncoding</span><span class="kwrd">=&quot;Text&quot;</span> <span class="attr">textEncoding</span><span class="kwrd">=&quot;utf-8&quot;</span> <span class="attr">transferMode</span><span class="kwrd">=&quot;Buffered&quot;</span> <span class="attr">useDefaultWebProxy</span><span class="kwrd">=&quot;true&quot;</span><span class="kwrd">&gt;</span>
          <span class="kwrd">&lt;</span><span class="html">readerQuotas</span> <span class="attr">maxDepth</span><span class="kwrd">=&quot;32&quot;</span> <span class="attr">maxStringContentLength</span><span class="kwrd">=&quot;8192&quot;</span> <span class="attr">maxArrayLength</span><span class="kwrd">=&quot;16384&quot;</span> <span class="attr">maxBytesPerRead</span><span class="kwrd">=&quot;4096&quot;</span> <span class="attr">maxNameTableCharCount</span><span class="kwrd">=&quot;16384&quot;</span> <span class="kwrd">/&gt;</span>
          <span class="kwrd">&lt;</span><span class="html">security</span> <span class="attr">mode</span><span class="kwrd">=&quot;None&quot;</span><span class="kwrd">&gt;</span>
            <span class="kwrd">&lt;</span><span class="html">transport</span> <span class="attr">clientCredentialType</span><span class="kwrd">=&quot;None&quot;</span> <span class="attr">proxyCredentialType</span><span class="kwrd">=&quot;None&quot;</span> <span class="attr">realm</span><span class="kwrd">=&quot;&quot;</span> <span class="kwrd">/&gt;</span>
            <span class="kwrd">&lt;</span><span class="html">message</span> <span class="attr">clientCredentialType</span><span class="kwrd">=&quot;UserName&quot;</span> <span class="attr">algorithmSuite</span><span class="kwrd">=&quot;Default&quot;</span> <span class="kwrd">/&gt;</span>
          <span class="kwrd">&lt;/</span><span class="html">security</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;/</span><span class="html">binding</span><span class="kwrd">&gt;</span>
        . . .
      <span class="kwrd">&lt;/</span><span class="html">basicHttpBinding</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">bindings</span><span class="kwrd">&gt;</span>
    . . .
  <span class="kwrd">&lt;/</span><span class="html">system.serviceModel</span><span class="kwrd">&gt;</span>
  . . .
<span class="kwrd">&lt;/</span><span class="html">configuration</span><span class="kwrd">&gt;</span></pre>
<style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>As in the case of a direct-to-WSDL consumer, a productivity layer-based consumer of the DFS Object service may also need to declaratively increase the value of MaxReceivedMessageSize more compatible with actual runtime requirements.</p>
<p>In the etc\config directory path of your local DFS SDK you should find an example App.config file. Please note that this app.config file is oriented toward productivity layer consumers, not direct-to-WSDL consumers via WCF. That being said, the same binding attributes apply to a solution here, too. The difference is how the bindings are declared in app.config. </p>
<p>The productivity layer oriented declaration names a single binding, DfsDefaultService, to act as the binding for all DFS services, except for DFS runtime services, which have separate, named bindings declared. So, Object service gets its (WCF- based) binding configuration from the “DfsDefaultService” binding…and so does, for example, Query service.</p>
<p>To declaratively increase the maximum received message size in productivity layer oriented app.config, you will most likely edit the MaxReceivedMessageSize attribute on the “DfsDefaultService” binding element from the default value in configuration as follows:</p>
<pre class="csharpcode"><span class="kwrd">&lt;?</span><span class="html">xml</span> <span class="attr">version</span><span class="kwrd">=&quot;1.0&quot;</span> <span class="attr">encoding</span><span class="kwrd">=&quot;utf-8&quot;</span>?<span class="kwrd">&gt;</span>
<span class="kwrd">&lt;</span><span class="html">configuration</span><span class="kwrd">&gt;</span>
  . . .
  <span class="kwrd">&lt;</span><span class="html">system.serviceModel</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">bindings</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">basicHttpBinding</span><span class="kwrd">&gt;</span>
        . . .
        <span class="kwrd">&lt;</span><span class="html"><strong>binding</strong></span> <span class="attr">name</span><span class="kwrd">=&quot;DfsDefaultService&quot;</span> <span class="attr">closeTimeout</span><span class="kwrd">=&quot;00:01:00&quot;</span> <span class="attr">openTimeout</span><span class="kwrd">=&quot;00:01:00&quot;</span> <span class="attr">receiveTimeout</span><span class="kwrd">=&quot;00:10:00&quot;</span> <span class="attr">sendTimeout</span><span class="kwrd">=&quot;00:01:00&quot;</span> <span class="attr">allowCookies</span><span class="kwrd">=&quot;false&quot;</span> <span class="attr">bypassProxyOnLocal</span><span class="kwrd">=&quot;false&quot;</span> <span class="attr">hostNameComparisonMode</span><span class="kwrd">=&quot;StrongWildcard&quot;</span> <span class="attr">maxBufferSize</span><span class="kwrd">=&quot;1000000&quot;</span> <span class="attr">maxBufferPoolSize</span><span class="kwrd">=&quot;10000000&quot;</span> <span class="attr"><strong>maxReceivedMessageSize</strong></span><span class="kwrd">=&quot;1000000&quot;</span> <span class="attr">messageEncoding</span><span class="kwrd">=&quot;Text&quot;</span> <span class="attr">textEncoding</span><span class="kwrd">=&quot;utf-8&quot;</span> <span class="attr">transferMode</span><span class="kwrd">=&quot;Buffered&quot;</span> <span class="attr">useDefaultWebProxy</span><span class="kwrd">=&quot;true&quot;</span><span class="kwrd">&gt;</span>
          <span class="kwrd">&lt;</span><span class="html">readerQuotas</span> <span class="attr">maxDepth</span><span class="kwrd">=&quot;32&quot;</span> <span class="attr">maxStringContentLength</span><span class="kwrd">=&quot;8192&quot;</span> <span class="attr">maxArrayLength</span><span class="kwrd">=&quot;16384&quot;</span> <span class="attr">maxBytesPerRead</span><span class="kwrd">=&quot;4096&quot;</span> <span class="attr">maxNameTableCharCount</span><span class="kwrd">=&quot;16384&quot;</span> <span class="kwrd">/&gt;</span>
          <span class="kwrd">&lt;</span><span class="html">security</span> <span class="attr">mode</span><span class="kwrd">=&quot;None&quot;</span><span class="kwrd">&gt;</span>
            <span class="kwrd">&lt;</span><span class="html">transport</span> <span class="attr">clientCredentialType</span><span class="kwrd">=&quot;None&quot;</span> <span class="attr">proxyCredentialType</span><span class="kwrd">=&quot;None&quot;</span> <span class="attr">realm</span><span class="kwrd">=&quot;&quot;</span> <span class="kwrd">/&gt;</span>
            <span class="kwrd">&lt;</span><span class="html">message</span> <span class="attr">clientCredentialType</span><span class="kwrd">=&quot;UserName&quot;</span> <span class="attr">algorithmSuite</span><span class="kwrd">=&quot;Default&quot;</span> <span class="kwrd">/&gt;</span>
          <span class="kwrd">&lt;/</span><span class="html">security</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;/</span><span class="html">binding</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;/</span><span class="html">basicHttpBinding</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">bindings</span><span class="kwrd">&gt;</span>
  <span class="kwrd">&lt;/</span><span class="html">system.serviceModel</span><span class="kwrd">&gt;</span>
<span class="kwrd">&lt;/</span><span class="html">configuration</span><span class="kwrd">&gt;</span></pre>
<style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>You may notice that the DFS SDK-based app.config binding element attribute values differ from direct-from-WCF defaults (i.e. maxBufferSize&#8211;1000000 versus 65536, maxBufferPoolSize&#8211;1000000 versus 524288, and maxReceivedMessageSize&#8211;1000000 versus 65536). This is simply a change to <em>lessen</em> the likelihood of encountering WCF CommunicationExceptions having to do with MaxReceivedMessageSize values.</p>
<p>One technique you can employ to determine what a reasonable MaxReceivedMessageSize value should be for your application is to set the value of your binding attribute/property to the absolute maximum in order to profile actual runtime message size using a web debugging proxy like <a title="Charles - my preferred web debugging proxy" href="http://www.charlesproxy.com/" target="_blank">Charles</a> or <a title="Fiddler - a free web debugging proxy" href="http://www.fiddlertool.com/" target="_blank">Fiddler</a>. That is, temporarily set MaxReceivedMessageSize to 2147483648 (i.e. Int32.MaxValue), pass your SOAP messages through, for example, Charles via port forwarding, review response message content length values, and reset your default runtime MaxReceivedMessageSize value accordingly.</p>
<p>If you prefer to take a declarative approach to WCF binding configuration for your application but you’re concerned about a user setting the value too low, you can always interrogate values at runtime in order to ensure that they’re sufficient. </p>
<p>For example, a productivity layer-based client could do as follows:</p>
<pre class="csharpcode">System.Reflection.FieldInfo appConfigInfo = <span class="kwrd">typeof</span>(ContextFactory).GetField(<span class="str">&quot;appConfig&quot;</span>, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
System.Reflection.FieldInfo agentServiceBindingInfo = <span class="kwrd">typeof</span>(AppConfig).GetField(<span class="str">&quot;m_agentServiceBinding&quot;</span>, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
System.Reflection.FieldInfo contextRegistryServiceBindingInfo = <span class="kwrd">typeof</span>(AppConfig).GetField(<span class="str">&quot;m_contextRegistryServiceBinding&quot;</span>, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
System.Reflection.FieldInfo defaultServiceBindingInfo = <span class="kwrd">typeof</span>(AppConfig).GetField(<span class="str">&quot;m_defaultServiceBinding&quot;</span>, System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic);
BasicHttpBinding binding = <span class="kwrd">new</span> BasicHttpBinding();
binding.MaxReceivedMessageSize = 0x7fffffffL;
binding.MaxBufferSize = 0x7fffffffL;
agentServiceBindingInfo.SetValue(appConfigInfo.GetValue(contextFactory), binding);
contextRegistryServiceBindingInfo.SetValue(appConfigInfo.GetValue(contextFactory), binding);
defaultServiceBindingInfo.SetValue(appConfigInfo.GetValue(contextFactory), binding);</pre>
<style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>Of course, in a production app, I’d ensure that there is a log (auditable event) of such programmatic override activity. I might also consider presenting the user with a suggestion, requesting that the software be given the opportunity to auto-correct the value (e.g. updating the effective application configuration file). </p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2009/04/maxreceivedmessagesize/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Building content-enabled applications</title>
		<link>http://craigrandall.net/archives/2009/04/building-content-enabled-apps/</link>
		<comments>http://craigrandall.net/archives/2009/04/building-content-enabled-apps/#comments</comments>
		<pubDate>Sat, 11 Apr 2009 21:28:12 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[CMIS]]></category>
		<category><![CDATA[Content management]]></category>
		<category><![CDATA[DFS]]></category>
		<category><![CDATA[Services]]></category>
		<category><![CDATA[CEVA]]></category>
		<category><![CDATA[content-enabled applications]]></category>
		<category><![CDATA[content-enabled apps]]></category>
		<category><![CDATA[ECM]]></category>
		<category><![CDATA[EMC World]]></category>

		<guid isPermaLink="false">http://craigrandall.net/?p=969</guid>
		<description><![CDATA[TweetBoth Pie and Marko have blogged about content-enabled applications, or what Gartner calls CEVAs (content-enabled vertical applications). As it so happens, I&#8217;ll be presenting there will be a session on this subject next month at EMC World 2009. Based on my research of what folks label a content-enabled application, two things rise to the top: [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton969" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FoLjfcz&amp;via=craigsmusings&amp;text=Building%20content-enabled%20applications&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2009%2F04%2Fbuilding-content-enabled-apps%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://craigrandall.net/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><p>Both <a title="Vendor Support for CMIS" href="http://wordofpie.com/2008/09/11/vendor-support-for-cmis/" target="_blank">Pie</a> and <a title="Where Have All the CEVA’s Gone?" href="http://bigmenoncontent.com/2009/04/01/where-have-all-the-cevas-gone/" target="_blank">Marko</a> have blogged about content-enabled applications, or what <a title="Use CEVAs to Generate Value From Your Content" href="http://www.gartner.com/DisplayDocument?doc_cd=137675" target="_blank">Gartner calls</a> CEVAs (content-enabled <em>vertical</em> applications).</p>
<p>As it so happens, <strike>I&#8217;ll be presenting</strike> there will be <a title="Building content-enabled applications with DFS: Developer Track @ EMC World 2009" href="https://community.emc.com/thread/2809" target="_blank">a session on this subject</a> next month at <a href="http://www.emcworld.com/">EMC World 2009</a>.</p>
<p>Based on my research of what folks label a <em>content-enabled application</em>, two things rise to the top: <strong>process</strong> (surrounding content) and <strong>subject matter expertise</strong> (individual or group surrounding process), and <strong>context</strong>. OK, three things.</p>
<p>For example, <a title="The Forrester Wave™: Content-Centric Applications, Q1 2006" href="http://www.forrester.com/Research/Document/Excerpt/0,7211,37684,00.html" target="_blank">Forrester defines</a> content-<em>centric</em> applications as &#8220;solutions that put the business&#8217; content to use, and add context along the way&#8211;to support line-of-business needs.&#8221; Example solutions include customer self-service, claims processing, proposal management, contract management, and <a title="EMC Documentum Case Management Solution Framework " href="http://www.emc.com/solutions/business-need/collaboration/case-management-solution-framework.htm" target="_blank">case management</a>.</p>
<p>Other CEVA vendors argue that content-enabled applications are <em>process-oriented</em>, not content-centric. I tend to prefer this viewpoint. A claim is valueless in itself. Only once is claim <em>is processed</em> is value realized, including taking a future liability off the books.</p>
<p>Content-enabled applications should facilitate the convergence of content, collaboration, interaction, and process.</p>
<p>Before you leverage your content in an application to generate value, ask yourself few questions:</p>
<ul>
<li>Who uses the content? Why? How?</li>
<li>What processes does the content support?</li>
<li>If I&#8217;m not a subject matter expert for this type of content, who can I involve to design a better application experience?</li>
<li>What processes does it support?</li>
<li>What context is involved, either centrally or peripherally?</li>
</ul>
<p>Start with something familiar to just about anyone these days: email (or IM, micro-blogging, etc.). Answer the questions. See how applications, for example, around email have evolved. Think about where current email applications may have untapped potential. Etc.</p>
<p>So, where <em>have</em> all the CEVAs gone (as Marko asks)?</p>
<ul>
<li>I think that we in the content management business do ourselves a disservice by overly complicating concepts (e.g. behind <a title="Three-letter acronym" href="http://en.wikipedia.org/wiki/Three-letter_acronym" target="_blank">TLA</a>s or FLAs). Although fine as a conceptual catalyst, CEVA is self-defeating, IMHO, as a rallying label.</li>
<li>I agree that <a title="Content Management Interoperability Services" href="http://craigrandall.net/archives/2008/09/cmis/">CMIS</a> has great potential to increase the availability of content-enabled applications, if for no other reason, because application development that consumes the proposed standard should have a greater return on investment by being applicable to multiple content repositories. (ECM vendor partners are you listening?)</li>
<li>In the end, it&#8217;s the application, not the content or the process or the people. That is, if you&#8217;re just adding a document and perhaps a workflow to some code, you may have an app&#8230;but it won&#8217;t be used. Focus on user experience (i.e. the meaningful, intuitive presentation of content, context and process together).</li>
</ul>
<p>Back to EMC World&#8230;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img src="http://craigrandall.net/images/emc-world-2009.jpg" alt="Orlando, FL - May17-21" /></p>
<p>I&#8217;ll miss interacting with <a title="The Road to EMC World 2009" href="http://storagezilla.typepad.com/storagezilla/2009/03/the-road-to-emc-world-2009.html" target="_blank">&#8216;Zilla</a> at the conference. It was at <a title="i.e. the first public presentation of DFS" href="http://craigrandall.net/archives/2007/05/documentum-foundation-services/">EMC World in 2007</a> (also held in Orlando, FL) that I <a title="Opening in Orlando" href="http://craigrandall.net/archives/2007/05/opening-in-orlando/">first met Mark in person</a>.</p>
<p>If you are able to make the conference and consider yourself to be a &#8220;2.0 type,&#8221; you may be interested in <a title="EMC World 2009" href="http://lensblog.typepad.com/ebiz/2009/03/emc-world-2009.html" target="_blank">Len&#8217;s advert</a>. Looks like there is even a <a title="EMC World 2009" href="http://events.linkedin.com/EMC-World-2009/pub/37519" target="_blank">LinkedIn event</a> established for the conference.</p>
<p>I plan to <a title="@craigsmusings" href="http://twitter.com/craigsmusings" target="_blank">tweet</a> the conference and otherwise engage with the community. In the meantime, if you plan to attend my session (<em>as presented by others</em>), please feel free to comment (here or <a title="Building content-enabled applications with DFS: Developer Track @ EMC World 2009" href="https://community.emc.com/thread/2809" target="_blank">ECN</a>) on your thoughts about content-enabled applications and what you&#8217;d like discussed or demoed. Thanks in advance.</p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2009/04/building-content-enabled-apps/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Updated DFS Developer Guide on EDN</title>
		<link>http://craigrandall.net/archives/2009/02/updated-dfs-dev-guide-on-edn/</link>
		<comments>http://craigrandall.net/archives/2009/02/updated-dfs-dev-guide-on-edn/#comments</comments>
		<pubDate>Fri, 06 Feb 2009 21:09:12 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Content management]]></category>
		<category><![CDATA[DFS]]></category>
		<category><![CDATA[Services]]></category>
		<category><![CDATA[dev guide]]></category>
		<category><![CDATA[EDN]]></category>

		<guid isPermaLink="false">http://craigrandall.net/?p=885</guid>
		<description><![CDATA[TweetMy colleague and technical writer, Joe Ferrie, just uploaded the second edition of the DFS 6.5 Development Guide to the EMC Developer Network (EDN) here. The information here is applicable to DFS 6.5 and DFS 6.5 SP1. (I&#8217;m still working on this, but at least this content is available via EDN.) Some highlights of this [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton885" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FobZsgw&amp;via=craigsmusings&amp;text=Updated%20DFS%20Developer%20Guide%20on%20EDN&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2009%2F02%2Fupdated-dfs-dev-guide-on-edn%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://craigrandall.net/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><p>My colleague and technical writer, Joe Ferrie, just uploaded the <strong>second edition of the DFS 6.5 Development Guide</strong> to the EMC Developer Network (EDN) <a title="EMC Documentum Foundation Services 6.5 Development Guide" href="https://community.emc.com/docs/DOC-2820" target="_blank">here</a>. The information here is applicable to DFS 6.5 and DFS 6.5 SP1.</p>
<p>(I&#8217;m still working on <a title="Wikify Documentum already" href="http://craigrandall.net/archives/2007/11/wikify-documentum-already/">this</a>, but at least this content is available via <a title="EMC Developer Network" href="https://community.emc.com/community/edn" target="_blank">EDN</a>.)</p>
<p>Some highlights of this edition are as follows:</p>
<ul>
<li>A new content transfer chapter, with practical information about uploading and downloading content using Base64 and MTOM, as well as using UrlContent to get content from Accelerated Content Services (ACS). Examples are provided for WSDL-based consumers, as well as productivity layer consumers. Unified Client Facilities (UCF) now gets its own chapter.</li>
<li>Details of Java productivity layer dependencies so that you can more easily understand what JAR files you need on your ClassPath given for your particular development scenario</li>
<li>A new chapter comparing DFC and DFS, which is expected to be useful for DFC developers who are ramping up with DFS and want to compare the general approach and specific operations</li>
<li>A revised explanation of the sometimes confusing restrictions on retrieving deep relationships in DataObjects.</li>
</ul>
<p>Thanks, Joe!</p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2009/02/updated-dfs-dev-guide-on-edn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dynamic value assistance using DFS</title>
		<link>http://craigrandall.net/archives/2009/02/dynamic-value-assistance-using-dfs/</link>
		<comments>http://craigrandall.net/archives/2009/02/dynamic-value-assistance-using-dfs/#comments</comments>
		<pubDate>Fri, 06 Feb 2009 05:09:16 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Content management]]></category>
		<category><![CDATA[DFS]]></category>
		<category><![CDATA[Services]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[schema]]></category>
		<category><![CDATA[value-assist]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[WCF]]></category>
		<category><![CDATA[WSDL]]></category>

		<guid isPermaLink="false">http://craigrandall.net/archives/2009/02/dynamic-value-assistance-using-dfs/</guid>
		<description><![CDATA[TweetContinuing my collaboration with John Sweeney (or his collaboration with me), today we’ll examine the DFS Schema service and do so in .NET as a direct-to-WSDL consumer. This tutorial builds upon a previous tutorial; so, if you’re not already familiar with it, please read this post and play with this sample. You’ll also need and [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton878" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FoXB67J&amp;via=craigsmusings&amp;text=Dynamic%20value%20assistance%20using%20DFS&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2009%2F02%2Fdynamic-value-assistance-using-dfs%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://craigrandall.net/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><p>Continuing my collaboration with John Sweeney (or his collaboration with me), today we’ll examine the <a title="Documentum Foundation Services" href="http://craigrandall.net/archives/2007/05/documentum-foundation-services/" target="_blank">DFS</a> Schema service and do so in .NET as a direct-to-WSDL consumer. This tutorial builds upon a previous tutorial; so, if you’re not already familiar with it, please read <a title="Consuming DFS WSDL in Visual Studio" href="http://craigrandall.net/archives/2009/01/consuming-dfs-wsdl-in-visual-studio/" target="_blank">this post</a> and play with <a title="Direct-to-WSDL DFS services consumer sample" href="https://community.emc.com/docs/DOC-2604" target="_blank">this sample</a>. You’ll also need and be familiar with using Documentum Administrator (DA) and Documentum Composer 6.5 SP1.</p>
<p>Thanks to John for doing the legwork in this tutorial and for allowing me to share it all with you here. (Although, I’d really like to see John blog about this directly; he has a lot to share.)</p>
<p>Not only can the DFS Schema service return value-assist values, it also supports dynamic value assistance, including the handling of dependencies (e.g. one attribute value-assist dynamically built based on the value of another attribute).</p>
<p>This tutorial demonstrates how to use the DFS Schema service to perform dynamic value-assist tasks. Knowledge of Documentum Administrator, Documentum Composer 6.5 SP1, DFS 6.5 SP1, Visual Studio 2008 and WSDL-based consumption of DFS with .NET is assumed. </p>
<p>Before we begin, we&#8217;ll need to create users, groups and an object type to use as test data.</p>
<p><strong>Step 1 – Create users and groups</strong> (to be performed with Documentum Administrator)</p>
<p>1. Create three groups named writers, reviewers and publishers in your repository.</p>
<p>2. Create six users. Name them appropriately, but for this tutorial, they will be referred to as User1–6. Put the users in the new groups, as specified in the following chart:</p>
<p align="middle">
<table cellspacing="0" cellpadding="5" width="296" border="1">
<tbody>
<tr>
<td valign="top" width="150"><font color="#0000ff">&#160; Group</font></td>
<td valign="top" width="144"><font color="#0000ff">&#160; Members</font></td>
</tr>
<tr>
<td valign="top" width="152">&#160; writers</td>
<td valign="top" width="145">&#160; User1, User2</td>
</tr>
<tr>
<td valign="top" width="152">&#160; reviewers</td>
<td valign="top" width="146">&#160; User3, User4</td>
</tr>
<tr>
<td valign="top" width="152">&#160; publishers</td>
<td valign="top" width="146">&#160; User5, User6</td>
</tr>
</tbody>
</table>
<p></p>
<p><strong>Step 2 – Create a new object type</strong> (to be performed with Documentum Composer 6.5 SP1)</p>
<p>1. Open Documentum Composer and create a new project.</p>
<p>2. Add a new type called kb_document with a supertype of dm_document.</p>
<p>3. Add a new attribute to the type named document_state (as shown in the following image).</p>
<p align="middle"><img src="http://craigrandall.net/dfs/schema-tutorial-01.jpg" /></p>
<p>4. Expand the document_state attribute and select Value mapping.</p>
<p align="middle"><img src="http://craigrandall.net/dfs/schema-tutorial-02.jpg" /></p>
<p>5. In the Conditional Assistance section, click New&#8230;</p>
<p>6. Add Draft,Review,Publish as values of Fixed List (as shown in the following image) and click OK.</p>
<p align="middle"><img src="http://craigrandall.net/dfs/schema-tutorial-03.jpg" /></p>
<p>Your Conditional Assistance section should now look like this:</p>
<p align="middle"><img src="http://craigrandall.net/dfs/schema-tutorial-04.jpg" /></p>
<p>7. Add another new attribute to the type named assigned_to as shown in the following image.</p>
<p align="middle"><img src="http://craigrandall.net/dfs/schema-tutorial-05.jpg" /></p>
<p>8. Expand the assigned_to attribute and select Value mapping.</p>
<p>9. In the Conditional Assistance section, click New&#8230;</p>
<p>10. Add the following query:</p>
<p><code>select users_names from dm_group where group_name = 'writers'</code></p>
<p>Set the other fields (as shown in the following image).</p>
<p align="middle"><img src="http://craigrandall.net/dfs/schema-tutorial-06.jpg" /></p>
<p>The value-assist list will be populated with users who are members of the writers group by default, when document_state does not have a value of Review or Publish.</p>
<p>11. In the Conditional Assistance section, click New&#8230;</p>
<p>12. Add the following query:</p>
<p><code>select users_names from dm_group where group_name = 'reviewers'</code></p>
<p>Set the other fields (as shown in the following image).</p>
<p align="middle"><img src="http://craigrandall.net/dfs/schema-tutorial-07.jpg" /></p>
<p>The value in the Expression field will cause the value-assist list to be populated with users who are members of the reviewers group, but only when document_state has a value of &quot;Review.&quot;</p>
<p>13. In the Conditional Assistance section, click New&#8230;</p>
<p>14. Add the following query:</p>
<p><code>select users_names from dm_group where group_name = 'publishers'</code></p>
<p>Set the other fields (as shown in the following image).</p>
<p align="middle"><img src="http://craigrandall.net/dfs/schema-tutorial-08.jpg" /></p>
<p>The value in the Expression field will cause the value-assist list to be populated with users who are members of the publishers group, but only when document_state has a value of &quot;Publish.&quot;</p>
<p>Your Conditional Assistance section should now look like the following:</p>
<p align="middle"><img src="http://craigrandall.net/dfs/schema-tutorial-09.jpg" /></p>
<p>15. Install the Documentum project to your repository.</p>
<p><strong>Step 3 – Retrieve the value-assist list</strong> (using C# and the .NET Framework 3.0 or higher)</p>
<p>Note: the ServiceContextHeader class used in this tutorial comes from <a title="Direct-to-WSDL DFS services consumer sample" href="https://community.emc.com/docs/DOC-2604" target="_blank">this prior sample</a>, as noted above.</p>
<p>The following code snippet will return group members in the ValueAssist Values list. A PropertySet is created for document_state. The value of document_state will alter the dynamic-assist values for the assigned_to property.</p>
<pre class="csharpcode"><span class="rem">// Get a reference to the DFS Schema service</span>
SchemaServicePortClient schemaService =
    <span class="kwrd">new</span> SchemaServicePortClient(<span class="str">&quot;SchemaServicePort&quot;</span>); 

StringProperty sp = <span class="kwrd">new</span> StringProperty();
sp.name = <span class="str">&quot;document_state&quot;</span>;
<span class="rem">// assigned_to will have different dynamic-assist values, </span>
<span class="rem">// depending upon the value set here</span>
sp.Value = <span class="str">&quot;Publish&quot;</span>; <span class="rem">// or Review or Draft</span>

<span class="rem">// Create a PropertySet for document_state, which assigned_to depends upon</span>
PropertySet ps = <span class="kwrd">new</span> PropertySet();
ps.Properties = <span class="kwrd">new</span> Property[1];
ps.Properties[0] = sp; 

<span class="kwrd">using</span> (OperationContextScope scope =
           <span class="kwrd">new</span> OperationContextScope(schemaService.InnerChannel))
{
    <span class="rem">// Add the ServiceContextHeader info to the outgoing request</span>
    OperationContext.Current.OutgoingMessageHeaders.Add(
        <span class="kwrd">new</span> ServiceContextHeader(repositoryName, userName, password)); 

    <span class="rem">// Get the values for the assigned_to property</span>
    ValueAssist valueAssist = schemaService.getDynamicAssistValues(
        repositoryName, <span class="str">&quot;DEFAULT&quot;</span>, <span class="str">&quot;kb_document&quot;</span>, <span class="str">&quot;assigned_to&quot;</span>, ps, <span class="kwrd">null</span>); 

    <span class="rem">// Display the values</span>
    <span class="kwrd">if</span> (valueAssist != <span class="kwrd">null</span> || valueAssist.Values != <span class="kwrd">null</span>)
    {
        <span class="kwrd">foreach</span> (<span class="kwrd">string</span> s <span class="kwrd">in</span> valueAssist.Values)
            MessageBox.Show(s, <span class="str">&quot;Value Assist Value&quot;</span>);
    }
}</pre>
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>The following table shows the expected results:</p>
<p align="middle">
<table cellspacing="0" cellpadding="5" width="296" border="1">
<tbody>
<tr>
<td valign="top" width="150"><font color="#0000ff">&#160; document_state value</font></td>
<td valign="top" width="144"><font color="#0000ff">&#160; assigned_to values</font></td>
</tr>
<tr>
<td valign="top" width="152">&#160; Draft</td>
<td valign="top" width="145">&#160; User1, User2</td>
</tr>
<tr>
<td valign="top" width="152">&#160; Review</td>
<td valign="top" width="146">&#160; User3, User4</td>
</tr>
<tr>
<td valign="top" width="152">&#160; Publish</td>
<td valign="top" width="146">&#160; User5, User6</td>
</tr>
</tbody>
</table>
<p></p>
<p>It is worth noting that if you execute SchemaService.getTypeInfo for kb_document, and examine the assigned_to property, you can determine that the property has dependencies. The returned TypeInfo.PropertyInfos[n].Dependencies will contain an entry for document_state. You can check this beforehand as a way of determining if setting one property (document_state) should trigger a refresh of the value list (calling getDynamicAssistValues again). This is very useful for a picklist property page where the values of one list depend on the value of another.</p>
<p>Here endeth the lesson&#8230; <img src='http://craigrandall.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Update 2/6/2009: In order for you to spend more time understanding dynamic value assistance with DFS, I&#8217;ve uploaded a Visual Studio project to EDN <a title="<br />
Dynamic value assistance using DFS<br />
" href="https://community.emc.com/docs/DOC-2830" target="_blank">here</a>. Enjoy.</p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2009/02/dynamic-value-assistance-using-dfs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Consuming CMIS WSDL in Visual Studio</title>
		<link>http://craigrandall.net/archives/2009/01/consuming-cmis-wsdl-in-visual-studio/</link>
		<comments>http://craigrandall.net/archives/2009/01/consuming-cmis-wsdl-in-visual-studio/#comments</comments>
		<pubDate>Fri, 30 Jan 2009 19:48:12 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[CMIS]]></category>
		<category><![CDATA[Content management]]></category>
		<category><![CDATA[Services]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[AtomPub]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[WCF]]></category>
		<category><![CDATA[WSDL]]></category>

		<guid isPermaLink="false">http://craigrandall.net/archives/2009/01/consuming-cmis-wsdl-in-visual-studio/</guid>
		<description><![CDATA[TweetAs indicated previously, I’ve uploaded a CMIS v0.5 sample to EDN. This sample works with EMC Documentum CMIS EA2. This CMIS sample is intentionally similar to a sample produced previously for DFS 6.5 SP1. The intent is to help you compare and contrast one set of service contracts from the other. In doing so, please [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton869" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2Fq9QrmH&amp;via=craigsmusings&amp;text=Consuming%20CMIS%20WSDL%20in%20Visual%20Studio&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2009%2F01%2Fconsuming-cmis-wsdl-in-visual-studio%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://craigrandall.net/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><p>As indicated previously, I’ve uploaded a <strong><a title="Direct-to-WSDL CMIS services consumer sample" href="https://community.emc.com/docs/DOC-2688" target="_blank">CMIS v0.5 sample</a></strong> to <a title="EMC Developer Network" href="https://community.emc.com/community/edn" target="_blank">EDN</a>. This sample works with <a title="EMC Documentum CMIS EA2" href="http://craigrandall.net/archives/2009/01/emc-documentum-cmis-ea2/" target="_blank">EMC Documentum CMIS EA2</a>.</p>
<p>This CMIS sample is intentionally similar to a <a title="Consuming DFS WSDL in Visual Studio" href="http://craigrandall.net/archives/2009/01/consuming-dfs-wsdl-in-visual-studio/" target="_blank">sample</a> produced previously for DFS 6.5 SP1. The intent is to <em>help you compare and contrast one set of service contracts from the other</em>. In doing so, please keep in mind that CMIS is focused on basic library services for content management—common features across supporting repositories—while DFS is focused on the broader richness of the EMC Documentum ECM Platform.</p>
<p>It’s worth noting that in the case of its CMIS Repository service interaction, this sample EXE was also used by IBM during this week’s <a title="OASIS CMIS TC f2f" href="http://craigrandall.net/archives/2009/01/cmis-f2f/" target="_blank">TC meeting</a> against their P8-based WSDL endpoint—requiring only a binding configuration change (i.e. zero code changes).</p>
<p>I mentioned that the CMIS AtomPub service (introspection) document for EA2 is accessible as follows: &lt;code&gt;http://host:port/resources/cmis&lt;/code&gt;. Let’s say your EA2 installation is running at localhost on 8080, then a request for this document will return the following type of response:</p>
<pre class="csharpcode"><span class="kwrd">&lt;?</span><span class="html">xml</span> <span class="attr">version</span><span class="kwrd">=&quot;1.0&quot;</span> <span class="attr">encoding</span><span class="kwrd">=&quot;UTF-8&quot;</span> <span class="attr">standalone</span><span class="kwrd">=&quot;yes&quot;</span>?<span class="kwrd">&gt;</span>
<span class="kwrd">&lt;</span><span class="html">ns3:service</span> <span class="attr">xmlns</span><span class="kwrd">=&quot;http://www.w3.org/2005/Atom&quot;</span> <span class="attr">xmlns:ns2</span><span class="kwrd">=&quot;http://www.cmis.org/2008/05&quot;</span> <span class="attr">xmlns:ns3</span><span class="kwrd">=&quot;http://www.w3.org/2007/app&quot;</span><span class="kwrd">&gt;</span>
  <span class="kwrd">&lt;</span><span class="html">ns3:workspace</span> <span class="attr">ns2:id</span><span class="kwrd">=&quot;dfs&quot;</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">title</span> <span class="attr">type</span><span class="kwrd">=&quot;text&quot;</span><span class="kwrd">&gt;</span>dfs<span class="kwrd">&lt;/</span><span class="html">title</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">ns2:repositoryInfo</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">ns2:repositoryId</span><span class="kwrd">&gt;</span>dfs<span class="kwrd">&lt;/</span><span class="html">ns2:repositoryId</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">ns2:repositoryName</span><span class="kwrd">&gt;</span>dfs<span class="kwrd">&lt;/</span><span class="html">ns2:repositoryName</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">ns2:repositoryDescription</span><span class="kwrd">&gt;</span>dfs<span class="kwrd">&lt;/</span><span class="html">ns2:repositoryDescription</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">ns2:vendorName</span><span class="kwrd">&gt;</span>EMC<span class="kwrd">&lt;/</span><span class="html">ns2:vendorName</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">ns2:productName</span><span class="kwrd">&gt;</span>Documentum<span class="kwrd">&lt;/</span><span class="html">ns2:productName</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">ns2:productVersion</span><span class="kwrd">&gt;</span>6.5.0.033<span class="kwrd">&lt;/</span><span class="html">ns2:productVersion</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">ns2:rootFolderId</span><span class="kwrd">&gt;</span>0c00302180000105<span class="kwrd">&lt;/</span><span class="html">ns2:rootFolderId</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">ns2:capabilities</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">ns2:capabilityMultifiling</span><span class="kwrd">&gt;</span>true<span class="kwrd">&lt;/</span><span class="html">ns2:capabilityMultifiling</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">ns2:capabilityUnfiling</span><span class="kwrd">&gt;</span>false<span class="kwrd">&lt;/</span><span class="html">ns2:capabilityUnfiling</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">ns2:capabilityVersionSpecificFiling</span><span class="kwrd">&gt;</span>true<span class="kwrd">&lt;/</span><span class="html">ns2:capabilityVersionSpecificFiling</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">ns2:capabilityPWCUpdateable</span><span class="kwrd">&gt;</span>false<span class="kwrd">&lt;/</span><span class="html">ns2:capabilityPWCUpdateable</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">ns2:capabilityPWCSearchable</span><span class="kwrd">&gt;</span>false<span class="kwrd">&lt;/</span><span class="html">ns2:capabilityPWCSearchable</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">ns2:capabilityAllVersionsSearchable</span><span class="kwrd">&gt;</span>true<span class="kwrd">&lt;/</span><span class="html">ns2:capabilityAllVersionsSearchable</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">ns2:capabilityQuery</span><span class="kwrd">&gt;</span>both<span class="kwrd">&lt;/</span><span class="html">ns2:capabilityQuery</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">ns2:capabilityJoin</span><span class="kwrd">&gt;</span>inneronly<span class="kwrd">&lt;/</span><span class="html">ns2:capabilityJoin</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">ns2:capabilityFullText</span><span class="kwrd">&gt;</span>fulltextandstructured<span class="kwrd">&lt;/</span><span class="html">ns2:capabilityFullText</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;/</span><span class="html">ns2:capabilities</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">ns2:cmisVersionsSupported</span><span class="kwrd">&gt;</span>0.5<span class="kwrd">&lt;/</span><span class="html">ns2:cmisVersionsSupported</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">ns2:repositoryInfo</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">ns3:collection</span> <span class="attr">href</span><span class="kwrd">=&quot;http://localhost:8080/resources/cmis/repositories/dfs/objects/0c00302180000105/children&quot;</span> <span class="attr">ns2:collectionType</span><span class="kwrd">=&quot;root-children&quot;</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">title</span> <span class="attr">type</span><span class="kwrd">=&quot;text&quot;</span><span class="kwrd">&gt;</span>root-children<span class="kwrd">&lt;/</span><span class="html">title</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">ns3:collection</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">ns3:collection</span> <span class="attr">href</span><span class="kwrd">=&quot;http://localhost:8080/resources/cmis/repositories/dfs/objects/0c00302180000105/descendants&quot;</span> <span class="attr">ns2:collectionType</span><span class="kwrd">=&quot;root-descendants&quot;</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">title</span> <span class="attr">type</span><span class="kwrd">=&quot;text&quot;</span><span class="kwrd">&gt;</span>root-descendants<span class="kwrd">&lt;/</span><span class="html">title</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">ns3:collection</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">ns3:collection</span> <span class="attr">href</span><span class="kwrd">=&quot;http://localhost:8080/resources/cmis/repositories/dfs/types&quot;</span> <span class="attr">ns2:collectionType</span><span class="kwrd">=&quot;types-children&quot;</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">title</span> <span class="attr">type</span><span class="kwrd">=&quot;text&quot;</span><span class="kwrd">&gt;</span>types-children<span class="kwrd">&lt;/</span><span class="html">title</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">ns3:collection</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">ns3:collection</span> <span class="attr">href</span><span class="kwrd">=&quot;http://localhost:8080/resources/cmis/repositories/dfs/types&quot;</span> <span class="attr">ns2:collectionType</span><span class="kwrd">=&quot;types-descendants&quot;</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">title</span> <span class="attr">type</span><span class="kwrd">=&quot;text&quot;</span><span class="kwrd">&gt;</span>types-descendants<span class="kwrd">&lt;/</span><span class="html">title</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">ns3:collection</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">ns3:collection</span> <span class="attr">href</span><span class="kwrd">=&quot;http://localhost:8080/resources/cmis/repositories/dfs/checkedout&quot;</span> <span class="attr">ns2:collectionType</span><span class="kwrd">=&quot;checkedout&quot;</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">title</span> <span class="attr">type</span><span class="kwrd">=&quot;text&quot;</span><span class="kwrd">&gt;</span>checkedout<span class="kwrd">&lt;/</span><span class="html">title</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">ns3:collection</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">ns3:collection</span> <span class="attr">href</span><span class="kwrd">=&quot;http://localhost:8080/resources/cmis/repositories/dfs/queries&quot;</span> <span class="attr">ns2:collectionType</span><span class="kwrd">=&quot;query&quot;</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">title</span> <span class="attr">type</span><span class="kwrd">=&quot;text&quot;</span><span class="kwrd">&gt;</span>query<span class="kwrd">&lt;/</span><span class="html">title</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">ns3:collection</span><span class="kwrd">&gt;</span>
  <span class="kwrd">&lt;/</span><span class="html">ns3:workspace</span><span class="kwrd">&gt;</span>
<span class="kwrd">&lt;/</span><span class="html">ns3:service</span><span class="kwrd">&gt;</span></pre>
<style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>Your repository name and object identifiers will likely differ from the example references above, but hopefully you get the gist of the response payload.</p>
<p>Comparing the RESTful AtomPub binding to the SOAP binding in CMIS, one has to make two service requests to yield the same repository information (i.e. the block of data represented by &lt;code&gt;repositoryInfo&lt;/code&gt; above) as follows:</p>
<pre class="csharpcode">repositories = repositoryService.getRepositories();
<span class="kwrd">foreach</span> (cmisRepositoryEntryType repository <span class="kwrd">in</span> repositories)
{
  cmisAnyXml repositorySpecificInformation;
  <span class="kwrd">string</span> repositoryId = repository.repositoryID,
         repositoryRelationship,
         repositoryDescription,
         vendorName,
         productName,
         productVersion,
         rootFolderId,
         cmisVersionsSupported;
  cmisRepositoryCapabilitiesType capabilities;
  XmlAttribute[] AnyAttr;
  XmlElement[] Any;
  repositoryService.getRepositoryInfo(<span class="kwrd">ref</span> repositoryId, <span class="kwrd">out</span> repositoryRelationship,
         <span class="kwrd">out</span> repositoryDescription, <span class="kwrd">out</span> vendorName, <span class="kwrd">out</span> productName,
         <span class="kwrd">out</span> productVersion, <span class="kwrd">out</span> rootFolderId, <span class="kwrd">out</span> capabilities,
         <span class="kwrd">out</span> cmisVersionsSupported, <span class="kwrd">out</span> repositorySpecificInformation,
         <span class="kwrd">out</span> Any, <span class="kwrd">out</span> AnyAttr);
  . . .
}</pre>
<style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>Comparing CMIS Repository service WSDL consumption with DFS Search service WSDL consumption, the same DFS-based consumer code is as follows:</p>
<pre class="csharpcode">Repository[] repositories = searchService.getRepositoryList(<span class="kwrd">null</span>);
<span class="kwrd">foreach</span> (Repository repository <span class="kwrd">in</span> repositories)
{
  . . .
}</pre>
<style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>To be clear, these examples are not provided for me to argue that one approach is better than another but rather to <em>show how approaches</em> <em>differ</em> based on domain model, use cases, etc.</p>
<p>I’ll leave it as an exercise for the reader to perform similar comparisons where query support and object support is concerned between DFS and CMIS. <img src='http://craigrandall.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Perhaps it’s also useful to comment on how WS-Security header information is passed to CMIS WSDL endpoints, since CMIS WSDL doesn’t currently declare headers explicitly in the service contract.</p>
<p>This sample injects WS-Security headers via app.config-based declaration (versus programmatically):</p>
<pre class="csharpcode"><span class="kwrd">&lt;</span><span class="html">extensions</span><span class="kwrd">&gt;</span>
  <span class="kwrd">&lt;</span><span class="html">behaviorExtensions</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">add</span> <span class="attr">name</span><span class="kwrd">=&quot;usernameToken&quot;</span> <span class="attr">type</span><span class="kwrd">=&quot;SecurityMessageInspector.UsernameTokenBehaviorExtensionElement, SecurityMessageInspector, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null&quot;</span><span class="kwrd">/&gt;</span>
  <span class="kwrd">&lt;/</span><span class="html">behaviorExtensions</span><span class="kwrd">&gt;</span>
<span class="kwrd">&lt;/</span><span class="html">extensions</span><span class="kwrd">&gt;</span>
<span class="kwrd">&lt;</span><span class="html">behaviors</span><span class="kwrd">&gt;</span>
  <span class="kwrd">&lt;</span><span class="html">endpointBehaviors</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">behavior</span> <span class="attr">name</span><span class="kwrd">=&quot;UsernameTokenBehavior&quot;</span><span class="kwrd">&gt;</span>
      <span class="kwrd">&lt;</span><span class="html">usernameToken</span> <span class="attr">username</span><span class="kwrd">=&quot;Administrator&quot;</span> <span class="attr">password</span><span class="kwrd">=&quot;emc&quot;</span> <span class="attr">passwordType</span><span class="kwrd">=&quot;PasswordText&quot;</span><span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">behavior</span><span class="kwrd">&gt;</span>
  <span class="kwrd">&lt;/</span><span class="html">endpointBehaviors</span><span class="kwrd">&gt;</span>
<span class="kwrd">&lt;/</span><span class="html">behaviors</span><span class="kwrd">&gt;</span></pre>
<style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>Right away, understand that this is a <em>sample</em>—you will likely want to take a more secure approach to managing user credentials. Certainly, if you employed this approach, you should employ a <em>secure</em> transport (i.e. SSL). Please see the sample solution’s README file for more details if a more programmatic approach is desired (with or without SSL).</p>
<p>There are other ways to &quot;wire&quot; WS-Security header creation and passing into applications. This particular sample takes a more subtle (less in-your-face) approach to accomplish this concern. Regardless, <em>implicit SOAP headers in a contract require extra coding on the part of a consumer</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2009/01/consuming-cmis-wsdl-in-visual-studio/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Consuming DFS WSDL in Visual Studio</title>
		<link>http://craigrandall.net/archives/2009/01/consuming-dfs-wsdl-in-visual-studio/</link>
		<comments>http://craigrandall.net/archives/2009/01/consuming-dfs-wsdl-in-visual-studio/#comments</comments>
		<pubDate>Fri, 16 Jan 2009 06:04:45 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Content management]]></category>
		<category><![CDATA[DFS]]></category>
		<category><![CDATA[Services]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[LINQ to XML]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[WCF]]></category>
		<category><![CDATA[WSDL]]></category>

		<guid isPermaLink="false">http://craigrandall.net/?p=830</guid>
		<description><![CDATA[TweetEarlier today I posted to EDN a new sample project that demonstrates consuming DFS web services directly from their WSDL in a Visual Studio 2008 environment. Right up front, I want to credit my colleague John Sweeney, who really should start blogging, with providing the original work contained in this sample. My subsequent contribution was [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton830" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FpgfLFN&amp;via=craigsmusings&amp;text=Consuming%20DFS%20WSDL%20in%20Visual%20Studio&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2009%2F01%2Fconsuming-dfs-wsdl-in-visual-studio%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://craigrandall.net/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><p>Earlier today I posted to <a title="EMC Developer Network" href="https://community.emc.com/community/edn" target="_blank">EDN</a> a <a title="EDN: Direct-to-WSDL DFS services consumer sample" href="https://community.emc.com/docs/DOC-2604" target="_blank">new sample project</a> that demonstrates consuming <a title="Documentum Foundation Services" href="http://craigrandall.net/archives/2007/05/documentum-foundation-services/" target="_blank">DFS</a> web services directly from their WSDL in a Visual Studio 2008 environment. Right up front, I want to credit my colleague John Sweeney, <em>who really should start blogging</em>, with providing the original work contained in this sample. My subsequent contribution was mostly UI/UX-related. Thanks, John!</p>
<p>After downloading and extracting the sample to your local development machine, open the solution in Visual Studio 2008. The default code assumes that you&#8217;re running the DFS web services locally (i.e. IP 127.0.0.1 and port 8080). You should, of course, modify the IP address and port to match your particular development environment.</p>
<p><img alt="Main sample UI" src="http://craigrandall.net/dfs/DFSWSDLConsumer-main-form.gif" /></p>
<p>The main intent of this sample is to demonstrate various ways to authenticate via DFS. It’s worth noting that this sample doesn’t cover single sign-on (SSO) support in DFS, nor does it cover WS-Security header-based authentication. Good demos to be certain…</p>
<p>As the user interface (UI) above tries to clearly state upfront, content repository (aka Docbase) name cannot be null or empty, regardless of authentication approach. Given authentication via ServiceContext header, user name and password cannot be null or empty. Given authentication via ContextRegistry runtime service, when token is null or empty, user name and password cannot be null or empty, and when user name and password are both null or empty, token cannot be null or empty.</p>
<p>One thing that is still a bit obscure in the current UI is that authentication via DFS can be a two-step or one-step process, depending on the situation. If you choose &quot;Via ContextRegistry…&quot; and a Context Registry token isn’t provided to DFS, two runtime service invocations will be made. In all other cases, there is one service invocation.</p>
<p>Assuming that your connection details are valid given your authentication approach, this sample will (a) retrieve a repository list, (b) retrieve cabinets, and (c) retrieve content (i.e. transfer MenuItemTemplate.ini to your desktop).</p>
<p>A previous direct-to-WSDL DFS consumer sample I <a title="Part 2 of 2: DFS Object service consumer" href="http://craigrandall.net/archives/2008/07/dfs-object-service-consumer-2b/" target="_blank">posted</a>, targeted .NET 3.0 and WCF &quot;v1.&quot; This sample targets .NET 3.5 and WCF &quot;v2&quot; instead, along with support for Silverlight 2. It accomplishes this change via LINQ to XML (e.g. leverages System.Xml.Linq.XDocument instead of System.Xml.XmlDocument).</p>
<p>If you need to target this sample at .NET 3.0, in addition to adjusting the project build properties, removing the project reference to the System.Xml.Linq.dll assembly, and removing the System.Xml.Linq namespace declaration in ServiceContextHeader.cs, you’ll need to change the relevant code within OnWriteHeaderContents. For example:</p>
<pre class="csharpcode">  XDocument doc = <span class="kwrd">null</span>;
  <span class="kwrd">using</span> (StringWriter sw = <span class="kwrd">new</span> StringWriter(CultureInfo.CurrentCulture))
  {
      XmlSerializer xs = <span class="kwrd">new</span> XmlSerializer(<span class="kwrd">typeof</span>(ServiceContext));
      xs.Serialize(sw, serviceContext);
      doc = XDocument.Load(<span class="kwrd">new</span> StringReader(sw.ToString()));
  }</pre>
<style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>would become:</p>
<pre class="csharpcode">  XmlDocument doc = <span class="kwrd">null</span>;
  <span class="kwrd">using</span> (StringWriter sw = <span class="kwrd">new</span> StringWriter(CultureInfo.CurrentCulture))
  {
      XmlSerializer xs = <span class="kwrd">new</span> XmlSerializer(<span class="kwrd">typeof</span>(ServiceContext));
      xs.Serialize(sw, serviceContext);
      doc = XmlDocument.LoadXml(<span class="kwrd">new</span> StringReader(sw.ToString()));
  }</pre>
<style type="text/css">
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>etc.</p>
<p>Although, it&#8217;s not currently employed in the sample, there is also code to add a ContentTransferProfile to the ServiceContext header. </p>
<p>As always, consult the DFS Developer Guide for complete details on everything that may be passed in the ServiceContext header.</p>
<p>I do expect that this sample will be incorporated into the DFS SDK and DFS technical publications content; however, I wanted to get this into your hands sooner rather than later. Cheers&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2009/01/consuming-dfs-wsdl-in-visual-studio/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>How do you say CMIS?</title>
		<link>http://craigrandall.net/archives/2008/11/how-do-you-say-cmis/</link>
		<comments>http://craigrandall.net/archives/2008/11/how-do-you-say-cmis/#comments</comments>
		<pubDate>Tue, 25 Nov 2008 22:26:10 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[CMIS]]></category>
		<category><![CDATA[Content management]]></category>
		<category><![CDATA[Services]]></category>
		<category><![CDATA[content management interoperability services]]></category>

		<guid isPermaLink="false">http://craigrandall.net/?p=598</guid>
		<description><![CDATA[TweetWhile I&#8217;ve been saying &#8220;see em eye ess&#8221; for CMIS up to this point, I&#8217;ve discovered that others are pronouncing CMIS &#8220;see miss&#8221; instead. One&#8217;s pronunciation of SQL has been offered in support of pronouncing CMIS (i.e. &#8220;see qul&#8221; versus &#8220;ess queue el&#8221;). (I say &#8220;see qul;&#8221; so perhaps I should be saying &#8220;see miss.&#8221;) [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton598" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2Foi1Zm5&amp;via=craigsmusings&amp;text=How%20do%20you%20say%20CMIS%3F&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2008%2F11%2Fhow-do-you-say-cmis%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://craigrandall.net/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><p>While I&#8217;ve been saying &#8220;see em eye ess&#8221; for CMIS up to this point, I&#8217;ve discovered that <a title="Some early thoughts on CMIS" href="http://www.cmswatch.com/Trends/1434-Some-early-thoughts-on-CMIS" target="_blank">others</a> are pronouncing <a title="CMIS - Content Management Interoperability Services" href="http://craigrandall.net/archives/2008/09/cmis/" target="_blank">CMIS</a> &#8220;see miss&#8221; instead. </p>
<ul>
<li>One&#8217;s pronunciation of SQL has been offered in support of pronouncing CMIS (i.e. &#8220;see qul&#8221; versus &#8220;ess queue el&#8221;). (I say &#8220;see qul;&#8221; so perhaps I should be saying &#8220;see miss.&#8221;)</li>
<li>Using the shortest pronunciation possible as measured by number of syllables has been offered in support of &#8220;see miss&#8221; (i.e. two versus four syllables).</li>
<li>Conjunctives like CMIS-enabled, CMIS-ready, etc. has been offered in consideration of &#8220;see miss.&#8221; On other hand, &#8220;see em eye ess&#8221; may be better in conversation with someone not yet familiar with the standards effort.</li>
<li>One&#8217;s locale and native language has also been offered in support of &#8220;see em eye ess&#8221; (e.g. easier to understand in conversation with non-native speakers by avoiding use of two common English words, which can be hard to parse in the middle of a sentence for someone not already used to the meaning).</li>
<li>Pop culture features shows like CSI, SVU and NCIS. <em>Initialism</em> applies to these shows (e.g. you don&#8217;t hear &#8220;see sci&#8221; or &#8220;en sis&#8221;). Therefore, &#8230;</li>
</ul>
<p>So, how do <em>you</em> say CMIS? <img src='http://craigrandall.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>P.S. Yes, this is completely unimportant in every technical aspect where the standards effort around CMIS is concerned. Nevertheless, consistent identity, including pronunciation matters, and the standards effort is just getting started&#8230;</p>
<p>P.P.S. Happy Thanksgiving!</p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2008/11/how-do-you-say-cmis/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>CMIS at SOA World</title>
		<link>http://craigrandall.net/archives/2008/11/cmis-at-soa-world/</link>
		<comments>http://craigrandall.net/archives/2008/11/cmis-at-soa-world/#comments</comments>
		<pubDate>Thu, 20 Nov 2008 21:00:54 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[CMIS]]></category>
		<category><![CDATA[Content management]]></category>
		<category><![CDATA[Services]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[content management interoperability services]]></category>
		<category><![CDATA[ECM]]></category>
		<category><![CDATA[EMC]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[SOA World]]></category>

		<guid isPermaLink="false">http://craigrandall.net/?p=581</guid>
		<description><![CDATA[TweetToday my EMC colleagues Dr. David Choy and Patricia Anderson presented CMIS to SOA World attendees, &#8220;An Industry Effort to Define a Service-Based Interoperability Standard for Content Management.&#8221; They were kind enough to let me post their work here.]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton581" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FpRe3h1&amp;via=craigsmusings&amp;text=CMIS%20at%20SOA%20World&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2008%2F11%2Fcmis-at-soa-world%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://craigrandall.net/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><p>Today my EMC colleagues Dr. David Choy and Patricia Anderson presented <a title="Content Management Interoperability Services" href="http://craigrandall.net/archives/categories/standards/cmis/" target="_blank">CMIS</a> to <a title="SOA World Conference &#038; Expo 2008 West" href="http://soaworld2008.com/" target="_blank">SOA World</a> attendees, &#8220;<a href="http://craigrandall.net/cmis/081120%20CMIS%20(EMC,%20SOA%20World).pdf" target="_blank">An Industry Effort to Define a Service-Based Interoperability Standard for Content Management</a>.&#8221; They were kind enough to let me post their work <a title="CMIS: An Industry Effort to Define a Service-Based Interoperability Standard for Content Management" href="http://craigrandall.net/cmis/081120%20CMIS%20(EMC,%20SOA%20World).pdf" target="_blank">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2008/11/cmis-at-soa-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Intelligent capture</title>
		<link>http://craigrandall.net/archives/2008/11/intelligent-capture/</link>
		<comments>http://craigrandall.net/archives/2008/11/intelligent-capture/#comments</comments>
		<pubDate>Wed, 19 Nov 2008 20:51:46 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Content management]]></category>
		<category><![CDATA[Services]]></category>
		<category><![CDATA[Captiva]]></category>
		<category><![CDATA[capture]]></category>
		<category><![CDATA[EMC]]></category>
		<category><![CDATA[InputAccel]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[TCM]]></category>

		<guid isPermaLink="false">http://craigrandall.net/?p=590</guid>
		<description><![CDATA[TweetToday, EMC announced new releases of EMC Captiva products (i.e. EMC Captiva InputAccel 6.0 and EMC Captiva Dispatcher 6.0). I want to address the benefits of service-oriented infrastructure related to capture as embodied by these new releases. The big deal with SOA and InputAccel 6.0 (IA6) is the connectivity it enables with other enterprise applications. [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton590" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FnlP03e&amp;via=craigsmusings&amp;text=Intelligent%20capture&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2008%2F11%2Fintelligent-capture%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://craigrandall.net/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><p>Today, EMC announced <a title="EMC Set New Standard for Enterprise Capture" href="http://www.emc.com/about/news/press/2008/20081119-01.htm" target="_blank">new releases of EMC Captiva products</a> (i.e. <a href="http://www.emc.com/products/detail/software/inputaccel.htm" target="_blank">EMC Captiva InputAccel</a> 6.0 and <a href="http://www.emc.com/products/detail/software/dispatcher.htm" target="_blank">EMC Captiva Dispatcher</a> 6.0). I want to address the benefits of service-oriented infrastructure related to capture as embodied by these new releases.</p>
<p>The big deal with SOA and InputAccel 6.0 (IA6) is <em>the connectivity it enables with other enterprise applications</em>.</p>
<p>Capture depends heavily on validation of the captured data so access to systems that can supply information based on an extracted value or can perform the validation of extracted values is necessary.  <em>Service-orientation in IA6 lets capture be part of a company&#8217;s composite <a title="Transactional Content Management" href="http://www.emc.com/products/category/subcategory/transactional-content-management.htm" target="_blank">TCM</a> applications</em>.</p>
<p>Prior to the release of IA6, capture systems &#8220;connectivity&#8221; was restricted to ODBC, dropping files on file shares, and/or duplicating validation rules in software.</p>
<p>Another potentially big deal is the exposure of Captiva&#8217;s capture functionality to other applications (e.g. a web service for importing data into Captiva).</p>
<p>Today Captiva takes (captures) data from scanners, email, fax machines and legacy systems using specialty importers and file shares. Using web services will reduce complexity by allowing for a single method to be used to take in data from all kinds of systems.</p>
<p>Capture processing tends to occur in large batches; so, the &#8220;queue&#8221; behavior of a file share is useful. However, it lacks a handshake when the data has been picked up.</p>
<p>A web service would be more likely to be used by an interactive process or could be used as a call-back with the file share method to give a handshake.</p>
<p>It will be interesting to see how service-orientation within capture takes hold.</p>
<p>I want to thank my colleague, Clay Mayers, Captiva CTO, for contributing to this post. (Ah, another potential CMA blogger target&#8230; <img src='http://craigrandall.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  )</p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2008/11/intelligent-capture/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Azure is like NT</title>
		<link>http://craigrandall.net/archives/2008/11/azure-is-like-nt/</link>
		<comments>http://craigrandall.net/archives/2008/11/azure-is-like-nt/#comments</comments>
		<pubDate>Thu, 06 Nov 2008 00:19:54 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Services]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[NT]]></category>
		<category><![CDATA[OS]]></category>
		<category><![CDATA[PDC]]></category>
		<category><![CDATA[Red Dog]]></category>
		<category><![CDATA[Windows Azure]]></category>

		<guid isPermaLink="false">http://craigrandall.net/?p=556</guid>
		<description><![CDATA[TweetDuring the first keynote of PDC last week, Bob Muglia associated this year&#8217;s PDC with the 1992 PDC, which featured the coming out of Windows NT. (I still think of &#8220;WNT&#8221; as &#8220;V++ M++ S++&#8221;, given David Cutler&#8216;s leadership on both operating systems.) I think there is much to draw from this comparison where the [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton556" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FnDcTQO&amp;via=craigsmusings&amp;text=Azure%20is%20like%20NT&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2008%2F11%2Fazure-is-like-nt%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://craigrandall.net/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><p>During the <a title="Professional Developers Conference 2008 Day 1 Keynote..." href="http://www.microsoft.com/presspass/exec/ozzie/10-27PDC08dayone.mspx" target="_blank">first keynote of PDC</a> last week, <a href="http://www.microsoft.com/presspass/exec/bobmuglia/" target="_blank">Bob Muglia</a> associated this year&#8217;s PDC with the 1992 PDC, which featured the coming out of Windows NT. (I still think of &#8220;WNT&#8221; as &#8220;V++ M++ S++&#8221;, given <a href="http://www.microsoft.com/presspass/exec/techfellow/Cutler/default.mspx" target="_blank">David Cutler</a>&#8216;s leadership on both operating systems.) <img src='http://craigrandall.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>I think there is much to draw from this comparison where the future for <a href="http://www.microsoft.com/azure/windowsazure.mspx" target="_blank">Windows Azure</a> is concerned.</p>
<p>In 1992, PDC&#8217;s coverage of NT followed after at least a two-year effort to develop the new operating system (e.g. the OS first ran&#8211;minimally and non-commercially at Microsoft&#8211;in 1990). Commercial availability followed PDC a year later (i.e. Windows NT 3.1). However, adoption of NT didn&#8217;t take off until 1996, with the release of Windows NT 4.0 (and the availability of hardware and applications necessary to accomplish day-to-day work).</p>
<p>I&#8217;m not saying that Azure&#8217;s &#8220;take-off&#8221; won&#8217;t be until 2012 (i.e. &#8220;Red Dog&#8221;&#8216;s 2006 commencement plus six years). Yet, Microsoft&#8217;s own comparison of Azure to NT is helpful in combating both near-term tendency to hype and in understanding the long-term <a title="Getting the clouds to rain (add value)" href="http://craigrandall.net/archives/2008/10/getting-the-clouds-to-rain-add-value/">potential of the cloud</a> where Microsoft envisions it to be.</p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2008/11/azure-is-like-nt/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Cover Pages technology report for CMIS</title>
		<link>http://craigrandall.net/archives/2008/11/cover-pages-cmis/</link>
		<comments>http://craigrandall.net/archives/2008/11/cover-pages-cmis/#comments</comments>
		<pubDate>Tue, 04 Nov 2008 19:55:22 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[CMIS]]></category>
		<category><![CDATA[Content management]]></category>
		<category><![CDATA[Services]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[ECM]]></category>
		<category><![CDATA[OASIS]]></category>
		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://craigrandall.net/?p=552</guid>
		<description><![CDATA[TweetRobin Cover just published a technology report for CMIS to support the activities of the OASIS CMIS TC and external commentary, and with the intent to update the document with relevant bibliographic references as the Technical Committee work progresses. Thanks, Robin.]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton552" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FoFXOWA&amp;via=craigsmusings&amp;text=Cover%20Pages%20technology%20report%20for%20CMIS&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2008%2F11%2Fcover-pages-cmis%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://craigrandall.net/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><p><a href="http://www.oasis-open.org/who/staff.php#cover" target="_blank">Robin Cover</a> just published a <a title="Cover Pages: Content Management Interoperability Services (CMIS)" href="http://xml.coverpages.org/cmis.html" target="_blank">technology report</a> for <a title="Content Management Interoperability Services (CMIS)" href="http://craigrandall.net/archives/2008/09/cmis/">CMIS</a> to support the activities of the OASIS CMIS TC and external commentary, and with the intent to update the document with relevant bibliographic references as the Technical Committee work progresses. Thanks, Robin.</p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2008/11/cover-pages-cmis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Getting the clouds to rain (add value)</title>
		<link>http://craigrandall.net/archives/2008/10/getting-the-clouds-to-rain-add-value/</link>
		<comments>http://craigrandall.net/archives/2008/10/getting-the-clouds-to-rain-add-value/#comments</comments>
		<pubDate>Mon, 27 Oct 2008 17:58:45 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Services]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Azure Services Platform]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[PDC]]></category>
		<category><![CDATA[PDC08]]></category>
		<category><![CDATA[PDC2008]]></category>
		<category><![CDATA[Windows Azure]]></category>

		<guid isPermaLink="false">http://craigrandall.net/?p=523</guid>
		<description><![CDATA[Tweet Certainly the vision of Windows Azure (aka &#8220;Red Dog&#8221;) and the Azure Services Platform is substantial. However, in order for Microsoft, its partners and customers to realize it, it must deliver business value. Internal or external, cloud computing has to address a set of real business problems in order to become a relevant part [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton523" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2Fp2J8U6&amp;via=craigsmusings&amp;text=Getting%20the%20clouds%20to%20rain%20%28add%20value%29&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2008%2F10%2Fgetting-the-clouds-to-rain-add-value%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://craigrandall.net/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><p align="middle"><img src="http://craigrandall.net/images/081107-Clouds.jpg" alt="Clouds" /></p>
<p>Certainly the <em>vision</em> of Windows Azure (aka &#8220;Red Dog&#8221;) and the <a href="http://www.microsoft.com/azure/default.mspx" target="_blank">Azure Services Platform</a> is substantial. However, in order for Microsoft, its partners and customers to realize it, it must deliver business value.</p>
<p>Internal or external, cloud computing has to address a set of real business problems in order to become a relevant part of one&#8217;s development arsenal. Some business models are more closely aligned with the cloud than others. New business models will emerge.</p>
<p>I guess that the technology industry is tired of TLAs like MSP and ASP. In fact, it seems like FLAs like SaaS and PaaS are passé, too. Only five characters will do, and analogy has replaced acronym: cloud. <img src='http://craigrandall.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>During the keynotes this morning, Ray Ozzie suggested that cloud (or <a title="The Big Switch" href="http://craigrandall.net/archives/2008/08/the-big-switch/" target="_blank">utility</a>) computing is materially different than  past innovations upon which it rests since it is focused on the <em>externalization of IT</em> and the critical requirement to scale-out.</p>
<p>According to <a href="http://www.gartner.com/it/sym/2008/sym18/sym18.jsp" target="_blank">Gartner</a>, there are five trends driving companies like Microsoft and Google in their march toward cloud computing as follows:</p>
<ul>
<li>Software as a service</li>
<li>Open-source technologies</li>
<li><a title="EMC Documentum CenterStage" href="https://developer-beta.emc.com/community/labs/kw" target="_blank">Web 2.0 products</a>, such as collaborative technologies, social networking and wikis</li>
<li>Consumerization of technology</li>
<li>Global class, a new way to deliver computing services</li>
</ul>
<p>So I&#8217;m looking for content and discussion concerning cloud computing the addresses the following questions:</p>
<ul>
<li>What are the API differences between this OS (Windows Azure) and a traditional Windows OS (e.g. Windows Server 2008)? What features/functions are unique to Azure (and why)?</li>
<li>What about composition in the cloud?</li>
<li>What about cross-app-in-the-cloud functionality (e.g. events and other synergies)?</li>
<li>What are the significant ISV/partner opportunities (e.g. platform level, application level and integrated solutions level) created by the &#8220;Azure ecosystem&#8221;?</li>
<li>What new issues arise in the cloud? Regulatory compliance cannot be compromised. Comingling of both live and backed-up data can pose concerns. &#8220;Premise matters&#8221; (eventually); so virtualization, geography, sovereignty, etc. can pose additional concerns. Etc. How does Azure address such concerns?</li>
</ul>
<p>In a few minutes, I&#8217;ll be taking an initial &#8220;lap around&#8221; Azure, which should be interesting. Stay tuned&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2008/10/getting-the-clouds-to-rain-add-value/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Head in the clouds</title>
		<link>http://craigrandall.net/archives/2008/10/head-in-the-clouds/</link>
		<comments>http://craigrandall.net/archives/2008/10/head-in-the-clouds/#comments</comments>
		<pubDate>Mon, 27 Oct 2008 14:52:26 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Services]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[cloud computing]]></category>
		<category><![CDATA[conference]]></category>
		<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[PDC]]></category>
		<category><![CDATA[PDC08]]></category>
		<category><![CDATA[PDC2008]]></category>

		<guid isPermaLink="false">http://craigrandall.net/?p=514</guid>
		<description><![CDATA[TweetIt appears that a majority of what I plan to attend at this year&#8217;s Microsoft Professional Developers Conference (PDC) is focused on cloud computing. Today, for example, I plan to attend the following sessions: Keynote &#8211; Ray Ozzie, Amitabh Srivastava, Bob Muglia and David Thompson A Lap around Windows Azure &#8220;Dublin&#8221; and .NET Services: Extending [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton514" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FqKCP7r&amp;via=craigsmusings&amp;text=Head%20in%20the%20clouds&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2008%2F10%2Fhead-in-the-clouds%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://craigrandall.net/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><p>It appears that a majority of what I plan to attend at this year&#8217;s <a href="http://microsoftpdc.com/" target="_blank">Microsoft Professional Developers Conference</a> (PDC) is focused on cloud computing. Today, for example, I plan to attend the following sessions:</p>
<ol>
<li>Keynote &#8211; <a href="http://microsoftpdc.com/Agenda/Speakers.aspx#ray-ozzie" target="_blank">Ray Ozzie</a>, <a href="http://microsoftpdc.com/Agenda/Speakers.aspx#amitabh-srivastava" target="_blank">Amitabh Srivastava</a>, <a href="http://microsoftpdc.com/Agenda/Speakers.aspx#bob-muglia" target="_blank">Bob Muglia</a> and <a href="http://microsoftpdc.com/Agenda/Speakers.aspx#david-thompson" target="_blank">David Thompson</a></li>
<li><a href="http://channel9.msdn.com/pdc2008/ES16/" target="_blank">A Lap around Windows Azure</a></li>
<li><a href="http://channel9.msdn.com/pdc2008/TL40/" target="_blank">&#8220;Dublin&#8221; and .NET Services: Extending On-Premises Applications to the Cloud</a></li>
<li><a href="http://channel9.msdn.com/pdc2008/TL16/" target="_blank">The Future of C#</a> &#8211; <a href="http://www.microsoft.com/presspass/exec/techfellow/Hejlsberg/default.mspx" target="_blank">Anders Hejlsberg</a></li>
<li><a href="http://channel9.msdn.com/pdc2008/BB01/" target="_blank">A Lap around the Azure Services Platform</a> &#8211; <a href="http://www.microsoft.com/presspass/exec/techfellow/Shewchuk/default.mspx" target="_blank">John Shewchuk</a></li>
<li><a href="http://channel9.msdn.com/pdc2008/ES01/" target="_blank">Developing and Deploying Your First Windows Azure Service</a></li>
</ol>
<p>Well, I&#8217;m off to grab a seat for the keynote session. I&#8217;ll follow up with a post on what I expect to learn about cloud computing, next.</p>
<p>Update 10/28/2008: FWIW, here is the rest of my plans at PDC (besides networking, of course):</p>
<p>Day 2</p>
<ol>
<li>Keynote &#8211; Ray Ozzie et al</li>
<li>Keynote &#8211; Don Box &#038; Chris Anderson</li>
<li><a href="http://channel9.msdn.com/pdc2008/BB41/" target="_blank">Live Services: What I Learned Building My First Mesh Application</a></li>
<li><a href="http://channel9.msdn.com/pdc2008/TL23/" target="_blank">A Lap around &#8220;Oslo&#8221;</a></li>
<li><a href="http://channel9.msdn.com/pdc2008/BB02/" target="_blank">Architecture of the .NET Services</a></li>
<li><a href="http://channel9.msdn.com/pdc2008/ES02/" target="_blank">Windows Azure: Architecting &#038; Managing Cloud Services</a></li>
</ol>
<p>Day 3</p>
<ol>
<li>Keynote &#8211; Rick Rashid</li>
<li><a href="http://channel9.msdn.com/pdc2008/BB38/" target="_blank">.NET Services: Connectivity, Messaging, Events, and Discovery with the Service Bus</a>&#8230;or <a href="http://channel9.msdn.com/pdc2008/TL57/" target="_blank">Panel: The Future of Programming Languages</a>&#8230;or <a href="http://channel9.msdn.com/pdc2008/TL26/" target="_blank">Parallel Programming for Managed Developers with the Next Version of Microsoft Visual Studio</a> <img src='http://craigrandall.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
<li><a href="http://channel9.msdn.com/pdc2008/PC22/" target="_blank">Windows 7: Design Principles for Windows 7</a></li>
<li><a href="http://channel9.msdn.com/pdc2008/BB39/" target="_blank">.NET Services: Logging, Diagnosing, and Troubleshooting Applications Running Live in the Cloud</a> or <a href="http://channel9.msdn.com/pdc2008/TL24/" target="_blank">Improving .NET Application Performance and Scalability</a></li>
<li><a href="http://channel9.msdn.com/pdc2008/ES03/" target="_blank">Windows Azure: Cloud Service Development Best Practices</a></li>
<li><a href="http://channel9.msdn.com/pdc2008/BB28/" target="_blank">.NET Services: Access Control Service Drilldown</a></li>
</ol>
<p>Day 4</p>
<ol>
<li><a href="http://channel9.msdn.com/pdc2008/TL36/" target="_blank">Microsoft .NET Framework: Declarative Programming Using XAML</a></li>
<li><a href="http://channel9.msdn.com/pdc2008/BB12/" target="_blank">.NET Services: Messaging Services &#8211; Protocols, Protection, and How We Scale</a></li>
<li><a href="http://channel9.msdn.com/pdc2008/TL31/" target="_blank">&#8220;Oslo&#8221;: Building Textual DSLs</a> or <a href="http://channel9.msdn.com/pdc2008/BB54/" target="_blank">Designing Your Application to Scale</a> or <a href="http://channel9.msdn.com/pdc2008/ES17/" target="_blank">Windows Azure: Programming in the Cloud</a></li>
<li><a href="http://channel9.msdn.com/pdc2008/TL11/" target="_blank">An Introduction to Microsoft F#</a> or <a href="http://channel9.msdn.com/pdc2008/BB27/" target="_blank">.NET Services: Orchestrating Services and Business Processes Using Cloud-Based Workflow</a></li>
<li>&#8230;or, instead of the regular session rhythm, there are 3-part symposia (e.g. on services [<a href="http://channel9.msdn.com/pdc2008/SYMP04/" target="_blank">1</a>], [<a href="http://channel9.msdn.com/pdc2008/SYMP05/" target="_blank">2</a>] and [<a href="http://channel9.msdn.com/pdc2008/SYMP06/" target="_blank">3</a>]&#8230;difficult choice&#8230;</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2008/10/head-in-the-clouds/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>De-hyping CMIS</title>
		<link>http://craigrandall.net/archives/2008/10/de-hyping-cmis/</link>
		<comments>http://craigrandall.net/archives/2008/10/de-hyping-cmis/#comments</comments>
		<pubDate>Wed, 01 Oct 2008 21:22:40 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[CMIS]]></category>
		<category><![CDATA[Content management]]></category>
		<category><![CDATA[Services]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[content management interoperability services]]></category>
		<category><![CDATA[ECM]]></category>
		<category><![CDATA[OASIS]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[standard]]></category>

		<guid isPermaLink="false">http://craigrandall.net/archives/2008/10/de-hyping-cmis/</guid>
		<description><![CDATA[TweetThis week has seen REST experts Roy Fielding and Sam Ruby comment on CMIS. As someone directly involved in CMIS, I wanted to acknowledge both Roy&#8217;s remarks and Sam&#8217;s remarks, which follow onto Roy&#8217;s. The standards effort based in OASIS that is CMIS is indeed just getting started, as Sam notes. There is a lot [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton458" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2Fn0ARku&amp;via=craigsmusings&amp;text=De-hyping%20CMIS&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2008%2F10%2Fde-hyping-cmis%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://craigrandall.net/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><p>This week has seen REST experts <a title="Untangled" href="http://roy.gbiv.com/untangled/" target="_blank">Roy Fielding</a> and <a title="Intertwingly" href="http://intertwingly.net/blog/" target="_blank">Sam Ruby</a> comment on <a title="Content Management Interoperability Services" href="http://craigrandall.net/archives/2008/09/cmis/" target="_blank">CMIS</a>. As someone directly involved in CMIS, I wanted to acknowledge both <a title="No REST in CMIS" href="http://roy.gbiv.com/untangled/2008/no-rest-in-cmis" target="_blank">Roy&#8217;s remarks</a> and <a title="CMIS" href="http://www.intertwingly.net/blog/2008/10/01/CMIS" target="_blank">Sam&#8217;s remarks</a>, which follow onto Roy&#8217;s.</p>
<p>The <em>standards effort</em> based in OASIS that is CMIS is indeed <em>just getting started</em>, as Sam notes. There is a lot of work to be done, and CMIS needs timely, constructive feedback from the wider community if it is to become widely adopted.</p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2008/10/de-hyping-cmis/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>CMIS webinar</title>
		<link>http://craigrandall.net/archives/2008/09/cmis-webinar/</link>
		<comments>http://craigrandall.net/archives/2008/09/cmis-webinar/#comments</comments>
		<pubDate>Wed, 17 Sep 2008 00:17:58 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[CMIS]]></category>
		<category><![CDATA[Content management]]></category>
		<category><![CDATA[Services]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[content management interoperability services]]></category>
		<category><![CDATA[ECM]]></category>
		<category><![CDATA[interop]]></category>
		<category><![CDATA[standard]]></category>
		<category><![CDATA[webinar]]></category>

		<guid isPermaLink="false">http://craigrandall.net/archives/2008/09/cmis-webinar/</guid>
		<description><![CDATA[TweetI apologize for the short notice, but I will be presenting a webinar on Content Management Interoperability Services (CMIS) this Thursday. Registration is still open: http://www.emc.com/events/2008/q3/09-18-08-cmis-launch.htm. I hope that you can not only listen to the presentation but also participate actively in the Q&#38;A portion. If you cannot participate but are still interested in CMIS, [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton441" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FpcGveH&amp;via=craigsmusings&amp;text=CMIS%20webinar&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2008%2F09%2Fcmis-webinar%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://craigrandall.net/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><p>I apologize for the short notice, but I will be presenting a webinar on Content Management Interoperability Services (CMIS) this Thursday. Registration is still open: <a title="The New Standard that Brings Exceptional Flexibility to Enterprise Content Management" href="http://www.emc.com/events/2008/q3/09-18-08-cmis-launch.htm" target="_blank">http://www.emc.com/events/2008/q3/09-18-08-cmis-launch.htm</a>. I hope that you can not only listen to the presentation but also participate actively in the Q&amp;A portion.</p>
<p>If you cannot participate but are still interested in CMIS, I will do my best to capture the Q&amp;A in a follow-up post. Also, I believe that all those who register will receive an email with information on accessing a recording of the live event.</p>
<p>My colleague, Dave Choy, will be joining me to assist with Q&amp;A; so, please come prepared with your questions. If the blogosphere since last Wednesday (i.e. <a title="CMIS - Content Management Interoperability Services" href="http://craigrandall.net/archives/2008/09/cmis/" target="_blank">CMIS launched on 9/10</a>) is any indication, that shouldn&#8217;t be too much to ask.&nbsp; <img src='http://craigrandall.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Update (9/18/2008): Thanks to those who attended this webinar and especially to those who asked questions. The audio recording of this event is already available <a title="Audio: The New Standard that Brings Exceptional Flexibility to Enterprise Content Management" href="http://software.edgeboss.net/download/software/podcasts/080918_cmis_-_emc_webinar_audio.mp3" target="_blank">here</a>, and it does capture the Q&#038;A toward the end.</p>
<p>Update (9/19/2008): You can also replay the webcast and download a PDF rendition of the slides <a title="EMC Webcast: CMIS - The New Standard that Brings Exceptional Flexibility to ECM" href="http://info.emc.com/mk/get/DAP_RE?P.ctp_program_execution.Source_ID=16706" target="_blank">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2008/09/cmis-webinar/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://software.edgeboss.net/download/software/podcasts/080918_cmis_-_emc_webinar_audio.mp3" length="2134923" type="audio/mpeg" />
		</item>
		<item>
		<title>CMIS &#8211; Content Management Interoperability Services</title>
		<link>http://craigrandall.net/archives/2008/09/cmis/</link>
		<comments>http://craigrandall.net/archives/2008/09/cmis/#comments</comments>
		<pubDate>Wed, 10 Sep 2008 13:00:13 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[CMIS]]></category>
		<category><![CDATA[Content management]]></category>
		<category><![CDATA[Services]]></category>
		<category><![CDATA[Standards]]></category>
		<category><![CDATA[content management interoperability services]]></category>
		<category><![CDATA[ECM]]></category>
		<category><![CDATA[EMC]]></category>
		<category><![CDATA[IBM]]></category>
		<category><![CDATA[interop]]></category>
		<category><![CDATA[MSFT]]></category>
		<category><![CDATA[OASIS]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[standard]]></category>
		<category><![CDATA[WSDL]]></category>

		<guid isPermaLink="false">http://craigrandall.net/?p=377</guid>
		<description><![CDATA[TweetI am excited to (finally) say that EMC, IBM and Microsoft have announced the creation of a jointly developed interface specification called Content Management Interoperability Services, or CMIS. This is important news for the industry as CMIS uses web services to provide greater interoperability across multiple Enterprise Content Management (ECM) repositories. The current draft specification [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton377" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2Fqr6Cos&amp;via=craigsmusings&amp;text=CMIS%20%26%238211%3B%20Content%20Management%20Interoperability%20Services&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2008%2F09%2Fcmis%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://craigrandall.net/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><p>I am excited to (finally) say that <a href="http://www.emc.com/" target="_blank">EMC</a>, IBM and Microsoft have <a title="EMC, IBM and Microsoft Jointly Create First Web Services Interface Specification for Greater Interoperability of Enterprise Content Management Systems" href="http://www.emc.com/about/news/press/2008/091008-smr-content-management-interoperability-services.htm" target="_blank">announced</a> the creation of a jointly developed interface specification called <strong>Content Management Interoperability Services</strong>, or <a href="http://technorati.com/tag/content+management+interoperability+services" target="_blank">CMIS</a>. This is important news for the industry as <a href="http://technorati.com/tag/cmis" target="_blank">CMIS</a> uses web services to provide greater interoperability across multiple Enterprise Content Management (ECM) repositories.</p>
<p>The <a title="CMIS specification v0.5 (full)" href="http://community.emc.com/docs/DOC-1605" target="_blank">current draft specification</a> will be submitted to <a title="Organization for the Advancement of Structured Information Standards" href="http://www.oasis-open.org/home/index.php" target="_blank">OASIS</a> and managed by technical committee to guide it toward finalization as a standard.</p>
<p>I said &#8220;finally&#8221; above because it&#8217;s been <em>over two years</em> since I <a title="Interoperable Enterprise Content Management" href="http://craigrandall.net/archives/2006/07/iecm/" target="_blank">first talked about ECM standards</a>, admittedly (and out of legal obligation) at a high-level&#8211;followed up one year ago, <a title="Standards and ECM" href="http://craigrandall.net/archives/2007/06/standards-and-ecm/" target="_blank">here</a>. So, <em>finally</em>, all can become clear&#8230;!  <img src='http://craigrandall.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>In preparation for today&#8217;s announcement, I had the opportunity to interview <a href="http://www.forrester.com/rb/analyst/kyle_mcnabb" target="_blank">Kyle McNabb, Principal Analyst and Research Director at Forrester Research</a>, to share his thoughts on the announcement. You can <a title="Forrester's Kyle McNabb talks about CMIS" href="http://software.edgeboss.net/download/software/podcasts/080905_cmis_-_emc_podcast_with_forrester_research.mp3" target="_blank">listen to Kyle&#8217;s perspectives</a> as I ask him the following questions:</p>
<ul>
<li>Why is CMIS needed?</li>
<li>Why does it matter who is involved in CMIS?</li>
<li>Why is CMIS a step in the right direction?</li>
<li>What will be the near-term impact of CMIS on the market?</li>
<li>What will be the impact of CMIS to the industry as whole, including ISVs as well as organizations at the enterprise or department levels? </li>
<li>What can enterprises expect in the future and how CMIS will help them over the long haul?</li>
</ul>
<p align="middle"><img src="http://craigrandall.net/images/cmis-diagram.jpg" alt="CMIS enables interoperable content applications" /></p>
<p>One of the impacts Kyle sees as a result of CMIS particularly resonates with me: <strong>separation of content repositories from content-centric applications</strong> in a manner similar to how <a title="Structured Query Language" href="http://en.wikipedia.org/wiki/SQL" target="_blank">SQL</a> standardization enabled separation of the relational database from data-centric applications. Entirely new classes of applications (e.g. <a title="Enterprise Resource Planning" href="http://en.wikipedia.org/wiki/Enterprise_resource_planning" target="_blank">ERP</a>) emerged with the arrival of SQL, and I&#8217;m optimistic about the <em>same</em> kind of <em>potential</em> emergence with the announcement of CMIS.</p>
<p>Frankly, I agree with Kyle&#8217;s pragmatic assessment of expectation and timeline. I also believe it will take time before we see new classes of content-centric applications emerge, but CMIS is, in my opinion, a step in the right direction.</p>
<p>As with any significant industry announcement, I expect to see plenty of press coverage by those companies involved, by analysts, etc. I&#8217;m also looking forward to what my EMC colleagues have to say about CMIS (e.g. <a href="http://www.corneliadavis.com/blog/" target="_blank">Cornelia Davis</a>, <a href="http://www.nevertalkwhenyoucannod.com/" target="_blank">Andrew Chapman</a>, <a href="http://flickerdown.com/" target="_blank">Dave Graham</a>, <a href="http://lensblog.typepad.com/" target="_blank">Len Devanna</a>, <a href="http://chucksblog.typepad.com/" target="_blank">Chuck Hollis</a>, and <a href="http://marksblog.emc.com/" target="_blank">Mark Lewis</a>).</p>
<p>I encourage you to <a title="EDN Labs - Content Management Interoperability Services (CMIS)" href="http://community.emc.com/community/labs/cmis" target="_blank">learn more about CMIS on the EMC Developer Network</a>. For example, you can <a title="CMIS specification v0.5 (full)" href="http://community.emc.com/docs/DOC-1605" target="_blank">download</a> the complete set of WSDL/XSD documents for the SOAP binding as well as schemas and example XML documents for the REST binding. You can also <a title="CMIS: Defining Web Services for Sharing Information among Disparate Repositories" href="http://community.emc.com/docs/DOC-1606" target="_blank">download</a> a whitepaper that details technology concepts and business considerations involved with CMIS.</p>
<p>This first post on CMIS is intended to set the stage for deeper conversations about the specification, its domain model, its service model, and what its impact can become. So, if you have questions, please don&#8217;t hesitate to leave a comment here or otherwise join the conversation.</p>
<p>Update (today):<br />
(1) Chuck Hollis has posted his thoughts on <a title="CMIS -- It's Not JAS" href="http://chucksblog.typepad.com/chucks_blog/2008/09/cmis----its-not.html" target="_blank">why CMIS is not JAS (just another standard)</a>. Good reading.<br />
(2) Andrew Chapman has posted his thoughts (er, introduced a new word) on <a title="CMIS – Another SharePoint Desilofication Solution?" href="http://nevertalkwhenyoucannod.com/2008/09/10/content-management-interoperability-services-cmis-ndash-another-sharepoint-desilofication-solution.aspx" target="_blank">potential SharePoint <em>de-silofication</em> driven by CMIS</a>. Another good read.</p>
<p>Update (9/12/2008):<br />
(1) <a title="Proposed Charter for OASIS Content Management Interoperability Services (CMIS) TC" href="http://xml.coverpages.org/OASIS-CMIS-CharterProposal.html#n1b" target="_blank">OASIS Proposed Charter for CMIS TC</a><br />
(2) Mark Lewis <a title="Episode 72: The Commoditization of Content Management?" href="http://marksblog.emc.com/2008/09/episode-72-the.html" target="_blank">addresses commoditization questions raised by CMIS</a>.</p>
<p>Update (9/14/2008): <a title="Vendors Publish Content Management Interoperability Services (CMIS) Standard" href="http://xml.coverpages.org/ni2008-09-10-a.html" target="_blank">OASIS coverage of CMIS news</a></p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2008/09/cmis/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
<enclosure url="http://software.edgeboss.net/download/software/podcasts/080905_cmis_-_emc_podcast_with_forrester_research.mp3" length="13936375" type="audio/mpeg" />
		</item>
		<item>
		<title>Developing with DFS in an IDE</title>
		<link>http://craigrandall.net/archives/2008/09/developing-with-dfs-in-an-ide/</link>
		<comments>http://craigrandall.net/archives/2008/09/developing-with-dfs-in-an-ide/#comments</comments>
		<pubDate>Wed, 03 Sep 2008 15:27:21 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Content management]]></category>
		<category><![CDATA[DFS]]></category>
		<category><![CDATA[Composer]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[ECS]]></category>
		<category><![CDATA[SDK]]></category>
		<category><![CDATA[WTP]]></category>

		<guid isPermaLink="false">http://craigrandall.net/archives/2008/09/developing-with-dfs-in-an-ide/</guid>
		<description><![CDATA[TweetMy friend and colleague Paul Warren recently posted content that talks about the creation of Enterprise Content Services (like those in DFS) in the context of an integrated development environment (IDE): Creating DFS services using Documentum Composer Creating DFS services using the Eclipse IDE for Java EE Developers WTP support is something the Composer team [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton373" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FoUJdXZ&amp;via=craigsmusings&amp;text=Developing%20with%20DFS%20in%20an%20IDE&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2008%2F09%2Fdeveloping-with-dfs-in-an-ide%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://craigrandall.net/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><p>My friend and colleague <a title="Paul's blog" href="http://paulcwarren.wordpress.com/" target="_blank">Paul Warren</a> recently posted content that talks about the creation of Enterprise Content Services (like those in DFS) in the context of an integrated development environment (IDE):</p>
<ul>
<li><a href="http://paulcwarren.wordpress.com/2008/08/11/creating-dfs-services-using-documentum-composer/" target="_blank">Creating DFS services using Documentum Composer</a></li>
<li><a href="http://paulcwarren.wordpress.com/2008/08/29/using-wtp-to-create-dfs-services/" target="_blank">Creating DFS services using the Eclipse IDE for Java EE Developers</a></li>
</ul>
<p><a title="Eclipse Web Tools Platform (WTP)" href="http://www.eclipse.org/webtools/" target="_blank">WTP</a> support is something the Composer team is hard at work on, and this will change the nature of DFS tooling, too.</p>
<p>Essentially we&#8217;re working together to promote more standard developer workflow and development lifecycle by embracing tools developers already use to build services. While WTP assumes Eclipse and Composer is indeed powered by Eclipse, that doesn&#8217;t mean that Eclipse is the only IDE for Enterprise Content Service development. We&#8217;re working on changing the nature of the DFS SDK, too, to better emphasize, for example, <a title="2-part post: DFS Object service consumer" href="http://craigrandall.net/archives/2008/07/dfs-object-service-consumer-2a/" target="_blank">how to use Visual Studio and Windows Communication Foundation directly to build service consumers</a>.</p>
<p>What tools, including IDEs, do you use to build Enterprise Content Services and ECS-based solutions?</p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2008/09/developing-with-dfs-in-an-ide/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Documentum 6.5 with services in mind</title>
		<link>http://craigrandall.net/archives/2008/07/documentum-65-with-services-in-mind/</link>
		<comments>http://craigrandall.net/archives/2008/07/documentum-65-with-services-in-mind/#comments</comments>
		<pubDate>Thu, 24 Jul 2008 16:21:59 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Content management]]></category>
		<category><![CDATA[DFS]]></category>
		<category><![CDATA[D6.5]]></category>
		<category><![CDATA[ECM]]></category>
		<category><![CDATA[ECS]]></category>

		<guid isPermaLink="false">http://craigrandall.net/archives/2008/07/documentum-65-with-services-in-mind/</guid>
		<description><![CDATA[TweetYou may have seen this week&#8217;s press release (PR) concerning the launch of the EMC Documentum 6.5 platform. Given that this blog is referenced in the PR&#8217;s sidebar, I thought it would be appropriate for me to offer my perspective on this release. When the Documentum Foundation Services (DFS) team first embarked on its mission [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton354" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FqQwxLT&amp;via=craigsmusings&amp;text=Documentum%206.5%20with%20services%20in%20mind&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2008%2F07%2Fdocumentum-65-with-services-in-mind%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://craigrandall.net/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><p>You may have seen this week&#8217;s press release (PR) concerning the <a title="Content Management Meets Web 2.0 Without Enterprise Risk&mdash;EMC Delivers Version 6.5 Of Documentum ECM Suite" href="http://www.emc.com/about/news/press/2008/documentum-delivers-d65.htm" target="_blank">launch of the EMC Documentum 6.5 platform</a>. Given that this blog is referenced in the PR&#8217;s sidebar, I thought it would be appropriate for me to offer my perspective on this release.</p>
<p>When the <a href="http://craigrandall.net/archives/2007/05/documentum-foundation-services/">Documentum Foundation Services</a> (DFS) team first embarked on its mission to better service-orient the Documentum platform, I suggested that, over time, the very focus of our daily work&#8211;services and common service infrastructure&#8211;would become less &#8220;talked about.&#8221; I suggested that services alone deliver less value than <em>services in the context of processes and processes in the context of solutions</em>. </p>
<p>So, ultimately EMC has to deliver relevant, robust solutions to market much more than just web services. This is exactly the focus of the EMC PR&#8211;and each solution discussed is built using Enterprise Content Services (ECS).</p>
<p>Take <a title="CenterStage Frequently Asked Questions (FAQ)" href="http://developer-beta.emc.com/docs/DOC-1123" target="_blank">CenterStage</a> (aka &#8220;Magellan&#8221;), <a href="http://www.emc.com/products/detail/software/media-workspace.htm" target="_blank">Media WorkSpace</a>, and My Documentum as D6.5 solution examples. One user experience differs fairly significantly from another user experience (e.g. <a title="CSE screen capture" href="http://www.emc.com/images/about/news/d65/emc-dctm-centerstage-folderhover.jpg" target="_blank">CenterStage Essentials</a> versus <a title="MWS screen capture" href="http://www.emc.com/images/about/news/d65/emc-dctm-media-workspace-65.jpg" target="_blank">Media WorkSpace</a>). Looking under the covers, one implementation (i.e. presentation layer and application behavior) also differs from another implementation. However, common business logic is provided to each solution via a consistent set of services (e.g. Object, Query, Schema, Access Control, etc.).</p>
<p>Each solution is worth its own coverage, but I will allow solution teams to accomplish this (e.g. content like <a title="Key Trends and Vision for Collaboration and Social Networking..." href="http://developer-beta.emc.com/blogs/kw/2008/07/18/key-trends-and-vision-for-collaboration-and-social-networking" target="_blank">this</a>). </p>
<p>Instead, I&#8217;d like to focus on the progress achieved in the D6.5 release where services and common service infrastructure are concerned:</p>
<p>1. <strong>The number of out-the-box Enterprise Content Services (ECS) in DFS has more than doubled in 6.5, from the six to 13. The total number of ECS across D6.5 has grown nearly fourfold, from six to 23</strong>.</p>
<ul>
<li>Six original services with DFS 6.0: Object (enhanced in 6SP1 to support external objects; enhanced again in 6.5 to support aspects), Query, Schema, Search (enhanced functionality in 6.5 for clusters), Version Control (enhanced in 6.5 to support aspects), Workflow</li>
<li>Seven new services with DFS 6.5: Access Control, Analytics, Comment, Lifecycle, Query Store, Task Management (<a title="Web Services Human Task (WS-HumanTask) version 1.0" href="http://xml.coverpages.org/WS-HumanTask-V1-200706.pdf" target="_blank">WS-HumanTask</a>), Virtual Document</li>
<li>Plus 10 additional, new services beyond (i.e. not packaged with) DFS 6.5:<br />Content Delivery, Electronic Signature, ERP Integration (SAP), Federated Proxy, Formal Record, Physical Records Library, (Records Management) Policy, (Content Transformation) Profile, Retention Markup, (Content) Transformation</li>
</ul>
<p>Bottom line #1: there are many more services with D6.5 from which to compose content-centric applications.</p>
<p>2. <strong>Common service infrastructure has been significantly enhanced at the same time</strong>. For example:</p>
<ul>
<li>Contract first (or WSDL first) development of services is supported in addition to code first development.</li>
<li>Design time discovery of services is supported via a new service catalog or an existing <a title="UDDI OASIS Standard portal" href="http://uddi.xml.org/" target="_blank">UDDI</a> v2 compliant service registry. Classification of service occurs via the concept of catalogs and categories, by default.</li>
<li>Modularity has increased at the binary (e.g. JAR file) level to promote better composition (i.e. only take what you need).</li>
<li>Single sign-on (SSO) support has been improved.</li>
</ul>
<p>Bottom line #2: you have more options now to provide, discover and consume services.</p>
<p>Certainly there is a lot more to each bullet point above, and I plan to drill down into several points in future posts.</p>
<p>&#8230;and I didn&#8217;t even use the term &#8220;Web 2.0&#8243;&#8230;until now. <img src='http://craigrandall.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2008/07/documentum-65-with-services-in-mind/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>DFS Object service consumer #2b</title>
		<link>http://craigrandall.net/archives/2008/07/dfs-object-service-consumer-2b/</link>
		<comments>http://craigrandall.net/archives/2008/07/dfs-object-service-consumer-2b/#comments</comments>
		<pubDate>Wed, 16 Jul 2008 18:07:13 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Content management]]></category>
		<category><![CDATA[DFS]]></category>
		<category><![CDATA[SDK]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[WCF]]></category>

		<guid isPermaLink="false">http://craigrandall.net/archives/2008/07/dfs-object-service-consumer-2b/</guid>
		<description><![CDATA[TweetIn our previous conversation, we left with a missing header to resolve. This post will resolve this issue and wrap-up the sample DFS Object service consumer based on direct proxy via Visual Studio/WCF. First, we need to introduce a new internal class, ServiceContextHeader, as follows: internal class ServiceContextHeader : MessageHeader { private string repositoryName = [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton353" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FonATAm&amp;via=craigsmusings&amp;text=DFS%20Object%20service%20consumer%20%232b&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2008%2F07%2Fdfs-object-service-consumer-2b%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://craigrandall.net/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><p>In our <a title="DFS Object service consumer #2a" href="http://craigrandall.net/archives/2008/07/dfs-object-service-consumer-2a/" target="_blank">previous conversation</a>, we left with a missing header to resolve. This post will resolve this issue and wrap-up the sample DFS Object service consumer based on direct proxy via Visual Studio/WCF.</p>
<p>First, we need to introduce a new internal class, ServiceContextHeader, as follows:</p>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
</p>
<pre class="csharpcode"><span class="kwrd">internal</span> <span class="kwrd">class</span> ServiceContextHeader : MessageHeader
{
    <span class="kwrd">private</span> <span class="kwrd">string</span> repositoryName = <span class="kwrd">null</span>;
    <span class="kwrd">private</span> <span class="kwrd">string</span> userName = <span class="kwrd">null</span>;
    <span class="kwrd">private</span> <span class="kwrd">string</span> password = <span class="kwrd">null</span>;

    <span class="kwrd">public</span> ServiceContextHeader(<span class="kwrd">string</span> repositoryName, <span class="kwrd">string</span> userName, <span class="kwrd">string</span> password)
    {
        <span class="kwrd">this</span>.repositoryName = repositoryName;
        <span class="kwrd">this</span>.userName = userName;
        <span class="kwrd">this</span>.password = password;
    }

    <span class="kwrd">protected</span> <span class="kwrd">override</span> <span class="kwrd">void</span> OnWriteHeaderContents(XmlDictionaryWriter writer, MessageVersion messageVersion)
    {
        <span class="rem">// Please note that there can be more to a ServiceContext instance than</span>
        <span class="rem">// what this intentionally simple example specifies. This message header</span>
        <span class="rem">// implementation doesn't cover all aspects of ServiceContext.</span>

        <span class="rem">// In order to proxy ServiceContext, you must first establish a service</span>
        <span class="rem">// reference to the DFS runtime Context Registry service.</span>
        ServiceContext serviceContext = <span class="kwrd">new</span> ServiceContext();
        RepositoryIdentity repositoryIdentity = <span class="kwrd">new</span> RepositoryIdentity();
        repositoryIdentity.repositoryName = repositoryName;
        repositoryIdentity.userName = userName;
        repositoryIdentity.password = password;
        serviceContext.Identities = <span class="kwrd">new</span> Identity[1];
        serviceContext.Identities[0] = repositoryIdentity;

        <span class="rem">// We haven't communicated with the DFS runtime Context Registry service;</span>
        <span class="rem">// so we don't have a token to "write," nor are we specifiying locale in </span>
        <span class="rem">// our ServiceContext instance.</span>

        StringWriter sw = <span class="kwrd">new</span> StringWriter();
        XmlSerializer xs = <span class="kwrd">new</span> XmlSerializer(<span class="kwrd">typeof</span>(ServiceContext));
        xs.Serialize(sw, serviceContext);
        String xml = sw.ToString();
        sw.Close();

        XmlDocument document = <span class="kwrd">new</span> XmlDocument();
        document.LoadXml(xml);

        <span class="kwrd">foreach</span> (XmlNode node <span class="kwrd">in</span> document.LastChild.ChildNodes)
        {
            XmlElement element = (XmlElement)node;
            XmlReader reader = <span class="kwrd">new</span> XmlNodeReader(element);
            writer.WriteNode(reader, <span class="kwrd">true</span>);
        }
    }

    <span class="kwrd">public</span> <span class="kwrd">override</span> <span class="kwrd">string</span> Name
    {
        get { <span class="kwrd">return</span> <span class="str">"ServiceContext"</span>; }
    }

    <span class="kwrd">public</span> <span class="kwrd">override</span> <span class="kwrd">string</span> Namespace
    {
        get { <span class="kwrd">return</span> <span class="str">"http://context.core.datamodel.fs.documentum.emc.com/"</span>; }
    }
}</pre>
<p>Next, we need to &#8220;inject&#8221; this class into our application&#8217;s request message processing. So, we need wrap our original call to ObjectService.get() as follows:</p>
<pre class="csharpcode">DataPackage dataPackage = <span class="kwrd">null</span>;
<span class="kwrd">using</span> (OperationContextScope scope = <span class="kwrd">new</span> OperationContextScope(objectService.InnerChannel))
{
    OperationContext.Current.OutgoingMessageHeaders.Add(<span class="kwrd">new</span> ServiceContextHeader(repositoryName, userName, password));

    dataPackage = objectService.get(objectIdentitySet, operationOptions);
}</pre>
<p>In a less contrived context (i.e. your production application), there are other approaches to be considered, and I recommend that you at least read <a title="Adding headers to a call" href="http://blogs.msdn.com/drnick/archive/2008/07/07/adding-headers-to-a-call.aspx" target="_blank">Nick Allen&#8217;s post on the subject</a>.</p>
<p>Now, let&#8217;s re-run the modified example and examine the SOAP request message:</p>
<pre class="csharpcode"><span class="kwrd">&lt;</span><span class="html">s:Envelope</span> <span class="attr">xmlns:s</span><span class="kwrd">="http://schemas.xmlsoap.org/soap/envelope/"</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">s:Header</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">ServiceContext</span> <span class="attr">xmlns</span><span class="kwrd">="http://context.core.datamodel.fs.documentum.emc.com/"</span><span class="kwrd">&gt;</span>
            <span class="kwrd">&lt;</span><span class="html">Identities</span> <span class="attr">xsi:type</span><span class="kwrd">="RepositoryIdentity"</span> <span class="attr">userName</span><span class="kwrd">="_USER_"</span> <span class="attr">password</span><span class="kwrd">="_PWD_"</span> <span class="attr">repositoryName</span><span class="kwrd">="_DOCBASE_"</span> <span class="attr">xmlns:xsi</span><span class="kwrd">="http://www.w3.org/2001/XMLSchema-instance"</span><span class="kwrd">/&gt;</span>
        <span class="kwrd">&lt;/</span><span class="html">ServiceContext</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">s:Header</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">s:Body</span> <span class="attr">xmlns:xsi</span><span class="kwrd">="http://www.w3.org/2001/XMLSchema-instance"</span> <span class="attr">xmlns:xsd</span><span class="kwrd">="http://www.w3.org/2001/XMLSchema"</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">get</span> <span class="attr">xmlns</span><span class="kwrd">="http://core.services.fs.documentum.emc.com/"</span><span class="kwrd">&gt;</span>
            <span class="kwrd">&lt;</span><span class="html">forObjects</span> <span class="attr">isInternal</span><span class="kwrd">="false"</span> <span class="attr">xmlns</span><span class="kwrd">=""</span><span class="kwrd">&gt;</span>
                <span class="kwrd">&lt;</span><span class="html">Identities</span> <span class="attr">repositoryName</span><span class="kwrd">="_DOCBASE_"</span> <span class="attr">valueType</span><span class="kwrd">="OBJECT_ID"</span> <span class="attr">xmlns</span><span class="kwrd">="http://core.datamodel.fs.documentum.emc.com/"</span><span class="kwrd">&gt;</span>
                    <span class="kwrd">&lt;</span><span class="html">ObjectId</span> <span class="attr">id</span><span class="kwrd">="09003023800037c6"</span><span class="kwrd">/&gt;</span>
                <span class="kwrd">&lt;/</span><span class="html">Identities</span><span class="kwrd">&gt;</span>
            <span class="kwrd">&lt;/</span><span class="html">forObjects</span><span class="kwrd">&gt;</span>
            <span class="kwrd">&lt;</span><span class="html">options</span> <span class="attr">xmlns</span><span class="kwrd">=""</span><span class="kwrd">&gt;</span>
                <span class="kwrd">&lt;</span><span class="html">Properties</span> <span class="attr">isInternal</span><span class="kwrd">="false"</span> <span class="attr">xmlns</span><span class="kwrd">="http://core.datamodel.fs.documentum.emc.com/"</span><span class="kwrd">/&gt;</span>
                <span class="kwrd">&lt;</span><span class="html">Profiles</span> <span class="attr">xsi:type</span><span class="kwrd">="q1:PropertyProfile"</span> <span class="attr">isProcessIncludedUnknown</span><span class="kwrd">="false"</span> <span class="attr">filterMode</span><span class="kwrd">="SPECIFIED_BY_INCLUDE"</span> <span class="attr">xmlns</span><span class="kwrd">="http://core.datamodel.fs.documentum.emc.com/"</span> <span class="attr">xmlns:q1</span><span class="kwrd">="http://profiles.core.datamodel.fs.documentum.emc.com/"</span><span class="kwrd">&gt;</span>
                    <span class="kwrd">&lt;</span><span class="html">q1:IncludeProperties</span><span class="kwrd">&gt;</span>object_name<span class="kwrd">&lt;/</span><span class="html">q1:IncludeProperties</span><span class="kwrd">&gt;</span>
                <span class="kwrd">&lt;/</span><span class="html">Profiles</span><span class="kwrd">&gt;</span>
            <span class="kwrd">&lt;/</span><span class="html">options</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;/</span><span class="html">get</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">s:Body</span><span class="kwrd">&gt;</span>
<span class="kwrd">&lt;/</span><span class="html">s:Envelope</span><span class="kwrd">&gt;</span></pre>
<p></p>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>Much better! And, as important, the dialog reveals the same object name as the same example based on the DFS SDK .NET assemblies.</p>
<p>You can download the Visual Studio 2008-based solution for today’s (fully resolved) sample <a title="ObjectServiceConsumer.zip" href="https://community.emc.com/docs/DOC-2590" target="_blank">here</a>.</p>
<p>I hope that this series of posts on how the EMC Documentum platform, and especially DFS, supports Microsoft-oriented developers has been helpful.</p>
<p>Cheers&#8230; <img src='http://craigrandall.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Update 8/9/2008: There is actually one additional change that is required to properly retrieve the object&#8217;s name for presentation on the form. In the <a href="http://craigrandall.net/archives/2008/07/dfs-object-service-consumer-2a/" target="_blank">previous post</a>, after calling ObjectService.get() and finding the &#8220;object_name&#8221; property, our form label was set as follows:</p>
<pre class="csharpcode">    lblObjName.Text = property.ToString();</pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>However, this needs to change in order to avoid prefacing the string value with ToString() content:</p>
<pre class="csharpcode">    StringProperty s = property <span class="kwrd">as</span> StringProperty;
    lblObjName.Text = s.Value;</pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>This sample has been updated to include this change. Kudos to John Sweeney for the assist.</p>
<p>OK, back to the Olympics&#8230; <img src='http://craigrandall.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2008/07/dfs-object-service-consumer-2b/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>DFS Object service consumer #2a</title>
		<link>http://craigrandall.net/archives/2008/07/dfs-object-service-consumer-2a/</link>
		<comments>http://craigrandall.net/archives/2008/07/dfs-object-service-consumer-2a/#comments</comments>
		<pubDate>Wed, 16 Jul 2008 16:20:25 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Content management]]></category>
		<category><![CDATA[DFS]]></category>
		<category><![CDATA[SDK]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[WCF]]></category>

		<guid isPermaLink="false">http://craigrandall.net/archives/2008/07/dfs-object-service-consumer-2a/</guid>
		<description><![CDATA[TweetRather than leverage the DFS SDK-based .NET assemblies to consume DFS services, some may prefer to leverage Visual Studio&#8217;s ability to proxy WSDL/XSD directly and choose instead to involve the Windows Communication Foundation (WCF) designer via Add Service Reference&#8230; In this post, I will discuss just such a sample application. As in the previous example, [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton352" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FqwsgOO&amp;via=craigsmusings&amp;text=DFS%20Object%20service%20consumer%20%232a&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2008%2F07%2Fdfs-object-service-consumer-2a%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://craigrandall.net/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><p>Rather than <a title="DFS Object service consumer #1" href="http://craigrandall.net/archives/2008/07/dfs-object-service-consumer-1/" target="_blank">leverage the DFS SDK-based .NET assemblies to consume DFS services</a>, some may prefer to leverage Visual Studio&#8217;s ability to proxy WSDL/XSD directly and choose instead to involve the Windows Communication Foundation (WCF) designer via Add Service Reference&#8230; In this post, I will discuss just such a sample application.</p>
<p>As in the <a title="DFS Object service consumer #1" href="http://craigrandall.net/archives/2008/07/dfs-object-service-consumer-1/" target="_blank">previous example</a>, we&#8217;ll build the same Windows Forms application to accomplish the same task (i.e. object name retrieval given object id); however we&#8217;ll ignore the .NET productivity layer and proxy the Object service contract directly using Visual Studio and WCF.</p>
<p>After launching Visual Studio, choosing File | New | Project… and creating a new <em>Windows Forms Application</em> project called ObjectServiceConsumer, go to the Solution Explorer, select the project node, right-click and choose Add Service Reference…</p>
<p align="center"><img src="http://craigrandall.net/dfs/add-object-svc-ref.jpg"/> </p>
<p>Enter the address for the DFS Object service instance to proxy (e.g. the same instance used in the previous example&#8217;s browser-based accessibility test). Click Go, and you should see something similar to the dialog captured above. Set the namespace for this reference and choose OK.</p>
<p>Return back to Visual Studio, double-click Form1.cs, after building the same dialog as in the <a title="DFS Object service consumer #1" href="http://craigrandall.net/archives/2008/07/dfs-object-service-consumer-1/" target="_blank">previous example</a>, double-click on the Retrieve button. This will tell Visual Studio to transition from (Windows Forms) designer mode to code editing mode.  </p>
<p>Implement your button click handler as follows:</p>
<pre class="csharpcode"><span class="kwrd">string</span> repositoryName = txtbxRepoName.Text;
<span class="kwrd">string</span> userName = txtbxUserName.Text;
<span class="kwrd">string</span> password = txtbxPwd.Text;
<span class="kwrd">string</span> objId = txtbxObjId.Text; <span class="rem">// e.g. a document id of 09123456789abcde</span>

<span class="kwrd">try</span>
{
    ObjectId objectId = <span class="kwrd">new</span> ObjectId();
    objectId.id = objId;
    ObjectIdentity objectIdentity = <span class="kwrd">new</span> ObjectIdentity();
    objectIdentity.Item = objectId;
    objectIdentity.repositoryName = repositoryName;
    ObjectIdentitySet objectIdentitySet = <span class="kwrd">new</span> ObjectIdentitySet();
    objectIdentitySet.Identities = <span class="kwrd">new</span> ObjectIdentity[1];
    objectIdentitySet.Identities[0] = objectIdentity;

    PropertyProfile propertyProfile = <span class="kwrd">new</span> PropertyProfile();
    propertyProfile.filterMode = PropertyFilterMode.SPECIFIED_BY_INCLUDE;
    <span class="kwrd">string</span>[] includeProperties = {<span class="str">"object_name"</span>};
    propertyProfile.IncludeProperties = includeProperties;
    OperationOptions operationOptions = <span class="kwrd">new</span> OperationOptions();
    operationOptions.Profiles = <span class="kwrd">new</span> Profile[1];
    operationOptions.Profiles[0] = propertyProfile;

    DataPackage dataPackage = objectService.get(objectIdentitySet, operationOptions);

    Property[] properties = dataPackage.DataObjects[0].Properties.Properties;
    <span class="kwrd">foreach</span> (Property property <span class="kwrd">in</span> properties)
    {
        <span class="kwrd">if</span> (property.name.Equals(<span class="str">"object_name"</span>))
        {
            lblObjName.Text = property.ToString();
        }
    }

    Console.WriteLine(<span class="str">"Successfully retrieved object name for object id"</span> + <span class="str">"'"</span> + objId + <span class="str">"': "</span> + lblObjName.Text);
}
<span class="kwrd">catch</span> (Exception ex)
{
    lblObjName.Text = <span class="str">"&lt;error&gt;"</span>;
    Console.WriteLine(ex.StackTrace);
    Console.WriteLine(<span class="str">"Failed to retrieve object name with exception "</span> + ex.Message);
}
<span class="kwrd">finally</span>
{
    Console.WriteLine(<span class="str">"Your cleanup logic goes here."</span>);
}</pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>A few points concerning the above code: </p>
<ul>
<li>There is a private field on the Form class, objectService, that is of type ObjectServicePortClient (i.e. from the WCF-generated proxy code) and is set to null initially.
</li>
<li>In the Form class constructor, after the standard Windows Forms InitializeComponent(), objectService is set as follows: new ObjectServicePortClient(&#8220;ObjectServicePort&#8221;);
</li>
<li>&#8220;ObjectServicePort&#8221; is a named binding in the WCF-generated proxy code (i.e. declared within app.config).
</li>
<li>As in the previous example, I’m using a pre-release version of DFS 6.5 for this example, but I’m not using anything that isn’t available in DFS 6.0 SP1–this is a very simple example by design.
</li>
<li>You should notice some cosmetic differences between the code above and the code <a title="DFS Object service consumer #1" href="http://craigrandall.net/archives/2008/07/dfs-object-service-consumer-1/" target="_blank">here</a> (e.g. more verbose, fewer conveniences, etc.).</li>
</ul>
<p>You should now be able to build your application and run it. When you enter a valid object id for the specified repository connection, you should see the object name replace “&lt;tbd&gt;” on the dialog.</p>
<p>But, <em>you don&#8217;t</em>. Why?</p>
<p>Well, first of all, if you are running your application server with a console window for output message capture, you likely saw the following message:</p>
<p>. . . com.emc.documentum.fs.rt.SerializableException: <u>Authorization failed, could not find identities in service context with token</u> &#8220;temporary/127<br />.0.0.1-1216079837407&#8211;1167916486618885387&#8243;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; at com.emc.documentum.fs.services.core.ObjectServiceWebService.get(ObjectServiceWebService.java:268) . . .
</p>
<p>Looking at the code above, it&#8217;s hopefully clear that the variables userName and password aren&#8217;t employed. (If you&#8217;re using the <a href="http://www.jetbrains.com/resharper/" target="_blank">JetBrains ReSharper</a> add-in for Visual Studio, the IDE (plugin) actually visually indicates this condition.)</p>
<p>So, let&#8217;s do some detective work.</p>
<p>Using a web debugging proxy (e.g. <a title="Charles Web Debugging Proxy" href="http://www.charlesproxy.com/" target="_blank">Charles</a>), re-run the above code (i.e. with port forwarding in place). After valid data entry and clicking the Retrieve button, you should see an entry in your web debugging proxy session. Examine the SOAP request message (i.e. &#8220;pretty printed&#8221; for readability&#8217;s sake):</p>
<pre class="csharpcode"><span class="kwrd">&lt;</span><span class="html">s:Envelope</span> <span class="attr">xmlns:s</span><span class="kwrd">="http://schemas.xmlsoap.org/soap/envelope/"</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">s:Body</span> <span class="attr">xmlns:xsi</span><span class="kwrd">="http://www.w3.org/2001/XMLSchema-instance"</span> <span class="attr">xmlns:xsd</span><span class="kwrd">="http://www.w3.org/2001/XMLSchema"</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">get</span> <span class="attr">xmlns</span><span class="kwrd">="http://core.services.fs.documentum.emc.com/"</span><span class="kwrd">&gt;</span>
            <span class="kwrd">&lt;</span><span class="html">forObjects</span> <span class="attr">isInternal</span><span class="kwrd">="false"</span> <span class="attr">xmlns</span><span class="kwrd">=""</span><span class="kwrd">&gt;</span>
                <span class="kwrd">&lt;</span><span class="html">Identities</span> <span class="attr">repositoryName</span><span class="kwrd">="_DOCBASE_"</span> <span class="attr">xmlns</span><span class="kwrd">="http://core.datamodel.fs.documentum.emc.com/"</span><span class="kwrd">&gt;</span>
                    <span class="kwrd">&lt;</span><span class="html">ObjectId</span> <span class="attr">id</span><span class="kwrd">="09003023800024ec"</span><span class="kwrd">/&gt;</span>
                <span class="kwrd">&lt;/</span><span class="html">Identities</span><span class="kwrd">&gt;</span>
            <span class="kwrd">&lt;/</span><span class="html">forObjects</span><span class="kwrd">&gt;</span>
            <span class="kwrd">&lt;</span><span class="html">options</span> <span class="attr">xmlns</span><span class="kwrd">=""</span><span class="kwrd">&gt;</span>
                <span class="kwrd">&lt;</span><span class="html">Profiles</span> <span class="attr">xsi:type</span><span class="kwrd">="q1:PropertyProfile"</span> <span class="attr">isProcessIncludedUnknown</span><span class="kwrd">="false"</span> <span class="attr">xmlns</span><span class="kwrd">="http://core.datamodel.fs.documentum.emc.com/"</span> <span class="attr">xmlns:q1</span><span class="kwrd">="http://profiles.core.datamodel.fs.documentum.emc.com/"</span><span class="kwrd">&gt;</span>
                    <span class="kwrd">&lt;</span><span class="html">q1:IncludeProperties</span><span class="kwrd">&gt;</span>object_name<span class="kwrd">&lt;/</span><span class="html">q1:IncludeProperties</span><span class="kwrd">&gt;</span>
                <span class="kwrd">&lt;/</span><span class="html">Profiles</span><span class="kwrd">&gt;</span>
            <span class="kwrd">&lt;/</span><span class="html">options</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;/</span><span class="html">get</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">s:Body</span><span class="kwrd">&gt;</span>
<span class="kwrd">&lt;/</span><span class="html">s:Envelope</span><span class="kwrd">&gt;</span></pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>Next, go back to the <a title="DFS Object service consumer #1" href="http://craigrandall.net/archives/2008/07/dfs-object-service-consumer-1/" target="_blank">previous example</a>, and re-run it to capture its SOAP request message. Before you hit Run, though, comment out the following line of code:</p>
<pre class="csharpcode">context = contextFactory.Register(context);</pre>
<p><style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>(We&#8217;ll talk more about this in a future post.)</p>
<p>The DFS SDK .NET assemblies-based application issues the following SOAP request message:</p>
<pre class="csharpcode"><span class="kwrd">&lt;</span><span class="html">s:Envelope</span> <span class="attr">xmlns:s</span><span class="kwrd">="http://schemas.xmlsoap.org/soap/envelope/"</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">s:Header</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">ServiceContext</span> <span class="attr">token</span><span class="kwrd">="temporary/127.0.0.1-1216195928765-692634301"</span> <span class="attr">xmlns</span><span class="kwrd">="http://context.core.datamodel.fs.documentum.emc.com/"</span><span class="kwrd">&gt;</span>
            <span class="kwrd">&lt;</span><span class="html">Identities</span> <span class="attr">xsi:type</span><span class="kwrd">="RepositoryIdentity"</span> <span class="attr">userName</span><span class="kwrd">="_USER_"</span> <span class="attr">password</span><span class="kwrd">="_PWD_"</span> <span class="attr">repositoryName</span><span class="kwrd">="_DOCBASE_"</span> <span class="attr">domain</span><span class="kwrd">=""</span> <span class="attr">xmlns:xsi</span><span class="kwrd">="http://www.w3.org/2001/XMLSchema-instance"</span><span class="kwrd">/&gt;</span>
            <span class="kwrd">&lt;</span><span class="html">RuntimeProperties</span><span class="kwrd">/&gt;</span>
        <span class="kwrd">&lt;/</span><span class="html">ServiceContext</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">s:Header</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">s:Body</span> <span class="attr">xmlns:xsi</span><span class="kwrd">="http://www.w3.org/2001/XMLSchema-instance"</span> <span class="attr">xmlns:xsd</span><span class="kwrd">="http://www.w3.org/2001/XMLSchema"</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;</span><span class="html">get</span> <span class="attr">xmlns</span><span class="kwrd">="http://core.services.fs.documentum.emc.com/"</span><span class="kwrd">&gt;</span>
            <span class="kwrd">&lt;</span><span class="html">forObjects</span> <span class="attr">isInternal</span><span class="kwrd">="false"</span> <span class="attr">xmlns</span><span class="kwrd">=""</span><span class="kwrd">&gt;</span>
                <span class="kwrd">&lt;</span><span class="html">Identities</span> <span class="attr">repositoryName</span><span class="kwrd">="_DOCBASE_"</span> <span class="attr">valueType</span><span class="kwrd">="OBJECT_ID"</span> <span class="attr">xmlns</span><span class="kwrd">="http://core.datamodel.fs.documentum.emc.com/"</span><span class="kwrd">&gt;</span>
                    <span class="kwrd">&lt;</span><span class="html">ObjectId</span> <span class="attr">id</span><span class="kwrd">="09003023800037c6"</span><span class="kwrd">/&gt;</span>
                <span class="kwrd">&lt;/</span><span class="html">Identities</span><span class="kwrd">&gt;</span>
            <span class="kwrd">&lt;/</span><span class="html">forObjects</span><span class="kwrd">&gt;</span>
            <span class="kwrd">&lt;</span><span class="html">options</span> <span class="attr">xmlns</span><span class="kwrd">=""</span><span class="kwrd">&gt;</span>
                <span class="kwrd">&lt;</span><span class="html">Properties</span> <span class="attr">xmlns</span><span class="kwrd">="http://core.datamodel.fs.documentum.emc.com/"</span><span class="kwrd">/&gt;</span>
                <span class="kwrd">&lt;</span><span class="html">Profiles</span> <span class="attr">xsi:type</span><span class="kwrd">="q1:PropertyProfile"</span> <span class="attr">filterMode</span><span class="kwrd">="SPECIFIED_BY_INCLUDE"</span> <span class="attr">xmlns</span><span class="kwrd">="http://core.datamodel.fs.documentum.emc.com/"</span> <span class="attr">xmlns:q1</span><span class="kwrd">="http://profiles.core.datamodel.fs.documentum.emc.com/"</span><span class="kwrd">&gt;</span>
                    <span class="kwrd">&lt;</span><span class="html">q1:IncludeProperties</span><span class="kwrd">&gt;</span>object_name<span class="kwrd">&lt;/</span><span class="html">q1:IncludeProperties</span><span class="kwrd">&gt;</span>
                <span class="kwrd">&lt;/</span><span class="html">Profiles</span><span class="kwrd">&gt;</span>
            <span class="kwrd">&lt;/</span><span class="html">options</span><span class="kwrd">&gt;</span>
        <span class="kwrd">&lt;/</span><span class="html">get</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">s:Body</span><span class="kwrd">&gt;</span>
<span class="kwrd">&lt;/</span><span class="html">s:Envelope</span><span class="kwrd">&gt;</span></pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>Yep, there&#8217;s definitely a missing header in today&#8217;s sample, as coded above. <img src='http://craigrandall.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>It&#8217;s also worth noting a few things before continuing:</p>
<ul>
<li>The code above requires SSL to avoid cleartext data being sent over the wire. Of course, SSL&#8211;and replacing http://&#8230; with https://&#8230;&#8211;only provides transport-level security that is point-to-point in nature (i.e. compared with message-level security that is end-to-end in nature).</li>
<li>valueType=&#8221;OBJECT_ID&#8221; &#8211; this is missing on the &lt;Identities&gt; element in today&#8217;s example but is present in the previous example</li>
<li>&lt;Properties xmlns=&#8221;<a href="http://core.datamodel.fs.documentum.emc.com/&quot;/">http://core.datamodel.fs.documentum.emc.com/&#8221;/</a>&gt; &#8211; this is missing in today&#8217;s example but is present in the previous example</li>
<li>filterMode=&#8221;SPECIFIED_BY_INCLUDE&#8221; &#8211; this is missing on the &lt;Profiles&gt; element in today&#8217;s example but is present in the previous example</li>
<li>isProcessIncludedUnknown=&#8221;false&#8221; &#8211; this is <em>present</em> in today&#8217;s example but is missing in the <em>previous</em> example</li>
</ul>
<p>Before we solve the case of the missing header, let&#8217;s resolve the differences just listed:</p>
<pre class="csharpcode">...
ObjectIdentity objectIdentity = <span class="kwrd">new</span> ObjectIdentity();
objectIdentity.valueType = ObjectIdentityType.OBJECT_ID; <span class="rem">//FIX</span>
objectIdentity.valueTypeSpecified = <span class="kwrd">true</span>; <span class="rem">//FIX</span>
...
propertyProfile.filterMode = PropertyFilterMode.SPECIFIED_BY_INCLUDE;
propertyProfile.filterModeSpecified = <span class="kwrd">true</span>; <span class="rem">//FIX</span>
...
OperationOptions operationOptions = <span class="kwrd">new</span> OperationOptions();
...
operationOptions.Properties = <span class="kwrd">new</span> PropertySet(); <span class="rem">//FIX</span>
...</pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>As for the isProcessIncludedUnknown-based difference aforementioned, a quick read of the reference-level documentation for PropertyProfile.setProcessIncludedUnknown() is helpful: &#8220;If false, ignore any property in the includeProperties list that is not a property of the repository type. If true, throw an exception if such a property is specified in the includeProperties list. Default value is false.&#8221; That is, the WCF-generated proxy makes this default explicity in its SOAP messages; so, although the two XML messages have this difference, they are functionally equivalent.</p>
<p>Next: Leveraging WCF extensibility to add the missing header that the DFS Object service expects&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2008/07/dfs-object-service-consumer-2a/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>DFS Object service consumer #1</title>
		<link>http://craigrandall.net/archives/2008/07/dfs-object-service-consumer-1/</link>
		<comments>http://craigrandall.net/archives/2008/07/dfs-object-service-consumer-1/#comments</comments>
		<pubDate>Wed, 16 Jul 2008 00:42:25 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Content management]]></category>
		<category><![CDATA[DFS]]></category>
		<category><![CDATA[SDK]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[WCF]]></category>

		<guid isPermaLink="false">http://craigrandall.net/archives/2008/07/dfs-object-service-consumer-1/</guid>
		<description><![CDATA[TweetIn a previous post, I introduced web service support in the EMC Documentum platform for the Microsoft-oriented developer. (BTW, sorry for the time lapse since that post to this one&#8211;busy getting an important set of products ready for on-time release. ) In this post, I will focus on such support as provided with DFS via [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton351" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FnlucSb&amp;via=craigsmusings&amp;text=DFS%20Object%20service%20consumer%20%231&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2008%2F07%2Fdfs-object-service-consumer-1%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://craigrandall.net/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><p>In a previous post, I <a title="Web services, Microsoft developers, WSF and DFS" href="http://craigrandall.net/archives/2008/07/ws-msft-devs-wsf-and-dfs/" target="_blank">introduced</a> web service support in the EMC Documentum platform for the Microsoft-oriented developer. (BTW, sorry for the time lapse since that post to this one&#8211;busy getting an important set of products ready for on-time release. <img src='http://craigrandall.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ) In this post, I will focus on such support as provided with DFS via the .NET assemblies (aka productivity layer) within the DFS SDK.</p>
<p>Let&#8217;s build a simple Windows Forms application using Microsoft Visual Studio 2008. The purpose of this application will be to retrieve the object name from a piece of content in a Documentum repository associated with a particular object id:</p>
<p align="center"><img src="http://craigrandall.net/dfs/retrieve-obj-name-form.jpg"/> </p>
<p>After launching Visual Studio, choosing File | New | Project&#8230; and creating a new <em>Windows Forms Application</em> project called ObjectServiceConsumer_PL, go to the Solution Explorer, select the References node under the project, right-click and choose Add Reference&#8230;</p>
<p align="center"><img src="http://craigrandall.net/dfs/add-ref1.gif"/> </p>
<p>Navigate to your DFS SDK installation and select the set of .NET assemblies that support the DFS Object service. For example, I tend to install the SDK directly under my C: drive; so, I navigated to C:\emc-dfs-sdk-6.5\lib\dotnet:</p>
<p align="center"><img src="http://craigrandall.net/dfs/add-ref2.gif"/> </p>
<p>(Yes, I&#8217;m using a pre-release version of DFS 6.5 for this example, but I&#8217;m not using anything that isn&#8217;t available in DFS 6.0 SP1&#8211;this is a very simple example by design.)</p>
<p>The result under the References node should be as follows:</p>
<p align="center"><img src="http://craigrandall.net/dfs/add-ref3.gif"/> </p>
<p>If you&#8217;re already developing with .NET 3.5, you may notice that a couple of .NET 3.5 assemblies are missing in the above view. That&#8217;s because I decided to target .NET 3.0 for this example since I don&#8217;t require anything more from Windows Communication Foundation since its first release (i.e. DFS supports WCF &#8220;v1&#8243; in .NET 3.0).</p>
<p>At this point, verify that you will be able to access an instance of the DFS Object service from your application. That is, deploy emc-dfs.ear file via the standalone DFS installer or with the Content Server installer. Launch your browser of choice and retrieve DFS Object service WSDL (e.g. <a title="http://localhost:8080/services/core/ObjectService?wsdl" href="http://localhost:8080/services/core/ObjectService?wsdl">http://localhost:8080/services/core/ObjectService?wsdl</a>). You should see the service contract in your browser.</p>
<p>Return back to Visual Studio, double-click Form1.cs, after building the dialog shown above, double-click on the Retrieve button. This will tell Visual Studio to transition from (Windows Forms) designer mode to code editing mode.</p>
<p>Implement your button click handler as follows:</p>
<pre class="csharpcode"><span class="kwrd">string</span> repositoryName = txtbxRepoName.Text;
<span class="kwrd">string</span> userName = txtbxUserName.Text;
<span class="kwrd">string</span> password = txtbxPwd.Text;
<span class="kwrd">string</span> objId = txtbxObjId.Text; <span class="rem">// e.g. a document id of 09123456789abcde</span>

<span class="kwrd">try</span>
{
    ContextFactory contextFactory = ContextFactory.Instance;
    IServiceContext context = contextFactory.NewContext();
    RepositoryIdentity repoId = <span class="kwrd">new</span> RepositoryIdentity(repositoryName,
                                                       userName,
                                                       password,
                                                       <span class="str">""</span>);
    context.AddIdentity(repoId);

    context = contextFactory.Register(context); <span class="rem">// Module and ContextRoot from app.config</span>
    ServiceFactory serviceFactory = ServiceFactory.Instance;

    IObjectService objectService =
        serviceFactory.GetRemoteService&lt;IObjectService&gt;(context); <span class="rem">// Module and ContextRoot from app.config</span>

    ObjectId objectId = <span class="kwrd">new</span> ObjectId(objId);
    ObjectIdentity objectIdentity = <span class="kwrd">new</span> ObjectIdentity(objectId, repositoryName);
    ObjectIdentitySet objectIdentitySet = <span class="kwrd">new</span> ObjectIdentitySet(objectIdentity);

    PropertyProfile propertyProfile = <span class="kwrd">new</span> PropertyProfile();
    propertyProfile.FilterMode = PropertyFilterMode.SPECIFIED_BY_INCLUDE;
    propertyProfile.IncludeProperties.Add(<span class="str">"object_name"</span>);

    OperationOptions operationOptions = <span class="kwrd">new</span> OperationOptions();
    operationOptions.Profiles.Add(propertyProfile);

    DataPackage dataPackage = objectService.Get(objectIdentitySet, operationOptions);

    List&lt;Property&gt; properties = dataPackage.DataObjects[0].Properties.Properties;

    <span class="kwrd">if</span> (properties != <span class="kwrd">null</span>)
    {
        properties.ForEach(<span class="kwrd">delegate</span>(Property property)
                               {
                                   <span class="kwrd">if</span> (property.Name.Equals(<span class="str">"object_name"</span>))
                                   {
                                       lblObjName.Text = property.ToString();
                                   }
                               });
    }

    Console.WriteLine(<span class="str">"Successfully retrieved object name for object id"</span> + <span class="str">"'"</span> + objId + <span class="str">"': "</span> + lblObjName.Text);
}
<span class="kwrd">catch</span> (Exception ex)
{
    lblObjName.Text = <span class="str">"&lt;error&gt;"</span>;
    Console.WriteLine(ex.StackTrace);
    Console.WriteLine(<span class="str">"Failed to retrieve object name with exception "</span> + ex.Message);
}
<span class="kwrd">finally</span>
{
    Console.WriteLine(<span class="str">"Your cleanup logic goes here."</span>);
}</pre>
<style type="text/css">.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }
</style>
<p>As noted above in code comments, you should add an Application Configuration File item to your project. After doing so, open the new app.config file in Visual Studio, select its contents and paste (overwrite) them with the contents copied from the sample App.config file in the DFS SDK (i.e. C:\emc-dfs-sdk-6.5\etc\config\App.config). Be sure to modify data relative to your running DFS Object service instance (e.g. ModuleInfo element attributes like port).</p>
<p>You should now be able to build your application and run it. When you enter a valid object id for the specified repository connection, you should see the object name replace &#8220;&lt;tbd&gt;&#8221; on the dialog. </p>
<p>Obviously this is a trivial sample. However, as I mentioned this is be design, since what I want to do next is contrast this sample with the same goal implemented without DFS SDK .NET assemblies (i.e. using just Visual Studio, its WCF designer and DFS WSDL/XSD content).</p>
<p>You can download the Visual Studio 2008-based solution for today&#8217;s sample <a href="https://community.emc.com/docs/DOC-2589" target="_blank">here</a>.</p>
<p>Next: Using DFS WSDL/XSD (sans DFS SDK .NET assemblies) from Visual Studio&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2008/07/dfs-object-service-consumer-1/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Web services, Microsoft developers, WSF and DFS</title>
		<link>http://craigrandall.net/archives/2008/07/ws-msft-devs-wsf-and-dfs/</link>
		<comments>http://craigrandall.net/archives/2008/07/ws-msft-devs-wsf-and-dfs/#comments</comments>
		<pubDate>Mon, 07 Jul 2008 18:00:35 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Content management]]></category>
		<category><![CDATA[DFS]]></category>
		<category><![CDATA[Web Service Framework]]></category>
		<category><![CDATA[WSF]]></category>

		<guid isPermaLink="false">http://craigrandall.net/archives/2008/06/interopnext-web-services-pre-dfs/</guid>
		<description><![CDATA[TweetShortly after the Documentum 5.2.5 release, customer interest in web services piqued in conjunction with Documentum’s investment in services via service-based business objects. SBOs, as they’re typically referred to, are supported in the Business Object Framework (BOF), which is the codified customization framework for DFC. So, in order to preserve customer investment in SBOs, the [...]]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton347" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2Fp5IORw&amp;via=craigsmusings&amp;text=Web%20services%2C%20Microsoft%20developers%2C%20WSF%20and%20DFS&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2008%2F07%2Fws-msft-devs-wsf-and-dfs%2F" class="twitter-share-button"  style="width:55px;height:22px;background:transparent url('http://craigrandall.net/wp-content/plugins/wp-tweet-button/tweetn.png') no-repeat  0 0;text-align:left;text-indent:-9999px;display:block;">Tweet</a></div><p>Shortly after the Documentum 5.2.5 release, customer interest in web services piqued in conjunction with Documentum’s investment in services via service-based business objects. SBOs, as they’re typically referred to, are supported in the Business Object Framework (BOF), which is the codified customization framework for DFC.</p>
<p>So, in order to preserve customer investment in SBOs, the Web Service Framework (WSF) was first released as part of the 5.3 platform release.</p>
<p>Not every SBO is designed to be projected as a web service, though. So, best practice documentation was published to the developer network, which for the most part just captures common sense. (I used to call these web service SBOs &#8220;WSBOs.&#8221;)</p>
<p>However, service-orientation at the time of D5.3 development was noticeably different than at the time of D6 development. There needed to be a way to target a broader base of existing service implementations (e.g. POJOs) into the realm of Enterprise Content Services.</p>
<p>Rather than controlling web services by insisting on a DFC/BOF (SBO) investment, it was clear that EMC Documentum needed to participate with broader business systems and processes. So, targeting <em>plain old Java objects</em> became a requirement, while also supporting DFC/BOF-based implementations for existing customers.</p>
<p>Rather than forcing service chains to align on content transfer approach, it was clear that EMC Documentum needed to support content transfer choice, empowering each link (service) in the chain to process content on its terms (e.g. as a file or as a stream).</p>
<p>At the same time, the 6.0 platform release provided additional facilities concerning distributed content. So, any new service-oriented offering from EMC Documentum needed to integrate with these facilities and increase their adoption via ease-of-use (integration).</p>
<p>Documentum Foundation Services (DFS) was first released as part of the 6.0 platform release and was designed to meet these, and several other, objectives.</p>
<p>Which brings us back to the .NET-oriented developer. How does DFS service these individuals?</p>
<ul>
<li><a href="http://craigrandall.net/archives/2008/07/dfs-object-service-consumer-1/" title="DFS Object service consumer #1">DFS provides an optional productivity layer</a></li>
<li><a href="http://craigrandall.net/archives/2008/07/dfs-object-service-consumer-2a/" title="DFS Object service consumer #2a">DFS is based on open standards that Microsoft Visual Studio also supports</a> (<a href="http://craigrandall.net/archives/2008/07/dfs-object-service-consumer-2b/" title="DFS Object service consumer #2b">conclusion</a>)</li>
</ul>
<p>More on each approach, next&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2008/07/ws-msft-devs-wsf-and-dfs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

