Jun 09

Donnerstag

InfoPath Code-behind wiederherstellen

geschrieben von Lenny um 11:58 Uhr.

Problem:

Hat man ein InfoPath Form mit Code hintendran, wird dieser standardmäßig als Projekt-Datei im Verzeichnis des Users abgelegt.

Beispiel:

C:\Users\<Benutzername>\InfoPath-Projekte\Projektname\meinProjekt.csproj

Beim Speichern, wird der Code in eine DLL kompiliert und in das Formular gepackt. Ohne diesen Ordner kann InfoPath das Formular also nicht mehr mit Code versehen.

Lösung:

Wenn man nun weiß, dass sich hinter einer InfoPath.xsn eigentlich ein cab-Archiv verbirgt, kann man die Dateiendung anpassen und sich die DLL aus dem Archiv extrahieren.

Mit Hilfe des “.NET ReflectorDisassemblers kann man sich dann aus der DLL die Projekt-Datein wiederbeschaffen! Das Tool funktioniert stand-alone und kann auch als Add-In in Visual Studio integriert werden. Das exportieren der Dateien war bei meinem Test auch mit der 14-Tage-Testversion möglich. In der kleinen Version als stand-alone Applikation kostet es aber auch nur schmale 25€. Den meisten Entwicklern dürfte eine solche Desaster-Recovery schon so viel wert sein ;-)

Wenn man die Dateien hat, kann man sie einfach wieder mit dem Formular in InfoPath verknüpfen.

Leider ist die Übersetzung m.E. nicht ganz lupenrein.

Beispiel (C#):

// aus
int i = 1
switch (i)
{
case 1: doSomething; break;
case 2: doNothing; break;
}

// wird
switch (1)
{
case 1: doSomething; return;
case 2: doNothing; return;
}

An dieser Stelle sind das nur “Schönheitsfehler”, man sollte aber auf alle Fälle nochmal über den Code schauen, bevor man ihn wieder irgendwo einbaut.

Aber auf jeden Fall ist das in meinen Augen besser, als keinen Code mehr zu haben ;-)
Noch als Anmerkung:

Theoretisch müsste es auch möglich sein, die DLL aus einer Vorgängerversion des Formular wieder in das cab-File zu packen, wenn man keine Änderungen am Code vorgenommen hat und auch in Zukunft nichts verändern möchte. Ist aber etwas tricky denke ich und InfoPath wird jedesmal meckern, weil er die Projekt-Dateien nicht findet.

| Trackback | Kurzlink

Einen Kommentar verfassen