{"id":101,"date":"2009-08-09T14:23:00","date_gmt":"2009-08-09T14:23:00","guid":{"rendered":"\/lisa\/post\/2009\/08\/09\/And-then-there-were-two.aspx"},"modified":"2009-08-09T14:23:00","modified_gmt":"2009-08-09T14:23:00","slug":"and-then-there-were-two","status":"publish","type":"post","link":"https:\/\/spacefold.com\/lisa\/2009\/08\/09\/and-then-there-were-two\/","title":{"rendered":"And then there were two"},"content":{"rendered":"<p>I&#8217;m thinking about taking some time to update <a title=\"Docs for RDLDocs\" href=\"http:\/\/www.spacefold.com\/articles\/xmlrsdocs\/\" target=\"_blank\" rel=\"noopener\">RDL Documenter<\/a> for SQL 2008, since RS 2008 is now becoming an indispensible part of our team&#8217;s arsenal of reporting tools.<\/p>\n<p>I haven&#8217;t been looking forward to doing this, since custom report items changed for the new Designer, and it&#8217;s likely that, from a designer Widget point of view, I&#8217;m going to have to start all over.<\/p>\n<p>Interestingly,&nbsp;I have more reason to do this than ever.&nbsp; SSIS is weak in documentation tools, just&nbsp;like SSRS. And the general approach that I took in RDL Documenter is just as valid here.<\/p>\n<p class=\"NB\">To review that approach: shred the documentation-usable parts of the XML into something resembling XML Comments (or javadocs, on the groom&#8217;s side of the aisle), and also optionally store the information in a database, so that folks can use whatever tools they want for documenting, but any tool commonly used for commenting C# or java code should be able to comment these additional code artifacts, right off the bat.<\/p>\n<p>You&#8217;re probably thinking &#8220;<strong>this is impossible, it&#8217;s so obvious, someone must have&nbsp;done this already.<\/strong>&#8221;&nbsp; I thought so too.&nbsp;<\/p>\n<p>I checked out a bunch of tools already available, such as <a title=\"SSIS documenter home site\" href=\"\/myblog\/admin\/Pages\/ssisdocumenter.com\" target=\"_blank\" rel=\"noopener\">SSIS Documenter<\/a>&nbsp;and, while they extract the obvious information exhaustively, they all seem to have the same missing piece: they don&#8217;t allow a developer to easily add custom tags and instructions.<\/p>\n<p>What&#8217;s more, in the SSIS case, they seem to be especially weak in the <em>only<\/em>&nbsp; part of the documentation I really need.&nbsp; SSIS already provides a nice graphical view of the process flow, you can screen shot it at any zoom level and, assuming you&#8217;ve named your tasks reasonably, somebody can follow what you&#8217;re doing.&nbsp; But the variables explorer window is not very &#8220;pliable&#8221;.&nbsp;What I really need is a list of exposed package variables that must be configured appropriately for my customer&#8217;s environment, with instructions for the intent, default, and use of each.<\/p>\n<p>Luckily, a dtsx.config file really does isolate that exposed and configurable list of variables nicely for you. When you create the file you indicate which variables are to be included in it, and what attributes of each.&nbsp;&nbsp;This means I can&nbsp;quickly create a dtsx.config file that contains a&nbsp;perfect subset for my documentation needs.<\/p>\n<p>For a job last week, I simply used the following bog-standard piece of XSLT on a dts.config file:<\/p>\n<p class=\"code\"><span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"c194KG\"><span style=\"color: #602020;\">?xml version=&#8221;1.0&#8243;?<\/span><\/span><span style=\"color: #0000ff;\"><span class=\"c9Y6TC\">&gt;<\/span><br \/><span class=\"c9Y6TC\">&lt;<\/span><\/span><span class=\"c49DIK\"><span style=\"color: #ac306d;\">xsl:stylesheet <\/span><\/span><span class=\"c18YC0\"><span style=\"color: #d00020;\">version=<\/span><\/span><span class=\"c5M9S0\"><span style=\"color: #000090;\">&#8220;1.0&#8221;<\/span><\/span><span class=\"c18YC0\"><span style=\"color: #d00020;\"> xmlns:xsl=<\/span><\/span><span class=\"c5M9S0\"><span style=\"color: #000090;\">&#8220;http:\/\/www.w3.org\/1999\/XSL\/Transform&#8221;<\/span><\/span><span style=\"color: #0000ff;\"><span class=\"c9Y6TC\">&gt;<\/span><br \/><\/span>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"c49DIK\"><span style=\"color: #ac306d;\">xsl:output <\/span><\/span><span class=\"c18YC0\"><span style=\"color: #d00020;\">method=<\/span><\/span><span class=\"c5M9S0\"><span style=\"color: #000090;\">&#8220;html&#8221;<\/span><\/span><span class=\"c18YC0\"><span style=\"color: #d00020;\">\/<\/span><\/span><span style=\"color: #0000ff;\"><span class=\"c9Y6TC\">&gt;<\/span><\/p>\n<p><\/span>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"c49DIK\"><span style=\"color: #ac306d;\">xsl:template <\/span><\/span><span class=\"c18YC0\"><span style=\"color: #d00020;\">match=<\/span><\/span><span class=\"c5M9S0\"><span style=\"color: #000090;\">&#8220;\/&#8221;<\/span><\/span><span style=\"color: #0000ff;\"><span class=\"c9Y6TC\">&gt;<\/span><br \/><\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"cKJK\"><span style=\"color: #006800;\">table <\/span><\/span><span class=\"c18YC0\"><span style=\"color: #d00020;\">class=<\/span><\/span><span class=\"c5M9S0\"><span style=\"color: #000090;\">&#8220;doc&#8221;<\/span><\/span><span style=\"color: #0000ff;\"><span class=\"c9Y6TC\">&gt;<\/span><br \/><\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"cKJK\"><span style=\"color: #006800;\">tr <\/span><\/span><span style=\"color: #0000ff;\"><span class=\"c9Y6TC\">&gt;<\/span><br \/><\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"cKJK\"><span style=\"color: #006800;\">th&nbsp;<\/span><\/span><span class=\"c18YC0\"><span style=\"color: #d00020;\">class=<\/span><\/span><span class=\"c5M9S0\"><span style=\"color: #000090;\">&#8220;docHeader&#8221;<\/span><\/span><span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&gt;<\/span><\/span>Package Variable Name<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"cKJK\"><span style=\"color: #006800;\">\/th<\/span><\/span><span style=\"color: #0000ff;\"><span class=\"c9Y6TC\">&gt;<\/span><br \/><\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"cKJK\"><span style=\"color: #006800;\">th <\/span><\/span><span class=\"c18YC0\"><span style=\"color: #d00020;\">class=<\/span><\/span><span class=\"c5M9S0\"><span style=\"color: #000090;\">&#8220;docHeader&#8221;<\/span><\/span><span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&gt;<\/span><\/span>Type<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"cKJK\"><span style=\"color: #006800;\">\/th<\/span><\/span><span style=\"color: #0000ff;\"><span class=\"c9Y6TC\">&gt;<\/span><br \/><\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"cKJK\"><span style=\"color: #006800;\">th <\/span><\/span><span class=\"c18YC0\"><span style=\"color: #d00020;\">class=<\/span><\/span><span class=\"c5M9S0\"><span style=\"color: #000090;\">&#8220;docHeader&#8221;<\/span><\/span><span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&gt;<\/span><\/span>Example<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"cKJK\"><span style=\"color: #006800;\">\/th<\/span><\/span><span style=\"color: #0000ff;\"><span class=\"c9Y6TC\">&gt;<\/span><br \/><\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"cKJK\"><span style=\"color: #006800;\">th <\/span><\/span><span class=\"c18YC0\"><span style=\"color: #d00020;\">class=<\/span><\/span><span class=\"c5M9S0\"><span style=\"color: #000090;\">&#8220;docHeader&#8221;<\/span><\/span><span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&gt;<\/span><\/span>Comments<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"cKJK\"><span style=\"color: #006800;\">\/th<\/span><\/span><span style=\"color: #0000ff;\"><span class=\"c9Y6TC\">&gt;<\/span><br \/><\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"cKJK\"><span style=\"color: #006800;\">\/tr<\/span><\/span><span style=\"color: #0000ff;\"><span class=\"c9Y6TC\">&gt;<\/span><br \/><\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"c49DIK\"><span style=\"color: #ac306d;\">xsl:apply-templates <br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<\/span><\/span><span class=\"c18YC0\"><span style=\"color: #d00020;\">select=<\/span><\/span><span class=\"c5M9S0\"><span style=\"color: #000090;\">&#8220;\/*\/Configuration[@ConfiguredType=&#8217;Property&#8217;<br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and contains(@Path,&#8217;Properties[Name]&#8217;)]&#8221;<\/span><\/span><span class=\"c18YC0\"><span style=\"color: #d00020;\">\/<\/span><\/span><span style=\"color: #0000ff;\"><span class=\"c9Y6TC\">&gt;<\/span><br \/><\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"cKJK\"><span style=\"color: #006800;\">\/table<\/span><\/span><span style=\"color: #0000ff;\"><span class=\"c9Y6TC\">&gt;<\/span><br \/><\/span>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"c49DIK\"><span style=\"color: #ac306d;\">\/xsl:template<\/span><\/span><span style=\"color: #0000ff;\"><span class=\"c9Y6TC\">&gt;<\/span><\/p>\n<p><\/span>&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"c49DIK\"><span style=\"color: #ac306d;\">xsl:template <\/span><\/span><span class=\"c18YC0\"><span style=\"color: #d00020;\">match=<\/span><\/span><span class=\"c5M9S0\"><span style=\"color: #000090;\">&#8220;*&#8221;<\/span><\/span><span style=\"color: #0000ff;\"><span class=\"c9Y6TC\">&gt;<\/span><br \/><\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"c49DIK\"><span style=\"color: #ac306d;\">xsl:variable <\/span><\/span><span class=\"c18YC0\"><span style=\"color: #d00020;\">name=<\/span><\/span><span class=\"c5M9S0\"><span style=\"color: #000090;\">&#8220;whichProperty&#8221;<\/span><\/span><span class=\"c18YC0\"><span style=\"color: #d00020;\"> <br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select=<\/span><\/span><span class=\"c5M9S0\"><span style=\"color: #000090;\">&#8220;ConfiguredValue&#8221;<\/span><\/span><span class=\"c18YC0\"><span style=\"color: #d00020;\">\/<\/span><\/span><span style=\"color: #0000ff;\"><span class=\"c9Y6TC\">&gt;<\/span><br \/><\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"c49DIK\"><span style=\"color: #ac306d;\">xsl:variable <\/span><\/span><span class=\"c18YC0\"><span style=\"color: #d00020;\">name=<\/span><\/span><span class=\"c5M9S0\"><span style=\"color: #000090;\">&#8220;descr&#8221;<\/span><\/span><span class=\"c18YC0\"><span style=\"color: #d00020;\"> <br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select=<\/span><\/span><span class=\"c5M9S0\"><span style=\"color: #000090;\">&#8220;\/*\/Configuration[@ConfiguredType=&#8217;Property&#8217; <br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and contains(@Path,concat(&#8216;::&#8217;,$whichProperty,&#8217;]&#8217;)) <br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and contains(@Path,&#8217;.Properties[Description]&#8217;) ]&#8221;<\/span><\/span><span class=\"c18YC0\"><span style=\"color: #d00020;\">\/<\/span><\/span><span style=\"color: #0000ff;\"><span class=\"c9Y6TC\">&gt;<\/span><br \/><\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"c49DIK\"><span style=\"color: #ac306d;\">xsl:variable <\/span><\/span><span class=\"c18YC0\"><span style=\"color: #d00020;\">name=<\/span><\/span><span class=\"c5M9S0\"><span style=\"color: #000090;\">&#8220;noDescr&#8221;<\/span><\/span><span class=\"c18YC0\"><span style=\"color: #d00020;\"> <br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;select =<\/span><\/span><span class=\"c5M9S0\"><span style=\"color: #000090;\">&#8220;string-length(normalize-space($descr)) = 0&#8221;<\/span><\/span><span class=\"c18YC0\"><span style=\"color: #d00020;\">\/<\/span><\/span><span style=\"color: #0000ff;\"><span class=\"c9Y6TC\">&gt;<\/span><br \/><\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"cKJK\"><span style=\"color: #006800;\">tr<\/span><\/span><span style=\"color: #0000ff;\"><span class=\"c9Y6TC\">&gt;<\/span><br \/><\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"cKJK\"><span style=\"color: #006800;\">td<\/span><\/span><span style=\"color: #0000ff;\"><span class=\"c9Y6TC\">&gt;<\/span><br \/><\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"c49DIK\"><span style=\"color: #ac306d;\">xsl:value-of <\/span><\/span><span class=\"c18YC0\"><span style=\"color: #d00020;\">select=<\/span><\/span><span class=\"c5M9S0\"><span style=\"color: #000090;\">&#8220;substring-before(substring-after(@Path,&#8217;::&#8217;),&#8217;]&#8217;)&#8221;<\/span><\/span><span class=\"c18YC0\"><span style=\"color: #d00020;\">\/<\/span><\/span><span style=\"color: #0000ff;\"><span class=\"c9Y6TC\">&gt;<\/span><br \/><\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"cKJK\"><span style=\"color: #006800;\">\/td<\/span><\/span><span style=\"color: #0000ff;\"><span class=\"c9Y6TC\">&gt;<\/span><br \/><\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"cKJK\"><span style=\"color: #006800;\">td<\/span><\/span><span style=\"color: #0000ff;\"><span class=\"c9Y6TC\">&gt;<\/span><br \/><\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"c49DIK\"><span style=\"color: #ac306d;\">xsl:value-of <\/span><\/span><span class=\"c18YC0\"><span style=\"color: #d00020;\">select=<\/span><\/span><span class=\"c5M9S0\"><span style=\"color: #000090;\">&#8220;@ValueType&#8221;<\/span><\/span><span class=\"c18YC0\"><span style=\"color: #d00020;\">\/<\/span><\/span><span style=\"color: #0000ff;\"><span class=\"c9Y6TC\">&gt;<\/span><br \/><\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"cKJK\"><span style=\"color: #006800;\">\/td<\/span><\/span><span style=\"color: #0000ff;\"><span class=\"c9Y6TC\">&gt;<\/span><br \/><\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"cKJK\"><span style=\"color: #006800;\">td<\/span><\/span><span style=\"color: #0000ff;\"><span class=\"c9Y6TC\">&gt;<\/span><br \/><\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"c49DIK\"><span style=\"color: #ac306d;\">xsl:value-of <\/span><\/span><span class=\"c18YC0\"><span style=\"color: #d00020;\">select=<\/span><\/span><span class=\"c5M9S0\"><span style=\"color: #000090;\">&#8220;\/*\/Configuration[@ConfiguredType=&#8217;Property&#8217; <br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and contains(@Path,concat(&#8216;::&#8217;,$whichProperty,&#8217;]&#8217;)) <br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;and contains(@Path,&#8217;.Properties[Value]&#8217;) ]&#8221;<\/span><\/span><span class=\"c18YC0\"><span style=\"color: #d00020;\">\/<\/span><\/span><span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&gt;<\/span><\/span> <br \/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"cKJK\"><span style=\"color: #006800;\">\/td<\/span><\/span><span style=\"color: #0000ff;\"><span class=\"c9Y6TC\">&gt;<\/span><br \/><\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"cKJK\"><span style=\"color: #006800;\">td<\/span><\/span><span style=\"color: #0000ff;\"><span class=\"c9Y6TC\">&gt;<\/span><br \/><\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"c49DIK\"><span style=\"color: #ac306d;\">xsl:if <\/span><\/span><span class=\"c18YC0\"><span style=\"color: #d00020;\">test=<\/span><\/span><span class=\"c5M9S0\"><span style=\"color: #000090;\">&#8220;$noDescr&#8221;<\/span><\/span><span style=\"color: #0000ff;\"><span class=\"c9Y6TC\">&gt;<\/span><br \/><\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"c49DIK\"><span style=\"color: #ac306d;\">xsl:attribute <\/span><\/span><span class=\"c18YC0\"><span style=\"color: #d00020;\">name=<\/span><\/span><span class=\"c5M9S0\"><span style=\"color: #000090;\">&#8220;bgcolor&#8221;<\/span><\/span><span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&gt;<\/span><\/span>yellow<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"c49DIK\"><span style=\"color: #ac306d;\">\/xsl:attribute<\/span><\/span><span style=\"color: #0000ff;\"><span class=\"c9Y6TC\">&gt;<\/span><br \/><\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"c49DIK\"><span style=\"color: #ac306d;\">\/xsl:if<\/span><\/span><span style=\"color: #0000ff;\"><span class=\"c9Y6TC\">&gt;<\/span><br \/><\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"c49DIK\"><span style=\"color: #ac306d;\">xsl:value-of <\/span><\/span><span class=\"c18YC0\"><span style=\"color: #d00020;\">select=<\/span><\/span><span class=\"c5M9S0\"><span style=\"color: #000090;\">&#8220;$descr&#8221;<\/span><\/span><span class=\"c18YC0\"><span style=\"color: #d00020;\">\/<\/span><\/span><span style=\"color: #0000ff;\"><span class=\"c9Y6TC\">&gt;<\/span><br \/><\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"c49DIK\"><span style=\"color: #ac306d;\">xsl:if <\/span><\/span><span class=\"c18YC0\"><span style=\"color: #d00020;\">test=<\/span><\/span><span class=\"c5M9S0\"><span style=\"color: #000090;\">&#8220;$noDescr&#8221;<\/span><\/span><span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&gt;<\/span><\/span>TBD&#8230;<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"c49DIK\"><span style=\"color: #ac306d;\">\/xsl:if<\/span><\/span><span style=\"color: #0000ff;\"><span class=\"c9Y6TC\">&gt;<\/span><br \/><\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"cKJK\"><span style=\"color: #006800;\">\/td<\/span><\/span><span style=\"color: #0000ff;\"><span class=\"c9Y6TC\">&gt;<\/span><br \/><\/span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"cKJK\"><span style=\"color: #006800;\">\/tr<\/span><\/span><span style=\"color: #0000ff;\"><span class=\"c9Y6TC\">&gt;<\/span><br \/><\/span>&nbsp;&nbsp;&nbsp;&nbsp;<span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&lt;<\/span><\/span><span class=\"c49DIK\"><span style=\"color: #ac306d;\">\/xsl:template<\/span><\/span><span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&gt;<\/span><\/span> <\/p>\n<p><span style=\"color: #0000ff;\"><span class=\"c9Y6TC\">&lt;<\/span><\/span><span class=\"c49DIK\"><span style=\"color: #ac306d;\">\/xsl:stylesheet<\/span><\/span><span class=\"c9Y6TC\"><span style=\"color: #0000ff;\">&gt;<\/span><\/span><\/p>\n<p>The result was something like this (excerpted from a dtsx.config prepared the same way for the SSIS package delivered with RDL Documenter):<\/p>\n<table class=\"doc\" border=\"1\" cellspacing=\"0\" cellpadding=\"12\">\n<tbody>\n<tr bgcolor=\"#d2e9ff\">\n<th class=\"docHeader\" align=\"left\"><span style=\"font-size: xx-small;\">&nbsp; Package Variable Name<\/span><\/th>\n<th class=\"docHeader\" align=\"left\"><span style=\"font-size: xx-small;\">&nbsp; Type<\/span><\/th>\n<th class=\"docHeader\" align=\"left\"><span style=\"font-size: xx-small;\">&nbsp; Example<\/span><\/th>\n<th class=\"docHeader\" align=\"left\"><span style=\"font-size: xx-small;\">&nbsp; Comments<\/span><\/th>\n<\/tr>\n<tr>\n<td><span style=\"font-size: xx-small;\">&nbsp; ExportRSFilename&nbsp; <\/span><\/td>\n<td><span style=\"font-size: xx-small;\">&nbsp; &nbsp; String&nbsp; <\/span><\/td>\n<td><span style=\"font-size: xx-small;\">&nbsp; RDLDoc.PDF<\/span><\/td>\n<td><span style=\"font-size: xx-small;\">&nbsp; The default output filename&nbsp; &nbsp;<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-size: xx-small;\">&nbsp; ExportRSParams&nbsp; <\/span><\/td>\n<td><span style=\"font-size: xx-small;\">&nbsp; &nbsp; String&nbsp; <\/span><\/td>\n<td><span style=\"font-size: xx-small;\">&nbsp; RDLDocInfo=MyTestServer<br \/>&nbsp; ^test=something&nbsp; <\/span><\/td>\n<td><span style=\"font-size: xx-small;\">&nbsp; Parameters for your RS Server<br \/>&nbsp; if you&#8217;re using one&nbsp; to output documentation<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-size: xx-small;\">&nbsp; ExportRSResult&nbsp; <\/span><\/td>\n<td><span style=\"font-size: xx-small;\">&nbsp; &nbsp; Boolean&nbsp; <\/span><\/td>\n<td><span style=\"font-size: xx-small;\">&nbsp;&nbsp;False&nbsp; <\/span><\/td>\n<td bgcolor=\"yellow\"><span style=\"font-size: xx-small;\">&nbsp; TBD&#8230;<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>.. et voil&agrave;. I dumped this table into the&nbsp;other documentation&nbsp;I was preparing by other means, of the type that other tools make it easy to create.<\/p>\n<p>I&#8217;ll probably elaborate on this &#8220;sketch&#8221; in the future to provide the same sort of XML Comments-shaped intermediary file, instead of an HTML table as shown here, so that <a title=\"SandCastle on Codeplex\" href=\"http:\/\/www.codeplex.com\/Sandcastle\" target=\"_blank\" rel=\"noopener\">SandCastle<\/a> and similar tools can go to work on it.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I&#8217;m thinking about taking some time to update RDL Documenter for SQL 2008, since RS 2008 is now becoming an indispensible part of our team&#8217;s arsenal of reporting tools. I haven&#8217;t been looking forward to doing this, since custom report items changed for the new Designer, and it&#8217;s likely that, from a designer Widget point<a class=\"more-link\" href=\"https:\/\/spacefold.com\/lisa\/2009\/08\/09\/and-then-there-were-two\/\">Read more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,7,10],"tags":[],"class_list":["post-101","post","type-post","status-publish","format-standard","hentry","category-sql-server","category-ssis","category-xml-xslt"],"_links":{"self":[{"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/posts\/101","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/comments?post=101"}],"version-history":[{"count":0,"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/posts\/101\/revisions"}],"wp:attachment":[{"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/media?parent=101"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/categories?post=101"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/spacefold.com\/lisa\/wp-json\/wp\/v2\/tags?post=101"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}