いいね!数

0

閲覧数
796

パネルでダイアログの領域を作りDojoを使って以下のコードでそれを表示させています。

var dialog = dijit.byId("#{id:selectDoc}");
dialog.show();

ダイアログにはビューパネルが表示されており、チェックボックスを使って文書を

選択するようになっています。ところが、チェックボックスでチェックしたものが

有効になりません。チェックを認識しないようなのです。

一部ですが、以下のコードを使っています。

var panel = getComponent("viewPanel1");
var id_arr = panel.getSelectedIds();
var i=0;
for(var docid in id_arr) {
 i += 1
}
if(i>1){
view.postScript('alert("複数選択されています。1つだけ選択してください。");')
return false;
}
if(i==0){
view.postScript('alert("セミナーをひとつ選択するかキャンセルしてください。");')
return false;
}

チェックをつけても常に「セミナーをひとつ選択するかキャンセルしてください。」と

アラートがでます。

Dojoのモジュールを削除してダイアログではない領域にしてチェックボックスをチェック

すると正常に認識されます。

また、以下の部品を使ってビューを検索できるようにしています。

    <xp:inputText id="inputSearch" style="width:200px"
        styleClass="lotusText">

    <xp:inputText id="inputSearch" style="width:200px"
        styleClass="lotusText">

    </xp:inputText>
    <xp:link escape="true" id="searchButtonLink"
        styleClass="lotusBtnImg">
        <xp:image id="image1"
            url="/.ibmxspres/domino/oneuiv2/images/iconSearch16.png">
        </xp:image>

ところが、検索文字列を入力するinputSearchフィールドの値が検索値として取得できません。

alertを使用してinputSearchフィールドの値を取得した結果を見るとnullが返ってきます。

Dojoモジュールを削除して通常の領域にするとinputSearchフィールドの値が取得できて

きちんと検索できます。

同じような現象になった方はいるでしょうか?解消方法ありましたら教えてください。

よろしくお願い致します。

※うまく説明ができなくてすみません。足りない情報がありましたら教えて頂ければ追記します。

 

サーバー情報: | クライアント情報: | 
カテゴリ:アプリ開発 - XPages | タグ:
  | 質問日時:2017/02/16 9:29:21

回答・コメント

いいね!数

0

こんにちわ。

似たようなものは作ったことありますが、普通に選択したものを取得できてましたよ。

http://www.tech-notes.dyndns.org/domino/xpages_dialog.html

 

原因を読み解くのに足りないのは、このダイアログ領域内に含まれてる部分のコードですかね。

具体的には、viewPanelの部分と取り込み処理を動かす部分のボタンの部分かな、という気がします。

/Yac

回答日時:2017/02/16 15:47:07

いいね!数

0

yac4423さん、

ご回答ありがとうございます。

私の以前、同じものを作ったのですが、そちらは普通に動作しました。それをコピーして

作ったのですがこちらは動作しません。何が違うのかずっと見ているのですが、違いがわかりません

でした。

以下、ダイアログに表示されているビューパネルです。

<xp:panel style="width:700px;height:330px;overflow-y: scroll" id="panel2">
            <xp:viewPanel rows="1000" id="viewPanel2" viewStyle="width:650px">
                <xp:this.facets>
                    <xp:pager partialRefresh="true" layout="Previous Group Next" xp:key="headerPager" id="pager2">
                    </xp:pager>
                </xp:this.facets>
                <xp:this.data>
                    <xp:dominoView var="view1" databaseName="names.nsf" viewName="($VIMPeopleByLastName)" search="#{javascript:viewScope.searchVariable}">

                    </xp:dominoView>
                </xp:this.data>
                <xp:viewColumn id="viewColumn19" style="width:1px" displayAs="hidden" showCheckbox="true">
                    <xp:this.facets>
                        <xp:viewColumnHeader xp:key="header" id="viewColumnHeader19">
                        </xp:viewColumnHeader>
                    </xp:this.facets>
                </xp:viewColumn>
                <xp:viewColumn columnName="$6" id="viewColumn20" style="width:80px">
                    <xp:viewColumnHeader value="LastName" id="viewColumnHeader20">
                    </xp:viewColumnHeader>
                </xp:viewColumn>
                <xp:viewColumn columnName="$0" id="viewColumn21" style="width:5px">
                    <xp:viewColumnHeader value="FirstName" id="viewColumnHeader21">
                    </xp:viewColumnHeader>
                </xp:viewColumn>
                <xp:viewColumn columnName="$2" id="viewColumn22">
                    <xp:viewColumnHeader value="Middle Name" id="viewColumnHeader22">
                    </xp:viewColumnHeader>
                </xp:viewColumn>
            </xp:viewPanel>
            <xp:br></xp:br>
            <xp:br></xp:br>
            <xp:br></xp:br>
        </xp:panel>

 

取り込み処理を行うボタンの式は以下の通りです。

var panel = getComponent("viewPanel2");
var id_arr = panel.getSelectedIds();
var i=0;
var db:NotesDatabase = session.getDatabase(database.getServer(), "names", false);
for(var docid in id_arr) {
 i += 1
}
if(i>1){
view.postScript('alert("複数選択されています。1つだけ選択してください。")')
return false;
}
if(i==0){
view.postScript('alert("ユーザを選択するかキャンセルしてください。")')
return false;
}
var doc:NotesDocument = db.getDocumentByID(docid);
var nUser = doc.getItemValueString("FullName");
var nsUser = @Name("[ABBREVIATE]",nUser);

document1.setValue("UserID",nsUser);
//スコープ変数を消去する
viewScope.searchVariable="";
//ダイアログクローズのボタンをクリック
//ダイアログを閉じる
view.postScript("XSP.addOnLoad(dialogClose1);");

これで必要な情報は足りますでしょうか・・・?

回答日時:2017/02/16 16:18:12

いいね!数

0

実際のDBではなく、ダイアログ表示だけの簡単なサンプルを作ったのですが、

こちらも動作しません。

動作しないサンプルDBを添付しました。

再現手順は以下の通りです。

①sample.xspをWebブラウザでプリビューする

②「変更」ボタンをクリックする

③開いたビューより、チェックボックスで文書を2つチェックする

④「OK」ボタンをクリックするす

⑤文書が複数選択されているのに認識されていない

以上となります。

File TypeSizeFile Name
application/x-zip 49 KB 18846sample.zip
回答日時:2017/02/16 16:22:18

いいね!数

0

サンプルDBを見てはじめてわかったのですが、私が知ってる方法とはぜんぜん違うものでした。

確かにこっちのほうがスマートに書けるみたいですが、どうにもviewPanelのgetSelectedIds()が動作しませんね。

ということで自分が知ってる方法で書き直してみました。元ネタは以下のページで解説しているサンプルDBです。

XPagesでダイアログボックス

<xe:dialog>というものを使ってるのですが、これならviewPanelのgetSelectedIds()が動作します。

添付したDBのsample_02.xspが動くバージョンです。libDialog.jsというクライアントサイドのJavaScriptライブラリも追加してあります。

あと、(DialogSemiDep_MV) ビューの選択式がちょっと間違ってたので修正してあります。

/Yac

 

File TypeSizeFile Name
application/octet-stream 512 KB sample_yac.nsf
回答日時:2017/02/17 1:21:26

いいね!数

0

yac4423さん、

サンプルDBをありがとうございます。ほんとうに感謝です。

内容を確認してみます。

取り急ぎ、御礼まで。

回答日時:2017/02/17 10:43:29

いいね!数

0

yac4423さん、

サンプル修正版の内容見てみてわからないことがありました。

libDialog.jsにある関数を呼び出す部分は、ページのどこにどのように組み込めば良いのでしょうか?

回答日時:2017/02/17 13:16:10

いいね!数

0

<script language='javascript'>の部分があったと思います。

その中のコードがCSJSでページ読み込み時に実行されるようになってるはず。

偉そうに書いてますが、その部分はサンプルのをそのまま書き写してるだけですけどね。

これで答えになってます?

/Yac

回答日時:2017/02/17 14:54:16

いいね!数

0

yac4423さん、

<script language='javascript'>の部分のソースをコピペしたのですが、ダイアログが

ぺっしゃんこになって表示されました。。横幅の短いタイトルバーしか見えないような感じです。

また、以下の部分は領域をとりあえず確保するためと考えれば良いのでしょうか?

<div id="selectCategory3" style="display:none">  </div>

 

回答日時:2017/02/17 15:03:16

いいね!数

0

私のサンプルはちゃんと動いてます?

それを元に自分のアプリに組み込んだら、うまくいかないってことですかね。

だったら、コピペがうまくできてないだけ。

そこを乗り越えないと、応用がききません。情報不足で答えることも出来ないし、もうちょい頑張って下さい。

 

display:noneの場所にダイアログを開くみたいですね。

/Yac

回答日時:2017/02/17 15:32:23

いいね!数

0

yac4423さんのサンプルはうまく動いています。

そうですね、組み込んだときにうまくできていないってことですね。

もう少し調べてみます。

 

display:noneの場所にダイアログを開くということで了解しました。納得です。

 

回答日時:2017/02/17 15:46:19

いいね!数

0

yac4423さん、

できました!

前のダイアログ表示のためのプロパティが残っていたためうまくいきませんでした。

サンプルまで頂き大変感謝です。助かりました!!

回答日時:2017/02/20 11:46:37

いいね!数

0

そりゃもちろん、ayaさんが問題再現用のサンプルDNをアップしてくれたからですね。

確かに動かないから、なんでやろ、と調べようという気になります。

おまけにちょっと知らないテクニックが使われてたので、こちらも勉強になりましたから。

まだ試してないけど、 xp:repeatでチェックボタン付きの一覧表示作れば動くんじゃないだろうか、という感触です。

/Yac

 

 

回答日時:2017/02/20 14:29:51