AEMのWorkflowの通知メールについて

AEMのWorkflowは、メール通知機能が持っています。事前に設定したユーザーの宛先に通知メールを送信します。

電子メールテンプレート

メールに出力できる情報は、Workflow通知用の電子メールテンプレートに定義されています。

通知宛先のユーザーの環境設定の言語項目の設定値により、電子メールテンプレートが異なっています。

f:id:www0532:20210823160922p:plain

例えば、「日本語」の場合

/etc/workflow/notification/email/default/ja.txt

「English」の場合

/etc/workflow/notification/email/default/en.txt

また、具体的にメールに出力できる情報は、電子メールテンプレート内では変数で定義されています、実際の値は、Workflowモデル、或いはWorkflowインスタンスから取得されています。

例えば、/etc/workflow/notification/email/default/ja.txtでは、Workflowモデルのタイトルを出力する項目があります。

ワークフロー: ${model.title}\n \

Workflowモデルのプロパティ設定では、タイトル項目に下記のように設定されています。

f:id:www0532:20210823163028p:plain

そして、通知メールには、Workflowモデルのタイトルに関して、下記のように出力されています。

f:id:www0532:20210823163405p:plain

起動時コメント、ワークフロータイトルについて

Workflowの起動時に、Touch UIではワークフロータイトルの入力欄があります。

f:id:www0532:20210823165250p:plain

Classic UIでは、コメント欄、ワークフロータイトル欄、2つの入力欄があります。

f:id:www0532:20210823165307p:plain

ここで入力した内容は、Workflowインスタンスに記録されていますが、

f:id:www0532:20210823165604p:plain

Workflow通知用の電子メールテンプレートでは、出力する変数が用意されていないため、直接的に通知メールに出力できません。どうすればいいだろう。

ここで登場するのは、ECMA スクリプトです。

AEMのCRXDE Lite画面を開き、下記のノードを選択します。

/libs/workflow/scripts

「Overlay Node」ボタンを押下し、下記ダイアログの「OK」ボタンを押下します。

f:id:www0532:20210823171250p:plain

下記のノードを/apps/workflow/scripts配下にコピーし、test.ecmaにリネームします。

/libs/workflow/scripts/sample.ecma

下記のノードの「jcr:title」属性を任意の値に変更します。例えば、「コメントのEmail出力」

/apps/workflow/scripts/test.ecma/jcr:content

/apps/workflow/scripts/test.ecmaの中身は、下記のように編集します。

// コメント欄、ワークフロータイトル欄の入力内容の取得
var startComment = workItem.getWorkflow().getMetaDataMap().get("startComment", Packages.java.lang.String);
var workflowTitle = workItem.getWorkflow().getMetaDataMap().get("workflowTitle", Packages.java.lang.String);
// 変数 item.data.comment に設定
workItem.getMetaDataMap().put("comment", workflowTitle + startComment);

Workflowモデルの編集画面を開き、メール通知ステップの前に、「プロセスステップ」を追加します。

f:id:www0532:20210823173521p:plain

そして、上記で作成したECMA スクリプトのプロセスを選択し、「ハンドラー処理の設定」のチェックを入れます。

f:id:www0532:20210823173546p:plain

/etc/workflow/notification/email/default/ja.txtでは、下記のようにメッセージの出力する項目しますします。

message=${item.data.comment}\n \

ここまで、コメント欄、ワークフロータイトル欄の入力内容を通知メールに出力する準備ができました。

コメント欄、ワークフロータイトル欄を入力し、Workflowモデルを起動します。

f:id:www0532:20210823165307p:plain

Workflowインスタンスでは、ECMA スクリプトで処理したcomment項目の値が確認できます。

f:id:www0532:20210823174826p:plain

それで、受信した通知メールの中身を見ると、Workflow起動時のコメント欄、ワークフロータイトル欄の入力内容が出力されています。

f:id:www0532:20210823174953p:plain

Asset Share Commons の Search Results 画面の サムネイル画像Heightについて

問題点

Asset Share Commons の Search Results 画面の Card View モードでは、サムネイル画像の高さが一律に15emと表示され、見切れている場合もあります。

例えば、アセットのサムネイルの高さが15em超えている場合、

f:id:www0532:20210816161105p:plain

Asset Share Commons の Search Results 画面の Card View モードでは、ほとんどのアセットのサムネイル画像は、見切れて表示されてしまいます。

f:id:www0532:20210816161616p:plain

解決方法

この問題を解決するために、下記2つのクライアントライブラリ資材を改修します。

その1
/apps/asset-share-commons/components/search/results/clientlibs/site/less/card.less

改修前

    .cmp-image--card {
      height: 175px !important;
    }

改修後

    .cmp-image--card {
      height: 100% !important;
    }
その2
/apps/asset-share-commons/clientlibs/clientlib-theme/semanticui-light/themes/light/views/card.overrides

改修前

  .image img {
    <中略>
    max-height: 15em;
  }

改修後

  .image img {
    <中略>
    max-height: auto;
  }

最後に

上記の改修により、Asset Share Commons の Search Results 画面の Card View モードでは、アセットのサムネイル画像が完全に表示されることができました。

f:id:www0532:20210816162437p:plain

Dispatcher のフィルター設定について

Dispatcherは、AEMのキャッシュやロードバランシングを行うツールで、Linux上はApacheのモジュールとして使用されています。

Dispatcher の設定は 、dispatcher.any ファイルに格納されています。その中に、/farms プロパティは、設定構造の最上位プロパティです。

その下に、/filterセクションは、HTTP要求の要求行部分のパターンに従ってコンテンツへのアクセスを拒否または許可する一連のルールで構成されます。

/farms
 {
   /website
     {  
     /filter
       {
       # List of filters
       }

今回はフィルター(/filterセクション)の設定について、紹介いたします。

基本的な設定方法は、下記のルールに従っているものです。

  • まず、すべての要素へのアクセスを拒否します。
  • 必要に応じて、コンテンツへのアクセスを許可します。

/filter の各アイテムには、次のアイテムを含めることができます。

  • /type:allow(許可)または deny(拒否) のどちらかです。

最初は、安全のためにすべてをブロックした状態でスタートします。

/0001 { /type "deny"  /url "*" }

その後、お客様が必要とするものや安全なものは開放します。

# Allow index page
/0002 { /type "allow" /url "/index.html" }

正規表現を利用し、ダウンロード可能なアセットの拡張子を有効にします。

/0003 { /type "allow" /extension '(mp4|pdf|png|pttx|zip)' /path "/content/*" }
/0004 { /type "allow" /method "GET" /extension '(mp4|pdf|png|pttx|zip)' }

AEMアセットメタデータの一括書き出しについて

AEMアセットメタデータの一括書き出し機能がもっています。

複数のアセットのメタデータCSV形式ファイルに一括に書き出すことができます。

例えば、/content/dam/zip 配下に一つのアセット(accessLog.zip)があります。アセットのメタデータは下記のようになっています。 f:id:www0532:20210811152557p:plain

このアセットのメタデータを一括書き出す場合、

f:id:www0532:20210811152322p:plain

フォルダの/content/dam/zip を選択し、「メタデータを書き出し」ボタンを押下します。

f:id:www0532:20210811152851p:plain

メタデータの書き出し画面で、サブフォルダのアセットを含める☑チェックを入れ、書き出すプロパティで「すべて」を選択し、「書き出し」ボタンを押下します。

f:id:www0532:20210811153142p:plain

成功メッセージ表示されることを確認します。

AEMジョブ一覧画面に選択すれば、メタデータの書き出しの非同期ジョブの実施状況が確認できます。

f:id:www0532:20210811153658p:plain

該当する非同期ジョブのステータスが「成功」になっていることを確認し、「CSVダウンロード」ボタンを押下しますと、CSVのダウンロードが開始されます。ダウンロードしたCSVの中身を見ると、下記のメタデータ情報がCSVに出力されることが分かります。

f:id:www0532:20210811154107p:plain

ここで注目するのは、dam:Content 項目です。

Zipファイルのアセットのため、Zipファイルに圧縮されているファイルの名称は、dam:Content 項目に出力されています。

直接的にCSVファイルを開くのは大丈夫ですが、ExcelCSVインポート機能を使いますと、インポートしたメタデータExcelシートにズレが発生していることをご注意ください。

f:id:www0532:20210811154813p:plain

AEMアセットの Metadata Scheam Form Editor について

AEMアセットの Metadata Scheam Form Editor 機能は、アセット管理において非常に重要で、アセットのプロパティ設定画面で編集対象のアセットのメタデータ情報項目を追加・変更することができます。

f:id:www0532:20210806181925p:plain

例えば、アセットのプロパティ設定画面で上記のドロップダウン入力項目を追加する場合、Metadata Scheam Form Editor 画面で、下記のように、Dropdown 項目を追加し、そして、「Add Choice」ボタンを押下し、選択肢の「Option text」、「Option value」を入力すれば、アセットのプロパティ設定画面に一つのドロップダウン入力項目が追加されます。

f:id:www0532:20210806182644p:plain

選択肢の「Option text」、「Option value」に関しては

  • Option text :ドロップダウンリストに表示する項目内容
  • Option valueリポジトリの属性値に保存される値

ここで一つの注意点です。「Option text」、「Option value」は両方必須項目ではありません、「Option value」が未入力の場合、「Option text」の値をリポジトリの属性値に保存されます。

さらに、「Option text」はAEMの i18n の対応対象になり、編集者の環境設定で English 以外の言語と設定する場合、「Option text」の値が翻訳され、リポジトリの属性に保存される可能性もあります。

例えば、Metadata Scheam Form Editor 画面で、Dropdown 項目の選択肢は、下記のように設定されています。

f:id:www0532:20210806184925p:plain

環境設定で言語が「日本語」の編集者がアセットのプロパティ設定画面で上記のドロップダウン入力項目を編集する場合、「Option text」の値が日本語に翻訳されました。

f:id:www0532:20210806191155p:plain

ここで、「スキーマ」を選択して、保存すると、元々は、「Scheam」 との値をリポジトリに保存されて欲しかったのに、これで「スキーマ」との日本語の値のまま、リポジトリに保存されてしまいました。

f:id:www0532:20210806204149p:plain

今回が発生した事象を防ぐため、Metadata Scheam Form Editor 画面では、選択肢の「Option text」、「Option value」両方を入力します

f:id:www0532:20210806215217p:plain

そうすると、環境設定で言語が「日本語」の編集者がアセットのプロパティ設定画面でドロップダウン入力項目を編集する場合、「Option text」の値が日本語に翻訳されましたが、

f:id:www0532:20210806191155p:plain

保存しますと、リポジトリに保存された属性値は、「Option value」の設定値の「scheam」でした。

f:id:www0532:20210806215937p:plain

編集者の環境設定の言語にもかかわらず、必ず「Option value」の設定値のままに、リポジトリに保存されますので、Metadata Scheam Form Editor 画面では、ぜひ選択肢の「Option text」、「Option value」両方を入力するようにしてください。

Asset Share Commons のダウンロードについて

事象

Asset Share Commons では、アセット一覧画面から、複数のアセットを一括でダウンロードする機能が提供されています。

f:id:www0532:20210806152551p:plain

アセットの「ADD TO CART」アイコンをクリックすると、右上に、カートアイコンに選択したアセットの数の数字が表示されています。

f:id:www0532:20210806152917p:plain

また、カートアイコンをクリックすれば、ダウンロードのダイアログが表示され、選択した複数のアセットがZipファイルに圧縮され、一括でダウンロードされます。

f:id:www0532:20210806153652p:plain

ところが、ダウンロードしたZIPファイルを解凍してみると、フォルダの中にもう一階層のフォルダがあり、アセットはそれぞれのアセット名を付けたフォルダに格納されていました。

アセットの数が多い時、一つずつフォルダから取り出すのは、かなりの手間でしょう。

f:id:www0532:20210806154314p:plain

調査

この問題を解決するため、AEMのアセットダウンロードサービスAPIを調べるところ、今回の事象は flatStructure パラメータの設定と関連していることが分かりました。

実際は、AEMアセット一覧画面の標準的なダウンロードダイアログでも、このパラメータの設定項目が設置してあります。

f:id:www0532:20210806162100p:plain

AEMアセット一覧画面で複数のアセットを選択し、一括でダウンロードする場合、ダイアログの「Create separate folder for each asset」にチェックを入れると、ダウンロードしたZipファイルは、事象と同じ構造になります。

ここで、APIに渡される flatStructure パラメータの値は "false" でした。

また、Asset Share Commons のダウンロードでは、AEMアセット一覧画面のダウンロードと同じAPIを呼び出す想定です。

しかも、Asset Share Commons のダウンロードダイアログでは、「Create separate folder for each asset」のような項目がありません、Boolean型の flatStructure パラメータに対して、"false" との値でAPIに渡されるものと思われます。

解決

原因分かれば、改修に着手できます。一先ず、Asset Share Commons のダウンロードダイアログのソースコードを開きます。

/apps/asset-share-commons/components/modals/download/download.html

formタグを見ると、method="post"と書かれました、そして、 flatStructure の hidden項目は、やはり、想定通りに、value="false"と設定されています。

この値を"true"に変更することで、AEMのアセットダウンロードサービスAPIに、 flatStructure = "true" とのパラメータ値が渡される。

改修前

    <input type="hidden" name="flatStructure" value="false"/>

改修後

    <input type="hidden" name="flatStructure" value="true"/>

ソースコードを保存してから、もう一度ダウンロードしたZipファイルは、想定通りな構造になりました。

f:id:www0532:20210806165453p:plain

AEMアセットのProperty設定に、複数行のテキスト入力について

AEMアセットのプロパティ設定画面では、テキスト入力欄に、単数行のテキストしか入力できません。

f:id:www0532:20210804184655p:plain

原因

この原因として、アセットのプロパティ設定画面のテキスト入力に関して、単数行のテキスト入力コンポーネント(textfield)しか設置されていないことです。

それは、アセットのプロパティ設定画面の項目を編集する Metadata Schema Form Editor 画面を開ければわかりますが、Single Line Text しかありません。

f:id:www0532:20210804190458p:plain

解決方法

これから、複数行のテキストを入力したい場合、そのカスタマイズ方法を紹介いたします。

AEMでは、複数行のテキストが入力できるコンポーネント(textarea)が用意されています。

このコンポーネントをプロパティ設定画面に設置すれば、問題が解決できます。

ステップ1

先ずは、Single Line Text と同じフォルダに、Multi line text のソースコードを用意します。

コピー元

/libs/dam/gui/coral/components/admin/schemaforms/formbuilder/formfields/v2/textfield/textfield.jsp

コピー先

/apps/dam/gui/coral/components/admin/schemaforms/formbuilder/formfields/v2/textarea/textarea.jsp

textarea.jspの中身は、下記のように、改修します。

改修前

    <input type="hidden" name="<%= xssAPI.encodeForHTMLAttr("./items/" + key + "/resourceType") %>" value="granite/ui/components/coral/foundation/form/textfield">

改修後

    <input type="hidden" name="<%= xssAPI.encodeForHTMLAttr("./items/" + key + "/resourceType") %>" value="granite/ui/components/coral/foundation/form/textarea">
ステップ2

次は、 Metadata Schema Form Editor 画面のソースコードをlibs配下からapps配下にコピーし編集します。

コピー元

/libs/dam/gui/coral/components/admin/schemaforms/formbuilder/v2/builditems.jsp

コピー先

/apps/dam/gui/coral/components/admin/schemaforms/formbuilder/v2/builditems.jsp

コピー先のソースコードに、下記を追記する

<li class="field" data-fieldtype="text">
    <div class="formbuilder-template-title"><coral-icon icon="fileTxt" size="M"></coral-icon><span><%= i18n.get("Multi line text") %></span></div>
    <script class="field-properties" type="text/x-handlebars-template">
    <sling:include resource="<%= fieldTemplateResource %>"
                   resourceType="dam/gui/coral/components/admin/schemaforms/formbuilder/formfields/v2/textarea" />
</script>

最後に

そうしますと、 Metadata Schema Form Editor 画面には、Multi line text の項目が表示されています。

f:id:www0532:20210804192404p:plain

これを利用すれば、AEMアセットのプロパティ設定画面には、複数行のテキスト入力欄が設置されます。

f:id:www0532:20210804193622p:plain