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

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

2012年5月24日木曜日

!@IsMemberと@IsNotMemberの違い

今日(もう昨日か・・・)は、自宅でレンタルDVDを観ていたのでお休みしようかと思いましたが、ちょっと気になった事があったので、調べた結果を書きます。

ということで、XPagesネタではなく、@関数ネタです。
でも、XPagesでも@関数はあるので、きっとお役に立つ・・・はず?


では、本題に入る前に、ボタンをクリックしましょう。おかげさまで順調に順位が上がっています。世の中にLotus Notes/Dominoがどんどん広まっていきますよ(え?もう、十分に広まってる?まぁまぁまぁ)
にほんブログ村 IT技術ブログへ



さて、本題。
非表示式によく使う?のが、@IsMember関数ですね。ロールを持っているかどうか判断するのに使います。
このとき、@IsNotMemberではなく、!@IsMember関数を使う事があります。
ん?これって同じ事なのかな?違う事なのかな?
と悩んだ事はないですか。

筆者は、今日に限ってなぜか、「ん?どっちだっけ?」と悩んでしまったのです。
ということで、調べてみました。

どちらの関数も引数は同じ。
@IsMember("検索文字列";"検索文字列リスト")/@IsNotMember("検索文字列";"検索文字列リスト")
もしくは、
@IsMember ("検索文字列リスト1";"検索文字列リスト2")/@IsNotMember ("検索文字列リスト1";"検索文字列リスト2")
です。

前者の場合は、!@IsMemberも@IsNotMemberも結果は変わりませんでした。
しかし、後者のような、文字列リスト同士の比較検索では、結果が異なりました。

フィールド名(textList1)検索文字列リスト1a;b;c
フィールド名(textList2)検索文字列リスト2a;e;f

上表のような場合、
tmp := !@IsMember(textList1;textList2);
ret := @If(tmp=@True;"含まれません。";"含まれます。");

@Prompt([OK];"!@IsMemberの結果";ret)
としたら、
!@IsMemberの結果
と表示されました。

"a"は含まれているにもかかわらず、全部が含まれていないので、"含まれません。"となりました。


同様に、
tmp := @IsNotMember(textList1;textList2);
ret := @If(tmp=@True;"含まれません。";"含まれます。");
@Prompt([Ok];"@IsNotMemberの結果";ret)
としたら、
@IsNotMemberの結果
と表示されました。
"a"が含まれている事が評価されたのでしょう。


ということで、!@IsMemberと@IsNotMember関数、
同じように見えて違う結果を返すという事が分かってもらえたでしょうか。

検索する文字列がリストではなく、単なる文字列であればどちらでも良いですが、リスト同士の比較検索となった場合は、どのように動いてほしいのかをあらかじめ決めておき、その上でどちらの関数を使うのかを決める必要があります。

これらは、XPagesでも使えますので、きっとどこかでお役に立つと思います。


ということで、今日はこの辺で。




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

0 件のコメント: