{"id":457,"date":"2011-12-29T14:32:46","date_gmt":"2011-12-29T12:32:46","guid":{"rendered":"http:\/\/hasselba.ch\/blog\/?p=457"},"modified":"2011-12-29T14:32:46","modified_gmt":"2011-12-29T12:32:46","slug":"domino-datasources-on-the-fly-3-valuebinding-methodbinding","status":"publish","type":"post","link":"https:\/\/hasselba.ch\/blog\/?p=457","title":{"rendered":"Domino Datasources On-the-Fly (3): ValueBinding &#038; MethodBinding"},"content":{"rendered":"<p><em>Das ist der dritte Teil der Serie \u201cDomino Datasources On-the-Fly\u201d. Der zweite Teil findet sich <a title=\"Domino Datasources On-the-Fly (2): DominoDataView\" href=\"https:\/\/hasselba.ch\/blog\/?p=449\">hier<\/a>.<\/em><\/p>\n<p>Will man eine Wertezuweisung berechnen lassen, muss ein ValueBinding erstellt werden. Damit l\u00e4sst sich dann z.B. der Formname eines <em>DominoDocumentData<\/em>-Objektes berechnen (zugegebenerma\u00dfen ein kleinwenig sinnlos, da man dies im Code sowieso erledigen k\u00f6nnte&#8230;).<\/p>\n<p>Hierf\u00fcr existiert die Methode <em>createValueBinding()<\/em> der <em>Application<\/em>-Klasse, mit der ein neues <em>ValueBinding<\/em>-Objekt instanziert werden kann:<\/p>\n<pre>var app = facesContext.getApplication();\r\nvar vb = app.createValueBinding(\"#{javascript:@Text(@Now())}\");<\/pre>\n<p>Dieses ValueBinding muss dem jeweiligen Datasource-Objekt \u00fcber die Methode <em>setValueBinding()<\/em> zugewiesen werden. Als erster Parameter muss der Name der zu setzenden Eigenschaft angegeben werden, dann folgt das jeweilige <em>ValueBinding<\/em>-Objekt.<\/p>\n<pre>var data = new com.ibm.xsp.model.domino.DominoDocumentData();\r\ndata.setVar(\"document1\");\r\ndata.setValueBinding(\"<strong>formName<\/strong>\", vb);\r\nview.addData(data);<\/pre>\n<p>Die Fett hervorgehobene Eigenschaft entspricht dem Parameter im XPages Source:<\/p>\n<pre>&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\r\n&lt;xp:view xmlns:xp=\"http:\/\/www.ibm.com\/xsp\/core\"&gt;\r\n\u00a0\u00a0 \u00a0&lt;xp:this.data&gt;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;xp:dominoDocument var=\"document1\"\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 <strong>formName<\/strong>=\"#{javascript:@Text(@Now())}\" \/&gt;\r\n\u00a0\u00a0 \u00a0&lt;\/xp:this.data&gt;\r\n&lt;\/xp:view&gt;<\/pre>\n<p>Allerdings ist diese Zuweisung nicht bei allen Eigenschaften m\u00f6glich! Bei noch auszuf\u00fchrenden Methoden wie z.B. dem <em>QuerySaveDocument<\/em>-Event muss stattdessen mit einem <em>MethodBinding<\/em>-Objekt gearbeitet werden. Wieder findet die Instanzierung \u00fcber das <em>Application<\/em>-Objekt statt:<\/p>\n<pre>var code = \"\";\r\ncode += \"#{javascript:document1.replaceItemValue(\\\"Test\\\"\";\r\ncode += \", @Text(@Now()));}\";\r\nvar mb = app.createMethodBinding( code, null);<\/pre>\n<p>Eine Methode <em>setMethodBinding()<\/em> existiert jedoch nicht; das <em>MethodBinding<\/em>-Objekt muss daher \u00fcber spezielle Methoden dem jeweiligen <em>DataSource<\/em>-Objektes zugewiesen werden. Die Namensgebung der Methoden ist hierbei jedoch trivial, es muss nur ein &#8222;set&#8220; vor die jeweilige Methode gestellt werden:<\/p>\n<pre>var data = new com.ibm.xsp.model.domino.DominoDocumentData();\r\ndata.setVar(\"document1\");\r\ndata.setQuerySaveDocument(mb);\r\nview.addData(data);<\/pre>\n<p>Hier noch der Source einer vollst\u00e4ndigen Beispiel-Implementierung:<\/p>\n<pre>&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;\r\n&lt;xp:view xmlns:xp=\"http:\/\/www.ibm.com\/xsp\/core\"&gt;\r\n\r\n&lt;xp:button value=\"Create Datasource\" id=\"button1\"&gt;\r\n\u00a0\u00a0 &lt;xp:eventHandler event=\"onclick\" submit=\"true\"\r\n\u00a0 \u00a0\u00a0\u00a0 \u00a0refreshMode=\"complete\"&gt;\r\n\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;xp:this.action&gt;\r\n\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;![CDATA[#{javascript:\r\n\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 var app = facesContext.getApplication();\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 var data = new com.ibm.xsp.model.domino.DominoDocumentData();\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 data.setVar(\"document1\");\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 var value = \"#{javascript:@Text(@Now())}\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 var vb = app.createValueBinding(value);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 data.setValueBinding(\"formName\", vb);\r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 var code = \"\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 code += \"#{javascript:document1.replaceItemValue(\\\"Test\\\"\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 code += \", @Text(@Now()));}\";\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 var mb = app.createMethodBinding( code, null);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 data.setQuerySaveDocument(mb); \r\n\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 view.addData(data);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }]]&gt;\r\n\u00a0 \u00a0\u00a0\u00a0 \u00a0&lt;\/xp:this.action&gt;\r\n\u00a0\u00a0 &lt;\/xp:eventHandler&gt;\r\n&lt;\/xp:button&gt;\r\n&lt;xp:button value=\"Use Datasource\" id=\"button2\"&gt;\r\n\u00a0\u00a0 &lt;xp:eventHandler event=\"onclick\" submit=\"true\"\r\n\u00a0\u00a0\u00a0\u00a0 refreshMode=\"complete\"&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;xp:this.action&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;xp:actionGroup&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;xp:executeScript&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;xp:this.script&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;![CDATA[#{javascript:\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 document1.setValue(\"Feld\", \"ABC\");\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 }]]&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/xp:this.script&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/xp:executeScript&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;xp:saveDocument var=\"document1\" \/&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/xp:actionGroup&gt;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;\/xp:this.action&gt;\r\n\u00a0\u00a0 &lt;\/xp:eventHandler&gt;\r\n&lt;\/xp:button&gt;\r\n&lt;\/xp:view&gt;<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Das ist der dritte Teil der Serie \u201cDomino Datasources On-the-Fly\u201d. Der zweite Teil findet sich hier. Will man eine Wertezuweisung berechnen lassen, muss ein ValueBinding erstellt werden. Damit l\u00e4sst sich dann z.B. der Formname eines DominoDocumentData-Objektes berechnen (zugegebenerma\u00dfen ein kleinwenig &hellip; <a href=\"https:\/\/hasselba.ch\/blog\/?p=457\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,89,9,26,76,74],"tags":[7,31,4,86,5,32,3],"class_list":["post-457","post","type-post","status-publish","format-standard","hentry","category-allgemein","category-java","category-javascript","category-jsf","category-ssjs","category-xpages","tag-domino","tag-java","tag-js","tag-jsf","tag-ssjs","tag-tipp","tag-xpages"],"_links":{"self":[{"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts\/457","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=457"}],"version-history":[{"count":11,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts\/457\/revisions"}],"predecessor-version":[{"id":468,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts\/457\/revisions\/468"}],"wp:attachment":[{"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=457"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=457"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=457"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}