いいね!数

0

閲覧数
377

続投失礼します。

さきほど、チェックボックスの入力必須項目で質問させて頂いたのですが、文書が編集モードだと

うまくいき、読み込みモードではcsjsの入力必須が思うように動作しませんでした。

いずれにしても、ユーザーに入力を促すのには編集モードで開いてあげないといけないと

思うのですが、そこで質問です。

csjsで文書を読み込みモードから編集モードへ切り替えるにはどのようなコードを書けば

いいのでしょうか?いろいろやってみたのですが、うまくいきません。

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

 

if(window.confirm('"申請書を申請します。よろしいですか?')){
    }else{
        return false;
    }
        // 現在の文書が読み込みモードの場合、編集モードにする

ここで読み込みモードに切り替えたいです
//入力必須項目
var Shinseibi=document.getElementById("#{id:Shinseibi}").value;
if(Shinseibi==""){
    alert("申請日を入力してください。");
    document.getElementById("#{id:Shinseibi}").focus();
    return false;
}

サーバー情報: | クライアント情報: | 
カテゴリ:アプリ開発 - XPages | タグ:
  | 質問日時:Oct 28, 2016, 2:21:51 PM

回答・コメント

いいね!数

1

私の知る限りでは文書モードの変更を CSJS で行う方法は無かったかと。
確認ダイアログ後文書モードを SSJS で切り替えて、view.postScript() などで入力チェックというのならできそうな気はしますが…

ただ、参照モードで押せるボタンで編集モードに切り替えて入力チェックが必要になるような設計なのは少し気になります。
保存時に必須項目にしておいて参照モード時には確実に項目が埋まっているようにすべきなのでは? と思いました。


 

回答日時:Oct 31, 2016, 8:55:18 AM

いいね!数

0

ykawaさん、

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

csjsで編集モードに切り替える方法が無いのではとのことでちょっとショックです。

ユーザーの利便性を考えて、文書をドラフト保存にできて、フィールドが全て埋まっている場合は

編集モードに切り替えずに申請できるようにと考えたのですが、編集モードの状態でないと

申請できないようにすべきでしょうか。

皆さんは、こういったワークフロー形式のDBではどのように処理させているのでしょうか?

 

回答日時:Oct 31, 2016, 10:19:57 AM

いいね!数

1

CSJSで実装したいということになりますと以下のようなコードはどうでしょうか?

<?xml version="1.0" encoding="UTF-8"?>
<xp:view xmlns:xp="http://www.ibm.com/xsp/core">
    <xp:panel id="mainPanel">

        申請日:
        <xp:label value="#{viewScope.Shinseibi}" id="Shinseibi_label"></xp:label>
        <xp:panel id="datePanel" style="display:none;">
            <xp:inputText id="Shinseibi" value="#{viewScope.Shinseibi}"
                defaultValue="">
                <xp:this.converter>
                    <xp:convertDateTime type="date"></xp:convertDateTime>
                </xp:this.converter>
                <xp:dateTimeHelper></xp:dateTimeHelper>
            </xp:inputText>
        </xp:panel>
        <xp:br></xp:br>

        <xp:button value="申請する" id="button6">
            <xp:eventHandler event="onclick" submit="true"
                refreshMode="partial" refreshId="mainPanel">
                <!--
                    <xp:this.action><![CDATA[#{javascript:var mp =
                    getComponent("mainPanel")
                    mp.setReadonly(!mp.isReadonly())}]]></xp:this.action>
                -->
                <xp:this.script><![CDATA[if(window.confirm('"申請書を申請します。よろしいですか?')){
    //入力必須項目
    var obj = document.getElementById("#{id:Shinseibi}");
    var Shinseibi=obj.innerHTML;
    if(Shinseibi==""){
        alert("申請日を入力してください。");
        document.getElementById("#{id:datePanel}").style.display="block";
        obj.focus();
        return false;
    }
    return true;
}else{
    return false;
}]]></xp:this.script>
            </xp:eventHandler>
        </xp:button>
    </xp:panel>

</xp:view>

 

表示用ラベルと編集用のInputTextを用意してやり、CSJSで表示・非表示を制御してやっています。

 

上記のサンプルもそうですが、自分の意見としては申請などアクションを行うならそのフォーム(文書)は編集モードで扱うほうが自然だと考えます。

SSJSだけで入力の可・不可を実装するのであれば、入力をさせたくないフィールド等は「ReadOnly」属性を付けて編集できなくしてやります。
(※ReadOnlyになったフィールドはサーバーへPOSTされないので注意が必要です。)

そしてサーバーへデータをポストした後サーバー側で入力チェックをおこない、エラーはエラーコントロールを使って表示するというやり方がXPagesの一般的な処理の仕方だと思います。

回答日時:Nov 1, 2016, 2:43:49 PM

いいね!数

0

こんにちは。

>>>>
皆さんは、こういったワークフロー形式のDBではどのように処理させているのでしょうか?
<<<<

私もワークフロー系のXPagesアプリは結構作ってますが、基本SSJSだけで作ってます。

画面の動的な変化は<xp:repeat>やrenderedを駆使して作ってますね。

入力項目のチェックも、チェックボックスのonchangeなどのイベントハンドラでチェックして、@ErrorMessage()でエラー表示できるし。

入力チェックをCSJSできっちりやったとしても、ブラウザから送られてくるデータはすべて疑わないといけないので、結局SSJSでチェックすることになりますしね。

ということで、CSJSのことはちょっと忘れてSSJSを駆使してXPagesアプリを作りましょう。

/Yac

回答日時:Nov 1, 2016, 11:49:52 PM

いいね!数

0

kazu tatsukiさん、yac4423さん、

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

csjsで入力必須チェックを書き始めてしまったので、csjsにこだわってしまいました。

ssjsでやるべきなんですね。コードをssjsで書き直していきたいと思います。

勉強になりました!

回答日時:Nov 7, 2016, 2:17:09 PM