2016-06-18 8 views
4
  • Ich habe zwei einfache Formen (Form1 und Form2). Sie haben jeweils nur ein Feld (field1). Ich habe zwei benutzerdefinierte Steuerelemente erstellt. Sie sind identisch mit Ausnahme cc1 Datenquelle als Form1 definiert hat und CC2 hat eine Datenquelle Formular 2.
  • Jede individuelle Steuerung hat ein inputbox gebunden an das feld1 Feld die entsprechende Datenquelle und ein Senden. Ich erstelle eine
    Xpage und ziehen beide benutzerdefinierte Steuerelemente in die Seite.
  • Wenn ich die Eingabefelder auf der X-Seite in einem Browser Vorschau und füllen, wenn ich auf eine der Senden-Schaltflächen klicken, werden zwei Dokumente basierend auf den beiden Formen in der Domino-Datenbank erstellt.
  • Ich habe versucht, teilweise Aktualisierung/Ausführung und viele andere Dinge zu verwenden. Egal was ich mache, ich bekomme immer leere Dokumente beider Formulare.

XPage:Xpage mit mehreren Formularen und Datenquellen erstellen leere Dokumente

<xp:div styleClass="container" style="margin-top:20px"> 
    <xp:div styleClass="row"> 
    <xc:cc1></xc:cc1> 
    <xc:cc2></xc:cc2> 
    </xp:div> 
</xp:div> 

Individuelle Kontrolle 1

<xp:this.data> 
    <xp:dominoDocument var="form1" formName="form1"></xp:dominoDocument> 
    </xp:this.data> 
    <xp:div id="formDiv1" styleClass="col-sm-4"> 
    <xp:form> 
     <xp:label value="Form 1" styleClass="h3"></xp:label> 
     <xp:div styleClass="form-group"> 
     <xp:label value="Field 1" styleClass="control-label"></xp:label> 
     <xp:inputText value="#{form1.field1}"></xp:inputText> 
     </xp:div> 
     <xp:button value="Submit Form1" id="form1Btn"> 
     <xp:eventHandler event="onclick" submit="true" refreshMode="partial" immediate="false" save="true" refreshId="formDiv1" 
      execMode="partial" execId="formDiv1"> 
     </xp:eventHandler> 
     </xp:button> 
    </xp:form> 

Individuelle Kontrolle 2

<xp:this.data> 
    <xp:dominoDocument var="form2" formName="form2"></xp:dominoDocument> 
    </xp:this.data> 
    <xp:div id="formDiv1" styleClass="col-sm-4"> 
    <xp:form> 
     <xp:label value="Form 2" styleClass="h3"></xp:label> 
     <xp:div styleClass="form-group"> 
     <xp:label value="Field 1" styleClass="control-label"></xp:label> 
     <xp:inputText value="#{form2.field1}"></xp:inputText> 
     </xp:div> 
     <xp:button value="Submit Form2" id="form2Btn"> 
     <xp:eventHandler event="onclick" submit="true" refreshMode="partial" immediate="false" save="true" refreshId="formDiv1" 
      execMode="partial" execId="formDiv1"> 
     </xp:eventHandler> 
     </xp:button> 
    </xp:form> 

Antwort

3

Eine normale Schaltfläche zum Senden erhält die Eigenschaft save="true" und speichert alle Datenquellen.

Wenn Sie nur eine Datenquelle speichern verwenden Sie dann die einfache Aktion Save Document und die Datenquelle wählen:

enter image description here

Set Eigenschaft save="false" zusätzlich.Ihre Schaltfläche Code würde wie folgt aussehen dann:

<xp:button 
    id="form1Btn" 
    value="Submit Form1"> 
    <xp:eventHandler 
     event="onclick" 
     submit="true" 
     refreshMode="complete" 
     immediate="false" 
     save="false"> 
     <xp:this.action> 
      <xp:saveDocument 
       var="form1"></xp:saveDocument> 
     </xp:this.action> 
    </xp:eventHandler> 
</xp:button> 
+0

Das ist ausgezeichnet. Danke, Knut. Es ist fast perfekt. Nach dem Klicken auf die Schaltfläche "Senden" wird das Eingabefeld jedoch nicht aktualisiert. Wenn ich außerdem einen anderen Wert in das Eingabefeld eingibt und erneut auf die Schaltfläche "Senden" klickt, wird das vorherige Dokument überschrieben, anstatt ein neues Dokument mit dem neuen Wert zu erstellen. –

+1

Dieser http://stackoverflow.com/a/14585187/2065611 könnte Ihnen helfen, ein neues Dokument nach dem Speichern des vorherigen zu erhalten. –

+1

Ja, tatsächlich. Das war die Antwort! Aber ich musste eine zusätzliche Zeile im Code hinzufügen: ds.setFormName ("form2"); –

2

Hier ist der Code, Knut Vorschlag arbeitet mit:

Xpage

<xp:div styleClass="container" style="margin-top:20px"> 
    <xp:div styleClass="row"> 
     <xc:cc1></xc:cc1> 
     <xc:cc2></xc:cc2> 
    </xp:div> 
    </xp:div> 

cc1

<xp:panel id="formDiv1" styleClass="col-sm-4"> 
    <xp:this.data> 
     <xp:dominoDocument var="form1" formName="form1"></xp:dominoDocument> 
    </xp:this.data> 
    <xp:label value="Form 1" styleClass="h3"></xp:label> 
    <xp:div styleClass="form-group"> 
     <xp:label value="Field 1" styleClass="control-label"></xp:label> 
     <xp:inputText id="field1" value="#{form1.field1}"></xp:inputText> 
    </xp:div> 
    <xp:button value="Save" id="form1Btn"> 
     <xp:eventHandler event="onclick" submit="true" refreshMode="partial" immediate="false" save="false" execMode="partial" 
     execId="formDiv1" refreshId="formDiv1"> 
     <xp:this.action> 
      <xp:actionGroup> 
      <xp:saveDocument var="form1"></xp:saveDocument> 
      <xp:executeScript> 
       <xp:this.script><![CDATA[#{javascript: 
var panel = getComponent("formDiv1"); 
var ds = new com.ibm.xsp.model.domino.DominoDocumentData(); 
ds.setComponent(panel); 
ds.setVar("form1"); 
ds.setFormName("form1"); 
panel.getData().clear(); 
panel.addData(ds);}]]></xp:this.script> 
      </xp:executeScript> 
      </xp:actionGroup> 
     </xp:this.action> 
     </xp:eventHandler> 
    </xp:button> 
    </xp:panel> 

CC2

<xp:panel id="formDiv2" styleClass="col-sm-4 "> 
    <xp:this.data> 
     <xp:dominoDocument var="form2" formName="form2"></xp:dominoDocument> 
    </xp:this.data> 
    <xp:label value="Form 2" styleClass="h3"></xp:label> 
    <xp:div styleClass="form-group"> 
     <xp:label value="Field 1" styleClass="control-label"></xp:label> 
     <xp:inputText id="field1" value="#{form2.field1}"> 
     </xp:inputText> 
    </xp:div> 
    <xp:button value="Submit Form2" id="form2Btn"> 
     <xp:eventHandler event="onclick" submit="true" refreshMode="partial" immediate="false" save="false" execMode="partial" 
     execId="formDiv2" refreshId="formDiv2"> 
     <xp:this.action> 
      <xp:actionGroup> 
      <xp:saveDocument var="form2"></xp:saveDocument> 
      <xp:executeScript> 
       <xp:this.script><![CDATA[#{javascript: 
var panel = getComponent("formDiv2"); 
var ds = new com.ibm.xsp.model.domino.DominoDocumentData(); 
ds.setComponent(panel); 
ds.setVar("form2"); 
ds.setFormName("form2"); 
panel.getData().clear(); 
panel.addData(ds);}]]></xp:this.script> 
      </xp:executeScript> 
      </xp:actionGroup> 
     </xp:this.action> 
     </xp:eventHandler> 
    </xp:button> 
    </xp:panel> 
2

Paul Wither Vorschlag request Rahmen für die Datenquellen der Verwendung gemacht, den Code ein bisschen einfacher:

XPage

<xp:div styleClass="container" style="margin-top:20px"> 
    <xp:div styleClass="row"> 
     <xc:cc1></xc:cc1> 
     <xc:cc2></xc:cc2> 
    </xp:div> 

individuelle Steuerung 1

<xp:view xmlns:xp="http://www.ibm.com/xsp/core"> 
    <xp:this.data> 
    <xp:dominoDocument var="form1" formName="form1" scope="request"></xp:dominoDocument> 
    </xp:this.data> 
    <xp:div id="formDiv1" styleClass="col-sm-4"> 
    <xp:label value="Form 1" styleClass="h3"></xp:label> 
    <xp:div styleClass="form-group"> 
     <xp:label value="Field 1" styleClass="control-label"></xp:label> 
     <xp:inputText id="field1" value="#{form1.field1}"></xp:inputText> 
    </xp:div> 
    <xp:button value="Save" id="form1Btn"> 
     <xp:eventHandler event="onclick" submit="true" refreshMode="partial" immediate="false" save="false" execMode="partial" execId="formDiv1" 
     refreshId="formDiv1"> 
     <xp:this.action> 
      <xp:actionGroup> 
      <xp:saveDocument var="form1"></xp:saveDocument> 
      </xp:actionGroup> 
     </xp:this.action> 
     <xp:this.onComplete><![CDATA[x$("#{id:field1}").val("");]]></xp:this.onComplete> 
     </xp:eventHandler> 
    </xp:button> 
    </xp:div> 
</xp:view> 

Custom Control 2

<xp:view xmlns:xp="http://www.ibm.com/xsp/core"> 
    <xp:this.data> 
    <xp:dominoDocument var="form2" formName="form2" scope="request"></xp:dominoDocument> 
    </xp:this.data> 
    <xp:div id="formDiv2" styleClass="col-sm-4 "> 
    <xp:label value="Form 2" styleClass="h3"></xp:label> 
    <xp:div styleClass="form-group"> 
     <xp:label value="Field 1" styleClass="control-label"></xp:label> 
     <xp:inputText id="field1" value="#{form2.field1}"> 
     </xp:inputText> 
    </xp:div> 
    <xp:button value="Submit Form2" id="form2Btn"> 
     <xp:eventHandler event="onclick" submit="true" refreshMode="partial" immediate="false" save="false" execMode="partial" 
     execId="formDiv2" refreshId="formDiv2"> 
     <xp:this.action> 
      <xp:actionGroup> 
      <xp:saveDocument var="form2"></xp:saveDocument> 
      </xp:actionGroup> 
     </xp:this.action> 
     <xp:this.onComplete><![CDATA[x$("#{id:field1}").val("");]]></xp:this.onComplete> 
     </xp:eventHandler> 
    </xp:button> 
    </xp:div> 
</xp:view>