Veeva Vault Connector 1.5 の例 - Mule 4

Veeva Vault でのドキュメントの作成

次の例では、外部ソース (データベース) からフェッチしたドキュメントメタデータを使用してドキュメントを一括で作成します。Veeva Vault でドキュメントを作成する前に、Veeva Vault FTP サーバーを使用してドキュメントファイルをアップロードします。ドキュメントの ​created​ 状況がデータベースに挿入されます。

次のスクリーンショットは、この例の Studio アプリケーションフローを示しています。

Create Documents 操作の Mule フロー
Upload Documents 操作の Mule フロー

最初のフローを作成する

  1. [Mule Palette (Mule パレット)]​ ビューから、​[HTTP]​ を選択して ​[Listener]​ ソースをキャンバスにドラッグします。

  2. 使用する環境に応じて HTTP リスナーを設定します。

  3. [Mule Palette (Mule パレット)]​ ビューから、​[Database (データベース)]​ を選択して ​[Select]​ 操作をキャンバスにドラッグし、テーブルからドキュメントメタデータをフェッチします。

  4. 接続ログイン情報を使用するように Database Connector を設定します。

  5. [SQL Query Text (SQL クエリテキスト)] 項目に「​>SELECT * FROM createdocuments​」と入力します。

  6. [Mule Palette (Mule パレット)]​ ビューから ​[Core (コア)]​ を選択して ​[Flow Reference]​ コンポーネントをキャンバスにドラッグし、サブフロー ​upload-files-on-vault-ftp-server​ を参照します。

  7. [Mule Palette (Mule パレット)]​ ビューから ​[Core (コア)]​ を選択して ​[For Each]​ スコープを次の要素が含まれるキャンバスにドラッグします。

    1. [Mule Palette (Mule パレット)]​ ビューから、​[Core (コア)]​ を選択して ​[Transform Message]​ コンポーネントをキャンバスにドラッグし、ドキュメントメタデータを CSV 形式に変換します。

    2. [Mule Palette (Mule パレット)]​ ビューから、​[Veeva Vault]​ を選択して ​[Create Documents]​ 操作をキャンバスにドラッグします。

    3. Veeva Vault 接続の次の値を入力します。

      • Username (ユーザー名)

      • Password (パスワード)

      • Vault URL

      • Vault version (Vault バージョン)

      • Vault client ID (Vault クライアント ID)

    4. [Mule Palette (Mule パレット)]​ ビューから、​[Database (データベース)]​ を選択して ​[Bulk insert]​ 操作をキャンバスにドラッグし、ドキュメント作成済み状況データをデータベーステーブルに挿入します。

  8. 接続ログイン情報を使用するように Database Connector を設定します。

  9. [Mule Palette (Mule パレット)]​ ビューから ​[Core (コア)]​ を選択して ​[Logger]​ コンポーネントをキャンバスにドラッグし、コンソールまたはログファイルに情報を記録します。

2 つ目のフローを作成する

  1. [Mule Palette (Mule パレット)]​ ビューから、​[Core (コア)]​ を選択して ​[Logger]​ コンポーネントをキャンバスにドラッグし、このサブフローの情報を記録します。

  2. [Mule Palette (Mule パレット)]​ ビューから ​[Core (コア)]​ を選択して ​[For Each]​ スコープを次の要素が含まれるキャンバスにドラッグします。

    1. [Mule Palette (Mule パレット)]​ ビューから、​[Core (コア)]​ を選択して ​[Logger]​ コンポーネントをキャンバスにドラッグします。

    2. [Mule Palette (Mule パレット)]​ ビューから、​[FTPS]​ を選択して ​[Read]​ 操作をキャンバスにドラッグします。

    3. [Mule Palette (Mule パレット)]​ ビューから、​[Core (コア)]​ を選択して ​[Logger]​ コンポーネントをキャンバスにドラッグします。

    4. [Mule Palette (Mule パレット)]​ ビューから ​[FTPS]​ を選択して ​[Write]​ 操作をキャンバスにドラッグし、ファイルを Veeva Vault FTP サーバーに書き込みます。

  3. [Mule Palette (Mule パレット)]​ ビューから、​[Core (コア)]​ を選択して別の ​[Logger]​ コンポーネントをキャンバスにドラッグします。

  4. Veeva Vault FTP サーバーのログイン情報を使用するように FTPS Connector を設定します。

例の XML

この例の 2 つのフローをすばやく Mule アプリケーションに読み込むには、次のコードを Studio XML エディターに貼り付けます。

<flow name="create-documents-operationFlow" >
    <http:listener doc:name="Listener" config-ref="HTTP_Listener_config" path="/create-documents"/>
    <db:select doc:name="Select" config-ref="Database_Config">
        <db:sql >SELECT * FROM createdocuments</db:sql>
    </db:select>
    <flow-ref doc:name="upload-files-on-vault-ftp-server" name="upload-files-on-vault-ftp-server"/>
    <ee:transform doc:name="Transform Message" >
        <ee:message>
            <ee:set-payload><![CDATA[%dw 2.0
output application/csv headerLineNumber = 0 , header = true
---
payload map ( payload01 , indexOfPayload01 ) -> {
	lifecycle__v: payload01.lifecycle__v,
	study__v: payload01.study__v,
	subtype__v: payload01.subtype__v,
	name__v: payload01.name__v ++ '--' ++ randomInt(10000) as String,
	type__v: payload01.type__v,
	classification__v: payload01.classification__v,
	product__v: payload01.product__v,
	file: payload01.file as String
	}]]></ee:set-payload>
        </ee:message>
    </ee:transform>
    <veevavault:create-documents metadataFormat="CSV" doc:name="Create Documents" config-ref="Veeva_Vault_Config"/>
    <db:bulk-insert doc:name=__"Bulk insert" config-ref="Database_Config">
        <db:bulk-input-parameters ><![CDATA[#[output application/java
---
payload.data map () -> {
	'id': $.id as String,
	'external_id__v': $.external_id__v as String,
	'responseStatus': $.responseStatus
	}]]]>
        </db:bulk-input-parameters>
        <db:sql >INSERT into documents (id, external_id__v, responseStatus) VALUES (:id: external_id__v, :responseStatus)
</db:sql>
    </db:bulk-insert>
    <logger level="INFO" doc:name="Logger" message="Document Created :: #[output application/json --- payload]"/>
    <error-handler >
        <on-error-propagate enableNotifications="true" logException="true" doc:name="On Error Propagate" type="ANY" >
            <logger level="INFO" doc:name="Logger" message="Flow Exception Handled --  #[payload]" />
        </on-error-propagate>
    </error-handler>
</flow>

ドキュメントの詳細を取得する

この例では、ドキュメント種別、サブタイプ、分類に基づいてドキュメントの詳細を取得してデータベースに保存します。

次のスクリーンショットは、この例の Studio アプリケーションフローを示しています。

Get Documents 操作の Mule フロー
  1. [Mule Palette (Mule パレット)]​ ビューから、​[HTTP]​ を選択して ​[Listener]​ ソースをキャンバスにドラッグします。

  2. 使用する環境に応じて HTTP リスナーを設定します。

  3. [Mule Palette (Mule パレット)]​ ビューから、​[Veeva Vault]​ を選択して ​[Get Documents]​ 操作をキャンバスにドラッグします。

  4. Veeva Vault 接続の次の値を入力します。

    • Username (ユーザー名)

    • Password (パスワード)

    • Vault URL

    • Vault version (Vault バージョン)

    • Vault client ID (Vault クライアント ID)

  5. 各更新ボタンをクリックして、ドキュメント種別、サブタイプ、および分類のリストをフェッチします。

  6. 各ドロップダウンリストからドキュメント種別、サブタイプ、および分類を選択します。

  7. ビジネス要件に応じてドキュメントプロパティを [Document Properties (ドキュメントプロパティ)] リストに追加し、プロパティ名を VQL クエリに組み込んで、VQL クエリを動的にビルドします。

  8. [Mule Palette (Mule パレット)]​ ビューから ​[Core (コア)]​ を選択して ​[For Each]​ スコープを次の要素が含まれるキャンバスにドラッグします。

    1. [Mule Palette (Mule パレット)]​ ビューから、​[Core (コア)]​ を選択して ​[Transform Message]​ コンポーネントをキャンバスにドラッグします。

    2. [Mule Palette (Mule パレット)]​ ビューから、​[Database (データベース)]​ を選択して ​[Insert]​ 操作をキャンバスにドラッグします。

    3. 接続ログイン情報を使用して、Database Connector を設定します。

  9. ビジネス要件に従って、DataWeave を使用して変換を設定します。

  10. データをテーブルに挿入するように ​Insert​ 操作を設定します。

  11. [Mule Palette (Mule パレット)]​ ビューから ​[Core (コア)]​ を選択して ​[Set Payload]​ トランスフォーマーをキャンバスにドラッグし、トリガーソースに返すペイロードを設定します。

  12. [Mule Palette (Mule パレット)]​ ビューから ​[Core (コア)]​ を選択して ​[Logger]​ コンポーネントをキャンバスにドラッグし、コンソールまたはログファイルに情報を記録します。

例の XML

この例のフローをすばやく Mule アプリケーションに読み込むには、次のコードを Studio XML エディターに貼り付けます。

<flow name="get-documents-operationFlow" >
	<http:listener doc:name="Listener" config-ref="HTTP_Listener_config" path="/get-documents" />
	<veevavault:get-documents doc:name="Get Documents" config-ref="Veeva_Vault_Config" >
		<veevavault:documents type="site_management__c">
		<veevavault:document-properties >
		<veevavault:document-property value=__"name__v"__ />
		<veevavault:document-property value=__"type__v"__ />
		<veevavault:document-property value=__"subtype__v"__ />
		<veevavault:document-property value=__"classification__v"__ />
		<veevavault:document-property value=__"lifecycle__v"__ />
		<veevavault:document-property value=__"status__v"__ />
		<veevavault:document-property value=__"study__v"__ />
		<veevavault:document-property value=__"product__v"__ />
		</veevavault:document-properties>
		</veevavault:documents>
	</veevavault:get-documents>
	<foreach doc:name="For Each" >
	<ee:transform doc:name="Transform Message" >
		<ee:message >
		<ee:set-payload ><![CDATA[%dw 2.0
		output application/json
		---
		payload]]></ee:set-payload>
		</ee:message>
	</ee:transform>
	<db:insert doc:name="Insert" config-ref="Database_Config">
		<db:sql >INSERT INTO [.underline]#createdocuments# (name__v, type__v, subtype__v, classification__v, lifecycle__v,
		product__v, status__v, study__v, file) VALUES (:name__v, :type__v, :subtype__v, :classification__v, :lifecycle__v, :product__v, :status__v, :study__v, :file)</db:sql>
		<db:input-parameters ><![CDATA[#[%dw 2.0
		output application/json
		---
		{
			'name__v': payload.name__v as String,
			'type__v': payload.type__v as String,
			'subtype__v': payload.subtype__v as String,
			'classification__v': payload.classification__v as String,
			'lifecycle__v': payload.lifecycle__v as String,
			'product__v': payload.product__v[0],
			'status__v': payload.status__v as String,
			'study__v': payload.study__v[0],
			'file': "CDA.docx"
		}]]]></db:input-parameters>
	</db:insert>
	</foreach>
	<set-payload value="#[output application/json --- payload.payload]" doc:name="Set Payload" />
	<logger level=__"INFO" doc:name="Logger" message="Document Details :: #[payload]"/>
	<error-handler >
	<on-error-propagate enableNotifications="true" logException="true" doc:name="Error Propagate" type="ANY" >
	<logger level="INFO" doc:name="Logger" message="Flow Exception Handled -- #[payload]" />
	</on-error-propagate>
	</error-handler>
	</flow>

ドキュメントまたはオブジェクトデータのフェッチ

この例では、VQL クエリを使用して Veeva Vault からドキュメントまたはオブジェクトデータをフェッチします。

次のスクリーンショットは、この例の Studio アプリケーションフローを示しています。

Query 操作の Mule フロー

  1. [Mule Palette (Mule パレット)]​ ビューから、​[HTTP]​ を選択して ​[Listener]​ ソースをキャンバスにドラッグします。

  2. 使用する環境に応じて HTTP リスナーを設定します。

  3. [Mule Palette (Mule パレット)]​ ビューから、​[Veeva Vault]​ を選択して ​[Query]​ 操作をキャンバスにドラッグします。

  4. Veeva Vault 接続の次の値を入力します。

    • Username (ユーザー名)

    • Password (パスワード)

    • Vault URL

    • Vault version (Vault バージョン)

    • Vault client ID (Vault クライアント ID)

  5. ビジネス要件に従って VQL クエリを定義します。

  6. VQL クエリで使用する場合は、入力プレースホルダーを追加して、実行時に VQL で動的に組み込みます。

  7. [Mule Palette (Mule パレット)]​ ビューから ​[Core (コア)]​ を選択して ​[For Each]​ スコープを次の要素が含まれるキャンバスにドラッグします。

    1. [Mule Palette (Mule パレット)]​ ビューから、​[Core (コア)]​ を選択して ​[Transform Message]​ コンポーネントをキャンバスにドラッグします。

    2. [Mule Palette (Mule パレット)]​ ビューから、​[File (ファイル)]​ を選択して ​[Write]​ 操作をキャンバスにドラッグします。

  8. ビジネス要件に従って、DataWeave を使用して変換を設定します。

  9. 作業ファイルのパスを使用して、File Connector を設定します。

  10. 指定したファイルにペイロードデータを書き込むように ​Write​ 操作を設定します。

  11. [Mule Palette (Mule パレット)]​ ビューから ​[Core (コア)]​ を選択して ​[Set Payload]​ トランスフォーマーをキャンバスにドラッグし、トリガーソースに返すペイロードを設定します。

  12. [Mule Palette (Mule パレット)]​ ビューから ​[Core (コア)]​ を選択して ​[Logger]​ コンポーネントをキャンバスにドラッグし、コンソールまたはログファイルに情報を記録します。

例の XML

この例のフローをすばやく Mule アプリケーションに読み込むには、次のコードを Studio XML エディターに貼り付けます。

<flow name="query-operation-with-database-operationFlow" >
		<http:listener doc:name="Listener" config-ref="HTTP_Listener_config" path="/query"/>
		<veevavault:query doc:name="Query" fetchSize="1000" config-ref="Veeva_Vault_Config">
			<veevavault:vql >SELECT id, name__v, type__v, subtype__v, classification__v, lifecycle__v, status__v, study__v, product__v  from :table WHERE name__v= 'F22611234--6764'</veevavault:vql>
			<veevavault:input-parameters ><![CDATA[#[{
				'table': 'documents'
			}]]]></veevavault:input-parameters>
		</veevavault:query>
		<foreach doc:name="For Each" >
		<ee:transform doc:name="Transform Message" >
			<ee:message >
				<ee:set-payload ><![CDATA[%dw 2.0
				output application/json
				---
				payload]]></ee:set-payload>
			</ee:message>
		</ee:transform>
		<file:write doc:name="Write" path="query.json" config-ref="File_Config" mode="APPEND">
			<file:content><![CDATA[#[output application/json
			---
			payload]]]></file:content>
						</file:write>

		</foreach>
		<set-payload value="#['Flow Completed']" doc:name="Set Payload" />
		<logger level="INFO" doc:name="Logger" message="Query Operation flow Completed - #[payload]"/>
		<error-handler >
			<on-error-propagate enableNotifications="true" logException="true" doc:name="On Error Propagate" type="ANY">
				<logger level="INFO" doc:name="Logger" message="Flow Exception Handled --  #[payload]"/>
			</on-error-propagate>
		</error-handler>
	</flow>

Spark メッセージを検証する

この例では、Veeva Vault の Spark メッセージをトリガーし、Spark メッセージを検証します。

次のスクリーンショットは、この例の Studio アプリケーションフローを示しています。

Spark Validator 操作の Mule フロー

  1. [Mule Palette (Mule パレット)]​ ビューから、​[HTTP]​ を選択して ​[Listener]​ ソースをキャンバスにドラッグします。

  2. HTTP Connector 用の JKS 証明書には、Veeva Vault との TLS 接続を介して Spark メッセージを受信するための HTTP リスナー用の ​.jks​ ファイルが必要です。
    次の手順は、​<JDK_HOME>/bin​ ディレクトリにある Java Keytool を使用して ​.jks​ ファイルを作成する方法を示しています。

  3. <JDK_HOME>/bin​ ディレクトリから次のコマンドを実行します。

    ​`keytool -genkey -keyalg RSA -alias mule -keystore spark-listener.jks -storepass password -validity 360 -keysize 2048`
    これにより、現在のディレクトリに ​`spark-listener.jks`​ ファイルが作成されます。
  4. src/main/resources​ プロジェクトディレクトリの ​spark-listener.jks​ ファイルをコピーしてインポートします。

  5. HTTP リスナーを次のように設定します。

    1. [General (一般)]​ タブで、次のように設定します。

      • Protocol (プロトコル): HTTPS

      • Host (ホスト): 0.0.0.0

      • Port (ポート): 8082

    2. [TLS]​ タブで、次のように設定します。

      • Type (種別): JKS

      • Path (パス): spark-listener.jks

      • Alias (別名): mule

      • Key Password (キーパスワード): password

      • Password (パスワード): password

  6. [Mule Palette (Mule パレット)]​ ビューから、​[Veeva Vault]​ を選択して ​[Spark Validator]​ 操作をキャンバスにドラッグします。

  7. Veeva Vault 接続の次の値を入力します。

    • Username (ユーザー名)

    • Password (パスワード)

    • Vault URL

    • Vault version (Vault バージョン)

    • Vault client ID (Vault クライアント ID)

  8. Spark Validator​ パラメーターを次のように設定します。

    • Include Spark Header (Spark ヘッダーを含める): FALSE

    • Public Key Path (公開キーのパス): ${file.keyPath}
      公開キーファイル (00001.pem) の保存場所へのパスを使用して、​configuration.yaml​ の ​file.keyPath​ プロパティを定義します。

    • Spark Headers (Spark ヘッダー): #[attributes.headers]

    • Spark Message (Spark メッセージ): #[payload]

  9. [Mule Palette (Mule パレット)]​ ビューから ​[Core (コア)]​ を選択して ​[Set Payload]​ 操作をキャンバスにドラッグし、​[Value (値)]​ 項目で次のように定義します。

    ----
    output application/json --- {
    	"payload" : payload,
    	"attributes": attributes
    }
    ----
  10. [Mule Palette (Mule パレット)]​ ビューから、​[Core (コア)]​ を選択して ​[Logger]​ コンポーネントをキャンバスにドラッグし、次のメッセージを使用してペイロードを記録します。

    	Spark Message :: #[payload]

例の XML

この例のフローをすばやく Mule アプリケーションに読み込むには、次のコードを Studio XML エディターに貼り付けます。

<flow name="spark-message-validator-operationFlow" >
    <http:listener doc:name="Listener" config-ref="Spark_Listener" path="/"/>
    <veevavault:spark-message-validator doc:name="Spark Validator" config-ref="Veeva_Vault_Config" publicKeyPath="${file.keyPath}" includeSparkHeader="TRUE"/>
    <set-payload value='#[output application/json --- {
			"payload" : payload,
			"attributes": attributes
		}]' doc:name="Set Payload" />
    <logger level="INFO" doc:name="Logger" message="Spark Message :: #[payload]"/>
</flow>

REST API を呼び出して単一ドキュメントを作成する

この例では、REST API を呼び出して、単一ドキュメントを作成します。

次のスクリーンショットは、この例の Studio アプリケーションフローを示しています。

Invoke REST API 操作の Mule フロー

Veeva Vault REST API を呼び出すには、要件に従ってパラメーターを設定する必要があります。
  1. [Mule Palette (Mule パレット)]​ ビューから、​[HTTP]​ を選択して ​[Listener]​ ソースをキャンバスにドラッグします。

  2. 使用する環境に応じて HTTP リスナーを設定します。

  3. [Mule Palette (Mule パレット)]​ ビューから、​[File (ファイル)]​ を選択して ​[Read]​ 操作をキャンバスにドラッグし、Veeva Vault ドキュメントに関連付けられたファイルのコンテンツから読み取るようにファイルパスを設定します。

  4. [Mule Palette (Mule パレット)]​ ビューから、​[Veeva Vault]​ を選択して ​[Invoke REST API]​ 操作をキャンバスにドラッグします。

  5. Veeva Vault 接続の次の値を入力します。

    • Username (ユーザー名)

    • Password (パスワード)

    • Vault URL

    • Vault version (Vault バージョン)

    • Vault client ID (Vault クライアント ID)

  6. POST 要求を設定します。

    Method: POST,
    Path: "/objects/documents",
    Headers:
    	Key: "Accept"
    	Value: "application/json"
    	Key: "Content-Type"
    	Value: "multipart/form-data; boundary=abcdefg"
    URI Parameters: Leave it empty.
    Query Parameters: Leave it empty.
    %dw 2.0
    output multipart/form-data boundary='abcdefg'
    ---
    {
    	parts: {
    		file: {
    			headers: {
    				"Content-Disposition": {
    					"name": "file",
    					"filename": attributes.fileName
    				},
    				"Content-Type": payload.^mimeType
    			},
    			content : payload
    		},
    		name__v: {
    			headers: {
    
    			},
    			content: 'Test Document'
    		},
    		type__v: {
    			headers: {
    
    			},
    			content: 'Trial Management'
    		},
    		subtype__v: {
    			headers: {
    
    			},
    			content: 'Meetings'
    		},
    		classification__v: {
    			headers: {
    
    			},
    			content: 'Kick-off Meeting Material'
    		},
    		lifecycle__v: {
    			headers: {
    
    			},
    			content: 'Base Doc Lifecycle'
    		},
    		study__v: {
    			headers: {
    
    			},
    			content: '0ST000000000301'
    		},
    		comments__c: {
    			headers: {
    
    			},
    			content: 'Test Document'
    		}
    	}
    }
  7. PUT 要求を設定します。

    Method: PUT,
    Path: "/objects/documents/{doc_id}",
    Headers:
    	Key: "Accept"
    	Value: "application/json"
    	Key: "Content-Type"
    	Value: "application/x-www-form-urlencoded"
    URI Parameters:
    	Key: "doc_id"
    	Value: "259592"
    Query Parameters: Leave it empty.
    %dw 2.0
    output application/x-www-form-urlencoded
    ---
    {
    	"id": "259592",
    	"name__v": "Kick-off Meeting Material Updated",
    	"product__v": "00P000000000403",
    	"study__v": "0ST000000000202",
    	"notes__v": "Notes Updated"
    }
  8. [Mule Palette (Mule パレット)]​ ビューから、​[Core (コア)]​ を選択して ​[Logger]​ コンポーネントをキャンバスにドラッグし、次のメッセージを使用してペイロードを記録します。

    	Invoke Veeva API response :: #[payload]

例の XML

この例のフローをすばやく Mule アプリケーションに読み込むには、次のコードを Studio XML エディターに貼り付けます。

	<flow name="invoke-veeva-api-operationFlow" >
		<http:listener doc:name="Listener" config-ref="HTTP_Listener_config" path="/invoke-veeva-api"/>
		<file:read doc:name="Read" config-ref="File_Config" path="#['testdata/Test Document Renditions.pdf']" outputMimeType="application/octet-stream"/>
		<veevavault:invoke-rest-api doc:name="Invoke REST API" config-ref="Veeva_Vault_Config" path="/objects/documents" method="POST">
			<veevavault:body ><![CDATA[#[%dw 2.0
output multipart/form-data boundary='abcdefg'
---
{
	parts: {
		file: {
			headers: {
				"Content-Disposition": {
					"name": "file",
					"filename": attributes.fileName
				},
				"Content-Type": payload.^mimeType
			},
			content : payload
		},
		name__v: {
			headers: {

			},
			content: 'Test Document'
		},
		type__v: {
			headers: {

			},
			content: 'Trial Management'
		},
		subtype__v: {
			headers: {

			},
			content: 'Meetings'
		},
		classification__v: {
			headers: {

			},
			content: 'Kick-off Meeting Material'
		},
		lifecycle__v: {
			headers: {

			},
			content: 'Base Doc Lifecycle'
		},
		study__v: {
			headers: {

			},
			content: '0ST000000000301'
		},
		comments__c: {
			headers: {

			},
			content: 'Test Document'
		}
	}
}]]]></veevavault:body>
			<veevavault:headers ><![CDATA[#[output application/java
---
{
	"Accept" : "application/json",
	"Content-Type" : "multipart/form-data; boundary=abcdefg"
}]]]></veevavault:headers>
		</veevavault:invoke-rest-api>
		<logger level="INFO" doc:name="Logger" message="Invoke Veeva API response :: #[payload]" />
	</flow>

テンプレート

次のユースケースでは、Exchange テンプレートを使用できます。