いいね!数

0

閲覧数
347

既存の文書を元に新しい文書を作成してそれを編集モードで開かせたいと思っています。

①文書A上に文書Bを作成させるボタンがある。

②①のボタンをクリックすると、文書A上の値を取得して、その値を新しく作成した文書Bに

設定する。

③文書Aを閉じて②で作成した文書Bを編集モードで開く

上記を実現したいのですが、②まではssjsでできたのですが、その後、③を実行させる

ことができません。

以下、①のボタンに書いたssjsです。

===============================================================

     var newdoc = database.createDocument();    //-----新規作成
   //フォーム名
    newdoc.replaceItemValue("Form","Shinsei1_F");
    //申請日
    newdoc.replaceItemValue("Shinseibi",@Now());
    //申請者
    newdoc.replaceItemValue("Shinseisya",@UserName());
    //ステータス
    newdoc.replaceItemValue("Status","申請書作成中");
    //正式社名
    newdoc.replaceItemValue("CompanyName",document1.getValue("CompanyName"));

//----- 現在の文書を閉じる
//----- 編集モードで開く

=================================================================

何か良い方法はありますでしょうか?

 

 

 

サーバー情報: | クライアント情報: | 
カテゴリ:アプリ開発 - XPages | タグ:
  | 質問日時:2016/11/14 17:47:48

回答・コメント

いいね!数

0

こんにちは。

newdocをいったん保存しないといけないのですが、以下の方法があります。

newdco.save();
var unid = newdoc.getUniversalID();
var url = "/main.xsp?documentaId="+unid+"&action=editDocument";
context.redirectToPage(url);

要はnewdocを編集モードで開くURLを作ってcontext.redirectToPage()で画面遷移させてしまおうというもの。画面遷移なので元の文書も閉じてくれます。

/Yac

P.S. 「競合文書文書のロック」が回答ついてるのに放置されたままですね。

 

回答日時:2016/11/14 20:30:42

いいね!数

0

yac4423さん、

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

できればnewdocを保存せずに編集モードで開かせたいのです。

保存しないと難しいでしょうか・・・?

P.S.競合文書のロックについて回答がついていたのですね!お知らせ頂きありがとうございます。

回答日時:2016/11/15 10:10:30

いいね!数

0

>保存しないと難しいでしょうか・・・?

保存しないとUNIDが確定しないですからねぇ。

最初の保存時に何かのフラグをセットしておいて、本番系のビューに表示させないようにしておけばいいんですよ。必要事項を入れて正式に保存したときにはその仮文書1であることを示すフラグを落としてやればいい。

あとは仮文書は「ゴミ箱」ビューに表示させるようにして、時々掃除してやればいい。

 

どうしても文書を保存せずに似たようなことをしたいなら、こんな感じでしょうか。要は文書B側にコピー処理を書くわけです。

・文書Bを作成するボタンには文書を新規作成するURLに独自のURLパラメータを付加して、そこに元ネタとなる文書Aを特定するための情報を付与

・新規文書を開いた時のイベントハンドラ(postNewDocument)でURLパラメータを解析し、文書AのNotesDocumentを得る

・後は新規作成文書のdoument1に文書Aの各フィールドの値をセットしまくればいい

試したことはないけど、まぁ原理的にはさほど難しいことはないはず。

/Yac

回答日時:2016/11/15 12:39:24

いいね!数

0

yac4433さん、

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

保存しても後で掃除すればいいんですね。勉強になります。

あと、別の方法も考えてみました。

①文書A上の文書Bを作成するボタンでsessionScopeに文書A上の値を入れる

②文書を開く―新規作成のシンプルアクションで文書Bを新規作成する

③文書BのpostNewDocumentイベントで①のsessionScopeの値を取り出して文書Bに設定する。

上記だと、文書Aを閉じることなく文書Bが同じページに開くようになりますが、これでも問題ないかなと

考えています(今のところ)。また、文書Bは文書A上のボタンからしか作られないので、文書Bの

psotNewDocumentにコードを書いても問題ないかと・・・。

この方法で何か問題になりそうなことはあるでしょうか?

 

回答日時:2016/11/15 14:07:10

いいね!数

0

今のところsessionScopeを使用した方法でうまく行っているので、これを使用しようかと

思っています。

yac4423さん、いろいろとアドバイスをありがとうございました。

回答日時:2016/11/18 17:24:28