<?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:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
	xmlns:media="http://search.yahoo.com/mrss/"
>

<channel>
	<title>Dave's Adventures in Business Intelligence &#187; VBA Tools</title>
	<atom:link href="http://www.dagira.com/category/vba-tools/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.dagira.com</link>
	<description>...you are in a twisty maze of passageways, all different...</description>
	<lastBuildDate>Wed, 01 Feb 2012 17:26:45 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<!-- podcast_generator="podPress/8.8" -->
		<copyright>&#xA9; </copyright>
		<managingEditor>blogmaster@dagira.com ()</managingEditor>
		<webMaster>blogmaster@dagira.com()</webMaster>
		<category></category>
		<ttl>1440</ttl>
		<itunes:keywords></itunes:keywords>
		<itunes:subtitle></itunes:subtitle>
		<itunes:summary>...you are in a twisty maze of passageways, all different...</itunes:summary>
		<itunes:author></itunes:author>
		<itunes:category text="Society &amp; Culture"/>
		<itunes:owner>
			<itunes:name></itunes:name>
			<itunes:email>blogmaster@dagira.com</itunes:email>
		</itunes:owner>
		<itunes:block>No</itunes:block>
		<itunes:explicit>no</itunes:explicit>
		<itunes:image href="http://www.dagira.com/wp-content/plugins/podpress/images/powered_by_podpress_large.jpg" />
		<image>
			<url>http://www.dagira.com/wp-content/plugins/podpress/images/powered_by_podpress.jpg</url>
			<title>Dave's Adventures in Business Intelligence</title>
			<link>http://www.dagira.com</link>
			<width>144</width>
			<height>144</height>
		</image>
		<item>
		<title>Dagira Change Log Utility 2.0.1 Released</title>
		<link>http://www.dagira.com/2011/10/25/dagira-change-log-utility-2-0-1-released/</link>
		<comments>http://www.dagira.com/2011/10/25/dagira-change-log-utility-2-0-1-released/#comments</comments>
		<pubDate>Tue, 25 Oct 2011 15:39:11 +0000</pubDate>
		<dc:creator>Dave Rathbun</dc:creator>
				<category><![CDATA[VBA Tools]]></category>

		<guid isPermaLink="false">http://www.dagira.com/?p=425</guid>
		<description><![CDATA[There have been a couple of issues discovered with my universe compare tool. One has been fixed in the code, and the other appears to be a universe issue which I have not been able to decide how to approach. An update to version 2.0.1 has been posted, so please download this updated version if [...]]]></description>
			<content:encoded><![CDATA[<p>There have been a couple of issues discovered with my universe compare tool. One has been fixed in the code, and the other appears to be a universe issue which I have not been able to decide how to approach. An update to version 2.0.1 has been posted, so please download this updated version if you have been experiencing issues.</p>
<h3>Context Issue</h3>
<p>The first issue was rather generic. The message was <code>Automation error: The server threw an exception</code>. It seemed to happen while the code was looping through a collection of joins or contexts for some universes, although it had never happened to me during my usage. (Of course, isn&#8217;t that always the case?) One user was able to send me a copy of their universe for my testing and I was able to recreate the error which is always the first step towards a resolution. <span id="more-425"></span></p>
<p>The error was being thrown while processing contexts to get a list of included joins. The first several contexts were processed fine, but one particular context always threw the error mentioned above. I created a very simple program that only tried to traverse the collection of contexts and it threw the same error. (The code is listed at the end of this blog post.) When programs don&#8217;t work there are generally only two issues: either the code is wrong or the data is wrong. In this case I was quite certain the code was okay so I started looking at the data.</p>
<p>As I reviewed the context that was causing the error I accidentally &#8220;touched&#8221; one of the joins, deselecting it from the context. I made sure I restored that join to the context before trying another test run. Imagine my surprise when the &#8220;trouble&#8221; context was processed successfully on my next test run. Of course the following context still threw the error, but the &#8220;data&#8221; for the first problem context seemed to have been cleared up. Based on those results I went back into the universe and &#8220;touched&#8221; every context. I opened each one, deselected and then re-selected a join, and then saved the universe. After doing that, the code ran without throwing any errors while processing the contexts.</p>
<p>I can only assume that something had gone wrong in the way the context was being stored in the universe. I assume that the universe was working okay as far as query generation, but there was something causing problems for the VBA interface. Touching each context cleared that up.</p>
<h3>Duplicate Parameters</h3>
<p>However that was not the last problem with the test universe provided to me. Once I got beyond the context issue a new error came up while attempting to process the universe parameters. It seemed that somehow in this particular universe each universe parameter had become replicated multiple times! <img src='http://www.dagira.com/wp-includes/images/smilies/icon_eek.gif' alt=':shock:' class='wp-smiley' />  </p>
<p><img src="/tips/universe_change_log/parameter_duplicates.png" width="517" height="599" border="0" alt="Duplicate universe parameters image" title="Universe parameter screen showing duplicated parameters" /></p>
<p>This was causing a second problem because the name (ANSI92 for example) was used as a unique key to compare the before and after versions of each parameter. I was able to go through and remove many of the duplicate entries, but I decided that I should write some code to address this particular data issue. The code that captures the parameters now captures only the <strong>first</strong> occurrence of each parameter value and ignores the rest. It could easily be redone to capture the last rather than the first but for now that&#8217;s how it works.</p>
<h3>2.0.1 Released</h3>
<p>Because of the issue found with duplicate parameters I am releasing version 2.0.1 of the script. Please visit the <a href="http://www.dagira.com/dagira-universe-compare-tool/">support page</a> to download the updated version. Note that this code update does not include a fix for the context issue as I have not figured out how to address a corrupted context definition with my VBA code yet. If you are experiencing this issue, please try the &#8220;touch&#8221; process outlined above and see if that addresses your issue.</p>
<p>Note: comments are off for this post to avoid fragmentation of the discussion. Please post any questions about this release on the download page, thanks.</p>
<p><strong>Related Information</strong></p>
<p>Here is the code I wrote to try to help diagnose the issue with contexts. This code simply opens a universe and lists all of the joins assigned to each context. It should work perfectly fine as long as the data is valid.</p>
<pre>Sub main()

    Dim boDesignerApp As Designer.Application
    Dim boContexts As Designer.Contexts
    Dim boContext As Designer.Context
    Dim boJoins As Designer.Joins
    Dim boJoin As Designer.Join

    Dim boUniv As Designer.Universe

    ' Establish a Designer session and log in
    Set boDesignerApp = New Designer.Application
    boDesignerApp.Visible = True
    Call boDesignerApp.LogonDialog
    Set boUniv = boDesignerApp.Universes.Open

    Dim strJoinSet As String

    Set boContexts = boUniv.Contexts

    For Each boContext In boContexts
        strJoinSet = ""
        iRowNum = iRowNum + 1
        Set boJoins = boContext.Joins
        For Each boJoin In boJoins
            strJoinSet = strJoinSet &#038; ", " &#038; boJoin.ID
        Next boJoin
        Debug.Print "Context " &#038; boContext.Name &#038; " has joins " &#038; strJoinSet
        Set boJoins = Nothing
    Next boContext
    Set boContext = Nothing

End Sub</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.dagira.com/2011/10/25/dagira-change-log-utility-2-0-1-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dagira Universe Compare Tool 2.0.0 Released</title>
		<link>http://www.dagira.com/2011/09/14/dagira-universe-compare-tool-2-0-0-released/</link>
		<comments>http://www.dagira.com/2011/09/14/dagira-universe-compare-tool-2-0-0-released/#comments</comments>
		<pubDate>Wed, 14 Sep 2011 20:57:49 +0000</pubDate>
		<dc:creator>Dave Rathbun</dc:creator>
				<category><![CDATA[VBA Tools]]></category>

		<guid isPermaLink="false">http://www.dagira.com/?p=408</guid>
		<description><![CDATA[The long-awaited release of my universe compare tool has finally happened.  
Get it here.
Please post any support questions on the release page, and not on this blog post. The page will remain a permanent link on the top of my blog, while this post will eventually roll off of the front page. I hope [...]]]></description>
			<content:encoded><![CDATA[<p>The long-awaited release of my universe compare tool has finally happened. <img src='http://www.dagira.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://www.dagira.com/dagira-universe-compare-tool/">Get it here</a>.</p>
<p>Please post any support questions on the release page, and not on this blog post. The page will remain a permanent link on the top of my blog, while this post will eventually roll off of the front page. I hope that the utility proves to be useful, and that the wait was worth it. <img src='http://www.dagira.com/wp-includes/images/smilies/icon_cool.gif' alt='8-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.dagira.com/2011/09/14/dagira-universe-compare-tool-2-0-0-released/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Universe Compare Tool &#8211; How It Came To Be</title>
		<link>http://www.dagira.com/2011/08/29/universe-compare-tool-how-it-came-to-be/</link>
		<comments>http://www.dagira.com/2011/08/29/universe-compare-tool-how-it-came-to-be/#comments</comments>
		<pubDate>Tue, 30 Aug 2011 02:02:27 +0000</pubDate>
		<dc:creator>Dave Rathbun</dc:creator>
				<category><![CDATA[VBA Tools]]></category>

		<guid isPermaLink="false">http://www.dagira.com/?p=398</guid>
		<description><![CDATA[At the 2010 SAP BusinessObjects User Conference (also known as SBOUC) I did a presentation titled, &#8220;Don’t Lose Control: Change Management Strategies for Universe Designers.&#8221; The slides from this presentation are available as a PDF download on my conference presentations page or via a link at the end of this post. I said I would [...]]]></description>
			<content:encoded><![CDATA[<p>At the 2010 SAP BusinessObjects User Conference (also known as SBOUC) I did a presentation titled, &#8220;Don’t Lose Control: Change Management Strategies for Universe Designers.&#8221; The slides from this presentation are available as a PDF download on my <a href="">conference presentations page</a> or via a link at the end of this post. I said I would post a download link last week; I didn&#8217;t yet. <img src='http://www.dagira.com/wp-includes/images/smilies/icon_redface.gif' alt=':oops:' class='wp-smiley' />  It took longer than I expected to write up the documentation that I felt was required prior to the release. Part of that documentation has been extracted and published as this post instead as I don&#8217;t expect everyone will care or need to know about the background as to how this utility came about. However, it was important to me, so I wrote it. <img src='http://www.dagira.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Which brings up the philosophical question: if a blogger writes a post and nobody reads it, does it make the sound of one hand clapping? Or something like that&#8230; <span id="more-398"></span></p>
<h3>Background and Purpose</h3>
<p>Business Objects universes have always presented a challenge for people who want to track code changes and understand differences between versions. Universe information is stored in a binary file (.unv format) and is not readable by normal means. However, starting with Business Objects 4.0 the software included a basic scripting language (SBL) which allowed us to create some additional functionality. Starting with Business Objects 5.0 they switched to Visual Basic for Applications (VBA) provided by Microsoft. Both Desktop Intelligence and Designer had their inner workings exposed via a new software development kit (SDK).</p>
<p>Up until Business Objects XI the universe was stored in a set of relational tables in the repository. With a little research, it was not too hard to figure out where the various components of a universe were stored, and since everything was in relational tables many clients wrote universes and reports against this data. In some cases I even saw some folks that had created ways to check for differences and dependencies. However, when XI was released all of those utilities became worthless because the universe was no longer broken apart and stored in relational tables. We could no longer run reports that would show the content and structure of our universes.</p>
<p>Some years back <a href="http://www.forumtopics.com/busobj/profile.php?mode=viewprofile&#038;u=1343">Dwayne Hoffpauir</a> released a VBA utility that provided a way to document a universe by extracting the various components into Microsoft Excel. This was in many ways the first step towards building a compare utility. Some enterprising folks were able to run the program against two different universes, then use third-party tools to identify the differences between the two workbooks. However, Dwayne&#8217;s utility was not really designed for this use, and in my opinion the third-party compare tools left much to be desired since they didn&#8217;t really &#8220;get&#8221; universes. For these and other reasons I decided to write my own utility that could be used to compare two universes.</p>
<h3>First Release</h3>
<p>The first version of this utility was completed in 2006 and was used in a Business Objects 6.5 project. This project required all programmers to check in a log of changes made before any code could be promoted. No matter how hard I protested that a universe wasn&#8217;t really code they would not relax this requirement. I thought about Dwayne&#8217;s utility, and used the concepts to create my own universe extract. The main difference was that mine was designed to extract classes and objects from two universes and then compare the results, all within an Excel environment. This first release had a lot of hard-coded elements and was not extendable as it was only designed to compare SQL differences between objects and predefined conditions. That meant that it could not easily be extended to compare joins, contexts, hierarchies, or any other universe element. It was successful as a proof of concept, but not viable as a long-term solution, therefore I did not publish this code.</p>
<h3>Second Release</h3>
<p>By 2008 I had completely rewritten the code. It was much more modular and included code to extract and compare classes, objects, tables, and joins. At this point I discovered that my method of comparing the &#8220;before&#8221; and &#8220;after&#8221; sets was not efficient enough to handle large universes. I was using Excel worksheets to contain the extracted data and trying to compare universe elements via their assigned ID. At first I tried to store each element in the row based on the assigned ID, but that was not very effective because there is no guarantee that ID&#8217;s will be sequential. The concept was sound: in order to look up an element in the &#8220;after&#8221; set in order to compare to the equivalent item in the &#8220;before&#8221; set I only had to check the row in the proper worksheet. While this was an effective way for matching elements that had a match, it was not an efficient way to track items that were new (existed only in the &#8220;after&#8221; list) or removed (existed only in the &#8220;before&#8221; list.)</p>
<p>Next I tried to create arrays to track the before and after sets, but while many universe elements have a system-generated key (objects, tables, and joins) many others do not (hierarchies, contexts, and others). That&#8217;s why this release only compared the four elements mentioned above; all of those elements have a system-assigned numeric key that could be used as an array index. Contexts and other elements didn&#8217;t have a numeric key so I had left them out for now. Of course it was important to be able to compare these elements so I started drawing on my experience with programming in other languages for inspiration.</p>
<p>In perl or PHP I can create arrays that do not have requirement of a numeric value for the array index. I started looking for a similar concept for VBA, and after some research I found the Microsoft Scripting Runtime library. This library allowed me to create arrays in VBA with a non-numeric key. In the previous version of the script I had written a specific routine to extract each component of a universe into a specific worksheet, then I had written another specific routine designed to compare the &#8220;before&#8221; and &#8220;after&#8221; sheets for that specific component. After rewriting this portion of the code to use the scripting library I was able to create a single subroutine that would do all of the compare operations. Ultimately I had plans to rewrite the extraction routines and replace all of them with a generic routine but I never got around to that.</p>
<h3>Third Release and Conference Demo</h3>
<p>In 2010 I finally had completed the parts of the code that I wanted to have ready in order to release it for others to use. I demonstrated it at the SBOUC. During the demonstration I took a risk. <img src='http://www.dagira.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  I asked for three suggestions from the audience as to what I should change in the &#8220;after&#8221; version of the universe, made those changes, crossed my fingers, and hoped that the script would capture everything. It did, and I felt good about the result and was fully intending to release it last fall.</p>
<p>Unfortunately I discovered that there were still some issues with the code when I returned back to work from the conference. Some universes were large enough that the list of elements (specifically the list of incompatible objects) was too large for the 65K row limit of the Excel host. One more tweak was required. The workbook already included a worksheet called &#8220;Config&#8221; that I intended to hide to prevent accidental edits. I left this sheet visible and added a list of universe elements and a Y/N flag. If the flag is set to &#8220;N&#8221; for a specific universe component, then that element will be ignored during the compare operation.</p>
<p>Now, here in 2011 I am finally releasing the code. <img src='http://www.dagira.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />   When? It could be any day now&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dagira.com/2011/08/29/universe-compare-tool-how-it-came-to-be/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>System Requirements and Support Plans For Universe Compare Tool</title>
		<link>http://www.dagira.com/2011/08/22/system-requirements-and-support-plans-for-universe-compare-tool/</link>
		<comments>http://www.dagira.com/2011/08/22/system-requirements-and-support-plans-for-universe-compare-tool/#comments</comments>
		<pubDate>Mon, 22 Aug 2011 13:00:00 +0000</pubDate>
		<dc:creator>Dave Rathbun</dc:creator>
				<category><![CDATA[VBA Tools]]></category>

		<guid isPermaLink="false">http://www.dagira.com/?p=390</guid>
		<description><![CDATA[This post details the system requirements and support plans for my universe compare tool which will be posted for downloading later this week. Comments are off for this post; any questions should be posted in the release topic, once it&#8217;s available.
System Requirements
 
I have tested this tool on BusinessObjects 6.5, on XI R2, and XI [...]]]></description>
			<content:encoded><![CDATA[<p>This post details the system requirements and support plans for my universe compare tool which will be posted for downloading later this week. Comments are off for this post; any questions should be posted in the release topic, once it&#8217;s available.</p>
<h3>System Requirements</h3>
<p> <span id="more-390"></span><br />
I have tested this tool on BusinessObjects 6.5, on XI R2, and XI 3.1. The only host operating system I have tested is Windows XP. (Yes, still on XP here.) The code as released is configured for XI 3.1. There are minor changes that would be required to run for XI R2 which I will include in the support post. Microsoft Excel acts as the host for the VBA (Visual Basic for Applications) script; I have not tested on all different Excel versions so there may be some issues there. There is one additional library that must be available in order for the script to run. You must have available on your system the Microsoft Scripting Runtime which on my system is found in C:\WINDOWS\system32\scrrun.dll. If you don&#8217;t have this file, the script will not run. You may need to search the Microsoft web site for a downloadable version that is compatible with your operating system.</p>
<p>Along with this library the script references the Business Objects library for the appropriate version (11.0 or 11.5 for XI R2 &#8211; may depend on patch version &#8211; or 12.0 for XI 3). It also includes references to the Excel object library (for obvious reasons). The script can only be run on a workstation with both Excel and the Business Objects Universe Designer application installed. The Excel and Business Objects libraries required should be already on your system if the appropriate programs are installed.</p>
<p>None of these libraries are provided with the script so you are responsible for finding legal and appropriate means to install these items on your system.</p>
<p>There is no Unix version of this script, nor will there be. As stated earlier, it is designed to be run on a system that has the XI Universe Designer application installed. As there is no Unix universe designer, there is no option for this tool to run on that platform.</p>
<p>There is no batch version of this program. It is designed to run interactively as it prompts the user to open the two different universes that are to be compared. It is certainly possible to create a batch &#8220;wrapper&#8221; for this program that would automate the comparison of multiple pairs of universes but it is not my intention to work on such an enhancement at this time.</p>
<h3>Support</h3>
<p>Support will only be provided via this blog only on an &#8220;as time is available&#8221; basis. There will be no email, twitter, or phone support, free, paid, or otherwise. I will not support this program via BOB, SCN, or any other online community. <strong>&#8220;As time is available&#8221; means it may be hours, days, or even weeks before your question is answered, depending on what else I am working on at the time.</strong> If you are not comfortable with those terms, please do not download or use this software. I will have a blog post dedicated for posting support questions, and a link to that post will be included in the software that you download.</p>
<p>There is no guarantee that support will continue as I reserve the right to discontinue support at any time and for any reason.</p>
<p>I do not plan to support any questions on Business Objects 6.5 or earlier versions, although it is entirely possible that this script will work there I no longer have a platform on which to test or diagnose bug reports.</p>
<h3>Future Plans For BI 4.x Implementation</h3>
<p>This script may work on .UNV files under BI 4.0 but will not work on .UNX files, nor are there any plans on my part to make a BI 4.0 version that supports .UNX files. The new Information Design Tool does not currently offer an SDK. Future versions of the IDT may offer an SDK but it is likely to be java-based so this tool would have to be rewritten on that platform. It will not be possible to create a BI 4.x version of this script until an SDK is available.</p>
<h3>Warranty</h3>
<p>From the GNU GPL license:</p>
<blockquote><p>15. Disclaimer of Warranty.<br />
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.</p>
<p>16. Limitation of Liability.<br />
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.</p></blockquote>
<h3>Usage Restrictions</h3>
<p>There are none. <img src='http://www.dagira.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  If you are a consultant or contractor, feel free to use this program for personal use or within your company environment or at client sites. In other words, I do not place any restrictions on how or where you can use this program. Your company or client policies may prevent you installing this program on their networks or using it in their environments so be sure to check for and understand their specific policies regarding third-party software. The only restrictions are applied by the GPL, which is to say that if you distribute the script you must include my copyright information and the full GPL license, and if you base any derivative works on this program those derivative works must also be bound by the GPL license.</p>
<p>I&#8217;ve been using this code for over two years, making tweaks and adjustments along the way as needed. I have no problem using it in my environment. The program does not write anything into your universe. The only operations performed are &#8220;open&#8221; and &#8220;read&#8221; and those operations are only applied to the two universes that you are attempting to compare. I have never had this script corrupt a universe. I have occasionally had the script bomb because of a bug or some unanticipated scenario. If you encounter an issue, please add a comment to the dedicated support and FAQ post, which will also contain the link to download the latest version of the program.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dagira.com/2011/08/22/system-requirements-and-support-plans-for-universe-compare-tool/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What is GPL software?</title>
		<link>http://www.dagira.com/2011/08/19/what-is-gpl-software/</link>
		<comments>http://www.dagira.com/2011/08/19/what-is-gpl-software/#comments</comments>
		<pubDate>Fri, 19 Aug 2011 13:53:30 +0000</pubDate>
		<dc:creator>Dave Rathbun</dc:creator>
				<category><![CDATA[VBA Tools]]></category>

		<guid isPermaLink="false">http://www.dagira.com/?p=55</guid>
		<description><![CDATA[Wordpress (the software that powers this blog) is released under the GNU GPL license. So is phpBB, the board software used to run BOB. The essential purpose of the GPL license is to provide software authors the rights of copyright and to provide software users with the freedom to do whatever they want to with [...]]]></description>
			<content:encoded><![CDATA[<p>Wordpress (the software that powers this blog) is released under the <a href="http://www.gnu.org/licenses/gpl.html">GNU GPL license</a>. So is phpBB, the board software used to run BOB. The essential purpose of the GPL license is to provide software authors the rights of copyright and to provide software users with the freedom to do whatever they want to with the software. There is a <a href="http://www.gnu.org/copyleft/gpl-faq.html">FAQ</a> provided by the FSF (Free Software Foundation) that addresses many questions related to the GPL but I would like to call attention only to a few specific items.</p>
<blockquote><p><strong>I want to get credit for my work. I want people to know what I wrote. Can I still get credit if I use the GPL?</strong><br />
You can certainly get credit for the work. Part of releasing a program under the GPL is writing a copyright notice in your own name (assuming you are the copyright holder). The GPL requires all copies to carry an appropriate copyright notice.</p></blockquote>
<p>Simply put, this means that even though I am releasing code under the GPL I still retain the copyright to the code. Releasing it under the GPL ensures that anyone who downloads the code for use has the right to do so, and that those rights cannot be removed by someone else. If someone were to download my code and modify or improve it in some way, then the modified / improved version must also be released under the GPL, so that everyone can benefit.</p>
<blockquote><p><strong>If I add a module to a GPL-covered program, do I have to use the GPL as the license for my module?</strong><br />
The GPL says that the whole combined program has to be released under the GPL. So your module has to be available for use under the GPL.</p></blockquote>
<p>That restates what I was saying earlier. By releasing my code under the GPL it protects everyone. Someone could take my program and turn around and try to sell it, but anyone who buys a copy &#8211; even if there are improvements &#8211; has the right to then distribute the software for free. Code based on GPL software must be licensed under the GPL, which grants the user the right to decide what to do with it, not the owner of the copyright.</p>
<p>What does this have to do with anything? <img src='http://www.dagira.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  I just finished a project where I reworked a very large universe. During that project I used my universe comparison tool quite extensively, and I think the final testing is done. I will be posting a copy of the VBA code for download next week here on my blog. The software will include the GNU GPL license so that anyone is free to use it in any way they see fit.</p>
<p>Keep in mind that &#8211; unfortunately &#8211; there is already an expiration date on the software, as the BI 4.0 Information Design Tool does not initially ship with an SDK, and even when it does start to provide one it will likely be in java rather than visual basic. So enjoy it while it lasts. <img src='http://www.dagira.com/wp-includes/images/smilies/icon_cool.gif' alt='8-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.dagira.com/2011/08/19/what-is-gpl-software/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Universe Compare Tool Progress Report</title>
		<link>http://www.dagira.com/2010/11/15/universe-compare-tool-progress-report/</link>
		<comments>http://www.dagira.com/2010/11/15/universe-compare-tool-progress-report/#comments</comments>
		<pubDate>Mon, 15 Nov 2010 16:16:22 +0000</pubDate>
		<dc:creator>Dave Rathbun</dc:creator>
				<category><![CDATA[2010 SBOUC]]></category>
		<category><![CDATA[VBA Tools]]></category>

		<guid isPermaLink="false">http://www.dagira.com/?p=353</guid>
		<description><![CDATA[I have had a number of questions or requests related to the release date for my universe compare tool that I demonstrated at the SAP BusinessObjects User Conference last month in Orlando. I am happy to report that I have almost completed the &#8220;digging out from under&#8221; process that occurs every year after the conference [...]]]></description>
			<content:encoded><![CDATA[<p>I have had a number of questions or requests related to the release date for my universe compare tool that I demonstrated at the SAP BusinessObjects User Conference last month in Orlando. I am happy to report that I have almost completed the &#8220;digging out from under&#8221; process that occurs every year after the conference season, and hope to be able to finalize the initial release. All I have to do is remove the logic that checks for object incompatibilities (related to Aggregate Navigation) as large universes contain too much data to fit in a standard (old version) spreadsheet.</p>
<p>Once that is complete, I will release the initial version here on my blog. I anticipate at this time that I will be able to do this early in December. Thanks for your patience.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dagira.com/2010/11/15/universe-compare-tool-progress-report/feed/</wfw:commentRss>
		<slash:comments>25</slash:comments>
		</item>
		<item>
		<title>Information Design Tool (Designer 4.0) Won&#8217;t Have an SDK</title>
		<link>http://www.dagira.com/2010/10/11/information-design-tool-designer-4-0-wont-have-an-sdk/</link>
		<comments>http://www.dagira.com/2010/10/11/information-design-tool-designer-4-0-wont-have-an-sdk/#comments</comments>
		<pubDate>Mon, 11 Oct 2010 17:14:49 +0000</pubDate>
		<dc:creator>Dave Rathbun</dc:creator>
				<category><![CDATA[2010 SBOUC]]></category>
		<category><![CDATA[VBA Tools]]></category>

		<guid isPermaLink="false">http://www.dagira.com/?p=328</guid>
		<description><![CDATA[One of the more interesting (and disappointing) tidbits I got from the folks talking about the new semantic layer (the Information Design Tool) coming in 4.0 is that there won&#8217;t be an SDK in the initial release. There may be one coming later, but it will potentially be java based rather than VBA. That means [...]]]></description>
			<content:encoded><![CDATA[<p>One of the more interesting (and disappointing) tidbits I got from the folks talking about the new semantic layer (the Information Design Tool) coming in 4.0 is that there won&#8217;t be an SDK in the initial release. There may be one coming later, but it will potentially be java based rather than VBA. That means that my VBA experience is going to be less useful, and tools like my Schema Change utility and the soon to be posted Universe Change Log script that I showed at the 2010 BusinessObjects User Conference will soon not only be obsolete but we won&#8217;t have a mechanism to replace them. <img src='http://www.dagira.com/wp-includes/images/smilies/icon_eek.gif' alt=':shock:' class='wp-smiley' /> </p>
<p>While on the subject of the SDK&#8230; I was asked multiple times when I would be posting my script from the conference. I discovered a few days before the presentation was due that there is a problem with joins when switching from one database to another. For example, we are in the process of switching one of our larger datamarts from DB2 to Teradata. I am going to write a more detailed blog post on that shortly, but let me say that my universe compare script was very useful during the process. But during the compare process I found that this join:</p>
<p><code>table1.table_1_id = table2.table_2_id</code></p>
<p>Got changed to this:</p>
<p><code>table2.table_2_id = table1.table_1_id</code></p>
<p>Of course both joins are functionally the same. But to my script they showed up as three different changes. Table 1 was changed from &#8220;table1&#8243; to &#8220;table2&#8243; while Table 2 was changed in reverse. And of course the join logic was reversed as shown above. So while this was not really a change, my script was recognizing three unique differences between the two universes, all related to that one join. I had not encountered this when running against two different versions of the same universe pointing to the same database, which is the expected use of the tool. I created it primarily to compare the DEV and PROD versions of the same universe. But I am trying to think about a way to update the code so that inverted or reversed joins are not detected as changes. If I can&#8217;t come up with something in the next few weeks, I will go ahead and post the code as I demonstrated it at the conference last week.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dagira.com/2010/10/11/information-design-tool-designer-4-0-wont-have-an-sdk/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Universe &#8220;diff&#8221; Tool To Be Released At Orlando Conference</title>
		<link>http://www.dagira.com/2010/09/08/universe-diff-tool-to-be-released-at-orlando-conference/</link>
		<comments>http://www.dagira.com/2010/09/08/universe-diff-tool-to-be-released-at-orlando-conference/#comments</comments>
		<pubDate>Wed, 08 Sep 2010 14:21:08 +0000</pubDate>
		<dc:creator>Dave Rathbun</dc:creator>
				<category><![CDATA[2010 SBOUC]]></category>
		<category><![CDATA[VBA Tools]]></category>

		<guid isPermaLink="false">http://www.dagira.com/?p=316</guid>
		<description><![CDATA[I am happy to be able to (finally!) report that my universe &#8220;diff&#8221; tool (first mentioned a long time ago) is nearing completion. I have been using this partially completed tool on my own for many years, but the only things it compared were objects and predefined conditions. As such it was somewhat useful (mostly [...]]]></description>
			<content:encoded><![CDATA[<p>I am happy to be able to (finally!) report that my <a href="http://www.dagira.com/2007/11/13/universe-diff-tool/">universe &#8220;diff&#8221; tool</a> (first mentioned a long time ago) is nearing completion. I have been using this partially completed tool on my own for many years, but the only things it compared were objects and predefined conditions. As such it was somewhat useful (mostly to me) but since it was not complete I did not release it even internally to my employer. When I started to extend the code to compare joins, tables, contexts, and other universe components I soon realized that the way I had originally written the code was not very modular. I was going to have to either write specific routines to compare each universe component, or go back and rewrite what I had in order to make it more generic. I didn&#8217;t do either of those things. <img src='http://www.dagira.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>As of today I have completed the rewrite and am now going to extend the comparison to other universe components. I expect to have the final code ready to demonstrate (and release) during my talk <a href="Change Management Strategies For Universe Developers">Change Management Strategies For Universe Developers</a> at the fall BusinessObjects conference. And of course once I release it there, I will also set up a way to download the code here on my blog.</p>
<p>Why use this tool rather than some of the other tools that are available? For one thing, it will be free. Free is good. <img src='http://www.dagira.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  It will be released under the GNU GPL license, which allows me to retain the copyright on the code while ensuring that the code can be distributed without restrictions. Support for the code will be on an &#8220;as time allows&#8221; basis here on my blog. For more details on the GNU GPL license (if you are not familiar with it) I have included a link at the end of this post. Basically it says that I retain copyright of the code, but anyone can use it however they see fit. So there are no restrictions on using it for personal or company use, and it can even be redistributed. The only requirement is that the code remains free of all restrictions and that my copyright information be retained in a visible fashion.</p>
<p>I&#8217;m excited to be able to finally complete this project. When I submitted the abstract for the conference I was hoping that it would get accepted, and that would be the incentive for me to get around to completing the code. It seems to have worked. Now all I have to do is complete my slides and get them submitted (a week late). I look forward to being able to share the results and the code in Orlando.</p>
<p><strong>Related Links</strong></p>
<ul>
<li><a href="http://www.gnu.org/licenses/gpl-2.0.html">GNU GPL V2</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.dagira.com/2010/09/08/universe-diff-tool-to-be-released-at-orlando-conference/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Using the Designer SDK to Ease Migrations</title>
		<link>http://www.dagira.com/2008/03/06/using-the-designer-sdk-to-ease-migrations/</link>
		<comments>http://www.dagira.com/2008/03/06/using-the-designer-sdk-to-ease-migrations/#comments</comments>
		<pubDate>Thu, 06 Mar 2008 23:31:57 +0000</pubDate>
		<dc:creator>Dave Rathbun</dc:creator>
				<category><![CDATA[Universe Design]]></category>
		<category><![CDATA[VBA Tools]]></category>

		<guid isPermaLink="false">http://www.dagira.com/2008/03/06/using-the-designer-sdk-to-ease-migrations/</guid>
		<description><![CDATA[The full client applications (Business Objects aka Desktop Intelligence) have had VBA (Visual Basic for Applications) for quite some time. The initial release of 4.x included a scripting language that was &#8220;like&#8221; VBA but was not quite the same. When 5.x was introduced they switched to Microsoft VBA. I have written more than a few [...]]]></description>
			<content:encoded><![CDATA[<p>The full client applications (Business Objects aka Desktop Intelligence) have had VBA (Visual Basic for Applications) for quite some time. The initial release of 4.x included a scripting language that was &#8220;like&#8221; VBA but was not quite the same. When 5.x was introduced they switched to Microsoft VBA. I have written more than a few VBA utilities over the years, some of which are published on the Integra Solutions library page. Today I want to share a utility that I put together to help migrate universes in a Teradata environment. I should point out that this utility does not require that you use Teradata; it can be used in any database environment where you need to do a mass-update to the owner or schema name.</p>
<h3>Executive Summary</h3>
<p>This utility is designed to automate the update of the schema or owner name in a universe. The host application is Microsoft Excel since the Universe Designer application cannot be a VBA host. You enter the &#8220;From&#8221; and &#8220;To&#8221; schema names into cells in the XLS and run the macro. At completion you will have a universe where the schema (or owner) has been updated.</p>
<p><span id="more-68"></span></p>
<h3>Explaining the Problem</h3>
<p>When I build a connection to Teradata, I do not connect to a database. I connect to a server. That server could be the host for more than one database or schema. That means that for my universe I have to fully qualify the tables as owner.tablename rather than referencing the tablename by itself. This presents a problem because my schema names change during the migration process. And most migration managers frown on editing code during the migration process. <img src='http://www.dagira.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>In this particular case the schema name is a short abbreviation of the project (I will use PROJ for this blog post) followed by a letter that designates the purpose of the schema. For example, _D is the development schema, _S is the System Test schema, and _P is for production. A table that is named <code>PROJ<strong>_D</strong>.tablename</code> in development will become <code>PROJ<strong>_P</strong>.tablename</code> in production. That&#8217;s a code change.</p>
<h3>First Solution</h3>
<p>If you have a simple universe you can highlight all of the tables, right-click and select the &#8220;rename table&#8221; option from the mouse menu. With this technique you can update the owner for every single table in the universe in one step. But what if you have aliases as well as regular tables? In that case, you have to selectively highlight all of the tables (ignoring the aliases) and rename only the source tables. The aliases will inherit the change.</p>
<p>The easiest way I have found to do this is to use the table listing on the &#8220;List Mode&#8221; panel that you can show on the top of the screen. That way all of the tables with the same owner are listed together, and rather than use the graphical structure to rename my tables I can use a list. This works well, and solves the problem.</p>
<p>Until you introduce Derived Tables into your universe. <img src='http://www.dagira.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h3>Second Solution</h3>
<p>When you use a derived table those tables don&#8217;t really have owner names since they exist only in the universe. But they do reference tables in the database, and as discussed above, they will include the schema or owner name. In order to migrate derived tables correctly, I had to open each one and update the SQL manually. This was a problem.</p>
<p>The main issue is that I was changing the code during a migration. That means that a bug could be introduced. And introducing bugs during a migration (after system testing has been completed) is not a popular result. <img src='http://www.dagira.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>So what I did to solve this issue at first was to create an Excel spreadsheet that contained the SQL code required for each derived table. I created formulas where the schema name was a reference to a single cell in the sheet. To migrate a universe I would open this XLS, update the schema name in one place, and see that schema name updated in each different SQL statement. It becomes a simple copy / paste operation during the migration rather than an &#8220;edit&#8221; operation. This was certainly safer, because the code itself was verified and the only thing that was being updated was the schema name. But there were still problems.</p>
<p>For example, at one point we had someone new join our team, and their video resolution was smaller than mine. What does the video setting have to do with this? Smart question. <img src='http://www.dagira.com/wp-includes/images/smilies/icon_lol.gif' alt=':lol:' class='wp-smiley' />  The issue was on my screen I would see <strong>seven</strong> derived table definitions. On their screen, because it was smaller, they only saw <strong>five</strong>. That meant when they processed the instructions in the spreadsheet they only updated five of the seven derived tables, with the net result being we got code in production that was not working.</p>
<h3>Automate the Process</h3>
<p>So now, finally, the VBA solution. The advantage of VBA (or any programming language) is that it&#8217;s going to do exactly what you tell it to do.  It won&#8217;t do half of the derived tables and skip the rest. It won&#8217;t accidentally miss a table during the selection process. If you set up a program loop and tell it to process every table, that&#8217;s just what it will do.</p>
<h3>The Code</h3>
<p>The code is contained within a host application since Designer cannot host the code itself. I selected Excel as my host which is quite common. Many of the utilities on <a href="http://www.forumtopics.com/busobj/viewforum.php?f=25">BOB&#8217;s Downloads</a> do the same. I will detail the code here, and the entire file is presented as an attachment at the end of this post. <strong>Disclaimer: This code should be considered &#8220;beta&#8221; quality at this time.</strong> This means it is &#8220;use at your own risk&#8221; and make backups and all that good stuff.</p>
<p><strong>Getting Started</strong><br />
First there are some basic settings and declarations that appear at the top of every Business Objects utility that I write.</p>
<pre>Option Explicit                 ' Require variables to be declared before being used
Option Base 1                   ' Start array indexes at 1 as I think better that way

Dim boDesignerApp As Designer.Application
Dim boUniv As Designer.Universe
Dim xlSheet As Excel.Worksheet</pre>
<p>Next there is the main routine. In most cases my main routines are very short, often (as in this case) there is nothing in them except for function or subroutine calls. This means that the main routine reads more like a process flow and less like actual code. I think it&#8217;s easier to manage that way.</p>
<pre>Sub Main()

    Set xlSheet = Worksheets(1)
    Call UpdateSchema
    MsgBox ("Done")

End Sub</pre>
<p>The first line of code is a shortcut and would not be in the final code. I use it so I have a reference to the first sheet in the workbook where the schema names appear. I generally try to provide all of my input variables via excel cells rather than requiring a user to answer a prompt (because I&#8217;m lazy) or editing the code (because of the potential for mistakes). </p>
<p>Next, the function used to update the schema names. The &#8220;Private&#8221; declaration means that you cannot run this macro function directly. It can only be called from other code.</p>
<pre>Private Sub UpdateSchema()</pre>
<p>The next lines are declarations for variables that I need. The Designer reference is going to give me a handle for the application, and the tbl item will point to the collection of tables in my universe once it is open.</p>
<pre>    Dim tbl As Designer.Table
    Dim sSchemaFrom As String
    Dim sSchemaTo As String</pre>
<p>Those lines of code retrieve the &#8220;from&#8221; and &#8220;to&#8221; schema from the appropriate cells in the worksheet. Minor point: if you use this technique, I strongly suggest that you use named ranges rather than absolute cell references like &#8220;A1&#8243; as it makes the code much easier to maintain.</p>
<pre>    sSchemaFrom = xlSheet.Range("SchemaFrom").Value
    sSchemaTo = xlSheet.Range("SchemaTo").Value</pre>
<p>Next, log in to Designer. The code to do this is different depending on whether you&#8217;re using versions 6.5 or earlier or XI. Both syntaxes are shown here.</p>
<pre>    ' Establish a Designer session and log in
    Set boDesignerApp = New Designer.Application
    boDesignerApp.Visible = True

    ' Use this method instead for older versions
    ' Call boDesignerApp.LoginAs
    Call boDesignerApp.LogonDialog</pre>
<p>Next, open the universe. Since I don&#8217;t specify a universe name, I will be able to interact with the standard &#8220;File &#8211; Open&#8221; dialog box provided by Designer.</p>
<pre>    Set boUniv = boDesignerApp.Universes.Open</pre>
<p>After opening the universe it is time to process the tables. This next block of code loops through each table in the Tables collection. There is an attribute called <code>IsAlias</code> that is true if the table is an alias rather than a true source table. If that flag is true, then there is no processing done on that table. The &#8220;debug.print&#8221; command sends output to the debug window; a user will not see that information.</p>
<pre>    boDesignerApp.Visible = False

    For Each tbl In boUniv.Tables
        If tbl.IsAlias Then
            Debug.Print tbl.Name &#038; " is alias"</pre>
<p>Next, if the table is a derived table I have to update the schema name in the SQL. There is an called <code>IsDerived</code> that will be true if the table is a derived table. If it is true then the attribute <code>SqlOfDerivedTable</code> contains the SQL code.</p>
<p>One note: if the update fails the derived table will still exist but it will be in an invalid state. In this case what I have found is that a universe integrity check will fail in catastrophic fashion. <img src='http://www.dagira.com/wp-includes/images/smilies/icon_lol.gif' alt=':lol:' class='wp-smiley' /> </p>
<pre>        ElseIf tbl.IsDerived Then
            ' Update derived table SQL here
            Debug.Print tbl.Name &#038; " is derived"
            tbl.SqlOfDerivedTable = str_replace(tbl.SqlOfDerivedTable, sSchemaFrom, sSchemaTo)</pre>
<p>Finally, if it&#8217;s a normal table then the Name attribute contains the full name, which includes the schema. I update the name attribute then loop to the next table in the collection.</p>
<pre>        Else
            ' Update table owner
            Debug.Print tbl.Name &#038; " is table"
            tbl.Name = str_replace(tbl.Name, sSchemaFrom, sSchemaTo)
        End If
    Next tbl</pre>
<p>Finally, save the universe and exit.</p>
<pre>
    boUniv.Save

    ' Release the Designer app and recover memory
    boDesignerApp.Quit
    Set boDesignerApp = Nothing

End Sub</pre>
<p>This code is fairly simple, once you know which attributes (they are actually called &#8220;properties&#8221;) are available. The last bit of code is the <code>str_replace()</code> function. There is no function named <code>str_replace()</code> in VBA by default, but there is a <code>Replace()</code> function. So why did I create something brand new, if all I am going to do is call a built-in function? It&#8217;s a good question.</p>
<p>There are many advantages to creating a function wrapper. First, if I need to port my code to a different version of VBA there might not be a <code>Replace()</code> function. By creating my own function call I can write a replacement function without touching the rest of the code. The more important advantage, however, is that I can put extra code inside my function. Here is what my <code>str_replace()</code> function looks like right now:</p>
<pre>Private Function str_replace(ByRef sSql As String, sFrom As String, sTo As String) As String

    sSql = Replace(sSql, sFrom, sTo, 1, -1)
    str_replace = sSql

End Function</pre>
<p>As you can see, there&#8217;s not much going on other than a basic replacement of text. But what I thought about doing is writing a log to the Excel worksheet showing the &#8220;before&#8221; and &#8220;after&#8221; state of each table that gets processed in the loop. That will help create an audit trail and make debugging easier as well. At the moment that code does not exist. But by creating a wrapper for the <code>Replace()</code> function I can do that.</p>
<p>I use this technique all the time in various programming languages, not just VBA. It has served me well in the past.</p>
<p>So that&#8217;s the end of the code. What, you thought there was more? <img src='http://www.dagira.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h3>Conclusion</h3>
<p>I&#8217;ve done only very preliminary testing for this utility so far, but it seems to work just fine. I expect that it will really help my current client with their Teradata universe migrations.</p>
<h3>Downloads</h3>
<p><em>The following utility is released under the GPL or Gnu Public License. This means that you have the freedom to do whatever you like with the code but it must retain my copyright. There are no licensing costs associated with use in a corporate or any other environment. No warranty is expressed or implied.</em></p>
<ul>
<li><a href='http://www.dagira.com/wp-content/uploads/2008/03/dagiraschemachange.xls' title='Schema Change Utility'>Dagira Schema Change Utility</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.dagira.com/2008/03/06/using-the-designer-sdk-to-ease-migrations/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
	</channel>
</rss>

