<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-19111454</id><updated>2012-02-15T22:56:48.335-08:00</updated><category term='K2'/><category term='Visual Studio'/><category term='JBoss'/><category term='VMWare'/><category term='Lombardi'/><category term='SQL Reporting Services'/><category term='Web Services'/><category term='SQL Server'/><category term='SharePoint'/><category term='XML'/><category term='Workflow'/><category term='Teamworks'/><category term='CAML'/><category term='SharePoint 2010'/><category term='Kerberos'/><category term='Oracle'/><category term='LDAP'/><category term='ASP.NET'/><category term='HTTP'/><category term='Regex'/><category term='iPhone'/><category term='TFS 2010'/><category term='unix'/><category term='MSDTC'/><category term='HTML'/><category term='MOSS'/><category term='Windows 2008R2'/><category term='SSL'/><category term='VIM'/><category term='Databases'/><category term='JavaScript'/><category term='OpenSSH'/><category term='ColdFusion'/><category term='scripts'/><category term='Tutorial Video'/><category term='Cloud'/><category term='.NET'/><category term='HTML5'/><title type='text'>BryansGeekSpeak</title><subtitle type='html'>Half finished documentation, scripts and other scraps from my work related projects.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default?start-index=101&amp;max-results=100'/><author><name>Bryan</name><uri>http://www.blogger.com/profile/04483630913081107737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/-JiqHvXZc_4c/TnJS_6Lg0jI/AAAAAAAAAAY/brk6MXklCO4/s220/2etous46.thm.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>135</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-19111454.post-2895952437861756884</id><published>2011-12-08T13:05:00.001-08:00</published><updated>2011-12-08T13:59:50.056-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>SQL Server 2008R2 Linked Server to Oracle 11.2.0.2 Instance</title><content type='html'>&lt;p&gt;My notes on doing this particular setup using SQL Server 2008R2 and Oracle 11.2.0.2 (64bit versions) on Windows Server 2008R2 64bit Enterprise edition.&lt;/p&gt;&lt;b&gt;Install Oracle 11.2.02 64 bit client&lt;/b&gt;&lt;p&gt;Install the oracle client on the SQL Server machine where you want to add the linked server.  Install the following components only using the custom installation option.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Oracle Database Utilities&lt;/li&gt;&lt;li&gt;SQL*Plus&lt;/li&gt;&lt;li&gt;Oracle Net&lt;/li&gt;&lt;li&gt;Oracle Provider for OLE DB&lt;/li&gt;&lt;li&gt;Oracle Data Provider for .NET (I dont think this is needed, but I always install it out of habit!)&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-aJRmzsk6Wcw/TuEsmb4z0cI/AAAAAAAAAB4/CmOPzqDbR50/s1600/Oracle11ClientInstallOptions.PNG" imageanchor="1" style="clear:left; margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="285" width="320" src="http://4.bp.blogspot.com/-aJRmzsk6Wcw/TuEsmb4z0cI/AAAAAAAAAB4/CmOPzqDbR50/s320/Oracle11ClientInstallOptions.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;Reboot the SQL Server box&lt;/b&gt;&lt;p&gt;Reboot the server so that SQL Server 2008R2 can pick up the installed Oracle provider. When the server comes back up, you should see the new oracle provider appear in the linked server providers section in SQL Server Management Studio.&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-FaY0TZhy_Xg/TuEtgDt6DbI/AAAAAAAAACQ/K2me3Na2Jcg/s1600/OracleServerLinkProvider.PNG" imageanchor="1" style="clear:left; margin-right:1em; margin-bottom:1em"&gt;&lt;img border="0" height="271" width="224" src="http://2.bp.blogspot.com/-FaY0TZhy_Xg/TuEtgDt6DbI/AAAAAAAAACQ/K2me3Na2Jcg/s320/OracleServerLinkProvider.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;Configure Oracle Link Provider Properties&lt;/b&gt;&lt;p&gt;Right click on the OraOLEDB.Oracle provider and select properties. Check the following options and save changes.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Dynamic parameter&lt;/li&gt;&lt;li&gt;Allow inprocess&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-BhTMiAlwodk/TuEuGlWsaPI/AAAAAAAAACc/Rk8ErtTIztI/s1600/OracleServerLinkProviderSettings.PNG" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="93" width="320" src="http://2.bp.blogspot.com/-BhTMiAlwodk/TuEuGlWsaPI/AAAAAAAAACc/Rk8ErtTIztI/s320/OracleServerLinkProviderSettings.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;b&gt;Configure TNS Names&lt;/b&gt;&lt;p&gt;At this point, you need to configure TNS entries for connecting to your Oracle instance. The easiest thing to do is take an existing tnsnames.ora file from a working server and copy it to the "network\admin" directory in your root oracle install path. ( in my case, my TNS names file is in the path "c:\app\product\11.2.0\client_1\network\admin\tnsnames.org")&lt;/p&gt;&lt;b&gt;Create Oracle Linked Server&lt;/b&gt;&lt;p&gt;Go back into SQL Server Management Studio and browse to the Linked Servers folder. Right click that folder and select "New Linked Server...".&lt;/p&gt;&lt;p&gt;In the general tab...&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Type in the name of the linked server (whatever you want) into the "Linked server:" field&lt;/li&gt;&lt;li&gt;Select "Oracle Provider for OLE DB" as the Provider&lt;/li&gt;&lt;li&gt;Put in any value you want for the Product name - something like "Oracle" will do.&lt;/li&gt;&lt;li&gt;Set the Data source: to the TNS name of the connection you want to use from your TNS file.&lt;/li&gt;&lt;li&gt;Leave the provider string empty&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-PgK3SvUrG3E/TuEyQ5fg5oI/AAAAAAAAACo/VerT6gZdkBY/s1600/NewLinkedServerGeneral.PNG" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="286" width="320" src="http://3.bp.blogspot.com/-PgK3SvUrG3E/TuEyQ5fg5oI/AAAAAAAAACo/VerT6gZdkBY/s320/NewLinkedServerGeneral.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;In the security tab...&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Select the last radio button "Be made using this security context"&lt;/li&gt;&lt;li&gt;Enter the oracle account username/password in the fields under the checked radio button&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-4rsK-fjIxpE/TuEyWmQjloI/AAAAAAAAAC0/JzIeaaGpMgs/s1600/NewLinkedServerSecurity.PNG" imageanchor="1" style="margin-left:1em; margin-right:1em"&gt;&lt;img border="0" height="286" width="320" src="http://1.bp.blogspot.com/-4rsK-fjIxpE/TuEyWmQjloI/AAAAAAAAAC0/JzIeaaGpMgs/s320/NewLinkedServerSecurity.PNG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;...and click "OK" to finish up.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-2895952437861756884?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/2895952437861756884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=2895952437861756884' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/2895952437861756884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/2895952437861756884'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2011/12/sql-server-2008r2-linked-server-to.html' title='SQL Server 2008R2 Linked Server to Oracle 11.2.0.2 Instance'/><author><name>Bryan</name><uri>http://www.blogger.com/profile/04483630913081107737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/-JiqHvXZc_4c/TnJS_6Lg0jI/AAAAAAAAAAY/brk6MXklCO4/s220/2etous46.thm.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-aJRmzsk6Wcw/TuEsmb4z0cI/AAAAAAAAAB4/CmOPzqDbR50/s72-c/Oracle11ClientInstallOptions.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-5334780434847236105</id><published>2011-12-01T15:11:00.001-08:00</published><updated>2011-12-01T15:18:53.010-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>SQL Server 2008 - Dumping VARBINARY data to a file</title><content type='html'>&lt;p&gt;I couldn't find a way to convert varbinary column data to a file using SQL Server 2008 Management Studio, so I did some googling and found info on using the bcp.exe command to do it (I believe this comes with the Management Studio install). In my case, I was extracting a PDF file stored as varbinary:&lt;/p&gt;&lt;div class="code"&gt;c:\temp&gt;bcp "select MYVARBINARYCOL from MYTABLE where id = 1234" queryout "c:\filename.pdf" -S MYSQLSERVER\MYINSTANCE -T&lt;br/&gt;&lt;br/&gt;Enter the file storage type of field filedata [varbinary(max)]:&lt;br/&gt;Enter prefix-length of field filedata [8]: 0&lt;br/&gt;Enter length of field filedata [0]:&lt;br/&gt;Enter field terminator [none]:&lt;br/&gt;&lt;br/&gt;Do you want to save this format information in a file? [Y/n] n&lt;br/&gt;&lt;br/&gt;Starting copy...&lt;br/&gt;&lt;br/&gt;1 rows copied.&lt;br/&gt;Network packet size (bytes): 4096&lt;br/&gt;Clock Time (ms.) Total     : 15     Average : (66.67 rows per sec.)&lt;br/&gt;&lt;/div&gt;&lt;p&gt;I used the -T option to use windows authentication to connect to the DB. If you use password auth, you'll need to use the -U and -P switches to specify a username and password.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-5334780434847236105?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/5334780434847236105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=5334780434847236105' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/5334780434847236105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/5334780434847236105'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2011/12/sql-server-2008-dumping-varbinary-data.html' title='SQL Server 2008 - Dumping VARBINARY data to a file'/><author><name>Bryan</name><uri>http://www.blogger.com/profile/04483630913081107737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/-JiqHvXZc_4c/TnJS_6Lg0jI/AAAAAAAAAAY/brk6MXklCO4/s220/2etous46.thm.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-739577485419220936</id><published>2011-11-14T13:04:00.001-08:00</published><updated>2011-12-01T15:18:15.420-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Web Services'/><title type='text'>Understanding REST-ful Web Services</title><content type='html'>Links to more info on REST-ful web service design. Most of my focus will be using .NET WCF data services for building web services.&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/webservices/library/ws-restful/"&gt;RESTful Web services: The basics (IBM)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Hypertext_Transfer_Protocol"&gt;Hypertext Transfer Protocol (Wikipedia)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd203052.aspx"&gt;A Guide to Designing and Building RESTful Web Services with WCF 3.5 (Microsoft)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc668794.aspx"&gt;WCF Data Services Overview (Microsoft)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.msdn.com/b/adonet/archive/2011/03/21/using-wcf-data-services-with-entity-framework-4-1-and-code-first.aspx"&gt;Using WCF Data Services with Entity Framework 4.1 and Code First (Microsoft)&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-739577485419220936?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/739577485419220936/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=739577485419220936' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/739577485419220936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/739577485419220936'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2011/11/understanding-rest-ful-web-services.html' title='Understanding REST-ful Web Services'/><author><name>Bryan</name><uri>http://www.blogger.com/profile/04483630913081107737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/-JiqHvXZc_4c/TnJS_6Lg0jI/AAAAAAAAAAY/brk6MXklCO4/s220/2etous46.thm.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-5491169567258274554</id><published>2011-11-09T14:01:00.000-08:00</published><updated>2011-11-09T15:54:41.850-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Databases'/><title type='text'>Another Painful Day At Work - Database Column Widths</title><content type='html'>&lt;p&gt;Another painful day at work trying to justify to my project managers why we should be using generic long varchar2 width/size specifications in my DB schema, for columns storing things like user entered addresses and phone numbers.  Things that our web application will constrain and validate (like phone number format) - things that our database does not need to care about. For these "generic" columns, we just want to accept whatever data the web app passes to us and persist it. Nothing more.&lt;/p&gt;&lt;p&gt;There is an IBM article that explains my point much more clearly than I can manage in a meeting with my co-workers:&lt;a href="http://www.ibm.com/developerworks/web/library/wa-dbdsgn1/index.html"&gt;http://www.ibm.com/developerworks/web/library/wa-dbdsgn1/index.html&lt;/a&gt;&lt;/p&gt;&lt;div class="sidenote"&gt;&lt;b&gt;Strings and numbers&lt;/b&gt;&lt;p&gt;In general, numerical types pose few problems -- just select one that is large enough to support the necessary range of values.&lt;/p&gt;&lt;p&gt;The attempt to find the optimal width of a string column is usually not worth the effort. You can avoid a lot of confusion later on by making all text messages of type varchar(n) and limiting yourself to a few standard string lengths and introducing aliases for them, such as: 32 bytes ("Label"), 256 bytes ("Note"), and 4k ("Text").&lt;/p&gt;&lt;p&gt;&lt;b&gt;Even if other business requirements restrict the maximum length of certain fields to specific values, the DB schema is arguably not the best place to enforce these rules. By the time the data reaches the DB, it is too late to do anything about it (except reject it). Individual restrictions, stemming from business rules and requirements, should be enforced by the business logic layer, which handles user interaction and input validation. On the other hand, maintenance of the DB schema is considerably simplified if it is restricted to a handful of different string attributes.&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Limit the use of fixed-width strings to codes of all sorts (as opposed to variable-length strings for real text). Keep in mind however, that many seemingly fixed-length codes do actually become wider over time. The prudent DB designer tries to avoid anything similar to the Y2K problem for new development work.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-5491169567258274554?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/5491169567258274554/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=5491169567258274554' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/5491169567258274554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/5491169567258274554'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2011/11/another-painful-day-at-work-database.html' title='Another Painful Day At Work - Database Column Widths'/><author><name>Bryan</name><uri>http://www.blogger.com/profile/04483630913081107737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/-JiqHvXZc_4c/TnJS_6Lg0jI/AAAAAAAAAAY/brk6MXklCO4/s220/2etous46.thm.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-7985452509827820792</id><published>2011-10-14T10:53:00.000-07:00</published><updated>2011-10-14T11:18:25.523-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cloud'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><title type='text'>iOS5 iCloud - Not as open as I had hoped!</title><content type='html'>I have been using dropbox for a year or two now and when I heard that iOS5 would have &lt;a href="http://www.apple.com/iphone/icloud/"&gt;iCloud &lt;/a&gt;features baked into it, I got all excited! Finally I can get rid of all my 3rd party cloud services and manage everything in iCloud! It made sense at first, knowing that all my music would be in the cloud anyway (for me thats about 30gig of space right there!) but now that I've played with iOS5 for a bit with cloud features enabled...not as awesome as I had hoped.&amp;nbsp; &lt;a href="https://www.dropbox.com/"&gt;Dropbox &lt;/a&gt;is still the champ in the cloud storage department, if you ask me.&lt;br /&gt;&lt;br /&gt;Lets just jump right to the kicker. All the cloud services sync up to any ios device you own, and appleTV. thats fine, but still very limited. How can I access icloud without ios? Say, with a pc or a linux laptop? The only option I've found is the icloud web interface...which is rather dissapointing.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-c8Y0ZeTtYWA/Tphy8o2UB7I/AAAAAAAAABc/KwV6ezQjEo4/s1600/iCloudWebInterface.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="187" src="http://1.bp.blogspot.com/-c8Y0ZeTtYWA/Tphy8o2UB7I/AAAAAAAAABc/KwV6ezQjEo4/s320/iCloudWebInterface.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And my first visit to icloud.com turned into an "um...what?" moment.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Dude, where are my pictures?&amp;nbsp; Photostream isnt even viewable from here? Wacky! I'm guessing you might be able to sync up photostream with itunes on pc, but havent even looked yet - kind of pointless thing for me anyway, I'd rather have it available on the web.&lt;/li&gt;&lt;li&gt;Contacts and calendar? Ok, sure, thats neat but not something I use since all that is on my iphone already.&lt;/li&gt;&lt;li&gt;Mail and FindMyPhone are old services rolled into the new icloud domain. The mail is just me.com mail (if you setup a me account) and the find my phone stuff isnt cloud storage related.&lt;/li&gt;&lt;li&gt;iWorks is the only service they expose that is an actual cloud based service, but its locked down to folks who paid for iworks apps on ios.&amp;nbsp; Since I dont have iworks, I cant truly test out what this service even does. I assume it renders a web app version of your files, but my guess is they wont allow file downloads (that seems to be the key point for all their icloud stuff - no direct file access, you must use ios x_x)&lt;/li&gt;&lt;/ul&gt;..but the good stuff about icloud so far for me&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Cloud backups. No more syncing my phone with itunes! Hooray! I really hope we can do iphone updates over the air in the future too so I could remove itunes from my pc if I really wanted to.&lt;/li&gt;&lt;li&gt;Sync music/video from itunes over the air.&amp;nbsp; Again, nice to be able to keep my device up to date without plugging in to sync with itunes.&amp;nbsp; I could start using Linux now that I dont need itunes to keep my iphone in sync! yay!&lt;/li&gt;&lt;/ul&gt;And thats really. But those two things, cloud backup and music/video sync over the cloud are really huge!&amp;nbsp; That alone makes the service worth wile in ios5, but I really wish they would take the time to open up the icloud service to expose more data to non ios devices, even if only via web apps. Something that I can use my pc, mac or linux box to access without itunes.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-7985452509827820792?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/7985452509827820792/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=7985452509827820792' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/7985452509827820792'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/7985452509827820792'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2011/10/ios5-icloud-not-as-open-as-i-had-hoped.html' title='iOS5 iCloud - Not as open as I had hoped!'/><author><name>Bryan</name><uri>http://www.blogger.com/profile/04483630913081107737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/-JiqHvXZc_4c/TnJS_6Lg0jI/AAAAAAAAAAY/brk6MXklCO4/s220/2etous46.thm.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-c8Y0ZeTtYWA/Tphy8o2UB7I/AAAAAAAAABc/KwV6ezQjEo4/s72-c/iCloudWebInterface.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-3192996879132830313</id><published>2011-10-13T11:52:00.000-07:00</published><updated>2011-10-14T11:18:42.953-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML5'/><title type='text'>Something Neat - P2PU Beginning Game Development with HTML 5</title><content type='html'>I just randomly found this site the other day and decided to give this tutorial a try since I really need a good Javascrip/HTML5 refresher ... and wow, the videos are great! (and the instructor is just ... lol)&lt;br /&gt;It covers Javascript basics, building/implementing javascript objects, HTML5 canvas, jQuery and a bunch of maths for simple game physics x_x&lt;br /&gt;&lt;br /&gt;So here you go, a link to the course for building games using pure HTML and Javascript.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://p2pu.org/en/groups/beginning-game-development-with-html-5/"&gt;http://p2pu.org/en/groups/beginning-game-development-with-html-5/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-3192996879132830313?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/3192996879132830313/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=3192996879132830313' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/3192996879132830313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/3192996879132830313'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2011/10/something-neat-p2pu-beginning-game.html' title='Something Neat - P2PU Beginning Game Development with HTML 5'/><author><name>Bryan</name><uri>http://www.blogger.com/profile/04483630913081107737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/-JiqHvXZc_4c/TnJS_6Lg0jI/AAAAAAAAAAY/brk6MXklCO4/s220/2etous46.thm.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-1936492023241429255</id><published>2011-10-04T17:25:00.000-07:00</published><updated>2011-10-04T17:27:57.625-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>SharePoint 2010 - Removing Orphaned WebParts</title><content type='html'>While troubleshooting a completely different issue in one of our SharePoint 2010 test farms, I noticed an error reported in the "Health Report" in the central admin. The error "Missing server side dependencies" came up with an explanation saying "WebPart class [GUID] is referenced [x] times in the database [ContentDB], but is not installed on the current farm."&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-WGxMlfaQ5TY/TouX5_L_lHI/AAAAAAAAABA/1VtEHV6b-aQ/s1600/SharePoint2010MissingServerDependencies.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="182" src="http://4.bp.blogspot.com/-WGxMlfaQ5TY/TouX5_L_lHI/AAAAAAAAABA/1VtEHV6b-aQ/s320/SharePoint2010MissingServerDependencies.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;In my case this was a web part we used back before the site had been upgraded to sharepoint 2010. Amazingly, the web part was still working even though SharePoint 2010 was flagging it as an orphan. In this case that's fine, I wanted to remove the web part from all pages anyway.&lt;br /&gt;&lt;br /&gt;...so how in gods name do I find what pages the WebPart is on? &lt;br /&gt;&lt;br /&gt;Thanks to Phil's blog post &lt;a href="http://get-spscripts.com/2011/08/diagnose-missingwebpart-and.html"&gt;"Diagnose MissingWebPart and MissingAssembly issues from the SharePoint Health Analyzer using PowerShell"&lt;/a&gt; I was able to figure this out. Here is my rehash of Phil's info, connecting to SQL server directly rather than using powershell.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Query Against the WebPart GUID&lt;/b&gt;&lt;br /&gt;Snag the WebPart GUID from the error message, then use SQL server management studio to connect to your SharePoint 2010 content database.&amp;nbsp; Run the following query, replacing the GUID with your WebPart GUID.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;"&gt;SELECT&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;"&gt; Id&lt;span style="color: grey;"&gt;,&lt;/span&gt; SiteId&lt;span style="color: grey;"&gt;,&lt;/span&gt; DirName&lt;span style="color: grey;"&gt;,&lt;/span&gt; LeafName&lt;span style="color: grey;"&gt;,&lt;/span&gt; WebId&lt;span style="color: grey;"&gt;,&lt;/span&gt; ListId&lt;span style="color: grey;"&gt;,&lt;/span&gt; tp_ZoneID&lt;span style="color: grey;"&gt;,&lt;/span&gt; tp_DisplayName&lt;/span&gt;&lt;br /&gt;&lt;div class="MsoNormal" style="text-autospace: none;"&gt;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;"&gt;from&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;"&gt; AllDocs &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="text-autospace: none;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: grey;"&gt;inner&lt;/span&gt; &lt;span style="color: grey;"&gt;join&lt;/span&gt;AllWebParts &lt;span style="color: blue;"&gt;on&lt;/span&gt; AllDocs&lt;span style="color: grey;"&gt;.&lt;/span&gt;Id&lt;span style="color: grey;"&gt;=&lt;/span&gt; AllWebParts&lt;span style="color: grey;"&gt;.&lt;/span&gt;tp_PageUrlID&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;"&gt;where&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt;"&gt;AllWebParts&lt;span style="color: grey;"&gt;.&lt;/span&gt;tp_WebPartTypeID &lt;span style="color: grey;"&gt;=&lt;/span&gt; &lt;span style="color: red;"&gt;'8a860dca-4061-d270-a67b-f6bde7fc3e0a'&lt;/span&gt;&lt;span style="color: grey;"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The DirName gives you the path to the page you want ("/MySubSite/Pages") and the LeafName gives you the name of the page ("default.aspx").&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Map The SiteId GUID To URL&lt;/b&gt; &lt;br /&gt;If you have more than one site collection in your farm, the SiteID tells you what collection you are dealing with. You'll want to map the SiteID to a website URL, so bust out the sharepoint powershell prompt on your central admin server and run the following command:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;PS c:\&amp;gt; Get-SPSite&lt;/div&gt;&lt;br /&gt;it should output a list that looks something like this:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;Url&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ID&lt;br /&gt;&lt;br /&gt;---&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; --&lt;br /&gt;http://MySite1 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 707f838a-56ab-475b-9a52-fdf05a8f3e7a&lt;br /&gt;http://MySite2 &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 11c04ca8-ad58-4147-8344-8132e5788090&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The ID in the above table maps back to the SiteId from the SQL query - and there you have your URL to SiteId mapping! Hooray!&lt;br /&gt;&lt;br /&gt;Now you can put it all together to get the full URL of the pages you need to fix.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Removing Bad WebParts&lt;/b&gt;&lt;br /&gt;Sadly, this can be tricky part. When you start deleting the bad WebPart, keep these things in mind:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;DELETE the web part from the page. Do not use the "Remove" option, which only hides the web part instance rather than delete it.&lt;/li&gt;&lt;li&gt;You can quickly view all WebParts assigned to a page and delete them by appending "contents=1" to the url. Ex: "http://mysite/Pages/default.aspx?contents=1" (Another great tip from Phil, thanks!)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-a4Yk6dE2VTo/TouhbY6m9CI/AAAAAAAAABE/cQ9iRHvoAYE/s1600/ContentsEqualsOneView.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="91" src="http://3.bp.blogspot.com/-a4Yk6dE2VTo/TouhbY6m9CI/AAAAAAAAABE/cQ9iRHvoAYE/s320/ContentsEqualsOneView.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;If you have the publishing feature enabled, you could have instances of the web part linked to old versions of your page.&amp;nbsp; Be sure to delete the version history of the page if necessary ... and if you do that, you will need to also empty the SharePoint recycle bin ... and -then- empty the "Second Stage" SharePoint recycle bin if you have it enabled in the central admin, which only the Farm Admin can do from the site collection root settings page.&amp;nbsp; To get to the Second Stage recycle bin, you can login to the front end site as a farm admin account and hit the url "/_layouts/AdminRecycleBin.aspx". Then pick the option "Deleted from end user Recycle Bin".&lt;/li&gt;&lt;/ul&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-OogJv5g-nrc/TouiWohsIpI/AAAAAAAAABI/vre56Deuogc/s1600/SecondStageRecycleBin.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="42" src="http://4.bp.blogspot.com/-OogJv5g-nrc/TouiWohsIpI/AAAAAAAAABI/vre56Deuogc/s320/SecondStageRecycleBin.PNG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Verify All Instances Are Gone&lt;/b&gt;&lt;br /&gt;Once you've deleted the web part from all pages, do a sanity check - run the SQL query again to confirm no records are returned.&amp;nbsp; You can also run the "Health Check" again by hand to confirm SharePoint agrees that the web part is gone.&amp;nbsp; Fire up the SharePoint PowerShell command prompt and run the command "Test-SPContentDatabase" shown below, but of course swap out the content database and web application names for your own.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;PS c:\&amp;gt; Test-SPContentDatabase -name MYSP2010-Content -WebApplication http://MyApp&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-1936492023241429255?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/1936492023241429255/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=1936492023241429255' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/1936492023241429255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/1936492023241429255'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2011/10/sharepoint-2010-removing-orphaned-web.html' title='SharePoint 2010 - Removing Orphaned WebParts'/><author><name>Bryan</name><uri>http://www.blogger.com/profile/04483630913081107737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/-JiqHvXZc_4c/TnJS_6Lg0jI/AAAAAAAAAAY/brk6MXklCO4/s220/2etous46.thm.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-WGxMlfaQ5TY/TouX5_L_lHI/AAAAAAAAABA/1VtEHV6b-aQ/s72-c/SharePoint2010MissingServerDependencies.PNG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-3907141577900783358</id><published>2011-09-30T08:50:00.000-07:00</published><updated>2011-09-30T08:51:02.308-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>Notes On Migrating Oracle 11g Tables to SQL Server 2008R2</title><content type='html'>&lt;!--[if gte mso 9]&gt;&lt;xml&gt; &lt;o:OfficeDocumentSettings&gt;  &lt;o:RelyOnVML/&gt;  &lt;o:AllowPNG/&gt; &lt;/o:OfficeDocumentSettings&gt;&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt; &lt;w:WordDocument&gt;  &lt;w:View&gt;Normal&lt;/w:View&gt;  &lt;w:Zoom&gt;0&lt;/w:Zoom&gt;  &lt;w:TrackMoves/&gt;  &lt;w:TrackFormatting/&gt;  &lt;w:PunctuationKerning/&gt;  &lt;w:ValidateAgainstSchemas/&gt;  &lt;w:SaveIfXMLInvalid&gt;false&lt;/w:SaveIfXMLInvalid&gt;  &lt;w:IgnoreMixedContent&gt;false&lt;/w:IgnoreMixedContent&gt;  &lt;w:AlwaysShowPlaceholderText&gt;false&lt;/w:AlwaysShowPlaceholderText&gt;  &lt;w:DoNotPromoteQF/&gt;  &lt;w:LidThemeOther&gt;EN-US&lt;/w:LidThemeOther&gt;  &lt;w:LidThemeAsian&gt;X-NONE&lt;/w:LidThemeAsian&gt;  &lt;w:LidThemeComplexScript&gt;X-NONE&lt;/w:LidThemeComplexScript&gt;  &lt;w:Compatibility&gt;   &lt;w:BreakWrappedTables/&gt;   &lt;w:SnapToGridInCell/&gt;   &lt;w:WrapTextWithPunct/&gt;   &lt;w:UseAsianBreakRules/&gt;   &lt;w:DontGrowAutofit/&gt;   &lt;w:SplitPgBreakAndParaMark/&gt;   &lt;w:EnableOpenTypeKerning/&gt;   &lt;w:DontFlipMirrorIndents/&gt;   &lt;w:OverrideTableStyleHps/&gt;   &lt;w:UseFELayout/&gt;  &lt;/w:Compatibility&gt;  &lt;w:DoNotOptimizeForBrowser/&gt;  &lt;m:mathPr&gt;   &lt;m:mathFont m:val="Cambria Math"/&gt;   &lt;m:brkBin m:val="before"/&gt;   &lt;m:brkBinSub m:val="&amp;#45;-"/&gt;   &lt;m:smallFrac m:val="off"/&gt;   &lt;m:dispDef/&gt;   &lt;m:lMargin m:val="0"/&gt;   &lt;m:rMargin m:val="0"/&gt;   &lt;m:defJc m:val="centerGroup"/&gt;   &lt;m:wrapIndent m:val="1440"/&gt;   &lt;m:intLim m:val="subSup"/&gt;   &lt;m:naryLim m:val="undOvr"/&gt;  &lt;/m:mathPr&gt;&lt;/w:WordDocument&gt;&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 9]&gt;&lt;xml&gt; &lt;w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true"  DefSemiHidden="true" DefQFormat="false" DefPriority="99"  LatentStyleCount="267"&gt;  &lt;w:LsdException Locked="false" Priority="1" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Normal"/&gt;  &lt;w:LsdException Locked="false" Priority="9" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="heading 1"/&gt;  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/&gt;  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/&gt;  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/&gt;  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/&gt;  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/&gt;  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/&gt;  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/&gt;  &lt;w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/&gt;  &lt;w:LsdException Locked="false" Priority="39" Name="toc 1"/&gt;  &lt;w:LsdException Locked="false" Priority="39" Name="toc 2"/&gt;  &lt;w:LsdException Locked="false" Priority="39" Name="toc 3"/&gt;  &lt;w:LsdException Locked="false" Priority="39" Name="toc 4"/&gt;  &lt;w:LsdException Locked="false" Priority="39" Name="toc 5"/&gt;  &lt;w:LsdException Locked="false" Priority="39" Name="toc 6"/&gt;  &lt;w:LsdException Locked="false" Priority="39" Name="toc 7"/&gt;  &lt;w:LsdException Locked="false" Priority="39" Name="toc 8"/&gt;  &lt;w:LsdException Locked="false" Priority="39" Name="toc 9"/&gt;  &lt;w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/&gt;  &lt;w:LsdException Locked="false" Priority="10" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Title"/&gt;  &lt;w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/&gt;  &lt;w:LsdException Locked="false" Priority="11" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/&gt;  &lt;w:LsdException Locked="false" Priority="22" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Strong"/&gt;  &lt;w:LsdException Locked="false" Priority="20" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/&gt;  &lt;w:LsdException Locked="false" Priority="59" SemiHidden="false"   UnhideWhenUsed="false" Name="Table Grid"/&gt;  &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/&gt;  &lt;w:LsdException Locked="false" Priority="1" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/&gt;  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Shading"/&gt;  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"   UnhideWhenUsed="false" Name="Light List"/&gt;  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Grid"/&gt;  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 1"/&gt;  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 2"/&gt;  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 1"/&gt;  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 2"/&gt;  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 1"/&gt;  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 2"/&gt;  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 3"/&gt;  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"   UnhideWhenUsed="false" Name="Dark List"/&gt;  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Shading"/&gt;  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful List"/&gt;  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Grid"/&gt;  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Shading Accent 1"/&gt;  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"   UnhideWhenUsed="false" Name="Light List Accent 1"/&gt;  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Grid Accent 1"/&gt;  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/&gt;  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/&gt;  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/&gt;  &lt;w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/&gt;  &lt;w:LsdException Locked="false" Priority="34" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/&gt;  &lt;w:LsdException Locked="false" Priority="29" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Quote"/&gt;  &lt;w:LsdException Locked="false" Priority="30" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/&gt;  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/&gt;  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/&gt;  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/&gt;  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/&gt;  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"   UnhideWhenUsed="false" Name="Dark List Accent 1"/&gt;  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/&gt;  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful List Accent 1"/&gt;  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/&gt;  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Shading Accent 2"/&gt;  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"   UnhideWhenUsed="false" Name="Light List Accent 2"/&gt;  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Grid Accent 2"/&gt;  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/&gt;  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/&gt;  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/&gt;  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/&gt;  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/&gt;  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/&gt;  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/&gt;  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"   UnhideWhenUsed="false" Name="Dark List Accent 2"/&gt;  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/&gt;  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful List Accent 2"/&gt;  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/&gt;  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Shading Accent 3"/&gt;  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"   UnhideWhenUsed="false" Name="Light List Accent 3"/&gt;  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Grid Accent 3"/&gt;  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/&gt;  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/&gt;  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/&gt;  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/&gt;  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/&gt;  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/&gt;  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/&gt;  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"   UnhideWhenUsed="false" Name="Dark List Accent 3"/&gt;  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/&gt;  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful List Accent 3"/&gt;  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/&gt;  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Shading Accent 4"/&gt;  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"   UnhideWhenUsed="false" Name="Light List Accent 4"/&gt;  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Grid Accent 4"/&gt;  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/&gt;  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/&gt;  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/&gt;  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/&gt;  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/&gt;  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/&gt;  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/&gt;  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"   UnhideWhenUsed="false" Name="Dark List Accent 4"/&gt;  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/&gt;  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful List Accent 4"/&gt;  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/&gt;  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Shading Accent 5"/&gt;  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"   UnhideWhenUsed="false" Name="Light List Accent 5"/&gt;  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Grid Accent 5"/&gt;  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/&gt;  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/&gt;  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/&gt;  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/&gt;  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/&gt;  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/&gt;  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/&gt;  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"   UnhideWhenUsed="false" Name="Dark List Accent 5"/&gt;  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/&gt;  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful List Accent 5"/&gt;  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/&gt;  &lt;w:LsdException Locked="false" Priority="60" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Shading Accent 6"/&gt;  &lt;w:LsdException Locked="false" Priority="61" SemiHidden="false"   UnhideWhenUsed="false" Name="Light List Accent 6"/&gt;  &lt;w:LsdException Locked="false" Priority="62" SemiHidden="false"   UnhideWhenUsed="false" Name="Light Grid Accent 6"/&gt;  &lt;w:LsdException Locked="false" Priority="63" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/&gt;  &lt;w:LsdException Locked="false" Priority="64" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/&gt;  &lt;w:LsdException Locked="false" Priority="65" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/&gt;  &lt;w:LsdException Locked="false" Priority="66" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/&gt;  &lt;w:LsdException Locked="false" Priority="67" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/&gt;  &lt;w:LsdException Locked="false" Priority="68" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/&gt;  &lt;w:LsdException Locked="false" Priority="69" SemiHidden="false"   UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/&gt;  &lt;w:LsdException Locked="false" Priority="70" SemiHidden="false"   UnhideWhenUsed="false" Name="Dark List Accent 6"/&gt;  &lt;w:LsdException Locked="false" Priority="71" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/&gt;  &lt;w:LsdException Locked="false" Priority="72" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful List Accent 6"/&gt;  &lt;w:LsdException Locked="false" Priority="73" SemiHidden="false"   UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/&gt;  &lt;w:LsdException Locked="false" Priority="19" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/&gt;  &lt;w:LsdException Locked="false" Priority="21" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/&gt;  &lt;w:LsdException Locked="false" Priority="31" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/&gt;  &lt;w:LsdException Locked="false" Priority="32" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/&gt;  &lt;w:LsdException Locked="false" Priority="33" SemiHidden="false"   UnhideWhenUsed="false" QFormat="true" Name="Book Title"/&gt;  &lt;w:LsdException Locked="false" Priority="37" Name="Bibliography"/&gt;  &lt;w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/&gt; &lt;/w:LatentStyles&gt;&lt;/xml&gt;&lt;![endif]--&gt;&lt;!--[if gte mso 10]&gt;&lt;style&gt; /* Style Definitions */ table.MsoNormalTable	{mso-style-name:"Table Normal";	mso-tstyle-rowband-size:0;	mso-tstyle-colband-size:0;	mso-style-noshow:yes;	mso-style-priority:99;	mso-style-parent:"";	mso-padding-alt:0in 5.4pt 0in 5.4pt;	mso-para-margin-top:0in;	mso-para-margin-right:0in;	mso-para-margin-bottom:10.0pt;	mso-para-margin-left:0in;	mso-pagination:widow-orphan;	font-size:11.0pt;	mso-bidi-font-size:10.0pt;	font-family:"Calibri","sans-serif";	mso-ascii-font-family:Calibri;	mso-ascii-theme-font:minor-latin;	mso-hansi-font-family:Calibri;	mso-hansi-theme-font:minor-latin;	mso-bidi-font-family:"Times New Roman";	mso-bidi-theme-font:minor-bidi;}&lt;/style&gt;&lt;![endif]--&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;Assuming you have 3 boxes total:&lt;/div&gt;&lt;div class="MsoListParagraphCxSpFirst" style="margin-left: .75in; mso-add-space: auto; mso-list: l0 level1 lfo1; text-indent: -.25in;"&gt;&lt;span style="mso-ascii-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri;"&gt;&lt;span style="mso-list: Ignore;"&gt;-&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Oracle Severs 11g with tables you want to copy&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: .75in; mso-add-space: auto; mso-list: l0 level1 lfo1; text-indent: -.25in;"&gt;&lt;span style="mso-ascii-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri;"&gt;&lt;span style="mso-list: Ignore;"&gt;-&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;A SQL Server 2008 server that allows remoteconnections via windows auth (password auth should work fine too)&lt;/div&gt;&lt;div class="MsoListParagraphCxSpLast" style="margin-left: .75in; mso-add-space: auto; mso-list: l0 level1 lfo1; text-indent: -.25in;"&gt;&lt;span style="mso-ascii-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri;"&gt;&lt;span style="mso-list: Ignore;"&gt;-&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;A workstation with Oracle 11g client and SQLServer 2008 client&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Install Clients on Workstation&lt;/div&gt;&lt;div class="MsoListParagraphCxSpFirst" style="margin-left: .75in; mso-add-space: auto; mso-list: l0 level1 lfo1; text-indent: -.25in;"&gt;&lt;span style="mso-ascii-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri;"&gt;&lt;span style="mso-list: Ignore;"&gt;-&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Install Oracle 11 client&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 1.25in; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -.25in;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; mso-fareast-font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style="mso-list: Ignore;"&gt;o&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Make sure you install the same version of theOracle client on your workstation that is being used on the Oracle DBserver.&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 1.25in; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -.25in;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; mso-fareast-font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style="mso-list: Ignore;"&gt;o&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Select the Administrator option when you performthe client install. ( The oracle .NET provider and the OLE DB provider arerequired ) &lt;/div&gt;&lt;div class="MsoListParagraphCxSpMiddle" style="margin-left: 1.25in; mso-add-space: auto; mso-list: l0 level2 lfo1; text-indent: -.25in;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; mso-fareast-font-family: &amp;quot;Courier New&amp;quot;;"&gt;&lt;span style="mso-list: Ignore;"&gt;o&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;After the client install, make sure you updatethe TNSNAMES file. The import process will use this to make the connection tothe oracle server.&lt;/div&gt;&lt;div class="MsoListParagraphCxSpLast" style="margin-left: 0.75in; text-indent: -0.25in;"&gt;&lt;span style="mso-ascii-font-family: Calibri; mso-bidi-font-family: Calibri; mso-fareast-font-family: Calibri; mso-hansi-font-family: Calibri;"&gt;&lt;span style="mso-list: Ignore;"&gt;-&lt;span style="font: 7.0pt &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Install the SQL Server 2008 management toolsincluding the SSIS option (the SSIS part might not be required)&lt;/div&gt;&lt;div class="MsoListParagraphCxSpLast" style="margin-left: 0.75in; text-indent: -0.25in;"&gt; &lt;/div&gt;&lt;div class="MsoListParagraphCxSpLast" style="margin-left: 0.75in; text-indent: -0.25in;"&gt; &lt;/div&gt;&lt;div class="MsoListParagraphCxSpLast" style="margin-left: 0.75in; text-indent: -0.25in;"&gt; &lt;/div&gt;&lt;div class="MsoListParagraphCxSpLast" style="margin-left: 0.75in; text-indent: -0.25in;"&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpLast" style="margin-left: 0.75in; text-indent: -0.25in;"&gt;&lt;img alt="" height="298" src="data:image/png;base64,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" width="400" /&gt;&amp;nbsp;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpLast" style="margin-left: 0.75in; text-indent: -0.25in;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpLast" style="margin-left: 0.75in; text-indent: -0.25in;"&gt;Run the SQL Server 2008R2 import/export tool&lt;/div&gt;&lt;div class="MsoListParagraphCxSpLast" style="margin-left: 0.75in; text-indent: -0.25in;"&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-3907141577900783358?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/3907141577900783358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=3907141577900783358' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/3907141577900783358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/3907141577900783358'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2011/09/notes-on-migrating-oracle-11g-tables-to.html' title='Notes On Migrating Oracle 11g Tables to SQL Server 2008R2'/><author><name>Bryan</name><uri>http://www.blogger.com/profile/04483630913081107737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/-JiqHvXZc_4c/TnJS_6Lg0jI/AAAAAAAAAAY/brk6MXklCO4/s220/2etous46.thm.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-8764620323958140915</id><published>2011-09-15T13:08:00.000-07:00</published><updated>2011-09-15T13:08:37.144-07:00</updated><title type='text'>My New Blogger Account...</title><content type='html'>So ok, I created this blog using one of my old google accounts a long time ago. Later I registered a google apps account and bought a domain name through google apps for it - bryansgeekspeak.com. Google setup all the DNS for me through godaddy just fine ... but I could never get emails working properly. The MX records I tried to register with godaddy would save in their crappy domain management tool, but their DNS records would never reflect those changes. I eventually gave up and decided to transfer the domain to dotster, which hosts all of my other domains.&lt;br /&gt;&lt;br /&gt;What a royal pain.&amp;nbsp; To transfer the domain, I had to jump through a bunch of hoops for google/godaddy to release the domain ... the service to make your contact info private was killing my domain transfer...documentation about that would have been nice google! *shakes a fist!*&lt;br /&gt;&lt;br /&gt;But now it's all done, and I am back to managing DNS on my own server using bind on my linux box.&amp;nbsp; Finally, I have valid MX records for mail through bryansgeekspeak.com :-D&lt;br /&gt;&lt;br /&gt;So now I have moved ownership of this blog to my new google apps account "Bryan" for the domain "bryansgeekspeak.com" and the profile info on the right column here on the blog reflects that.&lt;br /&gt;&lt;br /&gt;With all that garbage out of the way, I'm ready to get back to posting new stuff I've been working on - Like tricks to updating custom SharePoint 2007 masterpage/page layouts so they work with SharePoint 2010's visual upgrade...and maybe something about Google's Fusion Tables too!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-8764620323958140915?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/8764620323958140915/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=8764620323958140915' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/8764620323958140915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/8764620323958140915'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2011/09/my-new-blogger-account.html' title='My New Blogger Account...'/><author><name>Bryan</name><uri>http://www.blogger.com/profile/04483630913081107737</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://4.bp.blogspot.com/-JiqHvXZc_4c/TnJS_6Lg0jI/AAAAAAAAAAY/brk6MXklCO4/s220/2etous46.thm.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-1600283228924627315</id><published>2011-06-30T10:32:00.000-07:00</published><updated>2011-06-30T11:28:59.832-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cloud'/><title type='text'>A Quick Look At Cloud Storage Security</title><content type='html'>I was curious about free cloud services and their security practices with transfering/storing data, so I did some research and figured I'd post it.  All of these services provide a free account with 1 gig or more of online storage.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Dropox (https://www.dropbox.com)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;From the official Dropbox blog.&lt;br /&gt;&lt;div class="sidenote"&gt;&lt;a href="http://blog.dropbox.com/?p=735"&gt;http://blog.dropbox.com/?p=735&lt;/a&gt;&lt;br /&gt;The files you store on Dropbox’s servers are encrypted using an industry standard, AES-256. We manage the encryption keys on our users’ behalf. This encryption protects against a variety of security threats, particularly when your data is at rest.&lt;/div&gt;&lt;br /&gt;All data that goes from your client to the dropbox server is over SSL, which handles encryption during transit (the same stuff that encrypts secure websites).  Files are encrypted on the server using a single key that dropbox employees could use to unencrypt your data. So you need to have a little bit of faith here, that the employees are trustworthy enough to handle your data responsibly.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Ubuntu One (https://one.ubuntu.com)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;From the Ubuntu One website.&lt;br /&gt;&lt;div class="sidenote"&gt;&lt;a href="https://wiki.ubuntu.com/UbuntuOne/FAQ/AreMyFilesStoredOnTheServerEncrypted"&gt;https://wiki.ubuntu.com/UbuntuOne/FAQ/AreMyFilesStoredOnTheServerEncrypted&lt;/a&gt;&lt;br /&gt;Q: Are my files stored on the server encrypted?&lt;br /&gt;A: No. If you are interested in having your files encrypted both on your local machine and in the cloud, you could use Ubuntu's Encrypted Home Directory feature, and only synchronize your $HOME/.Private folder...&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Wuala (http://www.wuala.com)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;From the Wuala website.&lt;br /&gt;&lt;div class="sidenote"&gt;&lt;a href="http://www.wuala.com/en/learn/technology"&gt;http://www.wuala.com/en/learn/technology&lt;/a&gt;&lt;br /&gt;All your files get encrypted on your computer, so that no one - including the employees at Wuala and LaCie - can access your private files. Your password never leaves your computer.&lt;/div&gt;&lt;br /&gt;This sounds like the most secure cloud storage around. Encrypting files on your client before they are transferred to the server (I believe over an encrypted SSL connection) and then stored in fragments across multiple servers.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Google Docs (http://docs.google.com)&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;An explanation from a user (not a google employee) taken from google docs support forum.&lt;br /&gt;&lt;div class="sidenote"&gt;&lt;a href="http://www.google.com/support/forum/p/Google%20Docs/thread?tid=34631f3d6c627514&amp;hl=en"&gt;http://www.google.com/support/forum/p/Google%20Docs/thread?tid=34631f3d6c627514&amp;hl=en&lt;/a&gt;&lt;br /&gt;Google Apps does not encrypt data at-rest.  Instead they are using data sharding with obscured file names/identities.  Basically any one email or document has parts of it on different servers and they are all pulled together when you request the file.  If I was to compromise their server and copy all the data, it is rather unlikely to find a complete file and even less likely to find the file in you are particularly looking for.  Security though obscurity.&lt;/div&gt;&lt;br /&gt;&lt;b&gt;What if I Need Better Control Over Security?&lt;/b&gt;&lt;br /&gt;Even with a service like Ubuntu One where files are not encrypted on the cloud, you can choose to do the file encryption yourself before hand. This way you are the only one who has a key to unlock the data and you can still access the data from the cloud.  Take a look at something like &lt;a href="http://www.truecrypt.org/"&gt;TrueCrypt&lt;/a&gt; for creating encrypted volumes.  &lt;br /&gt;&lt;br /&gt;Unfortunately TrueCrypt is not available for Droid or iOS yet, so you wont be able to open your encrypted volumes from those devices even if your cloud service supports those platforms.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-1600283228924627315?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/1600283228924627315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=1600283228924627315' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/1600283228924627315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/1600283228924627315'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2011/06/quick-look-at-cloud-storage-security.html' title='A Quick Look At Cloud Storage Security'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-4697701472073620998</id><published>2011-06-17T12:42:00.000-07:00</published><updated>2011-07-18T11:26:26.717-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>Web Project Deployment - Deploying Oracle DB Changes Including CLOBs!</title><content type='html'>So in a recent project, I ended up scripting out database changes (data only, no schema changes) from our dev environment to all our other environments for one of our projects.  This is a incremental update, so I want to append my new data to any existing data for the tables I'm working with.&lt;br /&gt;&lt;br /&gt;Without CLOB column types, it would be pretty easy - I could create some pretty standard SQL scripts to run in SQLPlus or SQL Developer on the target database. But this time we had change to CLOB data - some of the data being inserted being over 10,000 characters long. It took me a while to figure out how to make a deployment package, and this is what I came up with: &lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;A set of standard SQL scripts for tables that do not have CLOB columns&lt;/li&gt;&lt;li&gt;Oracle sqlldr scripts for CLOB columns&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Both those things I usually do via the "unload" command in SQL Developer, so I started with the format SQL developer uses and modified the results to get my final deployment package.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Solving the CLOB problem!&lt;/b&gt;&lt;br /&gt;Keep in mind, this may not be the best way to do it (I hope it isnt, cause its painful!) but this was the best reliable way I could find to do the task without writing a custom application to do it.&lt;br /&gt;&lt;br /&gt;So in this case I am stuck using sqlldr to load CLOB data, which unfortunately requires that we have the oracle client installed AND configured to use TNS Names properly. I find that to be a pain, but whatever - it is doable.  Just be sure to use the same oracle client version as your target server oracle version (I ran into the problem of trying to use oracle 10 client tools to import data into oracle 11 - errors everywhere!).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Creating The Deployment Package!&lt;/b&gt;&lt;br /&gt;Once I had all the Oracle client tools installed and configured properly, I ran through a process that looked something like the following to build a deployment package.&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Create SQL scripts for non CLOB tables (used SQL Developer to unload query results). Keep in mind to order the script to run in a way that will work with constraints enabled (I chose not to disable constraints during deployment)&lt;/li&gt;&lt;li&gt;Edit SQL scripts generated in last step. Add "COMMIT;" then "EXIT;" commands at the end of the files in prep for running from the command line.&lt;/li&gt;&lt;li&gt;Create oracle Loader scripts for CLOB tables (again used SQL Developer to unload query results). Again, keep in mind the order in which the loader scripts need to be run along with the SQL scripts created earlier.&lt;/li&gt;&lt;li&gt;Edit Loader control files to APPEND (rather than truncate, so in this case I don't loose existing data in my destination) and fixed table names to be proper case.  Each Loader results set went into its own directory.&lt;/li&gt;&lt;li&gt;Placed all SQL scripts in a deploy directory, added loader directories as sub directories.&lt;/li&gt;&lt;li&gt;Finally, I ended up creating a .bat script to run -all- the deployment scripts, including the SQL scripts. In my case, I need to edit the .bat file to set TNS Names info for whatever environment I want to deploy to.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;My final database deployment package for this release looks something like this:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-oRrD2wqI2lM/Tfuo4vTg6DI/AAAAAAAAA4M/6Uh1Z0Hlles/s1600/DeploymentPackage.JPG" imageanchor="1" style=""&gt;&lt;img border="0" height="234" width="320" src="http://4.bp.blogspot.com/-oRrD2wqI2lM/Tfuo4vTg6DI/AAAAAAAAA4M/6Uh1Z0Hlles/s320/DeploymentPackage.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;From here, I can then edit one .bat file to change my destination database settings, and I only need to execute that file to perform the DB deployment.&lt;br /&gt;&lt;br /&gt;Going through this process is a lot of extra up front work but it should result in a much more simplified, repeatable and reliable deployment process.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-4697701472073620998?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/4697701472073620998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=4697701472073620998' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/4697701472073620998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/4697701472073620998'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2011/06/web-project-deployment-deploying-oracle.html' title='Web Project Deployment - Deploying Oracle DB Changes Including CLOBs!'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-oRrD2wqI2lM/Tfuo4vTg6DI/AAAAAAAAA4M/6Uh1Z0Hlles/s72-c/DeploymentPackage.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-6676322987020239172</id><published>2011-06-08T17:12:00.000-07:00</published><updated>2011-06-09T11:08:46.149-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>Exporting Oracle Table Data Using SQL Developer and SQLLDR</title><content type='html'>Following up on my last post about trying to &lt;a href="http://www.bryansgeekspeak.com/2011/06/exporting-table-data-using-sql.html"&gt;export table data from oracle as SQL insert commands&lt;/a&gt;, I've found a way to "Unload" query results in a format that works with large CLOB column data - the "Loader" format.&lt;br /&gt;&lt;br /&gt;Unfortunately, you cant import loader format data using SQL Developer ... just another odd quirk of Oracle that drives me nutty.  To import the loader results, you have to use the command line tool "sqlldr", which should be installed as part of the oracle client.&lt;br /&gt;&lt;br /&gt;So lets take a look at exporting the Category table data again, this time using the Loader method.&lt;br /&gt;&lt;br /&gt;&lt;b&gt; Unloading Results into Loader Format &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;1) Launch SQL Developer and open a new worksheet connected to the database you want to use as the source.&lt;br /&gt;&lt;br /&gt;2) Build a SQL statement including all the columns you want to export and execute it.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-pmrf9j82CjM/TfAJA6SlFhI/AAAAAAAAA3c/si6AogNyou8/s1600/select.jpg" imageanchor="1" style=""&gt;&lt;img border="0" height="134" width="320" src="http://3.bp.blogspot.com/-pmrf9j82CjM/TfAJA6SlFhI/AAAAAAAAA3c/si6AogNyou8/s320/select.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;3) Right click on the results pane and choose "Unload" from the right click menu to launch the "Unload Wizard".&lt;br /&gt;&lt;br /&gt;4) On the first page of the Unload Wizard, set "Format:" to "loader" and change the "Table Name:" value to match the name of the table you are exporting. The table name must be in ALL CAPS. Keep the "Save As" option set to "Single File", then change the path to point to a new empty folder on your system (this process may create more than one file).  In this case, I named the file "category.ldr". Click "Next &gt;", Then click "Finish".&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-rylU8K3qtXk/TfAOI0OA7fI/AAAAAAAAA3s/OcB2jaU4gSE/s1600/UnloadLoader1.jpg" imageanchor="1" style=""&gt;&lt;img border="0" height="218" width="320" src="http://2.bp.blogspot.com/-rylU8K3qtXk/TfAOI0OA7fI/AAAAAAAAA3s/OcB2jaU4gSE/s320/UnloadLoader1.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-vBViIHnK7Hk/TfAOjIc0OqI/AAAAAAAAA38/CXHq-x6fi74/s1600/UnloadLoader2.jpg" imageanchor="1" style=""&gt;&lt;img border="0" height="218" width="320" src="http://3.bp.blogspot.com/-vBViIHnK7Hk/TfAOjIc0OqI/AAAAAAAAA38/CXHq-x6fi74/s320/UnloadLoader2.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;5) Browse to the path you set in step 4 and you should see the loader control file (the filename you set in step 4) and possibly a bunch of data files.  Open the control file with your favorite text editor and modify as needed.&lt;br /&gt;&lt;br /&gt;&lt;div class="sidenote"&gt;By default the Unload to loader format process creates a control file with the TRUNCATE keyword.  This tells the loader to DELETE all rows before adding the loader data.  If you want to keep existing data in the table, use the APPEND keyword instead.&lt;br /&gt;&lt;br /&gt;See the SQLLDR documentation on &lt;a href="http://download.oracle.com/docs/cd/B10501_01/server.920/a96652/ch05.htm#1006863"&gt;Loading Data into Nonempty Tables&lt;/a&gt; for more info.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;6) Open a command prompt and change the working directory to be the path you set in step #4, so you are in the same directory as the loader files.&lt;br /&gt;&lt;br /&gt;7) Assuming you have the oracle client installed on your box, run the sqlldr command line utility to import the data back into oracle.  &lt;br /&gt;&lt;br /&gt;&lt;div class="sidenote"&gt;NOTE: Unlike SQL Developer, the sqlldr command uses your TNS Names file to make the database connection.&lt;/div&gt;&lt;br /&gt;The sqlldr command format is:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;sqlldr &amp;lt;username&amp;gt;/&amp;lt;password&amp;gt;@&amp;lt;TNSName&amp;gt; control=&amp;lt;ControlFile&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-x0CT-ZmYd2o/TfANs5V3ZTI/AAAAAAAAA3k/v0yZ4HiExXo/s1600/sqlldr.jpg" imageanchor="1" style=""&gt;&lt;img border="0" height="200" width="320" src="http://1.bp.blogspot.com/-x0CT-ZmYd2o/TfANs5V3ZTI/AAAAAAAAA3k/v0yZ4HiExXo/s320/sqlldr.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt; Loader Results &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;After loading the data back in via the sqlldr command, we can see all the data made it in tact, including the huge CLOB data column (14000 characters long!). So, even though its a little bit of a pain to go outside SQL developer for the import process, this appears to be the better approach to exporting and importing table data compared to the "insert" option in the Unload Wizard.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-9RGBOsIOh9Q/TfAPwa9yfWI/AAAAAAAAA4E/XoA67W1f8i4/s1600/LoaderResults.jpg" imageanchor="1" style=""&gt;&lt;img border="0" height="182" width="320" src="http://2.bp.blogspot.com/-9RGBOsIOh9Q/TfAPwa9yfWI/AAAAAAAAA4E/XoA67W1f8i4/s320/LoaderResults.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-6676322987020239172?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/6676322987020239172/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=6676322987020239172' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/6676322987020239172'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/6676322987020239172'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2011/06/exporting-oracle-table-data-using-sql.html' title='Exporting Oracle Table Data Using SQL Developer and SQLLDR'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-pmrf9j82CjM/TfAJA6SlFhI/AAAAAAAAA3c/si6AogNyou8/s72-c/select.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-8421858280727021783</id><published>2011-06-08T15:51:00.000-07:00</published><updated>2011-06-08T17:34:33.447-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>Exporting Oracle Table Data Using SQL Developer - SQL Insert Results</title><content type='html'>I've been trying to figure out the best way to export data from a query result as INSERT statements using the SQL Developer gui (I'm on version 3.0.03).  Here's what I've got so far:&lt;br /&gt;&lt;br /&gt;&lt;b&gt; Unloading Results To Insert Statements &lt;/b&gt;&lt;br /&gt;1) Launch SQL Developer and open a new worksheet connected to the database you want to use as the source.&lt;br /&gt;&lt;br /&gt;2) Build a SQL statement including all the columns you want to export and execute it.&lt;br /&gt;&lt;br /&gt;&lt;div class="sidenote"&gt;NOTE: In most cases you can use "SELECT * FROM MyTable" but if you need to do any special character escaping you would do that here in the select statement. For example, the Unloading process escapes single quotes for varchar2 columns, but not CLOB columns.  If you want to unload a CLOB (with less than 4000 characters) and use it in an insert statement, you need to escape the single quotes with something like "REPLACE(MyClobCol,'''','''''') AS MyClobCol".  Clobs over 4000 characters need to be handled using bind params ... something for a later discussion!&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-NukI5TkoOg4/Te_1nFy8HVI/AAAAAAAAA2k/spgmcvDx5RQ/s1600/Select.JPG" imageanchor="1" style=""&gt;&lt;img border="0" height="196" width="320" src="http://2.bp.blogspot.com/-NukI5TkoOg4/Te_1nFy8HVI/AAAAAAAAA2k/spgmcvDx5RQ/s320/Select.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;3) Right click on the results pane and choose "Unload" from the right click menu to launch the "Unload Wizard". (and yes, I agree, unload is a horrible name for an export tool!)&lt;br /&gt;&lt;br /&gt;4) On the first page of the Unload Wizard, set "Format:" to "Insert" and change the "Table Name:" value to match the name of the table you are exporting.  The table name must be in ALL CAPS (I'll explain why when we look at the Unload results). Change the "Save As" value to "Worksheet" and click "Next &gt;", Then click "Finish".&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-pyFQCiLpUuM/Te_2RBIeLJI/AAAAAAAAA2s/vfBCeqYemvg/s1600/Unload.JPG" imageanchor="1" style=""&gt;&lt;img border="0" height="218" width="320" src="http://4.bp.blogspot.com/-pyFQCiLpUuM/Te_2RBIeLJI/AAAAAAAAA2s/vfBCeqYemvg/s320/Unload.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/--Bpb3bSTddo/Te_2VElbF2I/AAAAAAAAA20/ElyPOCt_Vs4/s1600/UnloadFinish.JPG" imageanchor="1" style=""&gt;&lt;img border="0" height="218" width="320" src="http://1.bp.blogspot.com/--Bpb3bSTddo/Te_2VElbF2I/AAAAAAAAA20/ElyPOCt_Vs4/s320/UnloadFinish.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;5)The Unload results appear in a new worksheet for you to review.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Review of Unload Results&lt;/b&gt;&lt;br /&gt;If you set the table name in the Unload Wizard, you'll see something similar to the following, which is what you want. &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-qrSzvh5ZTck/Te_2uNSl5OI/AAAAAAAAA28/hfUr38Yi5Yg/s1600/UnloadResults.JPG" imageanchor="1" style=""&gt;&lt;img border="0" height="56" width="320" src="http://3.bp.blogspot.com/-qrSzvh5ZTck/Te_2uNSl5OI/AAAAAAAAA28/hfUr38Yi5Yg/s320/UnloadResults.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;We can test out our results by clearing out our test table and running this script to re-create our records.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-P1YGT_nYxBQ/Te_5iasSM7I/AAAAAAAAA3M/ej3_Y99pG0M/s1600/UnloadResultTest1.JPG" imageanchor="1" style=""&gt;&lt;img border="0" height="226" width="320" src="http://1.bp.blogspot.com/-P1YGT_nYxBQ/Te_5iasSM7I/AAAAAAAAA3M/ej3_Y99pG0M/s320/UnloadResultTest1.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-VC_4cMjKc5Y/Te_5mA2UEyI/AAAAAAAAA3U/k51wij2V-L4/s1600/UnloadResultTest2.JPG" imageanchor="1" style=""&gt;&lt;img border="0" height="114" width="320" src="http://2.bp.blogspot.com/-VC_4cMjKc5Y/Te_5mA2UEyI/AAAAAAAAA3U/k51wij2V-L4/s320/UnloadResultTest2.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;So in most cases this is all you need to do to move select rows of data from a given table on one database server to another database server (with the same schema on the destination database server, etc).&lt;br /&gt;&lt;br /&gt;&lt;b&gt; Unloading Gotcha - Using Mixed Case Table Name in Unload Wizard &lt;/b&gt;&lt;br /&gt;If you unintentionally typed the table name in lower or mixed case in the Unload Wizard, you'll probably end up with insert statements that will throw errors.  &lt;br /&gt;&lt;br /&gt;Check this out, the unload process double quotes the table names in the results - which means now you are using case sensitive table name matching. By default, oracle table names are stored in all uppercase format, so you'll throw a "table or view does not exist" error.  Its just another one of those strange Oracle quirks that had me going crazy for a while.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Mh5vTTdfHcM/Te_4DEv0xBI/AAAAAAAAA3E/xEYdbmFAtPA/s1600/UnloadBadResults.JPG" imageanchor="1" style=""&gt;&lt;img border="0" height="233" width="320" src="http://2.bp.blogspot.com/-Mh5vTTdfHcM/Te_4DEv0xBI/AAAAAAAAA3E/xEYdbmFAtPA/s320/UnloadBadResults.JPG" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt; Unloading Gotcha - CLOB data larger than 4000 characters &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Yeah. In this case, straight SQL wont work for you. The only way I know to move clob data using SQL is via a bind param, which means you need to manually fix the Unloading results to do this.  Its a pain. I don't like it.  When you run into this problem, you should probably start looking at alternatives to using the Unload Wizard ...&lt;br /&gt;&lt;br /&gt;... try the "Loader" format as described in my next post &lt;a href="http://www.bryansgeekspeak.com/2011/06/exporting-oracle-table-data-using-sql.html"&gt;Exporting Oracle Table Data Using SQL Developer and SQLLDR&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-8421858280727021783?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/8421858280727021783/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=8421858280727021783' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/8421858280727021783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/8421858280727021783'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2011/06/exporting-table-data-using-sql.html' title='Exporting Oracle Table Data Using SQL Developer - SQL Insert Results'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-NukI5TkoOg4/Te_1nFy8HVI/AAAAAAAAA2k/spgmcvDx5RQ/s72-c/Select.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-4287940938776772059</id><published>2011-06-08T12:53:00.000-07:00</published><updated>2011-06-08T17:37:03.144-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Databases'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>Web Application Deployment - Deploying Database Changes</title><content type='html'>&lt;div class="sidenote"&gt;this article is another work in progress.  Comments and feedback are always welcome.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;This question keeps coming up at work over and over again.  So here we go - deploying database changes 101. Buckle down and do the upfront work, look sexy and awesome when it comes time for deployment &gt;_&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Synopsis&lt;/b&gt;&lt;br /&gt;Here it is, this whole post summed up into one key idea:&lt;br /&gt;&lt;br /&gt;&lt;div class="sidenote"&gt;Always create SQL scripts (insert/update/alter commands) to implement any and all database changes! Add those SQL scripts to your deployment package!&lt;/div&gt;&lt;br /&gt;Curious as to what that means? Not sure if you know how to create SQL scripts for deployment? Looking for some tips and tricks on how to do a better job of that? OK! Lets dive in!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Example SQL Script for INITIAL Deployment of a Web Application&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Here is an example of a single table "Categories" and its data.  Keep in mind that this script is designed to be used only for the initial web application deployment.&lt;br /&gt;&lt;br /&gt;&lt;div class="sidenote"&gt;NOTE: I'm following the &lt;a href="http://www.bryansgeekspeak.com/2009/08/bryans-oracle-db-design-style-standard.html"&gt;Oracle DB Design Style Guide&lt;/a&gt; I wrote up a while back as a guide for my SQL scripts here.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="code"&gt;--- Create the Category table&lt;br /&gt;CREATE TABLE Category (&lt;br /&gt;Id    INT NOT NULL,&lt;br /&gt;Name  VARCHAR2(200) NULL,&lt;br /&gt;Description  VARCHAR2(4000) NULL&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;--- Primary Key Constraint&lt;br /&gt;CREATE INDEX CategoryIdIdx ON Category(Id);&lt;br /&gt;ALTER TABLE Category ADD CONSTRAINT CategoryIdPk PRIMARY KEY (Id);&lt;br /&gt;&lt;br /&gt;COMMENT ON TABLE Category IS 'A list of Categories for use in a TODO list.';&lt;br /&gt;COMMENT ON COLUMN Category.Id IS 'Primary Key';&lt;br /&gt;COMMENT ON COLUMN Category.Name IS 'A common name for this category.';&lt;br /&gt;COMMENT ON COLUMN Category.Description IS 'A longer description of this category.';&lt;br /&gt;&lt;br /&gt;--- Create the oracle sequence for the primary key&lt;br /&gt;CREATE SEQUENCE CategoryIdSeq INCREMENT BY 1 NOMAXVALUE MINVALUE 1 NOCYCLE NOCACHE NOORDER;&lt;br /&gt;&lt;br /&gt;--- Create the oracle trigger for populating the primary key&lt;br /&gt;CREATE OR REPLACE TRIGGER SetCategoryIdPk&lt;br /&gt;BEFORE INSERT ON Category REFERENCING OLD AS OLD NEW AS NEW FOR EACH ROW  &lt;br /&gt;BEGIN  &lt;br /&gt;IF  :new.Id IS NULL THEN  &lt;br /&gt;SELECT CategoryIdSeq.Nextval INTO :new.Id FROM dual;  &lt;br /&gt;END IF;  &lt;br /&gt;END; &lt;br /&gt;/&lt;br /&gt;&lt;br /&gt;--- insert initial categories&lt;br /&gt;INSERT INTO Category (Name, Description)VALUES('Groceries','My grocery list items');&lt;br /&gt;INSERT INTO Category (Name, Description)VALUES('Work','My work related items');&lt;br /&gt;COMMIT;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;So what does this deployment script do?&lt;br /&gt;1. Creates a table for us to store categories&lt;br /&gt;2. Creates a primary key column&lt;br /&gt;3. Sets comments on the table and the columns (Comments?! Madness!!)&lt;br /&gt;4. Creates a sequence to drive the primary key value (oracle specific goo)&lt;br /&gt;5. Creates a trigger to populate the primary key value based on the sequence&lt;br /&gt;6. inserts 2 new categories: Groceries and Work.&lt;br /&gt;&lt;br /&gt;Basically, it does literally everything that needs to be done to get the Category table setup in the database for my initial web application release to work.&lt;br /&gt;&lt;br /&gt;So now, every time we deploy our web application to a new environment, we can run this SQL script to guarantee that a category table is created exactly how we expect it to be, along with its initial data.&lt;br /&gt;&lt;br /&gt;&lt;div class="sidenote"&gt;&lt;b&gt;Cant I just reverse engineer the database when I'm done my project?&lt;/b&gt;&lt;br /&gt;Yes! ... Maybe! &gt;_&gt; just be careful that you don't reverse engineer throw-away testing data. I've seen that happen a lot just because people don't like spending the up front time building SQL scripts. &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Example SQL Script for Deployment of a Web Application Update&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;After deploying our initial version of the web application, we start working on the next version which requires updates to the database. New requirements state that the categories now need to be sorted in an arbitrary order -and- we have additional categories being added to this release. Awesome!  Lets script out the updates to our category table so that again we will have a reliable, repeatable process for deploying our changes.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;--- Give our table a SortOrder column&lt;br /&gt;ALTER TABLE Category ADD SortOrder INT NULL;&lt;br /&gt;COMMENT ON COLUMN Category.SortOrder IS 'The default order in which categories should be displayed to the user.';&lt;br /&gt;&lt;br /&gt;--- Update existing data with sort order values&lt;br /&gt;UPDATE Category SET SortOrder = 1 WHERE Name = 'Work';&lt;br /&gt;UPDATE Category SET SortOrder = 2 WHERE Name = 'Groceries';&lt;br /&gt;&lt;br /&gt;--- Insert new data, include sort order values&lt;br /&gt;INSERT INTO Category (Name, Description,SortOrder)VALUES('Errands','Errand that I need to do',3);&lt;br /&gt;COMMIT;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Cool? So this SQL script, to be used for the next deployment of this application, is completely different from the initial deployment SQL Script - We only care about things that changed from the initial deployment script. This new SQL script should be bundled with the deployment package for this version of the web application.  &lt;br /&gt;&lt;br /&gt;Just to review, These are the changes we just made in english:&lt;br /&gt;&lt;br /&gt;1. Gave the Category table a new SortOrder column&lt;br /&gt;2. Updated our existing records in the Category table with a SortOrder value&lt;br /&gt;3. Inserted a new category, including its SortOrder value&lt;br /&gt;&lt;br /&gt;&lt;b&gt;And the point of all this is...?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Hopefully it's obvious to you at this point - It's a good practice to Use SQL scripts to deploy ALL database changes for your application.  The reward for your up front effort is a repeatable and reliable deployment script.  An added bonus - you even can hand off your SQL scripts to a database admin to deploy remotely! (its a good practice to do that anyway!)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-4287940938776772059?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/4287940938776772059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=4287940938776772059' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/4287940938776772059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/4287940938776772059'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2011/06/web-application-deployment-deploying.html' title='Web Application Deployment - Deploying Database Changes'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-4085575552031582180</id><published>2011-05-19T12:45:00.000-07:00</published><updated>2011-05-19T12:53:08.822-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='K2'/><title type='text'>K2 BlackPearl 4.5 Server Event Code Snips</title><content type='html'>OK - I'm still new to K2, and slowly figuring out how to work with K2 in C#.  This post will be my little scrapbook of helpful code chunks for later use.&lt;br /&gt;&lt;br /&gt;&lt;hr style="width:50%" /&gt;&lt;br /&gt;&lt;b&gt;Get count of a specific user's worklist items for a given process - within a K2 Server Code event.&lt;/b&gt;&lt;br /&gt;Use a new workflow client connection to the server to do all the work.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;// create a new workflow client connection&lt;br /&gt;using (Connection c = new Connection())&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Using ConnectionSetup as connection string&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ConnectionSetup cs = new ConnectionSetup();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// From a server code event in a K2 process we can use K2 environment variables for connection strings&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cs.ConnectionString = K2.StringTable[&amp;quot;Workflow Server&amp;quot;].ToString();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Open server connection using ConnectionSetup&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;c.Open(cs);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Impersonate Bryan so we can get at his worklist &amp;gt;_&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;c.ImpersonateUser(@&amp;quot;BryansDomain\Bryan&amp;quot;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Build worklist filter criteria&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// We only want to return work items that match a given process&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;WorklistCriteria wc = new WorklistCriteria();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;wc.Platform = &amp;quot;ASP&amp;quot;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;wc.AddFilterField(SourceCode.Workflow.Client.WCField.ProcessName, WCCompare.Equal, &amp;quot;BryansTestProcess&amp;quot;);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// dump resulting count of Bryans worklist items for the BryanTestProcess to a K2 Data Field&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int itemCount = c.OpenWorklist(wc).TotalCount;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;K2.ProcessInstance.DataFields[&amp;quot;BryansWorklistCount&amp;quot;].Value = itemCount;&lt;br /&gt;}&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Get distinct count of process instances for a given process pending a specific activity - within a K2 Server Code event.&lt;/b&gt;&lt;br /&gt;Use a K2 SmartObject to do all the work.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;br /&gt;// Use SmartObjectClientServer for accessing SmartObjects&lt;br /&gt;SmartObjectClientServer sos = new SmartObjectClientServer();&lt;br /&gt;&lt;br /&gt;// Prep the connection&lt;br /&gt;sos.CreateConnection();&lt;br /&gt;&lt;br /&gt;// From within a K2 process Server Code event, use K2 environment variables for connection strings&lt;br /&gt;sos.Connection.Open(K2.StringTable[&amp;quot;SmartObject Server&amp;quot;]);&lt;br /&gt;&lt;br /&gt;// Get an &amp;quot;Activity Instance Destination&amp;quot; SmartObject (an OotB K2 SmartObject)&lt;br /&gt;SmartObject so = sos.GetSmartObject(&amp;quot;Activity_Instance_Destination&amp;quot;);&lt;br /&gt;&lt;br /&gt;// Tell the SmartObject to return a list of results&lt;br /&gt;so.MethodToExecute = &amp;quot;List&amp;quot;;&lt;br /&gt;&lt;br /&gt;// Set filter for results - return active items pending &amp;quot;Bryans First Activity&amp;quot; for &amp;quot;BryansTestProcess&amp;quot;&lt;br /&gt;so.Properties[&amp;quot;ActivityName&amp;quot;].Value = &amp;quot;Bryans First Activity&amp;quot;;&lt;br /&gt;so.Properties[&amp;quot;ProcessName&amp;quot;].Value = &amp;quot;BryansTestProcess&amp;quot;;&lt;br /&gt;so.Properties[&amp;quot;Status&amp;quot;].Value = &amp;quot;Active&amp;quot;;&lt;br /&gt;&lt;br /&gt;// Execute - return the results as a DataTable&lt;br /&gt;DataTable dt = sos.ExecuteListDataTable(so);&lt;br /&gt;&lt;br /&gt;// If you use groups for destinations by using advanced mode to split groups to users...&lt;br /&gt;// you can get duplicate Process Instance IDs - one for every user in the group&lt;br /&gt;// to get a distinct list of process instances, use a datatable view to return distinct results&lt;br /&gt;DataTable DistinctDT = dt.DefaultView.ToTable(true, &amp;quot;Process Instance ID&amp;quot;);&lt;br /&gt;&lt;br /&gt;// copy the resulting count to a K2 process data field&lt;br /&gt;K2.ProcessInstance.DataFields[&amp;quot;WorklistCount&amp;quot;].Value = DistinctDT.Rows.Count;&lt;br /&gt;&lt;br /&gt;// and do cleanup&lt;br /&gt;sos.Connection.Close()&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-4085575552031582180?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/4085575552031582180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=4085575552031582180' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/4085575552031582180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/4085575552031582180'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2011/05/k2-blackpearl-45-server-event-code.html' title='K2 BlackPearl 4.5 Server Event Code Snips'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-4701277518192191490</id><published>2011-05-05T10:00:00.000-07:00</published><updated>2011-05-05T10:00:51.412-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>Dear Microsoft ASP.NET Team: Thank you for Razor!</title><content type='html'>Since day one of using traditional ASP.NET to work with web applications, I've hated it &gt;_&gt; The ASP page life cycle just feels like a huge pain to me. The methodology for page processing that they invented is so wacky compared to every other web development platform I've ever used. I cried and gnashed my teeth...and just lived with it for a while.&lt;br /&gt;&lt;br /&gt;Then, from out of nowhere, they released the MVC toolkit for ASP.NET - and I loved it. At least compared to the traditional ASP.NET page life cycle.  It still seemed a bit rough when I looked at MVC2 a while back, and I never really found a project to test it out on. I ended up working more on workflow projects in Lombardi Teamworks until recently, so my research into MVC went on the back burner for while.&lt;br /&gt;&lt;br /&gt;Now that I'm about to dive into a new ASP.NET project, I've been looking at MVC3 and the new Razor syntax - wow! Its like they actually realized that just about everything in traditional ASP.NET page development is garbage and they decided to build MVC3 and Razor to sit over top of the garbage framework and actually act like a real web development toolkit! Yay! (I know, I know, I'm being too harsh, but thats how I truly feel about it! xD )&lt;br /&gt;&lt;br /&gt;Whatever the reasons were for making the move, I thank you Microsoft ASP.NET development team. You've made me very happy by giving me a straight forward development option. Now its time to explore the guts of how it works, and figure out how to hook into the datamodel from razor :D&lt;br /&gt;&lt;br /&gt;For some awesome intro and tutorials for programming in Razor with ASP.NET 4:&lt;br /&gt;&lt;a href="http://www.asp.net/web-pages"&gt;http://www.asp.net/web-pages&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-4701277518192191490?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/4701277518192191490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=4701277518192191490' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/4701277518192191490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/4701277518192191490'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2011/05/dear-microsoft-aspnet-team-thank-you.html' title='Dear Microsoft ASP.NET Team: Thank you for Razor!'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-2593735672608698465</id><published>2011-04-20T10:51:00.000-07:00</published><updated>2011-04-20T10:51:19.907-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><title type='text'>IIS 6.0 Default Document Not Working After .NET Framework 4.0 Install/Update</title><content type='html'>We have seen this problem happen on a windows 2003R2 server running IIS 6.0 with SiteMinder enabled (an ISAPI filter on a web site). In our last round of server patching, after the server was rebooted, the default documents for all our sites no longer worked. All requests that would return the default document (http://mysite/test/) would instead return a 404 error.  In addition to the 404 we noticed the url showing in the location bar of the browser would contain "/eurl.axd/GUID" somewhere in the string.  We could still go directly to a page in the browser (http://mysite/test/default.aspx) and the page would load properly.&lt;br /&gt;&lt;br /&gt;Google found us an article that identifies the problem in detail and explains how to apply a fix for it:&lt;br /&gt;&lt;a href="http://blogs.msdn.com/b/tmarq/archive/2010/06/18/how-to-disable-the-asp-net-v4-0-extensionless-url-feature-on-iis-6-0.aspx"&gt;http://blogs.msdn.com/b/tmarq/archive/2010/06/18/how-to-disable-the-asp-net-v4-0-extensionless-url-feature-on-iis-6-0.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Just add a DWORD registry key "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\4.0.30319.0\EnableExtensionlessUrls" with a value of "0" then restart IIS to fix the issue.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-2593735672608698465?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/2593735672608698465/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=2593735672608698465' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/2593735672608698465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/2593735672608698465'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2011/04/iis-60-default-document-not-working.html' title='IIS 6.0 Default Document Not Working After .NET Framework 4.0 Install/Update'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-659000651177738480</id><published>2011-04-15T11:34:00.000-07:00</published><updated>2011-04-15T11:34:32.072-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HTML5'/><title type='text'>Mobile Web Application Frameworks</title><content type='html'>I started looking into ways to build mobile web apps for some of my work applications and found a ton of mobile web app frameworks.  Most of them seem to be HTML5 with AJAX frameworks, which works great for me as a web app dev. The last thing I want to do is manage the whole compile and submit to device vendor for review lifecycle *shudder*&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://jquerymobile.com/" alt="jQuery Mobile" title="jQuery Mobile"&gt;jQuery Mobile&lt;/a&gt; (for iOS, android, windows mobile, etc)&lt;/li&gt;&lt;li&gt;&lt;a href="http://jqtouch.com/" alt="jQTouch" title="jQTouch"&gt;jQTouch&lt;/a&gt; (for iOS)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.phonegap.com/" alt="PhoneGap" title="PhoneGap"&gt;PhoneGap&lt;/a&gt;(Complied for specific device - not a web app tookit)&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-659000651177738480?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/659000651177738480/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=659000651177738480' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/659000651177738480'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/659000651177738480'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2011/04/mobile-web-application-frameworks.html' title='Mobile Web Application Frameworks'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-7051902739319672571</id><published>2011-03-04T15:24:00.000-08:00</published><updated>2011-03-15T11:38:37.747-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TFS 2010'/><title type='text'>VS2010 deployments using TFS2010 Build Server</title><content type='html'>&lt;div class="sidenote"&gt;Placeholder for TFS2010 Build notes&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;My TFS2010 Build Server Config&lt;/H2&gt;&lt;ul&gt;&lt;li&gt;Windows Server 2008R2 x64&lt;/li&gt;&lt;li&gt;Installed Application Server role, including .NET 3.5.1 and .NET 4&lt;/li&gt;&lt;li&gt;Installed TFS2010 Controller service and 1 Build Agent Service&lt;/li&gt;&lt;li&gt;Configured TFS Controller service to run under custom domain account, no special privileges assigned in advance ([domain]\TFSBuildSVC)&lt;/li&gt;&lt;li&gt;Installed VisualStudio 2010 Ultimate (with C#, Web Developer and SharePoint tools)&lt;/li&gt;&lt;li&gt;Put Oracle.DataAccess.dll (2.112.1.0) into GAC to support oracle connections (used in our web projects)&lt;/li&gt;&lt;li&gt;Installed SharePoint 2010 resources for building SharePoint 2010 projects in TFS2010 (&lt;a href="http://msdn.microsoft.com/en-us/library/ff622991.aspx"&gt;http://msdn.microsoft.com/en-us/library/ff622991.aspx&lt;/a&gt;). I used the powershell script provided by microsoft to copy over/setup the TFS server (&lt;a href="http://blogs.msdn.com/b/vssharepointtoolsblog/archive/2010/04/14/building-visual-studio-sharepoint-projects-using-team-foundation-build.aspx"&gt;http://blogs.msdn.com/b/vssharepointtoolsblog/archive/2010/04/14/building-visual-studio-sharepoint-projects-using-team-foundation-build.aspx&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;Installed &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=d2928bc1-f48c-4e95-a064-2a455a22c8f6&amp;displaylang=en"&gt;ASP.NET MVC 3 RTM&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h2&gt;Enable web.config Transforms for TFS 2010 Builds&lt;/H2&gt;&lt;p&gt;Found this solution on &lt;a href="http://kjdaly.com/Blog/Details/5"&gt;Kevin Daly's Blog&lt;/a&gt;. Unfortunately it involves editing the project/solution files to make it work.&lt;/p&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Make a master list of build targets for the projects in your solution. Assuming all build targets will be used in at least one web.config transform, you'll need to keep track of them for use later in the TFS build definition.&lt;/li&gt;&lt;li&gt;In your TFS build definition, go to the Process section and add the build configurations from step 1 to the "Items to build-&gt;Configurations to Build" section. Be sure to define the configurations exactly as you have then in your solution.&lt;/li&gt;&lt;li&gt;In the solution explorer, unload the project you want to add the transform to, then right click the project name and edit the project file.  Add the following XML chunk just before the last &amp;lt;/Project&amp;gt; tag:&lt;br /&gt;&lt;div class="code"&gt;&amp;lt;Target Name=&amp;quot;AfterBuild&amp;quot; Condition=&amp;quot;$(IsAutoBuild)=='True'&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;ItemGroup&amp;gt;&lt;br /&gt;&amp;lt;DeleteAfterBuild Include=&amp;quot;$(WebProjectOutputDir)\Web.*.config&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;/ItemGroup&amp;gt;&lt;br /&gt;&amp;lt;TransformXml Source=&amp;quot;Web.config&amp;quot; Transform=&amp;quot;$(ProjectConfigTransformFileName)&amp;quot; Destination=&amp;quot;$(WebProjectOutputDir)\Web.config&amp;quot;/&amp;gt;&lt;br /&gt;&amp;lt;Delete Files=&amp;quot;@(DeleteAfterBuild)&amp;quot; /&amp;gt;&lt;br /&gt;&amp;lt;/Target&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;Edit the TFS build definition again. In the "process" section, go to "Advanced-&gt;MSBuild Arguments" and add the following parameter&lt;br /&gt;&lt;div class="code"&gt;/p:IsAutoBuild="True"&lt;br /&gt;&lt;/div&gt;&lt;/ol&gt;&lt;p&gt;That should do the trick.  Run the build and if it succeeds, open the drop folder and browse into the "_PublishedWebsites" folder. Find your project and check the web.config to confirm it produced the right results.&lt;/p&gt;&lt;h2&gt;Create Web Deploy Package with TFS&lt;/H2&gt;&lt;p&gt;To create a Web Deploy package for your project in the drop folder, you need to throw a few more MSBuild parameters into the TFS build definition.&lt;/p&gt;&lt;div class="code"&gt;/P:CreatePackageOnPublish=true /P:DeployOnBuild=true &lt;/div&gt;&lt;p&gt;These switches just create the package on the filesystem.  Also, your project "Package/Publish Web" settings should be configured in VS2010 (usually the defaults are fine).&lt;/p&gt;&lt;hr&gt;&lt;h2&gt;Build Server Errors&lt;/H2&gt;&lt;ul&gt;&lt;li&gt;&lt;div class="code"&gt;... The imported project "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" was not found. Confirm that the path in the &amp;lt;Import&amp;gt; declaration is correct, and that the file exists on disk.&lt;/div&gt;This error means that the build box is missing some files required to perform the project MSBuild.  In this case, I was trying to perform a web.config xml transform for a VisualStudio 2010 web application project. I was able to fix the issue by installing VS2010 on the build box. I'm guessing its a safe bet to install your typical workstation development tools on the build box to make sure that all your build requirements are met.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;h2&gt;Resources&lt;/H2&gt;&lt;ul&gt;&lt;li&gt;Web deployment switches for TFS2010 builds: &lt;br /&gt;&lt;a href="http://weblogs.asp.net/jdanforth/archive/2010/04/24/package-and-publish-web-sites-with-tfs-2010-build-server.aspx"&gt;http://weblogs.asp.net/jdanforth/archive/2010/04/24/package-and-publish-web-sites-with-tfs-2010-build-server.aspx&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ff622991.aspx"&gt;How to build SharePoint Projects with TFS Team Build&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://nickhoggard.wordpress.com/tag/continuous-integration/"&gt;TFS Web Deployment Packages (and other info about continuous integration)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;More TFS2010 MSBuild deployment switches: &lt;a href="http://vishaljoshi.blogspot.com/2010/11/team-build-web-deployment-web-deploy-vs.html"&gt;Team Build + Web Deployment + web Deploy + VS2010 = Goodness&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-7051902739319672571?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/7051902739319672571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=7051902739319672571' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/7051902739319672571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/7051902739319672571'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2011/03/vs2010-deployments-using-tfs2010-build.html' title='VS2010 deployments using TFS2010 Build Server'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-7563873243626047568</id><published>2011-02-21T11:07:00.000-08:00</published><updated>2011-02-21T11:07:03.418-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Kerberos'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Teamworks'/><title type='text'>SharePoint 2010 on Windows Server 2008 R2 with Kerberos Troubleshooting</title><content type='html'>&lt;div class="sidenote"&gt;re-posted again with additional resource links at the botttom.&lt;/div&gt;&lt;br /&gt;Wow.  Going through some massive headaches getting kerberos setup in SharePoint 2010 on Windows Server 2008 R2.  I was following my old guide from SharePoint 2007 (&lt;a href="http://www.bryansgeekspeak.com/2010/01/enabling-kerberos-in-windows-domain-for.html"&gt;http://www.bryansgeekspeak.com/2010/01/enabling-kerberos-in-windows-domain-for.html&lt;/a&gt;) until I realized all the IIS 7.5 settings are completely different...&lt;br /&gt;&lt;br /&gt;The first thing google turned up for me was an blog post that explains a lot of Windows 2008R2 specific gotchas for SharePoint 2010.  It goes into detail about how to turn off kernel mode authentication and how to enable IIS delegation using the application pool account credentials.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.harbar.net/archive/2010/03/31/sharepoint-2010-and-kerberos.aspx"&gt;http://www.harbar.net/archive/2010/03/31/sharepoint-2010-and-kerberos.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;With those changes and some SETSPN commands I was able to get successful kerberos logon events to the SharePoint 2010 web front end. A good start. On to the double hop delegation from a SharePoint 2010 web part to Teamworks 6...&lt;br /&gt;&lt;br /&gt;When I hit the Teamworks webpart in SharePoint 2010, I got the usual authentication error that tells me kerberos is not working. The Teamworks server is already working in a SharePoint 2007 farm though, so I know the Teamworks piece is good - but I can see with wireshark that only NTLM2 requests are being sent from the SharePoint 2010 WFE to the jboss server - no kerberos traffic at all.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Dec 22, 2010 Update! Limited Success!&lt;/b&gt;&lt;br /&gt;In one of my isolated SharePoint 2010 dev farms (an 8 server farm, isolated in its own domain), I was able to get kerberos working with Teamworks after working around the kinit/kerberos encryption issue (see the kinit link in the resources section).  I have not had any success in larger, more complex domains. I'm now exploring the MS whitepaper on implementing kerberos (see link in resources section) hoping a solution will leap out at me *crosses fingers!*&lt;br /&gt;&lt;br /&gt;&lt;b&gt;LINKS TO KERBEROS RESOURCES&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://support.microsoft.com/kb/262177"&gt;How to enable Kerberos event logging&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.bryansgeekspeak.com/2010/12/kinit-fails-to-generate-keytab.html"&gt;http://www.bryansgeekspeak.com/2010/12/kinit-fails-to-generate-keytab.html&lt;/a&gt; - Due to the Windows 2008R2 PDCs no longer supporting older DES encryption types used by Teamworks/jboss, kinit fails to generate keytab file for the Teamworks service account.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.bryansgeekspeak.com/2010/12/debugging-windows-server-2008r2-event.html"&gt;http://www.bryansgeekspeak.com/2010/12/debugging-windows-server-2008r2-event.html&lt;/a&gt; for if you find the error in the event logs "Event ID 6037 - The target name used is not valid" on the SharePoint 2010 WFE (possible SPN error)&lt;/li&gt;&lt;li&gt;Microsoft's &lt;a href="http://technet.microsoft.com/en-us/library/ff829837.aspx"&gt;Configuring Kerberos authentication for SharePoint 2010 Products (white paper)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.k2underground.com/blogs/johnny/archive/2007/12/07/k2-blackpearl-hf2-01-distributed-installations.aspx"&gt;K2 [blackpearl] HF2.01 Distributed Installations (and also SP1)&lt;/a&gt; - Even though its specific to K2, its a good reference for farm configuration with kerberos/spns&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-7563873243626047568?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/7563873243626047568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=7563873243626047568' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/7563873243626047568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/7563873243626047568'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2010/11/sharepoint-2010-on-windows-server-2008.html' title='SharePoint 2010 on Windows Server 2008 R2 with Kerberos Troubleshooting'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-8697146493718927716</id><published>2011-02-14T13:42:00.000-08:00</published><updated>2011-02-21T11:25:20.459-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows 2008R2'/><category scheme='http://www.blogger.com/atom/ns#' term='MSDTC'/><category scheme='http://www.blogger.com/atom/ns#' term='K2'/><title type='text'>Windows 2008R2 MSDTC Errors</title><content type='html'>So, having moved away from using &lt;a href="http://www-01.ibm.com/software/integration/lombardi-edition/" title="Lombardi Teamworks java BPM solution got gobbled up by IBM ... noooo!" alt="Lombardi Teamworks java BPM solution got gobbled up by IBM ... noooo!"&gt;IBM/Lombardi Teamworks&lt;/a&gt; as a 3rd party workflow platform, our client decided to go with &lt;a href="http://www.k2.com/en/blackpearl.aspx" title="The Microsoft friendly BPM solution?" alt="The Microsoft friendly BPM solution?"&gt;K2 blackpearl&lt;/a&gt;, mostly because of the close Microsoft .NET/SharePoint integration.  As with any new 3rd party software toolkit, we ran into a number of strange deployment issues.  Here is one of the big ones that had us stumped for a few weeks - MSDTC generating errors when creating a K2 "SmartObject" instance on the K2 server in a distributed farm environment (all Windows 2008R2 servers).&lt;br /&gt;&lt;br /&gt;&lt;div class="sidenote"&gt;The MSDTC transaction manager was unable to pull the transaction from the source transaction manager due to communication problems. Possible causes are: a firewall is present and it doesn't have an exception for the MSDTC process, the two machines cannot find each other by their NetBIOS names, or the support for network transactions is not enabled for one of the two transaction managers.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;As it turns out, K2 SmartObjects rely on the MSDTC service to do their data abstraction magic. I had no idea.  As a matter of fact, I had never even heard of MSDTC until this error cropped up.  It seems MSDTC is actually the Distributed Transaction Coordinator (which shows up in the services applet in windows 2008R2), which I understand to be a SQL server specific service for performing reliable "application transactions" across multiple windows servers to a SQL server instance.&lt;br /&gt;&lt;br /&gt;Anyway, we tried changing DTC security settings on all the servers first (Component Services-Computers-My Computer-Distributed Transaction Coordinator-Local DTC-Properties-Security tab) but no luck there. After a lot of trial and error, the support guys at K2 had me completely uninstall the MSDTC service, remove all its registry entries (eek!), reboot, then add all the services back in ... and after doing that on all the servers in my farm, it solved the problem.&lt;br /&gt;&lt;br /&gt;Why did this work? Well, one thing that leaps to mind is the error we were seeing using the &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?FamilyID=5e325025-4dcd-4658-a549-1d549ac17644" title="A good starting point for troubleshooting MSDTC issues!" alt="A good starting point for troubleshooting MSDTC issues!" &gt;DTCPing&lt;/a&gt; tool from microsoft:&lt;br /&gt;&lt;br /&gt;&lt;div class="sidenote"&gt;WARNING:the CID values for both test machines are the same while this problem won't stop DTCping test, MSDTC will fail for this&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The recommended approach to fix this is to uninstall the MSDTC service on one of the servers involved in the DTCPing test.  Then I realized the MSDTC service is installed by default in Windows Server 2008R2 ... and all of our servers are VMWare instances cloned from a single Windows Server 2008R2 image. So my best guess is if you are using cloned VM images of Windows Server 2008R2, you could also run into this problem.&lt;br /&gt;&lt;br /&gt;Anyway, to "reinstall" MSDTC, I went though the following process which worked on my farm (though, this may be overkill):&lt;br /&gt;&lt;br /&gt;&lt;div class="sidenote"&gt;On each server, do the following:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;From Server Manager, Click "Roles", scroll down to the "Application Server" section, click "Remove Role Services" and uncheck/remove "Distributed Transactions"&lt;/li&gt;&lt;li&gt;From powershell in "Run as administrator" mode, issue the MSDTC uninstall command "msdtc -uninstall" (http://msdn.microsoft.com/en-us/library/aa561924%28v=bts.70%29.aspx) &lt;/li&gt;&lt;li&gt;Using regedt32.exe, delete all the MSDTC registry entries (My Computer\HKEY_LOCAL_MACHINE\Software\Microsoft\MSDTC) &lt;/li&gt;&lt;li&gt;Restart the server.&lt;/li&gt;&lt;li&gt;Reinstall the "Distributed Transactions" role service from step #1. In addition, I also made sure to install the MSMQ role/feature, and I enabled TCP Port sharing, all the "Windows Process Activation Service Support" features (I dont know if all of that is necessary)&lt;/li&gt;&lt;li&gt;Run the MSDTC install command from a powershell window as administrator "msdtc -install"&lt;/li&gt;&lt;li&gt;Reset all the DTS security settings (Component Services-Computers-My Computer-Distributed Transaction Coordinator-Local DTC-Properties-Security tab), and also update the "Distributed Transaction Coordinator" service to start automatically on boot&lt;/li&gt;&lt;li&gt;Reboot&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-8697146493718927716?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/8697146493718927716/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=8697146493718927716' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/8697146493718927716'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/8697146493718927716'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2011/02/windows-2008r2-msdtc-errors.html' title='Windows 2008R2 MSDTC Errors'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-4593137816447998420</id><published>2011-01-25T08:57:00.000-08:00</published><updated>2011-01-25T08:57:34.043-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Kerberos'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><category scheme='http://www.blogger.com/atom/ns#' term='JBoss'/><category scheme='http://www.blogger.com/atom/ns#' term='Teamworks'/><title type='text'>Troubleshooting GSSException: Channel binding mismatch (Mechanism level: ChannelBinding not provided!)</title><content type='html'>Ran into another interesting error in one of my SharePoint 2007 farms with kerberos enabled.  Our Teamworks web part, which uses kerberos to authenticate to the Teamworks (jboss) workflow server suddenly stopped working after a series of patches were applied to all the servers in the farm.  Nothing obvious was showing up in the windows event logs, but I did find this error in the Teamworks logs&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;java.lang.RuntimeException: Exception verifying Kerberos token&lt;br /&gt; at org.jboss.security.auth.AdvancedWebCallbackHandler$1.run(AdvancedWebCallbackHandler.java:236)&lt;br /&gt; at java.security.AccessController.doPrivileged(Native Method)&lt;br /&gt; at javax.security.auth.Subject.doAs(Subject.java:337)&lt;br /&gt; at org.jboss.security.auth.CommonKerberosUtils.doAsKerberosSubject(CommonKerberosUtils.java:64)&lt;br /&gt; at org.jboss.security.auth.AdvancedWebCallbackHandler.handleNegotiateCallback(AdvancedWebCallbackHandler.java:211)&lt;br /&gt; at org.jboss.security.auth.AdvancedWebCallbackHandler.handleCallbacks(AdvancedWebCallbackHandler.java:151)&lt;br /&gt; at org.jboss.security.auth.AdvancedWebCallbackHandler.handle(AdvancedWebCallbackHandler.java:107)&lt;br /&gt; at org.jboss.security.auth.HttpServletRequestResponseValve.doNegotiate(HttpServletRequestResponseValve.java:382)&lt;br /&gt; at org.jboss.security.auth.HttpServletRequestResponseValve.authenticate(HttpServletRequestResponseValve.java:263)&lt;br /&gt; at org.jboss.security.auth.HttpServletRequestResponseValve.authenticate(HttpServletRequestResponseValve.java:237)&lt;br /&gt; at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)&lt;br /&gt; at org.jboss.security.auth.HttpServletRequestResponseValve.invoke(HttpServletRequestResponseValve.java:128)&lt;br /&gt; at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:74)&lt;br /&gt; at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)&lt;br /&gt; at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)&lt;br /&gt; at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:392)&lt;br /&gt; at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)&lt;br /&gt; at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)&lt;br /&gt; at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)&lt;br /&gt; at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)&lt;br /&gt; at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)&lt;br /&gt; at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)&lt;br /&gt; at java.lang.Thread.run(Thread.java:595)&lt;br /&gt;Caused by: &lt;mark&gt;GSSException: Channel binding mismatch (Mechanism level: ChannelBinding not provided!)&lt;/mark&gt;&lt;br /&gt; at sun.security.jgss.krb5.InitialToken$OverloadedChecksum.&lt;init&gt;(InitialToken.java:225)&lt;br /&gt; at sun.security.jgss.krb5.InitSecContextToken.&lt;init&gt;(InitSecContextToken.java:102)&lt;br /&gt; at sun.security.jgss.krb5.Krb5Context.acceptSecContext(Krb5Context.java:715)&lt;br /&gt; at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:300)&lt;br /&gt; at sun.security.jgss.GSSContextImpl.acceptSecContext(GSSContextImpl.java:246)&lt;br /&gt; at org.jboss.security.auth.AdvancedWebCallbackHandler$1.run(AdvancedWebCallbackHandler.java:226)&lt;br /&gt; ... 22 more&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Google lead me to this forum thread:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://forums.sdn.sap.com/thread.jspa?threadID=1504390&amp;start=15&amp;tstart=0"&gt;http://forums.sdn.sap.com/thread.jspa?threadID=1504390&amp;start=15&amp;tstart=0&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Apparently one of the server patches we applied changed the SharePoint server's "Extended Protection for Authentication" behavior (&lt;a href="http://support.microsoft.com/?scid=kb;en-us;968389&amp;x=10&amp;y=18"&gt;http://support.microsoft.com/?scid=kb;en-us;968389&amp;x=10&amp;y=18&lt;/a&gt;), which was causing kerberos to fail for our Teamworks Web Part.&lt;br /&gt;&lt;br /&gt;We ended up adding the registry key "SuppressExtendedProtection" as a DWORD type with a value of "2" to the node "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\LSA" on the SharePoint web front end where the Web Part was running. After a reboot, it fixed our problem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-4593137816447998420?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/4593137816447998420/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=4593137816447998420' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/4593137816447998420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/4593137816447998420'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2011/01/troubleshooting-gssexception-channel.html' title='Troubleshooting GSSException: Channel binding mismatch (Mechanism level: ChannelBinding not provided!)'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-8770493890739323384</id><published>2011-01-21T09:52:00.000-08:00</published><updated>2011-07-26T13:34:32.248-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SSL'/><title type='text'>Verifying SSL Certificate Request Details</title><content type='html'>&lt;b&gt;Certificate Details&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Now that I manage a lot of SSL certificates and generate requests/renewals, I've gotten used to using &lt;a href="http://www.openssl.org/"&gt;OpenSSL&lt;/a&gt; for double checking all my cert request info.  Right now, I use &lt;a href="http://www.cygwin.com/"&gt;Cygwin&lt;/a&gt; (a linux emulator for windows) to run OpenSSL on my windows box. From there I can open a Cygwin prompt and run OpenSSL commands directly on a cert request&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;$openssl req -in mycertrequest.txt -noout -text&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;SSL-TLS Testing&lt;/b&gt;&lt;br /&gt;&lt;a href="https://www.owasp.org/index.php/Testing_for_SSL-TLS_%28OWASP-CM-001%29"&gt;OWASP Testing Guide - "Testing for SSL-TLS"&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-8770493890739323384?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/8770493890739323384/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=8770493890739323384' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/8770493890739323384'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/8770493890739323384'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2011/01/verifying-ssl-certificate-request.html' title='Verifying SSL Certificate Request Details'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-1559237804594106473</id><published>2011-01-12T12:53:00.000-08:00</published><updated>2011-01-12T12:53:53.686-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='VIM'/><title type='text'>VS2010 + VIM</title><content type='html'>Finally! Free VIM emulation for VS2010! (its a VS2010 extension, you can install it using the extensions manager)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/b/timng/archive/2010/05/07/vs2010-vim.aspx"&gt;http://blogs.msdn.com/b/timng/archive/2010/05/07/vs2010-vim.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I just started using it ... and I totally squealed with glee just now.  You get a colon command prompt and everything! I dont have to bother with launching an external vim instance anymore! Yay!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-1559237804594106473?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/1559237804594106473/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=1559237804594106473' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/1559237804594106473'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/1559237804594106473'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2011/01/vs2010-vim.html' title='VS2010 + VIM'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-8159835687235432955</id><published>2011-01-06T15:45:00.000-08:00</published><updated>2011-01-11T15:35:16.552-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>Playing Around With HTML5 Video</title><content type='html'>An example of what you can do with embedding video in a webpage using just a few lines of HTML5 markup, no javascript: &lt;a href="http://www.moopoint.com/Video.html"&gt;http://www.moopoint.com/Video.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Again, you'll need an HTML5 compliant browser to actually see the video embedded in the page.&lt;br /&gt;&lt;br /&gt;In related news - &lt;a href="http://www.engadget.com/2011/01/11/google-will-drop-h-264-support-from-chrome-herd-the-masses-towa/"&gt;Google will drop H.264 support from Chrome, herd the masses towards WebM and Theora&lt;/a&gt; O.o;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-8159835687235432955?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/8159835687235432955/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=8159835687235432955' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/8159835687235432955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/8159835687235432955'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2011/01/playing-around-with-html5-video.html' title='Playing Around With HTML5 Video'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-4836946596690997590</id><published>2011-01-04T09:06:00.000-08:00</published><updated>2011-05-19T11:51:02.159-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>Playing Around With HTML5 Client Side Forms Validation</title><content type='html'>&lt;div class="sidenote"&gt;Whoops! The link below is broken - I'm trimming down the number of domains I own and moopoint.com was one I let go. I'll bring the code up under the bryansgeekspeak.com domain at some point in the future!&lt;/div&gt;&lt;br /&gt;So far, I love the &lt;a href="http://www.mozilla.com/en-US/firefox/beta/"&gt;FireFox4 beta&lt;/a&gt;.  I had completely switched to Chrome on my laptop at home (I have to use IE at work since its our client's standard browser -.-) but now I'm slowly switching back to FireFox - mostly for the neat HTML5 features they're implementing. &lt;br /&gt;&lt;br /&gt;One of the cool new things for web developers that they just added to the FireFox beta is built in Forms Validation. In your input tag markup, you can now add the attributes "required" and "pattern=''" and FireFox will now automagically require the field to be not empty and/or the value must pass the regex supplied in the pattern attribute of the input tag. Sweet! That means less custom javascript code in your web applications and cleaner HTML markup :-D&lt;br /&gt;&lt;br /&gt;I've put up a simple example of the validation in action here - &lt;a href="http://www.moopoint.com/FormsValidation.html"&gt;http://www.moopoint.com/FormsValidation.html&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-4836946596690997590?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/4836946596690997590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=4836946596690997590' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/4836946596690997590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/4836946596690997590'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2011/01/playing-around-with-html5-client-side.html' title='Playing Around With HTML5 Client Side Forms Validation'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-5560610996011671350</id><published>2011-01-03T09:20:00.000-08:00</published><updated>2011-01-03T09:20:06.120-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows 2008R2'/><title type='text'>Windows 2008R2 (IIS 7.5) ASP.NET 4.0 Configuration For Impersonation</title><content type='html'>Admittedly I am still learning a lot about .NET - and recently I was stumped on how to configure an IIS website properly to allow ASP.NET code to impersonate the user hitting the website.  Impersonation doesnt seem to be a very common thing to do - often we hard code account credentials to access things like database repositories - but this case, I was using a workflow product called K2 which allows you to use their C# API to access their workflow engine so that the user hitting your application can access and manipulate their tasks on the K2 workflow server.  To allow my web application to allow you to manipulate workflow tasks on that remote K2 server, I need impersonation.  &lt;br /&gt;&lt;br /&gt;In my first attempt at building a custom web form for workflow tasks I used the default settings in IIS 7.5 for a new website.  In my web application, my C# calls to connect to the workflow server threw errors saying the IIS application pool account did not have rights to access the task I was trying to run.  That makes sense, I needed to use the logged in user account rather than the application pool.  It took a bit of guess-n-test, but I found a configuration that allows this kind of impersonation to happen - and thankfully in this case kerberos is not required (single hop impersonation works with NTLM).&lt;br /&gt;&lt;br /&gt;The tricky part was enabling support for the .NET 4.0 framework on Windows Server 2008R2 - I still cant believe microsoft disables their latest and greatest ASP.NET version on a windows 2008 product -.-  Anyway, here's what I did:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Install server Features required for IIS integrated authentication and impersonation. From the Server Manager tool, confirm the following:&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Confirm  the "Web Server (IIS)" Role is installed.&lt;/li&gt;&lt;li&gt;Confirm the "Windows Authentication" feature is installed, along with any other features required for your web application (ASP.NET, ISAPI Extension/Filters, etc).&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Enable .NET 4.0 framework (this took me forever to figure out!)&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Launch the "Internet Information Services (IIS) Manager" tool.&lt;/li&gt;&lt;li&gt;Click on the root IIS server in the "Connections" pane, then open the "ISAPI and CGI Restrictions" tool from the Features View pane.&lt;/li&gt;&lt;li&gt;Set both versions of "ASP.NET v4.0.xxxxx" to "Allowed"&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Disable Anonymous Authentication for the site. Enable Windows authentication and Impersonation.&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Launch the "Internet Information Services (IIS) Manager" tool.&lt;/li&gt;&lt;li&gt;Click on your website in the "Connections" pane, then open the "Authentication" tool from the Features View pane.&lt;/li&gt;&lt;li&gt;Disable "Anonymous Authentication". Enable both "Windows Authentication" and ASP.NET Impersonation.&lt;/li&gt;&lt;li&gt; Click on "Windows Authentication", then click "Advanced Settings" and confirm that "Extended Protection" is turned off and that "Enable Kernel-mode authentication" is not checked.&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Modify the web application web.config to support impersonation. Here is an example:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;&amp;lt;configuration&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;system.webServer&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;security&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;authentication&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;anonymousAuthentication enabled=&amp;quot;false&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;windowsAuthentication enabled=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/authentication&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/security&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/system.webServer&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;system.web&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;identity impersonate=&amp;quot;true&amp;quot; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/system.web&amp;gt;&lt;br /&gt;&amp;lt;/configuration&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-5560610996011671350?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/5560610996011671350/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=5560610996011671350' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/5560610996011671350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/5560610996011671350'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2011/01/windows-2008r2-iis-75-aspnet-40.html' title='Windows 2008R2 (IIS 7.5) ASP.NET 4.0 Configuration For Impersonation'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-8895760936788697620</id><published>2010-12-20T14:48:00.001-08:00</published><updated>2010-12-20T14:48:24.589-08:00</updated><title type='text'>Kinit Fails to Generate Keytab - Exception: krb_error 14 - in Windows 2008R2 Domain</title><content type='html'>I ran into this issue specifically when setting up a kerberos ticket for the Teamworks 6.2.2 (jboss) service account running on windows 2003R2 in a windows 2008R2 domain.  The reason I need kerberos here is so that a Web Part on a SharePoint 2010 server can pass through authentication from the user (the infamous doublehop delegation issue).&lt;br /&gt;&lt;br /&gt;Windows 2008R2 domain controllers no longer support the older DES encryption used by Teamworks 6.x for Kerberos ticket encryption (DES-CBC-CRC).  Bamf. Roadblock.&lt;br /&gt;&lt;br /&gt;Here is the error I get when I try to run the kinit command to setup the Kerberos ticket for the Teamworks service account:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;C:\Program Files (x86)\Support Tools&gt;C:\Teamworks\java_x64\bin\kinit -k -t C:\t&lt;br /&gt;amworks\sso.keytab HTTP/TWServer@MYDOMAIN.LOCAL&lt;br /&gt;Exception: krb_error 14 KDC has no support for encryption type (14) KDC has no&lt;br /&gt;upport for encryption type&lt;br /&gt;KrbException: KDC has no support for encryption type (14)&lt;br /&gt;at sun.security.krb5.KrbAsRep.&lt;init&gt;(KrbAsRep.java:66)&lt;br /&gt;at sun.security.krb5.KrbAsReq.getReply(KrbAsReq.java:486)&lt;br /&gt;at sun.security.krb5.internal.tools.Kinit.sendASRequest(Kinit.java:308)&lt;br /&gt;at sun.security.krb5.internal.tools.Kinit.&lt;init&gt;(Kinit.java:239)&lt;br /&gt;at sun.security.krb5.internal.tools.Kinit.main(Kinit.java:106)&lt;br /&gt;Caused by: KrbException: Identifier doesn't match expected value (906)&lt;br /&gt;at sun.security.krb5.internal.KDCRep.init(KDCRep.java:133)&lt;br /&gt;at sun.security.krb5.internal.ASRep.init(ASRep.java:58)&lt;br /&gt;at sun.security.krb5.internal.ASRep.&lt;init&gt;(ASRep.java:53)&lt;br /&gt;at sun.security.krb5.KrbAsRep.&lt;init&gt;(KrbAsRep.java:50)&lt;br /&gt;... 4 more&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;krb_error 14 points to an issue with the encryption types. Googling led me to the fact that Windows 2008R2 no longer supports DES encryption types used by Teamworks/jboss.&lt;br /&gt;&lt;br /&gt;From there I tried enabling a workaround posted by Microsoft but it doesn’t seem to have any effect, even after rebooting all servers in the domain:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://support.microsoft.com/kb/977321"&gt;http://support.microsoft.com/kb/977321&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As a last ditch effort, I ended up adding a windows 2003R2 BDC to my domain and tried pointing kinit to the new BDC.  It worked.  When I ran the kinit command, it automatically picked up the BDC instead of the PDC and generated the ticket successfully.  After that, everything came up fine - Kerberos authentication worked from IIS/SharePoint 2010 to Teamworks, giving me SSO from my teamworks inbox webpart.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-8895760936788697620?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/8895760936788697620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=8895760936788697620' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/8895760936788697620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/8895760936788697620'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2010/12/kinit-fails-to-generate-keytab.html' title='Kinit Fails to Generate Keytab - Exception: krb_error 14 - in Windows 2008R2 Domain'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-1426047348132040721</id><published>2010-12-20T12:12:00.000-08:00</published><updated>2010-12-20T12:27:36.746-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Kerberos'/><category scheme='http://www.blogger.com/atom/ns#' term='Windows 2008R2'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>Debugging Windows Server 2008R2 Event ID 6037 - "The target name used is not valid"</title><content type='html'>I found this error in the event logs on my WFE after trying to configure kerberos for a SharePoint 2010 farm (in a small farm configuration, with specified service accounts for application pools)&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;Source: LsaSrv&lt;br /&gt;Event ID: 6037&lt;br /&gt;The program w3wp.exe, with the assigned process ID 1234, could not authenticate locally by using the target name HTTP/devsharepoint.mydomain.com. The target name used is not valid. A target name should refer to one of the local computer names, for example, the DNS host name.&lt;br /&gt;&lt;br /&gt;Try a different target name.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The curious thing is that the target name is a Kerberos SPN &gt;_&gt;&lt;br /&gt;&lt;br /&gt;the URL listed in the error is registered in DNS correctly, and I can ping it from the WFE.  I found a blog post that has a potential fix via a registry hack (&lt;a href="http://www.dotnetpulse.com/?p=70"&gt;http://www.dotnetpulse.com/?p=70&lt;/a&gt;). I'm listing it again here for reference - I implemented the fix and so far (for at least an hour) no more of these errors are showing in the event log *keeps fingers crossed!*&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Go to REGEDIT &gt; HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0&lt;/li&gt;&lt;li&gt;Right click MSV1_0 &gt; New &gt; Multi-String Value&lt;/li&gt;&lt;li&gt;Type 'BackConnectionHostNames'&lt;/li&gt;&lt;li&gt;Right click &amp; select ‘Modify’&lt;/li&gt;&lt;li&gt;Enter the Hostname of the site: WEBSITENAME (and on a new line enter the FQDN, WEBSITENAME.domain.com as well)&lt;/li&gt;&lt;li&gt;Restart IIS&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-1426047348132040721?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/1426047348132040721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=1426047348132040721' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/1426047348132040721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/1426047348132040721'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2010/12/debugging-windows-server-2008r2-event.html' title='Debugging Windows Server 2008R2 Event ID 6037 - &quot;The target name used is not valid&quot;'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-8291376695115872810</id><published>2010-12-17T12:57:00.000-08:00</published><updated>2010-12-20T14:55:27.297-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HTTP'/><title type='text'>Rediscovering HTTP Headers</title><content type='html'>I havent used raw HTTP Headers in so long, when I needed to troubleshoot them again it turned into a small research project.  So here it is, where I can hopefully find it again when I draw a blank next time around.&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What are HTTP Headers?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="sidenote"&gt;HTTP Headers are explained in more detail here - &lt;a href="http://en.wikipedia.org/wiki/HTTP_headers"&gt;http://en.wikipedia.org/wiki/HTTP_headers&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;HTTP headers are plain text pieces of data (string name/value pairs) passed back and forth between web server and browser with each web request. &lt;br /&gt;&lt;br /&gt;The browser typically sends request headers to the server which can include things like the browser version being used to make the request. Here is an example set of headers for a GET request: &lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;GET / HTTP/1.1 &lt;br /&gt;Host: www.bryansgeekspeak.com &lt;br /&gt;User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 ( .NET CLR 3.5.30729; .NET4.0E) &lt;br /&gt;Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 &lt;br /&gt;Accept-Language: en-us,en;q=0.5 &lt;br /&gt;Accept-Encoding: gzip,deflate &lt;br /&gt;Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 &lt;br /&gt;Keep-Alive: 115 &lt;br /&gt;Connection: keep-alive &lt;br /&gt;Cookie: __utmz=7506145.1291670597.279.23.utmcsr=blogger.com|utmccn=(referral)|utmcmd=referral|utmcct=/navbar.g; __utma=7506145.1224262850.1253640086.1292536031.1292536661.294; __utmb=7506145.3.10.1292536661; __utmc=7506145 &lt;br /&gt;If-Modified-Since: Tue, 07 Dec 2010 16:18:07 GMT &lt;br /&gt;If-None-Match: "bb02d252-a672-46a3-a001-96c62017ec35" &lt;br /&gt;Cache-Control: max-age=0  &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The server typically sends response headers which can include things like the web server software version. Here is an example of a 200 OK response header from the server back to the browser &lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;HTTP/1.1 200 OK &lt;br /&gt;Content-Type: text/html; charset=UTF-8 &lt;br /&gt;Expires: Thu, 16 Dec 2010 22:02:54 GMT &lt;br /&gt;Date: Thu, 16 Dec 2010 22:02:54 GMT &lt;br /&gt;Last-Modified: Tue, 07 Dec 2010 16:18:07 GMT &lt;br /&gt;Etag: "bb02d252-a672-46a3-a001-96c62017ec35" &lt;br /&gt;Content-Encoding: gzip &lt;br /&gt;X-Content-Type-Options: nosniff &lt;br /&gt;X-XSS-Protection: 1; mode=block &lt;br /&gt;Content-Length: 15991 &lt;br /&gt;Server: GSE &lt;br /&gt;Cache-Control: public, max-age=0, must-revalidate, proxy-revalidate &lt;br /&gt;Age: 0 &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;HTTP headers are sent before the content of the request is sent - the html part from web server to browser in a response, or form/url data in a request - and HTTP headers are not displayed/rendered by your browser. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;HTTP Headers and Browser Cookies&lt;/b&gt; &lt;br /&gt;Cookie data, when needed, is encrypted and transmitted via HTTP headers too - but HTTP headers themselves are not cookies.&lt;br /&gt;&lt;br /&gt;&lt;div class="sidenote"&gt;more info on HTTP Cookies - &lt;a href="http://en.wikipedia.org/wiki/HTTP_cookie"&gt;http://en.wikipedia.org/wiki/HTTP_cookie&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Custom HTTP Headers and IIS&lt;/b&gt;&lt;br /&gt;HTTP Header data is just one big string formatted in a way that the browser/web server can parse and understand. ISAPI filters in IIS can be used to intercept all HTTP request traffic between the server and client, modifying the standard IIS server request/response header string as needed to provide additional custom header information from your own ISAPI filter to the webserver and client browser.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Tools For Viewing Raw HTTP Headers From Your Browser&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.blunck.info/iehttpheaders.html"&gt;http://www.blunck.info/iehttpheaders.html&lt;/a&gt; a tool for viewing HTTP headers in IE&lt;/li&gt;&lt;li&gt;&lt;a href="http://livehttpheaders.mozdev.org/"&gt;http://livehttpheaders.mozdev.org/&lt;/a&gt; a firefox add on for viewing HTTP headers&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-8291376695115872810?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/8291376695115872810/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=8291376695115872810' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/8291376695115872810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/8291376695115872810'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2010/12/rediscovering-http-headers.html' title='Rediscovering HTTP Headers'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-2269486941868485525</id><published>2010-12-06T16:51:00.000-08:00</published><updated>2010-12-20T14:01:47.402-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LDAP'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><category scheme='http://www.blogger.com/atom/ns#' term='Teamworks'/><title type='text'>Teamworks LDAP Authentication to AD on Windows Server 2008 R2 Quirk?</title><content type='html'>I just ran into the following error when pointing an existing known good Teamworks 6.2.2 instance from a Windows Server 2003R2 PDC to a Windows Server 2008R2 PDC for domain authentication:&lt;br /&gt;&lt;div class="code"&gt;LDAP: error code 49 - 80090308&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;did some googling and found out that sometimes windows AD requires you to use windows style bind credentials in the format "username@mydomain.com" rather than the traditional ldap DN of the user "CN=username,DC=mydomain,DC=com". Annoying -.-&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-2269486941868485525?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/2269486941868485525/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=2269486941868485525' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/2269486941868485525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/2269486941868485525'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2010/12/teamworks-ldap-authentication-to-ad-on.html' title='Teamworks LDAP Authentication to AD on Windows Server 2008 R2 Quirk?'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-8113628445977219958</id><published>2010-11-04T12:39:00.000-07:00</published><updated>2010-11-04T12:43:00.724-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>.NET SQL Query Results to a DataTable Type</title><content type='html'>So, all I want to do is execute an SQL statement against oracle and have it return a recordset that I can use in my .NET code, just like what I'm used to seeing in Coldfusion. What's the best way to do that? &lt;br /&gt;&lt;br /&gt;I spent hours experimenting with DataAdapter and DataReader (The Oracle ODAC112012 version), and I was able to get useable results using several different techniques, all with their own pros and cons. DataAdaper is huge and provides an amazing amount of extra functionality for Insert/update/delete functionality that we really don't need in this case. DataReader on the other hand seems to be optimized for forward read access of sql select results, but only while actively connected to the database. I really want a combination of the two in this case – the speed/optimization of the DataReader with the Functionality of a DataTable (which to me, is very similar to a Coldfusion recordset), which is returned as part of a DataSet by a DataAdapter. &lt;br /&gt;&lt;br /&gt;My favorite solution so far? A DataReader filling a newly initialized DataTable. Another requirement for me is the support of SQL Parameters, which automatically prevents SQL injection attacks and improves DB server performance with query plan caching (you get that for free just by using sql parameters for ALL your variables rather than relying on string parsing! Yay!). Anywho, here is a fairly generic method that allows executing a SQL statement along with its list of OracleParameters, returning only one DataTable variable with the results of the query: &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;public DataTable executeSqlDataTable(string sql, OracleParameter[] sqlParameters)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Get the connection string&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ConnectionStringSettings connectionStringSettings = ConfigurationManager.ConnectionStrings[&amp;quot;OracleConnectionStringCouncil&amp;quot;];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string constr = connectionStringSettings.ConnectionString;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataTable dt = new DataTable();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Create an oracle connection&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;using (OracleConnection conn = new OracleConnection(constr))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Create an oracle command object so we can pass parameters to it&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OracleCommand command = new OracleCommand(sql, conn);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Add parameters, if any&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;for (int i = 0; i &amp;lt; sqlParameters.Length; i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;command.Parameters.Add(sqlParameters[i]);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// execute the sql statement&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;conn.Open();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OracleDataReader dr = command.ExecuteReader(CommandBehavior.CloseConnection);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// dump the results to a DataTable type&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dt.Load(dr);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return dt;&lt;br /&gt;}&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;And here is an example method that executes a sql statement (with oracle SQL parameters) and returns one column value from the first returned row as a result: &lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;public string getFullName(string ntUsername)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;string sql = &amp;quot;SELECT FULL_NAME FROM MyUserTable WHERE username = :ntUsername&amp;quot;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Set SQL parameters&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OracleParameter[] sqlParameters = { new OracleParameter(&amp;quot;ntUsername&amp;quot;,OracleDbType.NVarchar2) };&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sqlParameters[0].Value = ntUsername;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Execute the SQL, return a DataTable&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DataTable tt = executeSqlDataTable(sql, sqlParameters );&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return tt.Rows[0][&amp;quot;FULL_NAME&amp;quot;].ToString();&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-8113628445977219958?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/8113628445977219958/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=8113628445977219958' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/8113628445977219958'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/8113628445977219958'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2010/11/net-sql-query-results-to-datatable-type.html' title='.NET SQL Query Results to a DataTable Type'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-4935321927202546275</id><published>2010-10-15T16:56:00.000-07:00</published><updated>2010-10-15T17:34:49.647-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TFS 2010'/><title type='text'>Migrate TFS 2008 data to TFS 2010 Project Collection</title><content type='html'>Its fairly easy to do once you know the tricks.  These instructions assume you have a running TFS 2008 instance with data to be migrated and a new TFS 2010 instance running with data.  You want to merge the TFS 2008 data into TFS2010 as a new collection. Here goes!&lt;br /&gt;&lt;br /&gt;1) Stop the TFS 2008 IIS application pool and web site on the old TFS server instance. This makes sure no one is actively changing data while we do the migration.&lt;br /&gt;&lt;br /&gt;2) do a SQL server backup of all tfs* databases from the old TFS 2008 instance.  In most cases this will be SQL server 2005 - the TFS 2010 upgrade commands will not work running against databases in SQL server 2005.&lt;br /&gt;&lt;br /&gt;TfsActivityLogging&lt;br /&gt;TfsBuild&lt;br /&gt;TfsIntegration&lt;br /&gt;TfsVersionControl&lt;br /&gt;TfsWarehouse&lt;br /&gt;TfsWorkItemTracking&lt;br /&gt;TfsWorkItemTrackingAttachments&lt;br /&gt;&lt;br /&gt;3) restore these databases to the SQL server 2008 instance used by the TFS 2010 instance.&lt;br /&gt;&lt;br /&gt;4) From the TFS 2010 server, run a command similar to the following ( you can run TfsConfig.exe import /help for more details)&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;C:\Program Files\Microsoft Team Foundation Server 2010\Tools&gt; .\TfsConfig.exe import /sqlinstance:MySQLServer2008Instance /collectionName:tfs2008_import /confirmed&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Where "MySQLServer2008Instance" is the SQL server 2008 instance used by your TFS 2010 instance, and "tfs2008_import" is the name of the collection to create in TFS2010 for your imported data.&lt;br /&gt;&lt;br /&gt;Once the import/upgrade is complete, all the old databases listed in step 2 are removed for you, leaving a database named tfs_tfs2008_import which TFS 2010 will use from now on to manage your collection in SQL server.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-4935321927202546275?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/4935321927202546275/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=4935321927202546275' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/4935321927202546275'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/4935321927202546275'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2010/10/migrate-tfs-2008-data-to-tfs-2010.html' title='Migrate TFS 2008 data to TFS 2010 Project Collection'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-388964399951520930</id><published>2010-09-13T08:09:00.000-07:00</published><updated>2011-06-23T16:16:00.572-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>SharePoint 2007 Approval Workflow missing from SharePoint 2010?</title><content type='html'>&lt;div class="sidenote"&gt;6/23/2011 update: Thanks to Pham Van Trung for pointing out a MS KB article that addresses this issue - &lt;a href="http://support.microsoft.com/kb/2535850"&gt;http://support.microsoft.com/kb/2535850&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;In one of our projects, we were using the MOSS publishing feature on a SharePoint 2007 farm, with the standard "Approval" publishing workflow on all our page libraries.  We recently did an upgrade on that farm to SharePoint 2010, and everything seemed to work the same - the existing sites still had the old approval workflow assigned to the Pages library, and they worked as expected. &lt;br /&gt;&lt;br /&gt;When we tried to make a copy of one of our sites, using the Content and Structure view to copy the entire site structure, the workflow assigned to the pages library doesnt copy over properly, which is normal. But now when we try to assign the approval workflow to the pages library after the fact, we simply cant. The old Approval workflow isnt available as a workflow option to pick from, and I've found no way to bring it back so that its selectable in the SharePoint 2010 web interface. There are some blogs out there that mention activating a feature called "SharePoint 2007 workflows", which I tried, but that still did not fix the problem for me.&lt;br /&gt;&lt;br /&gt;To work around the problem, one of our C# gurus built a console app that can make the old SharePoint 2007 workflow available in a SharePoint site.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-388964399951520930?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/388964399951520930/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=388964399951520930' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/388964399951520930'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/388964399951520930'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2010/09/sharepoint-2007-approval-workflow.html' title='SharePoint 2007 Approval Workflow missing from SharePoint 2010?'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-6448768156396303774</id><published>2010-08-30T15:41:00.000-07:00</published><updated>2010-08-30T15:42:57.138-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint 2010'/><title type='text'>SharePoint 2010 CQWP Modified Date</title><content type='html'>Pulling out your hair trying to find the field name for the "Last Modified Date" SharePoint 2010 field for use in ItemStyle.xsl?  Here it is, with an example of how to format the date using xslt functions available to ItemStyle.xsl:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;Modified On: &amp;lt;xsl:value-of select="ddwrt:FormatDate(string(@_x007B_28cf69c5_x002D_fa48_x002D_462a_x002D_b5cd_x002D_27b6f9d2bd5f_x007D_) ,1033 ,5)" /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;I found the field name by dumping the names of all properties available to my xsl template using the Debug code below in ItemStyle.xsl. Once you've updated ItemStyle.xsl, create a test page in your SharePoint portal, drop in the CQWP and pick the following Debug template from the list.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&amp;lt;xsl:template name=&amp;quot;Debug&amp;quot; match=&amp;quot;Row[@Style='Debug']&amp;quot; mode=&amp;quot;itemstyle&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;div&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:for-each select=&amp;quot;@*&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;P:&amp;lt;xsl:value-of select=&amp;quot;name()&amp;quot; /&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-6448768156396303774?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/6448768156396303774/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=6448768156396303774' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/6448768156396303774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/6448768156396303774'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2010/08/sharepoint-2010-cqwp-modified-date.html' title='SharePoint 2010 CQWP Modified Date'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-3916564829420095331</id><published>2010-08-13T09:00:00.000-07:00</published><updated>2010-08-17T13:44:37.394-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>A Good ASP.NET MVC Tutorial</title><content type='html'>I just started experimenting with ASP.NET MVC web applications and found this online tutorial to be a great place to start:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.asp.net/mvc/tutorials/mvc-music-store-part-1"&gt;http://www.asp.net/mvc/tutorials/mvc-music-store-part-1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Found another good tutorial, this one using LINQ to SQL rather than the Data Entity Framework. Also, this example talks about a Data Repository pattern for accessing a database, which is probably the way I'll end up going.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.asp.net/mvc/tutorials/creating-model-classes-with-linq-to-sql-cs"&gt;http://www.asp.net/mvc/tutorials/creating-model-classes-with-linq-to-sql-cs&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-3916564829420095331?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/3916564829420095331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=3916564829420095331' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/3916564829420095331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/3916564829420095331'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2010/08/good-aspnet-mvc-tutorial.html' title='A Good ASP.NET MVC Tutorial'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-3486858765308237268</id><published>2010-07-27T13:02:00.000-07:00</published><updated>2010-07-29T08:58:57.771-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Workflow'/><title type='text'>Custom Workflow Architecture: Table of Contents</title><content type='html'>&lt;div class="sidenote"&gt;The Disclaimer: Please keep in mind, these articles are in the works and currently in a rough draft state. And as with anything on my blog, these are just my own thoughts, ideas and examples worked out into rough blog posts for my own reference. Hopefully others will find them useful too :)  I don't provide any kind of warranty or support for the information given here, take it as is.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.bryansgeekspeak.com/2010/07/custom-workflow-architecturte-routing.html"&gt;Custom Workflow Architecture: The Routing Table&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.bryansgeekspeak.com/2010/07/custom-workflow-architecture-workflow.html"&gt;Custom Workflow Architecture: Workflow Steps and Transitions&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.bryansgeekspeak.com/2010/07/custom-workflow-architecture-examining.html"&gt;Custom Workflow Architecture: Examining Workflow Data&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-3486858765308237268?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/3486858765308237268/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=3486858765308237268' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/3486858765308237268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/3486858765308237268'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2010/07/custom-workflow-architecture-table-of.html' title='Custom Workflow Architecture: Table of Contents'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-1821940358852310974</id><published>2010-07-27T12:45:00.000-07:00</published><updated>2010-07-27T12:46:12.232-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Workflow'/><title type='text'>Custom Workflow Architecture: Examining Workflow Data</title><content type='html'>&lt;b&gt;!!ROUGH DRAFT!!&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="sidenote"&gt;This post expands on a previous post: &lt;a href="http://www.bryansgeekspeak.com/2010/07/custom-workflow-architecture-workflow.html"&gt;Custom Workflow Architecture: Workflow Steps and Transitions&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;From the previous post, we should already have the following database tables created and populated with the data shown:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Database Tables&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_It8-g3_9vec/TE8tcen7SNI/AAAAAAAAAzc/FigDPlpqvkc/s1600/Workflow_Step_Trans_Tables2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="162" src="http://2.bp.blogspot.com/_It8-g3_9vec/TE8tcen7SNI/AAAAAAAAAzc/FigDPlpqvkc/s400/Workflow_Step_Trans_Tables2.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Records&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;SELECT  *&lt;br /&gt;FROM  Workflow;&lt;/div&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;th&gt;ID&lt;/th&gt;  &lt;th&gt;NAME&lt;/th&gt;  &lt;th&gt;DESCRIPTION&lt;/th&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;tbody id="data"&gt;&lt;tr&gt; &lt;td align="right"&gt;1&lt;/td&gt; &lt;td&gt;Vacation Request Workflow&lt;/td&gt; &lt;td&gt;A workflow to allow employees to request vacation time.&lt;/td&gt;  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div class="code"&gt;SELECT  *&lt;br /&gt;FROM  WorkflowStep;&lt;/div&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;th&gt;ID&lt;/th&gt;  &lt;th&gt;WORKFLOWID&lt;/th&gt;  &lt;th&gt;NAME&lt;/th&gt;  &lt;th&gt;DESCRIPTION&lt;/th&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;tbody id="data"&gt;&lt;tr&gt; &lt;td align="right"&gt;1&lt;/td&gt; &lt;td align="right"&gt;1&lt;/td&gt; &lt;td&gt;Workflow Instance Instantiated&lt;/td&gt; &lt;td&gt;This step marks the point where a workflow instance was created.&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt; &lt;td align="right"&gt;2&lt;/td&gt; &lt;td align="right"&gt;1&lt;/td&gt; &lt;td&gt;Request Creation/Submission&lt;/td&gt; &lt;td&gt;A vacation request is created and submitted for approval at this step.&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt; &lt;td align="right"&gt;3&lt;/td&gt; &lt;td align="right"&gt;1&lt;/td&gt; &lt;td&gt;Manager Review/Approval&lt;/td&gt; &lt;td&gt;The vacation request is reviewed and approved/rejected by a manager at this step.&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt; &lt;td align="right"&gt;4&lt;/td&gt; &lt;td align="right"&gt;1&lt;/td&gt; &lt;td&gt;Workflow Completed&lt;/td&gt; &lt;td&gt;The vacation request was finalized (Either approved or rejected).&lt;/td&gt;  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;div class="code"&gt;SELECT  *&lt;br /&gt;FROM  WorkflowTrans;&lt;/div&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;th&gt;ID&lt;/th&gt;  &lt;th&gt;WORKFLOWID&lt;/th&gt;  &lt;th&gt;FROMSTEPID&lt;/th&gt;  &lt;th&gt;TOSTEPID&lt;/th&gt;  &lt;th&gt;NAME&lt;/th&gt;  &lt;th&gt;DESCRIPTION&lt;/th&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;tbody id="data"&gt;&lt;tr&gt; &lt;td align="right"&gt;1&lt;/td&gt; &lt;td align="right"&gt;1&lt;/td&gt; &lt;td align="right"&gt;1&lt;/td&gt; &lt;td align="right"&gt;2&lt;/td&gt; &lt;td&gt;Instantiate Workflow&lt;/td&gt; &lt;td&gt;The initial transition that fires off for every new workflow.&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt; &lt;td align="right"&gt;2&lt;/td&gt; &lt;td align="right"&gt;1&lt;/td&gt; &lt;td align="right"&gt;2&lt;/td&gt; &lt;td align="right"&gt;3&lt;/td&gt; &lt;td&gt;Submit For Manager Approval&lt;/td&gt; &lt;td&gt;Submit the request for approval.&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt; &lt;td align="right"&gt;3&lt;/td&gt; &lt;td align="right"&gt;1&lt;/td&gt; &lt;td align="right"&gt;3&lt;/td&gt; &lt;td align="right"&gt;4&lt;/td&gt; &lt;td&gt;Approved by Manager&lt;/td&gt; &lt;td&gt;Approve Request.&lt;/td&gt;  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;b&gt;Queries&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Now lets start extracting some more meaningful data.  The above queries give us raw dumps of all our tables, so we can at least see all our workflows, steps and transitions. But it does not give us the details our users and managers will want to see.  So here are some common questions and solutions for querying data from our workflow data repository.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;I need to see a list of all steps ordered by their logical flow within the workflow, starting with the step "Workflow Instance Instantiated" and ending with whatever the final workflow step happens to be, for this workflow instance. How can I do that?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The trick is to know what your starting transition is.  Our transitions map the workflow from one step to another, so if we know what the first step is, we can follow our transitions to the end point. Writing the SQL to walk workflow transitions is trickier than it sounds.  Its really a parent/child relationship. In my examples here, I use the built in oracle functions for traversing hierarchical relationships - START WITH and CONNECT BY.&lt;br /&gt;&lt;br /&gt;&lt;div class="sidenote"&gt;In these examples, for simplicity, I'm hardcoding the starting step ID into my queries.  In a more complete example, I would want to store the starting step ID somewhere in the database as part of the workflow scheme.  For example, we could track the start step ID as part of the workflow record by creating a new column: Workflow.StartStepID.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="code"&gt;SELECT  w.Name AS WorkflowName,&lt;br /&gt;ws.Name AS StepName, &lt;br /&gt;wt.Name AS TransName,&lt;br /&gt;LEVEL&lt;br /&gt;FROM  Workflow w&lt;br /&gt;INNER JOIN WorkflowStep ws ON ws.WorkflowID = w.ID&lt;br /&gt;INNER JOIN WorkflowTrans wt ON wt.FromStepID = ws.ID AND wt.WorkflowID = w.ID&lt;br /&gt;WHERE w.ID = 1&lt;br /&gt;START WITH wt.FromStepID = 1&lt;br /&gt;CONNECT BY PRIOR wt.ToStepID = wt.FromStepID&lt;br /&gt;ORDER BY LEVEL;&lt;/div&gt;&lt;br /&gt;&lt;table border="0" cellpadding="0" cellspacing="0"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;th&gt;WORKFLOWNAME&lt;/th&gt;  &lt;th&gt;STEPNAME&lt;/th&gt;  &lt;th&gt;TRANSNAME&lt;/th&gt;  &lt;th&gt;LEVEL&lt;/th&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;tbody id="data"&gt;&lt;tr&gt; &lt;td&gt;Vacation Request Workflow&lt;/td&gt; &lt;td&gt;Workflow Instance Instantiated&lt;/td&gt; &lt;td&gt;Instantiate Workflow&lt;/td&gt; &lt;td align="right"&gt;1&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Vacation Request Workflow&lt;/td&gt; &lt;td&gt;Request Creation/Submission&lt;/td&gt; &lt;td&gt;Submit For Manager Approval&lt;/td&gt; &lt;td align="right"&gt;2&lt;/td&gt;  &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;Vacation Request Workflow&lt;/td&gt; &lt;td&gt;Manager Review/Approval&lt;/td&gt; &lt;td&gt;Approved by Manager&lt;/td&gt; &lt;td align="right"&gt;3&lt;/td&gt;  &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;I use the START BY statement to tell oracle what the starting point is for traversing the workflow I've designed. The table that represents the workflow hierarchy is really only the WorkflowTrans table, where the FromStepID and ToStepId represent our parent/child keys.  So, we tell oracle to walk the transition hierarchy, and we use oracle's built in LEVEL keyword to sort our results correctly. This gives us a tabular representation of how our workflow is linked by transitions.&lt;br /&gt;&lt;br /&gt;&lt;!--- CUSTOM CSS FOR TABLES ON THIS PAGE ---&gt;&lt;br /&gt;&lt;style type="text/css"&gt;table {background-color:#F2F2F5;border-width:1px 1px 0px 1px;border-color:#C9CBD3;border-style:solid;}td {color:#000000;font-family:Tahoma,Arial,Helvetica,Geneva,sans-serif;font-size:9pt;background-color:#EAEFF5;padding:8px;background-color:#F2F2F5;border-color:#ffffff #ffffff #cccccc #ffffff;border-style:solid solid solid solid;border-width:1px 0px 1px 0px;}th {font-family:Tahoma,Arial,Helvetica,Geneva,sans-serif;font-size:9pt;padding:8px;background-color:#CFE0F1;border-color:#ffffff #ffffff #cccccc #ffffff;border-style:solid solid solid none;border-width:1px 0px 1px 0px;white-space:nowrap;}&lt;/style&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-1821940358852310974?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/1821940358852310974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=1821940358852310974' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/1821940358852310974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/1821940358852310974'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2010/07/custom-workflow-architecture-examining.html' title='Custom Workflow Architecture: Examining Workflow Data'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_It8-g3_9vec/TE8tcen7SNI/AAAAAAAAAzc/FigDPlpqvkc/s72-c/Workflow_Step_Trans_Tables2.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-7473246707321903457</id><published>2010-07-27T09:28:00.000-07:00</published><updated>2010-07-27T12:57:53.835-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Workflow'/><title type='text'>Custom Workflow Architecture: Workflow Steps and Transitions</title><content type='html'>&lt;b&gt;!!ROUGH DRAFT!!&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="sidenote"&gt;This post expands on a previous post: &lt;a href="http://www.bryansgeekspeak.com/2010/07/custom-workflow-architecturte-routing.html"&gt;Custom Workflow Architecture: The Routing Table&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;In my previous post we looked at a simple one step approval workflow and talked about how to store workflow activity to a routing table.  In this post we'll look at one possible way to define a workflow's steps and transitions in a set of database tables, and how a workflow engine might utilize that information for use in a web application.&lt;br /&gt;&lt;br /&gt;In designing our new system, we'll continue using the simple one step approval workflow at first, but I know that we will want to support more than just that one workflow in our new system.  So first I'll define a table in the database to identify unique workflows available in our web application:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;--- Create table Workflow&lt;br /&gt;CREATE TABLE Workflow (&lt;br /&gt;ID INT NOT NULL,&lt;br /&gt;Name VARCHAR2(128) NULL,&lt;br /&gt;Description VARCHAR2(2000) NULL&lt;br /&gt;);&lt;br /&gt;--- Set column ID to be Primary Key for table Workflow&lt;br /&gt;ALTER TABLE Workflow ADD CONSTRAINT Workflow_PK1 PRIMARY KEY (ID);&lt;/div&gt;&lt;br /&gt;Keeping things simple, this table tags each available workflow with a unique id (Workflow.ID).  In addition to the unique id, we can also assign a human readable name and description to help us identify the workflow.  Lets insert a new record that will define the one step workflow we defined in the previous post (we will recreate that workflow from scratch in this example):&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;INSERT INTO Workflow (&lt;br /&gt;ID,&lt;br /&gt;Name,&lt;br /&gt;Description&lt;br /&gt;)VALUES(&lt;br /&gt;1,&lt;br /&gt;'Vacation Request Workflow',&lt;br /&gt;'A workflow to allow employees to request vacation time.'&lt;br /&gt;);&lt;br /&gt;COMMIT;&lt;/div&gt;&lt;br /&gt;Now that we have a workflow record in the system, we can go about creating a list of workflow steps (sometimes called Workflow States) we want to display in our application.  We'll create a new table to hold our steps and link them back to the workflow they belong to.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;--- Create table WorkflowStep&lt;br /&gt;CREATE TABLE WorkflowStep (&lt;br /&gt;ID INT NOT NULL,&lt;br /&gt;WorkflowID INT NOT NULL,&lt;br /&gt;Name VARCHAR2(128) NULL,&lt;br /&gt;Description VARCHAR2(2000) NULL&lt;br /&gt;);&lt;br /&gt;--- Set column ID to be Primary Key for table WorkflowStep&lt;br /&gt;ALTER TABLE WorkflowStep ADD CONSTRAINT WorkflowStep_PK1 PRIMARY KEY (ID);&lt;br /&gt;--- Set foreign key pointing back to the Workflow table&lt;br /&gt;ALTER TABLE WorkflowStep ADD CONSTRAINT WorkflowStep_FK1 FOREIGN KEY (WorkflowID) REFERENCES Workflow(ID);&lt;/div&gt;&lt;br /&gt;Now that we have a table to hold the steps, we need to define what steps exist in our workflow. Even though we are calling this a one step approval workflow, there are really at least 2 steps involved - When the employee is working on his request, thats the first step of the workflow.  Then, when the manager works on the request, after it's been submitted for approval by the Employee, thats the second step. &lt;br /&gt;&lt;br /&gt;In addition, I'm going to add two extra steps - a step to represent the start of the workflow and another to represent the end (as shown in the flowchart diagram).  Start and end point steps are not steps that users get to see, or act on, but it allows our application to see workflow instances from start to finish. &lt;br /&gt;&lt;br /&gt;So lets go ahead and define all 4 of those steps in our new table with a few insert statements:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;INSERT INTO WorkflowStep (&lt;br /&gt;ID,&lt;br /&gt;WorkflowID,&lt;br /&gt;Name,&lt;br /&gt;Description&lt;br /&gt;)VALUES(&lt;br /&gt;1,&lt;br /&gt;1,&lt;br /&gt;'Workflow Instance Instantiated',&lt;br /&gt;'This step marks the point where a workflow instance was created.'&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;INSERT INTO WorkflowStep (&lt;br /&gt;ID,&lt;br /&gt;WorkflowID,&lt;br /&gt;Name,&lt;br /&gt;Description&lt;br /&gt;)VALUES(&lt;br /&gt;2,&lt;br /&gt;1,&lt;br /&gt;'Request Creation/Submission',&lt;br /&gt;'A vacation request is created and submitted for approval at this step.'&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;INSERT INTO WorkflowStep (&lt;br /&gt;ID,&lt;br /&gt;WorkflowID,&lt;br /&gt;Name,&lt;br /&gt;Description&lt;br /&gt;)VALUES(&lt;br /&gt;3,&lt;br /&gt;1,&lt;br /&gt;'Manager Review/Approval',&lt;br /&gt;'The vacation request is reviewed and approved/rejected by a manager at this step.'&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;INSERT INTO WorkflowStep (&lt;br /&gt;ID,&lt;br /&gt;WorkflowID,&lt;br /&gt;Name,&lt;br /&gt;Description&lt;br /&gt;)VALUES(&lt;br /&gt;4,&lt;br /&gt;1,&lt;br /&gt;'Workflow Completed',&lt;br /&gt;'The vacation request was finalized (Either approved or rejected).'&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;COMMIT;&lt;/div&gt;&lt;br /&gt;Notice I havent defined any way to order these steps yet &amp;gt;_&amp;gt; We'll do that now using Transitions!&lt;br /&gt;&lt;br /&gt;If we look at the example workflow flowchart, we can see that steps are represented as squares.  The transitions are the lines with arrows that connect steps in the workflow.  Transitions define how you could get from one step to another.&lt;br /&gt;&lt;br /&gt;In our example workflow the transitions are pretty simple.  We've got at least 3 transitions to get us started:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;A Transition from "Instantiate Workflow Instance" to "Request Creation/Submission", which happens when a user creates a new Vacation request. We'll call this transition "Instantiate Workflow"&lt;/li&gt;&lt;li&gt;A Transition from "Request Creation/Submission" to "Manager Review/Approval", which fires off when the employee submits his vacation request for review by a manager. We'll call this transition "Submit For Manager Approval"&lt;/li&gt;&lt;li&gt;A final Transition from "Manager Review/Approval" to "Workflow Completed". We'll call this "Approved by Manager"&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Lets slap together a table to store information about all the available transitions in the system:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;--- Create table WorkflowTrans&lt;br /&gt;CREATE TABLE WorkflowTrans (&lt;br /&gt;ID INT NOT NULL,&lt;br /&gt;WorkflowID INT NOT NULL,&lt;br /&gt;FromStepID INT NOT NULL,&lt;br /&gt;ToStepID INT NOT NULL,&lt;br /&gt;Name VARCHAR2(128) NULL,&lt;br /&gt;Description VARCHAR2(2000) NULL&lt;br /&gt;);&lt;br /&gt;--- Set column ID to be Primary Key for table WorkflowTrans &lt;br /&gt;ALTER TABLE WorkflowTrans ADD CONSTRAINT WorkflowTrans_PK1 PRIMARY KEY (ID);&lt;br /&gt;--- Set foreign key pointing back to the Workflow table&lt;br /&gt;ALTER TABLE WorkflowTrans ADD CONSTRAINT WorkflowTrans_FK1 FOREIGN KEY (WorkflowID) REFERENCES Workflow(ID);&lt;br /&gt;--- Set foreign key pointing back to the starting WorkflowStep record for this trans&lt;br /&gt;ALTER TABLE WorkflowTrans ADD CONSTRAINT WorkflowTrans_FK2 FOREIGN KEY (FromStepID) REFERENCES WorkflowStep(ID);&lt;br /&gt;--- Set foreign key pointing back to the ending WorkflowStep record for this trans&lt;br /&gt;ALTER TABLE WorkflowTrans ADD CONSTRAINT WorkflowTrans_FK3 FOREIGN KEY (ToStepID) REFERENCES WorkflowStep(ID);&lt;/div&gt;&lt;br /&gt;Since a transition links one step to another, we need to link our transition to both the staring step and ending step.  Working with this table relationship, we can setup transitions to every possible step and back if we wanted to...for now, we'll stick to the 3 transitions we've already defined above. Here are the insert statements for them:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;INSERT INTO WorkflowTrans (&lt;br /&gt;ID,&lt;br /&gt;WorkflowID,&lt;br /&gt;FromStepID,&lt;br /&gt;ToStepID,&lt;br /&gt;Name,&lt;br /&gt;Description&lt;br /&gt;)VALUES(&lt;br /&gt;1,&lt;br /&gt;1,&lt;br /&gt;1,&lt;br /&gt;2,&lt;br /&gt;'Instantiate Workflow',&lt;br /&gt;'The initial transition that fires off for every new workflow.'&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;INSERT INTO WorkflowTrans (&lt;br /&gt;ID,&lt;br /&gt;WorkflowID,&lt;br /&gt;FromStepID,&lt;br /&gt;ToStepID,&lt;br /&gt;Name,&lt;br /&gt;Description&lt;br /&gt;)VALUES(&lt;br /&gt;2,&lt;br /&gt;1,&lt;br /&gt;2,&lt;br /&gt;3,&lt;br /&gt;'Submit For Manager Approval',&lt;br /&gt;'Submit the request for approval.'&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;INSERT INTO WorkflowTrans (&lt;br /&gt;ID,&lt;br /&gt;WorkflowID,&lt;br /&gt;FromStepID,&lt;br /&gt;ToStepID,&lt;br /&gt;Name,&lt;br /&gt;Description&lt;br /&gt;)VALUES(&lt;br /&gt;3,&lt;br /&gt;1,&lt;br /&gt;3,&lt;br /&gt;4,&lt;br /&gt;'Approved by Manager',&lt;br /&gt;'Approve Request.'&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;COMMIT;&lt;/div&gt;&lt;br /&gt;That's enough to get us started. With all the above SQL run, you should have a table layout that looks something like this in your DB:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_It8-g3_9vec/TE8tcen7SNI/AAAAAAAAAzc/FigDPlpqvkc/s1600/Workflow_Step_Trans_Tables2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="162" src="http://2.bp.blogspot.com/_It8-g3_9vec/TE8tcen7SNI/AAAAAAAAAzc/FigDPlpqvkc/s400/Workflow_Step_Trans_Tables2.JPG" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;In the next article in the series, &lt;a href="http://www.bryansgeekspeak.com/2010/07/custom-workflow-architecture-examining.html"&gt;Custom Workflow Architecture: Examining Workflow Data&lt;/a&gt; , I'll take a closer look at the workflow we've defined here to see how we might generate some meaningful SQL queries to generate lists of steps and transitions that will be the basis of our workflow application.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-7473246707321903457?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/7473246707321903457/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=7473246707321903457' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/7473246707321903457'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/7473246707321903457'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2010/07/custom-workflow-architecture-workflow.html' title='Custom Workflow Architecture: Workflow Steps and Transitions'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_It8-g3_9vec/TE8tcen7SNI/AAAAAAAAAzc/FigDPlpqvkc/s72-c/Workflow_Step_Trans_Tables2.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-2605605634688888700</id><published>2010-07-16T16:07:00.000-07:00</published><updated>2010-07-28T09:47:21.628-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Workflow'/><title type='text'>Custom Workflow Architecture: The Routing Table</title><content type='html'>&lt;b&gt;!!ROUGH DRAFT!!&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="sidenote"&gt;note to self...maybe instead of calling this the "Routing Table" it should be something like "Workflow Activity Logging".  I'm actually describing how to log user actions that route an item from one step to another in the workflow instance. Hmm...&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Introduction&lt;/b&gt;&lt;br /&gt;Looking back on just about every web application I’ve ever built, they all have one thing in common - they are all workflow based applications.  Every system I’ve designed has the concept of an item to be acted on - be it a web form, a file attachment, or some other set of business data - that requires set of actions to happen in order to "finalize" the item.&lt;br /&gt;&lt;br /&gt;Just think of any workflow as a simple flowchart - a start point with one or more steps drawn as boxes, each box connected to another by one or more lines with arrows showing direction (transitions) until you finally reach an end point. In any workflow, there is always a start point, an end point and at least 1 or more steps all connected by transitions.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;A Simple Workflow Example&lt;/b&gt;&lt;br /&gt;Lets take a look at an example workflow and examine a simple method for tracking workflow activity.&lt;br /&gt;&lt;br /&gt;Consider a single approval step workflow.  There are only two steps in this workflow and a handful of transitions that can take place.  Imagine we have a web form that controls the workflow - the web form allows employees at our company generate vacation requests, and allows managers to view and approve them. A flowchart diagram of our simple workflow might look like this:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://docs.google.com/drawings/pub?id=1hO45xqEJ9xs0n4DL5oR2_SP9aCYstKmF-Fkx556qM6o&amp;amp;w=785&amp;amp;h=391" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="197" src="http://docs.google.com/drawings/pub?id=1hO45xqEJ9xs0n4DL5oR2_SP9aCYstKmF-Fkx556qM6o&amp;amp;w=785&amp;amp;h=391" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Now lets think about how workflow activity will be recorded in a persistent database (in this example, we'll assume an Oracle 10g database).  Lets not worry about persisting the business data the moment (data about the vacation request and the user input via web forms), we'll just focus on the workflow and how we will store the routing history of an item - the transitions that took place, when they were performed and by whom.&lt;br /&gt;&lt;br /&gt;If we want to be able to look back and see what happened to a specific item processed by our workflow, at a minimum we need to record every action/transition that takes place in the workflow, staring with when the item was created.  We'll start with a single table to record all the transitions that take place in our workflow.  Keep in mind that the table is oversimplified on purpose, so we dont have to waste time on reference tables and the like.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;CREATE TABLE WorkflowRouting (&lt;br /&gt;ID INT NOT NULL,&lt;br /&gt;ItemName VARCHAR2(128) NULL,&lt;br /&gt;NTUsername VARCHAR2(128) NULL,&lt;br /&gt;StepName VARCHAR(128) NULL,&lt;br /&gt;ActionTaken NOT NULL,&lt;br /&gt;CreateDate TIMESTAMP DEFAULT SYSDATE&lt;br /&gt;);&lt;/div&gt;&lt;br /&gt;Now lets talk about a simple user case.  Bob Smith, an employee at our company, decides to create a vacation request using our workflow application. His manger is Jane Doe, so she will need to approve his request, as per the specifications we've already collected.&lt;br /&gt;&lt;br /&gt;Lets assume Bob will use a web form to create his request in our system.  We give Bob a link to the web form in order to start the request. We wont get into the details of the code, but lets imagine the first thing we do in the web form is ask bob what kind of request he wants to make - we present him a drop-down list of possible request types to pick from and a Submit button to create the request.  Bob picks "Vacation Request" and submits the web form.  When Bob clicks "Submit" prepossessing will take place before bob actually enters in any business data about his request.  Later, we will use more pre and post processing for each “step” in the workflow in order to track workflow activity.  Below is an example of the kind of insert we might expect to see when Bob creates his request (again, oversimplified for ease of reading).&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;--- Assume that the ID column is populated by a trigger/sequence&lt;br /&gt;INSERT INTO WorkflowRouting (&lt;br /&gt;ItemName,&lt;br /&gt;NTUsername,&lt;br /&gt;StepName,&lt;br /&gt;ActionTaken,&lt;br /&gt;CreateDate&lt;br /&gt;)VALUES(&lt;br /&gt;‘Bob Smith vacation request’,&lt;br /&gt;‘bsmith’,&lt;br /&gt;‘Initial Data Entry and Submission’,&lt;br /&gt;‘Created’,&lt;br /&gt;SYSDATE&lt;br /&gt;);&lt;br /&gt;COMMIT;&lt;/div&gt;&lt;br /&gt;So, the first routing record for Bob's request now exists in our database, so the system knows about it even though Bob still hasnt completed entering in his business data or sent the item for approval. Having that initial route record about when the item was created will become very important later when we want to build reports for the system.&lt;br /&gt;&lt;br /&gt;Next, Bob finalizes his vacation request and submits it for approval.  He submits the request by clicking a button in the web form that he’s been using to enter his vacation request data.  The web form commits the business data to the database (which we wont worry about) and then does post processing for that step, committing another record to our WorkflowRouting table as shown in the insert statement below.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;--- Assume that the ID column is populated by a trigger/sequence&lt;br /&gt;INSERT INTO WorkflowRouting (&lt;br /&gt;ItemName,&lt;br /&gt;NTUsername,&lt;br /&gt;StepName,&lt;br /&gt;ActionTaken,&lt;br /&gt;CreateDate&lt;br /&gt;)VALUES(&lt;br /&gt;‘Bob Smith vacation request’,&lt;br /&gt;‘bsmith’,&lt;br /&gt;‘Initial Data Entry and Submission’,&lt;br /&gt;‘Submitted for Approval’,&lt;br /&gt;SYSDATE&lt;br /&gt;);&lt;br /&gt;COMMIT;&lt;/div&gt;&lt;br /&gt;Note that the StepName is the same as our first route record - This is because we are still on the same step where bob is working on his request, but now we are recording that the action taken was “Submitted for Approval” rather than “Created”, and this record gets a new timestamp.  With these two database records for the item “Bob Smith vacation request”, we can now see when the item was created and when it was approved, which allows us to determine how long it took Bob to submit the action for approval.&lt;br /&gt;&lt;br /&gt;Now now that bob has submitted the item for approval, our workflow engine (more code we wont get into yet) can use the existing routing records to see that the vacation requester, Bob, completed his step and that the item should now be pending Jane’s approval, since she is his manager.  Just assume that somehow the workflow engine knows the item is pending Jane’s approval based on what we've recorded in the routing table so far.  &lt;br /&gt;&lt;br /&gt;&lt;div class="sidenote"&gt;Note: Our routing table only records information about things that have already taken place, so you wont see who the action is pending approval by in this table.  That information should be controlled by the workflow engine, which determines how one step flows to the next in the workflow.&lt;/div&gt;&lt;br /&gt;Now Jane can start working on the item.  She sees that an item is waiting for her approval, so she logs in and clicks on a link to access a web form where she can work on the item.  As soon as Jane opens the web form to work on the item, we -could- record that action to the route table.  Lets not worry about that yet, just know we could do that if we wanted to, just as we did for when Bob created the item.&lt;br /&gt;&lt;br /&gt;Jane completes her review of Bob’s vacation request and she decides to approve it.  She clicks a button in the web form, “Approve”, and the web form then writes another record to the database as shown in the insert statement below.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;--- Assume that the ID column is populated by a trigger/sequence&lt;br /&gt;INSERT INTO WorkflowRouting (&lt;br /&gt;ItemName,&lt;br /&gt;NTUsername,&lt;br /&gt;StepName,&lt;br /&gt;ActionTaken,&lt;br /&gt;CreateDate&lt;br /&gt;)VALUES(&lt;br /&gt;‘Bob Smith vacation request’,&lt;br /&gt;‘jdoe’,&lt;br /&gt;‘Manager Review’,&lt;br /&gt;‘Approved’,&lt;br /&gt;SYSDATE&lt;br /&gt;);&lt;br /&gt;COMMIT;&lt;/div&gt;&lt;br /&gt;We are still working on Bob’s vacation request, as you can see by the ItemName value which is the same as our previous two records.  Jane is now performing the action though, so we use her Active Directory username “jdoe” to identify her as the actor in this record.  The StepName value also changed because the action is now pending the manager’s approval. Finally, we record that the action that she took was “Approved” - this way we can tell the difference between a manager’s approval and the requester’s item submission for approval.&lt;br /&gt;&lt;br /&gt;At this point, we’re actually done with this example.  We’ve recorded all the actions that took place in the system that we care about, and now we have enough information to report back what happened to Bob’s vacation request.  We could then write some simple SQL queries to give us basic reports about whats happening in our system.&lt;br /&gt;&lt;br /&gt;The next post in this series, &lt;a href="http://www.bryansgeekspeak.com/2010/07/custom-workflow-architecture-workflow.html"&gt;Custom Workflow Architecture: Workflow Steps and Transitions&lt;/a&gt;, looks at a way to define the workflow completely in the database, including all of its steps and transitions, rather than using hardcoded strings.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-2605605634688888700?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/2605605634688888700/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=2605605634688888700' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/2605605634688888700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/2605605634688888700'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2010/07/custom-workflow-architecturte-routing.html' title='Custom Workflow Architecture: The Routing Table'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-8442005901442851876</id><published>2010-06-18T10:50:00.000-07:00</published><updated>2010-07-09T12:48:17.902-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='TFS 2010'/><title type='text'>Team Foundation Server 2010 - Install and Upgrade Info</title><content type='html'>Starting point for install/config guide&lt;br /&gt;&lt;br /&gt;Resources:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://sharepoint.ssw.com.au/Standards/TFS/RulesToBetterTFS2010Migration/Pages/default.aspx"&gt;http://sharepoint.ssw.com.au/Standards/TFS/RulesToBetterTFS2010Migration/Pages/default.aspx&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;FamilyID=cf13ea45-d17b-4edc-8e6c-6c5b208ec54d"&gt;Visual Studio Team System 2008 Service Pack 1 Forward Compatibility Update for Team Foundation Server 2010&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://amzn.com/0470484268"&gt;Professional Application Lifecycle Management with Visual Studio 2010 (Wrox Programmer to Programmer) [Paperback]&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-8442005901442851876?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/8442005901442851876/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=8442005901442851876' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/8442005901442851876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/8442005901442851876'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2010/06/team-foundation-server-2010-install-and.html' title='Team Foundation Server 2010 - Install and Upgrade Info'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-1391008797745698901</id><published>2010-05-10T12:55:00.001-07:00</published><updated>2010-05-10T12:57:46.642-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>Refresh a Materialized View in Oracle</title><content type='html'>To refresh an oracle materialized view, run the following command:&lt;br /&gt;&lt;div class="code"&gt;execute DBMS_SNAPSHOT.REFRESH( 'MV','C');&lt;br /&gt;&lt;/div&gt;where "MV" is the view name&lt;br /&gt;&lt;br /&gt;(this is a re-post - trying to get it to show up in google search &gt;_&lt;;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-1391008797745698901?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/1391008797745698901/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=1391008797745698901' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/1391008797745698901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/1391008797745698901'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2010/05/refresh-materialized-view-in-oracle.html' title='Refresh a Materialized View in Oracle'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-3296898150292056321</id><published>2010-03-17T09:46:00.000-07:00</published><updated>2010-03-17T09:46:03.295-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><category scheme='http://www.blogger.com/atom/ns#' term='MOSS'/><title type='text'>SharePoint 2007 - Troubleshooting error "Unable to add selected web part(s)"</title><content type='html'>Recently one of my users ran into an issue where even with "Full Access" permissions to a SharePoint site they were seeing the error message below when trying to add a content editor web part to a SharePoint page they had created from the web interface.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_It8-g3_9vec/S6EF9fIbP5I/AAAAAAAAAzE/7VTeLycHKh4/s1600-h/WebPartError.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_It8-g3_9vec/S6EF9fIbP5I/AAAAAAAAAzE/7VTeLycHKh4/s320/WebPartError.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;At first, I was thinking it was a permissions issue. Then my buddy Shawn pointed me to the url. I had had not been able to reproduce the issue via the HTTP url, but the user was having the problem while accessing the site via HTTPS.  I gave it a try using an admin account via HTTPS and ended up seeing the same problem.&lt;br /&gt;&lt;br /&gt;Adding an alternate access mapping for the HTTPS url fixed the issue. I went with an "internet" zone access mapping for the HTTPS url, but I dont think it matters what zone you use in this case.  So when you decide to allow HTTPS, dont forget to add an alternate mapping for it in the SharePoint central admin!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-3296898150292056321?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/3296898150292056321/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=3296898150292056321' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/3296898150292056321'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/3296898150292056321'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2010/03/sharepoint-2007-troubleshooting-error.html' title='SharePoint 2007 - Troubleshooting error &quot;Unable to add selected web part(s)&quot;'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_It8-g3_9vec/S6EF9fIbP5I/AAAAAAAAAzE/7VTeLycHKh4/s72-c/WebPartError.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-5875245960208203307</id><published>2010-02-18T14:19:00.000-08:00</published><updated>2010-02-18T14:19:53.137-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><title type='text'>SharePoint 2007 - Import Fails With Message "Cannot import site. The exported site is based on the template SPS#0 but the destination site is based on the template STS#0"</title><content type='html'>&lt;div class="code"&gt;Cannot import site. The exported site is based on the template SPS#0 but the destination site is based on the template STS#0. You can import sites only into sites that are based on same template as the exported site.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;If you are using stsadm.exe to do an export/import and you run into an error similar to that shown above, take a look at the template you used to create the destination site collection.  If you used something other than the "Blank Site" template, that's probably the problem.  Recreate your Site Collection using the Blank Site template and give the import another go.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-5875245960208203307?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/5875245960208203307/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=5875245960208203307' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/5875245960208203307'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/5875245960208203307'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2010/02/sharepoint-2007-import-fails-with.html' title='SharePoint 2007 - Import Fails With Message &quot;Cannot import site. The exported site is based on the template SPS#0 but the destination site is based on the template STS#0&quot;'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-5653730524594617734</id><published>2010-02-05T11:04:00.000-08:00</published><updated>2011-05-19T11:51:49.477-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='HTML'/><title type='text'>HTML5 Notes</title><content type='html'>&lt;b&gt;HTML5 References&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;!--&lt;li&gt;&lt;a href="http://www.moopoint.com"&gt;MooPoint.com&lt;/a&gt; - One of my simple test sites rewritten using HTML5 - no images or DHTML (javascript is used in some cases to fix HTML 5 rendering issues in IE browsers though)&lt;/li&gt;--&gt;&lt;li&gt;&lt;a href="http://www.smashingmagazine.com/2009/08/04/designing-a-html-5-layout-from-scratch/"&gt;http://www.smashingmagazine.com/2009/08/04/designing-a-html-5-layout-from-scratch/&lt;/a&gt; - the blog post for HTML5 ideas&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.ibm.com/developerworks/library/x-html5/"&gt;http://www.ibm.com/developerworks/library/x-html5/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-5653730524594617734?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/5653730524594617734/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=5653730524594617734' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/5653730524594617734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/5653730524594617734'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2010/02/html5-notes.html' title='HTML5 Notes'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-6984912802020344094</id><published>2010-01-11T13:40:00.000-08:00</published><updated>2010-11-24T14:22:38.426-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Kerberos'/><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><category scheme='http://www.blogger.com/atom/ns#' term='Teamworks'/><title type='text'>Enabling Kerberos in a Windows Domain for SharePoint 2007 and Teamworks</title><content type='html'>Notes for configuring Kerberos on a windows 2000/2003 domain for SharePoint 2007 farms.&lt;br /&gt;&lt;br /&gt;&lt;div class="sidenote"&gt;For a list of gotchas in a SharePoint 2010/Windows server 2008 setup, check out this post: &lt;a href="http://www.bryansgeekspeak.com/2010/11/sharepoint-2010-on-windows-server-2008.html"&gt;http://www.bryansgeekspeak.com/2010/11/sharepoint-2010-on-windows-server-2008.html&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;This post explains how I setup a sandbox network configured specifically for testing SharePoint 2007 and Teamworks 6.2.2 using Kerberos authentication on a windows domain.  &lt;br /&gt;&lt;br /&gt;I used a 5 server setup in this example, including a SharePoint farm (a web application server and a sql server), a teamworks server farm (a teamworks application server and an oracle server) and a primary domain controller.  The goal, as shown in the diagram below, is allow domain users to auto-login to to the SharePoint portal.  From the SharePoint portal we want to be able to drop the Teamworks for SharePoint web part into a SharePoint page, set it to use integrated authentication in order to pass along the user's SharePoint credentials along to the Teamworks server.  The end result is a SSO auto login for the user.  They should only need to login to their workstation and not see a login prompt in their browser for access to the portal or Teamworks.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_It8-g3_9vec/S0uSRqH6LOI/AAAAAAAAAwQ/zlDeWmpEy00/s1600-h/KRBDomainDiagram.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_It8-g3_9vec/S0uSRqH6LOI/AAAAAAAAAwQ/zlDeWmpEy00/s320/KRBDomainDiagram.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;To start, you'll need to get to a point where you have all the servers up and running as shown in the model.  The server configuration is outlined below, before I began configuring Kerberos.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Server Software Configuration Prerequisite&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;KDCPDC&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Microsoft Windows 2003 R2 Enterprise Edition&lt;/li&gt;&lt;li&gt;Configured as Primary Domain Controller&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;KDCSQL2008&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Microsoft Windows 2003 R2 Enterprise Edition&lt;/li&gt;&lt;li&gt;MS SQL Server 2008 (2005 works just as well) patched to the latest version, configured for use in your sharepoint farm.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;KDCMOSS&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Microsoft Windows 2003 R2 Enterprise Edition&lt;/li&gt;&lt;li&gt;MOSS SharePoint 2007 patched with SP2, configured using custom user accounts. (note that I've heard kerberos is much easier to configure if you use the default service accounts rather than creating custom accounts)&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;KDCOracle&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Microsoft Windows 2003 R2 Enterprise Edition&lt;/li&gt;&lt;li&gt;Oracle Server 10.2.0.4 configured for use with Teamworks 6.2.2&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;KDCTW&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Microsoft Windows 2003 R2 Enterprise Edition&lt;/li&gt;&lt;li&gt;Teamworks 6.2.2 Enterprise Edition&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;br /&gt;With the above server configuration, we then need the names of the service accounts for Teamworks and the SharePoint web application pool where the teamworks web part will be used.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;th&gt;Account Name&lt;br /&gt;&lt;/th&gt; &lt;th&gt;Description&lt;br /&gt;&lt;/th&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;KRB\MOSSAppPool&lt;br /&gt;&lt;/td&gt; &lt;td&gt;SharePoint Web Application Pool Account&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;KRB\Teamworks&lt;br /&gt;&lt;/td&gt; &lt;td&gt;Teamworks Service Account&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Finally, we need to know the fully qualified URLs for each of our web sites - the SharePoint URL and the Teamworks Portal url.&amp;nbsp; In this case, I added DNS records on the PDC for these URLS:&lt;br /&gt;&lt;br /&gt;&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt; &lt;th&gt;URL&lt;br /&gt;&lt;/th&gt; &lt;th&gt;Description&lt;br /&gt;&lt;/th&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;www.krb.com&lt;br /&gt;&lt;/td&gt; &lt;td&gt;The sharepoint site (remember, only use the PDC as the DNS server!)&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;tr&gt; &lt;td&gt;krbtw.krb.com&lt;br /&gt;&lt;/td&gt; &lt;td&gt;Teamworks Portal URL&lt;br /&gt;&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;With all the above information, we can now start configuring kerberos.&lt;br /&gt;&lt;br /&gt;&lt;h1&gt;Part 1 - Service Principal Names (SPN)&lt;/h1&gt;With delegation enabled, we need to map SPNs for the service accounts, to show kerberos that we allow trust those accounts to perform trusted authentication. You need to have the windows 2003 server support tools installed in order to run this command.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;c:&amp;gt;setspn -A HTTP/www.krb.com KRB\MossAppPool&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="code"&gt;c:&amp;gt;setspn -A HTTP/krbtw.krb.com@KRB.COM KRB\Teamworks&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;When you are done, you can use setspn to list spn mappings for machines and accounts on your domain, which should look similar to what is shown below.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_It8-g3_9vec/S0uy1pttT6I/AAAAAAAAAxA/YJXz3EhDmSU/s1600-h/Part2-setspn_list.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_It8-g3_9vec/S0uy1pttT6I/AAAAAAAAAxA/YJXz3EhDmSU/s320/Part2-setspn_list.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;h1&gt;Part 2 - AD Account Delegation&lt;/h1&gt;Enable Delegation rights in AD for the SharePoint computer account, the SharePoint application pool account and the Teamworks service account.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Computer Accounts&lt;/h2&gt;&lt;br /&gt;&lt;div class="sidenote"&gt;Note that these examples are for a domain set to a functional level of windows 2000.  If your domain functional level is set to windows 2003, delegation works differently.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;We only need to configure the SharePoint computer account.  The Teamworks server uses a java server application, which will require a different method for enabling kerberos trust/delegation, so dont enable trust delegation for the Teamworks computer account.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;With Domain Functional Level Set to Windows 2000 &lt;br /&gt;&lt;/h3&gt;&lt;br /&gt;For the computer account KRBMOSS, check the option "Trust computer for delegation".&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_It8-g3_9vec/S0uersQ9shI/AAAAAAAAAwg/qf3uew3B-_0/s1600-h/part1-computer_accounts.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_It8-g3_9vec/S0uersQ9shI/AAAAAAAAAwg/qf3uew3B-_0/s320/part1-computer_accounts.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_It8-g3_9vec/S0uenNv9VhI/AAAAAAAAAwY/gmxG-M-f0Lo/s1600-h/part1-sharepoint_computer_account.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_It8-g3_9vec/S0uenNv9VhI/AAAAAAAAAwY/gmxG-M-f0Lo/s320/part1-sharepoint_computer_account.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;With Domain Functional Level Set to Windows 2003&lt;br /&gt;&lt;/h3&gt;&lt;br /&gt;For the computer account KRBMOSS, goto the "Delegation" tab, select the option "Trust this computer for delegation to the specified services only" and "User kerberos only".  Then add the HTTP service, with a computer account of the sharepoint web site.  To add the url of the sharepoint web site, you need to click "Add.." and select the SharePoint application pool user account, where we mapped an SPN for that account to the SharePoint site URL.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_It8-g3_9vec/S1Dul0TVc5I/AAAAAAAAAys/AqWwQDAuDy8/s1600-h/Part2-krbmoss_constrained_delegation.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_It8-g3_9vec/S1Dul0TVc5I/AAAAAAAAAys/AqWwQDAuDy8/s320/Part2-krbmoss_constrained_delegation.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Enable Delegation for Service Accounts&lt;/h2&gt;&lt;br /&gt;&lt;div class="sidenote"&gt;Note that constrained delegation works differently. Changes need to be made under the "Delegation" tab in the account properties.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;h3&gt;With Domain Functional Level Set to Windows 2000&lt;/h3&gt;&lt;br /&gt;Check the option "Account is trusted for delegation" for both service accounts. In addition, the Teamworks service account needs the option "Use DES encryption types for this account" checked in order to support Teamworks (I believe this is a java server kerberos requirement).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_It8-g3_9vec/S0ug9WWjMyI/AAAAAAAAAwo/dPezJ19omio/s1600-h/part1-service_account.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_It8-g3_9vec/S0ug9WWjMyI/AAAAAAAAAwo/dPezJ19omio/s320/part1-service_account.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_It8-g3_9vec/S0uhAjxyrCI/AAAAAAAAAww/85Mvee2u5eE/s1600-h/part1-sharepoint_service_account.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_It8-g3_9vec/S0uhAjxyrCI/AAAAAAAAAww/85Mvee2u5eE/s320/part1-sharepoint_service_account.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_It8-g3_9vec/S0uhF0S1k4I/AAAAAAAAAw4/xCsdQhEVEOc/s1600-h/part1-teamworks_service_account.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_It8-g3_9vec/S0uhF0S1k4I/AAAAAAAAAw4/xCsdQhEVEOc/s320/part1-teamworks_service_account.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;h3&gt;With Domain Functional Level Set to Windows 2003&lt;br /&gt;&lt;/h3&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_It8-g3_9vec/S1Dzdo327JI/AAAAAAAAAy0/YDLosNuCRao/s1600-h/Part2-mossapppool_constrained_delegation.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_It8-g3_9vec/S1Dzdo327JI/AAAAAAAAAy0/YDLosNuCRao/s320/Part2-mossapppool_constrained_delegation.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;h1&gt;Part 3 - Enable Kerberos in SharePoint&lt;/h1&gt;Now the easy part! Log into the SharePoint Central Administration site.  Under "Application Management" goto the "Authentication Providers" page.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_It8-g3_9vec/S0u0NEyjeqI/AAAAAAAAAxI/-qdGfFJrliQ/s1600-h/part3-sharepoint_auth_providers.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_It8-g3_9vec/S0u0NEyjeqI/AAAAAAAAAxI/-qdGfFJrliQ/s320/part3-sharepoint_auth_providers.JPG" /&gt;&lt;/a&gt;&amp;nbsp; &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Select correct web application from teh "Web Application" drop down, then click the "Default" zone.&amp;nbsp; Check "Negotiate (kerberos)" under the heading "IIS Authentication Settings" and click "Save".&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_It8-g3_9vec/S0u25c5Vr_I/AAAAAAAAAxQ/MYUeAMiYIos/s1600-h/part3-sharepoint_auth_provider_negotiate.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_It8-g3_9vec/S0u25c5Vr_I/AAAAAAAAAxQ/MYUeAMiYIos/s320/part3-sharepoint_auth_provider_negotiate.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;You'll get a confirmation windows telling you that there are other steps required as domain administrator to enable kerberos.&amp;nbsp; You can ignore that, we did that in the previous steps by setting the SPNs and configuring delegation.&amp;nbsp; Be sure to execute an "iisreset" command at the command prompt after enabling negotiate.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;c:\&amp;gt;iisreset /noforce&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;And that's all there is to it for the SharePoint side of things.  You can confirm Kerberos is working by logging into the SharePoint site (http://www.krb.com).  Then check the event viewer's security logs on the SharePoint server. You should see a 540 event for the user you hit the site as, with a message indicating kerberos authentication was used, similar to that shown below.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_It8-g3_9vec/S0u5Nl1T2rI/AAAAAAAAAxg/9OKJfRIeYVg/s1600-h/part3-sharepoint_admin_login.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_It8-g3_9vec/S0u5Nl1T2rI/AAAAAAAAAxg/9OKJfRIeYVg/s320/part3-sharepoint_admin_login.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_It8-g3_9vec/S0u47pcjqLI/AAAAAAAAAxY/7PQTlUxdWiw/s1600-h/part3-sharepoint_security_log.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_It8-g3_9vec/S0u47pcjqLI/AAAAAAAAAxY/7PQTlUxdWiw/s320/part3-sharepoint_security_log.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h1&gt;Part 4 - Enable Kerberos in Teamworks&lt;/h1&gt;&lt;br /&gt;Start by shutting down your Teamworks Process Server. It's also a good idea to delete all the log files before you start making changes.  In this example, log files are in "c:\Teamworks\process-server\logs\".&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Create Kerberos Config File for Teamworks&lt;/h2&gt;&lt;br /&gt;First, we need to create a kerberos config file on the windows server which Teamworks/Jboss can find, in order contact the KDC properly.  The Teamworks SSO documentation explains that Teamworks/Jboss is already configured to look for a file called krb5.ini in the path "C:\winnt\krb5.ini".  The content of that text file should look like this, for our example KRB domain:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;[libdefaults]&lt;br /&gt;default_realm = KRB.COM&lt;br /&gt;default_tkt_enctypes = des-cbc-crc&lt;br /&gt;default_tgs_enctypes = des-cbc-crc&lt;br /&gt;ticket_lifetime = 600&lt;br /&gt;[realms]&lt;br /&gt;KRB.COM = {&lt;br /&gt;kdc = KRBPDC&lt;br /&gt;admin_server = KRBPDC&lt;br /&gt;default_domain = krb.com&lt;br /&gt;}&lt;br /&gt;[domain_realm]&lt;br /&gt;.domain.com = KRB.COM&lt;br /&gt;[appdefaults]&lt;br /&gt;autologin = true&lt;br /&gt;forward = true&lt;br /&gt;forwardable = true&lt;br /&gt;encrypt = true&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Once you've created the file "C:\winnt\krb5.ini" with the above text, you can continue to the next step.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Create Kerberos Token with KTPASS &lt;br /&gt;&lt;/h2&gt;&lt;br /&gt;As the domain administrator, login to the Teamworks server (KRBTW) and run the following command from the command prompt:&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;ktpass -out sso.keytab -princ HTTP/krbtw.krb.com@KRB.COM -pass MYPASSWORD -mapuser KRB\Teamworks -crypto DES-CBC-CRC -ptype KRB5_NT_PRINCIPAL&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Be sure to replace "MYPASSWORD" with the password of your KRB\Teamworks account.  &lt;br /&gt;&lt;br /&gt;Note that the "-princ" value matches the SPN we created earlier for the Teamworks service account.&lt;br /&gt;&lt;br /&gt;If the command is successful, the file "sso.keytab" will be created in your current directory.  Copy that file to your Teamworks installation directory.  In this example, I copied the file to "c:\Teamworks\sso.keytab".&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Generate Kerberos Ticket for Teamworks Account&lt;/h2&gt;&lt;br /&gt;Login to the Teamworks server (KRBTW) as the Teamworks service account (KRB\Teamworks) and run the following command from a command prompt, again assuming that you installed Teamworks to "c:\Teamworks":&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;c:\Teamworks\java\bin\kinit.exe -k -t c:\Teamworks\sso.keytab HTTP/krbtw.krb.com@KRB.COM&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;If the kinit command is successful, it will create a kerberos ticket in the following path which will then be used for kerberos authentication by the Teamworks service from now on.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;C:\Documents and Settings\Teamworks\krb5cc_sso&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;h2&gt;Turn On Kerberos in Teamworks&lt;/h2&gt;&lt;br /&gt;As described in the Teamworks SSO documentation, we now need to enable kerberos in Teamworks.  In this example, we also enable KRB domain users and groups within Teamworks, so that we can manage Teamworks accounts through AD.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;c:\Teamworks\process-server\conf\login-config.xml&lt;/li&gt;&lt;/ul&gt;Change the &amp;lt;application-policy name="other"&amp;gt; element to match the following. Be sure to change "MYPASSWORD" and "ENCRYPTEDPASSWORD" to values that work for your accounts.  For information on how to encrypt passwords for Teamworks, refer to the Teamworks install documentation from Lombardi.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&amp;lt;application-policy name="other"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;authentication&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- Uncomment and configure for SSO autologin --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;login-module code="org.jboss.security.auth.NegotiateLoginModule" flag="optional"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;module-option name="loadBalance"&amp;gt;false&amp;lt;/module-option&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;module-option name="domainController"&amp;gt;KRBPDC&amp;lt;/module-option&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;module-option name="defaultDomain"&amp;gt;KRB&amp;lt;/module-option&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;module-option name="java.security.krb5.realm"&amp;gt;KRB.COM&amp;lt;/module-option&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;module-option name="jcifs.http.enableNegotiate"&amp;gt;true&amp;lt;/module-option&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;module-option name="jcifs.spnego.servicePrincipal"&amp;gt;HTTP/krbtw.krb.com@KRB.COM&amp;lt;/module-option&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;module-option name="jcifs.spnego.servicePassword"&amp;gt;ENCRYPTEDPASSWORD&amp;lt;/module-option&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/login-module&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;login-module code="com.lombardisoftware.security.provider.authentication.jboss.TWInternalLoginModuleImpl" flag="optional"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;module-option name="password-stacking"&amp;gt;useFirstPass&amp;lt;/module-option&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/login-module&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- Example Active Directory LDAP config --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;login-module code="org.jboss.security.auth.spi.LdapExtLoginModule" flag="optional" &amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;module-option name="java.naming.provider.url"&amp;gt;ldap://KRBPDC:389/&amp;lt;/module-option&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;module-option name="bindDN"&amp;gt;cn=Teamworks,CN=Users,DC=KRB,DC=com&amp;lt;/module-option&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;module-option name="bindCredential"&amp;gt;MYPASSWORD&amp;lt;/module-option&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;module-option name="baseCtxDN"&amp;gt;cn=Users,DC=KRB,DC=com&amp;lt;/module-option&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;module-option name="baseFilter"&amp;gt;(sAMAccountName={0})&amp;lt;/module-option&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;module-option name="roleFilter"&amp;gt;(member={1})&amp;lt;/module-option&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;module-option name="rolesCtxDN"&amp;gt;cn=Users,DC=KRB,DC=com&amp;lt;/module-option&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;module-option name="roleAttributeID"&amp;gt;cn&amp;lt;/module-option&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;module-option name="roleAttributeIsDN"&amp;gt;false&amp;lt;/module-option&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;module-option name="roleNameAttributeID"&amp;gt;cn&amp;lt;/module-option&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;module-option name="password-stacking"&amp;gt;useFirstPass&amp;lt;/module-option&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;module-option name="allowEmptyPasswords"&amp;gt;false&amp;lt;/module-option&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- Teamworks UserOrg config. --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- Filter for user objects --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;module-option name="twUserFilter"&amp;gt;(objectClass=person)&amp;lt;/module-option&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- Filter for group objects --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;module-option name="twGroupFilter"&amp;gt;(objectClass=group)&amp;lt;/module-option&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- Attribute in LDAP that contains the name of a user --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;module-option name="twUserNameAttribute"&amp;gt;sAMAccountName&amp;lt;/module-option&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- Attribute in LDAP that contains the PrimaryGroupID of a user (omit this option if no such attribute exists) --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;module-option name="twUserPrimaryGroupAttribute"&amp;gt;primaryGroupID&amp;lt;/module-option&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- Attribute in LDAP that contains the name of a group --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;module-option name="twGroupNameAttribute"&amp;gt;cn&amp;lt;/module-option&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- Attribute in LDAP that contains the distinguishedname of a group (used for resolving nested groups) --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;module-option name="twGroupDNAttribute"&amp;gt;distinguishedName&amp;lt;/module-option&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- Attribute in LDAP that contains the primaryGroupToken of a group (omit this option if no such attribute exists) --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;module-option name="twGroupPrimaryGroupTokenAttribute"&amp;gt;primaryGroupToken&amp;lt;/module-option&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- Attribute in LDAP that contains the description of a user --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;module-option name="twUserDescriptionAttribute"&amp;gt;cn&amp;lt;/module-option&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- Attribute in LDAP that contains the description of a group --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;module-option name="twGroupDescriptionAttribute"&amp;gt;description&amp;lt;/module-option&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- Attribute in LDAP that contains the members of a group --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;module-option name="twGroupMemberAttribute"&amp;gt;member&amp;lt;/module-option&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/login-module&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;login-module code="com.lombardisoftware.security.provider.authentication.jboss.TWAuthenticatedRoleLoginModuleImpl" flag="required"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;module-option name="authenticatedRole"&amp;gt;twuser&amp;lt;/module-option&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/login-module&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;login-module code="org.jboss.security.ClientLoginModule" flag="required"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;module-option name="password-stacking"&amp;gt;useFirstPass&amp;lt;/module-option&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;module-option name="restore-login-identity"&amp;gt;true&amp;lt;/module-option&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/login-module&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/authentication&amp;gt;&lt;br /&gt;&amp;lt;/application-policy&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;c:\Teamworks\process-server\conf\jboss-service.xml&lt;/li&gt;&lt;/ul&gt;Uncomment the AdvancedWebCallbackHandler as shown.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&amp;lt;!-- Uncomment for SSO auto-login --&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;attribute name="CallbackHandlerClassName"&amp;gt;org.jboss.security.auth.AdvancedWebCallbackHandler&amp;lt;/attribute&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;c:\Teamworks\process-server\applications\portal.war\WEB-INF\context.xml&lt;/li&gt;&lt;/ul&gt;Modify to match the following code.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&amp;lt;Context&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- uncomment and configure appropriately for SSO autologin --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Valve className="org.jboss.security.auth.HttpServletRequestResponseValve"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; domainName="KRB"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; domainControllerAddress="KRBPDC"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; loadBalance="false"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; krbServicePrincipalName="HTTP/krbtw.krb.com@KRB.COM"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; krbServicePrincipalPassword="ENCRYPTEDPASSWORD"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; krbRealm="KRB.COM"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; useNegotiate="true"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; useNtlm="false"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; useBasic="false"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; basicRealm="TWRealm"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; userValidatorClass="com.lombardisoftware.userorg.JBossAutologinValidator"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Valve className="org.apache.catalina.authenticator.FormAuthenticator" characterEncoding="UTF-8" /&amp;gt;&lt;br /&gt;&amp;lt;/Context&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;c:\Teamworks\process-server\applications\teamworks.ear\teamworks.war\WEB-INF\context.xml&lt;/li&gt;&lt;/ul&gt;Modify to match the following code.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&amp;lt;Context&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- uncomment and configure appropriately for SSO autologin --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Valve className="org.jboss.security.auth.HttpServletRequestResponseValve"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; domainName="KRB"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; domainControllerAddress="KRBPDC"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; loadBalance="false"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; krbServicePrincipalName="HTTP/krbtw.krb.com@KRB.COM"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; krbServicePrincipalPassword="ENCRYPTEDPASSWORD"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; krbRealm="KRB.COM"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; useNegotiate="true"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; useNtlm="false"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; useBasic="false"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; basicRealm="TWRealm"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; userValidatorClass="com.lombardisoftware.userorg.JBossAutologinValidator"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Valve className="org.apache.catalina.authenticator.FormAuthenticator" characterEncoding="UTF-8" /&amp;gt;&lt;br /&gt;&amp;lt;/Context&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;c:\Teamworks\process-server\applications\webapi.war\WEB-INF\context.xml&lt;/li&gt;&lt;/ul&gt;Modify to match the following code.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&amp;lt;Context&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;!-- uncomment and configure appropriately for SSO autologin --&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Valve className="org.jboss.security.auth.HttpServletRequestResponseValve"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; domainName="KRB"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; domainControllerAddress="KRBPDC"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; loadBalance="false"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; krbServicePrincipalName="HTTP/krbtw.krb.com@KRB.COM"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; krbServicePrincipalPassword="ENCRYPTEDPASSWORD"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; krbRealm="KRB.COM"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; useNegotiate="true"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; useNtlm="false"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; useBasic="true"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; basicRealm="TWRealm"&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; userValidatorClass="com.lombardisoftware.userorg.JBossAutologinValidator"/&amp;gt;&lt;br /&gt;&amp;lt;/Context&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Thats the last of the Teamworks configuration changes.  Restart your process server and check the logs to confirm there are no errors.  Next, you will want to login to the teamworks admin site (http:\\krbtw.krb.com\teamworks) as tw_admin to confirm AD groups are visible to Teamworks.  From the Teamworks admin portal, go to the "Maintain Logical Roles" page. You should see your domain groups populating the "Available Roles" box as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_It8-g3_9vec/S0y3uF3nZuI/AAAAAAAAAxo/Rs3aTs7hqog/s1600-h/part4-confirm_ad_groups_in_teamworks.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_It8-g3_9vec/S0y3uF3nZuI/AAAAAAAAAxo/Rs3aTs7hqog/s320/part4-confirm_ad_groups_in_teamworks.JPG" /&gt;&lt;/a&gt;&amp;nbsp; &lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Once you've confirmed groups are showing up properly, try logging in to the portal site from another computer as a domain user using IE.  Be sure to add the url "krbtw.krb.com" to the browser's Local Intranet zone first, to confirm that you are logging in via SSO\Kerberos. You'll know it's working if you see the "Attempting auto-login" screen flash briefly (shown in the screenshot below) before dumping you into the Teamworks portal.  If you get a windows password prompt, of if you get the Teamworks form password prompt, you'll know you've hit a problem.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_It8-g3_9vec/S0y5Eo6YuTI/AAAAAAAAAxw/1j_rwkdu9aU/s1600-h/part4-teamworks_autologin_screen.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_It8-g3_9vec/S0y5Eo6YuTI/AAAAAAAAAxw/1j_rwkdu9aU/s320/part4-teamworks_autologin_screen.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h1&gt;Part 5 - Install Teamworks Web Part&lt;/h1&gt;&lt;br /&gt;&lt;div class="sidenote"&gt;For this example, we will assume the IIS directory path for the web application is located here "c:\Inetpub\wwwroot\wss\VirtualDirectories\80\"&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;h2&gt;Run Teamworks for SharePoint Installer&lt;/h2&gt;&lt;br /&gt;I ran the installer as the SharePoint farm administrator. I typically use the same account that was used to run the SharePoint installer and the SharePoint configuration wizard.  &lt;br /&gt;&lt;br /&gt;&lt;div class="sidenote"&gt;I haven't confirmed this, but there seem to be cases where the Teamworks Site Templates in SharePoint are not available, and I think it may have to do with the account used to run the installer.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;The SharePoint for Teamworks installer is fairly self explanatory. You need to know the URL of your teamworks server (and the port used for web access, if it is not port 80).  I always choose -not- to let the installer modify any configuration files because of several possible bugs with the installer. I feel its safer to manually perform these steps, as shown in this post.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Move Teamworks Web Part DLLs to Web Application Bin&lt;/h2&gt;&lt;br /&gt;On the SharePoint server (KRBMOSS), search for the Teamworks Web Part assemblies and copy them to the web application bin directory, so that your web application can actually use them.  The version of Teamworks for SharePoint I am using installs the assemblies to c:\windows. Both files that need to be copied from&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;c:\windows\Lombardi.Server.WebParts.dll&lt;/li&gt;&lt;li&gt;c:\windows\Lombardi.Server.WebParts.Portal.dll&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;to&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;c:\Inetpub\wwwroot\wss\VirtualDirectories\80\bin\Lombardi.Server.WebParts.dll&lt;/li&gt;&lt;li&gt;c:\Inetpub\wwwroot\wss\VirtualDirectories\80\bin\Lombardi.Server.WebParts.Portal.dll&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class="sidenote"&gt;This step should not be necessary.  This seems to be a bug with the version of the Teamworks for SharePoint installer that I'm using. One of these days I'll get around to asking Lombardi Teamworks support about it.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;h2&gt;Modify Web Application web.config File&lt;/h2&gt;&lt;br /&gt;For the next few steps in this example, we are editing the following file for our web application.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;c:\Inetpub\wwwroot\wss\VirtualDirectories\80\web.config&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;h3&gt;Add Teamworks Web Part Assemblies to Safe Controls&lt;/h3&gt;&lt;br /&gt;In web.config, add the Teamworks assemblies as safe controls.&lt;br /&gt;&lt;br /&gt;This may change as new versions of the Teamworks for Sharepoint assemblies are released. You may need to confirm the version number and public key token for yourself to get this part working.  Check with Lombardi support if you get stuck on this.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&amp;lt;SafeControls&amp;gt;&lt;br /&gt;...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;SafeControl Assembly="Lombardi.Server.WebParts, Version=1.1.74.0, Culture=neutral, PublicKeyToken=6a9d7f68474317de" Namespace="Lombardi.Server.WebParts" TypeName="*" Safe="True" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;SafeControl Assembly="Lombardi.Server.WebParts.Portal, Version=1.1.74.0, Culture=neutral, PublicKeyToken=b45d0da702028bb7" Namespace="Lombardi.Server.WebParts.Portal" TypeName="*" Safe="True" /&amp;gt;&lt;br /&gt;&amp;lt;/SafeControls&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="sidenote"&gt;I believe this is also a bug with the installer.  I would think the installer should create these SafeControl entries for you in web.config since the installer does not tell you the version number or PublicKeyToken of the assemblies.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;h3&gt;Set Trust Level&lt;/h3&gt;&lt;br /&gt;In web.config, you will need to set the trust level to something that will work for the Teamworks assemblies.  For testing, I simply set the trust level to "full" as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&amp;lt;trust level="Full" originUrl="" /&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;h2&gt;Configure SharePoint Site to Allow Teamworks Web Parts&lt;/h2&gt;&lt;br /&gt;Login to the sharepoint site as an administrator, then go to the site collection root and add the Lombardi Teamworks Web Parts to the Web Part gallery.&lt;br /&gt;&lt;br /&gt;From the site collection settings page, click "Web Parts" under "Galleries".&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_It8-g3_9vec/S0zNfW5bd-I/AAAAAAAAAx4/4QbGETahco0/s1600-h/part5-teamworks_webparts_gallery.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_It8-g3_9vec/S0zNfW5bd-I/AAAAAAAAAx4/4QbGETahco0/s320/part5-teamworks_webparts_gallery.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Click the "New" button in the Web Part Gallery list page.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&amp;nbsp;&lt;a href="http://4.bp.blogspot.com/_It8-g3_9vec/S0zNwhkv-CI/AAAAAAAAAyA/V9z7G13Bc3E/s1600-h/part5-teamworks_webparts_gallery2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_It8-g3_9vec/S0zNwhkv-CI/AAAAAAAAAyA/V9z7G13Bc3E/s320/part5-teamworks_webparts_gallery2.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Check the box next to each Lombardi.* Web Part, then click "Populate Gallery" to make them available in the site collection for use.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&amp;nbsp;&lt;a href="http://3.bp.blogspot.com/_It8-g3_9vec/S0zNz7nFWVI/AAAAAAAAAyI/5ZAKUgREVxc/s1600-h/part5-teamworks_webparts_gallery3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_It8-g3_9vec/S0zNz7nFWVI/AAAAAAAAAyI/5ZAKUgREVxc/s320/part5-teamworks_webparts_gallery3.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;h2&gt;Confirm Integrated Authentication Works for Web Part&lt;/h2&gt;&lt;br /&gt;From a page of your site, edit the page and add the TeamworksSavedSearch Web Part to the page.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_It8-g3_9vec/S0zc7jPPuNI/AAAAAAAAAyQ/OOmiSk0FPwg/s1600-h/part5-add_teamworks_webpart_1.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_It8-g3_9vec/S0zc7jPPuNI/AAAAAAAAAyQ/OOmiSk0FPwg/s320/part5-add_teamworks_webpart_1.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Configure the Web Part for Integrated Authentication Mode.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_It8-g3_9vec/S0zdSe98c2I/AAAAAAAAAyY/cXz9o0vuwOo/s1600-h/part5-add_teamworks_webpart_2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_It8-g3_9vec/S0zdSe98c2I/AAAAAAAAAyY/cXz9o0vuwOo/s320/part5-add_teamworks_webpart_2.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;If kerberos is working properly, you should see results similar to the following when you click "Apply" or "Ok" after configuring the Web Part.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_It8-g3_9vec/S0zdkdjvFdI/AAAAAAAAAyg/FXYL1RNwRXA/s1600-h/part5-add_teamworks_webpart_3.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_It8-g3_9vec/S0zdkdjvFdI/AAAAAAAAAyg/FXYL1RNwRXA/s320/part5-add_teamworks_webpart_3.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;h1&gt;The End!&lt;/h1&gt;&lt;br /&gt;If you were successful, pat yourself on the back and go buy yourself a mocha!  Honestly, many people have trouble configuring kerberos on small server farms about this size, and once you get into things like reporting services and load balancing, it gets much more complicated.  &lt;br /&gt;&lt;br /&gt;When planning and testing kerberos configurations, I suggest always starting with a small example like this one, using all VMs (I use VMWare ESXi 4.0 currently for all my VMs). Once you get a working sandbox network, make a copy of your VM's so you can restore to a known good configuration for kerberos. Then you can safely start your experimenting.  Build your more complex scenarios from this known good working example, without fear of losing all that initial leg work.&lt;br /&gt;&lt;br /&gt;&lt;h1&gt;Resources&lt;/h1&gt;A list of links to more kerberos resources can be found here:&lt;br /&gt;&lt;a href="http://www.bryansgeekspeak.com/2009/07/teamworks-621-moss-2007-kerberos-sso.html"&gt;http://www.bryansgeekspeak.com/2009/07/teamworks-621-moss-2007-kerberos-sso.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-6984912802020344094?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/6984912802020344094/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=6984912802020344094' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/6984912802020344094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/6984912802020344094'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2010/01/enabling-kerberos-in-windows-domain-for.html' title='Enabling Kerberos in a Windows Domain for SharePoint 2007 and Teamworks'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_It8-g3_9vec/S0uSRqH6LOI/AAAAAAAAAwQ/zlDeWmpEy00/s72-c/KRBDomainDiagram.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-4440079745923790079</id><published>2010-01-07T09:51:00.000-08:00</published><updated>2010-01-07T09:51:48.525-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SharePoint'/><category scheme='http://www.blogger.com/atom/ns#' term='MOSS'/><title type='text'>SharePoint 2007 - The file xyz is checked out or locked for editing by someone else</title><content type='html'>I ran into this annoying error today, when trying to check in a word 2007 document into a SharePoint document library with versioning enabled:&lt;br /&gt;&lt;br /&gt;"The file xyz is checked out or locked for editing by someone else"&lt;br /&gt;&lt;br /&gt;I was logged into the sharepoint site as the correct user, and I had opened the file in word 2007 and authenticated again as the same user, and I still get that message.&lt;br /&gt;&lt;br /&gt;To fix the problem, I had to disable the web client service on my local machine as shown in the screenshot below.  Once I did that, closed word 2007, then made my changes again and tried to do a checkin, everything worked as it should.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_It8-g3_9vec/S0Ye6ye-09I/AAAAAAAAAwI/sHbuZk2Mi-o/s1600-h/webclient_service_stopped.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_It8-g3_9vec/S0Ye6ye-09I/AAAAAAAAAwI/sHbuZk2Mi-o/s320/webclient_service_stopped.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Another thing to note is that this site was in my trusted zone, not my local intranet zone, and the sharepoint server is on a different domain than the one my workstation is logged into.  I'm not sure if those are factors at this point.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-4440079745923790079?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/4440079745923790079/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=4440079745923790079' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/4440079745923790079'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/4440079745923790079'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2010/01/sharepoint-2007-file-xyz-is-checked-out.html' title='SharePoint 2007 - The file xyz is checked out or locked for editing by someone else'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_It8-g3_9vec/S0Ye6ye-09I/AAAAAAAAAwI/sHbuZk2Mi-o/s72-c/webclient_service_stopped.JPG' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-3982512700565373590</id><published>2009-12-30T12:32:00.000-08:00</published><updated>2009-12-30T12:32:59.323-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Kerberos'/><title type='text'>SSO Authentication Problems for Windows Clients Against Java Kerberos Servers</title><content type='html'>Quote from an MS Support Case&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;Cause&lt;br /&gt;+++++++&lt;br /&gt;Hotfix 968389 makes XP machines to support Extended Protection for Integrated Authentication which consists of Service Binding information (SPN) and a Channel Binding Token (CBT). This is ON by default and results in authentication requests to be bound to both the Service Principal Names (SPN) of the server the client attempts to connect to and to the outer Transport Layer Security (TLS) channel over which the Integrated Windows Authentication (IWA) authentication takes place.&lt;br /&gt;&lt;br /&gt;Resolution&lt;br /&gt;+++++++++&lt;br /&gt;If you conclude that you are affected by this issue and are required to turn off CBT, enable the following registry key to disable CBT on Windows XP client:Create a reg DWORD (SuppressExtendedProtection) with a value of 0x03 under HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSANote: This feature enhances the protection and handling of credentials when authenticating network connections using Integrated Windows Authentication (IWA). Disabling CBT can result in security implications protected by this feature.&lt;br /&gt;&lt;br /&gt;More Information&lt;br /&gt;+++++++++++++&lt;br /&gt;&lt;br /&gt;What is CBT?&lt;br /&gt;&lt;br /&gt;CBT is a part of Extended Protection for Integrated Authentication which is a mechanism to bind an outer secure channel such as SSL to inner channel authentication protocols such as Kerberos-APREQ and HTTP header authentication. CBT is a property of the outer secure channel (such as TLS) used to tie (bind) it to a conversation over an inner, client-authenticated channel. Channel binding is accomplished by the client transferring the SPN and the CBT to the server in a tamperproof fashion. The server validates the channel binding information in accordance with its policy and rejects authentication attempts for which it does not believe itself to have been the intended target. This way, the two channels become cryptographically bound together. • If the client is updated to support the extended protection, applications should supply a channel binding and service binding information to all supported authentication protocols. Channel binding information can only be supplied when there is a channel (TLS) to bind to. Service binding information should always be supplied.  &lt;br /&gt;&lt;br /&gt;- Updated servers which are properly configured may verify the channel and service binding information when it is present in the client authentication token and reject the authentication attempt if the channel bindings do not match. Depending on the deployment scenario, servers may verify channel binding, service binding or both.&lt;br /&gt;- Updated servers have the ability to accept or reject down-level client requests that do not contain the channel binding information based on policy.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Channel Binding Token values:&lt;br /&gt;• 0x01 - This makes the client appear unpatched to remote servers except in cases where caller of SSPI on the client provides both a channel binding token and a target SPN. The security implication of setting this flag is this: it makes &lt;br /&gt;clients that do not use channel binding correctly, and clients that do not go over SSL vulnerable to authentication relay, even to partially hardened servers.&lt;br /&gt;&lt;br /&gt;• 0x02 - This makes the client set Kerberos channel binding value to zero even if calling application correctly supplies the value. If set without the previous 0x01 value, this value will cause the client to stop working against hardened servers with SSL. &lt;br /&gt;&lt;br /&gt;• 0x03 - Combination of 0x01 and 0x02. It disables channel binding always for Kerberos (0x02) and suppresses both channel binding and service bindings for those NTLM callers that do not supply channel binding (0x01). So, 0x02 has no effect on NTLM.&lt;br /&gt;&lt;br /&gt;Note: As per PG, Windows 7 adds support for an IETF security standard called channel binding. There is a known application compatibility issue between Windows 7 clients and Java Kerberos servers (such as Jetty). The setting 0x3 (discussed later in this article) on the client overcomes this application compatibility issue at the expense of suppressing channel binding. This setting should only be used on client computers that have to authenticate to Java erberos servers:&lt;br /&gt;&lt;br /&gt;Example&lt;br /&gt;&lt;br /&gt;1. Jetty - Jetty 6.1.7 &lt;http://www.mortbay.org/jetty/&gt;&lt;br /&gt;2. SAP Portal (Java J2EE Web Server - &lt;br /&gt;&lt;http://www.sap.com/usa/platform/netweaver/components/portal/index.epx&gt;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Symptoms&lt;br /&gt;++++++++++&lt;br /&gt;&lt;br /&gt;1. Windows clients that support Channel Binding Tokens fail to be authenticated by non-CBT capable Kerberos server such as Java Kerberos. &lt;br /&gt;&lt;br /&gt;Sample customer experience: &lt;br /&gt;&lt;br /&gt;Accessing Federated Web sites using PingIdentity Federated Services from Internet Explorer 8.0 on Windows 7 clients. The same operation works from IE 8.0 on Windows XP and Windows Vista computers. The error text on Windows 7 reads: &lt;br /&gt;&lt;br /&gt;Title: Error - Single Sign-On&lt;br /&gt;Message text: Unexpected Runtime Authn Adapter Integration Problem.&lt;br /&gt;Please contact your system administrator for assistance regarding this error.&lt;br /&gt;Adapter: CorpIWA &lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-3982512700565373590?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/3982512700565373590/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=3982512700565373590' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/3982512700565373590'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/3982512700565373590'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2009/12/sso-authentication-problems-for-windows.html' title='SSO Authentication Problems for Windows Clients Against Java Kerberos Servers'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-1922243601184308296</id><published>2009-12-18T12:20:00.000-08:00</published><updated>2009-12-18T12:23:53.716-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Lombardi'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='Teamworks'/><title type='text'>Teamworks 6.2: Calling Oracle Storec Procedures</title><content type='html'>First, lets create a table with sample data to work with:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;br /&gt;CREATE TABLE BryanTestTable (&lt;br /&gt;ID INT NOT NULL,&lt;br /&gt;Name VARCHAR2(128) NULL&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;INSERT INTO BryanTestTable VALUES(1, 'Bryan');&lt;br /&gt;INSERT INTO BryanTestTable VALUES(2, 'Josh');&lt;br /&gt;INSERT INTO BryanTestTable VALUES(3, 'April');&lt;br /&gt;COMMIT;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;br /&gt;&amp;gt;SELECT * FROM BryanTestTable;&lt;br /&gt;&lt;br /&gt;ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NAME &lt;br /&gt;-------------------------&lt;br /&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Bryan &lt;br /&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Josh&amp;nbsp; &lt;br /&gt;3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; April&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Now lets create a stored procedure that simply returns all rows from our test table as a refcursor &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;br /&gt;CREATE OR REPLACE&lt;br /&gt;PROCEDURE GetBryanTestRecord (p_recordset1 OUT SYS_REFCURSOR &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ) AS&lt;br /&gt;BEGIN&lt;br /&gt;&amp;nbsp; OPEN p_recordset1 FOR&lt;br /&gt;&amp;nbsp; SELECT&amp;nbsp; *&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM BryanTestTable;&lt;br /&gt;&lt;br /&gt;END GetBryanTestRecord;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;and test it from oracle before we move on to teamworks.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&lt;br /&gt;&amp;gt;VARIABLE r1 REFCURSOR;&lt;br /&gt;&amp;gt;execute GetBryanTestRecord(:r1);&lt;br /&gt;&amp;gt;print r1;&lt;br /&gt;&lt;br /&gt;ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NAME &lt;br /&gt;-------------------------&lt;br /&gt;1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Bryan &lt;br /&gt;2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Josh&amp;nbsp; &lt;br /&gt;3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; April&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Now that we have a working procedure, lets jump into Teamworks.&amp;nbsp; Lets create a simple service to test calling a stored procedure using an OotB sql service provided by Teamworks.&amp;nbsp; Start by creating a new service in teamworks.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_It8-g3_9vec/SyvjIgNr92I/AAAAAAAAAvQ/d3gSiTHZJVM/s1600-h/NewService.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_It8-g3_9vec/SyvjIgNr92I/AAAAAAAAAvQ/d3gSiTHZJVM/s320/NewService.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Next, from the teamworks library pane, navigate to "Teamworks-&amp;gt;System-&amp;gt;SQL Connector-&amp;gt;Services-&amp;gt;Call" and drag the service "SQL Call Stored Procedure (SQLResult)" into your new service.&amp;nbsp; Then drag a "Server Script" widget from the Palette into your new service and link them as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_It8-g3_9vec/SyvkOSWKbQI/AAAAAAAAAwA/ccvdUz2M3jE/s1600-h/OotBCallStoredProcService.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_It8-g3_9vec/SyvkOSWKbQI/AAAAAAAAAwA/ccvdUz2M3jE/s320/OotBCallStoredProcService.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_It8-g3_9vec/SyvjRN5wMII/AAAAAAAAAvY/xf5-KHTz7xw/s1600-h/NewServiceWithSQLandSeverScript.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_It8-g3_9vec/SyvjRN5wMII/AAAAAAAAAvY/xf5-KHTz7xw/s320/NewServiceWithSQLandSeverScript.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Now check the data mapping pane tab of the "SQL Call Stored Procedure" service to identify the variables we need (for you, they will be empty for now, and thats okay).&amp;nbsp; &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_It8-g3_9vec/SyvjV-DSE0I/AAAAAAAAAvg/F7aUkQM1rd0/s1600-h/NewServiceVariableMapping.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/_It8-g3_9vec/SyvjV-DSE0I/AAAAAAAAAvg/F7aUkQM1rd0/s320/NewServiceVariableMapping.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Now lets define our variables based on the above data mapping requirements.&amp;nbsp; To simplify our variables, I'll use an sqlStatement variable type (found in "Teamworks-&amp;gt;System-&amp;gt;SQL Connector-&amp;gt;Variable Types") to handle most of the input, a string to handle the datasource name and an sqlResult list type for the output as shown below.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_It8-g3_9vec/SyvjqXN9mxI/AAAAAAAAAvo/vYyhczlecug/s1600-h/NewServiceVariableDef.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_It8-g3_9vec/SyvjqXN9mxI/AAAAAAAAAvo/vYyhczlecug/s320/NewServiceVariableDef.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Once the variables are defined, we can initialize them with values in the Server Script object as shown below.&amp;nbsp; You will need to change the tw.local.ds value to match your datasource.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_It8-g3_9vec/SyvjvW9xp2I/AAAAAAAAAvw/gKuhcbJ-N-s/s1600-h/NewServiceVariableInit.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/_It8-g3_9vec/SyvjvW9xp2I/AAAAAAAAAvw/gKuhcbJ-N-s/s320/NewServiceVariableInit.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Finally, go back to the data mapping tab ofthe SQL call service and make sure that you map all your variables as shown.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_It8-g3_9vec/SyvjzWzXRsI/AAAAAAAAAv4/HELOSxpKgu0/s1600-h/NewServiceVariableMapping2.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/_It8-g3_9vec/SyvjzWzXRsI/AAAAAAAAAv4/HELOSxpKgu0/s320/NewServiceVariableMapping2.JPG" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;...and we're done!&amp;nbsp; Now all we need to do is run the service in debug mode, step through the service and confirm the debug output shows what we expect to see from the stored procedure.&amp;nbsp; When you reach Item Type "Exit Point", if you didnt hit an oracle/teamworks error, you should see the following XML output for the sqlResult value.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;&amp;lt;object type="SQLResult[]"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;arrayElement size="1"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;item type="SQLResult"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="rows" type="IndexedMap[]"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;arrayElement size="3"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;item type="IndexedMap"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="indexedMap" type="Record"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="NAME" type="String"&amp;gt;Bryan&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="ID" type="String"&amp;gt;1&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="data" type="ANY[]"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;arrayElement size="2"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;item type="String"&amp;gt;1&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;item type="String"&amp;gt;Bryan&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/arrayElement&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;item type="IndexedMap"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="indexedMap" type="Record"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="NAME" type="String"&amp;gt;Josh&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="ID" type="String"&amp;gt;2&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="data" type="ANY[]"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;arrayElement size="2"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;item type="String"&amp;gt;2&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;item type="String"&amp;gt;Josh&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/arrayElement&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;item type="IndexedMap"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="indexedMap" type="Record"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="NAME" type="String"&amp;gt;April&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="ID" type="String"&amp;gt;3&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="data" type="ANY[]"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;arrayElement size="2"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;item type="String"&amp;gt;3&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;item type="String"&amp;gt;April&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/arrayElement&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/arrayElement&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="type" type="String"&amp;gt;RESULT_SET&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="columns" type="SQLResultSetColumn[]"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;arrayElement size="2"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;item type="SQLResultSetColumn"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="writable" type="Boolean"&amp;gt;true&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="autoIncrement" type="Boolean"&amp;gt;false&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="currency" type="Boolean"&amp;gt;true&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="tableName" type="String" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="schemaName" type="String" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="columnLabel" type="String"&amp;gt;ID&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="catalogName" type="String" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="searchable" type="Boolean"&amp;gt;true&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="columnClassName" type="String"&amp;gt;java.math.BigDecimal&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="caseSensitive" type="Boolean"&amp;gt;false&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="signed" type="Boolean"&amp;gt;true&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="columnDisplaySize" type="Integer"&amp;gt;22&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="scale" type="Integer" tw-id="id:0"&amp;gt;0&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="columnName" type="String"&amp;gt;ID&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="columnTypeName" type="String"&amp;gt;NUMBER&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="readOnly" type="Boolean"&amp;gt;false&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="definitelyWritable" type="Boolean"&amp;gt;false&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="precision" type="Integer"&amp;gt;38&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="nullable" type="Integer" tw-ref="id:0" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;item type="SQLResultSetColumn"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="writable" type="Boolean"&amp;gt;true&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="autoIncrement" type="Boolean"&amp;gt;false&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="currency" type="Boolean"&amp;gt;false&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="tableName" type="String" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="schemaName" type="String" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="columnLabel" type="String"&amp;gt;NAME&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="catalogName" type="String" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="searchable" type="Boolean"&amp;gt;true&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="columnClassName" type="String"&amp;gt;java.lang.String&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="caseSensitive" type="Boolean"&amp;gt;true&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="signed" type="Boolean"&amp;gt;true&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="columnDisplaySize" type="Integer"&amp;gt;128&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="scale" type="Integer" tw-ref="id:0" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="columnName" type="String"&amp;gt;NAME&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="columnTypeName" type="String"&amp;gt;VARCHAR2&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="readOnly" type="Boolean"&amp;gt;false&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="definitelyWritable" type="Boolean"&amp;gt;false&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="precision" type="Integer"&amp;gt;128&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="nullable" type="Integer" tw-id="id:0"&amp;gt;1&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/arrayElement&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;property name="columnIndexes" type="TWMap"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;element&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;key type="String"&amp;gt;NAME&amp;lt;/key&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;value type="Integer" tw-ref="id:0" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/element&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;element&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;key type="String"&amp;gt;ID&amp;lt;/key&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;value type="Integer" tw-ref="id:0" /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/element&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/property&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/item&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/arrayElement&amp;gt;&lt;br /&gt;&amp;lt;/object&amp;gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-1922243601184308296?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/1922243601184308296/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=1922243601184308296' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/1922243601184308296'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/1922243601184308296'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2009/12/teamworks-62-calling-oracle-storec.html' title='Teamworks 6.2: Calling Oracle Storec Procedures'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_It8-g3_9vec/SyvjIgNr92I/AAAAAAAAAvQ/d3gSiTHZJVM/s72-c/NewService.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-1761626399249261509</id><published>2009-11-24T17:45:00.000-08:00</published><updated>2009-12-28T16:49:36.951-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>Create Oracle User and Grant Permissions to User Tablespace</title><content type='html'>Notes for setting up new users/tablespaces in oracle 10g on windows 2003 server.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Install Oracle 10g (no example/starter database, use simple install option). No services/databases are installed by default&lt;/li&gt;&lt;li&gt;Configure/Install new database&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Run oracle database configuration wizard&lt;/li&gt;&lt;li&gt;Create a new general purpose Database (use all default options)&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Configure/Install default listener&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Run the Oracle Net Configuration Assistant&lt;/li&gt;&lt;li&gt;Add a new listener&lt;/li&gt;&lt;li&gt;Select all defaults&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Create new tablespace in newly crated database&lt;/li&gt;&lt;ul&gt;&lt;li&gt;From the oracle home start menu folder, launch the database control (loads the configuration web site in a browser, add the site to the "trusted sites" list in IE).&lt;/li&gt;&lt;li&gt;Login as the SYS account using the password you set in the database configuration wizard.  Connect as SYSDBA.&lt;/li&gt;&lt;li&gt;Click on the "Administration" tab&lt;/li&gt;&lt;li&gt;Click "Tablespaces" then the "Create" button.&lt;/li&gt;&lt;li&gt;Typically, you'll want to add a tablespace specifically for a new oracle use account. I tend to make the name of the tablespace match the oracle user I intend to use with it.&lt;/li&gt;&lt;li&gt;The database datafile name needs to end in .DBF. If you use a tablespace name of "Bryan", a database file name of "Bryan.DBF" would make sense.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Create new user, assign to newly created tablespace&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Return to the database "Administration" screen and select "Users", then click "Create"&lt;/li&gt;&lt;li&gt;Set the name (again, matching the tablespace is a good idea) and set the default tablespace to what we created in the previous step.  Set the temp tablespace to TEMP.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Grant new user permissions to user tablespace.  Run the following command as SYS as the SYSDBA role after editing the user acount name. I find it best to use sqldeveloper to run SQL commands rather than SQLPlus, because you can connect directly to the database via the SID. That way you dont need to configure a tnsnames file for your database (if you use JDBC, you wont ever need to use it).&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;GRANT create procedure, create session,create table,create type,create view,create synonym,resource TO myuser;&lt;br /&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;Finally, to prove your new oracle user account works properly, use sqldeveloper again to connect to the database as your new oracle user account using role "Default".  Run the following commands to make sure you have create and drop rights.&lt;br /&gt;&lt;br /&gt;&lt;div class="code"&gt;--- create a test table&lt;br /&gt;CREATE TABLE test (&lt;br /&gt;id INT&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;--- drop the test table&lt;br /&gt;DROP TABLE test;&lt;br /&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-1761626399249261509?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/1761626399249261509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=1761626399249261509' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/1761626399249261509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/1761626399249261509'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2009/11/create-oracle-user-and-grant.html' title='Create Oracle User and Grant Permissions to User Tablespace'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' height='32' src='http://3.bp.blogspot.com/-dkwy-kQhEgE/TdV0F2gIYnI/AAAAAAAAA1I/TPiJ5rIQtfg/s220/2etous46.thm.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-19111454.post-1114847733494757346</id><published>2009-11-12T09:35:00.000-08:00</published><updated>2009-11-12T09:36:50.252-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Reporting Services'/><title type='text'>Displaying CLOB data in Microsoft Report Builder reports</title><content type='html'>I rand into an issue with clob types the other day in MS Report Builder, where when you try to run a report, you get an error about not MS Report Builder not being able to group large string object types.  &lt;br /&gt;&lt;br /&gt;To work around this error, you need to set the property &lt;i&gt;DiscourageGrouping&lt;/i&gt; to "false" on the clob type in the model.  When you redeploy, you'll be able to see the clob data in the report.  A full explanation can be found here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/bobmeyers/archive/2006/12/20/getting-grouping-right-in-report-builder.aspx"&gt;http://blogs.msdn.com/bobmeyers/archive/2006/12/20/getting-grouping-right-in-report-builder.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/19111454-1114847733494757346?l=www.bryansgeekspeak.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://www.bryansgeekspeak.com/feeds/1114847733494757346/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=19111454&amp;postID=1114847733494757346' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/1114847733494757346'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/19111454/posts/default/1114847733494757346'/><link rel='alternate' type='text/html' href='http://www.bryansgeekspeak.com/2009/11/displaying-clob-data-in-microsoft.html' title='Displaying CLOB data in Microsoft Report Builder reports'/><author><name>Bryan</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='26' heigh
