<?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/"
	>

<channel>
	<title>Craig's Musings &#187; DFS</title>
	<atom:link href="http://craigrandall.net/archives/categories/technology/services/dfs/feed/" rel="self" type="application/rss+xml" />
	<link>http://craigrandall.net</link>
	<description>Thoughts about software architecture, books and life</description>
	<lastBuildDate>Sat, 28 Apr 2012 05:02:21 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<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 &#8230; <a href="http://craigrandall.net/archives/2009/05/emc-documentum-developer-edition/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></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, &#8230; <a href="http://craigrandall.net/archives/2009/05/content-enabled-apps-empathized/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></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 &#8230; <a href="http://craigrandall.net/archives/2009/04/maxreceivedmessagesize/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></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 &#8230; <a href="http://craigrandall.net/archives/2009/04/building-content-enabled-apps/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></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 &#8230; <a href="http://craigrandall.net/archives/2009/02/updated-dfs-dev-guide-on-edn/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></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 &#8230; <a href="http://craigrandall.net/archives/2009/02/dynamic-value-assistance-using-dfs/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></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 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 &#8230; <a href="http://craigrandall.net/archives/2009/01/consuming-dfs-wsdl-in-visual-studio/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></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>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 &#8230; <a href="http://craigrandall.net/archives/2008/09/developing-with-dfs-in-an-ide/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></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 &#8230; <a href="http://craigrandall.net/archives/2008/07/documentum-65-with-services-in-mind/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></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 &#8230; <a href="http://craigrandall.net/archives/2008/07/dfs-object-service-consumer-2b/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></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 &#8230; <a href="http://craigrandall.net/archives/2008/07/dfs-object-service-consumer-2a/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></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. &#8230; <a href="http://craigrandall.net/archives/2008/07/dfs-object-service-consumer-1/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></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 &#8230; <a href="http://craigrandall.net/archives/2008/07/ws-msft-devs-wsf-and-dfs/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></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>
		<item>
		<title>DFC, Microsoft developers, .NET and DFC PIA</title>
		<link>http://craigrandall.net/archives/2008/06/dfc-msft-devs-dotnet-and-dfc-pia/</link>
		<comments>http://craigrandall.net/archives/2008/06/dfc-msft-devs-dotnet-and-dfc-pia/#comments</comments>
		<pubDate>Mon, 30 Jun 2008 14:52:50 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Content management]]></category>
		<category><![CDATA[DFS]]></category>
		<category><![CDATA[DFC PIA]]></category>

		<guid isPermaLink="false">http://craigrandall.net/archives/2008/06/interopnext-dfc-microsoft-developers-net-and-dfc-pia/</guid>
		<description><![CDATA[TweetIn early 2002 Microsoft released .NET 1.0, and it was quite clear that .NET would quickly supplant COM as the mainstream runtime for the Microsoft platform. Fortunately, .NET provided good (bi-directional) interop with COM (e.g. callable wrappers and interop assemblies). &#8230; <a href="http://craigrandall.net/archives/2008/06/dfc-msft-devs-dotnet-and-dfc-pia/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton346" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FnUeQtA&amp;via=craigsmusings&amp;text=DFC%2C%20Microsoft%20developers%2C%20.NET%20and%20DFC%20PIA&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2008%2F06%2Fdfc-msft-devs-dotnet-and-dfc-pia%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 early 2002 Microsoft released .NET 1.0, and it was quite clear that .NET would quickly supplant COM as the mainstream runtime for the Microsoft platform.</p>
<p>Fortunately, .NET provided good (bi-directional) interop with COM (e.g. callable wrappers and interop assemblies). Furthermore, software publishers (ISVs) could produce <em>primary interop assemblies</em> (PIAs) to add functional, deployment and administrative value above that produced by simply pointing Visual Studio at a type library.</p>
<p>So, based on customer requirements and demand, the DFC PIA was born and was first released with DFC 5.2.5.</p>
<p align="middle"><img alt="DFC, DJCB and DFC PIA in relationship" src="http://craigrandall.net/dfs/dfc-djcb-pia.gif"/></p>
<p>Beyond just producing a <a title="Strong-Named Assemblies" href="http://msdn.microsoft.com/en-us/library/wd40t7ad.aspx" target="_blank">strong-named assembly</a> using a Documentum private key, DFC PIA included additional performance tuning as well as some convenience features like advertising deprecated APIs, IntelliSense support in Visual Studio via robust XML documentation, and HTML Help content with example usage. By virtue of being a strong-named assembly, subsequent versions of the DFC PIA shipped with a <a title="How to: Create a Publisher Policy" href="http://msdn.microsoft.com/en-us/library/wd40t7ad.aspx" target="_blank">publisher policy file and assembly</a>, allowing customers to redirect their DFC PIA 5.2.5 consumers to a newer version of the PIA.</p>
<p>Both Documentum Desktop and Documentum Application Builder announced end-of-life plans around D5.3; so the internal need for DJCB was coming to a close. This opportunity was leveraged to reconsider current platform support for .NET developers and what would be needed in the future (e.g. web services). Several data points arose that suggested the need to reset interoperability as follows:</p>
<ul>
<li>Java and .NET are both managed language platforms. A key management facility in both is known as garbage collection. A garbage collector (GC) is responsible for reclaiming resources based on object reference state and other criteria. The Java GC and the .NET GC don&#8217;t recognize each other; yet both GC&#8217;s can be resident in the same process space. Given this situation, the potential for resource exhaustion due to improper object reference coding arises. In .NET, all COM objects including objects implementing COM interfaces must be released using <code>Marshal.ReleaseComObject</code> or <code>Marshal.FinalReleaseComObject</code>; otherwise, the underlying resources cannot be reclaimed by a GC.
<ul>
<li><code>Marshal.ReleaseComObject</code>/<code>Marshal.FinalReleaseComObject</code> is low-level &#8220;plumbing&#8221; code, and as such is typically not the primary domain concern of the business developer.</li>
<li>Recall that the DFC .NET interface is the projection of a DFC COM interface, which is, in turn, a projection of a DFC Java interface. The implementation of this interface projection is shared amongst a Java archive (JAR file), a Java-COM bridge DLL and an in-process assembly (PIA). All of this, again, is low-level plumbing that the business developer would rather not be burdened with; however, appropriate <code>Marshal.ReleaseComObject</code>/<code>Marshal.FinalReleaseComObject</code> calls have been delegated unto them.</li>
</ul>
</li>
<li>DJCB (and therefore DFC PIA) is about core DFC, not about DFC customizations via BOF (i.e. type-based or service-based business objects&#8211;TBOs or SBOs). So, to get similar .NET interop for a custom business object, you would have to re-apply Java-COM bridge technology to that API&#8211;assuming that it&#8217;s well-formed for .NET interop&#8211;and then produce a PIA for the custom business object using the bridge&#8217;s COM type library&#8211;all low-level plumbing.
<ul>
<li>&#8220;Java-COM bridge + PIA&#8221; doesn&#8217;t scale as well as web services in terms of integration cost. DFS supports web services natively and was designed from the very beginning with SOA in mind.</li>
</ul>
</li>
<li>COM has a hard limit of no more than 255 methods per interface. Most object-oriented systems may not encounter this constraint; however, DFC does with respect to sysobject-derived interfaces. That is, DFC 5.3 was OK; however, DFC 6.0 and thereafter surpassed this upper limit. So DJCB literally cannot be revised to accommodate the DFC 6.0 interface, again due to COM-based limitations. Since DJCB is so-constrained, DFC PIA is also limited.
<ul>
<li>Arguably, this highlights the value of Aspects in DFC/BOF.</li>
<li>This also highlights why <a title="Posts tagged DFS" href="http://craigrandall.net/archives/tag/dfs/" target="_blank">DFS</a> is <em>absolutely not</em> a web service projection of the DFC API. Rather DFS is a coarser-grained API that is less chatty and less overwhelming to understand (e.g. where total number of API methods is concerned).</li>
<li>In other words, DFC 6.0 was not developed with DJCB/PIA exposure, unlike DFC 5.3 and 5.3 service packs.</li>
</ul>
</li>
<li>There are aspects of the DFC Java API that are not interoperable. Perhaps the most requested feature request concerns byte stream support. That is, DFC specifies <code>ByteArrayInputStream</code>, but .NET doesn&#8217;t recognize this Java type.
<ul>
<li>DFS supports byte streaming use cases as follows:
<ol>
<li>The application invokes DFS from the middle tier, gets a byte array&#8211;DFS doesn&#8217;t write to disk&#8211;which is then returned by the application to the end user.  </li>
<li>The application invokes DFS from the middle tier, gets a URL which is then which is then passed by the application to the end user. The end user can stream the content using the URL.</li>
<li>The application invokes DFS from the middle tier. UCF client is deployed on the end user box. Content is streamed by UCF from the CS machine directly to the end user.</li>
</ol>
</li>
<li>Also <code>ByteArrayInputStream</code> can be impractical even for Java-based solutions, since the type puts all data in memory (e.g. large file transfer concerns). </li>
</ul>
</li>
</ul>
<p>Next: Data access (ADO.NET)&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2008/06/dfc-msft-devs-dotnet-and-dfc-pia/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DFC, Microsoft developers, COM and DJCB</title>
		<link>http://craigrandall.net/archives/2008/06/dfc-msft-devs-com-and-djcb/</link>
		<comments>http://craigrandall.net/archives/2008/06/dfc-msft-devs-com-and-djcb/#comments</comments>
		<pubDate>Sat, 28 Jun 2008 17:15:51 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Content management]]></category>
		<category><![CDATA[DFS]]></category>
		<category><![CDATA[DJCB]]></category>
		<category><![CDATA[Documentum Java-COM Bridge]]></category>

		<guid isPermaLink="false">http://craigrandall.net/archives/2008/06/interoppast-dfc-microsoft-developers-com-and-djcb/</guid>
		<description><![CDATA[TweetPrior to DFS, the primary solution-building, business logic-focused EMC Documentum platform API was Documentum Foundation Classes (DFC). When I joined Documentum (now EMC) over ten years ago, DFC was under development as part of the significant 4i release (aka &#8220;Project &#8230; <a href="http://craigrandall.net/archives/2008/06/dfc-msft-devs-com-and-djcb/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton345" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FqOXqLC&amp;via=craigsmusings&amp;text=DFC%2C%20Microsoft%20developers%2C%20COM%20and%20DJCB&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2008%2F06%2Fdfc-msft-devs-com-and-djcb%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>Prior to <a title="Posts tagged DFS" href="http://craigrandall.net/archives/tag/dfs/" target="_blank">DFS</a>, the primary solution-building, business logic-focused EMC Documentum platform API was Documentum Foundation Classes (DFC).</p>
<p>When I joined Documentum (now EMC) over ten years ago, DFC was under development as part of the significant 4i release (aka &#8220;Project Piper&#8221;). Back then Microsoft shipped a leading JVM and had one of the best IDEs for Java in Visual J++, according some of my then hardcore Java programming friends. The MSJVM intrinsically supported&#8211;among other &#8220;features&#8221; like delegates that led to the Java cold war (lawsuit) between Sun and Microsoft&#8211;interoperability with Microsoft&#8217;s major runtime play at that time called COM.</p>
<p>The aforementioned cold war led to Microsoft dropping development and support of MSJVM (and led to .NET, J# and JLCA), ending its Java support with the then-outdated 1.1.4 release from Sun. This meant that in order to support COM-based interop from Java you had to either build or buy. And a build-versus-buy decision was especially relevant to Documentum at the time given that the most widely used client/application was Desktop (aka Desktop Client, or just DTC&#8211;later called <a title="EDN Tips Page - see Desktop Development Kit content" href="http://developer.emc.com/developer/tippage.htm" target="_blank">Desktop Development Kit</a>), not to mention the MFC-based Developer Studio (later called Documentum Application Builder (DAB), which is now replaced by Composer). We opted for build, since there was no buy option available then that met our requirements, and the Documentum Java-COM Bridge (DJCB) was born and was first released with DFC 5.0.</p>
<p>DJCB enabled us to project DFC Java types as DFC COM types via COM type libraries and IDL. It also enabled Documentum to adopt newer JVM technology (e.g. Java 2 collections, Sun Hotspot JVM performance improvements, etc.). Furthermore, in the strong Documentum tradition of supporting existing IT infrastructure such as operating systems, relational databases and application servers, <em>whose</em> JVM was running became less of an issue (e.g. Sun, IBM, BEA (now Oracle), etc.).  </p>
<p>Here is perhaps an interesting portion of the original DJCB function specification dated 9/5/2001, which I authored with Victor Spivak, describing why DJCB was pursued:</p>
<blockquote>
<p><strong>Why does Documentum need <u>any</u> bridge?</strong></p>
<p>Documentum Foundation Classes, or DFC as it is more commonly referenced, is Documentum&#8217;s platform-independent business logic layer. A key benefit of the Java language is platform independence, or &#8220;Write Once, Run Anywhere&#8221; (i.e. anywhere that supports the Java platform); therefore, DFC is implemented in Java.  </p>
<p>Documentum is a platform provider, and as a platform company it supports the two dominant platforms of today: Windows and Java. A significant amount of Windows development is COM-based, and from a developer&#8217;s point of view, Documentum APIs on Windows are COM interface methods, etc.</p>
<p>When the DFC first decided to use Java as its implementation language, the Java platform was alive and well on Windows. In fact, Microsoft provided a fairly transparent bridge between COM and Java through its Java Virtual Machine (JVM) very soon after Java&#8217;s formal introduction to the general software development community. This bridge benefited Documentum a great deal; through a single implementation with minimal wrapping, Documentum could provide a business logic layer (DFC) that was consumable on both Windows and Java environments. &#8230;&nbsp;</p>
<p><strong>Why does Documentum need a <u>new</u> bridge?</strong></p>
<p>The settlement of the lawsuit between Sun and Microsoft has effectively frozen Microsoft&#8217;s use of Java in Windows at version 1.1.4. For its own use, Sun has already completed its end-of-life (EOL) of 1.1.4&#8211;only 1.1.8 remains available and supported in the Java 1.1 platform. Since Microsoft&#8217;s Java-COM bridge is built into its JVM, this bridge is also frozen at version 1.1.4. However, Java hasn&#8217;t stopped growing or maturing.</p>
<p>The Java platform tripled in size between Java 1.1 and Java 1.2, and the Java 2 platform&nbsp; has continued to grow beyond version 1.2. The current release is 1.3 and version 1.4 is available today as a beta product. &#8230;  </p>
<p>Clearly the Java platform of today is significantly different than version 1.1.4 of the Java platform.</p>
<p>Developers of a platform adopt the models of that platform. Java 2 offers models that are unsupported by DFC today because DFC is constrained by obsolete bridge technology. That is, Java developers using DFC may be forced to use proprietary workarounds to standard solutions that Java 2 provides (e.g. Java Collection Framework).</p>
<p>Java developers expect to leverage and interact with the facilities of the Java 2 platform (i.e. version 1.2 or later). Their encounter with the current DFC programming model may less than desirable as long as DFC is constrained to a much older Java platform and development model. Critical aspects of the Java platform such as security, extensibility, collections, serialization, multithreading, have undergone significant change. DFC will benefit from these changes but it must first be able to depend on more current Java environments&#8211;something it cannot do under the current Microsoft&#8211;provided bridge.</p>
<p>It&#8217;s not necessary to maintain a lowest common denominator approach any longer in DFC. A new bridge can and should be developed that enables DFC to leverage the Java 2 platform for its own benefit and for the benefit of all Java developers who rely on Documentum as part of their business solutions. Providing more mature facilities in DFC to Java developers should not come at the expense of COM developers [i.e. C++/"Classic VB" developers that use COM to achieve binary compatibility]. Existing DFC APIs continue to appear as COM objects with DJCB as they have with the Microsoft bridge. &#8230;  </p>
<p>Looking at the need for a new bridge another way, Documentum&#8217;s customers as well as Documentum itself suffers from the Sun-Microsoft lawsuit and settlement. Documentum cannot afford to drop its support of COM in the business logic layer. Documentum can also not afford to hand-tie Java business logic to an obsolete version of Java. Developers approaching the Documentum platform from a Java perspective expect our Java APIs to be Java 2-like. DJCB is about healing the wounds caused by Sun and Microsoft to our developer base&#8230; DJCB maintains a COM developer&#8217;s expectations of DFC leverage, while enabling DFC to meet the expectations of Java developers leverage Documentum&#8217;s business logic layer implemented in Java.</p>
</blockquote>
<p>Next: DFC PIA&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2008/06/dfc-msft-devs-com-and-djcb/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Resetting the interop button</title>
		<link>http://craigrandall.net/archives/2008/06/resetting-the-interop-button/</link>
		<comments>http://craigrandall.net/archives/2008/06/resetting-the-interop-button/#comments</comments>
		<pubDate>Sat, 28 Jun 2008 16:54:34 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Content management]]></category>
		<category><![CDATA[DFS]]></category>

		<guid isPermaLink="false">http://craigrandall.net/archives/2008/06/resetting-the-interop-button/</guid>
		<description><![CDATA[TweetExecutive Summary Since this is a longer post (actually a set of posts), allow me to summarize the main points from the get-go as follows: DFC Primary Interop Assembly (PIA) and the underlying Documentum Java-COM Bridge (DJCB) support the DFC &#8230; <a href="http://craigrandall.net/archives/2008/06/resetting-the-interop-button/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton344" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FraR2Ms&amp;via=craigsmusings&amp;text=Resetting%20the%20interop%20button&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2008%2F06%2Fresetting-the-interop-button%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><strong>Executive Summary</strong></p>
<p>Since this is a longer post (actually a set of posts), allow me to summarize the main points from the get-go as follows:</p>
<ul>
<li>DFC Primary Interop Assembly (PIA) and the underlying Documentum Java-COM Bridge (DJCB) support the DFC 5.3 API. That is, interface changes in DFC 6.x are not reflected in the DJCB and therefore are also not reflected in the PIA.</li>
<li>DFC PIA and DJCB were officially deprecated in the EMC Documentum 6.0 platform release (aka D6).</li>
<li>Since D6, EMC <a title="Documentum Foundation Services" href="http://craigrandall.net/archives/2007/05/documentum-foundation-services/" target="_blank">Documentum Foundation Services</a> (DFS), is the fully supported and recommended platform API for interoperable solutions development (e.g. using .NET frameworks such as ASP.NET or Windows Forms).</li>
</ul>
<p><strong>Interoperability Review Details</strong></p>
<p>Most folks that know EMC Documentum business logic software is predominantly implemented in Java (e.g. DFC/BOF, UCF, ACS/BOCS, etc.). However, this should not indicate a lack of support for other platforms such as .NET. So, let&#8217;s talk about .NET support, first by reviewing the past and finally by focusing on the present.</p>
<ul>
<li><a href="http://craigrandall.net/archives/2008/06/dfc-msft-devs-com-and-djcb/">DFC, Microsoft developers, COM and DJCB</a></li>
<li><a href="http://craigrandall.net/archives/2008/06/dfc-msft-devs-dotnet-and-dfc-pia/">DFC, Microsoft developers, .NET and DFC PIA</a></li>
<li><a href="http://craigrandall.net/archives/2008/06/data-access-msft-devs-and-das/">Data access, Microsoft developers and DAS</a></li>
<li><a href="http://craigrandall.net/archives/2008/07/ws-msft-devs-wsf-and-dfs/">Web services, Microsoft developers, WSF and DFS</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2008/06/resetting-the-interop-button/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Implementing DFS Search Services</title>
		<link>http://craigrandall.net/archives/2008/05/implementing-dfs-search-services/</link>
		<comments>http://craigrandall.net/archives/2008/05/implementing-dfs-search-services/#comments</comments>
		<pubDate>Wed, 28 May 2008 17:01:41 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Content management]]></category>
		<category><![CDATA[DFS]]></category>
		<category><![CDATA[ECIS]]></category>
		<category><![CDATA[EMC World]]></category>
		<category><![CDATA[FS2]]></category>
		<category><![CDATA[search]]></category>

		<guid isPermaLink="false">http://craigrandall.net/archives/2008/05/implementing-dfs-search-services/</guid>
		<description><![CDATA[TweetDuring EMC World last week, my Grenoble colleague Pierre-Yves “Pitch” Chevalier presented this subject on behalf of Marc Brette, who couldn&#8217;t make the event this year but authored the presentation. Pie attended the session and blogged about it here. Having &#8230; <a href="http://craigrandall.net/archives/2008/05/implementing-dfs-search-services/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton341" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FpnfFZL&amp;via=craigsmusings&amp;text=Implementing%20DFS%20Search%20Services&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2008%2F05%2Fimplementing-dfs-search-services%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 EMC World last week, my Grenoble colleague Pierre-Yves “Pitch” Chevalier presented this subject on behalf of Marc Brette, who couldn&#8217;t make the event this year but authored the presentation. <a title="Word of Pie" href="http://wordofpie.wordpress.com/" target="_blank">Pie</a><a> attended the session and blogged about it </a><a title="EMC World 2008: Implementing DFS Search Services" href="http://wordofpie.wordpress.com/2008/05/21/emc-world-2008-implementing-dfs-search-services/" target="_blank">here</a>. Having received the presentation from Pitch and Marc, you can download it <a title="Implementing DFS Search Services" href="https://community.emc.com/docs/DOC-2587" target="_blank">here</a>. Cheers&#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/05/implementing-dfs-search-services/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hands-on DFS</title>
		<link>http://craigrandall.net/archives/2008/05/hands-on-dfs/</link>
		<comments>http://craigrandall.net/archives/2008/05/hands-on-dfs/#comments</comments>
		<pubDate>Thu, 22 May 2008 00:48:29 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Content management]]></category>
		<category><![CDATA[DFS]]></category>
		<category><![CDATA[content management]]></category>
		<category><![CDATA[ECM]]></category>
		<category><![CDATA[EMC World]]></category>

		<guid isPermaLink="false">http://craigrandall.net/archives/2008/05/hands-on-dfs/</guid>
		<description><![CDATA[Tweet Tom and I were able to present to another great set of attendees&#8211;lots of healthy curiosity and great questions. Now that the labs have been conducted, here are the presentation slides&#8211;version from today, which was slightly modified from Monday&#8217;s &#8230; <a href="http://craigrandall.net/archives/2008/05/hands-on-dfs/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton340" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2Fqjw41a&amp;via=craigsmusings&amp;text=Hands-on%20DFS&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2008%2F05%2Fhands-on-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 align="middle"><img alt="DFS hands-on lab participants at EMC World 2008" src="http://craigrandall.net/dfs/080521-dfs-lab.jpg"/> </p>
<p>Tom and I were able to present to another great set of attendees&#8211;lots of healthy curiosity and great questions. Now that the labs have been conducted, <a title="SOA and DFS - Hands-on Workshop" href="https://community.emc.com/docs/DOC-2588" target="_blank">here are the presentation slides</a>&#8211;version from today, which was slightly modified from Monday&#8217;s deck.</p>
<p>It&#8217;s been a great talking with a lot of folks about <a title="DFS in Vegas" href="http://craigrandall.net/archives/2008/05/dfs-in-vegas/" target="_blank">DFS</a> and content management in general. Thanks to everyone who shared their current experience with DFS, their ideas and their issues. The product will be better because of you. Thanks! <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/05/hands-on-dfs/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>DFS best practices</title>
		<link>http://craigrandall.net/archives/2008/05/dfs-best-practices/</link>
		<comments>http://craigrandall.net/archives/2008/05/dfs-best-practices/#comments</comments>
		<pubDate>Wed, 21 May 2008 01:16:24 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Content management]]></category>
		<category><![CDATA[DFS]]></category>
		<category><![CDATA[best practice]]></category>
		<category><![CDATA[content management]]></category>
		<category><![CDATA[ECM]]></category>
		<category><![CDATA[EMC World]]></category>

		<guid isPermaLink="false">http://craigrandall.net/archives/2008/05/dfs-best-practices/</guid>
		<description><![CDATA[Tweet This afternoon, colleagues Mike Mohen and Paul Kwitkin presented a well-attended session, &#8220;Documentum Foundation Services – Best Practices and Real World Examples.&#8221; It&#8217;s always a good thing to have someone else be able to tell folks how well your &#8230; <a href="http://craigrandall.net/archives/2008/05/dfs-best-practices/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton338" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FqcIl2z&amp;via=craigsmusings&amp;text=DFS%20best%20practices&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2008%2F05%2Fdfs-best-practices%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/dfs/080520-dfs-best-practices.jpg"/> </p>
<p>This afternoon, colleagues Mike Mohen and Paul Kwitkin presented a well-attended session, &#8220;Documentum Foundation Services – Best Practices and Real World Examples.&#8221; It&#8217;s always a good thing to have someone else be able to tell folks how well your software performs under load and back it up with hard numbers and context. Usually this session takes about four hours to present in depth; so, Mike and Paul did a good job distilling the essence down to just an hour or so.</p>
<p>Mike and Paul work in CMA&#8217;s Professional Services organization, helping customers deploy enterprise solutions that typically involve out of the box services from DFS as well as custom service development and custom service consumer (solution) development. What we do in engineering it what Professional Services does in terms of building services and service consumers. It&#8217;s also the very same advice offered at today&#8217;s session, which will be repeated on Thursday. So, this material is not just about you, our audience, but it&#8217;s very much about EMC, too.</p>
<p>I&#8217;ve already asked Mike for his presentation, demos and source code; so, once I receive this content, I&#8217;ll make it available here.</p>
<p align="middle"><img src="http://craigrandall.net/dfs/080520-dctm-architecture.jpg"/> </p>
<p>Earlier today, I sat in on Victor Spivak&#8217;s &#8220;Documentum Architecture Deep Dive&#8221; session. (Pie blogged about this session in a fair bit of detail <a title="EMC World 2008: Documentum Architecture Deep Dive (5/20)" href="http://wordofpie.wordpress.com/2008/05/20/emc-world-2008-documentum-architecture-deep-dive/" target="_blank">here</a> and <a title="EMC World 2008: Documentum 6.5 Architecture Overview (5/19)" href="http://wordofpie.wordpress.com/2008/05/19/emc-world-2008-documentum-65-architecture-overview/" target="_blank">here</a>.) As you might expect, DFS was a prominently discussed within the broader context of all Documentum architecture. (For those who don&#8217;t know, Victor is EMC Content Management and Archiving division&#8217;s Chief Architect. Victor is also an EMC Fellow and a really good guy.)</p>
<p>It&#8217;s really quite exciting to see such a consistently strong turn-out for the developer-oriented sessions at this year&#8217;s EMC World conference&#8211;much stronger than last year. It&#8217;s a privilege to have so many folks interested in what you&#8217;ve worked so hard with others to produce&#8211;both to tell you what works and what doesn&#8217;t.</p>
<p>Already this week I&#8217;ve received great feedback that will make DFS an even better product in future releases. Once my customer meetings this week subside a bit, I hope to share what I&#8217;ve learned with you here in more detail.</p>
<p>Update 5/21/2008: <a href="https://community.emc.com/docs/DOC-1743" target="_blank" title="Documentum Foundation Services (DFS) - Best Practices and Real World Examples">Here</a> are the slides Mike and Paul presented. Looks like the real world examples will become available soon, too. Cheers.</p>
<p>Update 10/24/2008: You can access the recording of this session, now, <a title="Documentum Foundation Services - Best Practices and Real World Examples" href="https://community.emc.com/docs/DOC-1743" target="_blank">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2008/05/dfs-best-practices/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>DFS in Vegas</title>
		<link>http://craigrandall.net/archives/2008/05/dfs-in-vegas/</link>
		<comments>http://craigrandall.net/archives/2008/05/dfs-in-vegas/#comments</comments>
		<pubDate>Mon, 19 May 2008 20:59:21 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Content management]]></category>
		<category><![CDATA[DFS]]></category>
		<category><![CDATA[EMC World]]></category>

		<guid isPermaLink="false">http://craigrandall.net/archives/2008/05/dfs-in-vegas/</guid>
		<description><![CDATA[Tweet EMC World is happening this week in Las Vegas. Last night the festivities were kicked off nicely by The Goo Goo Dolls. The concert sounded great, and the band seemed to be enjoying themselves&#8211;not to mention a majority of &#8230; <a href="http://craigrandall.net/archives/2008/05/dfs-in-vegas/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton336" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FnDrmvx&amp;via=craigsmusings&amp;text=DFS%20in%20Vegas&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2008%2F05%2Fdfs-in-vegas%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 alt="The Goo Goo Dolls" src="http://craigrandall.net/dfs/goo-goo-dolls.jpg"/> </p>
<p>EMC World is happening this week in <a title="Mandalay Bay Convention Center" href="http://www.mandalaybay.com/Conventions/" target="_new">Las Vegas</a>. Last night the festivities were kicked off nicely by <a title="The Goo Goo Dolls" href="http://www.googoodolls.com/" target="_new">The Goo Goo Dolls</a>. The concert sounded great, and the band seemed to be enjoying themselves&#8211;not to mention a majority of the some 9300 conference attendees. The result was substantially better then the forgettable act last year in Orlando.</p>
<p>This afternoon I&#8217;ll be presenting a two-hour, hands-on lab with my colleague Tom Heller. I&#8217;m looking forward to going beyond just introducing <a title="Documentum Foundation Services (during EMC World 2007, Orlando, FL)" href="http://craigrandall.net/archives/2007/05/documentum-foundation-services/">Documentum Foundation Services</a> like last year to level-setting attendees in order to support them in quickly building their own service and consuming applications.</p>
<p>Once the lab today and again this Wednesday are completed, I will post my presentation <a href="http://craigrandall.net/archives/2008/05/hands-on-dfs/" target="_new" title="Hands-on DFS">here</a>.</p>
<p>In the meantime, there are more folks blogging EMC World from a content management perspective than last year. EMC itself is also trying to be more open and online about its conference. Please check out the following content sources:</p>
<ul>
<li><a title="Word of Pie" href="http://wordofpie.wordpress.com/" target="_new">Laurence Hart</a> (aka Pie)  </li>
<li><a title="Big Men on Content" href="http://bmoc.wordpress.com/" target="_new">Lee Dallas &amp; Marko Silanpää</a> (aka BMOC)  </li>
<li><a title="Confessions of an eBiz Junkie" href="http://lensblog.typepad.com/" target="_new">Len Devanna</a> (e.g. wiki, Twitter, Flickr, YouTube, etc.)</li>
</ul>
<p>Stay tuned for more news from Las Vegas.</p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2008/05/dfs-in-vegas/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>DFS data model</title>
		<link>http://craigrandall.net/archives/2008/04/dfs-data-model/</link>
		<comments>http://craigrandall.net/archives/2008/04/dfs-data-model/#comments</comments>
		<pubDate>Wed, 02 Apr 2008 22:24:02 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Content management]]></category>
		<category><![CDATA[DFS]]></category>

		<guid isPermaLink="false">http://craigrandall.net/archives/2008/04/dfs-data-model/</guid>
		<description><![CDATA[TweetEver since we produced an object model poster for EMC Documentum 5.3, folks have requested more such posters. So, when DFS released with EMC Documentum 6.0, we thought it made sense to pursue a data model poster. Thanks to the &#8230; <a href="http://craigrandall.net/archives/2008/04/dfs-data-model/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton334" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FoBFBiN&amp;via=craigsmusings&amp;text=DFS%20data%20model&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2008%2F04%2Fdfs-data-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>Ever since we produced an object model poster for EMC Documentum 5.3, folks have requested more such posters. So, when DFS released with EMC Documentum 6.0, we thought it made sense to pursue a data model poster. </p>
<p>Thanks to the work of Oleg, Meir, Patricia and others, I&#8217;m pleased to report that the DFS data model poster for the 6.0 SP1 release is on its way to the printers. You can download its PDF rendition <a title="EMC Documentum Foundation Services Data Model (6.0 SP1)" href="https://community.emc.com/docs/DOC-1293">here</a>.</p>
<p>Also, if you&#8217;re coming to EMC World next month in Las Vegas, it&#8217;s my understanding that there will be a large number of posters available to attendees&#8211;not to mention a number of presentations and a hands-on lab concerning DFS.</p>
<p>Cheers! <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/04/dfs-data-model/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DFS tutorial</title>
		<link>http://craigrandall.net/archives/2008/01/dfs-tutorial/</link>
		<comments>http://craigrandall.net/archives/2008/01/dfs-tutorial/#comments</comments>
		<pubDate>Thu, 17 Jan 2008 06:08:17 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[DFS]]></category>

		<guid isPermaLink="false">http://craigrandall.net/archives/2008/01/dfs-tutorial/</guid>
		<description><![CDATA[Tweet In response to the DFS area within the EDN forums, Sergey at DFS Notes has been kind enough to post a three-part tutorial as follows: Part 1 &#8211; Environment setup for DFS SDK and (&#8220;Hello World&#8221;) service creation Part &#8230; <a href="http://craigrandall.net/archives/2008/01/dfs-tutorial/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton328" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FpF5snL&amp;via=craigsmusings&amp;text=DFS%20tutorial&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2008%2F01%2Fdfs-tutorial%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>
<p>In response to the <a href="http://craigrandall.net/archives/2007/05/documentum-foundation-services/" title="Documentum Foundation Services">DFS</a> area within the <a href="http://developer.emc.com/" target="_blank">EDN</a> forums, Sergey at <a title="DFS Notes" href="http://dfsnotes.com" target="_blank">DFS Notes</a> has been kind enough to post a three-part tutorial as follows:
<ol>
<li><a href="http://www.dfsnotes.com/2007/11/14/custom-dfs-service-development-service-creation-part-1/" target="_blank">Part 1 &#8211; Environment setup for DFS SDK and (&#8220;Hello World&#8221;) service creation</a></li>
<li><a href="http://www.dfsnotes.com/2007/11/20/custom-dfs-service-development-java-client-part-2/" target="_blank">Part 2 &#8211; Java client creation</a></li>
<li><a href="http://www.dfsnotes.com/2007/11/20/custom-dfs-service-development-net-client-part-3/" target="_blank">Part 3 &#8211; .NET remote client</a> </li>
</ol>
<p>Here are a few more details to complement this tutorial:
<ul>
<li>In DFS 6.0 (v1), BEA Weblogic Server 9.2 (plus BEA Smart Update-based patches) is supported and the unit of deployment is an EAR file. In <a href="http://craigrandall.net/archives/2007/12/whats-new-in-dfs-60-sp1/" title="What's New in DFS 6.0 SP1">DFS 6.0 SP1</a>, supported JEE application servers were increased to also include Oracle Application Server 10g Release 3 (10.1.3.x) and IBM WebSphere Application Server V6.1, Fix Pack 11. Certified JEE application server support will continue to grow in future releases (e.g. JBoss) as well as support both for application servers biased toward EAR files and toward WAR files.</li>
<li>The version of <a title="Apache Ant" href="http://ant.apache.org/" target="_blank">Ant</a> used during DFS 6.0 development was 1.6.5; however the version of Ant required for use with the DFS SDK is 1.7.0. Ant 1.7.0 is the first version of the Apache open source project to formally support Ant libraries (or antlibs), and DFS SDK 6.0 SP1 has a dependency on <a title="Ant Library for .NET" href="http://ant.apache.org/antlibs/dotnet/" target="_blank">Antlib for .NET</a> 1.0 in order to build .NET productivity layer support for your custom services. (You can also leverage <a href="http://nant.sourceforge.net/" target="_blank">NAnt</a>, if you prefer.) So, before you commence a build using the DFS SDK 6.0 SP1, you should verify the version of Ant that will be applied, by typing &#8220;ant -version&#8221; in a Command Prompt window, for example, is &#8220;1.7.0.&#8221; If you forget to do this or proceed despite not seeing &#8220;1.7.0&#8243; and you encounter a &#8220;java.lang.NoSuchMethodError: org.apache.tools.ant.util.FileUtils.getFileUtils()&#8221; exception while attempting to build your custom service EAR file&#8211;even though you&#8217;ve installed Ant 1.7.0, you may need to verify that ant.jar is referenced before dctm.jar is referenced on your active ClassPath.</li>
<li>Java 5 Standard Edition is required for EMC Documentum 6.0 where platform development is concerned (e.g. using the DFS SDK). EMC Documentum 6.0 SP1 certifies support for Java 6 Standard Edition only on the browser host, not on the application server. You may encounter deployment issues if you build your custom service with Java SE 6.0.</li>
<li>Versions of JAX-WS and JAXB included in the DFS SDK 6.0 SP1 are as follows: JAX-WS 2.1.2 reference implementation from Sun and JAXB 2.1.4 reference implementation from Sun. If you encounter a &#8220;java.lang.LinkageError&#8221; exception while building your custom service EAR, then you may need to employ standard &#8220;endorsed&#8221; library techniques to ensure proper JAXB class loading.</li>
</ul>
<p>Thanks to Sergey for posting his tutorial, and thanks to Saša at <a title="Pexim CMS" href="http://peximcms.com" target="_blank">Pexim Content Manaqement Solutions</a> for sharing his development experience with me, which contributed to the above content.</p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2008/01/dfs-tutorial/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What&#8217;s new in DFS 6.0 SP1</title>
		<link>http://craigrandall.net/archives/2007/12/whats-new-in-dfs-60-sp1/</link>
		<comments>http://craigrandall.net/archives/2007/12/whats-new-in-dfs-60-sp1/#comments</comments>
		<pubDate>Sat, 22 Dec 2007 20:13:05 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[DFS]]></category>

		<guid isPermaLink="false">http://craigrandall.net/archives/2007/12/whats-new-in-dfs-60-sp1/</guid>
		<description><![CDATA[TweetThe following new features are provided in EMC Documentation Foundation Services (DFS) for Documentum 6 SP1, which officially released yesterday (12/21/2007): Support for deployment using IBM WebSphere and Oracle application servers Productivity layer for .NET consumers Object service enhanced to &#8230; <a href="http://craigrandall.net/archives/2007/12/whats-new-in-dfs-60-sp1/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton321" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2Fn89uEd&amp;via=craigsmusings&amp;text=What%26%238217%3Bs%20new%20in%20DFS%206.0%20SP1&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2007%2F12%2Fwhats-new-in-dfs-60-sp1%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>The following new features are provided in EMC <a href="http://craigrandall.net/archives/2007/05/documentum-foundation-services/">Documentation Foundation Services</a> (DFS) for Documentum 6 SP1, which officially released yesterday (12/21/2007):</p>
<ul>
<li>Support for deployment using IBM WebSphere and Oracle application servers</li>
<li>Productivity layer for .NET consumers</li>
<li>Object service enhanced to support external sources </li>
</ul>
<p>DFS now supports free-standing deployment on IBM WebSphere V6.1 and Oracle Application Server 10.1.3.x. This means that the EAR file containing out-of-the-box core platform services, emc-dfs.ear, can be successfully deployed into these application servers. Deployment of core platform services via an installer continues to be BEA WebLogic based&#8211;either alongside the Java Method Server app server instance established during Content Server installation or into a cluster-ready, separate middle-tier deployment during standalone DFS installation.</p>
<p>The DFS SDK now includes a.NET productivity layer (consumer library) for development of .NET-based DFS consumers. The .NET productivity layer is functionally equivalent to the Java productivity layer, with the exception that a .NET client can consume DFS services only remotely (as web services). </p>
<p>The DFS .NET productivity layer is Common Language Specification (CLS) compliant; therefore, you are free to develop above DFS using your CLS-compliant language of choice (e.g. C#, VB.NET, Managed C++, even IronRuby, IronPython, etc.). Samples of C# DFS consumers are provided in the SDK as well as new XML Documentation (i.e. C# equivalent to Java&#8217;s Javadoc) and HTML Help (.chm) documentation.</p>
<p>DFS service development tools have been enhanced to provide a facility for generating CLS-compliant .NET productivity layer support for your won services, too. The DFS .NET productivity layer is based on Microsoft&#8217;s Windows Communication Foundation (WCF) framework within .NET 3.0.</p>
<p>The core platform Object service has been enhanced to support retrieval of content from external sources accessible to the Search service. Since its initial release in D6, the core platform Search service <font face="Courier New">getRepositoryList</font> operation returns a list of available sources&#8211;both managed sources such as Documentum content repositories and external, unmanaged sources such as Google or anything else supported via an <a title="Technical white paper - EMC Documentum Enterprise Content Integration Services" href="http://software.emc.com/collateral/content_management/documentum_family/wp_tech_ecis.pdf" target="_blank">ECIS</a> adapter. (You can checkout the source of several ECIS adapters via the <a title="EDN Component Exchange" href="http://developer.emc.com/developer/componentexchange.htm" target="_blank">EMC Developer Network (EDN) Component Exchange</a>.). The Search service <font face="Courier New">execute</font> operation returns the result of a search query run against a list of sources, both managed and external. Now with SP1, the Object service <font face="Courier New">get</font> operation can retrieve content from the external sources in addition to managed sources, based on the search query results.</p>
<p>There&#8217;s more to tell, but I have some Christmas shopping and gift wrapping to do! <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/2007/12/whats-new-in-dfs-60-sp1/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Wikify Documentum already</title>
		<link>http://craigrandall.net/archives/2007/11/wikify-documentum-already/</link>
		<comments>http://craigrandall.net/archives/2007/11/wikify-documentum-already/#comments</comments>
		<pubDate>Mon, 19 Nov 2007 06:44:03 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Content management]]></category>
		<category><![CDATA[DFS]]></category>
		<category><![CDATA[Ideas]]></category>

		<guid isPermaLink="false">http://craigrandall.net/archives/2007/11/wikify-documentum-already/</guid>
		<description><![CDATA[Tweet “The companies that figure out how to harness the power of open platforms while providing adequate incentives to all stakeholders are poised to reap great rewards.” -from Wikinomics A few months ago, I blogged about this thought-provoking book. Around &#8230; <a href="http://craigrandall.net/archives/2007/11/wikify-documentum-already/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton317" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FnAahb5&amp;via=craigsmusings&amp;text=Wikify%20Documentum%20already&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2007%2F11%2Fwikify-documentum-already%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>
<p>“The companies that figure out how to harness the power of open platforms while providing adequate incentives to all stakeholders are poised to reap great rewards.” -from <a title="Wikinomics: How Mass Collaboration Changes Everything" href="http://search.barnesandnoble.com/booksearch/isbnInquiry.asp?EAN=9781591841388" target="_blank">Wikinomics</a></p>
<p>A few months ago, I <a title="Wikinomics" href="http://craigrandall.net/archives/2007/08/wikinomics/" target="_blank">blogged</a> about this thought-provoking book. Around the same time I began to promote the idea of taking aspects of our product documentation (e.g. development guides) and &#8220;wikifying&#8221; them. I contend that it&#8217;s better to replace the current delivery model (i.e. a PDF drop per release) with a new model that harnesses the power of the web and the energy of the Documentum community. Better for writer (uptake, feedback), better for all cross-functional product team members (accessibility, performance, quality, functionality, architecture, usability), better for the overall community (collaboration, connectedness).</p>
<p><a title="The Django Book (i.e. online beta book)" href="http://www.djangobook.com/" target="_blank">The Django Book</a> is an example application (user experience) of what I&#8217;d like very much to see become of the DFS Development Guide content&#8212;Wikibooks (e.g. <a title="WikiBook - Microsoft Office PowerPoint" href="http://en.wikibooks.org/wiki/Microsoft_Office_PowerPoint" target="_blank">this</a>) is another example. </p>
<p>As you might expect our Technical Publications group leverages XML (<a href="http://doc-book.sourceforge.net/homepage/" target="_blank">DocBook</a> to be more specific) as the underlying markup for its deliverable, which are released in PDF form. This is great news, since XML to wiki markup format transformations are fairly straightforward. By taking the underlying XML content and projecting it into a wiki&#8211;for example, off the <a title="EMC Developer Network (EDN)" href="http://developer.emc.com" target="_blank">EMC Developer Network</a> (EDN) web site&#8211;rather than a PDF document can open up documents like the DFS Development Guide to our developer/admin/user community. By doing so, I believe that such documents can be revised, extended and planned more effectively. For example:
<ul>
<li>I find a gap I can fill. So, I simply create the missing wiki page(s)&#8211;I don&#8217;t have to wait until the next release of the software or the PDF document.</li>
<li>I find a gap I don&#8217;t know how to fill. So, I add a topic to the wiki&#8217;s &#8220;wish list&#8221; page, and someone else with the ability to author the missing content gains my respect and builds his or her reputation in the DFS community.</li>
<li>I can share how I took an existing code sample and tweaked or extended it to satisfy a new requirement.</li>
<li>I can talk about how DFS did or did not work with my existing IT environment&#8211;and expect more timely, specific/targeted response in return.</li>
<li>Etc.</li>
</ul>
<p>Once the <strong>wiki</strong> exists, it can (and IMHO <em>should</em>) become the <strong>truth</strong> of its subject matter. In fact, PDF documents simply become the output of convenience (e.g. Atlassian&#8217;s Confluence wiki allows you to quickly rendition any wiki page as a PDF or, via a plugin, an entire wiki space as a single PDF document&#8211;links and all). Snapshots are just snapshots, and the current state of information is open for all to access and contribute. </p>
<p>To quote one of my colleagues: &#8220;The idea that we can control and perfect the quality of the information internally and shield it from possible inaccuracies introduced by customers is pretty flawed.&#8221; </p>
<p>When I talk with developers, partners and customers in the Documentum community to explain the idea of such wikis, the universal response is, to paraphrase, &#8220;sure&#8230;and yesterday would be great!&#8221; To trim it down to a single word: &#8220;Duh!&#8221;</p>
<p>So, to quote Jerry Maguire, &#8220;<a href="http://www.youtube.com/watch?v=p-oHuogx6_Y" target="_blank">Help me help you</a>&#8221; by posting a comment here, sending an email to the good folks at EDN and/or posting to the EDN forums, or call your main EMC point of contact to make your voice heard and your vote count. Thanks! <img src='http://craigrandall.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Update 12/27/2007: Thanks to Anne Gentle&#8217;s link to my post, I found <a href="http://www.wikipatterns.com/display/wikipatterns/Wikipatterns" target="_blank">Wiki Patterns</a>, which offers an open catalog of patterns and anti-patterns concerning people using and adoption of wikis (e.g. a <a href="http://www.wikipatterns.com/display/wikipatterns/WikiGnome" target="_blank">WikiGnome</a> versus a <a href="http://www.wikipatterns.com/display/wikipatterns/WikiTroll" target="_blank">WikiTroll</a>).</p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2007/11/wikify-documentum-already/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Conversation in Monaco</title>
		<link>http://craigrandall.net/archives/2007/11/conversation-in-monaco/</link>
		<comments>http://craigrandall.net/archives/2007/11/conversation-in-monaco/#comments</comments>
		<pubDate>Tue, 06 Nov 2007 13:44:28 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Content management]]></category>
		<category><![CDATA[DFS]]></category>
		<category><![CDATA[Inspiration]]></category>
		<category><![CDATA[Momentum]]></category>
		<category><![CDATA[Monaco]]></category>

		<guid isPermaLink="false">http://craigrandall.net/archives/2007/11/conversation-in-monaco/</guid>
		<description><![CDATA[TweetToday I had the privilege of talking about EMC Documentum Foundation Services (DFS) to roughly a 100 or so customers, partners and integrators at Momentum Europe 2007, held at Grimaldi Forum, Monaco. As promised, my slides are here, and the &#8230; <a href="http://craigrandall.net/archives/2007/11/conversation-in-monaco/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton316" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FpSF93O&amp;via=craigsmusings&amp;text=Conversation%20in%20Monaco&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2007%2F11%2Fconversation-in-monaco%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 I had the privilege of talking about EMC <a title="Documentum Foundation Services" href="http://craigrandall.net/archives/2007/05/documentum-foundation-services/" target="_blank">Documentum Foundation Services</a> (DFS) to roughly a 100 or so customers, partners and integrators at <a title="Momentum Europe" href="http://www.momentumeurope.com/" target="_blank">Momentum Europe</a> 2007, held at <a title="Grimaldi Forum" href="http://www.grimaldiforum.com/" target="_blank">Grimaldi Forum</a>, Monaco. As promised, my slides are <a title="071106 EMC Documentum Foundation Services (Randall, ME07)" href="https://community.emc.com/docs/DOC-2585" target="_blank">here</a>, and the demo client in both Java and .NET (C#) can be downloaded via Zip archive <a title="Momentum Europe 2007 DFS demo sample" href="https://community.emc.com/docs/DOC-2586" target="_blank">here</a>.</p>
<p>Before my session during the day&#8217;s keynote, the winners of the <a title="Start your engines!" href="http://craigrandall.net/archives/2007/07/start-your-engines/" target="_blank">D6 Web Services Challenge</a> were announced. As an internal judge, I was quite impressed by the breadth of submissions and how little time it took to develop them using DFS. The winners are as follows:</p>
<ul>
<li><strong>1st Place &#8211; Incident Management System: Armedia</strong><br />This <a title="Windows Mobile 6" href="http://www.microsoft.com/windowsmobile/6/default.mspx" target="_blank">Windows Mobile 6</a> application simulates a field employee using a handheld device to capture notes in the field, and import them to Documentum. It allows for the mobile device camera to directly import images to Documentum, plus importing of images from an external service, in this instance <a title="Flickr" href="http://www.flickr.com" target="_blank">Flickr</a>. This application was built in only 10 days by a team of three individuals.</li>
<li><strong>2nd Place &#8211; 5MD gTop: Rob Cleghorn, Alexandre Alvares, Andrew McAllister, James Maughan, and Simon Green</strong><br />This five man team is so named due to the five days they dedicated to their effort to build a highly functional Web based user interface to Documentum leveraging <a title="Google Web Toolkit - an overview" href="http://code.google.com/webtoolkit/overview.html" target="_blank">Google Web Toolkit</a>. In the words of one judge: &#8220;A clear example of the power of the new Rich Internet Application (RIA) and SOA programming model in action.&#8221; </li>
<li><strong>3rd Place &#8211; PDF Publishing and Search: Alan Greendyk</strong><br />This single person entry leverages the power of <a title="Adobe Flex" href="http://www.adobe.com/products/flex/" target="_blank">Flex</a> programming and <a title="Adobe LiveCycle Data Services" href="http://www.adobe.com/products/livecycle/dataservices/" target="_blank">Adobe LiveCycle Data Services</a> to illustrate a publishing application pushing content into Documentum, with an extended search capability to fetch content from the Documentum repository.</li>
</ul>
<p>The press release for this announcement is <a title="In a Matter of Days, Winners Develop Cutting-Edge Applications Based on EMC&reg; Documentum&reg; 6 Enterprise Content Management Platform" href="http://www.emc.com/news/emc_releases/showRelease.jsp?id=5437&amp;l=en&amp;c=US" target="_blank">here</a>. There should be more details about the winning entries up on <a title="EMC Developer Network" href="http://developer.emc.com" target="_blank">EDN</a> soon, too.</p>
<p>Congratulations to <a title="Armedia" href="http://armedia.com/default.htm" target="_blank">Armedia</a>, the team from BNP Paribas (Cleghorn et al), and Alan Greendyk from Wachovia!</p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2007/11/conversation-in-monaco/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Start your engines!</title>
		<link>http://craigrandall.net/archives/2007/07/start-your-engines/</link>
		<comments>http://craigrandall.net/archives/2007/07/start-your-engines/#comments</comments>
		<pubDate>Tue, 31 Jul 2007 03:07:59 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Content management]]></category>
		<category><![CDATA[DFS]]></category>
		<category><![CDATA[Ideas]]></category>
		<category><![CDATA[Services]]></category>

		<guid isPermaLink="false">http://craigrandall.net/archives/2007/07/start-your-engines/</guid>
		<description><![CDATA[TweetLaurence picked up on this earlier today: EMC&#8217;s D6 Web Services Challenge. Whether you&#8217;re an established partner or an up-and-coming consultancy of one or more individuals, you&#8217;re invited to take the challenge and submit your entries in the next couple &#8230; <a href="http://craigrandall.net/archives/2007/07/start-your-engines/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton302" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2ForUbOC&amp;via=craigsmusings&amp;text=Start%20your%20engines%21&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2007%2F07%2Fstart-your-engines%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="D6 Is Coming!" href="http://wordofpie.wordpress.com/2007/07/30/d6-is-coming/" target="_blank">Laurence</a> picked up on this earlier today: EMC&#8217;s <a title="EMC Documentum 6.0 Web Services Challenge" href="http://developer.emc.com/developer/challenge/d6_contest.htm" target="_blank">D6 Web Services Challenge</a>. Whether you&#8217;re an established partner or an up-and-coming consultancy of one or more individuals, you&#8217;re invited to take the challenge and submit your entries in the next couple of months (i.e. by 9/28/2007 per contest rules). First prize is $50,000, with total prizes&nbsp; amounting to $100,000! This is a great chance to get your name and company established as a leader where the new <a title="DFS-related posts on this blog" href="http://craigrandall.net/archives/categories/technology/services/dfs/" target="_blank">Documentum Foundation Services</a> (DFS) are concerned. So, <strong>please consider taking the challenge</strong>!</p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2007/07/start-your-engines/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Diving in San Ramon</title>
		<link>http://craigrandall.net/archives/2007/07/diving-in-san-ramon/</link>
		<comments>http://craigrandall.net/archives/2007/07/diving-in-san-ramon/#comments</comments>
		<pubDate>Thu, 12 Jul 2007 02:45:40 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Content management]]></category>
		<category><![CDATA[DFS]]></category>

		<guid isPermaLink="false">http://craigrandall.net/archives/2007/07/diving-in-san-ramon/</guid>
		<description><![CDATA[Tweet Yesterday and today I had the privilege of supporting my colleague Charlotte Townsley as the subject matter expert during her EMC Documentum Foundation Services (DFS) sessions as part of the D6-focused Techset event. (For those not familiar with Techset, &#8230; <a href="http://craigrandall.net/archives/2007/07/diving-in-san-ramon/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton292" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FqhmxHo&amp;via=craigsmusings&amp;text=Diving%20in%20San%20Ramon&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2007%2F07%2Fdiving-in-san-ramon%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 alt="Techset audience on Tuesday" src="http://craigrandall.net/dfs/070710-techset-dfs-1.jpg" align="middle" /></p>
<p>Yesterday and today I had the privilege of supporting my colleague Charlotte Townsley as the subject matter expert during her EMC <strong>Documentum Foundation Services</strong> (DFS) sessions as part of the D6-focused Techset event. (For those not familiar with Techset, it&#8217;s an event Documentum ran and continues to run as part of the larger EMC Content Management &amp; Archiving (CMA) business, providing timely valuable details concerning an upcoming platform release.)</p>
<p>I&#8217;m guessing that roughly 200 attendees&#8211;EMC field personnel, including consultants, plus EMC partners&#8211;participated in one of the two day-long sessions that featured instructor-led presentation plus lab work. Each day&#8217;s audience was definitely into the material based on the level of interaction and depth of questions asked.</p>
<p>I&#8217;m really looking forward to receiving feedback from these individuals as they &#8220;take to the streets&#8221; armed with DFS.</p>
<p>For those who attended Tuesday&#8217;s DFS session, I threw together the following graphic for today&#8217;s attendees:</p>
<p align="middle"><img alt="Underlying DFS architecture" src="http://craigrandall.net/dfs/070711-techset-dfs-2.jpg" align="middle" /></p>
<p>It&#8217;s purpose is to help clarify where the DFS runtime is involved, among other things. The top two flows represent remote consumer interactions, and the bottom/third flow represents a local consumer-provider interaction.</p>
<p>By the way, if you&#8217;re interested in learning more about DFS and how to use it to build custom services and service-consuming applications, please consider the upcoming <em>DFS Fundamentals</em> course from our Educational Services team. (The Techset sessions on DFS represent just a portion of that class.)</p>
<p>Cheers!</p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2007/07/diving-in-san-ramon/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Standards and ECM (cont&#8217;d)</title>
		<link>http://craigrandall.net/archives/2007/07/standards-and-ecm-contd/</link>
		<comments>http://craigrandall.net/archives/2007/07/standards-and-ecm-contd/#comments</comments>
		<pubDate>Fri, 06 Jul 2007 20:31:46 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Content management]]></category>
		<category><![CDATA[DFS]]></category>
		<category><![CDATA[Standards]]></category>

		<guid isPermaLink="false">http://craigrandall.net/archives/2007/07/standards-and-ecm-contd/</guid>
		<description><![CDATA[TweetLaurence oversimplifies and confuses matters where ECM standardization is concerned. However, it&#8217;s perfectly valid to leverage a blog as a learning medium and to &#8220;think out loud&#8221; therein. So, I&#8217;ll respond here both to clarify what EMC is doing in &#8230; <a href="http://craigrandall.net/archives/2007/07/standards-and-ecm-contd/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton291" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FoqDoMb&amp;via=craigsmusings&amp;text=Standards%20and%20ECM%20%28cont%26%238217%3Bd%29&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2007%2F07%2Fstandards-and-ecm-contd%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="Choosing a Target for Standards" href="http://wordofpie.wordpress.com/2007/07/02/choosing-a-target-for-standards/" target="_blank">Laurence oversimplifies and confuses matters</a> where ECM standardization is concerned. However, it&#8217;s perfectly valid to leverage a blog as a learning medium and to &#8220;think out loud&#8221; therein. So, I&#8217;ll respond here both to clarify what EMC is doing in this space and perhaps to offer some guidance to those thinking about ECM standards.  </p>
<p>Let&#8217;s proceed, point-by-point:</p>
<ul>
<li>To repeat myself, customers (i.e. the end users, developer and administrators they represent) require standardization. They expect ECM leaders like EMC to support industry standard&#8211;drive them, too!</li>
<li>As an &#8220;ECM person&#8221; I can confidently say that the &#8220;ECM world&#8221; is definitely ready for standardization. (I don&#8217;t know who Laurence is otherwise referring to.)</li>
<li>I like to think about ECM standardization in light of ECM commoditization. Gartner coined the term &#8220;Basic Content Services&#8221; (BCS) to describe this reality&#8211;that actions like checkin, checkout, version, etc. are fundamental, not differentiating, operations. BCS simply confirms that LCD is a fact of life&#8211;something to embrace, not avoid.</li>
<li>Remember: there is &#8220;enterprise software,&#8221; and there is &#8220;software that <em>runs the enterprise</em>.&#8221; Software running a typical enterprise must interoperate. (It likely also differentiates itself well where feature/function, value, performance, scalability, adaptability, etc. are concerned.)</li>
<li>Read <a title="RESTful Web Services" href="http://www.crummy.com/writing/REST-Web-Services/" target="_blank">RESTful Web Services</a>. Understand the true comparison between approaches&nbsp;lies between REST and RPC, not REST vs. SOAP. Also I don&#8217;t see this as a one-or-the-other decision&#8211;I&#8217;m <a title="REST vs. WS-*: War is Over (If You Want It)" href="http://www.davidchappell.com/blog/2007/06/rest-vs-ws-war-is-over-if-you-want-it.html" target="_blank">not alone</a> here, either. And, yes, this debate can become &#8220;religious&#8221; in nature.</li>
<li>I do, indeed, expect there to be an emphasis on SOA with the launch and release of EMC Documentum 6.0 (D6). I encourage you, whether you&#8217;re a developer, partner, customer project lead or CIO to kick the tires of this major platform release and put DFS through its paces. Ultimately the judgment on &#8220;truth versus fiction&#8221; where SOA enablement in D6 is concerned rests with you. That being said, DFS represents a substantial engineering investment&#8211;one that I&#8217;m proud to represent. </li>
</ul>
<p>It&#8217;s great to see an increase in attention paid to standardization, service-orientation and resource-orientation in ECM. If you have feedback to offer, in terms of standard services/resources, operations/methods, use cases, etc. herein, I&#8217;d love to hear from you. Leave a comment on my blog or post me an email. Cheers! <img src='http://craigrandall.net/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Update 7/11/2007 (via DonR): The REST vs. WS-* war analogy deepens, thanks to Elliotte. <a title="North and South" href="http://cafe.elharo.com/xml/north-and-south/">WS-* is North Korea, and REST is South Korea.</a></p>
<p>Update 7/12/2007: Richard Monson-Haefel, glad to witness the trend now toward REST, says: <a title="WS* vs. REST / Intelligence vs. Wisdom" http://rmh.blogs.com/weblog/2007/06/ws_vs_rest_inte.html">WS* is intelligent. REST is wise.</a></p>
<p>Update 7/15/2007 (via my feed reader): Ted Neward <a title="The Korean Conflict... and why SOAP and REST were never a 'war'" href="http://blogs.tedneward.com/2007/07/14/The+Korean+Conflict+And+Why+SOAP+And+REST+Were+Never+A+Quotwarquot.aspx">chimes in</a> on the Chappell&#8230;Elliotte&#8230; analogies thread.</p>
<p>Update 7/25/2007 (via my feed reader): David Chappell <a href="http://www.davidchappell.com/blog/2007/07/responses-to-rest-vs-ws-war-is-over-if.html">updates</a> us with responses to his original remarks.</p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2007/07/standards-and-ecm-contd/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Standards and ECM</title>
		<link>http://craigrandall.net/archives/2007/06/standards-and-ecm/</link>
		<comments>http://craigrandall.net/archives/2007/06/standards-and-ecm/#comments</comments>
		<pubDate>Mon, 25 Jun 2007 01:04:44 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Content management]]></category>
		<category><![CDATA[DFS]]></category>
		<category><![CDATA[Standards]]></category>

		<guid isPermaLink="false">http://craigrandall.net/archives/2007/06/standards-and-ecm/</guid>
		<description><![CDATA[TweetYesterday, Laurence Hart (a regional ECM consultant) felt compelled to talk about standards in the context of enterprise content management and asked if they&#8217;re getting too much attention. In the process, he linked to one of my EMC Documentum Foundation &#8230; <a href="http://craigrandall.net/archives/2007/06/standards-and-ecm/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton288" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2Fqbghfk&amp;via=craigsmusings&amp;text=Standards%20and%20ECM&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2007%2F06%2Fstandards-and-ecm%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>Yesterday, Laurence Hart (a regional ECM consultant) felt compelled to talk about standards in the context of enterprise content management and asked if they&#8217;re getting too much attention. In the process, <a title="Technology Standards in the Enterprise, Getting Too Much Attention?" href="http://wordofpie.wordpress.com/2007/06/23/enterprise-standards-attention/trackback/" target="_blank">he linked</a> to one of my EMC <a title="Documentum Foundation Services" href="http://craigrandall.net/archives/2007/05/documentum-foundation-services/" target="_blank">Documentum Foundation Services</a> (DFS) posts. </p>
<p>First, let&#8217;s talk about ECM standards. Are they getting too much attention, as Laurence suggests,&nbsp;or <em>not enough attention</em>? I would argue the latter based on recurring conversations with customers and also simply by acknowledging the whole of content we all live in. </p>
<p>While it may be true that compliance with standards is an oft-used tactic to satisfy an RFP&nbsp;checkbox that can in turn lead to increased sales&#8211;generally speaking not just in ECM space&#8211;taking this kind of approach to standards is ill-formed and serves neither the customer nor the service provider. Standards are not an end to themselves; they should represent means to worthwhile ends&#8211;and <em>customers ultimately decide</em> what is worthwhile and valuable. Customers increasingly tell me that the right ECM standard is valuable to them and something they want to see implemented by EMC Documentum. </p>
<p>Why? </p>
<p>The following figures comes my EMC World presentation on DFS: </p>
<p><img src="http://craigrandall.net/dfs/why-ecm-stds.jpg" alt="Why ECM Standards?" /></p>
<p>Today&#8217;s content-centric and content-driven applications need to access ECM services from multiple content stores (e.g. EMC Documentum, SharePoint, Amazon S3, Salesforce.com, etc.). Unless there is an ECM standard for content service providers, the application developer is burdened with adapting to each store as a set of one-off&#8217;s. This causes application development not to scale, and the result is fewer applications that make all enterprise content available to knowledge workers. Rather than estimating the cost of implementing an adapter, the application developer and his or her CIO would rather know what new content can come &#8220;online&#8221; into existing solutions over time and based on standards. </p>
<p>That&#8217;s addressing briefly how ECM standards are relevant for customer applications and solutions. What about customer service implementations? What about ECM service providers themselves? </p>
<p>As with most technology providers, ECM software revenue travels up the value mountain. By this I mean that yesterday&#8217;s value proposition is today&#8217;s commodity and tomorrow&#8217;s legacy (e.g. Laurence&#8217;s reference to ODMA). While life as a typical ECM provider may have began with a repository, it won&#8217;t stay there. In fact, it&#8217;s already moving. So, companies like EMC must look to software services to provide customers value long-term. A service that can easily represent and compose with other content stores, not just its native repository, is a more valuable service. The more I can virtualize enterprise content&#8211;the more I can provide a consistent service layer above that content&#8211;the more relevant I become to your enterprise and its knowledge work. </p>
<p>Laurence stated: &#8220;Standards are enclosed in the SOA efforts of [EMC's] vision.&#8221; DFS is the SOA enabler coming in EMC Documentum 6.0, and as you&#8217;ll <a title="Recording of my EMC World 2007 presentation on DFS" href="http://craigrandall.net/dfs/070524%20EMC%20Documentum%20Foundation%20Services%20(Randall,%20SDC07).mp3" target="_blank">hear me say</a> in my EMC World presentation, DFS is indeed influencing EMC&#8217;s work in the ECM standards space. </p>
<p>Roughly a year ago, <a title="Interoperable Enterprise Content Management" href="http://craigrandall.net/archives/2006/07/iecm/" target="_blank">I blogged about iECM</a>, and I closed by saying that I would provide updates-as-blog-posts as&nbsp;&#8221;iECM progresses toward its stated goals.&#8221; Since then I haven&#8217;t blogged another word about iECM.  </p>
<p>What I can say today is that EMC is working on ECM standardization with other industry leaders, and that EMC is very committed to the important work of making ECM interoperability in a standard way. Just as soon as I can say more, I will! <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/2007/06/standards-and-ecm/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Documentum Foundation Services</title>
		<link>http://craigrandall.net/archives/2007/05/documentum-foundation-services/</link>
		<comments>http://craigrandall.net/archives/2007/05/documentum-foundation-services/#comments</comments>
		<pubDate>Sat, 26 May 2007 20:34:19 +0000</pubDate>
		<dc:creator>Craig</dc:creator>
				<category><![CDATA[Content management]]></category>
		<category><![CDATA[DFS]]></category>
		<category><![CDATA[ECM]]></category>
		<category><![CDATA[EMC World]]></category>
		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://craigrandall.net/?p=282</guid>
		<description><![CDATA[TweetEarlier this week I presented Documentum Foundation Services to a full house at SDC07. I see that John Newton picked up my post. (BTW, I very much agree with John that EMC could do a much better job of opening &#8230; <a href="http://craigrandall.net/archives/2007/05/documentum-foundation-services/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<div id="tweetbutton282" class="tw_button" style="float:right;margin-left:10px;"><a href="http://twitter.com/share?url=http%3A%2F%2Fbit.ly%2FoUduE4&amp;via=craigsmusings&amp;text=Documentum%20Foundation%20Services&amp;related=craigsmusings&amp;lang=en&amp;count=vertical&amp;counturl=http%3A%2F%2Fcraigrandall.net%2Farchives%2F2007%2F05%2Fdocumentum-foundation-services%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 this week <a title="Opening in Orlando" href="http://craigrandall.net/archives/2007/05/opening-in-orlando/">I presented <strong>Documentum Foundation Services</strong></a> to a full house at SDC07. I see that <a href="http://newton.typepad.com/content/2007/05/whats_happening.html" target="_blank">John Newton picked up my post</a>. (BTW, I very much agree with John that EMC could do a much better job of opening up the event, both to those in attendance and those unable to attend, by blogging. <em>Transparency is here to stay</em>.)</p>
<p>John suspects that DFS contains EMC Documentum&#8217;s &#8220;long awaited web services interfaces.&#8221; Actually, <em><a href="http://craigrandall.net/archives/tag/dfs/" rel="tag">DFS</a> is more about SOA enablement</em> than about just web services, but it is true that DFS provides WSDL contracts for a number of core platform services.</p>
<p>On Thursday I presented a repeat of Monday&#8217;s conversation to about 70 SDC07 attendees. Since the repeat session occurred during the very last hour of the conference and the previous evening featured the attendee party at Universal Studios Islands of Adventure, I felt the turn-out to be quite good.</p>
<p>My presentation&#8211;as presented on Thursday&#8211;is <a title="070524 EMC Documentum Foundation Services (Randall, SDC07)" href="https://community.emc.com/docs/DOC-2582">here</a>. I was also able to record Thursday&#8217;s presentation. <a title="070524 EMC Documentum Foundation Services (Randall, SDC07)" href="https://community.emc.com/docs/DOC-2584" target="_blank">Here</a> is that recording, which runs a little over 51 minutes. Lastly, <a title="EMC World 2007 DFS demo sample" href="https://community.emc.com/docs/DOC-2583" target="_blank">here</a> is the small DFS remote client sample that was discussed during my presentation. I revised the sample slightly from what was presented during Monday&#8217;s session to highlight the variety of ways to determine how a particular service contract can be bound by a client.</p>
<p>Whether you choose to comment here on this blog or on EDN, I do hope to hear from you.</p>
<p>Let&#8217;s build a community around DFS together. Cheers!</p>
<p>Update 8/29/2007: The good folks at EDN have produced <a href="http://developer.emc.com/developer/presentations/dfs_craig_randall/player.html" target="_blank">media</a> that combines my presentation slides synchronized with my audio presentation of them during SDC. Enjoy!</p>
<p>Update 1/13/2008: I&#8217;ve begun to move my DFS-related media into the <a title="EDN - Documentum" href="https://community.emc.com/community/edn/documentum" target="_blank">Documentum community</a> area within the <a title="EMC Developer Network" href="https://community.emc.com/community/edn" target="_blank">EDN</a>. This will allow me to better follow and follow-up on individual media (e.g. point out when a sample is out-dated, etc.). It also helps better promote EDN.</p>
]]></content:encoded>
			<wfw:commentRss>http://craigrandall.net/archives/2007/05/documentum-foundation-services/feed/</wfw:commentRss>
		<slash:comments>33</slash:comments>
		</item>
	</channel>
</rss>

