2017-04-12 38 views
0

我有一個按鈕,它可以執行以下操作: 1)刪除表單中的當前信息。 2)運行JavaScript以在表單中創建新條目。viewpanel不顯示最新數據

信息顯示在一個視圖中。問題是顯示的信息不完整且陳舊。我添加了一個只做部分刷新的按鈕。一旦第一個按鈕完成運行,我點擊第二個面板,第二次刷新顯示最新的數據。我一直在玩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> 

感謝任何指針。 --- Lisa &

回答

1

我不確定這是否可行,但可能是它緩存視圖內容(有效地在視圖上執行setAutoUpdate(false))。可能有效的是,而不是onComplete事件進行部分刷新,將SSJS末尾的服務器端呼叫添加到context.reloadPage()。這將再次重新創建所有組件。理論上,我希望能夠轉儲它的視圖的緩存版本並從頭開始檢索它。您還應該能夠通過局部刷新來完成此操作,而不是您目前編碼的完整刷新。

看到這篇文章我解釋了全面更新,context.reloadPagecontext.redirectToPage()http://www.intec.co.uk/viewscope-full-refresh-reloadpage/之間的差異。

+0

我希望避免一個context.reloadPage(),因爲viewScope的損失。但是,我繼續並將我需要的變量更改爲sessionScope,並將context.reloadPage()添加到SSJS。有趣的是,viewPanel仍然沒有顯示當前信息。什麼工作是使用view.postScript(「alert('Done。')」);在過程完成時提醒用戶。然後用戶點擊一個按鈕,將可見性變量設置爲true並進行部分刷新。 Voila,提供了正確的信息。 –

+0

這就是爲什麼我認爲如果我能在SSJS完成運行時進行部分刷新,這將有所幫助。我不喜歡讓用戶使用2個按鈕來獲得結果。 –

+0

此外,我的原始按鈕正在進行全面刷新,因爲view.postScript(「alert('Done。')」)不會工作。如果沒有完全刷新,context.reloadPage()會在執行JavaScript動作表達式時導致 JVM:Error。 com.ibm.xsp.webapp.FacesServlet $ ExtendedServletException:javax.faces.FacesException:執行JavaScript動作表達式時出錯 CLFAD0134E:異常處理。也許這是因爲我正在使用包含頁面。 –