{"id":131,"date":"2011-08-01T23:02:18","date_gmt":"2011-08-01T21:02:18","guid":{"rendered":"http:\/\/hasselba.ch\/blog\/?p=131"},"modified":"2012-04-02T13:52:08","modified_gmt":"2012-04-02T11:52:08","slug":"abfangen-einer-fehlerhaften-documentid","status":"publish","type":"post","link":"https:\/\/hasselba.ch\/blog\/?p=131","title":{"rendered":"Abfangen einer fehlerhaften &#8222;documentId&#8220;"},"content":{"rendered":"<p>\u00d6ffnet man eine XPage, die ein Dokument \u00fcber eine Datasource einbindet, kann man die UNID des Dokumentes \u00fcber den <em>&#8222;documentId&#8220;<\/em>-Parameter angeben.<\/p>\n<p>Problematisch ist allerdings, wenn die UNID falsch ist (z.B.\u00a0wenn das Dokument gel\u00f6scht wurde), denn dies f\u00fchrt zu h\u00e4sslichen 500er-Fehlern auf der XPage bzw. zu dem Fehler <em>&#8222;Could not open the document&#8220;<\/em>:<\/p>\n<p><img decoding=\"async\" src=\"data:image\/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZ0AAADpCAIAAABweX2WAAARm0lEQVR4nO3dL5LcuhbH8V7Ig48NHuI9BA4LNgsKCxp+QbyBgKBb2YDpVFJ3F11TqVRIyLsoJMgPtFvWkY5k+V+3+\/T3UwYzbluSZevXsruTOXQAYMvh2g0AgJWRawCsIdcAWEOuAbCGXANgDbkGwBpyDYA1eq69AsDNItcAWEOuAbCGXANgDbkGwBpyDYA15BoAa8g1ANaQawCsIdcAWEOuAbCGXLu0L++6x4fu8aF7+uvntduS5Br5+O7XtdsCTJbMtX\/++tNf2Q+\/v4hdfr1\/uIGRuZq\/f\/f98Obff9Yob1+5ljg6cg03jVwbc5e5Btw0cm0MuQbcmnVybdj43S9\/g2jf19dXbyxFI8qrtHv\/93ntt3+fghr90ShK+\/Px24Tq1IPyWz7cjvmLf2tWULh\/UI8Pv98X5Jren+9+RS\/14qwsOSOZo4trSRZ4PmT93E07C9P2Ku4l8ZJ+7PJ2e3R37NzauaYs\/u4\/P75RtxnyKKpXmx4Gl3uiqJLqXlPD+6F7+utnNtdKCk9tU5xrBYnzms+19BmZmWvKLr+jd4XJZyEy6VJJt185cfF7WHihZnfHDVg919zGw2bu3Ts3Woa3Yu+CfvdrGHv+e7Vy9+TtFc8g0tUlZhk\/P77R5oZeL0wsfBiNJfehanhlXsrmWu6MLDk6\/93lXOBwFhIzx0RRBT2Q696yXgr6ypUTr8nsjpuwxX3oSXyJux39AvMrlffS19fEaByGWTDRy1SnjMOQPvJLCtcfRF4613JnZFauDQW6A9TmUOHkaPSk+4r2mpNr3jMNJdzPB0Ku3brtci0abN4lpS3yrkRsHN2wqKNx2OXPx2+F1WlTmNdJdaULV4fQNXNNq3rrXJt00id179Jc86qOzhS5duvS38sNpz\/ORXJNPkELQ2dkvkaukWvk2l0rybXkTCrz4OxVGUXKMEiI70MTqad\/lhrcBmaqW34fmil84\/tQrz37zbUJJ91XtNdq96FR2JFrty7z76jE83u3g\/chmvb5UXYU6R8CvJ5Glytt1ucG8XdByqpLfTvhy7vocwM5by0pXOurgiTNjyvl\/aboaf1rPtfk0a2Xa4UnPTTt3PG5AaTsvw\/N3Q6IN9LSUZT73kOUBf1F5s3dXOGZ73mIYTBenahRLtE0M2hGQeHZ+6mZuZb8msKsXEsc3Yq5VngWIuN7zcu1ad\/zINdu0\/i\/e1eG\/dyHPj1ttJ\/mSl5d+uOPvvxhvvb7\/Ztcw\/LVZbfxhlzwql\/LeOFiFPnfiZuba0GZ4vvD03NNP7pVc634LMSye83NNdEV6mbk2q27zf\/Pg3\/9AyCNXANgDbkGwBpyDYA1t5lrAJBGrgGwhlwDYA25BsAacg2ANeQaAGvINQDW6LkGALeLXANgDbkGwBpyDYA15BoAa8g1ANaQawCsIdcAWEOuAbCGXANgDbkGwBpyDYA15BoAa8g1ANZMybVjUx2q5rhZW8qt25L9HNdtod9K0EvXoOZaWx9iVdNe7wxtenEYvvLotxXNO95766V9yM7XglNyxTPE+JyHflsRuXY7pudaM0zm6lZu62Z28VkU+9ZtKjH1KryyT8XL7eu6Eq9EjZjSNnFcUcVKiamLVqk004GJrcMqFvZbUcP6RqU6TU7mlYNP15q8eMLDKTq6ZM8dm8rbpK1PL4SFiPr1gxVr29LOLOulohOhnJf0VSFP352bmmvBBeONAdHLUecG++auYK2K7Pb9C219ED\/PbZu3b7TVaX1bixLHRqirNFmRX2Vb1220yr+qF\/RbYcPSnRatH5mJDJ1W0slTjy7fznM3+mknulSGSVRIdFIKO7Osl4pORHRe0lcFgSYsuA8dfvXH+emF6EQWFrVkvf7z4raJzeIrXpWoNFVRsLnepNF8L1hf2LBkp8kDL7nDGm35yFFnjy53co9NdaiqdL6Is6kVMnpSFvXSxCskfwglJ+LOrJVroXDYXzPXlrTNm\/b7u3qlahdUotJERcpluUX\/lDdsYvsjWqdtlWvpk7vs6h0\/KYt6ada+pWcZm8zXFhS1+XxtUtvkvt6NRnLfXqLS3c3XUkeR6rS4Q8aO\/aLztbCsupYPDPyNxUOAxHvTtPlapgcWXyHJX5mv6VbJtahjj22bv2TlXH14MpZ9U1XeisdzbXrbEsPp2HjP14bV+gWqV1p0dNnnawv7rbBh6U7zizs2lTJbTXVa8SxmytEl2+mGvHy+Jqfh\/oEohcQnpawzS3pp8hWidFDyqat8enif1sm1Lrz3GHsr7sRMvG5G35m98qvw89B8rk1um\/+rf79Z15WfLvGNT1xqUGmmIm9rMSLiJi\/pt8KG5TptqL6qa32aoHZaUa5NPjq1nSK0xOehHnna9IONTkpRZxb20tQrJN4pNRUl1\/h3VLgX3KzdE3IN94FcuyfkGgBryDUA1pBrAKwh1wBYQ64BsIZcA2ANuQbAGnINgDXkGgBryDUA1pBrAKwh1wBYQ64BsIZcA2ANuQbAGnINgDXJXPvxqXt8UJbP3y\/YOgCYbjzXvl6yOQCw2Mxc+\/zUPT50jx\/Omz11PxIru67rXsSM7\/llpJxkdXEJBSWffP0gyi9s6ttPYW8waQX2b1muucXPNbkyCI7TNi4v1F0CzzJivn7o86uo5HyuyXqDbbqXvrTT+r7kl1y3ANiDic\/XovmOT135nJhhnaY86i7C9+5tNBebUXJqvjZe0Xm9m6OF9QLYmaX3oSMrz1kTp89pzXiunXMkvDecWPJ4rslYjNc\/qs0AsD83kGtuxiSeo10q11w\/8EwNuBUb59ry+1DJf9Z24ftQbjyBW7F5rk16uq948V6VEZMvuQ+yc\/vHc23scwO\/K56JOWDHZn4vtzzXum7CtzEU0eMtcT+YLrmLP\/Qcy7X4qFPf8+C2FNgz\/h0VAGvINQDWkGsArCHXAFhDrgGwhlwDYA25BsAacg2ANeQaAGvINQDWkGsArCHXAFhDrgGwhlwDYA25BsAacg2ANeQaAGvItW0cm6pqjtduBXCfts61Y1MdAnV7gerOlfQrtqwz0Y6qOUZHX9CMY1MdLpKISyq6WCOBWS6Ua\/0gkL9tV92QIdfJtfNsLRj\/bT3eFHINWOyyuSZ+bWsxlwnHv\/aSmP9oAeFv4JLFbZuo0TWqqYcXoplfqva+UL817iY0Hv9t7TaVk7lhh2Cdtlm4f3AkUZ8Nh3ZuqV5qvP+xqYJjrZo21aLE9seg6IPfOUPDLj2nhmHXybXwEvZX+3uIvU8BEv8cF3QeenWbnK8pNfrbn8pO1Shqj3NteLamzGu8YAub4xqTnAp5qeGX09Z1G62SM1YRNXpFYsWxqfz8PZefPi5ZTrC9\/2N3bCqv2\/0GMwXESq5yHxrOdfx3bLFDPL3zBooWbOdc6zPJzS1yNWrp6Qbm+eei2l0VfowHW3mBoa7O3+JpmeG9FMzmtALdr2FFQYn+Bx\/HpjpUVZB6mRCKtlfTPNVgYLHLf24QPNH308TLNfF0THsEfxh2jqqL799S+VWaa2W1d10XTU1y87Wg1FSuKZsltirIr1yuheQtuFZIin4DLvttaplAsQvfh6ZeGM+1\/BxJlho\/0olmghNzraz2vtxhq9zzNTk\/Ss7XEpttPl8Li67rfF5nt1fbqXyownwN67harikPrETK5BOnLzrx2MzV5iYJXkwla8zmWrp2+UIcQ4nPQ+VLiQdnhZuNPl9TmxQGSRhWx7Z1bw\/K8zKxr\/90TN9e3JPGuSY\/bwCWuV6u+bcmdV0f5JAX9M9DD8pACHLN7TCkjlJjUa4laxcbtXUUFen2+rdmdV3Fhy9aFG4WTkeDVam5lfdrWFHYXnf7r3y+GezrXkht79\/l6qeZUMN69v3vDYrv\/nYiiDXk8EANm9lhrsWThltBrE1BrmEzO8w1AFiEXANgDbkGwBpyDYA15BoAa8g1ANaQawCsIdcAWEOuAbCGXANgDbkGwBpyDYA15BoAa8g1ANaQawCsIdcAWEOuAbCGXANgDbkGwBpyDYA15BoAa8g1ANaQawCsIdcAWEOuAbCGXANgDbkGwBpyDYA15BoAa24w1166x4fu8aF7frl2SwDsUjLXfnzq4yNYPn+\/YOu6ruu6z0\/d40P3+OH8O7kGIGs8175esjmaMNcAIGtOrn39IGdM37u3D\/qU6rS8\/RSWGUz9XHL1P3j1+mv6Ks7VDfM1WZ0\/j3Ml+1VfPakBbGrmfM1F29doPtW\/9NT9OP3+0ufaaX2fcS96eJ2SLighnK\/JXOvbKTd2SepKPq1h6gfcg4nP11xadd2zfKmPv3gyJde7Odqzt1nqCdpp43yuPQfVZfcNMxeARQuer3l3f6lYUTeOb1HzyZV7Nf4MQa4h14A7tCDX3GO1glxzpakfp5JrAFY0P9fm3YeqX87gPhTAilb43OBZPnrLf27gF\/icmFU9P2TDaMbnBuQacE\/mfC\/XJVR\/U+menX3Q9019zyOcVWm7nAxzw7nf8zgh14B7sIt\/R8XXLwCsiFwDYE1prv3vP\/9lYbmhZdNhg50j11hsLpsOG+wcucZic9l02GDnyDUWm8umwwY7R66x2Fw2HTbYuZm5tmmbgBm4ROGQazCCSxQOuQYjuEThkGswgksUDrkGI7hE4ZBrMIJLFA65BiO4ROGQazCCSxQOuQYjuEThkGswgksUzu3k2rGpDlVzLF5vwIqHZriXzq5\/iWI3LpNrbX3w1e3UZnYb59pOhn3QjDvJtZXaRq7B2T7X2jpIsmNTzbmKybUVS94Vcg1r2zrX8tfssanOczi3UWpsy\/VyBhjVcNq4qbUpYlypt0YrLNfOoQoxCVV2yDUp2um0X3YXrU2hRC8ldg1WZ09EXVeimWOFpXtgtPNLkWtwNs61Y1Ol7zrbehipw88FuSY2UZPzNFhczV5NRZWWtlOul+PXa543frUmyWYHx67voleRKcz7RT+cYHXdZk+EX5ZS7rQeYL6GtV0v15Rho13lSq7JSEjm2vikL1npzHaeGtXW4cQlVXVxs8NfE1UIiV5KNTsosrAP9Z8n9gC5hrXtKtfKrv4lATFjaE0tKvyQ5HzDtXKuaVUsaLbSnEW5NqUHyDWs7XrP1xbN11bMtZXma8P0KJ75ZJtUvk1yQqRK9NIV5mtTClyAXINzzc9DCx70eA9wEk+I\/Kc9oo5EQJRUqhzByCO5Y1PJJon7sLYtnGbmb7G9X\/Uq0mWFz8RKnq8VnIjUzxN7INf55cg1ONf4\/tpwbZ+eJEcfhHmb1436rj5sUdX1xImPXumwVpk6aLt46+L7QPli8e1z0IzsLkoV6W6XvZTodm+1l3XZE5H6eWIPZDu\/FLkG53b+vcHerHT3hLVwicIh1+Yi13aGSxQOuQYjuEThkGswgksUDrkGI7hE4ZBrMIJLFA65BiO4ROGQazCCSxQOuQYjuEThkGswgksUDrkGI7hE4czMNRaWnS+bDhvsHLnGYnPZdNhg58g1FpvLpsMGO0eusdhcNh022DlyjcXmsumwwc6V5tqNO\/0Hify3QsBd2GOuRX\/2w\/9rIPOyaXTf4H+\/Tfw3uABuwfa5Fv19g\/Gtxfbuj4BsmmsztgSwUxfKtdLJTxxrcSl97ASzusR\/1N8X5qfV+VW9NXGundvUNNWcqsOVzACBrV0018YHthoLoqDUH3Bzm8toPDaVzLVkciZrSf3RmclVMxkELuMKuZZPN+VBl\/f34XKJ4\/4OphId57XNaLCk52tKyBZULVcSbMAFXCvX6rrO35CJfKuaY5gJ\/ev+POj8N8WV1MzOuZQts7k2pWr18whyDdjU5XNt2vMlL2ZE4ohs8cIlO187VE0r9stXKPd17Z5WNTM04OIumWsFieY+\/BQ7a0+v4sdWhQ+5Rh6wFczX5lQtYpGPDoBNXSbXpn7NQ79nC\/4quBeYdR1GRzBBFGnlJm\/aHKro+dqUqqOVfCQKbGyP38sFgCXINQDWkGsArCHXAFhDrgGwhlwDYA25BsAacg2ANeQaAGvINQDWkGsArCHXAFhDrgGwhlwDYA25BsCa\/wO\/8V5yLWGyIAAAAABJRU5ErkJggg==\" alt=\"\" \/><\/p>\n<p>Um dieses Problem in den Griff zu bekommen, mu\u00df die Datasource so modifiziert werden, da\u00df der Parameter <em>&#8222;documentId&#8220;<\/em> nicht mehr als Vorgabewert verwendet wird, gleiches gilt f\u00fcr den Parameter &#8222;<em>action&#8220;<\/em>.<\/p>\n<p>Dazu wird in der Datasource die Option <em>&#8222;ignoreRequestParams&#8220;<\/em> auf <em>&#8222;true&#8220;<\/em> gesetzt. Nun m\u00fcssen nur noch die beiden Angaben manuell berechnet werden:<\/p>\n<pre>&lt;xp:dominoDocument var=\"document1\" <strong>ignoreRequestParams=\"true\"<\/strong>&gt;\r\n<strong>&lt;xp:this.documentId&gt;<\/strong>\r\n&lt;![CDATA[#{javascript:var unid = getHTTPQueryParam( \"documentId\" );\r\nvar isOK = false;\r\ntry{\r\n\u00a0\u00a0 doc = database.getDocumentByUNID( unid );\r\n\u00a0\u00a0 if( doc !=null )\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 isOK = true;\r\n}catch(e){}\r\nif( isOK ){\r\n\u00a0\u00a0 \u00a0return unid;\r\n}\r\nreturn \"\";\r\n}]]&gt;<strong>&lt;\/xp:this.documentId&gt; &lt;xp:this.action&gt;<\/strong>\r\n&lt;![CDATA[#{javascript:var unid = getHTTPQueryParam( \"documentId\" );\r\n\u00a0\u00a0 var isOK = false;\r\n\u00a0\u00a0 try{\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 doc = database.getDocumentByUNID( unid );\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 if( doc !=null )\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 isOK = true;\r\n\u00a0\u00a0 }catch(e){}\r\n\r\n\u00a0\u00a0 <strong><span style=\"color: #ff0000;\">if( isOK ){ return \"editDocument\"; }<\/span><\/strong>\r\n      <strong><span style=\"color: #ff0000;\">else{ return \"newDocument\" };<\/span><\/strong>\r\n\r\n}]]&gt;\r\n<strong>&lt;\/xp:this.action&gt;<\/strong>\r\n&lt;\/xp:dominoDocument&gt;<\/pre>\n<p><em>[In Fett: Die beiden berechneten Parameter &#8222;documentId&#8220; und &#8222;action&#8220; &amp; der &#8222;Ignore&#8220;-Parameter \/\/ In Rot: Die jeweilige berechnete Aktion]<\/em><\/p>\n<p>Durch den Code wird erreicht, da\u00df das angegebene Dokument im Edit-Mode ge\u00f6ffnet wird; ist dies nicht m\u00f6glich, wird ein neues Dokument erstellt. Die Fehlermeldung bei \u00d6ffnen wird hierdurch verhindert und die XPage kann weiter verarbeitet werden. F\u00fcr ein erweitertes Errorhandling (um z.B. eine Fehlermeldung auszugeben) k\u00f6nnte eine Variable im ViewScope gesetzt werden, die auf der XPage ausgewertet werden kann.<\/p>\n<p>Hier noch die Funktion zum Auslesen der HTTP-Queryparameter:<\/p>\n<div lang=\"x-western\">\n<pre><strong>function getHTTPQueryParam( pParam ){<\/strong>\r\n\u00a0\u00a0 q = facesContext.getExternalContext()\r\n      .getRequest().getQueryString();\r\n\u00a0\u00a0 if (q.indexOf(pParam+\"=\")&gt;-1) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 v = q.substring(q.indexOf(pParam+\"=\")+pParam.length()+1,\r\n         q.length());\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 v = (v.indexOf(\"&amp;\")&gt;-1?v.substring(0,v.indexOf(\"&amp;\")):v);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 if ((typeof v !== \"undefined\") &amp;&amp; !v.equalsIgnoreCase(\"\")) {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return (v);\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 } else {\r\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 return false;\r\n\u00a0\u00a0\u00a0\u00a0\u00a0 }\r\n\u00a0\u00a0\u00a0 }\r\n<strong>}<\/strong><\/pre>\n<p><em>[Funktion liefert Wert des abgefragten URL-Parameters zur\u00fcck, oder false]<\/em><\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u00d6ffnet man eine XPage, die ein Dokument \u00fcber eine Datasource einbindet, kann man die UNID des Dokumentes \u00fcber den &#8222;documentId&#8220;-Parameter angeben. Problematisch ist allerdings, wenn die UNID falsch ist (z.B.\u00a0wenn das Dokument gel\u00f6scht wurde), denn dies f\u00fchrt zu h\u00e4sslichen 500er-Fehlern &hellip; <a href=\"https:\/\/hasselba.ch\/blog\/?p=131\">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,22,9,76,81,74],"tags":[7,84,11,4,16,5,12,3],"class_list":["post-131","post","type-post","status-publish","format-standard","hentry","category-allgemein","category-errorhandling","category-javascript","category-ssjs","category-web","category-xpages","tag-domino","tag-errorhandling","tag-http","tag-js","tag-server","tag-ssjs","tag-web","tag-xpages"],"_links":{"self":[{"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts\/131","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=131"}],"version-history":[{"count":27,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts\/131\/revisions"}],"predecessor-version":[{"id":158,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=\/wp\/v2\/posts\/131\/revisions\/158"}],"wp:attachment":[{"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=131"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=131"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hasselba.ch\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=131"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}