2015-10-20 53 views
0

UPDATE底:問題來源查明的xpages:什麼可以停止代碼停止,同時保存頁面?

我有一個頁面,基於已經從應用程序的以前的優化版本剝離大部分計算領域的形式(這樣的文檔實際上可以通過computewithform功能),我在保存文檔時遇到了問題。我有Notes客戶端(以前的應用版本)中創建的文檔已轉換爲MIME,並且在新的xpages應用中創建的一些文檔(使用CKEditor)保存在富文本字段中,該字段被標記爲存儲爲MIME也是如此。

我有一個按鈕來「發佈」文檔。該代碼適用於在新應用程序中創建的文檔,但它似乎停止在以前的應用程序版本中創建的文檔的某處。

這裏的IE陷阱儘可能HTTP流量中有哪些:

A case that works: 
/mydb.nsf/page.xsp?action=editDocument&documentId=353B2 HTTP POST 302  244 B 218 ms cliquer 0 31 0 187 0 1761 
/mydb.nsf/xPublish?OpenAgent&docid=487A3447CFA36BF085257EE400626485 HTTP GET 302  190 B 141 ms cliquer 218 16 125 0 0 1620 
http://myserver.com/mydb.nsf/dx/test_13col00 HTTP GET 200 text/html 55.71 Ko 312 ms cliquer 359 0 0 32 0 1308 

A case that doesn't work: 
http://myserver.com/mydb.nsf/page.xsp?action=editDocument&documentId=353BA HTTP POST 302  244 B 188 ms cliquer 0 32 0 156 0 156 
/mydb.nsf/xPublish?OpenAgent&docid=E0E13322928B8F9685257EE400628B0A HTTP  (Abandonned)  193 B < 1 ms cliquer 188 0 0 0 0 156 

在代碼中的「發佈」按鈕是:

//set status 
    if(getComponent("publishLater1").getValue() == "1") { 
     pageDocument.replaceItemValue("status", "Scheduled Publication"); 
    } else { 
     pageDocument.replaceItemValue("status", "To Be Published"); 
    } 

    //so we know the document has been saved (for drafts, when cancelled) 
    pageDocument.replaceItemValue("hasBeenSaved", "1"); 

    //init some fields (res_title, ...) 
    if(!(pageDocument.hasItem("res_title")) || pageDocument.getItemValueString("res_title")==""){ 
     pageDocument.replaceItemValue("res_title", buildResTitle(pageDocument.getItemValueString("subject"))); 
    } 

    //set VERKEY AND VERNUMBER if not already set 
    if(pageDocument.getItemValueString("VERKEY")==""){ 
     pageDocument.replaceItemValue("VERKEY", @Unique()); 
    } 
    if(pageDocument.getItemValueString("VERNUMBER")==""){ 
     pageDocument.replaceItemValue("VERNUMBER", 1); 
    } 

    //save pageDocument 
    pageDocument.save(); 

    //send to publish agent 
    //remove the lock doc 
    //unlockDoc(pageDocument.getDocument().getUniversalID()); 

    //for scheduled publications, a LotusScript agent will do the work 
    var res=facesContext.getExternalContext().getResponse(); 

    if(getComponent("publishLater1").getValue() == "0") { 
     // Now load the publish Agent 
     var baseUrl = @Left(facesContext.getExternalContext().getRequestContextPath(),".nsf") + ".nsf/"; 
     facesContext.getExternalContext().redirect(baseUrl + "xPublish?OpenAgent&docid=" + pageDocument.getDocument().getUniversalID()); 
     //res.sendRedirect(xPublish?OpenAgent&docid=" + pageDocument.getDocument().getUniversalID(), false); 
    } else { 
     //send to the drafts view, to show it has the clock icon in the draft view 
     context.redirectToPage("adminDrafts.xsp");  
    } 

我就饒了LotusScript代理的細節被稱爲(xPublish),但該代碼中的重定向是這樣完成的:

Print "Location:" + db.Filepath + "/dx/" + res_title 

根據IE的http日誌,在按鈕中運行代碼時,似乎有些事情不太正確,並且會導致放棄http post,因此對LotusScript代理的調用也會被放棄,而不會將用戶重定向到新發布的頁。相反,用戶會被重定向到這個網址:

http://myserver.com/mydb.nsf/page.xsp?action=editDocument&documentId=353BA 

大這裏的問題是,這個頁面(草案版本)在LotusScript代理被刪除,使URL給出了一個錯誤頁面。

如果您想知道發佈代碼爲什麼在LotusScipt中,這是因爲我們還有一個計劃的代理程序,它每天運行併發布將來發布的「計劃發佈」。這是爲了避免必須同時維護SSJS和LotusScript代碼。

任何線索爲什麼發生這種情況?


UPDATE

好吧,這似乎代碼工作正常,但它在LotusScript代理不勝任的重定向。這是我用什麼來重定向到剛剛發佈的頁面:

Print "Location: http://ourserver.com/mydb.nsf/dx/" + res_title 

它是在一個點的工作,但現在它似乎是導致問題。有趣的是代理可以正常使用我們從頭開始創建的文檔,但不適用於在以前版本的應用中創建的文檔......仍然不知道如何解決這個問題。從xpages的LotusScript做重定向的方法是什麼?

回答

0

好吧,我得到了這一切工作。它仍然有點奇怪,因爲它對新文檔運行正常,但對於在以前版本的應用程序中創建的那些文件卻不行,但我以錯誤的方式調用LotusScript代理。

通過在IBM Wiki Template中查看它是如何完成的,我注意到他們以不同的方式調用了LotusScript代理,並且我嘗試了這種方法。結果表明它很好用:代碼被調用並且重定向沒有任何問題。

這裏是我現在打電話給我的經紀人,做重定向方式:

var agent = database.getAgent("xPublish"); 
var res = facesContext.getExternalContext().getResponse(); 
agent.runOnServer(pageDocument.getNoteID());  
res.sendRedirect(@Left(facesContext.getExternalContext().getRequestContextPath(),".nsf")+".nsf/dx/"+pageDocument.getItemValueString("res_title")); 

正如我所說的,不知道爲什麼,我的原代碼停止工作,並且只有在以前的版本中創建的文檔問題該應用程序,但新的代碼始終適用於所有文檔。如果IBM這樣做,我想這可能是正確的。

該wiki應用程序中有很多代碼!看看它來獲得一些有價值的代碼或獲得靈感!