InfoPath 2010 + Excel Services 2010 + REST API Applikationsdesign

Von Peter Pallierer 27. May 2010 21:36

Hi, hier ist wieder einmal Peter Pallierer. Heute möchte ich wieder auf eines meiner Steckenpferde eingehen, InfoPath 2010. Eine sehr häufige Frage zu InfoPath 2010 ist, wie man “komplexere” Rechenoperation (und dazu zählt schon das Subtrahieren von 2 Datumswerten) durchführen kann. Meine Standardantwort bisher war: Custom .NET Code oder die Operation in WebServices auslagern. Das ist schön und gut, aber der Reiz von Infopath liegt ja genau in diesen “No Code” Anwendungen. Und siehe da mit InfoPath 2010 gibt  es dafür Abhilfe

In der neuen Office und SharePoint Version 2010, steht das erste Mal das REST API sowohl publizierend als auch konsumierend zur Verfügung. Das heißt, Excel Services  kann seine Berechnungen über eine REST Url zu Verfügung stellen, wobei die Parameter in die Url codiert werden und der Return Wert als HML, Image oder Atom Fragment zur Verfügung steht. Eine vollständige Beschreibung davon findet man hier: http://blogs.msdn.com/b/cumgranosalis/archive/2009/11/05/advanced-excel-services-rest-api-capabilities-
where-things-get-interesting.aspx

Aber beginnen wir als Erstes mit der Gesamtarchitektur:

ExcelRest1vsd

Das bedeutet das Excel Web Services, die komplete Berechnung durchführt.

Und jetzt Schritt für Schritt, beginnen wir mit dem Excel Sheet

Ich erzeuge ein Excel Sheet, bei dem ich die Zelle A1 den Range Namen “Input” und der Telle B1, den Range Namen “Output gebe. Außerdem bekoomt B1 noch die zu berrechnende Formel hinterlegt, in meinen Fall mach ich ein DEC2BIN, das ist die Umwandlung einer Dezimal zur Binärzahl

image

Danach publiziere ich das Dokument in die Excel Services

image

Wichtig ist in den Publishing Options, den input Parameter zu definieren, denn nur so können Werte von Infopath an das Excel Service geschickt werden
image
image

So das war der esrte Schritt, danach kann ich schon mal den Zugriff auf das Excel Service via REST testen

Die Url http://[SERVER]/_vti_bin/ExcelRest.aspx/Shared%20Documents/Book1.xlsx
/Model/Ranges(‘Output’)?Ranges(‘Input’)=154
liefert dann ein
image
zurück. Das ist schön, aber das falsche Format HTML. Um das ganze als XML zu bekommen muss die REST Url noch um den $format=atom erweitert werden

http://[SERVER]/_vti_bin/ExcelRest.aspx/Shared%20Documents/Book1.xlsx
/Model/Ranges(‘Output’)?$format=atom&Ranges(‘Input’)=154

jetzt passt es un es wird XML geliefert:

<?xml version="1.0" encoding="utf-8"?> 
….
  <content type="application/xml">
    <x:range name="Output">
      <x:row>
        <x:c>
          <x:fv>10011010</x:fv>
        </x:c>
      </x:row>
    </x:range>
  </content>
</entry>


(Zur einfacheren Lesbarkeit habe ich die Namespaces entfernt ;-)

So jetzt können wir und an das Infopath Form machen, ich erzeuge mal ein InfoPath Form mit 2 Textfeldern. Das ganze funktioniert egal ob ich das Formular auf eine Forms Library oder auf eine SharePoint Liste veröffentliche, für letztere ist die Funktion besonders interessant, da wir ja bei IP Forms auf SharePoint Listen keinen Custom Code verwenden können

OK – unser Form sieht jetz so aus:
image

Als erstes fügen wird die neue REST Data Connection hinzu:


image

image

Das “Automatic retrieve on open” lassen wir gleich weg

image

so und jetzt muss der Teil der Url, der den dynamischen Parameter ersetzt nur noch durch eine Regel gesetzt werden wenn sich das Feld1 ändert
image

Hier gibt es jetzt die neue Action Rule, mit der wir dynamisch die REST URL zusammensetzen

image

image

über den Fx Button ändern wir den fixen URL Wert auf einen dynmischen Wert, der den RANGE(‘INPUT’)=154 Teil der Url durch RANGE(‘INPUT’)=. ersetzt. Der Punkt entspricht dem Field1. Die ganze Formel sieht also so aus

concat("http://[SERVERNAME]/_vti_bin/ExcelRest.aspx/shared%20documents/Book1.xlsx/model/Ranges('Output')?$format=atom&Ranges('Input')=", .)
image

als 2. Action muss die neu erstelle REST Url auch gegen das Excel Service geschickt werden:

image

und als 3. Action muss noch der Return Wert des REST Calls in das Feld 2. gespeichert werden


image

image

Hier muss man beim Value von der ;Main Data Source auf die REST Datasource umschalten, damit man auf das Ergebniss des REST Calls zugreifen kann


image
image

Und damit ist das Form fertig und die Funktion aus dem Excel kann im Infopath verwendet werden.

An dieser Stelle vielen Dank an Roman Lutz der diese Idee gehabt hat.

Stay tuned

Peter

Tags:

Development | Tool

Add comment




  Country flag

biuquote
  • Comment
  • Preview
Loading



Menü

Home
Über diesen Blog
Archiv
Abonnieren Feed
Kontakt

Dieser Blog wird von Microsoft Österreich betrieben.

http://www.microsoft.com/austria | © 2009 Microsoft Corporation. Alle Rechte vorbehalten.
BlogEngine.NET 1.5.0.7 powered by atwork