Bodo's Dynamics NAV und Business Central Blog
Bodo ist ein Dynamics NAV Urgestein. Er programmiert Navision seit DOS Zeiten und hat auch keine Scheu vor .NET und schon gar nicht vor Dynamics 365 oder Azure. Viele Neueinsteiger wurden von ihm in den letzten Jahren zu Entwicklern ausgebildet. In diesem Blog veröffentlichen Bodo und andere Superhelden Interessantes aus der Welt von Dynamics 365 Business Central / Dynamics NAV und Microsoft Azure.SharePoint, InfoPath und NAV Web Services - Krimi, Teil 1
Tags: infopath, sharepoint, security, webservices, nav, 2009Heute schreibt mein lieber Kollege Stefan.
Ich weiß nicht, was mich in einem denkwürdigen Meeting dazu veranlasst hat, vorzuschlagen, man könnte doch den SharePoint und InfoPath mal schnell um Logik aus NAV Web Services anreichern. Jugendlicher Leichtsinn kann es nicht mehr gewesen sein, ich hätte es eigentlich besser wissen müssen. Und so kam es, wie es kommen musste. Aber nun der Reihe nach.
Die Aufgabe war denkbar einfach: Ein Sharepoint-Workflowformular sollte um eine editierbare Tabelle erweitert werden, deren Inhalt aus NAV stammt. Der Web Service war schnell gebaut, die Datenverbindung im InfoPath noch schneller eingerichtet. Sogar die Vorschau im InfoPath funktionierte, die Tabelle wurde gefüllt - okay, es kam ein Anmeldedialog hoch, aber das sind ja nur Details - dachte ich da noch.
Also schnell das Formular im SharePoint gespeichert, damit es der Workflow nutzen kann. Dafür muss die Datenverbindung in einer "Datenverbindungsbibliothek" abgelegt werden. Na gut, wenn es sein muss. Getan und dann den Workflow gestartet. Und schon die erste Überraschung: Es geht nicht. "Fehler beim Zugriff auf den Web Service" o.ä.
Hm, also "gebingt" und "gegoogelt" und die vermeintliche Lösung gefunden: Man muss die UDC (Universal Data Connection) Datei bearbeiten und die Security Informationen angeben. Ah, warum sagt einem dass der Infopath Assistent nicht. Also mühsam die Beschreibung der Datei gesucht, doch was trägt man ein? NTML, Kerberos und welche App-ID soll man nehmen?
Zum Glück sind die Varianten endlich, also alle durchprobiert. Man ahnt es: Keine geht.
Nächste Internetrecherche: Ah, man muss im SharePoint den Secure Store Service einrichten und da seine App-Id eintragen. Okay, klingt logisch. Ist auch recht schnell gemacht, leider passt die MSDN Dokumentation nicht mehr wirklich zum Produkt, aber man kann ja alle Varianten ausprobieren - und - man ahnt es - keine geht.
Also wieder das Internet bemüht und in die Tiefen von NTML und Kerberos hinabgestiegen - und über das "Double Hop" Problem gestolpert: Mit NTLM ist es nicht möglich, die Browser-Anmeldung über einen Dritten (in meinem Fall SharePoint) an NAV weiterzureichen. Geht einfach nicht. Deshalb soll man doch besser den InfoPath Form Proxy verwenden, der ist dafür gemacht.
Gott sei dank, da hat ja mal einer mitgedacht - dachte ich. Denkste, funktionert nicht, denn der Web Service muss damit rechnen, dass er über solchen Proxy aufgerufen wird und die Anmeldedaten dann aus dem SOAP Header abfragen. Leider waren die Kollegen vom NAV Team wohl nicht auf dem Verteiler als diese Info gestreut wurde.
Jetzt war ich doch sehr, sehr traurig, waren doch schon etliche Stunden Lebenszeit verbraucht worden, und mein schönes Vorhaben drohte zu scheitern. Doch dann die rettenden Lösung:
Ein Proxy ist schon die richtige Idee - ich bau mir einfach selber einen.
Also schnell das VS 2010 gestartet und einen simplen Web Service ohne Securtiy gebaut, der nichts anderes macht als meine NAV Web Services aufzurufen. Sind zum Glück ja nur drei: Lesen, Einfügen, Ändern. Debugger angeworfen, lokale Testseite gestartet - es geht.
Jetzt den Webservice im IIS installiert und GANZ WICHTIG: Den Anwendungspool unter einem Benutzerkonto starten, der die notwendigen Rechte im NAV hat - das wusste ich zum Glück durch meine Recherche schon vorher.
Jetzt aber schnell zurück in den InfoPath die Datenverbindung auf den neuen Webservice Proxy geändert und zum SharePoint hochgeladen - ein Test: Heureka, es funktionert. Die Daten werden in der Tabelle angezeigt - auch im Webformular.
Gedanklich öffne ich eine Flasche <plopp> und proste mir zu.
Jetzt nur noch schnell die Tabelle zum Einfügen neuer Zeilen im InfoPath konfigurieren und fertig, dachte ich. Doch halt - die Option ist ja ausgegraut ... und wie speichere ich die Daten eigentlich im NAV wieder ab, denn meine Datenverbindung ist nur als "Daten empfangen" konfiguriert. Und eine Tabelle kann doch nur einer Datenverbindung zugeordnet werden oder doch nicht?