<?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>家有小虎 &#187; 技术</title>
	<atom:link href="http://jiahu.net/category/%e6%8a%80%e6%9c%af/feed" rel="self" type="application/rss+xml" />
	<link>http://jiahu.net</link>
	<description>我在路上, 你不在身旁. 想你的时候, 温暖依然.</description>
	<lastBuildDate>Fri, 23 Mar 2012 04:47:12 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Hidden features of Python</title>
		<link>http://jiahu.net/hidden-features-of-python.htm</link>
		<comments>http://jiahu.net/hidden-features-of-python.htm#comments</comments>
		<pubDate>Sun, 15 Jan 2012 02:25:32 +0000</pubDate>
		<dc:creator>@ouc</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[资源]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://jiahu.net/?p=1720</guid>
		<description><![CDATA[What are the lesser-known but useful features of the Python programming language? Quick links to answers: Argument Unpacking Braces Chaining Comparison Operators Decorators Default Argument Gotchas / Dangers of Mutable Default arguments Descriptors Dictionary default .get value Docstring Tests Ellipsis Slicing Syntax Enumeration For/else Function as iter() argument Generator expressions import this In Place Value Swapping List <a href="http://jiahu.net/hidden-features-of-python.htm"> read more <span class="meta-nav">&#187;</span></a>]]></description>
			<content:encoded><![CDATA[<p>What are the lesser-known but useful features of the Python programming language?</p>
<h2>Quick links to answers:</h2>
<ul>
<li><a href="http://stackoverflow.com/questions/101268/hidden-features-of-python#111176">Argument Unpacking</a></li>
<li><a href="http://stackoverflow.com/questions/101268/hidden-features-of-python#112303">Braces</a></li>
<li><a href="http://stackoverflow.com/questions/101268/hidden-features-of-python#101945">Chaining Comparison Operators</a></li>
<li><a href="http://stackoverflow.com/questions/101268/hidden-features-of-python#101447">Decorators</a></li>
<li><a href="http://stackoverflow.com/questions/101268/hidden-features-of-python#113198">Default Argument Gotchas / Dangers of Mutable Default arguments</a></li>
<li><a href="http://stackoverflow.com/questions/101268/hidden-features-of-python#102062">Descriptors</a></li>
<li><a href="http://stackoverflow.com/questions/101268/hidden-features-of-python#111970">Dictionary default .get value</a></li>
<li><a href="http://stackoverflow.com/questions/101268/hidden-features-of-python#102065">Docstring Tests</a></li>
<li><a href="http://stackoverflow.com/questions/101268/hidden-features-of-python/112316#112316">Ellipsis Slicing Syntax</a></li>
<li><a href="http://stackoverflow.com/questions/101268/hidden-features-of-python#117116">Enumeration</a></li>
<li><a href="http://stackoverflow.com/questions/101268/hidden-features-of-python#114420">For/else</a></li>
<li><a href="http://stackoverflow.com/questions/101268/hidden-features-of-python#102202">Function as iter() argument</a></li>
<li><a href="http://stackoverflow.com/questions/101268/hidden-features-of-python#101310">Generator expressions</a></li>
<li><a href="http://stackoverflow.com/questions/101268/hidden-features-of-python#101276">import this</a></li>
<li><a href="http://stackoverflow.com/questions/101268/hidden-features-of-python#102037">In Place Value Swapping</a></li>
<li><a href="http://stackoverflow.com/questions/101268/hidden-features-of-python#101840">List stepping</a></li>
<li><a href="http://stackoverflow.com/questions/101268/hidden-features-of-python#112286">__missing__ items</a></li>
<li><a href="http://stackoverflow.com/questions/101268/hidden-features-of-python#101537">Multi-line Regex</a></li>
<li><a href="http://stackoverflow.com/questions/101268/hidden-features-of-python#113164">Named string formatting</a></li>
<li><a href="http://stackoverflow.com/questions/101268/hidden-features-of-python#101549">Nested list/generator comprehensions</a></li>
<li><a href="http://stackoverflow.com/questions/101268/hidden-features-of-python#108297">New types at runtime</a></li>
<li><a href="http://stackoverflow.com/questions/101268/hidden-features-of-python#113833">.pth files</a></li>
<li><a href="http://stackoverflow.com/questions/101268/hidden-features-of-python#1024693">ROT13 Encoding</a></li>
<li><a href="http://stackoverflow.com/questions/101268/hidden-features-of-python#143636">Regex Debugging</a></li>
<li><a href="http://stackoverflow.com/questions/101268/hidden-features-of-python#101739">Sending to Generators</a></li>
<li><a href="http://stackoverflow.com/questions/101268/hidden-features-of-python#168270">Tab Completion in Interactive Interpreter</a></li>
<li><a href="http://stackoverflow.com/questions/101268/hidden-features-of-python#116480">Ternary Expression</a></li>
<li><a href="http://stackoverflow.com/questions/101268/hidden-features-of-python#114157">try/except/else</a></li>
<li><a href="http://stackoverflow.com/questions/101268/hidden-features-of-python#3267903">Unpacking+print() function</a></li>
<li><a href="http://stackoverflow.com/questions/101268/hidden-features-of-python#109182">with statement</a></li>
</ul>
<p>Source: <a href="http://stackoverflow.com/questions/101268/hidden-features-of-python" target="_blank">http://stackoverflow.com/questions/101268/hidden-features-of-python</a></p>
]]></content:encoded>
			<wfw:commentRss>http://jiahu.net/hidden-features-of-python.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A summary of Filip Ekberg&#8217;s blog in 2011</title>
		<link>http://jiahu.net/a-summary-of-filip-ekbergs-blog-in-2011.htm</link>
		<comments>http://jiahu.net/a-summary-of-filip-ekbergs-blog-in-2011.htm#comments</comments>
		<pubDate>Sun, 15 Jan 2012 01:59:24 +0000</pubDate>
		<dc:creator>@ouc</dc:creator>
				<category><![CDATA[工作]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[.Net]]></category>
		<category><![CDATA[书摘]]></category>

		<guid isPermaLink="false">http://jiahu.net/?p=1717</guid>
		<description><![CDATA[Let’s get to it, here’s a link summary to all Filip Ekbery&#8216;s posts in 2011 Dynamic programming Adding properties and methods to an ExpandoObject, dynamically! Extend your objects with DynamicObject to get a dynamic experience Invoke a dynamic object as if it were a method Using dynamic in the real world with IronPython Playing with <a href="http://jiahu.net/a-summary-of-filip-ekbergs-blog-in-2011.htm"> read more <span class="meta-nav">&#187;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Let’s get to it, here’s a link summary to all <a href="http://blog.csharptutor.com/2012/01/05/a-summary-of-2011-and-a-look-at-what-is-about-to-come/" target="_blank">Filip Ekbery</a>&#8216;s posts in 2011</p>
<p><strong>Dynamic programming</strong></p>
<ul>
<li><a title="Adding properties and methods to an ExpandoObject, dynamically! " href="http://blog.filipekberg.se/2011/10/02/adding-properties-and-methods-to-an-expandoobject-dynamicly/" target="_blank">Adding properties and methods to an ExpandoObject, dynamically!</a></li>
<li><a title="Extend your objects with DynamicObject to get a dynamic experience" href="http://blog.filipekberg.se/2011/10/02/extend-your-objects-with-dynamicobject-to-get-a-dynamic-experience/" target="_blank">Extend your objects with DynamicObject to get a dynamic experience</a></li>
<li><a title="Invoke a dynamic object as if it were a method" href="http://blog.filipekberg.se/2011/10/03/invoke-a-dynamic-object-as-if-it-where-a-method/" target="_blank">Invoke a dynamic object as if it were a method</a></li>
<li><a title="Using dynamic in the real world with IronPython" href="http://blog.filipekberg.se/2011/10/04/using-dynamic-in-the-real-world-with-ironpython/" target="_blank">Using dynamic in the real world with IronPython</a></li>
<li><a title="Playing with anonymous types in C#" href="http://blog.filipekberg.se/2011/10/06/playing-with-anonymous-types-in-c/" target="_blank">Playing with anonymous types in C#</a></li>
<li><a title="Exploring reflection – Finding a value in any of the objects properties" href="http://blog.filipekberg.se/2011/10/08/exploring-reflection-finding-a-value-in-any-of-the-objects-properties/" target="_blank">Exploring reflection – Finding a value in any of the objects properties</a></li>
<li><a title="What is reflection and why is it useful?" href="http://blog.filipekberg.se/2011/10/09/what-is-reflection-and-why-is-it-useful/" target="_blank">What is reflection and why is it useful?</a></li>
<li><a title="Using reflection to get information about attributes on your class and properties" href="http://blog.filipekberg.se/2011/10/09/using-reflection-to-get-information-about-attributes-on-your-class-and-properties/" target="_blank">Using reflection to get information about attributes on your class and properties</a></li>
<li><a title="Setting values by using reflection" href="http://blog.filipekberg.se/2011/10/10/setting-values-by-using-reflection/" target="_blank">Setting values by using reflection</a></li>
<li><a title="Creating static methods at runtime" href="http://blog.filipekberg.se/2011/10/11/creating-static-methods-at-runtime/" target="_blank">Creating static methods at runtime</a></li>
<li><a title="Getting information about a method and its local variables" href="http://blog.filipekberg.se/2011/10/12/getting-information-about-a-method-and-its-local-variables/" target="_blank">Getting information about a method and its local variables</a></li>
<li><a title="How Dynamic Methods affect resources like memory and disk space" href="http://blog.filipekberg.se/2011/10/13/how-dynamic-methods-affect-resources-like-memory-and-disk-space/" target="_blank">How Dynamic Methods affect resources like memory and disk space&gt;</a></li>
<li><a title="Calling a non-dynamic method with parameters from a dynamic method" href="http://blog.filipekberg.se/2011/10/14/calling-a-non-dynamic-method-with-parameters-from-a-dynamic-method/" target="_blank">Calling a non-dynamic method with parameters from a dynamic method</a></li>
<li><a title="Exploring OpCodes with DynamicMethod and looking at the evaluation stack" href="http://blog.filipekberg.se/2011/10/16/exploring-opcodes-with-dynamicmethod-and-looking-at-the-evaluation-stack/" target="_blank">Exploring OpCodes with DynamicMethod and looking at the evaluation stack</a></li>
<li><a title="Calling a dynamic method from a dynamic method" href="http://blog.filipekberg.se/2011/10/16/calling-a-dynamic-method-from-a-dynamic-method/" target="_blank">Calling a dynamic method from a dynamic method</a></li>
<li><a title="Creating a recursive dynamic method that calculates factorial" href="http://blog.filipekberg.se/2011/10/17/creating-a-recursive-dynamic-method-that-calculates-factorial/" target="_blank">Creating a recursive dynamic method that calculates factorial</a></li>
<li><a title="Creating a Dynamic Method that uses a Switch" href="http://blog.filipekberg.se/2011/10/18/creating-a-dynamic-method-that-uses-a-switch/" target="_blank">Creating a Dynamic Method that uses a Switch</a></li>
</ul>
<p><strong>Software Architecture</strong></p>
<ul>
<li><a title="Over-engineering trivial tasks can be challenging and educating" href="http://blog.filipekberg.se/2011/06/01/over-engineering-trivial-tasks-can-be-challanging-and-educating/" target="_blank">Over-engineering trivial tasks can be challenging and educating</a></li>
<li><a title="Making code more readable with anonymous functions" href="http://blog.filipekberg.se/2011/10/05/making-code-more-readable-with-anonymous-functions/" target="_blank">Making code more readable with anonymous functions</a></li>
<li><a title="Adapting to Inversion of Control and Dependency Injection" href="http://blog.filipekberg.se/2011/12/20/adapting-to-inversion-of-control-and-dependency-injection/" target="_blank">Adapting to Inversion of Control and Dependency Injection</a></li>
</ul>
<p><strong>Compiler as a Service</strong></p>
<ul>
<li><a title="Using Roslyn to parse C# code files" href="http://blog.filipekberg.se/2011/10/20/using-roslyn-to-parse-c-code-files/" target="_blank">Using Roslyn to parse C# code files</a></li>
<li><a title="Getting all methods from a code file with Roslyn" href="http://blog.filipekberg.se/2011/10/21/getting-all-methods-from-a-code-file-with-roslyn/" target="_blank">Getting all methods from a code file with Roslyn</a></li>
<li><a title="Creating a basic code analysis with Roslyn" href="http://blog.filipekberg.se/2011/10/23/creating-a-basic-code-analysis-with-roslyn/" target="_blank">Creating a basic code analysis with Roslyn</a></li>
<li><a title="Exploring how to write a code analyzer with Roslyn" href="http://blog.filipekberg.se/2011/10/23/exploring-how-to-write-a-code-analyzer-with-roslyn/" target="_blank">Exploring how to write a code analyzer with Roslyn</a></li>
<li><a title="Using the C# Interactive Window that comes with Roslyn" href="http://blog.filipekberg.se/2011/11/14/using-the-c-interactive-window-that-comes-with-roslyn/" target="_blank">Using the C# Interactive Window that comes with Roslyn</a></li>
<li><a title="Using the C# Interactive Window that comes with Roslyn – Part 2" href="http://blog.filipekberg.se/2011/11/25/using-the-c-interactive-window-that-comes-with-roslyn-part-2/" target="_blank">Using the C# Interactive Window that comes with Roslyn – Part 2</a></li>
<li><a title="Hosted Execution of smaller code snippets with Roslyn" href="http://blog.filipekberg.se/2011/12/08/hosted-execution-of-smaller-code-snippets-with-roslyn/" target="_blank">Hosted Execution of smaller code snippets with Roslyn</a></li>
</ul>
<p><strong>Screencasts</strong></p>
<ul>
<li><a title="C# 5 Async CTP – Async in Action – Video screencast" href="http://blog.filipekberg.se/2011/06/11/c-5-async-ctp-async-in-action-video-screencast/" target="_blank">C# 5 Async CTP – Async in Action – Video screencast</a></li>
<li><a title="C# 5 Async CTP – Old VS New – Video screencast" href="http://blog.filipekberg.se/2011/06/20/c-5-async-ctp-%E2%80%93-old-vs-new-%E2%80%93-video-screencast/" target="_blank">C# 5 Async CTP – Old VS New – Video screencast</a></li>
<li><a title="C# 4.0 Using the Dynamic Keyword" href="http://blog.filipekberg.se/2011/07/21/c-4-0-using-the-dynamic-keyword/" target="_blank">C# 4.0 Using the Dynamic Keyword</a></li>
<li><a title="Generic Programming in C#" href="http://blog.filipekberg.se/2011/07/25/generic-programming-in-c/" target="_blank">Generic Programming in C#</a></li>
</ul>
<p><strong>Other</strong></p>
<ul>
<li><a title="WPF vs WinForms – Which is easier to learn?" href="http://blog.filipekberg.se/2011/07/10/wpf-vs-winforms-which-is-easier-to-learn/" target="_blank">WPF vs WinForms – Which is easier to learn?</a></li>
<li><a title="Visual Studio 11 and Visual Studio 2010 Side by Side" href="http://blog.filipekberg.se/2011/09/19/visual-studio-11-and-visual-studio-2010-side-by-side/" target="_blank">Visual Studio 11 and Visual Studio 2010 Side by Side</a></li>
<li><a title="When can knowing about IL and the internals be useful?" href="http://blog.filipekberg.se/2011/10/19/when-can-knowing-about-il-and-the-internals-be-useful/" target="_blank">When can knowing about IL and the internals be useful?</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://jiahu.net/a-summary-of-filip-ekbergs-blog-in-2011.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>国际民航组织（ICAO）使用的“标准解释法”</title>
		<link>http://jiahu.net/%e5%9b%bd%e9%99%85%e6%b0%91%e8%88%aa%e7%bb%84%e7%bb%87icao%e4%bd%bf%e7%94%a8%e7%9a%84%e6%a0%87%e5%87%86%e8%a7%a3%e9%87%8a%e6%b3%95.htm</link>
		<comments>http://jiahu.net/%e5%9b%bd%e9%99%85%e6%b0%91%e8%88%aa%e7%bb%84%e7%bb%87icao%e4%bd%bf%e7%94%a8%e7%9a%84%e6%a0%87%e5%87%86%e8%a7%a3%e9%87%8a%e6%b3%95.htm#comments</comments>
		<pubDate>Mon, 02 Jan 2012 07:54:00 +0000</pubDate>
		<dc:creator>@ouc</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[资源]]></category>
		<category><![CDATA[标准]]></category>

		<guid isPermaLink="false">http://jiahu.net/?p=1714</guid>
		<description><![CDATA[字母&#09;&#09;标准解释法&#09;&#09;其他解释法 A&#09;&#09;ALFA&#09;&#09;AMERICA B&#09;&#09;BRAVO&#09;&#09;BOSTON C&#09;&#09;CHARLIE&#09;&#09;CANADA D&#09;&#09;DELTA&#09;&#09;DENMARK E&#09;&#09;ECHO&#09;&#09;ENGLAND F&#09;&#09;FOXTROT&#09;&#09;FLORIDA G&#09;&#09;GOLF&#09;&#09;GERMANY H&#09;&#09;HOTEL&#09;&#09;TONOLULU I&#09;&#09;INDIA&#09;&#09;ITALY J&#09;&#09;JULIET&#09;&#09;JAPAN K&#09;&#09;KILO&#09;&#09;KILOWATT L&#09;&#09;LIMA&#09;&#09;LONDON M&#09;&#09;MIKE&#09;&#09;MEXICO N&#09;&#09;NOVEMBER&#09;&#09;NORWAY O&#09;&#09;OSCAR&#09;&#09;ONTARIO P&#09;&#09;PAPA&#09;&#09;PETER Q&#09;&#09;QUEEC&#09;&#09;QUEEN R&#09;&#09;ROMEO&#09;&#09;RADIO S&#09;&#09;SIERRA&#09;&#09;SUGAR T&#09;&#09;TANGO&#09;&#09;TOKYO U&#09;&#09;UNIFORM&#09;&#09;UNITED V&#09;&#09;VICTOR&#09;&#09;VIRGINIA W&#09;&#09;WHISKEY&#09;&#09;WASHINGTON X&#09;&#09;X-RAY&#09;&#09;- Y&#09;&#09;YANKEE&#09;&#09;YOKOHAMA Z&#09;&#09;ZULO&#09;&#09;ZANZIBAR]]></description>
			<content:encoded><![CDATA[<p>字母&#09;&#09;标准解释法&#09;&#09;其他解释法<br />
A&#09;&#09;ALFA&#09;&#09;AMERICA<br />
B&#09;&#09;BRAVO&#09;&#09;BOSTON<br />
C&#09;&#09;CHARLIE&#09;&#09;CANADA<br />
D&#09;&#09;DELTA&#09;&#09;DENMARK<br />
E&#09;&#09;ECHO&#09;&#09;ENGLAND<br />
F&#09;&#09;FOXTROT&#09;&#09;FLORIDA<br />
G&#09;&#09;GOLF&#09;&#09;GERMANY<br />
H&#09;&#09;HOTEL&#09;&#09;TONOLULU<br />
I&#09;&#09;INDIA&#09;&#09;ITALY<br />
J&#09;&#09;JULIET&#09;&#09;JAPAN<br />
K&#09;&#09;KILO&#09;&#09;KILOWATT<br />
L&#09;&#09;LIMA&#09;&#09;LONDON<br />
M&#09;&#09;MIKE&#09;&#09;MEXICO<br />
N&#09;&#09;NOVEMBER&#09;&#09;NORWAY<br />
O&#09;&#09;OSCAR&#09;&#09;ONTARIO<br />
P&#09;&#09;PAPA&#09;&#09;PETER<br />
Q&#09;&#09;QUEEC&#09;&#09;QUEEN<br />
R&#09;&#09;ROMEO&#09;&#09;RADIO<br />
S&#09;&#09;SIERRA&#09;&#09;SUGAR<br />
T&#09;&#09;TANGO&#09;&#09;TOKYO<br />
U&#09;&#09;UNIFORM&#09;&#09;UNITED<br />
V&#09;&#09;VICTOR&#09;&#09;VIRGINIA<br />
W&#09;&#09;WHISKEY&#09;&#09;WASHINGTON<br />
X&#09;&#09;X-RAY&#09;&#09;-<br />
Y&#09;&#09;YANKEE&#09;&#09;YOKOHAMA<br />
Z&#09;&#09;ZULO&#09;&#09;ZANZIBAR</p>
]]></content:encoded>
			<wfw:commentRss>http://jiahu.net/%e5%9b%bd%e9%99%85%e6%b0%91%e8%88%aa%e7%bb%84%e7%bb%87icao%e4%bd%bf%e7%94%a8%e7%9a%84%e6%a0%87%e5%87%86%e8%a7%a3%e9%87%8a%e6%b3%95.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Useful DQL Queries</title>
		<link>http://jiahu.net/useful-dql-queries.htm</link>
		<comments>http://jiahu.net/useful-dql-queries.htm#comments</comments>
		<pubDate>Fri, 16 Dec 2011 10:02:11 +0000</pubDate>
		<dc:creator>@ouc</dc:creator>
				<category><![CDATA[工作]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[Documentum]]></category>
		<category><![CDATA[DQL]]></category>

		<guid isPermaLink="false">http://jiahu.net/?p=1711</guid>
		<description><![CDATA[1. DQL to create user create “dm_user” object set client_capability=2, set default_folder=’’, set home_docbase=’’, set mailto:user_address=’a@abc.com’, set user_os_domain=’’, set user_name=’’, set user_os_name=’’, set user_privileges=0; 2. DQL to execute stored procedure (works for all supported DBMSes) execute exec_sql with query=’execute my_sp_test ”123”,”prasad” ‘; 3. Running DQL in batch mode a. Create a dql file b. Run <a href="http://jiahu.net/useful-dql-queries.htm"> read more <span class="meta-nav">&#187;</span></a>]]></description>
			<content:encoded><![CDATA[<p>1. DQL to create user<br />
create “dm_user” object<br />
set client_capability=2,<br />
set default_folder=’’,<br />
set home_docbase=’’,<br />
set mailto:user_address=’a@abc.com’,<br />
set user_os_domain=’’,<br />
set user_name=’’,<br />
set user_os_name=’’,<br />
set user_privileges=0;<br />
2. DQL to execute stored procedure (works for all supported DBMSes)<br />
execute exec_sql with query=’execute my_sp_test ”123”,”prasad” ‘;<br />
3. Running DQL in batch mode<br />
a. Create a dql file<br />
b. Run the following from command prompt<br />
$idql docbasename -Uusername -Ppassword -Rtest.dql<br />
Example command<br />
C:\Documentum\product\5.3\bin>idql32 docbasename-Uusername -Ppassword -RC:<br />
\test.dql<br />
test.dql would contain something like this<br />
go<br />
go<br />
4. DQL to Get all Files under a Particular Cabinet<br />
select r_object_id, object_name from dm_document(all) where folder(’/Cabinet name’, descend);<br />
The above DQL gives all versions. To get only current versions<br />
select * from dm_document where folder (’/Cabinet name’, descend)<br />
5. DQL to get total number of documents and folders under a cabinet<br />
SELECT count(*) as cnt, ‘Docs’ as category FROM dm_document(all)<br />
WHERE FOLDER (’/Cabinet Name’,DESCEND)<br />
UNION<br />
SELECT count(*) as cnt, ‘Folders’ as category FROM dm_folder<br />
WHERE FOLDER (’/Cabinet Name’,DESCEND)<br />
6. DQL to find whether a document is a part of virtual document<br />
SELECT object_name,r_object_id FROM dm_sysobject<br />
WHERE r_object_id IN<br />
(SELECT parent_id FROM dmr_containment<br />
WHERE component_id = (SELECT i_chronicle_id FROM dm_sysobject WHERE r_object_id = ‘’))<br />
7. Repeating attributes<br />
Repeated attribute queries are always a fun. I am going to present here more repeated attribute queries. But for starters, recognize the importance of ANY keyword<br />
select r_folder_path from dm_folder where object_name<br />
=’myFolder’ and any r_folder_path =’/Cabinet Name/test’;<br />
8. DQL to find object type of a document<br />
select r_object_type from dm_document where object_name=’ObjectName’;<br />
9. DQL for index<br />
Following query creates index<br />
EXECUTE make_index WITH type_name=’dmi_workitem’,attribute=’r_workflow_id’<br />
Using the query below, one can find out whether index has been succesfully created or alternatively whether the index exists or not<br />
Select r_object_id,index_type,attribute,attr_count,data_space from dmi_index where index_type in (select r_object_id from dm_type where name=’dmi_workitem’);<br />
10. DQL to see sessions<br />
execute show_sessions<br />
11. Enable FTDQL<br />
SELECT<br />
r_object_id,<br />
score,<br />
text,<br />
object_name,<br />
r_object_type,<br />
r_lock_owner,<br />
owner_name,<br />
r_link_cnt,<br />
r_is_virtual_doc,<br />
r_content_size,<br />
a_content_type,<br />
i_is_reference,<br />
r_assembled_from_id,<br />
r_has_frzn_assembly,<br />
a_compound_architecture,<br />
i_is_replica,<br />
r_policy_id,acl_name,<br />
r_creation_date,<br />
r_modify_date,<br />
subject<br />
FROM<br />
custom_document<br />
WHERE<br />
(custom_attr1 = ’search1′ AND<br />
(custom_attr2 = ’search2′ AND<br />
)) AND<br />
(a_is_hidden = FALSE)<br />
ENABLE<br />
(FTDQL)<br />
12. DQL to get current date, time<br />
select DATE(now) as systime from dm_server_config;<br />
13. DQL to list all available templates in Webpublisher<br />
select * from my_document where folder(’/WebPublisher Configuration/Content Templates/myTemplates’,descend) and any r_version_label =’Approved’;<br />
14. DQL to list objects having duplicate names<br />
SELECT object_name, count(*) FROM dm_document<br />
GROUP BY object_name<br />
HAVING count(*) > 1<br />
ORDER BY object_name<br />
15. Clear INBOX<br />
delete dmi_queue_item objects where delete_flag=0<br />
16. DQL to retrieve all required attributes of a particular type<br />
SELECT attr_name FROM dmi_dd_attr_info WHERE type_name=’dm_document’ AND is_required 0<br />
17. DQL to list workflow attachments<br />
select r_component_id, r_component_name from dmi_wf_attachment where r_workflow_id = ‘’<br />
18. If your statistics are not up to date, database may choose a very inefficient execution plan. Be sure toupdate statistics often. It is recommended that you use the dm_UpdateStatistics job as it will calculateextended statistics on particular tables and columns which provide additional performance benefits. If the DBA uses their own scripts to calculate the statistics, then these enhancements will not be available.<br />
19.Use the script “dctm_indexes_by_table.sql” to generate a list of all indexes on Documentum tables, ordered by table name. (Available from http://developer.documentum.com.)<br />
Use the script “dctm_indexes_by_index.sql” to generate a list of all indexes on Documentum tables,<br />
ordered by index name. (Available from http://developer.documentum.com.)<br />
20.It is strongly recommended that all indexes on Documentum base tables be created from within Documentum and not at the database level.<br />
There are two reasons for this:<br />
The internal conversion process from DQL to SQL will check for the presence of a dmi_index object for repeating valued attributes and will generate different SQL according to what it finds.<br />
If indexes are created directly through SQL*Plus, then Documentum will not know anything about them and will assume it is unindexed. This may result in a less efficient SQL query.<br />
Secondly, if the indexes are created from within Documentum, and they are inadvertently dropped, the dm_DBWarning job will automatically recreate them at next execution.<br />
The syntax for creating new indexes is as follows:<br />
In DQL:<br />
EXECUTE make_index WITH type_name=object_type,<br />
attribute=attribute_name{,attribute=attribute_name,…)<br />
or<br />
Using APIs:<br />
dmAPIGet(”apply,session,NULL,MAKE_INDEX,TYPE_NAME,S,object_type,ATTRIBUTE,S<br />
,attribute_name(,ATTRIBUTE,S,attribute_name,…}<br />
These indexes will be created in the tablespace identified by the index_store server.ini parameter.<br />
Be sure to create the index on the appropriate type table.<br />
For example, although ‘keywords’ is an attribute of the dm_document type, it is actually inherited from ‘keywords’ from the dm_sysobject type.<br />
Drop the Index if Necessary<br />
If there is no performance improvement, OR the optimizer is not using the new index, drop it using:<br />
EXECUTE drop_index [[FOR] dmi_index_id] [WITH name = index_name]<br />
or<br />
dmAPIGet(”apply,session,dmi_index_id,DROP_INDEX [,NAME,S,index_name]“)<br />
21. Using the iapi utility and the trace API you can generate log information that contains the SQL resulting from a DQL query.<br />
This is useful when it is a DQL query that is performing poorly and you wish to test using a nonsuperuser account. Non-query type APIs are not traced.<br />
Here is an example of tracing a simple DQL query.<br />
trace,c,10,,DM_QUERY.<br />
More on TKPROF here</p>
<p>http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96533/sqltrace.htm</p>
<p>22. DQL Hints<br />
SELECT object_name FROM dm_document ENABLE (RETURN_TOP 10)<br />
For DB2, performance can be improved using<br />
SELECT object_name FROM dm_document ENABLE (RETURN_TOP 10, OPTIMIZE_TOP 10)<br />
The FETCH_ALL_RESULTS N hint fetches all the results from the database<br />
immediately and closes the cursor. The hint does not affect the execution plan,<br />
but may free up database resources more quickly.<br />
To fetch all the results, set N to 0.<br />
On SQL Server, it is recommended that you use SQL_DEF_RESULT_SETS<br />
instead of the FETCH_ALL_RESULTS hint. SQL_DEF_RESULTS_SETS<br />
provides the same benefits and is the recommended way to access SQL Server<br />
databases.<br />
Passthrough hints are hints that are passed to the RDBMS server. They are not<br />
handled by Content Server.<br />
To include a passthrough hint, you must identify the database for which the<br />
hint is valid. To identify the target database, keywords precede the hints. The<br />
valid keywords are: ORACLE, SQL_SERVER, SYBASE, and DB2. For<br />
example, the following statement includes passthrough hints for SQL Server:<br />
SELECT “r_object_id” FROM “dm_document”<br />
WHERE “object_name” =’test’<br />
ENABLE SQL_SERVER(’ROBUST PLAN’,’FAST 4’,’ROBUST PLAN’)<br />
For portability, you can include passthrough hints for multiple databases in<br />
one statement. The entire list of hints must be enclosed in parentheses. The<br />
syntax is:<br />
(database_hint_list {,database_hint_list})<br />
where database_hint_list is:<br />
db_keyword(’hint’{,’hint})<br />
db_keyword is one of the valid keywords identifying a database. hint is any hint<br />
valid on the specified database.<br />
For example:<br />
SELECT object_name FROM dm_document doc dm_user u<br />
WHERE doc.r_creator_name = u.user_name ENABLE<br />
(ORACLE(’RULE’,’PARALLEL’), SYBASE(’AT ISOLATION READ<br />
UNCOMMITTED’),SQL_SERVER(’LOOP JOIN’,’FAST 1’)<br />
Use FETCH_ALL_RESULTS if you want to reduce the resources used by the<br />
database server by quickly closing cursors. On SQL Server, try<br />
FETCH_ALL_RESULTS if using SQL_DEF_RESULT_SETS did not improve<br />
query performance.<br />
23. If the table is registered, check with the owner of the registered table, or a Documentum superuser, about giving you access to the table.<br />
You will need at least a BROWSE permit on the registered table object in order to access it. If the table has not yet been registered, check with the table’s owner about registering it. Note that you must have READ access to the dm_registered object for this table in order to access it in any way (SELECT, INSERT, UPDATE, DELETE).<br />
Note that if you specified the special dm_dbo document base owner, the first parameter will hold the actual name of the document base owner.<br />
24. DQL to list docbrokers<br />
execute list_targets<br />
25. DQL to list worrkflow information<br />
select task_name, task_state, actual_start_date, dequeued_date from dmi_queue_item where router_id = ‘workflowId’<br />
26. Query to find active workflows, supervisors of the workflows<br />
select r_object_id, object_name, title, owner_name,r_object_type, r_creation_date, r_modify_date, a_content_type from dm_document where r_object_id in(select r_component_id from dmi_package where r_workflow_id in (select r_object_id from dm_workflow where r_runtime_state = 1))<br />
27. Though this is not DQL, I thought of mentioning here as it most widely used DFC operation<br />
sysObject.queue (”dm_autorender_win31?, _<br />
“rendition”, _<br />
0, _<br />
False, _<br />
dueDate, _<br />
“rendition_req_ps_pdf”)<br />
28. To find ACLs related to dm_sysobject:<br />
select r_object_id as obj_id, object_name from<br />
dm_sysobject (all)<br />
where acl_name =” and<br />
acl_domain = ”<br />
To find ACLs as the default ACL of a user:<br />
select user_name from dm_user where acl_name=”<br />
To find ACLs associated with a type:<br />
select r_object_id, r_type_name from dmi_type_info where acl_domain=” and acl_name=”<br />
When these queries do not return any related objects and you still cannot delete the ACL, use tracing:<br />
In the Message Tester or IAPI, execute the command: apply,c,NULL,SQL_TRACE,LEVEL,I,1<br />
Then, try to delete the ACL that is causing problem.<br />
Turn off tracing by executing:<br />
apply,c,NULL,SQL_TRACE,LEVEL,I,0<br />
Examine the session log for the trace output, located in $DOCUMENTUM/dba/log//<br />
Excerpt of the session log:<br />
[DM_ACL_E_DESTROY_IN_USE]error: “Failed to destroy the ACL ‘Documentum Users’ in domain ‘dbabep’ because it is in use.”<br />
[DM_SESSION_I_SESSION_QUIT]info: “Session 01000dcb80010ccf quit.”<br />
Run the following query from Oracle SQL:<br />
select r_object_id from dm_sysobject_s where acl_domain =’dbabep’ and acl_name =’Documentum Users’ union select r_object_id from dm_user_s where acl_domain = ‘dbabep’ and acl_name =’Documentum Users’ union select r_object_id from dmi_type_info_s where acl_domain =’dbabep’ and acl_name =’Documentum Users’<br />
It will return the r_object_id value = 09000dcb800362c4.<br />
Run the following query from IDQL:<br />
select object_name<br />
from dm_sysobject<br />
where r_object_id=’09000dcb800362c4′<br />
If the above query returned nothing, then this object cannot be accessed by any Documentum WorkSpace method, only via SQL in the underlying Oracle database. The following entries must be deleted at the RDBMS level: dm_sysobject_s and dm_sysobject_r tables; there are no entries in the dmi_object table<br />
29. List of object types and corresponding identifiers. Helpful when reading the code.<br />
00 dmi_audittrail_attrs<br />
03 dm_type<br />
05 dmr_containment<br />
06 dmr_content<br />
08 dm_application<br />
08 dm_job<br />
08 dm_procedure<br />
08 dm_query<br />
08 dm_script<br />
08 dm_smart_list<br />
09 dm_document<br />
0b dm_folder<br />
0c dm_cabinet<br />
0d dm_assembly<br />
10 dm_method<br />
11 dm_user<br />
12 dm_group<br />
19 dm_registered<br />
1f dmi_index<br />
26 dmi_registry<br />
27 dm_format<br />
28 dm_filestore<br />
28 dm_store<br />
2c dm_distributedstore<br />
2e dmi_type_info<br />
2f dm_dump_record<br />
30 dmi_dump_object_record<br />
31 dm_load_record<br />
32 dmi_load_object_record<br />
37 dm_relation<br />
3a dm_location<br />
3b dm_fulltext_index<br />
3c dm_docbase_config<br />
3d dm_server_config<br />
40 dm_blobstore<br />
41 dm_note<br />
45 dm_acl<br />
46 dm_policy<br />
49 dmi_package<br />
4a dmi_workitem<br />
4c dm_activity<br />
4d dm_workflow<br />
53 dm_literal_expr<br />
5e dm_federation<br />
5f dm_audittrail_acl<br />
5f dm_audittrail_group<br />
5f dm_audittrail<br />
66 dm_alias_set<br />
6a dmi_dd_attr_info<br />
0b dm_taxonomy<br />
0b dm_xml_application<br />
6b dm_display_config<br />
20 dmi_sequence<br />
30. Job scheduler Query<br />
SELECT ALL r_object_id, a_next_invocation<br />
FROM dm_job<br />
WHERE (<br />
(run_now = 1)<br />
OR ( (is_inactive = 0)<br />
AND ( ( a_next_invocation < = DATE(’now’)<br />
AND a_next_invocation IS NOT NULLDATE )<br />
OR ( a_next_continuation DATE(’now’))<br />
OR (expiration_date IS NULLDATE))<br />
AND ( (max_iterations = 0)<br />
OR (a_iterations Template Properties<br />
3) Under Template Audit Trail Setting, select option ‘Always On’ – Audit trail data for each instance will be available and saved at workflow completions.<br />
31. In a workflow, a performer can enter comments while he/she is performing the task. And those comments are carried to the next performer in this workflow. When using WebPublisher workflow report to review the workflow instances, and in workflow history, you are only able to get the truncated comments back from WP’s interface. Especially for those already aborted workflow instances, there is no way that you can get the complete comments back from WP’s GUI. In some cases, those comments are very important to our customers and they need to find a way to get those comments back.<br />
Here is the steps to get those comments back:<br />
==<br />
1) Identify the workflow from the dm_workflow table, get the r_object_id of the workflow:<br />
select r_object_id, object_name from dm_workflow where object_name = ‘your work flow name’<br />
2) Identify the notes that are carried by this workflow:<br />
select r_note_id from dmi_package where r_workflow_id = ‘ the object id of the workflow’<br />
3) Get the content id of each of those note ids returned:<br />
select r_object_id from dmr_content where any parent_id = ‘the note id’<br />
4) Go to DA, Administration->Job Management->Administration, use the “GET_PATH” method to find out the path of the files which stores the comments.<br />
32. Query to get all documents expired in previous 1 month<br />
SELECT s.r_object_id, s.object_name, DATETOSTRING(”r.a_expiration_date”,’mm/dd/yyyy’) as creation_date<br />
FROM dm_sysobject_s s, dm_sysobject_r r<br />
WHERE s.r_object_id = r.r_object_id<br />
AND s.r_object_type = ‘dm_document’<br />
AND DATEDIFF(month,”r.a_expiration_date”,DATE(NOW)) >= 0<br />
AND DATEDIFF(month,”r.a_expiration_date”,DATE(NOW)) < = 1<br />
AND r.r_version_label = ‘Expired’<br />
ORDER BY 3<br />
33. DQL to find all the folders in a Cabinet, where the folders are contentless<br />
SELECT f1.object_name, f1.r_object_id, f1.r_folder_path<br />
FROM dm_folder f1<br />
WHERE FOLDER(’/Cabinetname’,descend)<br />
AND NOT EXISTS (SELECT f2.object_name FROM dm_sysobject f2 WHERE ANY f2.i_folder_id = f1.r_object_id)<br />
ORDER BY object_name<br />
34. Find Super Groups and sub groups<br />
select distinct r_object_id, group_name as super_groups<br />
from dm_group_sp where group_name not in (select gs.group_name<br />
from dm_group_r gr, dm_group_s gs<br />
where gr.r_object_id = gs.r_object_id<br />
group by gs.group_name<br />
having count(gr.i_supergroups_names) > 1)<br />
union<br />
select distinct r_object_id, group_name as sub_groups<br />
from dm_group_sp where group_name in (select gs.group_name<br />
from dm_group_r gr, dm_group_s gs<br />
where gr.r_object_id = gs.r_object_id<br />
group by gs.group_name<br />
having count(gr.i_supergroups_names) > 1) ;<br />
35. DQL for finding all checked out documents in a docbase<br />
select * from dm_document where (r_lock_owner is not nullstring or r_lock_owner ” or r_lock_owner ‘ ‘)<br />
36.DQL to list the users who has access to particular folder path<br />
SELECT i_all_users_names FROM dm_group<br />
WHERE group_name IN (SELECT r_accessor_name FROM dm_acl<br />
WHERE object_name IN (SELECT acl_name FROM dm_folder<br />
WHERE ANY r_folder_path = ‘/folderpath’))<br />
ORDER BY i_all_users_names<br />
37. Query to find out what user signed off on what document<br />
SELECT “audited_obj_id” FROM “dm_audittrail” WHERE<br />
“event_name” = ‘dm_signoff’ AND<br />
“user_name” = ‘tom’ AND<br />
substr (”audited_obj_id”, 1, 2) = ‘09′AND<br />
“time_stamp” >= DATE(’01/01/1998′, ‘dd/mm/yy’) AND<br />
“time_stamp” SELECT object_name, r_version_label FROM dm_sysobject where any r_version_label in (’WIP’) and r_object_id not in (select r_object_id from dm_sysobject where any r_version_label in (’Staging’, ‘Approved’, ‘Expired’) )<br />
39. Query to get all expired documents in previous month<br />
SELECT s.r_object_id, s.object_name, DATETOSTRING(”r.a_expiration_date”,’mm/dd/yyyy’) as creation_date<br />
FROM dm_sysobject_s s, dm_sysobject_r r<br />
WHERE s.r_object_id = r.r_object_id<br />
AND s.r_object_type = ‘dm_document’<br />
AND DATEDIFF(month,”r.a_expiration_date”,DATE(NOW)) >= 0<br />
AND DATEDIFF(month,”r.a_expiration_date”,DATE(NOW)) < = 1<br />
AND r.r_version_label = ‘Expired’<br />
ORDER BY 3<br />
0. Query to find the file system path location of a document<br />
select doc.r_object_id, doc.object_name, MFILE_URL(”,-1,”) as mypath,doc.i_folder_id from dm_document doc<br />
where<br />
——————————————————————<br />
Thursday, March 22, 2007<br />
DQL Tips<br />
————————————————————————————-<br />
*** get CURRENT TIME on server ***<br />
select DATE(NOW) as systime from dm_server_config<br />
————————————————————————————-<br />
*** get the implicit version label ***<br />
select s.r_object_id,s.object_name,r.r_version_label from dm_sysobject s, dm_sysobject_r r where r.r_object_id = s.r_object_id and<br />
r.i_position = -1<br />
————————————————————————————-<br />
*** include r_object_id to remove blank rows<br />
select object_name, r_object_id, a_expiration_date from dfas_common where folder(‘/Raj Srinivasan’) and any a_expiration_date is not nulldate<br />
————————————————————————————-<br />
*** select documents with pdf renditions (optimized for performance) ***<br />
select * from dm_document where exists(select * from dmr_content where any parent_id=dm_document.r_object_id and full_format=’pdf’)<br />
————————————————————————————-<br />
*** select all documents that have nulldate in repeating attribute<br />
select object_name from dfas_common where folder(‘/Raj Srinivasan) and r_object_id NOT IN (select r_object_id from dfas_common where folder(‘/Raj Srinivasan’) and any a_expiration_date is not nulldate)<br />
————————————————————————————-<br />
*** select all documents that have nulldate in repeating attribute or a_expiration_date has past<br />
select count(*) from dfas_common where folder(‘/content/Corporate Resources/Human Resources’,descend) and (any a_expiration_date <<br />
date(today) or (r_object_id NOT IN (select r_object_id from dfas_common where folder('/content/Corporate Resources/Human Resources',descend)<br />
and any a_expiration_date is not nulldate)))<br />
————————————————————————————-<br />
*** select folderpath with filename<br />
select distinct s.object_name, fr.r_folder_path from dm_sysobject (all)<br />
s,dm_sysobject_r sr,dm_folder_r fr where sr.i_position = -1 and<br />
sr.r_object_id = s.r_object_id and fr.r_object_id = sr.i_folder_id and<br />
fr.i_position = -1 and fr.r_folder_path like '/ChemNet/%'<br />
order by fr.r_folder_path,s.object_name<br />
————————————————————————————-<br />
*** empty folders ***<br />
SELECT r_object_id,r_folder_path FROM dm_folder f WHERE r_object_id NOT IN<br />
(SELECT distinct i_folder_id FROM dm_sysobject WHERE any i_folder_id = f.r_object_id and folder('/content',descend)) and folder('/content',descend)<br />
————————————————————————————-<br />
*** NULL a_effective_date ***<br />
select object_name from dfas_common where folder('/images', descend) and r_object_id NOT IN (select r_object_id from dfas_common where folder('/images', descend) and any a_effective_date is not nulldate)<br />
————————————————————————————-<br />
*** select component from workitem ***<br />
select<br />
r_component_id<br />
from<br />
dmi_package p<br />
where<br />
exists (select r_object_id<br />
from dmi_workitem w<br />
where<br />
w.r_object_id = and<br />
w.r_workflow_id = p.r_workflow_id and<br />
w.r_act_seq_no = p.r_act_seq_no)<br />
————————————————————————————-<br />
*** select renditions ***<br />
SELECT s.object_name, f.dos_extension<br />
FROM dm_dbo.dm_sysobject_s s, dm_dbo.dmr_content_r c, dm_dbo.dm_format_s f<br />
WHERE (c.parent_id = s.r_object_id)<br />
and (c.i_format = f.r_object_id)<br />
AND c.page=0 AND f.dos_extension ‘xml’<br />
AND folder(‘/whatever’)<br />
————————————————————————————-<br />
*** find workflow given document ***<br />
select * from dm_workflow where r_object_id in (select r_workflow_id from dmi_package where any r_component_id in (select r_object_id from<br />
dm_sysobject (all) where i_chronicle_id in (select i_chronicle_id from dm_sysobject where r_object_id=”))) and r_runtime_state=’1′<br />
————————————————————————————-<br />
*** return only inherited attributes ***<br />
SELECT attr_name FROM dmi_dd_attr_info WHERE type_name = ‘my_custom_type’ AND attr_name NOT IN<br />
(SELECT attr_name FROM dmi_dd_attr_info WHERE type_name = ‘dm_document’)<br />
————————————————————————————-<br />
Documents that are uploaded in to docbase b/w Aug 2004 and Oct 2004<br />
select a.r_object_id,a.r_creation_date,a.r_modify_date,b.user_group_name<br />
from dm_document a, dm_user b<br />
where (a.r_creation_date >= Date(’08/01/2004′,’mm/dd/yyyy’) and a.r_creation_date 0<br />
————————————————————————————-<br />
Subject: Why do we create four views for each subtype?<br />
Note: For example the type dm_document has four views:<br />
dm_document_sp<br />
dm_document_sv<br />
dm_document_rp<br />
dm_document_rv<br />
The two _sp and _rp views are used by DQL and the two<br />
_sv and _rv views are used by the Object Manager.<br />
Also, the _sp and _sv views are for single (non-repeating) attributes, while the _rv and _rp views are for repeating attibutes.<br />
————————————————————————————-<br />
Label Text of the either Sytem Type or Custom Type<br />
select label_text from dm_nls_dd_info where parent_id in<br />
(select r_object_id from dm_aggr_domain where type_name = ‘field_type’)<br />
Results:<br />
Content Location<br />
Keywords Category<br />
Business Unit Owner<br />
————————————————————————————-<br />
DQL to list all documents attributes and their associated folder path<br />
select s.object_name, fr.r_folder_path<br />
from dm_document s, dm_sysobject_r sr,<br />
dm_folder_r fr<br />
where s.i_is_deleted = 0<br />
and sr.i_position = -1<br />
and sr.r_object_id = s.r_object_id<br />
and fr.r_object_id = sr.i_folder_id<br />
and FOLDER(‘/ChemNet’, descend)<br />
and fr.r_folder_path like ‘/ChemNet/%’<br />
order by fr.r_folder_path,s.object_name<br />
————————————————————————————-<br />
*** Web cabinet of a content ***<br />
SELECT object_name FROM dm_cabinet<br />
WHERE r_object_id IN (SELECT i_cabinet_id FROM dm_folder<br />
WHERE r_object_id IN (SELECT i_folder_id FROM dm_document (ALL)<br />
WHERE object_name like ‘test%’)) AND r_object_type=’wcm_channel’<br />
OR<br />
select r_object_id, object_name from wcm_channel where r_object_id in<br />
(select i_ancestor_id from dm_folder where r_object_id in<br />
(select i_folder_id from dm_sysobject where object_name = ‘test’))<br />
————————————————————————————-<br />
*** To get the first level folders from the cabinets ***<br />
select object_name from dm_folder where any i_folder_id in (select r_object_id from dm_cabinet where object_name=’Cabinets’)<br />
————————————————————————————-<br />
*** To show the previous Active content ***<br />
select r_object_id,i_chronicle_id,DATETOSTRING(DATE(TODAY),’ddmmyyyy’) as sysdate from dm_document (ALL) where object_name like ‘test%’ and<br />
FOLDER(‘/ChemNet/ChemonicsProcess/Bidding’) and<br />
any r_version_label = ‘Active’<br />
————————————————————————————-<br />
To find the folders for particular group for specified permission<br />
select for write object_name from dm_folder where acl_name IN (select object_name from dm_acl where any r_accessor_name = ‘dm_world’) and folder(‘/ChemNet’,descend)<br />
or<br />
select object_name from dm_folder where acl_name IN (select object_name from dm_acl where any r_accessor_name = ‘dm_world’ and any r_accessor_permit = ’7′) and folder(‘/ChemNet’,descend)<br />
1 – NONE<br />
2 – BROWSE<br />
3 – READ<br />
4 – RELATE<br />
5 – VERSION<br />
6 – WRITE<br />
7 – DELTE<br />
————————————————————————————-<br />
DFC to insert rows into registered table<br />
public static IDfCollection execQuery(String queryString, IDfSession session)<br />
throws DfException{<br />
IDfCollection col = null; //Collection for the result<br />
IDfClientX clientx = new DfClientX();<br />
IDfQuery q = clientx.getQuery(); //Create query object<br />
q.setDQL(queryString); //Give it the query<br />
// example queryString: “insert into dm_dbo.your_registered_table<br />
(field1, [field]) values(,[<br />
col = q.execute(session, IDfQuery.DF_EXEC_QUERY);<br />
System.out.println(“Query executed.”);<br />
return col;<br />
}<br />
————————————————————————————-<br />
How to avoid redundancy for this simple query?<br />
select distinct d.object_name,sys.authors from dm_document d, dm_sysobject_r sys<br />
where folder (‘/xyz/xyz_first’) and<br />
d.r_object_id = sys.r_object_id and<br />
(sys.i_position=-1 or (sys.i_position< =-2 and sys.authors is not null))</p>
<p>Link: <a href="http://dionrobin.wordpress.com/2010/02/08/useful-dql-queries/" title="Useful DQL Queries" target="_blank">http://dionrobin.wordpress.com/2010/02/08/useful-dql-queries/</p>
]]></content:encoded>
			<wfw:commentRss>http://jiahu.net/useful-dql-queries.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ORA-24761 Unable to get error message (6107)</title>
		<link>http://jiahu.net/ora-24761-unable-to-get-error-message-6107.htm</link>
		<comments>http://jiahu.net/ora-24761-unable-to-get-error-message-6107.htm#comments</comments>
		<pubDate>Mon, 11 Jul 2011 14:37:45 +0000</pubDate>
		<dc:creator>@ouc</dc:creator>
				<category><![CDATA[工作]]></category>
		<category><![CDATA[技术]]></category>

		<guid isPermaLink="false">http://jiahu.net/?p=1682</guid>
		<description><![CDATA[Error: 10 minute limit on distributed transactions Running a distributed transaction on Windows XP SP2 that exceeds 10 minutes will cause the transaction to rollback with an ORA-24761 error. The error message is: Unable to get error message (6107) (0) The time out defined for the component in Component Services does not matter. Solution: If <a href="http://jiahu.net/ora-24761-unable-to-get-error-message-6107.htm"> read more <span class="meta-nav">&#187;</span></a>]]></description>
			<content:encoded><![CDATA[<p><strong>Error</strong>:</p>
<blockquote><p><strong>10 minute limit on distributed transactions</strong></p></blockquote>
<p>Running a distributed transaction on Windows XP SP2 that exceeds 10 minutes will cause the transaction to rollback with an ORA-24761 error. The error message is:</p>
<blockquote><p><strong>Unable to get error message (6107) (0)</strong></p></blockquote>
<p>The time out defined for the component in Component Services does not matter.</p>
<p><strong>Solution</strong>:</p>
<p>If no timeout is specified in the TransactionScope constructor, a transaction has 1 min timeout by default.</p>
<p>This timeout can be overridden in the app.config (or web.config ) by adding following lines.</p>
<p style="padding-left: 30px;">&lt;system.transactions&gt;<br />
&lt;defaultSettings timeout=”00:30:00&#8243; /&gt;<br />
&lt;/system.transactions&gt;</p>
<p>Anyway, to prevent too long transactions, a maximum timeout can be specified at machine.config level by setting</p>
<p style="padding-left: 30px;">&lt;system.transactions&gt;<br />
&lt;machineSettings maxTimeout=”00:30:00&#8243; /&gt;<br />
&lt;/system.transactions&gt;</p>
<p>If this is not specified explicitely, the maxTimeout has a default value of 10 minutes.</p>
<p>So at the end my code looks like:</p>
<p style="padding-left: 30px;">
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">try<br />
{<br />
// set no timeout in the constructor<br />
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))<br />
{<br />
}<br />
}<br />
catch<br />
{}</div></td></tr></tbody></table></div></p>
]]></content:encoded>
			<wfw:commentRss>http://jiahu.net/ora-24761-unable-to-get-error-message-6107.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>.Net中var的使用方式</title>
		<link>http://jiahu.net/dotnet%e4%b8%advar%e7%9a%84%e4%bd%bf%e7%94%a8%e6%96%b9%e5%bc%8f.htm</link>
		<comments>http://jiahu.net/dotnet%e4%b8%advar%e7%9a%84%e4%bd%bf%e7%94%a8%e6%96%b9%e5%bc%8f.htm#comments</comments>
		<pubDate>Thu, 30 Jun 2011 15:28:07 +0000</pubDate>
		<dc:creator>@ouc</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Code]]></category>

		<guid isPermaLink="false">http://jiahu.net/?p=1661</guid>
		<description><![CDATA[The following restrictions apply to implicitly-typed variable declarations: var can only be used when a local variable is declared and initialized in the same statement; the variable cannot be initialized to null, or to a method group or an anonymous function. var cannot be used on fields at class scope. Variables declared by using var <a href="http://jiahu.net/dotnet%e4%b8%advar%e7%9a%84%e4%bd%bf%e7%94%a8%e6%96%b9%e5%bc%8f.htm"> read more <span class="meta-nav">&#187;</span></a>]]></description>
			<content:encoded><![CDATA[<p>The following restrictions apply to implicitly-typed variable declarations:</p>
<ul>
<li>var can only be used when a local variable is declared and initialized in the same statement; the variable cannot be initialized to null, or to a method group or an anonymous function.</li>
<li>var cannot be used on fields at class scope.</li>
<li>Variables declared by using var cannot be used in the initialization expression. In other words, this expression is legal: int i = (i = 20); but this expression produces a compile-time error: var i = (i = 20);</li>
<li>Multiple implicitly-typed variables cannot be initialized in the same statement.</li>
<li>If a type named var is in scope, then the var keyword will resolve to that type name and will not be treated as part of an implicitly typed local variable declaration.</li>
</ul>
<p>You may find that var can also be useful with query expressions in which the exact constructed type of the query variable is difficult to determine. This can occur with grouping and ordering operations.</p>
<p>The var keyword can also be useful when the specific type of the variable is tedious to type on the keyboard, or is obvious, or does not add to the readability of the code. One example where var is helpful in this manner is with nested generic types such as those used with group operations. In the following query, the type of the query variable is IEnumerable&gt;. As long as you and others who must maintain your code understand this, there is no problem with using implicit typing for convenience and brevity.</p>
<p>However, the use of var does  have at least the potential to make your code more difficult to  understand for other developers. For that reason, <span style="color: #ff0000;">the C# documentation  generally uses var only when it is required</span>.</p>
<p>Link: <a href="http://msdn.microsoft.com/en-us/library/bb384061.aspx" target="_blank">http://msdn.microsoft.com/en-us/library/bb384061.aspx</a></p>
]]></content:encoded>
			<wfw:commentRss>http://jiahu.net/dotnet%e4%b8%advar%e7%9a%84%e4%bd%bf%e7%94%a8%e6%96%b9%e5%bc%8f.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>软件产品的报价</title>
		<link>http://jiahu.net/%e8%bd%af%e4%bb%b6%e7%9a%84%e6%8a%a5%e4%bb%b7.htm</link>
		<comments>http://jiahu.net/%e8%bd%af%e4%bb%b6%e7%9a%84%e6%8a%a5%e4%bb%b7.htm#comments</comments>
		<pubDate>Thu, 10 Mar 2011 02:20:12 +0000</pubDate>
		<dc:creator>@ouc</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[读书]]></category>
		<category><![CDATA[资源]]></category>
		<category><![CDATA[摘录]]></category>
		<category><![CDATA[笔记]]></category>
		<category><![CDATA[转载]]></category>

		<guid isPermaLink="false">http://jiahu.net/?p=1613</guid>
		<description><![CDATA[在一个开发者论坛中看到了这段话，感受很深，摘录到这里，希望以后需要对软件开发报价的时候有个参考。 来源：http://goo.gl/yMfu7 如果发包者认为某个事情“简单”，通常您需要谨慎了，因为收不到钱或者收到很少钱的可能性很大。 即便是一个里面只要求嵌入一个固定网址，打开就显示网页的这种程序，可能是最最简单的iPhone程序，都要有如下工作要做： 1 开发环境，因为你需要苹果电脑，装上Leopard或者雪豹，并下载2G多的SDK。这要求你会Mac OS的基本操作。 2 调试环境：你需要至少有一个iPod Touch。 3 你至少需要了解UIWebview的作用，否则你都不知道嵌入网页要用UIWebview还是用别的什么。 4 如果要用Interface Builder，你需要了解什么是IBOutlet，如果用代码创建，你需要了解View的层级，你需要了解如何使用AddSubview，你需要知道ViewController是干嘛用的。 5 你需要会查文档，你需要知道Delegate是干嘛的。 6 你需要了解NSURLRequest，以及NSString的基本功能和用法。 7 你需要会用Reachability，需要知道如何修改Info.plist来检测网络是否联通。你要知道怎么弹出AlertView。 8 你需要了解Default.png是干嘛用的，你需要了解小图标的尺寸，你需要了解大图标的尺寸，你需要了解如何修改Info.plist不显示高光。 9 如果让你帮着提交，你还要会用iTunes Connect。 简单吗？简单。不简单吗？不简单。 如果是这样一个只嵌入一个网页的程序，如果让我来做外包，最少我也要给人家报1-2万，觉得简单你自己做，想省多少钱都行。]]></description>
			<content:encoded><![CDATA[<p>在一个开发者论坛中看到了这段话，感受很深，摘录到这里，希望以后需要对软件开发报价的时候有个参考。</p>
<p>来源：<a href="http://goo.gl/yMfu7" target="_blank">http://goo.gl/yMfu7</a></p>
<blockquote><p>如果发包者认为某个事情“简单”，通常您需要谨慎了，因为收不到钱或者收到很少钱的可能性很大。<br />
即便是一个里面只要求嵌入一个固定网址，打开就显示网页的这种程序，可能是最最简单的iPhone程序，都要有如下工作要做：</p>
<p>1 开发环境，因为你需要苹果电脑，装上Leopard或者雪豹，并下载2G多的SDK。这要求你会Mac OS的基本操作。</p>
<p>2 调试环境：你需要至少有一个iPod Touch。</p>
<p>3 你至少需要了解UIWebview的作用，否则你都不知道嵌入网页要用UIWebview还是用别的什么。</p>
<p>4 如果要用Interface Builder，你需要了解什么是IBOutlet，如果用代码创建，你需要了解View的层级，你需要了解如何使用AddSubview，你需要知道ViewController是干嘛用的。</p>
<p>5 你需要会查文档，你需要知道Delegate是干嘛的。</p>
<p>6 你需要了解NSURLRequest，以及NSString的基本功能和用法。</p>
<p>7 你需要会用Reachability，需要知道如何修改Info.plist来检测网络是否联通。你要知道怎么弹出AlertView。</p>
<p>8 你需要了解Default.png是干嘛用的，你需要了解小图标的尺寸，你需要了解大图标的尺寸，你需要了解如何修改Info.plist不显示高光。</p>
<p>9 如果让你帮着提交，你还要会用iTunes Connect。</p>
<p>简单吗？简单。不简单吗？不简单。</p>
<p>如果是这样一个只嵌入一个网页的程序，如果让我来做外包，最少我也要给人家报1-2万，觉得简单你自己做，想省多少钱都行。</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://jiahu.net/%e8%bd%af%e4%bb%b6%e7%9a%84%e6%8a%a5%e4%bb%b7.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Python精简版笔记</title>
		<link>http://jiahu.net/python%e7%b2%be%e7%ae%80%e7%89%88%e7%ac%94%e8%ae%b0.htm</link>
		<comments>http://jiahu.net/python%e7%b2%be%e7%ae%80%e7%89%88%e7%ac%94%e8%ae%b0.htm#comments</comments>
		<pubDate>Wed, 12 Jan 2011 05:16:50 +0000</pubDate>
		<dc:creator>@ouc</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[读书]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[笔记]]></category>

		<guid isPermaLink="false">http://jiahu.net/?p=1569</guid>
		<description><![CDATA[基础知识 变量没有类型。不需要提前声明 变量在赋值时出现，不再使用时则会消失 赋值使用 = 运算符完成，如：x = 42 注：判断相等用 == 运算符完成 可以一次对多个变量赋值，如：x,y,z = 1,2,3 或者 a = b = 123 再或者 first, second = second, first 语句块只能通过缩进来表示 注：没有Begin/End语句或者括号 for循环等同于其它语言中的foreach 注：可以使用range函数来实现基于数字索引的循环，如： for value in range(10): 换行符 缩进 print value 注释语言以 # 开头 使用input函数获取用户输入 List 对象用中括号实现，可以自由嵌套，如：x = [[1,2,3],[y,z],[[[]]]] List 可以通过索引和分片来访问内部元素 索引使用中括号，第一个元素的索引为0，如：names[1] 分片可以指定起始和截至的索引，使用冒号分隔，如：names[5:8] 注：截至索引是不包含在结果中的，如果缺少起始索引，默认从0开始；如果缺少截至索引，默认到结尾结束 索引可以使用负数，如：names[-3]表示倒数第三个元素 Dictionary 类似 List，但是内部元素是无序的，使用每个元素自己的键值做访问索引，如：names <a href="http://jiahu.net/python%e7%b2%be%e7%ae%80%e7%89%88%e7%ac%94%e8%ae%b0.htm"> read more <span class="meta-nav">&#187;</span></a>]]></description>
			<content:encoded><![CDATA[<ol>
<li>基础知识
<ol>
<li>变量没有类型。不需要提前声明</li>
<li>变量在赋值时出现，不再使用时则会消失</li>
<li>赋值使用 = 运算符完成，如：x = 42<br />
注：判断相等用 == 运算符完成</li>
<li>可以一次对多个变量赋值，如：x,y,z = 1,2,3 或者 a = b = 123 再或者 first, second = second, first</li>
<li>语句块只能通过缩进来表示<br />
注：没有Begin/End语句或者括号</li>
<li>for循环等同于其它语言中的foreach<br />
注：可以使用range函数来实现基于数字索引的循环，如： for value in range(10): 换行符 缩进 print value</li>
<li>注释语言以 # 开头</li>
<li>使用input函数获取用户输入</li>
<li>List 对象用中括号实现，可以自由嵌套，如：x = [[1,2,3],[y,z],[[[]]]]</li>
<li>List 可以通过索引和分片来访问内部元素<br />
索引使用中括号，第一个元素的索引为0，如：names[1]<br />
分片可以指定起始和截至的索引，使用冒号分隔，如：names[5:8]<br />
注：截至索引是不包含在结果中的，如果缺少起始索引，默认从0开始；如果缺少截至索引，默认到结尾结束<br />
索引可以使用负数，如：names[-3]表示倒数第三个元素</li>
<li>Dictionary 类似 List，但是内部元素是无序的，使用每个元素自己的键值做访问索引，如：names = {“name”:”张三”, “age”:30}，可以访问names["name"]或者names["age"]来访问内部元素</li>
<li>所有的值都可以用作逻辑值，空值，如False、[]、0、“”和None表示逻辑假，其它为逻辑真</li>
<li>支持短路逻辑判断，如：print a or b</li>
<li>条件表达式的写法：print a if a else b</li>
</ol>
</li>
<li>函数
<ol>
<li>使用关键字 def 定义函数，如：def square(x): 换行符 缩进 return x * x</li>
<li>使用关键字 return 返回函数值</li>
<li>对于 List 和 Dictionary 类型的参数，在函数体内修改参数值时影响外部变量值；其它类型参数不会改变</li>
<li>函数支持命名参数和参数默认值</li>
<li>支持函数引用，如：square是一个函数，queeble = square 换行符 缩进 print queeble(2)</li>
</ol>
</li>
<li>对象
<ol>
<li>使用关键字 class 定义类，如：class person:</li>
<li>对象的方法调用方式：object.method(arg1, arg2)</li>
<li>repr 函数可以将对象转换成它的字符串表达形式</li>
<li>__init__为构造函数</li>
<li>__str__定义对象作为字符串时的输出</li>
<li>继承语句：class SpamBasket(Basket):</li>
<li>允许多重继承</li>
</ol>
</li>
<li>其它
<ol>
<li>模块是以.py为扩展名并包含Python代码的文本文件，导入语句为：import math 或者 from math import sqrt</li>
<li>所有模块内的代码都会在导入时运行，可以用 if __name__ == “__main__”: main() 来避免这个情况</li>
<li>如果是在*nix中创建可执行的脚本，可以使用：#!/usr/bin/env python</li>
<li>可以使用try/except语句处理异常</li>
<li>pass 语句表示什么都不做</li>
<li>enjoy source code</li>
</ol>
</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://jiahu.net/python%e7%b2%be%e7%ae%80%e7%89%88%e7%ac%94%e8%ae%b0.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Roll back a Changeset in TFS 2010</title>
		<link>http://jiahu.net/roll-back-a-changeset-in-tfs-2010.htm</link>
		<comments>http://jiahu.net/roll-back-a-changeset-in-tfs-2010.htm#comments</comments>
		<pubDate>Thu, 09 Dec 2010 05:04:38 +0000</pubDate>
		<dc:creator>@ouc</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[Command]]></category>
		<category><![CDATA[Visual Studio]]></category>
		<category><![CDATA[版本控制]]></category>

		<guid isPermaLink="false">http://jiahu.net/?p=1564</guid>
		<description><![CDATA[You can use the command line to roll back a changeset in TFS 2010: 12tf.exe workspaces /owner:username /collection:http://tfsserver/projects /computer:computername tf.exe rollback /changeset:Number]]></description>
			<content:encoded><![CDATA[<p>You can use the command line to roll back a changeset in TFS 2010:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">tf.exe workspaces /owner:username /collection:http://tfsserver/projects /computer:computername<br />
tf.exe rollback /changeset:Number</div></td></tr></tbody></table></div>
]]></content:encoded>
			<wfw:commentRss>http://jiahu.net/roll-back-a-changeset-in-tfs-2010.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>钢琴模拟软件Synthesia Piano</title>
		<link>http://jiahu.net/synthesia-piano.htm</link>
		<comments>http://jiahu.net/synthesia-piano.htm#comments</comments>
		<pubDate>Thu, 02 Sep 2010 01:38:26 +0000</pubDate>
		<dc:creator>@ouc</dc:creator>
				<category><![CDATA[八卦]]></category>
		<category><![CDATA[技术]]></category>
		<category><![CDATA[资源]]></category>
		<category><![CDATA[软件]]></category>
		<category><![CDATA[音乐]]></category>

		<guid isPermaLink="false">http://jiahu.net/?p=1545</guid>
		<description><![CDATA[好的软件是不需要多余的话解释的, 看看演示就知道了. 来源: http://faxue.info/2010/08/synthesia-piano.html]]></description>
			<content:encoded><![CDATA[<p>好的软件是不需要多余的话解释的, 看看演示就知道了.</p>
<p><embed src="http://www.tudou.com/v/y9BiMG9Ctv0/v.swf" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="opaque" width="480" height="400"></embed></p>
<p>来源: <a href="http://faxue.info/2010/08/synthesia-piano.html" target="_blank">http://faxue.info/2010/08/synthesia-piano.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://jiahu.net/synthesia-piano.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

