現在表示中:

実行時に AEM Forms ワークフローのユーザーまたはグループを選択する方法について説明します。

大規模な組織では、プロセスのユーザーを動的に選択する必要があります。例えば、お客様に対応するフィールドエージェントを、お客様とエージェントの近さを基準として選択します。このようなシナリオで、エージェントは動的に選択されます。

OSGi 上の Forms 中心のワークフローのタスクの割り当ておよび Adobe Sign 手順では、ユーザーを動的に選択するオプションを提供しています。ECMAScript または OSGi バンドルを使用して、タスクの割り当て手順の担当者を動的に選択したり、ドキュメントに署名手順の署名者を選択したりすることができます。

ECMAScript を使用して、ユーザーまたはグループを動的に選択

ECMAScript はスクリプト言語です。この言語は、クライアント側のスクリプト作成とサーバーアプリケーションに使用されます。ECMAScript を使用して、ユーザーまたはグループを動的に選択するには、以下の手順を実行します。

  1. CRXDE Lite を開きます。URL は http://[server]:[port]/crx/de/index.jsp です。

  2. 次のパスに移動して、拡張子が .ecma のファイルを作成します。

    • (タスクの割り当て手順のパス)/apps/fd/dashboard/scripts/participantChooser
    • (署名手順のパス) /apps/fd/workflow/scripts/adobesign

    上記のパスが存在しない場合は作成します。 

  3. 動的にユーザーを選択するロジックを含む ECMAScript を .ecma ファイルに追加します。「すべて保存」をクリックします。

    サンプルスクリプトについて詳しくは、「ユーザーまたはグループを動的に選択するためのサンプル ECMAScripts 」を参照してください。

  4. スクリプトの名前を指定します。名前を指定するには:

    1. スクリプトノードを拡張します。jcr:content ノードを右クリックしてから、「Mixins」をクリックします。

    2. Mixin を編集ダイアログに mix:title と入力して、「+」をクリックします。

    3. プロパティに次の値を入力し、「すべて保存」をクリックします。

      名前jcr:title

      タイプString

      :スクリプトの名前を指定します。例えば、最寄のフィールドエージェントを選択します。この名前は、タスクの割り当ておよびドキュメントに署名手順で表示されます。

    このスクリプトは、AEM ワークフローのタスクの割り当ておよび Adobe Sign コンポーネントで選択できるようになります。

    Scripst-in-the-participant-chooser-script-page

ユーザーまたはグループを動的に選択するためのサンプル ECMAScripts

次のサンプル ECMAScript では、タスクの割り当て手順に担当者を動的に選択します。このスクリプトでは、ユーザーはペイロードのパスに基づいて選択されます。このスクリプトを使用する前に、スクリプトに記述されているすべてのユーザーが AEM に存在することを確認してください。スクリプトに記述されているユーザーが AEM に存在しない場合、関連するプロセスが失敗する可能性があります。

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";
            }
}
}

次のサンプル ECMAScript では、Adobe Sign 手順に担当者を動的に選択します。以下のスクリプトを使用する前に、スクリプトに記述されているユーザー情報(電子メールアドレスと電話番号)が正しいことを確認してください。スクリプトに記述されているユーザー情報が正しくない場合、関連するプロセスが失敗する可能性があります。

注意:

Adobe Sign で ECMAScript を使用する場合、スクリプトは /apps/fd/workflow/scripts/adobesign/ にある必要があります。また、ユーザーのリストを返す getAdobeSignRecipients という名前の関数が含まれている必要があります。 

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;

}

ユーザーまたはグループを動的に選択するための Java インターフェースの使用

RecipientInfoSpecifier Java インターフェースを使用して、Adobe Sign やタスクの割り当て手順にユーザーまたはグループを動的に選択することができます。RecipientInfoSpecifier Java インターフェースを使用する OSGi バンドルを作成して、AEM Forms サーバーにデプロイすることができます。これにより、AEM ワークフローのタスクの割り当ておよび Adobe Sign コンポーネントで、オプションを選択できるようになります。

次のコードサンプルをコンパイルするには、AEM Forms Client SDK jar および granite jar ファイルが必要です。これらの jar ファイルを、外部依存として OSGi バンドルプロジェクトに追加します。OSGi バンドルの作成には、任意の Java IDE を使用できます。以下の手順では、Eclipse を使用して OSGi バンドルを作成します。

  1. Eclipse IDE を開きます。ファイル新規プロジェクトに移動します。

  2. ウィザードを選択画面で、Maven プロジェクトを選択し、「次へ」をクリックします。

  3. 新しい Maven プロジェクトではデフォルトを保持し、「次へ」をクリックします。archetype を選択して「次へ」をクリックします。例えば、maven-archetype-quickstart などです。プロジェクトにグループ IDアーティファクト IDバージョンパッケージを指定して、「完了」をクリックします。プロジェクトが作成されます。

  4. 編集のために pom.xml ファイルを開き、ファイルのすべての中身を次で置き換えます。

    <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>
    
  5. RecipientInfoSpecifier Java インターフェースを使用するソースコードを追加して、タスクの割り当て手順にユーザーまたはグループを動的に選択することができます。サンプルコードについて詳しくは、「Java インターフェイスを使用してユーザーまたはグループを動的に選択するためのサンプル」を参照してください。

  6. コマンドプロンプトを開き、OSGi バンドルプロジェクトを含むディレクトリに移動します。次のコマンドを使用して OSGi バンドルを作成します。

    mvn clean install

     

  7. バンドルを AEM Forms サーバーにアップロードします。AEM Package Manager を使用して、バンドルを AEM Forms サーバーに読み込むことができます。

バンドルを読み込むと、Adobe Sign やタスクの割り当て手順で、ユーザーまたはグループを動的に選択する Java オプションを使用できるようになります。 

ユーザーまたはグループを動的に選択するためのサンプル Java コード

次のサンプル Java コードでは、Adobe Sign 手順に担当者を動的に選択します。OSGi バンドルのコードを使用します。以下のコードを使用する前に、コードに記述されているユーザー情報(電子メールアドレスと電話番号)が正しいことを確認してください。コードに記述されているユーザー情報が正しくない場合、関連するプロセスが失敗する可能性があります。

/*************************************************************************
 *
 * 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;
        
    	
    }

}

本作品は Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License によってライセンス許可を受けています。  Twitter™ および Facebook の投稿には、Creative Commons の規約内容は適用されません。

リーガルノーティス   |   プライバシーポリシー