Sie sehen sich Hilfeinhalte der folgenden Version an:
- 6.4
- 6.3
- Ältere Versionen
In großen Unternehmen ist es erforderlich, Benutzer für einen Prozess dynamisch auszuwählen. Beispiel: Auswahl eines Außendienstmitarbeiters zur Betreuung eines Kunden auf Basis der Entfernung zwischen Mitarbeiter und Kunden. In einem solchen Szenario wird der Mitarbeiter dynamisch ausgewählt.
Die Schritte „Aufgabe zuweisen“ und „Adobe Sign“ von Formularzentrierte Workflows unter OSGi bieten Optionen für die dynamische Auswahl von Benutzern. Sie können ECMAScript oder OSGi-Bundles verwenden, um einen Beauftragten für „Aufgabe zuweisen“ oder eine unterschreibende Person für den Schritt „Dokument unterschreiben“ dynamisch auszuwählen.
ECMAScript ist eine Skriptsprache. Sie wird für die clientseitige Skripterstellung und Serveranwendungen verwendet. Führen Sie die folgenden Schritte aus, um mit ECMAScript einen Benutzer oder eine Gruppe dynamisch auszuwählen:
-
Fügen Sie der ECMA-Datei ein ECMAScript hinzu, welches über eine Logik zur dynamischen Auswahl von Benutzern verfügt, hinzu. Klicken Sie auf Alle speichern.
Beispielskripte finden Sie unter Beispiele für ECMAScripts zur dynamischen Auswahl eines Benutzers oder einer Gruppe.
-
-
Fügen Sie eine Eigenschaft mit den folgenden Werten ein und klicken Sie auf Alle speichernl.
Name: jcr:title
Typ: String
Wert: Geben Sie den Namen des Skripts ein. Wählen Sie beispielsweise den nächstgelegenen Außendienstmitarbeiter aus. Dieser Name wird in den Schritten „Aufgabe zuweisen“ und „Dokument unterschreiben“ angezeigt.
Das Skript ist zur Auswahl in den Komponenten „Aufgabe zuweisen“ und „Adobe Sign“ im AEM-Arbeitsablauf verfügbar.
Im folgenden Beispiel wählt das ECMAScript dynamisch einen Verantwortlichen für den Schritt „Aufgabe zuweisen“ aus. In diesem Skript wird ein Benutzer basierend auf dem Pfad der Nutzlast ausgewählt. Vor der Verwendung dieses Skripts müssen Sie sicherstellen, dass alle Benutzer, die im Skript angegeben sind, in AEM vorhanden sind. Wenn die im Skript enthaltenen Benutzer nicht in AEM existieren, schlägt der entsprechende Prozess möglicherweise fehl.
function getParticipant() { var workflowData = graniteWorkItem.getWorkflowData(); if (workflowData.getPayloadType() == "JCR_PATH") { var path = workflowData.getPayload().toString(); if (path.indexOf("/content/geometrixx/en") == 0) { return "user1"; } else { return "user2"; } } }
Im folgenden Beispiel wählt das ECMAScript dynamisch einen Verantwortlichen für den Schritt „Adobe Sign“ aus. Vor der Verwendung der unten aufgeführten Skripts müssen Sie sicherstellen, dass die Benutzerinformationen (E-Mail-Adressen und Telefonnummern), die im Skript genannt werden, richtig sind. Wenn die im Skript enthaltenen Benutzerdaten nicht korrekt sind, schlägt der entsprechende Prozess möglicherweise fehl.
Hinweis:
Bei der Verwendung von ECMAScript für Adobe Sign muss sich das Skript im CRX-Repository unter /apps/fd/workflow/scripts/adobesign/ befinden und es sollte über eine Funktion namens getAdobeSignRecipients verfügen, die eine Liste der Benutzer zurückgibt.
function getAdobeSignRecipients() { var recipientSetInfos = new Packages.java.util.ArrayList(); var recipientInfoSet = new com.adobe.aem.adobesign.recipient.RecipientSetInfo(); var recipientInfoList = new Packages.java.util.ArrayList(); var recipientInfo = new com.adobe.aem.adobesign.recipient.RecipientInfo(); var email; var recipientAuthenticationMethod = com.adobe.aem.adobesign.recipient.RecipientAuthenticationMethod.PHONE; //var recipientAuthenticationMethod = com.adobe.aem.adobesign.recipient.RecipientAuthenticationMethod.NONE; var securityOptions = null; var phoneNumber = "123456789"; var countryCode = "+1"; var recipientPhoneInfo = new Array(); recipientPhoneInfo.push(new com.adobe.aem.adobesign.recipient.RecipientPhoneInfo(phoneNumber, countryCode)); securityOptions = new com.adobe.aem.adobesign.recipient.RecipientSecurityOption(recipientAuthenticationMethod, recipientPhoneInfo , null); email = "example@example.com"; recipientInfo.setEmail(email); recipientInfo.setSecurityOptions(securityOptions); recipientInfoList.add(recipientInfo); recipientInfoSet.setMemberInfos(recipientInfoList); recipientSetInfos.add(recipientInfoSet); return recipientSetInfos; }
Sie können die Java-Schnittstelle RecipientInfoSpecifier verwenden, um einen Benutzer oder eine Gruppe für die Schritte „Adobe Sign“ und „Aufgabe zuzuweisen“ dynamisch auszuwählen. Sie können ein OSGi-Bundle erstellen, das die Java-Schnittstelle RecipientInfoSpecifier verwendet, und es auf dem AEM Forms-Server bereitstellen. Dadurch ist die Option zur Auswahl in den Komponenten „Aufgabe zuweisen“ und „Adobe Sign“ im AEM-Arbeitsablauf verfügbar.
Sie benötigen die AEM Forms Client SDK-JAR und die granite-JAR, um die unten aufgeführten Codebeispiele zu kompilieren. Fügen Sie diese JAR-Dateien dem OSGi-Bundle-Projekt als externe Abhängigkeiten hinzu. Sie können eine beliebigen Java-IDE verwenden, um ein OSGi-Bundle zu erstellen. Das folgende Beispiel zeigt die Erstellung eines OSGi-Bundles mithilfe von Eclipse:
-
Behalten Sie im Feld „Neues Maven-Projekt“ die Standardeinstellungen bei und klicken Sie auf Weiter. Wählen Sie einen Archetyp aus und klicken Sie auf Weiter. Beispiel: maven-archetype-quickstart. Geben Sie Group Id, ArtifactID, Version und Paket für das Projekt an und klicken Sie auf Beenden. Das Projekt wird erstellt.
-
Öffnen Sie die Datei „pom.xml“ zur Bearbeitung und ersetzen Sie den gesamten Inhalt dieser Datei durch den folgenden Text:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>getAgent</groupId> <artifactId>assignToAgent</artifactId> <version>1.0</version> <packaging>bundle</packaging><!-- packaging type bundle is must --> <name>assignToAgent</name> <url>http://maven.apache.org</url> <repositories> <repository> <id>adobe</id> <name>Adobe Public Repository</name> <url>http://repo.adobe.com/nexus/content/groups/public/</url> <layout>default</layout> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>adobe</id> <name>Adobe Public Repository</name> <url>http://repo.adobe.com/nexus/content/groups/public/</url> <layout>default</layout> </pluginRepository> </pluginRepositories> <dependencies> <dependency> <groupId>com.adobe.aemfd</groupId> <artifactId>aemfd-client-sdk-test</artifactId> <version>4.0.70</version> </dependency> <dependency> <groupId>com.adobe.granite</groupId> <artifactId>com.adobe.granite.workflow.api</artifactId> <version>1.0.0</version> </dependency> <dependency> <groupId>org.osgi</groupId> <artifactId>org.osgi.core</artifactId> <version>4.2.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.felix</groupId> <artifactId>org.apache.felix.scr.annotations</artifactId> <version>1.7.0</version> </dependency> <dependency> <groupId>org.apache.sling</groupId> <artifactId>org.apache.sling.api</artifactId> <version>2.2.0</version> </dependency> </dependencies> <!-- ====================================================================== --> <!-- B U I L D D E F I N I T I O N --> <!-- ====================================================================== --> <build> <plugins> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <extensions>true</extensions> <configuration> <instructions> <Bundle-SymbolicName>com.aem.assigntoAgent-bundle</Bundle-SymbolicName> </instructions> </configuration> </plugin> <plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-scr-plugin</artifactId> <version>1.9.0</version> <executions> <execution> <id>generate-scr-descriptor</id> <goals> <goal>scr</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
-
Fügen Sie Quellcode hinzu, der die Java-Schnittstelle RecipientInfoSpecifier verwendet, um einen Benutzer oder eine Gruppe für den Schritt „Aufgabe zuweisen“ dynamisch zuzuweisen. Unter Beispiel für die dynamische Auswahl eines Benutzers oder einer Gruppe mithilfe einer Java-Schnittstelle finden Sie einen Beispielcode.
Nachdem das Bundles importiert wurde, ist die Option für die Auswahl der Java-Schnittstelle zum dynamischen Auswählen eines Benutzers oder einer Gruppe für die Schritte „Adobe Sign“ und „Aufgabe zuweisen“ verfügbar.
Der Beispielcode im folgenden Beispiel wählt dynamisch einen Verantwortlichen für den Schritt „Adobe Sign“ aus. Sie verwenden den Code in einem OSGi-Bundle. Vor der Verwendung der unten aufgeführten Codes müssen Sie sicherstellen, dass die Benutzerinformationen (E-Mail-Adressen und Telefonnummern), die im Code genannt werden, richtig sind. Wenn die im Code enthaltenen Benutzerdaten nicht korrekt sind, schlägt der entsprechende Prozess möglicherweise fehl.
/************************************************************************* * * ADOBE CONFIDENTIAL * __________________ * * Copyright 2016 Adobe Systems Incorporated * All Rights Reserved. * * NOTICE: All information contained herein is, and remains * the property of Adobe Systems Incorporated and its suppliers, * if any. The intellectual and technical concepts contained * herein are proprietary to Adobe Systems Incorporated and its * suppliers and are protected by trade secret or copyright law. * Dissemination of this information or reproduction of this material * is strictly forbidden unless prior written permission is obtained * from Adobe Systems Incorporated. **************************************************************************/ package com.aem.impl; import java.util.ArrayList; import java.util.List; import com.adobe.aem.adobesign.recipient.RecipientAuthenticationMethod; import com.adobe.aem.adobesign.recipient.RecipientInfo; import com.adobe.aem.adobesign.recipient.RecipientPhoneInfo; import com.adobe.aem.adobesign.recipient.RecipientSecurityOption; import com.adobe.aem.adobesign.recipient.RecipientSetInfo; import com.adobe.fd.workflow.adobesign.api.RecipientInfoSpecifier; import com.adobe.granite.workflow.WorkflowException; import com.adobe.granite.workflow.WorkflowSession; import com.adobe.granite.workflow.exec.WorkItem; import com.adobe.granite.workflow.metadata.MetaDataMap; import org.apache.felix.scr.annotations.Component; import org.apache.felix.scr.annotations.Service; /** * <code>DummyRecipientInfoSpecifier implementation. A sample code to write implementation of RecipientInfoSpecifier to choose recipients/code>... */ @Service @Component(metatype = false) public class DummyRecipientChoser implements RecipientInfoSpecifier { public List<RecipientSetInfo> getAdobeSignRecipients(WorkItem workItem, WorkflowSession workflowSession, MetaDataMap args) throws WorkflowException { List<RecipientSetInfo> recipientSetInfos = new ArrayList<RecipientSetInfo>(); //First Recipient RecipientSetInfo recipientInfoSet1 = new RecipientSetInfo(); List<RecipientInfo> recipientInfoList = new ArrayList<RecipientInfo>(); RecipientInfo recipientInfo1 = new RecipientInfo();//Member to first recipient String email; RecipientAuthenticationMethod recipientAuthenticationMethod = RecipientAuthenticationMethod.WEB_IDENTITY; RecipientSecurityOption securityOptions = null; String phoneNumber = "123456789"; String countryCode = "+1"; RecipientPhoneInfo[] recipientPhoneInfo = new RecipientPhoneInfo[1]; //if multiple phone numbers, size>1 recipientPhoneInfo[0] = new RecipientPhoneInfo(phoneNumber, countryCode); securityOptions = new RecipientSecurityOption(recipientAuthenticationMethod, recipientPhoneInfo , null); email = "example@example.com"; recipientInfo1.setEmail(email); recipientInfo1.setSecurityOptions(securityOptions); recipientInfoList.add(recipientInfo1); //Add member recipientInfoSet1.setMemberInfos(recipientInfoList); //Second Recipient RecipientSetInfo recipientInfoSet2 = new RecipientSetInfo(); List<RecipientInfo> recipientInfoList2 = new ArrayList<RecipientInfo>(); recipientAuthenticationMethod = RecipientAuthenticationMethod.PHONE; securityOptions = null; phoneNumber = "987654321";//"0123456789"; countryCode = "+1"; RecipientPhoneInfo[] recipientPhoneInfo_1 = new RecipientPhoneInfo[1]; recipientPhoneInfo_1[0] = new RecipientPhoneInfo(phoneNumber, countryCode); securityOptions = new RecipientSecurityOption(recipientAuthenticationMethod, recipientPhoneInfo_1 , null); email = "example2@example.com";//"dummymail2@domain.com"; RecipientInfo recipientInfo2 = new RecipientInfo(); recipientInfo2.setEmail(email); recipientInfo2.setSecurityOptions(securityOptions); recipientInfoList2.add(recipientInfo2); //Add member recipientInfoSet2.setMemberInfos(recipientInfoList2); //********************************* recipientSetInfos.add(recipientInfoSet1); recipientSetInfos.add(recipientInfoSet2); return recipientSetInfos; } }