2012-03-28 16 views
2

Ich habe mehrere Felder auf meinem Notes DocumentDynamische Datenbindung?

FieldA_1 FieldA_2 FieldA_3 FieldA_4

FieldB_1 FieldB_2 FieldB_3 FieldB_4

Auf einem Verbund Kontrolle Ich habe 2 Editboxen FieldA FieldB

Ich habe eine compositeData.ATM_NU M hat ein benutzerdefiniertes Steuerelement definiert, bei dem es sich um eine Dropdown-Liste mit den Werten 1,2,3,4 handelt.

Wie binde ich die Bearbeitungsfelder auf meinem Steuerelement an die entsprechenden Dokumentfelder mit den verfügbaren Composite-Daten?

Zum Beispiel wollte ich etwas tun wie: "FieldA _" + compositeData.ATM_NUM.

habe ich versucht, die JavaScript-Lösung in diesem Thread:

Binding an edit box within a custom control to a form field programatically

Aber es nicht zu funktionieren scheinen.

Antwort

11

Versuchen Sie Folgendes als Wert für z. Feld A:

<xp:inputText value="#{document['FieldA'+compositeData.ATM_NUM]}" /> 

Sie könnten auch die Eigenschaft des benutzerdefinierten Steuerelements erweitern die ganzen Feldnamen (und somit übertragen, beispielsweise „FieldA_1“ an die individuellen Steuerung). Dann sollten Sie in der Lage sein, Folgendes zu tun:

<xp:inputText value="#{document[compositeData.fieldName]}" /> 
+3

Vielleicht wollen Sie auch diese Erklärung prüfen, von die Technik, die Per empfiehlt: http://stackoverflow.com/questions/9719778/xpages-more-fields-unlimited-at-the-click-of-a-button/9720793#9720793 –

+0

Ich versuchte value = "# {document1 [CMBUExistTermID + compositeData.ATM_NUM]} "aber ich habe einen Fehler erhalten. Ich werde das Feld Ding versuchen, aber würde es lieber vermeiden, wenn ich kann. Ich würde gerne herausfinden, wie es mit meinem zusammengesetzten Zahlenfeld gemacht wird. –

+0

Auch versucht Wert = "# {document1 ['CMBUExistTermID' + '4']}", die einen Fehler gibt Eine Ausnahme aufgetreten beim Versuch String "CMBUExistTermID" in "java.lang.Double" zu konvertieren aber alue = "# {document1 ['CMBUExistTermID4']} "funktioniert einwandfrei. –

5

Das Problem hängt mit der Zeit zusammen, in der compositeData für Ihre Verwendung bereit ist. Am Anfang wird "0" ausgewertet, wenn das benutzerdefinierte Steuerelement bereit ist.

Versuchen Sie folgendes:

<xp:inputText id="inputText1" 
      value="${javascript:'#{document1.SomeField'+compositeData.SomeParam+'}'}"> 
</xp:inputText> 

Es ist wichtig, "$" zu verwenden, es unterzeichnen. Abhängig von SomeParam wird eine Bindung an SomeField1, SomeField2 usw. erstellt.

+0

Danke Serdar, ich habe das versucht, aber es hat nicht funktioniert. Keine Fehler oder irgendetwas füllten das Feld nicht wie erwartet. Hier ist die tatsächliche Formel, die ich verwendet habe. Wert = "$ {javascript: '# {document1.CMBUAction' + compositeData.ATM_NUM + '}'}"> –

+0

OK, wo ist das Dokument1 definiert? In CC oder in der XPage? –

+0

Ich sprach zu früh. Es funktioniert perfekt. Was ist der Zweck des $? Ist das irgendwo dokumentiert? –

5

Ein Beispiel für Daten für eine benutzerdefinierte Kontrollbindung ist dies:

ein benutzerdefiniertes Steuerelement erstellen, fügen Sie 2 benutzerdefinierte Eigenschaften: BindTo (String), CanEdit (Boolean). Sehr oft müssen Sie ein Feld readonly haben, basierend auf dem Status Ihrer Geschäftslogik und nicht darauf, dass sich der Rest im Bearbeitungsmodus befindet.

<xp:listBox id="listBox1" 
     rendered="#{compositeData.canEdit}"> 
     <xp:this.value><![CDATA[${javascript:"#{"+compositeData.BindTo+"}"}]]></xp:this.value> 
     <xp:selectItem itemLabel="red"></xp:selectItem> 
     <xp:selectItem itemLabel="blue"></xp:selectItem> 
     <xp:selectItem itemLabel="green"></xp:selectItem> 
</xp:listBox> 
<xp:text id="textForListbox" 
     rendered="#{!compositeData.canEdit}"> 
     <xp:this.value><![CDATA[${javascript:"#{"+compositeData.BindTo+"}"}]]></xp:this.value> 
</xp:text> 

Der Vorteil dieses Ansatzes (mit ${javascript:"#{"+compositeData.BindTo+"}"}) ist, dass Sie diese Kontrolle etwas binden kann: ein Dokument, einen Bereich variabel, eine Bohne usw.

+0

Prost. Zum ersten Mal habe ich gesehen, wie man eine dynamische Bindung an etwas anderes als ein Dokument durchführt. sehr hilfreich –