Posts
16
Comments
22
Trackbacks
20
September 2005 Entries
Deploying Fully Trusted InfoPath form to SharePoint Form Library - Eliminating headaches with Citrix

 

Citrix is an extremely powerful tool for allowing remote users to connect and participate in a corporate domain environment.  For a company like our current client, who has locations all over the world that must be connected, it's a great way to maximize available bandwidth.

 

One of the current projects we're doing involves an InfoPath form installed in a WSS form library.  The form executes managed code that requires it to be fully trusted, and it must be available to various locations in the U.S. and Europe. 

 

Side Note:  One complication I forgot to mention, since our client is a government contractor, many of the users of this application are government employees who do not have Office 2003 installed on their computers.  InfoPath forms require the InfoPath application to run, so our only real option was to deploy the forms on a citrix server and route all users to a citrix desktop, where WE control the software configuration. 

 

So, in order to be fully trusted, a form must either be installed or be signed with a digital certificate.  Since the form will essentially be used on 1 machine (the citrix server) we opted for the install option.  Here's the steps we follow to use a local install with a WSS form library deployment:

 

  • Create an MSI install file using visual studio and regform.exe
  • Install the form on the developer machine
  • Go to where the form is installed (C:\Program Files\InfoPath Form Templates by default) and open the XSN file
  • Choose Save As, and save the file as template.xml
  • Close InfoPath
  • Copy MSI file to Citrix server and install there
    • Use default install path
    • Choose Install for Everyone
  • Publish the form to WSS form library
  • Browse to form library and switch to Explorer View
  • Copy template.xml created above into Forms folder
  • Go to form library settings page (Modify Settings and Columns->General Settings), and change the Form Template file extension to .xml
  • The Form Template setting should now be:
    • FormLibraryNameHere/Forms/Template.xml
  • Save settings.

 

That's it, you should be able to log on to Citrix, browse to the form library, and fill out a form.

posted @ Wednesday, September 28, 2005 7:40 AM | Feedback (3)
United Airlines - incompetence prevails!

Let me say right away that this is not a technical post, as you might have guessed from the title.  This is me raving about the incompetence of a major airline.

First of all, $1000 for a round-trip (coach) ticket between Birmingham, AL and Colorado Springs, CO?  Come on, I know the airlines are hurting, but...

The price of the ticket aside, if I had made it home like I was scheduled to tonight, I can deal with an expensive ticket.  But instead I'm sitting in a Denver hotel room.  Now I know that delays happen, that's just part of flying, and much of the time it's out of the airline's control.  But the way the airline handles delays is completely in their control, and that's what pisses me off!

I arrived at the airport today about 1.5 hours early for a 5:00 flight, only to be told that our flight was to be delayed because President Bush was landing there and the entire airport would be shut down for about 45 minutes.  Ok, but when we called several hours before to check on our flights and try to make some seating arrangement changes, no one mentioned any delays.  Did they not know that there would be delays as a result of the president's visit?  I'll give them the benefit of the doubt, because the president doesn't exactly make his flight plans available to the general public. 

Here's where the real problem comes in... With the new departure time, we will only have 15 minutes to make our connection in Denver, and it's 20 gates away from where we're arriving.  that's a problem, but once again not an unusual one, just part of the joy of flying.

We eventually do take off, after watching Air Force One taxi down the runway to our right, and there's an outside chance that we can make our connection.  There are several people who are trying to make the same connection, and the pilot announces that he is going to fly low and fast and cut the trip in half.  That's just what he did, and after a bumpy (but fast) ride, we pulled into the gate in Denver with about 10 minutes before our plane was schedule to take off.  We ran off the plane, stopped and told the United official at the terminal entrance what flight we were trying to make, and took off running in the direction she pointed us.  With renewed hope, we arrive at our gate with 7 minutes to spare until takeoff, only to find that the plane left early.  Yep, no one, not the flight crew or the official we just talked to at the gate told us that the plane was going to leave early. 

So, out of breath and furious, we stormed over to the customer service counter to find out how this could have happened and see what our options were.  As our turn came, we told the prissy guy at the counter what had happened and his only response was that the planes were authorized to leave 10 minutes early.  I'm seeing red by this time, spewing something about the incompetence of United.  He immediately got defensive and basically said if I didn't like it I could fly with someone else.  To make a long story shorter, we never got answers as to why they couldn't at least wait until the scheduled departure time to take off, knowing ahead of time that there were people coming from Colorado Springs that were trying to connect.  The friendly, helpful customer service guy just threatened to call security and not let us fly because we accused his airline of incompetence (ok, maybe I raised my voice once or twice and said something about the whole operation being run by 1st graders, but there were no threats or innapropriate language, and no, unlike Airline, we had not been drinking.)  We finally got re-booked for tommorrow morning, and here I sit in my Denver hotel room (that we had to pay for ourselves). 

Why couldn't the plane wait 7 minutes and depart on schedule, instead of a few minutes early?
That one is simple:  They sold our seats.  They knew we were coming and they sold our seats anyway.

Why couldn't someone tell us before we ran 20 gates that our plane was not going to wait? 
Answer:  Two answers - they don't know and they don't care.  The lady that met our plane when we arrived didn't seem to know that we were desperately trying to make a connection, even though the pilot and flight crew aknowledged multiple times that they knew our predicament.  Where's the communication?   They don't care if you miss your flight or if you run around the airport for nothing.  It all pays the same.

Let me say in conclusion that I know there are some airline employees that really go out of their way to help,like our flight crew, but they just seem to be the exception.  Like I told the customer service guy as I walked away to find a hotel for the night, no wonder they're in bankruptcy. 

posted @ Friday, September 23, 2005 10:05 PM | Feedback (1)
InfoPath - storing data source connection information in File DSN

Anything to make my life easier...

As I am fairly new to InfoPath (who isn't?), I'm constantly looking for ways to streamline the process of moving through the development-test-production cycle.  InfoPath stores dataconnection information in the manifest.xsf file that is included in the .xsn solution file when a form is deployed (in my case, published to a SharePoint form library).  This means that if a dataconnection changes, the manifest.xsf has to be updated.  This would seem like a small task, but if everything is not formatted perfectly in this file then the InfoPath form will not even open.  The dataconnection information can be changed through the designer, but if you're doing any XPath filtering of databound controls, when you change the dataconnection you lose all of your filters.  In my case, I am using cascading dropdownlists, and each time I would change the dataconnection I'd have to completely rebuild the “cascading” effect.  Anyway, in my opinion, the best (and easiest) way to manage dataconnections in InfoPath is using File DSNs.  So here are the steps...

  • Add the dataconnections through the designer as normal (Tools-Data Connections...)
  • Create File DSNs (Administrative Tools-Data Sources(ODBC)) to mirror dataconnections in the InfoPath form
  • Open the manifest.xsf
    • If you're working in Visual Studio, you can just open the file directly (make sure you close InfoPath first)
    • Otherwise, you'll have dig into the .xsn file (it's basically a CAB file, I think) and find the manifest.xsf
  • Find the entry in the manifest.xsf for each dataconnection, and replace the connectionstring value with “FILEDSN=pathToYourDSNFile“ .  So the connectionstring attribute should look like this:

 connectionstring=“FILEDSN=pathToYourDSNFile“

That's it!  Now you should be able to change your dataconnections without completely screwing up your InfoPath form.  Special thanks to Ken Sproule at MindSharp for putting me on this!

posted @ Thursday, September 15, 2005 3:52 PM | Feedback (0)
Welcome!

Welcome to my blog.  This will be a place for me to record lessons learned and useful tidbits of information gained from my experience as a .Net developer, particularly in the area of all things SharePoint, but potentially anything from custom development with the Microsoft Visio ActiveX control to .Net XML Web Services.  This is a reference for me as much as anyone else, but hopefully someone will gain something beneficial from my ramblings. 

posted @ Wednesday, September 14, 2005 11:31 AM | Feedback (1)
News