2024/06/25

アプリケーションカタログ にフォルダ別ビューを追加

先日まで数回にわたりアプリケーションカタログを紹介しました。さまざまな情報が集約されており、アプリケーションの管理に活用できそうですね。

サーバ内のアプリケーション(nsf)は通常、利用部門やアプリの種類などに応じてフォルダ分けして整理している場合が多いと思います。このような場合フォルダからアプリを探すことも多いですよね。カタログアプリでは、[アプリケーション]-[サーバー]のビューがそれに近いといえます。

ただ、このビュー、タイトル列でソートされて、アプリの配置からは探せません。そこで、今回は、アプリケーションカタログにフォルダ別のビューを追加してみましょう。


ビューの準備

上記ビュー『アプリケーション¥サーバー | ByServer』を複製してベースとします。デザイナーからビューをコピペすると次のような確認メッセージが表示されます。これは、コピーしたビューがテンプレートから引き継がれるべきか確認しています。独自のビューでテンプレートにはないので、[いいえ]を選択します。

複製されたビューは次の通り、「更新時に再設計/設計の置換を禁止する」にチェックが入ります。これで、設計置換やデザインタスクなどで、ビューが更新されることを抑制できます。

具体的な作業に入る前に、ビューの名前を更新しておきましょう。


フォルダでカテゴライズ

今回はフォルダでカテゴライズすることから、ファイルパスをファイル名とパスに分割します。

まずは、ファイル名です。ファイル列に次の式をセットします(バックスラッシュに変換されないよう¥は全角文字を使用しています)。

xLst := @Explode(Pathname; "¥¥");
@Subset(xLst; -1)

この式は @Explode を使って ¥ マークで分離したリスト値を作成します。そのリストから @Subset で一番後ろの要素を取得しています。これでフォルダ階層に関係なくファイル名だけを取得しています。


次にフォルダ名です。ファイル列の左に新しい列を作成し、次の式をセットします。

xLst := @Explode(Pathname; "¥¥");
xIdx := @Elements(xLst);
@If(xIdx = 1;
   "";
   @Implode(@Subset(xLst; @xIdx-1); "¥¥")
)

ファイル列と同様のテクニックを使用していますが、ファイル名を除いた部分を取得することから、@Elements を使用して要素数を取得、1 引くことでファイル名を除いています。この結果を @Implode で ¥ 区切りの文字列に戻し、フォルダ名としています。

なお、ルート(フォルダがない)場合はエラーとなるので、@If でエラー処理をしています。


フォルダ別のカテゴライズ

ここまでできたら、フォルダ列とファイル列を昇順にソートします。

そして、フォルダ列をカテゴライズします。カテゴリ列は ¥ を階層化して表示する機能があります。これを利用すると、以下のようにフォルダ階層に応じて、階層の深さが違うカテゴリを 1 列で実現できます。

ただ、サーバ直下のアプリは『(カテゴリ無し)』となっていて、格好が悪いですね。これを回避するためのカテゴリの第一階層をサーバ名に変更します。

xSrv := @Name([Abbreviate]; Server);
xLst := xSrv:@Explode(Pathname; "¥¥");
xIdx := @Elements(xLst);
xFol := @Subset(xLst;@Elements(xLst)-1);
@Implode(xFol; "¥¥")

今回の式では ¥ で分離したリスト値 xLst を作成する時点で先頭の要素にサーバ名を足しています。こうすることで、要素数が 1 となることはないので、エラー処理を省略しています。

ここまでの対応でビューは次のようになります。

ルート直下のアプリケーションが多くそれでも見づらい部分があります。これについてはテンプレート(.ntf)を表示しない、カタログの表示対象から外すなどの対応が必要かと思います。


まとめ

今回は、カタログにビューを追加する作業を行い、テンプレートから更新しない方法と ¥ でカテゴリを階層化する方法を解説しました。

なお、今回は事例として標準テンプレートの設計を変更しました。ビューの追加だけですので、影響はないと判断しています。とは言え、標準テンプレートをカスタマイズした場合、メーカサポートの対象外となることもあります。お使いの環境に適用される際には、リスクとベネフィットを十分にご検討の上、ご自身の責任で実施ください。


0 件のコメント:

コメントを投稿