<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>dm_misc: Miscellaneous Documentum Tidbits and Information</title>
	<atom:link href="https://msroth.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://msroth.wordpress.com</link>
	<description>M. Scott Roth</description>
	<lastBuildDate>Mon, 23 Jan 2012 01:38:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='msroth.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>https://secure.gravatar.com/blavatar/dc757f07d6ed973bf85f0ee31674bd90?s=96&#038;d=https%3A%2F%2Fs-ssl.wordpress.com%2Fi%2Fbuttonw-com.png</url>
		<title>dm_misc: Miscellaneous Documentum Tidbits and Information</title>
		<link>https://msroth.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="https://msroth.wordpress.com/osd.xml" title="dm_misc: Miscellaneous Documentum Tidbits and Information" />
	<atom:link rel='hub' href='https://msroth.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Documentum Performance Corner</title>
		<link>https://msroth.wordpress.com/2012/01/22/documentum-performance-corner/</link>
		<comments>https://msroth.wordpress.com/2012/01/22/documentum-performance-corner/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 01:38:26 +0000</pubDate>
		<dc:creator>Scott</dc:creator>
				<category><![CDATA[tidbit]]></category>
		<category><![CDATA[Documentum]]></category>

		<guid isPermaLink="false">http://msroth.wordpress.com/?p=1528</guid>
		<description><![CDATA[Last fall, EMC created a Documentum Performance Corner in the Documentum Developer Community on the EDN to consolidate knowledge and documentation pertaining to performance and scalability of Documentum products.  The main landing page is here:  https://community.emc.com/docs/DOC-12038.  From this landing page, you can find detailed, technical subpages relating to performance issues and tuning for the core Documentum product line, as well as [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=msroth.wordpress.com&amp;blog=13490073&amp;post=1528&amp;subd=msroth&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<div dir="ltr">Last fall, EMC created a <em>Documentum Performance Corner</em> in the Documentum Developer Community on the EDN to consolidate knowledge and documentation pertaining to performance and scalability of Documentum products.  The main landing page is here:  <a href="https://community.emc.com/docs/DOC-12038">https://community.emc.com/docs/DOC-12038</a>.  From this landing page, you can find detailed, technical subpages relating to performance issues and tuning for the core Documentum product line, as well as Captiva and some third-party tools.  The <em>Performance Corner</em> is really a nice, one-stop-shop for everything performance-related on the EDN.  I encourage you to visit it and discover what is there.  I have observed that the <em>Performance Corner</em> is updated frequently, and the maintainers are soliciting feedback and ideas, so visit often.</div>
<div dir="ltr"></div>
<div dir="ltr"></div>
<br />Filed under: <a href='https://msroth.wordpress.com/category/tidbit/'>tidbit</a> Tagged: <a href='https://msroth.wordpress.com/tag/documentum/'>Documentum</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/msroth.wordpress.com/1528/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/msroth.wordpress.com/1528/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/msroth.wordpress.com/1528/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/msroth.wordpress.com/1528/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/msroth.wordpress.com/1528/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/msroth.wordpress.com/1528/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/msroth.wordpress.com/1528/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/msroth.wordpress.com/1528/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/msroth.wordpress.com/1528/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/msroth.wordpress.com/1528/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/msroth.wordpress.com/1528/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/msroth.wordpress.com/1528/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/msroth.wordpress.com/1528/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/msroth.wordpress.com/1528/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=msroth.wordpress.com&amp;blog=13490073&amp;post=1528&amp;subd=msroth&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://msroth.wordpress.com/2012/01/22/documentum-performance-corner/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">msroth</media:title>
		</media:content>
	</item>
		<item>
		<title>dmRecordSet Update</title>
		<link>https://msroth.wordpress.com/2012/01/19/dmrecordset-update/</link>
		<comments>https://msroth.wordpress.com/2012/01/19/dmrecordset-update/#comments</comments>
		<pubDate>Fri, 20 Jan 2012 02:03:03 +0000</pubDate>
		<dc:creator>Scott</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[Documentum]]></category>

		<guid isPermaLink="false">http://msroth.wordpress.com/?p=1537</guid>
		<description><![CDATA[I updated the code for the dmRecordSet class here.  The only change is that I removed some debug statements that made it into the released code. Filed under: code Tagged: Documentum<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=msroth.wordpress.com&amp;blog=13490073&amp;post=1537&amp;subd=msroth&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I updated the code for the dmRecordSet class <a href="http://www.box.com/s/4s9eg0lsq144qxcnifj4" target="_blank">here</a>.  The only change is that I removed some debug statements that made it into the released code.</p>
<br />Filed under: <a href='https://msroth.wordpress.com/category/code/'>code</a> Tagged: <a href='https://msroth.wordpress.com/tag/documentum/'>Documentum</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/msroth.wordpress.com/1537/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/msroth.wordpress.com/1537/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/msroth.wordpress.com/1537/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/msroth.wordpress.com/1537/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/msroth.wordpress.com/1537/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/msroth.wordpress.com/1537/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/msroth.wordpress.com/1537/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/msroth.wordpress.com/1537/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/msroth.wordpress.com/1537/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/msroth.wordpress.com/1537/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/msroth.wordpress.com/1537/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/msroth.wordpress.com/1537/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/msroth.wordpress.com/1537/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/msroth.wordpress.com/1537/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=msroth.wordpress.com&amp;blog=13490073&amp;post=1537&amp;subd=msroth&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://msroth.wordpress.com/2012/01/19/dmrecordset-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">msroth</media:title>
		</media:content>
	</item>
		<item>
		<title>The CRASH Report</title>
		<link>https://msroth.wordpress.com/2012/01/16/the-crash-report/</link>
		<comments>https://msroth.wordpress.com/2012/01/16/the-crash-report/#comments</comments>
		<pubDate>Mon, 16 Jan 2012 21:16:12 +0000</pubDate>
		<dc:creator>Scott</dc:creator>
				<category><![CDATA[tidbit]]></category>

		<guid isPermaLink="false">http://msroth.wordpress.com/?p=1513</guid>
		<description><![CDATA[In December, Cast software, the maker of software quality tools, released their second annual CRASH (Cast Report on Application Software Health) report. The report rated the &#8220;health&#8221; of world-wide software applications by examining the source code of 745 applications (~365 million lines of code), from 160 different companies, spanning 10 industry sectors, and 8 programming [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=msroth.wordpress.com&amp;blog=13490073&amp;post=1513&amp;subd=msroth&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In December, Cast software, the maker of software quality tools, released their second annual CRASH (Cast Report on Application Software Health) report. The report rated the &#8220;health&#8221; of world-wide software applications by examining the source code of 745 applications (~365 million lines of code), from 160 different companies, spanning 10 industry sectors, and 8 programming languages. The code examination flagged 1800 different types of development and architecture violations that compromise application &#8220;health&#8221; in 5 major categories.</p>
<p>Though the report does not mention Documentum or ECM directly, it is an interesting and insightful read to say the least.  I wrote a longer blog post about it <a href="http://www.armedia.com/blog/" target="_blank">here</a>.  The 22-page executive summary can be downloaded from Cast <a href="http://www.castsoftware.com/resources/resource/email-campaigns/cast-report-on-application-software-health?gad=HPH" target="_blank">here</a>.</p>
<br />Filed under: <a href='https://msroth.wordpress.com/category/tidbit/'>tidbit</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/msroth.wordpress.com/1513/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/msroth.wordpress.com/1513/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/msroth.wordpress.com/1513/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/msroth.wordpress.com/1513/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/msroth.wordpress.com/1513/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/msroth.wordpress.com/1513/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/msroth.wordpress.com/1513/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/msroth.wordpress.com/1513/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/msroth.wordpress.com/1513/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/msroth.wordpress.com/1513/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/msroth.wordpress.com/1513/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/msroth.wordpress.com/1513/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/msroth.wordpress.com/1513/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/msroth.wordpress.com/1513/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=msroth.wordpress.com&amp;blog=13490073&amp;post=1513&amp;subd=msroth&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://msroth.wordpress.com/2012/01/16/the-crash-report/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">msroth</media:title>
		</media:content>
	</item>
		<item>
		<title>Sorting with Collators</title>
		<link>https://msroth.wordpress.com/2012/01/08/sorting-with-collators/</link>
		<comments>https://msroth.wordpress.com/2012/01/08/sorting-with-collators/#comments</comments>
		<pubDate>Sun, 08 Jan 2012 21:49:13 +0000</pubDate>
		<dc:creator>Scott</dc:creator>
				<category><![CDATA[tidbit]]></category>

		<guid isPermaLink="false">http://msroth.wordpress.com/?p=1521</guid>
		<description><![CDATA[I learned an interesting thing this week.  I had to sort a set of query results according to these rules:  object names starting with lowercase letters should precede object names starting with uppercase letters, and object names starting with numbers should follow those staring with uppercase letters.  In pseudo-code, the rule looks like this:  [a-z] &#60; [A-Z] &#60; [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=msroth.wordpress.com&amp;blog=13490073&amp;post=1521&amp;subd=msroth&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>I learned an interesting thing this week.  I had to sort a set of query results according to these rules:  object names starting with lowercase letters should precede object names starting with uppercase letters, and object names starting with numbers should follow those staring with uppercase letters.  In pseudo-code, the rule looks like this:  [a-z] &lt; [A-Z] &lt; [0-9].  As you might have noticed, this is exactly the reverse of how strings are naturally sorted (i.e., according to the ASCII table).  So, what I learned is that it is very simple to create a rule-based collator object that defines sort order,s and use it to enable this sort.</p>
<p>The code looks like this:</p>
<blockquote><p>RuleBasedCollator coll = new RuleBasedCollator(<br />
&#8220;&lt; a,A &lt; b,B &lt; c,C &lt; d,D &lt; e,E &lt; f,F &lt; g,G &lt; h,H &lt;i,I &#8221; +<br />
&#8220;&lt; j,J &lt; k,K &lt; l,L &lt; m,M &lt; n,N &lt; o,O &lt; p,P &lt; q,Q &lt; r,R &#8221; +<br />
&#8220;&lt; s,S &lt; t,T &lt; y,U &lt; v,V &lt; w,W &lt; x,X &lt; y,Y &lt; z,Z &#8221; +<br />
&#8220;&lt; 0 &lt; 1 &lt; 2 &lt; 3 &lt; 4 &lt; 5 &lt; 6 &lt; 7 &lt; 8 &lt; 9&#8243;);<br />
Collections.sort(list_of_objects, coll);</p></blockquote>
<p>where list_of_objects is a ListArray of object names.</p>
<p>Simple, clean and uses built-in Java sorting logic.  The nice thing about collators, is you can create any sorting precedent you want.  For example, if you wanted to swap the precedence of S and T in the collation above, simple change the order in the definition of the collator and Voila!, your strings will now sort such that T precedes S.</p>
<p>If you want more on collators, check <a href="http://docs.oracle.com/javase/7/docs/api/java/text/RuleBasedCollator.html" target="_blank">here</a>.</p>
<br />Filed under: <a href='https://msroth.wordpress.com/category/tidbit/'>tidbit</a>  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/msroth.wordpress.com/1521/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/msroth.wordpress.com/1521/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/msroth.wordpress.com/1521/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/msroth.wordpress.com/1521/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/msroth.wordpress.com/1521/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/msroth.wordpress.com/1521/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/msroth.wordpress.com/1521/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/msroth.wordpress.com/1521/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/msroth.wordpress.com/1521/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/msroth.wordpress.com/1521/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/msroth.wordpress.com/1521/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/msroth.wordpress.com/1521/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/msroth.wordpress.com/1521/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/msroth.wordpress.com/1521/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=msroth.wordpress.com&amp;blog=13490073&amp;post=1521&amp;subd=msroth&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://msroth.wordpress.com/2012/01/08/sorting-with-collators/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">msroth</media:title>
		</media:content>
	</item>
		<item>
		<title>Documentum Benchmarks</title>
		<link>https://msroth.wordpress.com/2012/01/03/documentum-benchmarks/</link>
		<comments>https://msroth.wordpress.com/2012/01/03/documentum-benchmarks/#comments</comments>
		<pubDate>Wed, 04 Jan 2012 01:17:39 +0000</pubDate>
		<dc:creator>Scott</dc:creator>
				<category><![CDATA[tidbit]]></category>
		<category><![CDATA[Documentum]]></category>

		<guid isPermaLink="false">http://msroth.wordpress.com/?p=1413</guid>
		<description><![CDATA[In 2003, Documentum began performing benchmark performance and load tests to definitively answer the questions we all get asked:  How fast is Documentum?  How far can Documentum Scale?  Documentum claims to be the market leader in performance and scalability, prove it.  So they did, in a series of benchmark tests performed over the course of the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=msroth.wordpress.com&amp;blog=13490073&amp;post=1413&amp;subd=msroth&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In 2003, Documentum began performing benchmark performance and load tests to definitively answer the questions we all get asked: <em> How fast is Documentum?  How far can Documentum Scale?  Documentum claims to be the market leader in performance and scalability, prove it.</em>  So they did, in a series of benchmark tests performed over the course of the last 8 years.  Here are links to the ones I know about.  Perhaps you know of more:</p>
<ul>
<li><strong>One Billion Object Repository Benchmark Report</strong>, <a href="http://www.cmswire.com/cms/enterprise-cms/documentum-demonstrates-mainframescale-performance-with-billionobject-repository-benchmark-000218.php">http://www.cmswire.com/cms/enterprise-cms/documentum-demonstrates-mainframescale-performance-with-billionobject-repository-benchmark-000218.php</a>.  This is actually a link to a CMSWire story about the benchmark.  If you want the actual report you will need to ask your Documentum rep for a copy.  For some reason it is under a non-disclosure restriction. (Documentum v5.2)</li>
<li><strong>100,000 Concurrent Users Benchmark Report</strong>, <a href="https://community.emc.com/docs/DOC-3237">https://community.emc.com/docs/DOC-3237</a> (Documentum v6.5 SP1).</li>
<li><strong>6,000 Concurrent Searches Benchmark Report</strong>, <a href="https://community.emc.com/docs/DOC-9504">https://community.emc.com/docs/DOC-9504</a> (Documentum v6.5 SP2 with xPlore pre-1.0).</li>
<li><strong>Various others</strong>, <a href="https://community.emc.com/docs/DOC-12727" target="_blank">https://community.emc.com/docs/DOC-12727</a> (xCP, CenterStage, MyDocumentum, Documentum Mobile)</li>
</ul>
<br />Filed under: <a href='https://msroth.wordpress.com/category/tidbit/'>tidbit</a> Tagged: <a href='https://msroth.wordpress.com/tag/documentum/'>Documentum</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/msroth.wordpress.com/1413/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/msroth.wordpress.com/1413/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/msroth.wordpress.com/1413/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/msroth.wordpress.com/1413/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/msroth.wordpress.com/1413/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/msroth.wordpress.com/1413/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/msroth.wordpress.com/1413/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/msroth.wordpress.com/1413/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/msroth.wordpress.com/1413/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/msroth.wordpress.com/1413/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/msroth.wordpress.com/1413/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/msroth.wordpress.com/1413/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/msroth.wordpress.com/1413/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/msroth.wordpress.com/1413/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=msroth.wordpress.com&amp;blog=13490073&amp;post=1413&amp;subd=msroth&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://msroth.wordpress.com/2012/01/03/documentum-benchmarks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">msroth</media:title>
		</media:content>
	</item>
		<item>
		<title>IDfCollections, Part V</title>
		<link>https://msroth.wordpress.com/2011/12/19/idfcollections-part-v/</link>
		<comments>https://msroth.wordpress.com/2011/12/19/idfcollections-part-v/#comments</comments>
		<pubDate>Mon, 19 Dec 2011 14:18:34 +0000</pubDate>
		<dc:creator>Scott</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[Documentum]]></category>

		<guid isPermaLink="false">http://msroth.wordpress.com/?p=1502</guid>
		<description><![CDATA[In this final post of the IDfCollection series, I offer an alternative to the IDfCollection object, the dmRecordSet. The dmRecordSet is an object I created to extend the capabilities of the IDfCollection and overcome many of the limitations I have been discussing here. For example, the dmRecordSet allows you to: move forward, backward or randomly [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=msroth.wordpress.com&amp;blog=13490073&amp;post=1502&amp;subd=msroth&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In this final post of the IDfCollection series, I offer an alternative to the IDfCollection object, the dmRecordSet. The dmRecordSet is an object I created to extend the capabilities of the IDfCollection and overcome many of the limitations I have been discussing here. For example, the dmRecordSet allows you to:</p>
<ul>
<li>move forward, backward or randomly through the record set;</li>
<li>reset the record set to the beginning or the end to be re-processed;</li>
<li>add rows to the set;</li>
<li>determine the number of rows in the set;</li>
<li>determine if a record set is empty or not; and</li>
<li>retrieve column definitions.</li>
</ul>
<p>The following code provides some examples of how easy it is to use the dmRecordSet object.</p>
<p><strong>Instantiate a dmRecordSet:</strong></p>
<p><pre class="brush: css;">
    IDfCollection col = null;
    String dql = &quot;select r_object_id, object_name, &quot;
           + &quot;r_creation_date, a_content_type, r_full_content_size, a_is_template &quot;
           + &quot;from dm_document where folder('/Temp',descend)&quot;;
    IDfQuery q = new DfQuery();
    IDfTypedObject tObj = null;

    q.setDQL(dql);
    col = q.execute(session, DfQuery.DF_READ_QUERY);

    // get record set
    dmRecordSet dmRS = new dmRecordSet(col);
</pre></p>
<p><strong>Test for empty set and count rows:</strong></p>
<p><pre class="brush: css;">
    System.out.println(&quot;Record count = &quot; + dmRS.getRowCount());
    if (dmRS.isEmpty()) {
       System.out.println(&quot;dmRecordSet is empty&quot;);
    } else {
       System.out.println(&quot;dmRecordSet is NOT empty&quot;);
    }
</pre></p>
<p><strong>Process record set:</strong></p>
<p><pre class="brush: css;">
    while (dmRS.hasNext()) {
       tObj = dmRS.next();
       System.out.print(tObj.getString(&quot;r_object_id&quot;) + &quot;\t&quot;);
       System.out.println(tObj.getString(&quot;object_name&quot;);
    }
</pre></p>
<p><strong>Move to end and process set backwards:</strong></p>
<p><pre class="brush: css;">
    tObj = dmRS.last();
    while (dmRS.hasPrevious()) {
        tObj = dmRS.previous();
        System.out.print(tObj.getString(&quot;r_object_id&quot;) + &quot;\t&quot;);
        System.out.println(tObj.getString(&quot;object_name&quot;);
    }
</pre></p>
<p>The class, source code and Javadoc for the dmRecordSet can be downloaded <a href="http://www.box.com/s/4s9eg0lsq144qxcnifj4">here</a>.</p>
<p>I hope you have enjoyed this series on the IDfCollection object, one of the most commonly used but least functional objects in the DFC.  As always, I appreciate your comments and feedback.</p>
<br />Filed under: <a href='https://msroth.wordpress.com/category/code/'>code</a>, <a href='https://msroth.wordpress.com/category/how-to/'>how-to</a> Tagged: <a href='https://msroth.wordpress.com/tag/documentum/'>Documentum</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/msroth.wordpress.com/1502/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/msroth.wordpress.com/1502/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/msroth.wordpress.com/1502/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/msroth.wordpress.com/1502/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/msroth.wordpress.com/1502/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/msroth.wordpress.com/1502/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/msroth.wordpress.com/1502/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/msroth.wordpress.com/1502/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/msroth.wordpress.com/1502/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/msroth.wordpress.com/1502/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/msroth.wordpress.com/1502/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/msroth.wordpress.com/1502/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/msroth.wordpress.com/1502/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/msroth.wordpress.com/1502/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=msroth.wordpress.com&amp;blog=13490073&amp;post=1502&amp;subd=msroth&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://msroth.wordpress.com/2011/12/19/idfcollections-part-v/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">msroth</media:title>
		</media:content>
	</item>
		<item>
		<title>IDfCollections, Part IV</title>
		<link>https://msroth.wordpress.com/2011/12/12/idfcollections-part-iv/</link>
		<comments>https://msroth.wordpress.com/2011/12/12/idfcollections-part-iv/#comments</comments>
		<pubDate>Tue, 13 Dec 2011 02:52:45 +0000</pubDate>
		<dc:creator>Scott</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[tidbit]]></category>
		<category><![CDATA[Documentum]]></category>

		<guid isPermaLink="false">http://msroth.wordpress.com/?p=1467</guid>
		<description><![CDATA[In this post I will show you how to do a recursive operation using IDfCollection objects.  Perhaps more accurately, I will show you how to do a recursive operation in spite of IDfCollection objects.  As I mentioned in Part I of this series, the number of available IDfCollections is limited and it is very important to close collection [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=msroth.wordpress.com&amp;blog=13490073&amp;post=1467&amp;subd=msroth&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In this post I will show you how to do a recursive operation using IDfCollection objects.  Perhaps more accurately, I will show you how to do a recursive operation in spite of IDfCollection objects.  As I mentioned in <a title="IDfCollections, Part I" href="http://msroth.wordpress.com/2011/11/20/idfcollections-part-i/">Part I</a> of this series, the number of available IDfCollections is limited and it is very important to close collection objects as soon as you are done processing them.  This leads to two problems when considering a recursive operation:  1) you don&#8217;t know ahead of time how many IDfCollection objects will be required; and 2) some of the collection objects may need to remain open for a long time.</p>
<p>The obvious solution to the problem is to replace the IDfCollection object with something that is a little more functional.  In the code below I simply us an ArrayList of IDfTypedObjects to represent the contents of the IDfCollection object.  I know, this solution runs contrary to the warning I made in <a title="IDfCollections, Part I" href="http://msroth.wordpress.com/2011/11/20/idfcollections-part-i/">Part I</a> of this series when I warned never to instantiate the IDfTypedObject from the collection.  Well, in this case it is warranted, and the overhead involved with retrieving and instantiating the object is lost in the recursion itself.</p>
<p>I won&#8217;t go through all of this code but simply state that it&#8217;s purpose is to traverse a folder structure, and print a directory listing (similar to an old DOS directory listing).  It&#8217;s probably not the most practical or useful code,  but it illustrates recursion with IDfCollections pretty well.  The key to the code is line 40 &#8211; 50 where the contents of the collection are transferred to the ArrayList of IDfTypedObjects.  The advantage to using IDfTypedObjects, is that later, when the array contents are processed (lines 7 &#8211; 17), you have information about each column of the collection (e.g., the attribute type, the attribute name, etc.).  If your application calls for less information, you could get away with a different or custom data structure in the ArrayList.</p>
<p><pre class="brush: css;">
IDfFolder folder = (IDfFolder) session.getObjectByQualification(&quot;dm_cabinet where object_name = 'Temp'&quot;);

// do recursion
ArrayList dirList = doRecursiveDir(folder);

// process results
for (IDfTypedObject tObj : dirList) {
	if (tObj.getString(&quot;r_object_id&quot;).startsWith(&quot;0b&quot;)) {
		IDfFolder f = (IDfFolder) session.getObject(new DfId(tObj.getString(&quot;r_object_id&quot;)));

		System.out.println(f.getFolderPath(0));
	} else {
		System.out.println(&quot;\t&quot; + tObj.getString(&quot;object_name&quot;)
				+ &quot;\t\t&quot; + tObj.getString(&quot;r_object_id&quot;) + &quot;\t&quot;
				+ tObj.getString(&quot;r_creation_date&quot;) + &quot;\t&quot;
				+ tObj.getString(&quot;a_content_type&quot;) + &quot;\t&quot;
				+ tObj.getString(&quot;r_full_content_size&quot;));
	}
}

private static ArrayList doRecursiveDir(IDfFolder folder) {
	IDfQuery q = new DfQuery();
	IDfCollection col = null;
	ArrayList tempList = new ArrayList();
	ArrayList objList = new ArrayList();

	try {

		// get contents of current folder
		String dql = &quot;select r_object_id, object_name, r_creation_date, a_content_type, r_full_content_size from dm_sysobject &quot;
				+ &quot;where folder(id('&quot; + folder.getObjectId().toString()	+ &quot;'))&quot;;
		q.setDQL(dql);
		col = q.execute(session, DfQuery.DF_READ_QUERY);
		while (col.next()) {
			tempList.add(col.getTypedObject());
		}
		col.close();

		// add objects to list or call recursion if necessary
		for (IDfTypedObject tObj : tempList) {
			objList.add(tObj);

			if (tObj.getString(&quot;r_object_id&quot;).startsWith(&quot;0b&quot;)) {
				IDfFolder f = (IDfFolder) session.getObject(new DfId(tObj.getString(&quot;r_object_id&quot;)));
				objList.addAll(doRecursiveDir(f));
			}
		}
	} catch (DfException e) {
		e.printStackTrace();
	}
	return objList;
}

</pre></p>
<p>The output of this code looks like this:</p>
<blockquote><p>/Temp/Jobs<br />
/Temp/Jobs/dm_GwmTask_Alert<br />
11/11/2011 1:59:26 PM dm_GwmTask_Alert 090000018002c503 11/11/2011 1:59:33 PM crtext 0<br />
11/11/2011 3:15:26 PM dm_GwmTask_Alert 090000018002c52b 11/11/2011 3:15:28 PM crtext 0<br />
11/11/2011 4:10:53 PM dm_GwmTask_Alert 090000018002c535 11/11/2011 4:10:53 PM crtext 0<br />
/Temp/Jobs/dm_FTIndexAgentBoot<br />
/Temp/Jobs/dm_ContentWarning<br />
11/11/2011 1:59:50 PM dm_ContentWarning 090000018002c507 11/11/2011 2:00:09 PM crtext 3909<br />
11/14/2011 11:17:21 AM dm_ContentWarning 090000018002c907 11/14/2011 11:17:40 AM crtext 3909<br />
12/3/2011 10:18:40 PM dm_ContentWarning 090000018002d107 12/3/2011 10:19:15 PM crtext 3906</p></blockquote>
<p>I haven&#8217;t had to do recursive operations too often with Documentum &#8212; in fact, I think the only times I have had to do recursion is for building GUI widgets that represented a tree or folder structure.  So, you be the judge of how practical this is.</p>
<p>In the next post, I will present a replacement for the IDfCollection object, the dmRecordSet,  that doesn&#8217;t suffer from the IDfCollection object&#8217;s shortcomings discussed here over the past few weeks.  For example, the dmRecordSet knows if it is empty; it know how many rows it contains; it can be added to; it can be traversed forward, backward, or randomly; it can be reset, etc.  Check back next week.</p>
<br />Filed under: <a href='https://msroth.wordpress.com/category/code/'>code</a>, <a href='https://msroth.wordpress.com/category/how-to/'>how-to</a>, <a href='https://msroth.wordpress.com/category/tidbit/'>tidbit</a> Tagged: <a href='https://msroth.wordpress.com/tag/documentum/'>Documentum</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/msroth.wordpress.com/1467/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/msroth.wordpress.com/1467/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/msroth.wordpress.com/1467/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/msroth.wordpress.com/1467/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/msroth.wordpress.com/1467/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/msroth.wordpress.com/1467/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/msroth.wordpress.com/1467/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/msroth.wordpress.com/1467/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/msroth.wordpress.com/1467/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/msroth.wordpress.com/1467/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/msroth.wordpress.com/1467/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/msroth.wordpress.com/1467/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/msroth.wordpress.com/1467/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/msroth.wordpress.com/1467/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=msroth.wordpress.com&amp;blog=13490073&amp;post=1467&amp;subd=msroth&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://msroth.wordpress.com/2011/12/12/idfcollections-part-iv/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">msroth</media:title>
		</media:content>
	</item>
		<item>
		<title>IDfCollections, Part III</title>
		<link>https://msroth.wordpress.com/2011/12/06/idfcollections-part-iii/</link>
		<comments>https://msroth.wordpress.com/2011/12/06/idfcollections-part-iii/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 00:06:21 +0000</pubDate>
		<dc:creator>Scott</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[tidbit]]></category>
		<category><![CDATA[Documentum]]></category>

		<guid isPermaLink="false">http://msroth.wordpress.com/?p=1406</guid>
		<description><![CDATA[In the last post I discussed how to determine if an IDfCollection was empty, and how to process a generic IDfCollection (i.e., not knowing anything about its columns).  This week I want to look at two ways to determine the size of an IDfCollection.  As mentioned previously, the IDfCollection object does not have a method or attribute that [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=msroth.wordpress.com&amp;blog=13490073&amp;post=1406&amp;subd=msroth&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In the last post I discussed how to determine if an IDfCollection was empty, and how to process a generic IDfCollection (i.e., not knowing anything about its columns).  This week I want to look at two ways to determine the size of an IDfCollection.  As mentioned previously, the IDfCollection object does not have a method or attribute that identifies how many (if any!) rows it contains.  The first method discussed below is easy to implement, but has several drawbacks.  The second method is a little trickier to implement, but does not suffer from the same drawbacks as the first method.</p>
<p><strong>Method #1</strong></p>
<p>This method loops through the IDfCollection and increments a counter.  The approach is simple, but will consume processing time if the query results are large.  The code looks like this:</p>
<p><pre class="brush: css;">
	dql = &quot;select r_object_id, object_name, r_creation_date, a_content_type, r_full_content_size, a_is_template from dm_document where folder('/Temp', descend)&quot;;
	q = new DfQuery();
	q.setDQL(dql);
	col = q.execute(session, DfQuery.DF_READ_QUERY);

    // count the rows in the collection
	int cnt = 0;
	while (col.next()) {
		cnt++;
	}
	System.out.println(&quot;Collection = &quot; + cnt + &quot; rows&quot;);

    // if there were results, re-run and process
	if (cnt &gt; 0) {
		col = q.execute(session, DfQuery.DF_READ_QUERY);
		processGenericCollection(col);
	}
</pre></p>
<p>Notice the &#8220;gottcha&#8221; here.  After counting the rows in the <code><em>while() </em></code>loop, the IDfCollection object&#8217;s pointer has been advanced beyond the end of the collection.  There is no way to reset the pointer to the beginning of the IDfCollection short of re-running the query. This is a major deficiency in my book. This means you get one shot at processing your query results and you can only plow through them linearly.</p>
<p><strong>Method #2</strong></p>
<p>This second method offloads the task of counting the rows in the result set (i.e., the IDfCollection object) to the database.  To accomplish this, you must issue two queries:  the first returns the count of the database objects that meet the query criteria; the second returns the result set.  The tricky part of this approach is correctly parsing the query and converting it to a &#8216;count&#8217; query.  Usually a simple string match will do the trick, but I have seen some queries blow up when the select variables are removed.  Here is the basic code for this approach.</p>
<p><pre class="brush: css;">

	dql = &quot;select r_object_id, object_name, r_creation_date, a_content_type, r_full_content_size, a_is_template from dm_document where folder('/Temp', descend)&quot;;

	System.out.println(&quot;Results = &quot; + countQuery(dql) + &quot; rows&quot;);

	q = new DfQuery();
	q.setDQL(dql);
	col = q.execute(session, DfQuery.DF_READ_QUERY);
	processGenericCollection(col);
        . . .
// convert query to count query and count results
private static int countQuery(String dql) {
	IDfQuery q = new DfQuery();
	IDfCollection col = null;
	String cntDQL = &quot;select count(*) as cnt &quot;;
	int cnt = -1;

	try {
		cntDQL += dql.substring(dql.indexOf(&quot;from&quot;));
		q.setDQL(cntDQL);
		col = q.execute(session, DfQuery.DF_READ_QUERY);
		col.next();
		    cnt = col.getInt(&quot;cnt&quot;);
		col.close();

	} catch (DfException e) {
		e.printStackTrace();
	}

	return cnt;
}

</pre></p>
<p>This solution isn&#8217;t so much about the IDfCollection object as it is about the query.  Still it seems a bit excessive and awkward just to determine how many rows are in an IDfCollection object.</p>
<p>There you have it, two ways to determine the size of an IDfCollection &#8211; neither of them ideal.  I would love to hear from you if you have a different/better approach.  Next week I&#8217;ll show you some code that does recursion using IDfCollections.</p>
<br />Filed under: <a href='https://msroth.wordpress.com/category/code/'>code</a>, <a href='https://msroth.wordpress.com/category/how-to/'>how-to</a>, <a href='https://msroth.wordpress.com/category/tidbit/'>tidbit</a> Tagged: <a href='https://msroth.wordpress.com/tag/documentum/'>Documentum</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/msroth.wordpress.com/1406/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/msroth.wordpress.com/1406/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/msroth.wordpress.com/1406/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/msroth.wordpress.com/1406/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/msroth.wordpress.com/1406/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/msroth.wordpress.com/1406/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/msroth.wordpress.com/1406/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/msroth.wordpress.com/1406/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/msroth.wordpress.com/1406/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/msroth.wordpress.com/1406/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/msroth.wordpress.com/1406/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/msroth.wordpress.com/1406/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/msroth.wordpress.com/1406/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/msroth.wordpress.com/1406/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=msroth.wordpress.com&amp;blog=13490073&amp;post=1406&amp;subd=msroth&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://msroth.wordpress.com/2011/12/06/idfcollections-part-iii/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">msroth</media:title>
		</media:content>
	</item>
		<item>
		<title>Documentum 6.7, SP1 Now Available</title>
		<link>https://msroth.wordpress.com/2011/11/29/documentum-6-7-sp1-now-available/</link>
		<comments>https://msroth.wordpress.com/2011/11/29/documentum-6-7-sp1-now-available/#comments</comments>
		<pubDate>Tue, 29 Nov 2011 16:00:27 +0000</pubDate>
		<dc:creator>Scott</dc:creator>
				<category><![CDATA[tidbit]]></category>
		<category><![CDATA[Documentum]]></category>

		<guid isPermaLink="false">http://msroth.wordpress.com/?p=1461</guid>
		<description><![CDATA[In case you missed the announcement, here it is again: Documentum 6.7 SP1 and xPlore 1.2 are now available for download! Here is the full announcement.  Notable enhancements include:  JBoss 5.1 for the Java Method Server, a new DQL hint, and tons of new xPlore features including thesaurus support.  Check it out! Filed under: tidbit Tagged: Documentum<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=msroth.wordpress.com&amp;blog=13490073&amp;post=1461&amp;subd=msroth&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In case you missed the announcement, here it is again: Documentum 6.7 SP1 and xPlore 1.2 are now available for download! Here is the full <a href="https://community.emc.com/community/edn/documentum/blog/2011/11/28/content-server-67-sp1-and-xplore-12-now-available">announcement</a>.  Notable enhancements include:  JBoss 5.1 for the Java Method Server, a new DQL hint, and tons of new xPlore features including thesaurus support.  Check it out!</p>
<br />Filed under: <a href='https://msroth.wordpress.com/category/tidbit/'>tidbit</a> Tagged: <a href='https://msroth.wordpress.com/tag/documentum/'>Documentum</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/msroth.wordpress.com/1461/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/msroth.wordpress.com/1461/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/msroth.wordpress.com/1461/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/msroth.wordpress.com/1461/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/msroth.wordpress.com/1461/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/msroth.wordpress.com/1461/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/msroth.wordpress.com/1461/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/msroth.wordpress.com/1461/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/msroth.wordpress.com/1461/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/msroth.wordpress.com/1461/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/msroth.wordpress.com/1461/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/msroth.wordpress.com/1461/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/msroth.wordpress.com/1461/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/msroth.wordpress.com/1461/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=msroth.wordpress.com&amp;blog=13490073&amp;post=1461&amp;subd=msroth&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://msroth.wordpress.com/2011/11/29/documentum-6-7-sp1-now-available/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">msroth</media:title>
		</media:content>
	</item>
		<item>
		<title>IDfCollections, Part II</title>
		<link>https://msroth.wordpress.com/2011/11/27/idfcollections-part-ii/</link>
		<comments>https://msroth.wordpress.com/2011/11/27/idfcollections-part-ii/#comments</comments>
		<pubDate>Mon, 28 Nov 2011 00:04:30 +0000</pubDate>
		<dc:creator>Scott</dc:creator>
				<category><![CDATA[code]]></category>
		<category><![CDATA[how-to]]></category>
		<category><![CDATA[Documentum]]></category>

		<guid isPermaLink="false">http://msroth.wordpress.com/?p=1399</guid>
		<description><![CDATA[In the previous post, we looked at the basics of processing the contents of an IDfCollection object. In this post I will show how to process a generic IDfCollection, and how to determine if an IDfCollection is empty. First, the code for processing a generic IDfCollection. The following method will take as input, an IDfCollection object of [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=msroth.wordpress.com&amp;blog=13490073&amp;post=1399&amp;subd=msroth&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>In the previous post, we looked at the basics of processing the contents of an IDfCollection object. In this post I will show how to process a generic IDfCollection, and how to determine if an IDfCollection is empty.</p>
<p>First, the code for processing a generic IDfCollection. The following method will take as input, an IDfCollection object of which it knows nothing about. It will &#8220;explore&#8221; the collection and retrieve the attribute values it contains according to the column types. You might embed code like this in your application as a generic way to extract IDfCollection content. In this example, I just print the content as it is extracted. This limits the method&#8217;s usefulness as a generic process, but it works well as an illustration.  You can change it to do something more meaningful.</p>
<p><pre class="brush: css;">
private void processGenericCollection(IDfCollection col) {

    // #6 check for empty collections
    boolean isEmpty = true;

        try {
            // #1 print column names
            int colNum = col.getAttrCount();
            for (int i=0; i
               System.out.print(col.getAttr(i).getName() + &quot;\t&quot;);
            }
            System.out.println();

            // #2 print contents of each row
            while (col.next()) {

                // #7 collection is not empty
                isEmpty = false;

                // #3 process each column individually according to its data type
                for (int j=0; j&lt;colNum; j++) {

                // #4 get col data type
                int colType = col.getAttr(j).getDataType();

                // get col value based on type
                String colValue = &quot;&quot;;
                if (colType == IDfType.DF_BOOLEAN)
                   colValue = Boolean.toString(col.getBoolean(col.getAttr(j).getName()));
                else if (colType == IDfType.DF_DOUBLE)
                   colValue = Double.toString(col.getDouble(col.getAttr(j).getName()));
                else if (colType == IDfType.DF_ID)
                   colValue = col.getId(col.getAttr(j).getName()).toString();
                else if (colType == IDfType.DF_INTEGER)
                   colValue = Integer.toString(col.getInt(col.getAttr(j).getName()));
                else if (colType == IDfType.DF_STRING)
                   colValue = col.getString(col.getAttr(j).getName());
                else if (colType == IDfType.DF_TIME)
                   colValue = col.getTime(col.getAttr(j).getName()).toString();

                // #5 print value  System.out.print(colValue + &quot;\t&quot;);
                }
                System.out.println();
            }
        } catch (DfException e) {
            e.printStackTrace();
        }
        col.close();

        // #8 process empty collection
        if (isEmpty)
          System.out.println(&quot;The IDfCollection contains no results (zero rows)&quot;);
     }
</pre></p>
<ol>
<li>Before executing the first <em><code>next()</code></em> method, you can &#8220;explore&#8221; the IDfCollection and retrieve information about the columns.  Unfortunately, you can&#8217;t retrieve information about the rows, like, how many there are (We&#8217;ll look at that next week).  In this example, I just print the names of the columns in the IDfCollection (these will correspond to the values in the SELECT statement).</li>
<li>Now execute the <em><code>next()</code></em> method to advance the row pointer in the IDfCollection.  The <code>col </code>object now represents the first row in the IDfCollection.</li>
<li>Process each column of the current row according to its type.  To do this, iterate over the columns again.  The columns are represented by IDfAttr objects.</li>
<li>Simply get the type of each IDfAttr represents and use an if statement to extract the value using the proper get method (Types are represented as integer constants.  Constants are discussed <a title="DFC Constants Can Be Insightful" href="http://msroth.wordpress.com/2011/03/27/dfc-constants-can-be-insightful/">here</a>.).</li>
<li>Print the value.  Obviously, this is the step in the code where something more interesting needs to happen to make this method worthwhile.  I will expand this code in future posts to do something more useful here.</li>
</ol>
<p>As I mentioned in #1, you can&#8217;t determine how many rows an IDfCollection has by interrogating it &#8212; or if it has any at all. Unfortunately, an empty collection is not returned as <code>null </code>from the <em><code>IDfQuery.execute()</code></em> method because it contains column definitions.  Therefore, testing for a null IDfCollection object will not indicate an empty collection.   The next few bullets present a simple flag that can be set to determine if a collection is empty (i.e., the query returned no results), as opposed to some other error that returned an empty IDfCollection object.</p>
<ol start="6">
<li>Define a boolean variable to act as the flag for an empty IDfCollection object and set it to <code>true </code>(assume the collection is empty until content is actually retrieved).</li>
<li>Once the <em><code>next()</code></em> method executes for the first time, set the flag to <code>false</code>.  If the collection is in fact empty, the code in the <code>while </code>loop will not execute.</li>
<li>Simply test the value of the flag variable and act accordingly.</li>
</ol>
<p>This code is a direct expansion of the basic processing loop presented in the <a title="IDfCollections, Part I" href="http://msroth.wordpress.com/2011/11/20/idfcollections-part-i/">previous post</a>.  It has been enhanced  to accommodate a generic collection (i.e., not knowing what the column names or types are), and to handle empty collections.  Next week I&#8217;ll show you two methods for determining the size of an IDfCollection object.</p>
<br />Filed under: <a href='https://msroth.wordpress.com/category/code/'>code</a>, <a href='https://msroth.wordpress.com/category/how-to/'>how-to</a> Tagged: <a href='https://msroth.wordpress.com/tag/documentum/'>Documentum</a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/msroth.wordpress.com/1399/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/msroth.wordpress.com/1399/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/msroth.wordpress.com/1399/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/msroth.wordpress.com/1399/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/msroth.wordpress.com/1399/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/msroth.wordpress.com/1399/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/msroth.wordpress.com/1399/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/msroth.wordpress.com/1399/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/msroth.wordpress.com/1399/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/msroth.wordpress.com/1399/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/msroth.wordpress.com/1399/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/msroth.wordpress.com/1399/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/msroth.wordpress.com/1399/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/msroth.wordpress.com/1399/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=msroth.wordpress.com&amp;blog=13490073&amp;post=1399&amp;subd=msroth&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>https://msroth.wordpress.com/2011/11/27/idfcollections-part-ii/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="" medium="image">
			<media:title type="html">msroth</media:title>
		</media:content>
	</item>
	</channel>
</rss>
