New role: External Strategic Partner Advisor AgilePoint

My role/assignment for AgilePoint is changing to external recognizable contractor/company targeting future global Tier-1 AgilePoint partners, additional serving/growing partners in German speaking region, ensure successful, swift journey from AgilePoint prospects to customers, finally quick/easy adoption and keep the existing customers/partners in the territory happy.

Versand von E-Mails über API testen

Der Versand von E-Mails aus Anwendungen heraus erfordert besondere Sorgfalt im Test. Die vorgestellte Variante zeigt die manuellen Testmöglichkeiten über AgilePoint REST WebService API.

A.) Grundlagen

AgilePoint ermöglicht den E-Mail Versand in folgenden Optionen

  • E-Mail Activity in einem Prozess/Workflow
  • zu bestimmten Events innerhalb eines Activity ("Task Notification", "Task Reminder", "Leaver Activity Instance")
  • über API
Üblicherweise basiert die zu versendende Mail auf einem E-Mail Template



Mögliche Situation: Sie testen einen komplexen Prozess und stellen nun fest, dass am Ende des Prozesses im E-Mail Template ein Fehler ist. Ansatz ist das neue E-Mail Template testen ohne Bereitstellung/Deployment auf Basis der Daten einer bereits gelaufenen oder noch aktiven Prozess Instanz. Ein klassischer Anwendungsfall ist ebenfalls: Sie haben Ihre Anwendung getestet und nun in Produktion. Nun fügen Sie weitere Lokalisierungen/Sprachen Ihrem E-Mail Template hinzu. Mit diesem Ansatz testen Sie die E-Mail Templates ohne weitere komplette Testdurchläufe (sondern isoliert).

Anmerkung: der folgende Lösungsvorschlag legt Wert darauf, dass keine Programmier Kenntnisse erforderlich sind zur Verwendung. Für technisch orientierte folgt in einem weiteren Beitrag eine technischerer Ansatz (auch mit mehr Möglichkeiten).

B.) App erstellen, bereitstellen und eine Instanz ausführen


Die App hat einen Prozess mit zwei Activities. Zuerst Dateneingabe und Prozess Start, dann Versand einer E-Mail (verwendetes E-Mail template siehe oben).

Download der kompletten Demo App (dann Anwendung importieren, publizieren und eine Instanz durchlaufen). 




C.) Vorarbeiten 

Rufen Sie die Swagger URL auf



Authorisieren Sie sich gegen die REST API



Finden Sie die Methode "SendMail"



Suchen Sie die Prozess Instanz raus die soeben durchgelaufen ist



Suchen Sie dort die ProcInstID raus. Bei diesem Durchlauf ist dies:

ProcInstID = 88B70800277BC9F01188D11BB05E9540

Finden Sie die versandte E-Mail (Manage > Notifications)



D.) Verändern Sie das E-Mail template



E.) Testen Sie das neue Template

HTML der E-Mail rauskopieren



<p>Dear Employee,</p>
<p>the process&nbsp;${ProcessName} completed. Main Info for you is:</p>
<p>GivenName: ${/pd:AP/pd:formFields/pd:GivenName}</p>
<p>LastName: ${/pd:AP/pd:formFields/pd:LastName}</p>
<p>Priority: ${/pd:AP/pd:formFields/pd:Priority}</p>
<p>Best Regards,<br />
Your Democonpany</p>

Entfernen Sie die Ümbrüche (alles in einer Zeile - moderne Editoren können dies mit eine Tastenkombination)

<p>Dear Employee,</p><p>the process&nbsp;${ProcessName} completed. Main Info for you is:</p><p>GivenName: ${/pd:AP/pd:formFields/pd:GivenName}</p><p>LastName: ${/pd:AP/pd:formFields/pd:LastName}</p><p>Priority: ${/pd:AP/pd:formFields/pd:Priority}</p><p>Best Regards,<br />Your Democonpany</p>

bereiten Sie den Request für den REST WebService Aufruf vor 



Setzen Sie Ihre eigenen Werte für:
  • ProcesInstanceID
  • To (wichtig: "\\" anstatt "\")
  • Subject
  • Body
das ergibt dann beispielsweise

{
  "ProcesInstanceID": "88B70800277BC9F01188D11BB05E9540",
  "WorkItemID": "",
  "To": "AGILEPOINT\\apnxengine",
  "CC": "",
  "BCC": "",
  "From": "",
  "Subject": "process started",
  "Body": "<p>Dear Employee,</p><p>the process&nbsp;${ProcessName} completed. Main Info for you is:</p><p>GivenName: ${/pd:AP/pd:formFields/pd:GivenName}</p><p>LastName: ${/pd:AP/pd:formFields/pd:LastName}</p><p>Priority: ${/pd:AP/pd:formFields/pd:Priority}</p><p>Best Regards,<br />Your Democonpany</p>",
  "Attachments": "",
  "MailPriority": ""
}

Methode "SendMail" ausführen mit anklicken der Schaltfläche "Try it out!"



Suchen Sie die Notification raus (oder gehen Sie in das entsprechende Postfach)


Vergabe von Aufgaben an noch nicht registrierte Benutzer (bspw. AAD)

Die Vergabe von  Aufgaben an noch nicht registrierte Benutzer ist mit v7 nun möglich.

Das verwendete Beispiel laden Sie hier runter.

A.) Es gibt folgende Benutzer im System


B.) Durchlauf mit registriertem Benutzer




C.)  Durchlauf mit nicht registriertem Benutzer (für nächste Aufgabe/Task)




D.) Registrieren des neuen Benutzers mit Bulkupload (alternativ manuell order ADSync). Für einen benutzerdefinierten Ansatz passen Sie das Beispiel an.




E.) Einloggen mit neuem Benutzer und Task abschließen




Formulare anderer Anwendungen nur-lesend aus einer Anwendung öffnen

Dieses Beispiel demonstriert Wiedervendbarkeit auf Basis eines Subprozesses mit Formular und einer  nur-lesend darauf

A.) Details der Umsetzung:




Der Prozess "SubProcInOtherAppAndLink_Other_ResusableSub" wird verwendet innerhalb der gleichen Anwendung und gestartet durch "SubProcInOtherAppAndLink_Other_Main". Hierbei teilen Vaterprozess und Subprozess das geleiche Datenmodell. Im Hauptprozess werden die Daten erfasst und dann im Subprozess verwendet nur-lesend im Formular.

Der SubProzess setzt initial Werte lokaler Variablen:


Anmerkung: die Variable "ApprovalProcessReportViewUrl" enthält den berechneten Wert der Nur-Lesend Ansicht auf das Formular des SubProzesses.

Anmerkung: der Wert der verwendeten Eigenschaft "ReportViewUrl" ist in "Shared Variables" definiert



Und ermittelt dann per SOAP WebService Aufruf (alternativ per REST) auf die AgilePoint WebServices Daten der aufrufenden ProzessInstanz.



Und aktualisiert dann Daten im Aufrufenden Vaterprozess


Der Prozess "SubProcInOtherAppAndLink_Other_ResusableSub" wird auch verwendet durch "SubProcInOtherAppAndLink_Other_Main". Hierbei gibt es getrennte Datenmodelle.



 Die Daten werden an den SubProzess über Mapping übergeben



B.) Der Durchlauf wie folgt:






C.) Download der Umsetzung und Anweisungen zum Deployment:

SSL für AgilePoint Portal, Engine und Reports

Für eine Produktive Umgebung sollten Sie SSL für:

  • AgilePoint Portal, Engine
  • Reports
gleichzeitig umstellen. Dabei fallen dann die Notwendigkeit der Installtion und Konfiguration für "Application Request Routing" und "URL Rewrite" weg. Gehen Sie wie folgt vor:

A.) Prüfen Sie Basisfunktionalität von AgilePoint Reports

Rufen Sie folgende URL auf:

http://<YourAgilePointMachine>:13492/AgileReports/rdTemplate/rdGetSecureKey.aspx?Domain=<YourDomain>&Username=<YourUserName>&ClientBrowserAddress=0.0.0.0

Dies sollte eine Guid im Bowser zurückgeben. Wenn ein Fehler auftritt wird Ihnen im Fehler eine IP Adresse genannt. Dann bitte folgenden Schritt durchführen:

Öffnen Sie Notepad (oder einen anderen Texteditor Ihrer Wahl) als Administrator
Öffnen Sie dann die Datei "C:\Program Files\AgilePoint\AgilePointWebApplication\AgilePointReports\AgileReports\_Definitions\_Settings.lgx"

Ändern Sie dort die Einstellung:

AuthenticationClientAddresses="::1,127.0.0.1"

auf die im Fehler genannte IP Adresse:

AuthenticationClientAddresses="<ToldIPAdressInError>,::1,127.0.0.1" 



Beispiel:

für einen Certificate Hash von: 7f30e651a86149c48457659b9a91bc0e5dd3ca66

ergeben sich für die einzelnen Ports

netsh http add sslcert ipport=0.0.0.0:13487 certhash=7f30e651a86149c48457659b9a91bc0e5dd3ca66 appid={c929c857-e10a-48c4-b123-5713faba528e}
netsh http add sslcert ipport=0.0.0.0:13488 certhash=7f30e651a86149c48457659b9a91bc0e5dd3ca66 appid={c929c857-e10a-48c4-b123-5713faba528e}
netsh http add sslcert ipport=0.0.0.0:13489 certhash=7f30e651a86149c48457659b9a91bc0e5dd3ca66 appid={c929c857-e10a-48c4-b123-5713faba528e}
netsh http add sslcert ipport=0.0.0.0:13490 certhash=7f30e651a86149c48457659b9a91bc0e5dd3ca66 appid={c929c857-e10a-48c4-b123-5713faba528e}

Überprüfen Sie auch die Aufrufe der Engine WebServices über HTTPs:


D.) Überspringen Sie den folgen Schritt: Configure Application Routing for Report Center


F.) Testen Sie den Aufruf des AgilePoint Portals (noch über HTTP), die WebServices laufen bereits über HTTPs

G.) Stellen Sie das AgilePoint Portal im IIS auf SSL/HTTPs um



H.) Stellen Sie AgileReports im IIS auf SSL/HTTPs um



I.) Passen Sie das Web.Config des Portals an:

Die Datei liegt bei einer Standard Intsallation unter: "C:\Program Files\AgilePoint\AgilePointWebApplication\AgilePointPortal\Web.config"

Verwenden Sie die vollqualifizierte URL mit HTTPs und richtigem Port von Reports


J.) Testen Sie den Aufruf vom AgilePoint Portal und AgilePoint Reports

K.) Löschen Sie die HTTP Bindings im IIS für Portal und Reports, so dass nun nur noch der Zugriff per HTTPs möglich ist

Wenn Sie die SSL Konfiguration rückgängig machen wollen: führen Sie alle Schritte in umgekehter reihenfolge aus. Z.B. sind cmd's zu Löschen der SSL Portbindung:

netsh http delete sslcert ipport=0.0.0.0:13487
netsh http delete sslcert ipport=0.0.0.0:13488
netsh http delete sslcert ipport=0.0.0.0:13489
netsh http delete sslcert ipport=0.0.0.0:13490

Base64 kodierte Inhalte einer Datei in AgilePoint Prozessdaten laden

Einige Webservices erforden als Eingang Base64 kodierte Inhalte einer Datei. Speichern Sie diese in AgilePoint Prozessdaten und verwenden diese dann im Mapping auf die eine WebService Methode. Hierzu benötigen Sie eine AgilePoint Erweiterung - exemplarisch umgesetzt als WebService. Die Methode "GetFileContentAsBase64" rufen Sie aus einem AgileProzess heraus auf. Diese lädt eine Datei über eine URL und gibt deren Inhalt Base64 kodiert zurück. Laden Sie den WebService hier runter.

1.) Extrahieren Sie das Archive und stellen Sie den WebSerice im IIS bereit



2.) Setzen Sie den Application Pool, z.B. der AgilePoint AppPool. Der Account des App Pool muss auch auf URLs berechtigt sein, die Sie später aufrufen (z.B. SharePoint DocLib).



3.) Erstellen Sie ein Global Acces Token auf den WebService



4.) Erstellen Sie eine AgilePoint Anwendung

5.) Fügen Sie dem Formular ein "File Upload" Control hinzu und konfigurieren eine SharePoint DocLib als Repository



6.) Erstellen Sie eine lokale Variable zum Speichern des Base64 kodierten Inhaltes



7.) Erstellen Sie im Prozess mit dem WCF WebService Activity den Zugriff auf den eigenen WebService und konfigurieren den Zugriff





8.) Führen Sie das Deployment der Anwendung durch

9.) Füllen Sie das Formular aus und senden es ab



10.) Suchen Sie die Prozessdaten raus und kontrollieren die Base64  kodierten Inhalte der  Datei



11.) Verwenden Sie die Base64  kodierten Inhalte der  Datei nun in folgenden Activities (z.B. andere WebService Calls).


Kontaktformular

Name

E-Mail *

Nachricht *