2017-02-02 18 views
0

我試圖從視圖中獲得選定文檔,並保存爲獨立的文件獲取從視圖中選擇文件,並保存爲獨立的文件

這裏是一個XPage

在頂部的組合框的設計,帶複選框的視圖(該視圖用於選擇),用於保存視圖和組合框中的選擇值的按鈕。還有另一個視圖將顯示保存的值。

從這個post,我可以得到所選文檔的單元並保存到查看範圍變量。添加按鈕可以從組合框和視圖中保存選定的值,並將結果顯示在另一個視圖中。

但是,如果我在視圖中選擇多個值並單擊保存,它會將所有值保存在一個文檔中。因此,我嘗試使用for循環來循環查看並保存所選值,並且它仍然只在一個文檔中保存一個值。

<xp:table id="table1a"> 
    <xp:tr> 
     <xp:td id="table1"> 
      <xp:comboBox id="comboBox1" 
       dojoType="dijit.form.ComboBox" style="width:250.0px" 
       value="#{document1.Category}"> 
       <xp:selectItems id="selectItems3"> 
        <xp:this.value><![CDATA[#{javascript:var SetFirstValueBlank = @Text(""); 
        return SetFirstValueBlank; 
       }]]></xp:this.value> 
       </xp:selectItems> 
       <xp:selectItems id="selectItems4"> 
        <xp:this.value><![CDATA[#{javascript:@Unique(@DbColumn(@DbName(), "CategoryListView", 1));}]]></xp:this.value> 
       </xp:selectItems> 
       <xp:eventHandler event="onchange" submit="true" 
        refreshMode="partial" refreshId="table1a"> 
       </xp:eventHandler> 
      </xp:comboBox> 
      <xp:text escape="true" id="computedField1"> 
      </xp:text> 
     </xp:td> 
    </xp:tr> 
    <xp:tr> 
     <xp:td> 
      <xp:viewPanel rows="10" id="viewPanel1" var="rowData"> 
       <xp:this.data> 
        <xp:dominoView var="view1" 
         viewName="hListView"> 
        </xp:dominoView> 
       </xp:this.data> 
       <xp:viewColumn columnName="ItemName" 
        id="viewColumn1" style="background-color:rgb(255,255,255)" 
        showCheckbox="true"> 
        <xp:viewColumnHeader value="Item Name" 
         id="viewColumnHeader1" rendered="false"> 
        </xp:viewColumnHeader> 
       </xp:viewColumn> 
       <xp:this.facets> 
        <xp:pager partialRefresh="true" 
         layout="Previous Group Next" xp:key="footerPager" id="pager2"> 
        </xp:pager> 
       </xp:this.facets> 
      </xp:viewPanel> 
      <xp:br></xp:br> 
      <xp:button value="Add" id="button1" 
       style="height:35.0px"> 
       <xp:eventHandler event="onclick" submit="true" 
        refreshMode="complete"> 
        <xp:this.action><![CDATA[#{javascript:var Category = getComponent("comboBox1").getValue(); 
        var viewPanel=getComponent("viewPanel1"); 
        var docIDArray=viewPanel.getSelectedIds(); 
        var unidArray = new Array(); 
        for(i=0; i < docIDArray.length; i++) { 
        var unid=database.getDocumentByID(docIDArray[i]).getUniversalID(); 
         unidArray.push(unid); 
        } 
        viewScope.put("unidArray", @Implode(unidArray, ",")); 
       for(var i=0; i< unidArray.length;i++) 
       { 
        document1.replaceItemValue("ItemName", unidArray[i]); 
        document1.save(); 
       } 
     }]]></xp:this.action> 
       </xp:eventHandler> 
      </xp:button> 
      <xp:br></xp:br> 
      <xp:br></xp:br> 
      <xp:viewPanel rows="6" id="viewPanel2">      
        <xp:this.data> 
         <xp:dominoView var="view2" viewName="CategoryItemView"> 
          <xp:this.categoryFilter><![CDATA[#{javascript:getComponent("comboBox1").getValue();}]]></xp:this.categoryFilter> 
         </xp:dominoView> 
        </xp:this.data> 
        <xp:this.rendered><![CDATA[#{javascript:var value = getComponent("comboBox1").getValue(); 
        if(value =="" || value == null) 
        { 
         return false; 
        } 
        else 
        { 
         return true; 
        }}]]></xp:this.rendered><xp:viewColumn id="viewColumn4" columnName="Category" rendered="false"> 
         <xp:this.facets> 
          <xp:viewColumnHeader xp:key="header" id="viewColumnHeader4" value="Category"> 
          </xp:viewColumnHeader> 
         </xp:this.facets> 
        </xp:viewColumn> 
        <xp:viewColumn id="viewColumn3" columnName="$10"> 
         <xp:this.facets> 
          <xp:viewColumnHeader xp:key="header" id="viewColumnHeader3" value="Category"> 
          </xp:viewColumnHeader> 
         </xp:this.facets> 
        </xp:viewColumn> 
        <xp:viewColumn columnName="ItemName" id="viewColumn2"> 
         <xp:viewColumnHeader value="Item" id="viewColumnHeader2"> 
         </xp:viewColumnHeader> 
        </xp:viewColumn> 
        <xp:this.facets> 
         <xp:pager partialRefresh="true" layout="Previous Group Next" xp:key="footerPager" id="pager3"> 
         </xp:pager> 
        </xp:this.facets></xp:viewPanel><xp:br></xp:br></xp:td> 
       </xp:tr> 
      </xp:table> 

有人會讓我知道如何將多個值保存在單獨的文檔中嗎?謝謝。

(編輯:以前的一些內容被刪除)

我想我將集中討論如何保存多個值作爲單獨的文件首先是因爲這部分是在節目中很重要,一旦我可以保存爲獨立的文件,還會有另一個需要結果處理的功能。

我回顧了代碼,我想我仍然會使用for循環,但不幸的是,它仍然只保存一個文檔。

回答

1

我猜測document1對象綁定到XPage上,這隻在XPage打開時纔會創建。爲了使您的按鈕創建多個文件,for循環需要修改:

var oneOfMany : NotesXspDocument; 
for(var i=0; i< unidArray.length;i++) 
{ 
    oneOfMany = database.createDocument(); 
    oneOfMany.replaceItemValue("Category", document1.getItemValue("Category")); 
    oneOfMany.replaceItemValue("ItemName", unidArray[i]); 
    oneOfMany.replaceItemValue("form", "MyFormName"); 
    oneOfMany.save(); 
} 

因爲它不再使用文檔1,這個循環就需要填入你需要這樣的形式中的其他項目,例如MyFormName如在示例中那樣,

+0

感謝我知道使用'database.createDocument',在我收到你的答案之前,我不知道我可以在for循環中使用這段代碼。所以我現在可以將多個值保存爲單獨的文檔。非常感謝你。 – Learner

+0

但有一點我注意到,如果我使用'database.createDocument()','運行表單驗證' - >選擇'On document save'將不起作用。即使我使用公式編寫代理,然後使用'database.getAgent(「myAgent」)。run()',它不起作用。 – Learner

+0

我需要使用這些方法的原因是因爲有一些計算字段的形式,當我保存文檔時,這些計算的字段將更新(它將用於另一個函數中)。但是,在使用簡單數據綁定的新頁面中,(數據源是document1),「運行表單驗證」 - >「選擇文檔保存」和「database.getAgent(」myAgent「)。run()正常。你對這個問題有什麼想法嗎? – Learner

0

@learner我建議你創建一個新的問題,如果可能的話包括一個例子。

+0

你好,我發佈這個問題[post](http://stackoverflow.com/questions/42530470/is-it-possible-to-have-data-binding-in-the-the-view)。你可以隨意看看嗎?非常感謝你。 – Learner

相關問題