2012-05-20 76 views
0

我有兩種形式,組織和聯繫人。聯繫人是對組織的迴應,每個表單都有一個XPage,表單可以填寫,保存等。當直接打開edit_contact.xsp並創建文檔(而不是對組織的迴應)時,一切正常。通過按鈕創建響應文檔

在edit_org.xsp上,我有一個包含2個事件的按鈕。第一個將一些值複製到sessionScope中,這樣我就可以將它們繼承到Contact中。第二個是「創建響應文檔」事件,它創建一個新的響應,父ID是當前組織文檔,並將用戶發送到edit_contact.xsp。按下按鈕可以正確更改XPage,並且字段繼承可以正常工作,但在聯繫人表單上按「提交」不會保存任何內容,也不會創建任何文檔。

這個完全相同的設置在另一個數據庫中100%的工作,我不知道爲什麼它不能在這裏正常工作。在我失蹤的地方有一個模糊的設置嗎?

<xp:button value="Create Contact" id="button1" rendered="#{javascript:!document1.isEditable()}"> 
<xp:eventHandler event="onclick" submit="true" refreshMode="complete"> 
    <xp:this.action> 
     <xp:actionGroup> 
      <xp:executeScript> 
       <xp:this.script> 
        <![CDATA[#{javascript:var doc = document1.getDocument(); 

        sessionScope.PFirstName = doc.getFirstItem("P_Firstname").getValueString(); 
        sessionScope.PSurname = doc.getFirstItem("P_Surname").getValueString(); 
        sessionScope.PFamily = doc.getFirstItem("P_Family").getValueString(); 
        sessionScope.PDOB = doc.getFirstItem("P_DOB") 
        sessionScope.PAGE = doc.getFirstItem("P_Age").getValueString();}]] 
       </xp:this.script> 
      </xp:executeScript> 
       <xp:createResponse name="/edit_contact.xsp" parentId="#{javascript:document1.getNoteID()}"> 
       </xp:createResponse> 

     </xp:actionGroup> 
    </xp:this.action> 
</xp:eventHandler> 
</xp:button>` 

這裏是一個鏈接,顯示了我想要做的(減去場繼承):

http://min.us/mKSJED8tT

目前的表單和視圖的所有工作,但該文件與創建「迴應「表格似乎不是一個迴應文件 - 它沒有$ REF字段。這種設置完全適用於不同的數據庫 - 發生了什麼?

+0

你能分享一些代碼? –

+0

你可能有一個驗證問題,但沒有xp:messages控件來顯示錯誤消息?這可以解釋爲什麼當您提交表單時「沒有」發生。 –

+0

我注意到你正在調用document1上的按鈕並使用doc來響應。你需要將IgnoreResponseParams設置爲True嗎? – RoyRumaner

回答

0

很難說沒有看到任何代碼可能會發生什麼。由於它在另一個數據庫中適用於您,它可能是ACL問題嗎?您登錄的用戶(可能是匿名用戶)無法創建文檔?

+0

我試着改變ACL設置無濟於事。我把這個按鈕的代碼放在第一篇文章中。 –

0

而不是「推」的方法去「拉」 - 只需打開父文檔的url參數的響應頁面。在它的postNewDocument事件中從它初始化字段值。

0

讓其他人所做的兩個關鍵點的更新,將是有益:

  1. 在你的迴應文件數據源設置ignoreRequestParams?如果不是,不管你想要爲第二個數據源定義什麼,UNID等都是從請求參數中抽取的。所以兩個數據源實際上是相同的數據源。
  2. 它是否引發驗證錯誤?如果是這樣,什麼都不會被保存。
+0

我已經在原始文章中提供了一個鏈接到數據庫,該數據庫演示了我正在嘗試執行的操作,希望這會對您有所幫助。 –

0

有兩個可能的問題:

首先使用getFirstItem的( 「X」)是不是最佳做法。所以:

sessionScope.PDOB = doc.getFirstItem("P_DOB") 

將存儲在sessionScope一個NotesItem這是行不通的。建議使用:

sessionScope.PDOB = doc.getItemValueString("P_DOB"); 

其次,getNoteID()的使用可能不會返回您想要的內容(這是文檔的UNID)。使用.getDocument()。getUniversalID()代替。

<xp:createResponse 
    name="/edit_contact.xsp" 
    parentId="#{javascript:document1.getDocument().getUniversalID()}"> 
</xp:createResponse> 

-edited- /Newbs

+0

使用document1.getUniversalID()拋出一個錯誤,如果我將其更改爲document1.getDocument()。getUniversalID(),那麼它似乎可以正常工作,但與以前一樣。 –

+0

是否保存了document1?如果沒有,你不能創建一個響應,它會拋出你描述的錯誤。 – Newbs

+0

我這麼認爲?當以讀取模式打開父文檔時,即使我將「保存文檔」操作添加爲按鈕的第一個動作,document1.getUniversalID也會拋出一個錯誤:「異常 執行JavaScript計算表達式時出錯 腳本解釋器錯誤,行= 3,col = 11:[TypeError]在類型爲'NotesXspDocument [Static Java Wrapper,com.ibm.xsp.model.domino.wrapped.DominoDocument]'的對象上調用方法'getUniversalID()''並創建文檔時出錯與我已輸入到「響應」表單中的值進行比較,但它實際上不是響應文檔,也沒有父級。 –