当ブログに掲載しているサンプルは、すべて利用者の自己責任という形でお願いします。
ただし、明らかな不具合がある場合、ご連絡いただければ、訂正記事を出します。
また、こちらのサンプルは、別のサイト等への公開、転載は一切禁止しています。
どうしてもと言う場合は、筆者にあらかじめご連絡ください。
記事そのもののリンクについてはご自由に行っていただいてよいです。

テクてく Lotus 技術者 Slack に参加しよう!

2014年6月1日日曜日

XPagesで文書保存時に添付ファイルの数を限定させるには


皆さん、こんばんは。ついに6月です。いやぁ、5月は1日に記事を書いて、「まぁ、余裕だろ。今月は記事は5個くらいは出せるかな?」とか思ってました。
ホント、すみません。先に謝っておきます(謎)。

さて、昨日、私の住んでいる地域の気温が30度を超えました。今日も、30度を超えていたので、まさに「お外あつかーまん」でした。
おかげで、ゆっくりと記事の構想を練ることができませんでした。無理です。こんな暑い中、詳しい調べもんなんかできません。


ということで、簡単な記事を書いて逃げておきます。では、こちらをクリック!
にほんブログ村 IT技術ブログへ



今日は、XPagesでの添付ファイルの取り扱いについてです。
添付ファイルのアップロード方法自体については、以前(XPagesで添付ファイルの処理をする(アップロード) )に取り上げていますので、そちらを参照してください。

今日は、文書に添付するファイルの数を限定する方法についてです。
基本的には従来のノーツアプリケーションでの方法がそのまま使えます。それをXPagesのSSJSで実装するだけです。

1.文書を保存するフォームに「リッチテキスト」フィールドを作成しておきます。

2.1.で作成したフォームに計算結果のフィールドを作成します。
その値には「@AttachmentNames」という式を記述しておきます。

3.次に文書を編集するXPageを作成します。添付ファイルのアップロードコントロールを追加しておきましょう。2.で作成した計算結果のフィールドはコントロールとして配置する必要はありません。

4.文書を保存するアクションに次のように記述します。
これはサンプルで、添付ファイルは1つだけOKとしています。

保存アクションの内容
こんな感じです。
var doc = document1.getDocument( true );

if ( doc.computeWithForm( true, true ) ) {
    var afile:java.util.Vector = doc.getItemValue( "計算結果のフィールド名" );
    if ( afile.size() > 1 ) {
        view.postScript( "alert('添付ファイルは1つしか添付できません。')" );
        return false;
    } else {
        doc.save( true );
        context.redirectToHome();
    }
}

computedWithFormで、フォームに合わせて計算を行います。
これで、アップロードコントロールでアップロードした添付ファイルのファイル名が「計算結果のフィールド」に格納されます。
次に、getItemValueで計算結果のフィールドの値を取得してきます。
この時、戻り値はjava.util.Vectorという配列となっています。

そこで、sizeメソッドを使って、配列の要素数を取得します。
要素数が自分で設定した値(ここでは1)より大きい場合にはエラーとして
falseを返して終了させます。

view.postScript( "alert('添付ファイルは1つしか添付できません。')" );
は、画面上にダイアログを表示するものです。

配列の数が設定した値を下回っていれば、doc.save(true)で文書を保存して、終了します。
同じ画面にいると、二重保存の危険があるので、
context.redirectToHome();
でトップページに移動しています。


LotusScriptが書ければ、上の式は分かっていただけると思います。
これでXPagesでも不用意にファイルを添付させないようにすることができるのではないでしょうか。
工夫次第では、ファイルの拡張子を特定して、決められたもの以外は添付させないようにすることも可能でしょう。



色々試してみてください。では、今日はこの辺で。


Web化するならXPagesで!




【PR】ノーツ/ドミノに関するお問い合わせは下記まで【PR】
単純なDBのカスタマイズから他アプリケーションとの連携までご要望にお応えします!
Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ




0 件のコメント: