2017-04-12 9 views
0

私は以下のボタンを持っています: 1)フォームの現在の情報を削除します。 2)javascriptを実行してフォームに新しいエントリを作成します。viewpanelが最新のデータを表示していません

情報はビューパネルに表示されます。問題は、表示される情報が不完全で古いことです。部分リフレッシュだけを行う追加のボタンを追加しました。最初のボタンの実行が終了すると、2番目のパネルをクリックし、2回目のリフレッシュで最新のデータを表示します。私はXSP.partialRefreshGet( "#{id:WrapperPanel}"、{})のバリエーションを入れて遊んでいます。最初のボタンの不完全なイベントで - 無駄に。ここで

は、コードは次のとおりです。任意のポインタのための

<xp:button id="button34" 
           value="Check Teacher Information" 
           styleClass="BlueButtonSmall"> 
           <xp:eventHandler event="onclick" 
            submit="true" refreshMode="complete" id="eventHandler50"> 
            <xp:this.action><![CDATA[#{javascript:var serverName:NotesDatabase = database.getServer(); 
var PosdbName = new Array(serverName,"Position.nsf"); 
var CamdbName = new Array(serverName,"Campus.nsf"); 
var currentDB:NotesDatabase=session.getCurrentDatabase(); 

//Delete old records 
var i = 0; 
var crview = database.getView("ChangeReport"); 
var crvec:NotesViewEntryCollection = crview.getAllEntries(); 
var crentry:NotesViewEntry = crvec.getFirstEntry(); 
while (crentry != null) { 
    crDoc = crentry.getDocument(); 
    crDoc.remove(true); 
    crDoc.recycle(); 
    if (i > 100) { 
     print("Possible Loop HRMainX - breaking"); 
     break; 
    } 
    i++ 
    var tmpentry:NotesViewEntry = crvec.getNextEntry(crentry); 
    crentry.recycle(); 
    crentry = tmpentry; 

} 
database.updateFTIndex(false); 

var aview = database.getView("NISDTeacher"); 
var vec:NotesViewEntryCollection = aview.getAllEntries(); 
var entry:NotesViewEntry = vec.getFirstEntry(); 

var i = 0; 
while (entry != null) { 
    var Enumber:string = entry.getDocument().getItemValueString("TeacherEnumber"); 
    var Firstname = entry.getDocument().getItemValueString("TeacherFirst"); 
    var Lastname = entry.getDocument().getItemValueString("TeacherLast"); 

    var Active = @DbLookup(PosdbName,"All",Enumber,"Posd_Active"); 
    var Status = @DbLookup(PosdbName,"All",Enumber,"Posd_Status"); 
    if (Active === "Y" || Status === "A") { 

     var CurrCampusNum = @DbLookup(PosdbName,"ActiveID",Enumber,"Posd_Campus"); 
     var CurrCampusType = @DbLookup(CamdbName,"Campus",CurrCampusNum,"Cmp_Level"); 
     if (CurrCampusType === "SP" || CurrCampusType === "EL" || CurrCampusType === "MS" || CurrCampusType === "HS") { 

      var CampusNum = entry.getDocument().getItemValueString("CampusNum"); 
      var PositionCode = entry.getDocument().getItemValueString("TeacherPCode"); 

      var CurrFirstname = @Trim(@ProperCase(@DbLookup(PosdbName,"ActiveID",Enumber,"Posd_FName"))); 
      var CurrLastname = @Trim(@ProperCase(@DbLookup(PosdbName,"ActiveID",Enumber,"Posd_lname"))); 
      var CurrPositionCode = @DbLookup(PosdbName,"ActiveID",Enumber,"Posd_Job_Code"); 

      if (CurrFirstname !== Firstname) { 
       var reportDate = session.createDateTime(@Now()); 
       var changeDoc = currentDB.createDocument(); 
       changeDoc.replaceItemValue("Form","ChangeReport"); 
       changeDoc.replaceItemValue("DateReported",reportDate); 
       var Change = Enumber + " " + Firstname + " " + Lastname + " has a new Firstname of " + CurrFirstname; 
       changeDoc.replaceItemValue("Change",Change) 
       changeDoc.save(); 
      } 
      if (CurrLastname !== Lastname) { 
       var reportDate = session.createDateTime(@Now()); 
       var changeDoc = currentDB.createDocument(); 
       changeDoc.replaceItemValue("Form","ChangeReport"); 
       changeDoc.replaceItemValue("DateReported",reportDate); 
       var Change = Enumber + " " + Firstname + " " + Lastname + " has a new Lastname of " + CurrLastname; 
       changeDoc.replaceItemValue("Change",Change) 
       changeDoc.save(); 
      } 
      if (CurrCampusNum !== CampusNum) { 
       var reportDate = session.createDateTime(@Now()); 
       var changeDoc = currentDB.createDocument(); 
       changeDoc.replaceItemValue("Form","ChangeReport"); 
       changeDoc.replaceItemValue("DateReported",reportDate); 
       var CampusName = entry.getDocument().getItemValueString("CampusName"); 
       var CurrCampusName = @DbLookup(CamdbName,"Campus",CurrCampusNum,"Cmp_ShortName"); 
       var Change = Enumber + " " + Firstname + " " + Lastname + " was teaching at " + CampusName + " (" + CampusNum + ") " + 
       "and is now teaching at " + CurrCampusName + " (" + CurrCampusNum + ")"; 
       changeDoc.replaceItemValue("Change",Change) 
       changeDoc.save(); 
      } 
      if (CurrPositionCode !== PositionCode) { 
       var reportDate = session.createDateTime(@Now()); 
       var changeDoc = currentDB.createDocument(); 
       changeDoc.replaceItemValue("Form","ChangeReport"); 
       changeDoc.replaceItemValue("DateReported",reportDate); 
       var PositionTitle = entry.getDocument().getItemValueString("TeacherPTitle"); 
       var CurrPositionTitle = @DbLookup(PosdbName,"ActiveID",Enumber,"Posd_Title"); 
       var Change = Enumber + " " + Firstname + " " + Lastname + " was teaching " + PositionTitle + " (" + PositionCode + ") " + 
       "and is now teaching " + CurrPositionTitle + " (" + CurrPositionCode + ")"; 
       changeDoc.replaceItemValue("Change",Change) 
       changeDoc.save(); 
      } 

     } else { 
      var reportDate = session.createDateTime(@Now()); 
      var changeDoc = currentDB.createDocument(); 
      changeDoc.replaceItemValue("Form","ChangeReport"); 
      changeDoc.replaceItemValue("DateReported",reportDate); 
      var Change = Enumber + " " + Firstname + " " + Lastname + " no longer works as a classroom teacher."; 
      changeDoc.replaceItemValue("Change",Change); 
      changeDoc.save(); 
     } 

    } else { 
     var reportDate = session.createDateTime(@Now()); 
     var changeDoc = currentDB.createDocument(); 
     changeDoc.replaceItemValue("Form","ChangeReport"); 
     changeDoc.replaceItemValue("DateReported",reportDate); 
     var Change = Enumber + " " + Firstname + " " + Lastname + " no longer works at the district."; 
     changeDoc.replaceItemValue("Change",Change) 
     changeDoc.save(); 
    } 
    var tmpentry:NotesViewEntry = vec.getNextEntry(entry); 
    entry.recycle(); 
    entry = tmpentry; 
    if (i > 2000) { 
     print("Possible Loop HRMainX - breaking"); 
     break; 
    } 
    i++ 
} 
database.updateFTIndex(false); 

//view.postScript("alert('Done checking teacher information.')"); 
viewScope.resultsCellVis = true; 
//view.postScript("partialRefreshPost('#{id:WrapperPanel}')") 



    }]]></xp:this.action> 

            <xp:this.onComplete><![CDATA[XSP.partialRefreshGet("#{id:WrapperPanel}", {});]]></xp:this.onComplete> 
           </xp:eventHandler> 
          </xp:button> 

感謝。 ---リサ&

答えて

1

私はこれがうまくいくかどうかわからないんだけど、それはそれは(事実上のビューsetAutoUpdate(false)をしている)のビューコンテンツをキャッシュだということかもしれません。何がうまくいくかは、部分リフレッシュを行うonCompleteイベントの代わりに、SSJSの最後にサーバー側の呼び出しをcontext.reloadPage()に追加することです。これにより、すべてのコンポーネントが再度作成されます。理論的には、キャッシュされたバージョンのビューをダンプしてゼロから取り出すことが期待されます。また、現在コーディングしている完全リフレッシュではなく、部分的リフレッシュでこれを行うこともできます。

このブログの記事を参照してください。完全リフレッシュの違いを説明しました。context.reloadPagecontext.redirectToPage()などhttp://www.intec.co.uk/viewscope-full-refresh-reloadpage/

+0

私はviewScopeの損失のためにcontext.reloadPage()を避けることを望んでいました。しかし、私は先に進み、必要な変数をsessionScopeに変更し、context.reloadPage()をSSJSに追加しました。面白いことに、viewPanelはまだ現在の情報を表示しませんでした。仕事はview.postScript( "alert( 'Done。')");を使用することです。プロセスが完了したときにユーザーに警告します。ユーザーは、可視変数をtrueに設定するボタンをクリックし、部分リフレッシュを実行します。 Voila、正しい情報が表示されます。 –

+0

これはSSJSの実行が完了したときに部分リフレッシュを行うことができれば助けになると考えていた理由です。私は結果を得るためにユーザーが2つのボタンを使用する必要はありません。 –

+0

また、私の元のボタンは、view.postScript( "alert( 'Done。')")が別の方法では動作しないため、完全リフレッシュを実行していました。完全リフレッシュせずに戻ると、context.reloadPage()は JVM:JavaScriptアクション式の実行中にエラーを起こします。 com.ibm.xsp.webapp.FacesServlet $ ExtendedServletException:javax.faces.FacesException:JavaScriptアクション式の実行中にエラーが発生しました CLFAD0134E:例外処理。おそらく私はインクルードページを使用しているからです。 –

関連する問題