Congratulations!

[Valid RSS] This is a valid RSS feed.

Recommendations

This feed is valid, but interoperability with the widest range of feed readers could be improved by implementing the following recommendations.

Source: http://quintessens.wordpress.com/feed

  1. <?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
  2. xmlns:content="http://purl.org/rss/1.0/modules/content/"
  3. xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  4. xmlns:dc="http://purl.org/dc/elements/1.1/"
  5. xmlns:atom="http://www.w3.org/2005/Atom"
  6. xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
  7. xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  8. xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
  9. >
  10.  
  11. <channel>
  12. <title>Kwintessential Notes</title>
  13. <atom:link href="https://quintessens.wordpress.com/feed/" rel="self" type="application/rss+xml" />
  14. <link>https://quintessens.wordpress.com</link>
  15. <description>My contribution to the Notes &#38; Domino community</description>
  16. <lastBuildDate>Thu, 04 Jan 2024 13:31:47 +0000</lastBuildDate>
  17. <language>en</language>
  18. <sy:updatePeriod>
  19. hourly </sy:updatePeriod>
  20. <sy:updateFrequency>
  21. 1 </sy:updateFrequency>
  22. <generator>http://wordpress.com/</generator>
  23. <cloud domain='quintessens.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
  24. <image>
  25. <url>https://secure.gravatar.com/blavatar/c38ca0c08925d76e9d0e9c92c4337c31120c230f49373189eb8fdd5f6ed8e921?s=96&#038;d=https%3A%2F%2Fs0.wp.com%2Fi%2Fbuttonw-com.png</url>
  26. <title>Kwintessential Notes</title>
  27. <link>https://quintessens.wordpress.com</link>
  28. </image>
  29. <atom:link rel="search" type="application/opensearchdescription+xml" href="https://quintessens.wordpress.com/osd.xml" title="Kwintessential Notes" />
  30. <atom:link rel='hub' href='https://quintessens.wordpress.com/?pushpress=hub'/>
  31. <item>
  32. <title>Synchronization between ODP and NSF goes rogue</title>
  33. <link>https://quintessens.wordpress.com/2024/01/04/synchronization-between-odp-and-nsf-goes-rogue/</link>
  34. <comments>https://quintessens.wordpress.com/2024/01/04/synchronization-between-odp-and-nsf-goes-rogue/#comments</comments>
  35. <dc:creator><![CDATA[Patrick Kwinten]]></dc:creator>
  36. <pubDate>Thu, 04 Jan 2024 11:02:35 +0000</pubDate>
  37. <category><![CDATA[DDE]]></category>
  38. <category><![CDATA[Java]]></category>
  39. <category><![CDATA[source control]]></category>
  40. <category><![CDATA[eclipse]]></category>
  41. <category><![CDATA[scanez]]></category>
  42. <guid isPermaLink="false">http://quintessens.wordpress.com/?p=3056</guid>
  43.  
  44. <description><![CDATA[We develop in a team an XPages application and we experienced that it takes longer time to build a project and to refresh the design of the templates on ACC and PROD environment. We noticed that a lot of files&#8230;  <p class="more-link"><a href="https://quintessens.wordpress.com/2024/01/04/synchronization-between-odp-and-nsf-goes-rogue/">Continue reading <span class="meta-nav">&#8594;</span></a></p>]]></description>
  45. <content:encoded><![CDATA[
  46. <p>We develop in a team an XPages application and we experienced that it takes longer time to build a project and to refresh the design of the templates on ACC and PROD environment. We noticed that a lot of files are being replicated so initially I thought it were the files for web-plugins like Datatables was causing troubles. But after I moved these files to a common shared resources NSF this XPages application still had a lot of unclear files in it.</p>
  47.  
  48.  
  49.  
  50. <p>When I analysed the design of the NSF with ScanEZ I saw that it contained almost a 1000 &#8220;Eclipse Files&#8221;. An analyse of another less frequently developed XPages application gave a similar indication, but here the number of Eclipse Files are a lot less, but still not reasonable:</p>
  51.  
  52.  
  53.  
  54. <figure class="wp-block-image size-large"><a href="https://quintessens.files.wordpress.com/2024/01/java-versions-okay.jpg"><img width="475" height="577" data-attachment-id="3060" data-permalink="https://quintessens.wordpress.com/2024/01/04/synchronization-between-odp-and-nsf-goes-rogue/java-versions-okay/" data-orig-file="https://quintessens.files.wordpress.com/2024/01/java-versions-okay.jpg" data-orig-size="475,577" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="java-versions-okay" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2024/01/java-versions-okay.jpg?w=247" data-large-file="https://quintessens.files.wordpress.com/2024/01/java-versions-okay.jpg?w=475" src="https://quintessens.files.wordpress.com/2024/01/java-versions-okay.jpg?w=475" alt="" class="wp-image-3060" srcset="https://quintessens.files.wordpress.com/2024/01/java-versions-okay.jpg 475w, https://quintessens.files.wordpress.com/2024/01/java-versions-okay.jpg?w=123 123w, https://quintessens.files.wordpress.com/2024/01/java-versions-okay.jpg?w=247 247w" sizes="(max-width: 475px) 100vw, 475px" /></a></figure>
  55.  
  56.  
  57.  
  58. <p>The files that appear first in the list are &#8220;expected&#8221; (although for not all clear is clear what their purpose is) but then the list goes on as followed:</p>
  59.  
  60.  
  61.  
  62. <figure class="wp-block-image size-large"><a href="https://quintessens.files.wordpress.com/2024/01/java-versions.jpg"><img width="440" height="340" data-attachment-id="3062" data-permalink="https://quintessens.wordpress.com/2024/01/04/synchronization-between-odp-and-nsf-goes-rogue/java-versions/" data-orig-file="https://quintessens.files.wordpress.com/2024/01/java-versions.jpg" data-orig-size="440,340" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="java-versions" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2024/01/java-versions.jpg?w=300" data-large-file="https://quintessens.files.wordpress.com/2024/01/java-versions.jpg?w=440" src="https://quintessens.files.wordpress.com/2024/01/java-versions.jpg?w=440" alt="" class="wp-image-3062" srcset="https://quintessens.files.wordpress.com/2024/01/java-versions.jpg 440w, https://quintessens.files.wordpress.com/2024/01/java-versions.jpg?w=150 150w, https://quintessens.files.wordpress.com/2024/01/java-versions.jpg?w=300 300w" sizes="(max-width: 440px) 100vw, 440px" /></a></figure>
  63.  
  64.  
  65.  
  66. <p>For some of the classes I have more than 30 versions of them!</p>
  67.  
  68.  
  69.  
  70. <p>I have stored these classes via the Package Explorer Eclipse view under WebContent\WEB-INF\src folder and added it to the build path. I added them here because it felt more alike to store them here as in Java projects outside of DDE. This seems to work fine from the start and still does except that as side-effect that you seem to get a lot of versions. </p>
  71.  
  72.  
  73.  
  74. <p>So what is the root cause of this misery (when building a project goes slow and it replicates undesired files across NSF&#8217;s) I don&#8217;t know. We use GitHub and I don&#8217;t notice the files in the source code. So they must appear when DDE is synchronising the ODP with the NSF.</p>
  75.  
  76.  
  77.  
  78. <figure class="wp-block-image size-large"><a href="https://quintessens.files.wordpress.com/2024/01/odp.jpg"><img width="1024" height="228" data-attachment-id="3064" data-permalink="https://quintessens.wordpress.com/2024/01/04/synchronization-between-odp-and-nsf-goes-rogue/odp/" data-orig-file="https://quintessens.files.wordpress.com/2024/01/odp.jpg" data-orig-size="1131,252" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="odp" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2024/01/odp.jpg?w=300" data-large-file="https://quintessens.files.wordpress.com/2024/01/odp.jpg?w=636" src="https://quintessens.files.wordpress.com/2024/01/odp.jpg?w=1024" alt="" class="wp-image-3064" srcset="https://quintessens.files.wordpress.com/2024/01/odp.jpg?w=1024 1024w, https://quintessens.files.wordpress.com/2024/01/odp.jpg?w=150 150w, https://quintessens.files.wordpress.com/2024/01/odp.jpg?w=300 300w, https://quintessens.files.wordpress.com/2024/01/odp.jpg?w=768 768w, https://quintessens.files.wordpress.com/2024/01/odp.jpg 1131w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>
  79.  
  80.  
  81.  
  82. <p>So the files only reside in the NSF.</p>
  83.  
  84.  
  85.  
  86. <p>I have no clue how I should avoid the creation of these &#8220;version&#8221; files except storing the Java classes under the Code\Java section in DDE which has some disadvantages like collapsible packages (unnecessary scrolling) and new methods will be noticed in DDE AFTER I have closed and re-opened the project (SUCK).</p>
  87.  
  88.  
  89.  
  90. <p>Luckily via this approach the version files are being removed when you update the NSF via the &#8220;replace design&#8221; method. So in restricted-access environments like ACC and PROD this can save you some pain.</p>
  91.  
  92.  
  93.  
  94. <p>So if you have a suggestion and want to save my day, please write down what alternative way works for you. Happy development <img src="https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
  95.  
  96.  
  97.  
  98. <p><strong>Edit</strong>: I add here my <em>painful experience</em> with HCL regarding the issue above. I reported a case at HCL and their first response was that they do not give support on observations made from third-party tools (ScanEz). But when I replied that I make the same observation with HCL&#8217;s <a href="https://support.hcltechsw.com/csm?id=kb_article&amp;sysparm_article=KB0036425">NotesPeek</a>  they replied that I should not place custom Java classes in custom folders in the Package Explorer view and add them as build path but as Code\Java design elements. Then I referred to an <a href="https://ds_infolib.hcltechsw.com/ldd/ddwiki.nsf/dx/Creating_a_Java_Control_in_an_NSF">online WIKI-article</a> of them where it is demonstrated how and where to create custom Java classes. As reply I got that this was a method for 8.5 and is no longer supported for newer releases. One might wonder what they have changed here after 8.5 but I guess not much.</p>
  99.  
  100.  
  101.  
  102. <figure class="wp-block-image size-large"><img src="https://ds_infolib.hcltechsw.com/ldd/ddwiki.nsf/1B4F54D1744FB7BE85257714003B849A/$file/04_2.jpg" alt="" /></figure>
  103. ]]></content:encoded>
  104. <wfw:commentRss>https://quintessens.wordpress.com/2024/01/04/synchronization-between-odp-and-nsf-goes-rogue/feed/</wfw:commentRss>
  105. <slash:comments>1</slash:comments>
  106. <media:content url="https://1.gravatar.com/avatar/7e6954ce3d50c2f8a30613f9c097ed76e101ebf75e6f790c056476352d53f969?s=96&#38;d=identicon&#38;r=G" medium="image">
  107. <media:title type="html">quintessens</media:title>
  108. </media:content>
  109.  
  110. <media:content url="https://quintessens.files.wordpress.com/2024/01/java-versions-okay.jpg?w=475" medium="image" />
  111.  
  112. <media:content url="https://quintessens.files.wordpress.com/2024/01/java-versions.jpg?w=440" medium="image" />
  113.  
  114. <media:content url="https://quintessens.files.wordpress.com/2024/01/odp.jpg?w=1024" medium="image" />
  115.  
  116. <media:content url="https://ds_infolib.hcltechsw.com/ldd/ddwiki.nsf/1B4F54D1744FB7BE85257714003B849A/$file/04_2.jpg" medium="image" />
  117. </item>
  118. <item>
  119. <title>Seasonal gift</title>
  120. <link>https://quintessens.wordpress.com/2023/12/18/seasonal-gift/</link>
  121. <dc:creator><![CDATA[Patrick Kwinten]]></dc:creator>
  122. <pubDate>Mon, 18 Dec 2023 20:47:41 +0000</pubDate>
  123. <category><![CDATA[Applications]]></category>
  124. <category><![CDATA[OpenNTF]]></category>
  125. <category><![CDATA[document-management]]></category>
  126. <guid isPermaLink="false">http://quintessens.wordpress.com/?p=3047</guid>
  127.  
  128. <description><![CDATA[Today I posted &#8220;Team Documents&#8221; as a seasonal gift as a project on OpenNTF. What is it? Well it is a small document management application for the Notes client. What makes it so unique? First, it is wrapped in an&#8230;  <p class="more-link"><a href="https://quintessens.wordpress.com/2023/12/18/seasonal-gift/">Continue reading <span class="meta-nav">&#8594;</span></a></p>]]></description>
  129. <content:encoded><![CDATA[
  130. <p>Today I posted &#8220;Team Documents&#8221; as a seasonal gift as <a href="https://openntf.org/main.nsf/project.xsp?r=project/Team%20Documents">a project on OpenNTF</a>. What is it? Well it is a small document management application for the Notes client. What makes it so unique? First, it is wrapped in an OpenNTF styled &#8220;gift-paper&#8221; as you can see in the next image:</p>
  131.  
  132.  
  133.  
  134. <figure class="wp-block-image size-large"><a href="https://quintessens.files.wordpress.com/2023/12/td-startpage.jpg"><img loading="lazy" width="1024" height="487" data-attachment-id="3050" data-permalink="https://quintessens.wordpress.com/2023/12/18/seasonal-gift/td-startpage/" data-orig-file="https://quintessens.files.wordpress.com/2023/12/td-startpage.jpg" data-orig-size="1802,858" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="td-startpage" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2023/12/td-startpage.jpg?w=300" data-large-file="https://quintessens.files.wordpress.com/2023/12/td-startpage.jpg?w=636" src="https://quintessens.files.wordpress.com/2023/12/td-startpage.jpg?w=1024" alt="" class="wp-image-3050" srcset="https://quintessens.files.wordpress.com/2023/12/td-startpage.jpg?w=1024 1024w, https://quintessens.files.wordpress.com/2023/12/td-startpage.jpg?w=150 150w, https://quintessens.files.wordpress.com/2023/12/td-startpage.jpg?w=300 300w, https://quintessens.files.wordpress.com/2023/12/td-startpage.jpg?w=768 768w, https://quintessens.files.wordpress.com/2023/12/td-startpage.jpg 1802w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>
  135.  
  136.  
  137.  
  138. <p>Second, it has features that makes Notes once the most popular document management platform:</p>
  139.  
  140.  
  141.  
  142. <ul>
  143. <li>Authors and Readers access management</li>
  144.  
  145.  
  146.  
  147. <li>Review options</li>
  148.  
  149.  
  150.  
  151. <li>Revision (versioning)</li>
  152.  
  153.  
  154.  
  155. <li>Expire settings</li>
  156.  
  157.  
  158.  
  159. <li>(locked) categorizing</li>
  160.  
  161.  
  162.  
  163. <li>Usage of templates</li>
  164. </ul>
  165.  
  166.  
  167.  
  168. <figure class="wp-block-image size-large"><a href="https://quintessens.files.wordpress.com/2023/12/td-preferences.jpg"><img loading="lazy" width="1024" height="485" data-attachment-id="3052" data-permalink="https://quintessens.wordpress.com/2023/12/18/seasonal-gift/td-preferences/" data-orig-file="https://quintessens.files.wordpress.com/2023/12/td-preferences.jpg" data-orig-size="1807,857" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="td-preferences" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2023/12/td-preferences.jpg?w=300" data-large-file="https://quintessens.files.wordpress.com/2023/12/td-preferences.jpg?w=636" src="https://quintessens.files.wordpress.com/2023/12/td-preferences.jpg?w=1024" alt="" class="wp-image-3052" srcset="https://quintessens.files.wordpress.com/2023/12/td-preferences.jpg?w=1024 1024w, https://quintessens.files.wordpress.com/2023/12/td-preferences.jpg?w=150 150w, https://quintessens.files.wordpress.com/2023/12/td-preferences.jpg?w=300 300w, https://quintessens.files.wordpress.com/2023/12/td-preferences.jpg?w=768 768w, https://quintessens.files.wordpress.com/2023/12/td-preferences.jpg 1807w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>
  169.  
  170.  
  171.  
  172. <p>The application has also a nice start-page which gives a short summary of the latest activities of users.</p>
  173.  
  174.  
  175.  
  176. <p>I would say download it and test it out. As with Notes, it is easy to adapt to your requirements. Ho!Ho!Ho!</p>
  177.  
  178.  
  179.  
  180. <figure class="wp-block-image size-large"><a href="https://quintessens.files.wordpress.com/2023/12/openntf-merry-christmas.jpg"><img loading="lazy" width="672" height="616" data-attachment-id="3054" data-permalink="https://quintessens.wordpress.com/2023/12/18/seasonal-gift/openntf-merry-christmas/" data-orig-file="https://quintessens.files.wordpress.com/2023/12/openntf-merry-christmas.jpg" data-orig-size="672,616" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="openntf-merry-christmas" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2023/12/openntf-merry-christmas.jpg?w=300" data-large-file="https://quintessens.files.wordpress.com/2023/12/openntf-merry-christmas.jpg?w=636" src="https://quintessens.files.wordpress.com/2023/12/openntf-merry-christmas.jpg?w=672" alt="" class="wp-image-3054" srcset="https://quintessens.files.wordpress.com/2023/12/openntf-merry-christmas.jpg 672w, https://quintessens.files.wordpress.com/2023/12/openntf-merry-christmas.jpg?w=150 150w, https://quintessens.files.wordpress.com/2023/12/openntf-merry-christmas.jpg?w=300 300w" sizes="(max-width: 672px) 100vw, 672px" /></a></figure>
  181.  
  182.  
  183.  
  184. <p> </p>
  185. ]]></content:encoded>
  186. <media:content url="https://1.gravatar.com/avatar/7e6954ce3d50c2f8a30613f9c097ed76e101ebf75e6f790c056476352d53f969?s=96&#38;d=identicon&#38;r=G" medium="image">
  187. <media:title type="html">quintessens</media:title>
  188. </media:content>
  189.  
  190. <media:content url="https://quintessens.files.wordpress.com/2023/12/td-startpage.jpg?w=1024" medium="image" />
  191.  
  192. <media:content url="https://quintessens.files.wordpress.com/2023/12/td-preferences.jpg?w=1024" medium="image" />
  193.  
  194. <media:content url="https://quintessens.files.wordpress.com/2023/12/openntf-merry-christmas.jpg?w=672" medium="image" />
  195. </item>
  196. <item>
  197. <title>Using OpenLog for logging/ debugging XPages</title>
  198. <link>https://quintessens.wordpress.com/2023/10/02/using-openlog-for-logging-debugging-xpages/</link>
  199. <comments>https://quintessens.wordpress.com/2023/10/02/using-openlog-for-logging-debugging-xpages/#respond</comments>
  200. <dc:creator><![CDATA[Patrick Kwinten]]></dc:creator>
  201. <pubDate>Mon, 02 Oct 2023 15:01:36 +0000</pubDate>
  202. <category><![CDATA[XPages]]></category>
  203. <category><![CDATA[OpenLog]]></category>
  204. <category><![CDATA[SSJS]]></category>
  205. <guid isPermaLink="false">http://quintessens.wordpress.com/?p=3036</guid>
  206.  
  207. <description><![CDATA[Today I opened a database where a developer insists on writing almost all code in SSJS. A bit odd because OpenNTF Domino API is enabled and used in this particular application. I guess JAVA is still frightening. But because of&#8230;  <p class="more-link"><a href="https://quintessens.wordpress.com/2023/10/02/using-openlog-for-logging-debugging-xpages/">Continue reading <span class="meta-nav">&#8594;</span></a></p>]]></description>
  208. <content:encoded><![CDATA[
  209. <p>Today I opened a database where a developer insists on writing almost all code in SSJS. A bit odd because  OpenNTF Domino API is enabled and used in this particular application. I guess JAVA is still frightening. But because of SSJS you get unexpected behaviour which are difficult to catch in OpenLog. Because <a href="https://www.openntf.org/main.nsf/project.xsp?r=project/XPages%20OpenLog%20Logger/releases/CDB049EA0567BBC986257F06008253C5">this</a> implementation requires a <a href="https://stackoverflow.com/questions/53766133/xpages-how-do-i-find-the-id-of-a-component-on-my-page">component ID</a>, which is hard to get if your code resides in script libraries, I thought it is time to write a simple helper class in Java so at least &#8220;some&#8221; for of exceptions can be captured. But then I stumbled upon <a href="https://linqed.eu/2010/08/11/using-openlog-for-logging-debugging-xpages/">this post</a> where is mentioned that there is a SSJS helper script library in TaskJam which allows you to log to OpenLog without the component ID. </p>
  210.  
  211.  
  212.  
  213. <p>So I added the TaskJam script library, added it as resource and moved the application code in try&#8230;catch blocks. In <a href="https://linqed.eu/2010/08/11/using-openlog-for-logging-debugging-xpages/">the post</a> are some suggestions to adapt the code in the library. Here are mine:</p>
  214.  
  215.  
  216.  
  217. <ul>
  218. <li>Instead of view.getPageName() I used view.getRequestUrl() to get the full page name including parameters.</li>
  219.  
  220.  
  221.  
  222. <li>for the logDbPath variable I re-used the same OpenLog reference in the XSP properties file (added as a resource bundle using path (&#8220;/WEB-INF/xsp.properties&#8221;) and call it by the variable name you provided e.g. var logDbPath = xspProp[&#8220;xsp.openlog.filepath&#8221;]</li>
  223. </ul>
  224.  
  225.  
  226.  
  227. <p>After writing some bad code I noticed the error registered in OpenLog. I am curious what errors will come in from Production for this application&#8230;</p>
  228.  
  229.  
  230.  
  231. <p>Happy development <img src="https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
  232. ]]></content:encoded>
  233. <wfw:commentRss>https://quintessens.wordpress.com/2023/10/02/using-openlog-for-logging-debugging-xpages/feed/</wfw:commentRss>
  234. <slash:comments>0</slash:comments>
  235. <media:content url="https://1.gravatar.com/avatar/7e6954ce3d50c2f8a30613f9c097ed76e101ebf75e6f790c056476352d53f969?s=96&#38;d=identicon&#38;r=G" medium="image">
  236. <media:title type="html">quintessens</media:title>
  237. </media:content>
  238. </item>
  239. <item>
  240. <title>Making OpenLog entries a bit more lively</title>
  241. <link>https://quintessens.wordpress.com/2022/09/28/making-openlog-entries-a-bit-more-lively/</link>
  242. <comments>https://quintessens.wordpress.com/2022/09/28/making-openlog-entries-a-bit-more-lively/#respond</comments>
  243. <dc:creator><![CDATA[Patrick Kwinten]]></dc:creator>
  244. <pubDate>Wed, 28 Sep 2022 09:35:53 +0000</pubDate>
  245. <category><![CDATA[emoji]]></category>
  246. <category><![CDATA[Java]]></category>
  247. <category><![CDATA[OpenLog]]></category>
  248. <guid isPermaLink="false">http://quintessens.wordpress.com/?p=3022</guid>
  249.  
  250. <description><![CDATA[I assume you are using the OpenLog project on OpenNTF in most of your projects like I do. And you twist with the SEVERITY options to distinguish the openlog view entries as much as possible. If you feel limited to&#8230;  <p class="more-link"><a href="https://quintessens.wordpress.com/2022/09/28/making-openlog-entries-a-bit-more-lively/">Continue reading <span class="meta-nav">&#8594;</span></a></p>]]></description>
  251. <content:encoded><![CDATA[
  252. <p>I assume you are using the <a href="https://www.openntf.org/main.nsf/project.xsp?r=project/OpenLog">OpenLog </a>project on OpenNTF in most of your projects like I do. And you twist with the SEVERITY options to distinguish the openlog view entries as much as possible. If you feel limited to use one of the three options to get a red + or ++ sign in a column perhaps the <a href="https://github.com/vdurmont/emoji-java">emoji-java class</a> is something for you?</p>
  253.  
  254.  
  255.  
  256. <p>Just look at all the <a href="https://github.com/vdurmont/emoji-java/blob/master/EMOJIS.md">available emoji&#8217;s</a> and imagine how they could lively up OpenLog!</p>
  257.  
  258.  
  259.  
  260. <p>So what should you do to enable this? <a href="https://jar-download.com/artifacts/com.vdurmont/emoji-java/5.1.1/source-code">Download the emoji library</a> and include them in your code, e.g. an Java agent as an archive:</p>
  261.  
  262.  
  263.  
  264. <figure class="wp-block-image size-large"><a href="https://quintessens.files.wordpress.com/2022/09/image.png"><img loading="lazy" width="285" height="190" data-attachment-id="3026" data-permalink="https://quintessens.wordpress.com/2022/09/28/making-openlog-entries-a-bit-more-lively/image-7/" data-orig-file="https://quintessens.files.wordpress.com/2022/09/image.png" data-orig-size="285,190" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2022/09/image.png?w=285" data-large-file="https://quintessens.files.wordpress.com/2022/09/image.png?w=285" src="https://quintessens.files.wordpress.com/2022/09/image.png?w=285" alt="" class="wp-image-3026" srcset="https://quintessens.files.wordpress.com/2022/09/image.png 285w, https://quintessens.files.wordpress.com/2022/09/image.png?w=150 150w" sizes="(max-width: 285px) 100vw, 285px" /></a></figure>
  265.  
  266.  
  267.  
  268. <p>Then in your code start using them! For example:</p>
  269.  
  270.  
  271.  
  272. <figure class="wp-block-image size-large"><a href="https://quintessens.files.wordpress.com/2022/09/image-1.png"><img loading="lazy" width="808" height="138" data-attachment-id="3028" data-permalink="https://quintessens.wordpress.com/2022/09/28/making-openlog-entries-a-bit-more-lively/image-1-3/" data-orig-file="https://quintessens.files.wordpress.com/2022/09/image-1.png" data-orig-size="808,138" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-1" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2022/09/image-1.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2022/09/image-1.png?w=636" src="https://quintessens.files.wordpress.com/2022/09/image-1.png?w=808" alt="" class="wp-image-3028" srcset="https://quintessens.files.wordpress.com/2022/09/image-1.png 808w, https://quintessens.files.wordpress.com/2022/09/image-1.png?w=150 150w, https://quintessens.files.wordpress.com/2022/09/image-1.png?w=300 300w, https://quintessens.files.wordpress.com/2022/09/image-1.png?w=768 768w" sizes="(max-width: 808px) 100vw, 808px" /></a><figcaption class="wp-element-caption">will result in something marvelous as:</figcaption></figure>
  273.  
  274.  
  275.  
  276. <figure class="wp-block-image size-large"><a href="https://quintessens.files.wordpress.com/2022/09/image-2.png"><img loading="lazy" width="806" height="76" data-attachment-id="3030" data-permalink="https://quintessens.wordpress.com/2022/09/28/making-openlog-entries-a-bit-more-lively/image-2-3/" data-orig-file="https://quintessens.files.wordpress.com/2022/09/image-2.png" data-orig-size="806,76" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-2" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2022/09/image-2.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2022/09/image-2.png?w=636" src="https://quintessens.files.wordpress.com/2022/09/image-2.png?w=806" alt="" class="wp-image-3030" srcset="https://quintessens.files.wordpress.com/2022/09/image-2.png 806w, https://quintessens.files.wordpress.com/2022/09/image-2.png?w=150 150w, https://quintessens.files.wordpress.com/2022/09/image-2.png?w=300 300w, https://quintessens.files.wordpress.com/2022/09/image-2.png?w=768 768w" sizes="(max-width: 806px) 100vw, 806px" /></a></figure>
  277.  
  278.  
  279.  
  280. <p>So don&#8217;t complain next time that reading the logs is such a boring task!</p>
  281.  
  282.  
  283.  
  284. <p>Happy development <img src="https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
  285.  
  286.  
  287.  
  288. <p></p>
  289.  
  290.  
  291.  
  292. <p></p>
  293. ]]></content:encoded>
  294. <wfw:commentRss>https://quintessens.wordpress.com/2022/09/28/making-openlog-entries-a-bit-more-lively/feed/</wfw:commentRss>
  295. <slash:comments>0</slash:comments>
  296. <media:content url="https://1.gravatar.com/avatar/7e6954ce3d50c2f8a30613f9c097ed76e101ebf75e6f790c056476352d53f969?s=96&#38;d=identicon&#38;r=G" medium="image">
  297. <media:title type="html">quintessens</media:title>
  298. </media:content>
  299.  
  300. <media:content url="https://quintessens.files.wordpress.com/2022/09/image.png?w=285" medium="image" />
  301.  
  302. <media:content url="https://quintessens.files.wordpress.com/2022/09/image-1.png?w=808" medium="image" />
  303.  
  304. <media:content url="https://quintessens.files.wordpress.com/2022/09/image-2.png?w=806" medium="image" />
  305. </item>
  306. <item>
  307. <title>XPages hack &#8211; visualizing checkboxes that fail validation</title>
  308. <link>https://quintessens.wordpress.com/2022/05/06/xpages-hack-visualizing-checkboxes-that-fail-validation/</link>
  309. <comments>https://quintessens.wordpress.com/2022/05/06/xpages-hack-visualizing-checkboxes-that-fail-validation/#respond</comments>
  310. <dc:creator><![CDATA[Patrick Kwinten]]></dc:creator>
  311. <pubDate>Fri, 06 May 2022 13:13:34 +0000</pubDate>
  312. <category><![CDATA[XPages]]></category>
  313. <category><![CDATA[css]]></category>
  314. <category><![CDATA[jquery]]></category>
  315. <category><![CDATA[usability]]></category>
  316. <category><![CDATA[validation]]></category>
  317. <guid isPermaLink="false">http://quintessens.wordpress.com/?p=3009</guid>
  318.  
  319. <description><![CDATA[In an application I have added some CSS to highlight fields that fail validation. The css looks as followed: In the following example I have captured a checkbox control inside a table data cell of 1% width: To apply a&#8230;  <p class="more-link"><a href="https://quintessens.wordpress.com/2022/05/06/xpages-hack-visualizing-checkboxes-that-fail-validation/">Continue reading <span class="meta-nav">&#8594;</span></a></p>]]></description>
  320. <content:encoded><![CDATA[
  321. <p>In an application I have added some CSS to highlight fields that fail validation. The css looks as followed:</p>
  322.  
  323.  
  324.  
  325. <figure class="wp-block-image size-large"><a href="https://quintessens.files.wordpress.com/2022/05/image.png"><img loading="lazy" width="617" height="139" data-attachment-id="3013" data-permalink="https://quintessens.wordpress.com/2022/05/06/xpages-hack-visualizing-checkboxes-that-fail-validation/image-6/" data-orig-file="https://quintessens.files.wordpress.com/2022/05/image.png" data-orig-size="617,139" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2022/05/image.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2022/05/image.png?w=617" src="https://quintessens.files.wordpress.com/2022/05/image.png?w=617" alt="" class="wp-image-3013" srcset="https://quintessens.files.wordpress.com/2022/05/image.png 617w, https://quintessens.files.wordpress.com/2022/05/image.png?w=150 150w, https://quintessens.files.wordpress.com/2022/05/image.png?w=300 300w" sizes="(max-width: 617px) 100vw, 617px" /></a><figcaption>Basically I an looking for the aria-invalid=true attribute on input elements. Works great but not on all input elements. For example re-styling of checkboxes <a href="https://www.javatpoint.com/css-checkbox-style#:~:text=The%20checkbox%20is%20an%20HTML,look%20similar%20on%20every%20website.">requires some work</a>. But what if you would re-style the element that contains the checkbox?</figcaption></figure>
  326.  
  327.  
  328.  
  329. <p>In the following example I have captured a checkbox control inside a table data cell of 1% width:</p>
  330.  
  331.  
  332.  
  333. <figure class="wp-block-image size-large"><a href="https://quintessens.files.wordpress.com/2022/05/image-1.png"><img loading="lazy" width="855" height="337" data-attachment-id="3015" data-permalink="https://quintessens.wordpress.com/2022/05/06/xpages-hack-visualizing-checkboxes-that-fail-validation/image-1-2/" data-orig-file="https://quintessens.files.wordpress.com/2022/05/image-1.png" data-orig-size="855,337" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-1" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2022/05/image-1.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2022/05/image-1.png?w=636" src="https://quintessens.files.wordpress.com/2022/05/image-1.png?w=855" alt="" class="wp-image-3015" srcset="https://quintessens.files.wordpress.com/2022/05/image-1.png 855w, https://quintessens.files.wordpress.com/2022/05/image-1.png?w=150 150w, https://quintessens.files.wordpress.com/2022/05/image-1.png?w=300 300w, https://quintessens.files.wordpress.com/2022/05/image-1.png?w=768 768w" sizes="(max-width: 855px) 100vw, 855px" /></a><figcaption>For the checkbox control I have defined a custom validator that gets only triggered when a certain element send the xpage to the server (an button control with id btnSendToCommittee)). When the validation fails the checkbox also gets the aria-invalid=true attribute.</figcaption></figure>
  334.  
  335.  
  336.  
  337. <p>To apply a visual indication if a certain checkbox fails I have setup a simple JS function:</p>
  338.  
  339.  
  340.  
  341. <figure class="wp-block-image size-large"><a href="https://quintessens.files.wordpress.com/2022/05/image-2.png"><img loading="lazy" width="684" height="168" data-attachment-id="3017" data-permalink="https://quintessens.wordpress.com/2022/05/06/xpages-hack-visualizing-checkboxes-that-fail-validation/image-2-2/" data-orig-file="https://quintessens.files.wordpress.com/2022/05/image-2.png" data-orig-size="684,168" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-2" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2022/05/image-2.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2022/05/image-2.png?w=636" src="https://quintessens.files.wordpress.com/2022/05/image-2.png?w=684" alt="" class="wp-image-3017" srcset="https://quintessens.files.wordpress.com/2022/05/image-2.png 684w, https://quintessens.files.wordpress.com/2022/05/image-2.png?w=150 150w, https://quintessens.files.wordpress.com/2022/05/image-2.png?w=300 300w" sizes="(max-width: 684px) 100vw, 684px" /></a><figcaption>This function scans the page for inputs with the aria-invalid=true attribute and for all matches checks if the found item is a checkbox. If so, the parent, containing element (the table data cell) will be applied some styling. </figcaption></figure>
  342.  
  343.  
  344.  
  345. <p>Besides a listing in the xp:messages control I also have a visual indicator for the checkbox on the location of the xpage:</p>
  346.  
  347.  
  348.  
  349. <figure class="wp-block-image size-large"><a href="https://quintessens.files.wordpress.com/2022/05/image-3.png"><img loading="lazy" width="940" height="124" data-attachment-id="3019" data-permalink="https://quintessens.wordpress.com/2022/05/06/xpages-hack-visualizing-checkboxes-that-fail-validation/image-3-2/" data-orig-file="https://quintessens.files.wordpress.com/2022/05/image-3.png" data-orig-size="940,124" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-3" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2022/05/image-3.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2022/05/image-3.png?w=636" src="https://quintessens.files.wordpress.com/2022/05/image-3.png?w=940" alt="" class="wp-image-3019" srcset="https://quintessens.files.wordpress.com/2022/05/image-3.png 940w, https://quintessens.files.wordpress.com/2022/05/image-3.png?w=150 150w, https://quintessens.files.wordpress.com/2022/05/image-3.png?w=300 300w, https://quintessens.files.wordpress.com/2022/05/image-3.png?w=768 768w" sizes="(max-width: 940px) 100vw, 940px" /></a><figcaption>I have not managed to write a single-line css selector therefor I still loop through the found inputs that match the aria-invalid=true attribute. Here your assistance comes in&#8230; <img src="https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f609.png" alt="😉" class="wp-smiley" style="height: 1em; max-height: 1em;" /></figcaption></figure>
  350.  
  351.  
  352.  
  353. <p>Happy coding!</p>
  354. ]]></content:encoded>
  355. <wfw:commentRss>https://quintessens.wordpress.com/2022/05/06/xpages-hack-visualizing-checkboxes-that-fail-validation/feed/</wfw:commentRss>
  356. <slash:comments>0</slash:comments>
  357. <media:content url="https://1.gravatar.com/avatar/7e6954ce3d50c2f8a30613f9c097ed76e101ebf75e6f790c056476352d53f969?s=96&#38;d=identicon&#38;r=G" medium="image">
  358. <media:title type="html">quintessens</media:title>
  359. </media:content>
  360.  
  361. <media:content url="https://quintessens.files.wordpress.com/2022/05/image.png?w=617" medium="image" />
  362.  
  363. <media:content url="https://quintessens.files.wordpress.com/2022/05/image-1.png?w=855" medium="image" />
  364.  
  365. <media:content url="https://quintessens.files.wordpress.com/2022/05/image-2.png?w=684" medium="image" />
  366.  
  367. <media:content url="https://quintessens.files.wordpress.com/2022/05/image-3.png?w=940" medium="image" />
  368. </item>
  369. <item>
  370. <title>Sticky headers in Bootstrap from ExtLib</title>
  371. <link>https://quintessens.wordpress.com/2021/09/17/sticky-headers-in-bootstrap-from-extlib/</link>
  372. <comments>https://quintessens.wordpress.com/2021/09/17/sticky-headers-in-bootstrap-from-extlib/#respond</comments>
  373. <dc:creator><![CDATA[Patrick Kwinten]]></dc:creator>
  374. <pubDate>Fri, 17 Sep 2021 10:04:45 +0000</pubDate>
  375. <category><![CDATA[XPages]]></category>
  376. <category><![CDATA[css]]></category>
  377. <category><![CDATA[usability]]></category>
  378. <guid isPermaLink="false">http://quintessens.wordpress.com/?p=2996</guid>
  379.  
  380. <description><![CDATA[I received a request from a customer who would like to preserve the action buttons on an xpage when the user scrolls downs a very long form. The application is already using the BS theme from the Extension Library with&#8230;  <p class="more-link"><a href="https://quintessens.wordpress.com/2021/09/17/sticky-headers-in-bootstrap-from-extlib/">Continue reading <span class="meta-nav">&#8594;</span></a></p>]]></description>
  381. <content:encoded><![CDATA[
  382. <p>I received a request from a customer who would like to preserve the action buttons on an xpage when the user scrolls downs a very long form.</p>
  383.  
  384.  
  385.  
  386. <p>The application is already using the BS theme from the Extension Library with the sticky navbar option in use so this would implement a second &#8216;sticky element&#8217;.</p>
  387.  
  388.  
  389.  
  390. <p>Here is an example how the xpage looks like:</p>
  391.  
  392.  
  393.  
  394. <figure class="wp-block-image size-large"><a href="https://quintessens.files.wordpress.com/2021/09/capture01.jpg"><img loading="lazy" width="1024" height="570" data-attachment-id="3000" data-permalink="https://quintessens.wordpress.com/capture01/" data-orig-file="https://quintessens.files.wordpress.com/2021/09/capture01.jpg" data-orig-size="1376,767" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;Kwinten, Patrick&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1631879050&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="capture01" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2021/09/capture01.jpg?w=300" data-large-file="https://quintessens.files.wordpress.com/2021/09/capture01.jpg?w=636" src="https://quintessens.files.wordpress.com/2021/09/capture01.jpg?w=1024" alt="" class="wp-image-3000" srcset="https://quintessens.files.wordpress.com/2021/09/capture01.jpg?w=1024 1024w, https://quintessens.files.wordpress.com/2021/09/capture01.jpg?w=150 150w, https://quintessens.files.wordpress.com/2021/09/capture01.jpg?w=300 300w, https://quintessens.files.wordpress.com/2021/09/capture01.jpg?w=768 768w, https://quintessens.files.wordpress.com/2021/09/capture01.jpg 1376w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><figcaption>Note: I added some <a href="https://sv.lipsum.com/">Lorem Ipsum</a> content in stead of form elements for demo purpose, but you get the idea of a endless form to fill in.</figcaption></figure>
  395.  
  396.  
  397.  
  398. <p>So first I added a listener for the scroll event:</p>
  399.  
  400.  
  401.  
  402. <p><code>window.onscroll = function() {scrollFunction()};</code></p>
  403.  
  404.  
  405.  
  406. <p>The scrollFunction is as followed:</p>
  407.  
  408.  
  409.  
  410. <p><code>function scrollFunction() {<br>if (document.body.scrollTop &gt; 50 || document.documentElement.scrollTop &gt; 50) {<br>console.log('make SMALL')<br>$('.navbar').css({<br>'min-height': '32px',<br>'height': '32px'<br>});<br>$('.navbar-brand').css({<br>'height': '32px',<br>'padding-top': '5px',<br>'padding-bottom': '5px'<br>});<br>$('.navbar-nav &gt; li &gt; a').css({<br>'padding-top': '5px',<br>'padding-bottom': '5px'<br>});<br>$('#infoLanguage &gt; div.dropdown').css({<br>'padding': '5px 5px'<br>});<br>$('#form-header').css({<br>'display': 'block',<br>'z-index': '-1'<br>});<br>$('#form-header-hidden').css({<br>'display': 'block',<br>'position': 'fixed',<br>'top': '30px',<br>'height': '30px',<br>'z-index': '996'<br>});<br>$('navbar').addClass('shrink');<br>} else {<br>console.log('make LARGE')<br>$('.navbar').css({<br>'min-height': '50px',<br>'height': '50px'<br>});<br>$('.navbar-brand').css({<br>'height': '50px',<br>'padding-top': '15px',<br>'padding-bottom': '15px'<br>});<br>$('.navbar-nav &gt; li &gt; a').css({<br>'padding-top': '15px',<br>'padding-bottom': '15px'<br>});<br>$('#infoLanguage &gt; div.dropdown').css({<br>'padding': '15px 10px'<br>});<br>$('#form-header').css({<br>'display': 'block'<br>});<br>$('#form-header-hidden').css({<br>'display': 'none',<br>'position': 'fixed',<br>'top': '0px',<br>'height': '30px',<br>'z-index': '0'<br>});<br>$('navbar').removeClass('shrink');<br>}<br>}</code></p>
  411.  
  412.  
  413.  
  414. <p></p>
  415.  
  416.  
  417.  
  418. <p>I also added some additional styling for style and transition effects:</p>
  419.  
  420.  
  421. <div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
  422. &lt;style&gt;
  423. #form-header-hidden{
  424. width:100%;
  425. background-color:white;
  426. height:0px;
  427. padding:5px 150px;
  428. box-shadow: 0px 3px 5px 0px rgba(182,182,182,0.75);
  429. transition: all 0s, opacity 0.5s linear;
  430. }
  431.  
  432. #form-header{
  433. transition: all 0s, opacity 0.5s linear;
  434. }
  435.  
  436. .navbar{
  437. transition: all 0.5s;
  438. }
  439. .navbar-brand img{
  440.    transition: all 0.5s;
  441. }
  442. &lt;/style&gt;
  443. </pre></div>
  444.  
  445.  
  446. <p>So I basically make 2 form-header elements, on for &#8216;normal&#8217; display when focus is on the top and one when the user starts to scroll down from a certain point. The form elements are basically the same but more adapted on the height of their container.</p>
  447.  
  448.  
  449.  
  450. <p>One thing I would like to note is that I had to place the &#8216;smaller&#8217; sticky header under the navbar so it can inherit the same with as its parent. Otherwise I would look not nice with a bit of displacement.</p>
  451.  
  452.  
  453.  
  454. <p>I also noted a small shaking effect when I would use the visibility option to show/hide which form-header to display. Choosing here to play mess with the z-index property solves that issue with shaking when scrolling slowly in the beginning.</p>
  455.  
  456.  
  457.  
  458. <p></p>
  459.  
  460.  
  461.  
  462. <p>Here is the result when the user starts to scroll down. The form header becomes small but sticky under the navbar. The buttons to interact with the form are available where ever the user is in the form:</p>
  463.  
  464.  
  465.  
  466. <figure class="wp-block-image size-large"><a href="https://quintessens.files.wordpress.com/2021/09/capture03.jpg"><img loading="lazy" width="1024" height="287" data-attachment-id="3006" data-permalink="https://quintessens.wordpress.com/capture03/" data-orig-file="https://quintessens.files.wordpress.com/2021/09/capture03.jpg" data-orig-size="1377,386" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;Kwinten, Patrick&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;1631880105&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="capture03" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2021/09/capture03.jpg?w=300" data-large-file="https://quintessens.files.wordpress.com/2021/09/capture03.jpg?w=636" src="https://quintessens.files.wordpress.com/2021/09/capture03.jpg?w=1024" alt="" class="wp-image-3006" srcset="https://quintessens.files.wordpress.com/2021/09/capture03.jpg?w=1024 1024w, https://quintessens.files.wordpress.com/2021/09/capture03.jpg?w=150 150w, https://quintessens.files.wordpress.com/2021/09/capture03.jpg?w=300 300w, https://quintessens.files.wordpress.com/2021/09/capture03.jpg?w=768 768w, https://quintessens.files.wordpress.com/2021/09/capture03.jpg 1377w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>
  467.  
  468.  
  469.  
  470. <p>A small new feature in the app but I think it will bring a lot of user satisfaction! Happy coding <img src="https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
  471. ]]></content:encoded>
  472. <wfw:commentRss>https://quintessens.wordpress.com/2021/09/17/sticky-headers-in-bootstrap-from-extlib/feed/</wfw:commentRss>
  473. <slash:comments>0</slash:comments>
  474. <media:content url="https://1.gravatar.com/avatar/7e6954ce3d50c2f8a30613f9c097ed76e101ebf75e6f790c056476352d53f969?s=96&#38;d=identicon&#38;r=G" medium="image">
  475. <media:title type="html">quintessens</media:title>
  476. </media:content>
  477.  
  478. <media:content url="https://quintessens.files.wordpress.com/2021/09/capture01.jpg?w=1024" medium="image" />
  479.  
  480. <media:content url="https://quintessens.files.wordpress.com/2021/09/capture03.jpg?w=1024" medium="image" />
  481. </item>
  482. <item>
  483. <title>Fixing the Tooltip function in XPages #2</title>
  484. <link>https://quintessens.wordpress.com/2021/04/15/fixing-the-tooltip-function-in-xpages-2/</link>
  485. <comments>https://quintessens.wordpress.com/2021/04/15/fixing-the-tooltip-function-in-xpages-2/#respond</comments>
  486. <dc:creator><![CDATA[Patrick Kwinten]]></dc:creator>
  487. <pubDate>Thu, 15 Apr 2021 08:51:08 +0000</pubDate>
  488. <category><![CDATA[XPages]]></category>
  489. <category><![CDATA[Dojo]]></category>
  490. <category><![CDATA[partial refresh]]></category>
  491. <guid isPermaLink="false">http://quintessens.wordpress.com/?p=2987</guid>
  492.  
  493. <description><![CDATA[In a previous post I wrote about the disfunction of the tooltip after validation with the Domino server. It turns out my gigia-form has a lot of fields with visibility properties set that are calculated after partial refresh. To have&#8230;  <p class="more-link"><a href="https://quintessens.wordpress.com/2021/04/15/fixing-the-tooltip-function-in-xpages-2/">Continue reading <span class="meta-nav">&#8594;</span></a></p>]]></description>
  494. <content:encoded><![CDATA[
  495. <p>In a <a href="https://quintessens.wordpress.com/2021/04/13/fixing-the-tooltip-function-in-xpages/">previous post</a> I wrote about the disfunction of the tooltip after validation with the Domino server. It turns out my gigia-form has a lot of fields with visibility properties set that are calculated after partial refresh. To have tooltip fixed for the fields that become visible during interaction with the user I needed to apply another patch.</p>
  496.  
  497.  
  498.  
  499. <p>From the <a href="https://openntf.org/XSnippets.nsf/snippet.xsp?id=standby-dialog-custom-control">xsnippet for the standby control</a>  I took the first part to set up the ability to subscribe to the different partial refresh events. Then I added some lines to subscribe to the partialrefresh-complete state:</p>
  500.  
  501.  
  502.  
  503. <figure class="wp-block-image size-large"><a href="https://quintessens.files.wordpress.com/2021/04/image-4.png"><img loading="lazy" width="863" height="77" data-attachment-id="2991" data-permalink="https://quintessens.wordpress.com/image-4/" data-orig-file="https://quintessens.files.wordpress.com/2021/04/image-4.png" data-orig-size="863,77" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-4" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2021/04/image-4.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2021/04/image-4.png?w=636" src="https://quintessens.files.wordpress.com/2021/04/image-4.png?w=863" alt="" class="wp-image-2991" srcset="https://quintessens.files.wordpress.com/2021/04/image-4.png 863w, https://quintessens.files.wordpress.com/2021/04/image-4.png?w=150 150w, https://quintessens.files.wordpress.com/2021/04/image-4.png?w=300 300w, https://quintessens.files.wordpress.com/2021/04/image-4.png?w=768 768w" sizes="(max-width: 863px) 100vw, 863px" /></a><figcaption>The initToolTip function did not changed:</figcaption></figure>
  504.  
  505.  
  506.  
  507. <figure class="wp-block-image size-large"><a href="https://quintessens.files.wordpress.com/2021/04/image-5.png"><img loading="lazy" width="958" height="134" data-attachment-id="2993" data-permalink="https://quintessens.wordpress.com/image-5/" data-orig-file="https://quintessens.files.wordpress.com/2021/04/image-5.png" data-orig-size="958,134" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-5" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2021/04/image-5.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2021/04/image-5.png?w=636" src="https://quintessens.files.wordpress.com/2021/04/image-5.png?w=958" alt="" class="wp-image-2993" srcset="https://quintessens.files.wordpress.com/2021/04/image-5.png 958w, https://quintessens.files.wordpress.com/2021/04/image-5.png?w=150 150w, https://quintessens.files.wordpress.com/2021/04/image-5.png?w=300 300w, https://quintessens.files.wordpress.com/2021/04/image-5.png?w=768 768w" sizes="(max-width: 958px) 100vw, 958px" /></a></figure>
  508.  
  509.  
  510.  
  511. <p>With this subscription the tooltip becomes applied to fields that become visible after validation (when the user continues to fill in the form).</p>
  512.  
  513.  
  514.  
  515. <p>The possibility to subscribe to partialrefresh states is also a use-case for other plugins I use, for example to automatically adapt textareas to user-input.</p>
  516. ]]></content:encoded>
  517. <wfw:commentRss>https://quintessens.wordpress.com/2021/04/15/fixing-the-tooltip-function-in-xpages-2/feed/</wfw:commentRss>
  518. <slash:comments>0</slash:comments>
  519. <media:content url="https://1.gravatar.com/avatar/7e6954ce3d50c2f8a30613f9c097ed76e101ebf75e6f790c056476352d53f969?s=96&#38;d=identicon&#38;r=G" medium="image">
  520. <media:title type="html">quintessens</media:title>
  521. </media:content>
  522.  
  523. <media:content url="https://quintessens.files.wordpress.com/2021/04/image-4.png?w=863" medium="image" />
  524.  
  525. <media:content url="https://quintessens.files.wordpress.com/2021/04/image-5.png?w=958" medium="image" />
  526. </item>
  527. <item>
  528. <title>Fixing the Tooltip function in XPages</title>
  529. <link>https://quintessens.wordpress.com/2021/04/13/fixing-the-tooltip-function-in-xpages/</link>
  530. <comments>https://quintessens.wordpress.com/2021/04/13/fixing-the-tooltip-function-in-xpages/#comments</comments>
  531. <dc:creator><![CDATA[Patrick Kwinten]]></dc:creator>
  532. <pubDate>Tue, 13 Apr 2021 12:51:25 +0000</pubDate>
  533. <category><![CDATA[development]]></category>
  534. <category><![CDATA[bootstrap]]></category>
  535. <category><![CDATA[bug]]></category>
  536. <category><![CDATA[tooltip]]></category>
  537. <category><![CDATA[validation]]></category>
  538. <category><![CDATA[XPages]]></category>
  539. <guid isPermaLink="false">http://quintessens.wordpress.com/?p=2972</guid>
  540.  
  541. <description><![CDATA[A colleague noticed that the tooltip function on a Xpage stopped working after submitting the page to the server and when the validation did not pass. The same behaviour occurred when I added a computed text control that would spit&#8230;  <p class="more-link"><a href="https://quintessens.wordpress.com/2021/04/13/fixing-the-tooltip-function-in-xpages/">Continue reading <span class="meta-nav">&#8594;</span></a></p>]]></description>
  542. <content:encoded><![CDATA[
  543. <p>A colleague noticed that the tooltip function on a Xpage stopped working after submitting the page to the server and when the validation did not pass. The <a href="https://stackoverflow.com/questions/67071418/tooltip-not-working-when-validating-xpage?noredirect=1#comment118555321_67071418">same behaviour occurred</a> when I added a computed text control that would spit out an anchor reference using a tooltip. Odd.</p>
  544.  
  545.  
  546.  
  547. <p>I found an <a href="https://quintessens.wordpress.com/2015/06/19/adding-a-dojo-tooltip-to-your-xpages-valuepicker/">old post of mine</a> where I described the use of the xe:tooltip control. This control seems to keep working even when the XPage fails to validate. So that is a win.</p>
  548.  
  549.  
  550.  
  551. <p>However, in my case I would have to apply the control on many places which does not make me happy. </p>
  552.  
  553.  
  554.  
  555. <p>I also wanted to alter the layout of the tooltip a bit via a template so I found <a href="https://www.codeply.com/go/nff6Dz58e4/bootstrap-tooltip-template">this piece of code</a>. To my delight I noticed that the tooltip also kept working after a failed validation!</p>
  556.  
  557.  
  558.  
  559. <p>So a simple bit of code can fix tooltip again:</p>
  560.  
  561.  
  562.  
  563. <figure class="wp-block-image size-large"><a href="https://quintessens.files.wordpress.com/2021/04/image.png"><img loading="lazy" width="537" height="71" data-attachment-id="2977" data-permalink="https://quintessens.wordpress.com/image/" data-orig-file="https://quintessens.files.wordpress.com/2021/04/image.png" data-orig-size="537,71" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2021/04/image.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2021/04/image.png?w=537" src="https://quintessens.files.wordpress.com/2021/04/image.png?w=537" alt="" class="wp-image-2977" srcset="https://quintessens.files.wordpress.com/2021/04/image.png 537w, https://quintessens.files.wordpress.com/2021/04/image.png?w=150 150w, https://quintessens.files.wordpress.com/2021/04/image.png?w=300 300w" sizes="(max-width: 537px) 100vw, 537px" /></a></figure>
  564.  
  565.  
  566.  
  567. <p>So after applying a template for the tooltip and applying some CSS my tooltip looks a bit more readable and less boring:</p>
  568.  
  569.  
  570.  
  571. <figure class="wp-block-image size-large"><a href="https://quintessens.files.wordpress.com/2021/04/image-1.png"><img loading="lazy" width="831" height="125" data-attachment-id="2979" data-permalink="https://quintessens.wordpress.com/image-1/" data-orig-file="https://quintessens.files.wordpress.com/2021/04/image-1.png" data-orig-size="831,125" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-1" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2021/04/image-1.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2021/04/image-1.png?w=636" src="https://quintessens.files.wordpress.com/2021/04/image-1.png?w=831" alt="" class="wp-image-2979" srcset="https://quintessens.files.wordpress.com/2021/04/image-1.png 831w, https://quintessens.files.wordpress.com/2021/04/image-1.png?w=150 150w, https://quintessens.files.wordpress.com/2021/04/image-1.png?w=300 300w, https://quintessens.files.wordpress.com/2021/04/image-1.png?w=768 768w" sizes="(max-width: 831px) 100vw, 831px" /></a></figure>
  572.  
  573.  
  574.  
  575. <figure class="wp-block-image size-large"><a href="https://quintessens.files.wordpress.com/2021/04/image-2.png"><img loading="lazy" width="343" height="399" data-attachment-id="2981" data-permalink="https://quintessens.wordpress.com/image-2/" data-orig-file="https://quintessens.files.wordpress.com/2021/04/image-2.png" data-orig-size="343,399" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-2" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2021/04/image-2.png?w=258" data-large-file="https://quintessens.files.wordpress.com/2021/04/image-2.png?w=343" src="https://quintessens.files.wordpress.com/2021/04/image-2.png?w=343" alt="" class="wp-image-2981" srcset="https://quintessens.files.wordpress.com/2021/04/image-2.png 343w, https://quintessens.files.wordpress.com/2021/04/image-2.png?w=129 129w, https://quintessens.files.wordpress.com/2021/04/image-2.png?w=258 258w" sizes="(max-width: 343px) 100vw, 343px" /></a></figure>
  576.  
  577.  
  578.  
  579. <figure class="wp-block-image size-large"><a href="https://quintessens.files.wordpress.com/2021/04/image-3.png"><img loading="lazy" width="1024" height="118" data-attachment-id="2983" data-permalink="https://quintessens.wordpress.com/image-3/" data-orig-file="https://quintessens.files.wordpress.com/2021/04/image-3.png" data-orig-size="1202,139" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image-3" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2021/04/image-3.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2021/04/image-3.png?w=636" src="https://quintessens.files.wordpress.com/2021/04/image-3.png?w=1024" alt="" class="wp-image-2983" srcset="https://quintessens.files.wordpress.com/2021/04/image-3.png?w=1024 1024w, https://quintessens.files.wordpress.com/2021/04/image-3.png?w=150 150w, https://quintessens.files.wordpress.com/2021/04/image-3.png?w=300 300w, https://quintessens.files.wordpress.com/2021/04/image-3.png?w=768 768w, https://quintessens.files.wordpress.com/2021/04/image-3.png 1202w" sizes="(max-width: 1024px) 100vw, 1024px" /></a></figure>
  580.  
  581.  
  582.  
  583. <p>Note that I have to set the xp:this.title property for the inputTextArea control. Adding an additional attribute for the placeholder won&#8217;t do for the template.</p>
  584. ]]></content:encoded>
  585. <wfw:commentRss>https://quintessens.wordpress.com/2021/04/13/fixing-the-tooltip-function-in-xpages/feed/</wfw:commentRss>
  586. <slash:comments>1</slash:comments>
  587. <media:content url="https://1.gravatar.com/avatar/7e6954ce3d50c2f8a30613f9c097ed76e101ebf75e6f790c056476352d53f969?s=96&#38;d=identicon&#38;r=G" medium="image">
  588. <media:title type="html">quintessens</media:title>
  589. </media:content>
  590.  
  591. <media:content url="https://quintessens.files.wordpress.com/2021/04/image.png?w=537" medium="image" />
  592.  
  593. <media:content url="https://quintessens.files.wordpress.com/2021/04/image-1.png?w=831" medium="image" />
  594.  
  595. <media:content url="https://quintessens.files.wordpress.com/2021/04/image-2.png?w=343" medium="image" />
  596.  
  597. <media:content url="https://quintessens.files.wordpress.com/2021/04/image-3.png?w=1024" medium="image" />
  598. </item>
  599. <item>
  600. <title>For Nathan T(eacher) Freeman</title>
  601. <link>https://quintessens.wordpress.com/2021/04/12/for-nathan-teacher-freeman/</link>
  602. <comments>https://quintessens.wordpress.com/2021/04/12/for-nathan-teacher-freeman/#respond</comments>
  603. <dc:creator><![CDATA[Patrick Kwinten]]></dc:creator>
  604. <pubDate>Mon, 12 Apr 2021 19:19:43 +0000</pubDate>
  605. <guid isPermaLink="false">http://quintessens.wordpress.com/?p=2966</guid>
  606.  
  607. <description><![CDATA[Today I read the sad news that Nathan T Freeman is no longer among us. I was actually googling last week, curious what he was working on. I met Nathan a couple of times. The first time was at a&#8230;  <p class="more-link"><a href="https://quintessens.wordpress.com/2021/04/12/for-nathan-teacher-freeman/">Continue reading <span class="meta-nav">&#8594;</span></a></p>]]></description>
  608. <content:encoded><![CDATA[
  609. <p>Today I read the sad news that <a href="https://twitter.com/NathanTFreeman">Nathan T Freeman</a> is n<a href="https://www.openntf.org/main.nsf/blog.xsp?permaLink=CGUN-BZZ7F6">o longer among us</a>. I was actually googling last week, curious what he was working on.</p>
  610.  
  611.  
  612.  
  613. <p>I met Nathan a couple of times. The first time was at a Lotussphere sponsor party (by Nokia, 2008?) with a <strong>Rock Hero</strong>   theme. I was honoured <a href="https://twitter.com/timtripcony?lang=en">you and Tim Tripcony</a> joined our table. Probably because team Sweden was already into heavy (free beer, duh) drinking and getting louder and louder.</p>
  614.  
  615.  
  616.  
  617. <p>I thought you and Tim were the <strong>rock heroes</strong> in the Domino world. But actually you were more a <strong>teacher</strong> for me. I actually made a long-long ago <a href="https://vimeo.com/32592768">a song for all my teachers then</a>, and see: you were one of them. </p>
  618.  
  619.  
  620.  
  621. <p>Thanks for your guidance with helping me find the solutions for my technical challenges!</p>
  622. ]]></content:encoded>
  623. <wfw:commentRss>https://quintessens.wordpress.com/2021/04/12/for-nathan-teacher-freeman/feed/</wfw:commentRss>
  624. <slash:comments>0</slash:comments>
  625. <media:content url="https://1.gravatar.com/avatar/7e6954ce3d50c2f8a30613f9c097ed76e101ebf75e6f790c056476352d53f969?s=96&#38;d=identicon&#38;r=G" medium="image">
  626. <media:title type="html">quintessens</media:title>
  627. </media:content>
  628. </item>
  629. <item>
  630. <title>TestiNG XPages</title>
  631. <link>https://quintessens.wordpress.com/2021/03/30/testing-xpages/</link>
  632. <comments>https://quintessens.wordpress.com/2021/03/30/testing-xpages/#respond</comments>
  633. <dc:creator><![CDATA[Patrick Kwinten]]></dc:creator>
  634. <pubDate>Tue, 30 Mar 2021 09:28:37 +0000</pubDate>
  635. <category><![CDATA[Test]]></category>
  636. <category><![CDATA[selenium]]></category>
  637. <category><![CDATA[testng]]></category>
  638. <category><![CDATA[webdriver]]></category>
  639. <category><![CDATA[XPages]]></category>
  640. <guid isPermaLink="false">http://quintessens.wordpress.com/?p=2948</guid>
  641.  
  642. <description><![CDATA[Introduction with Selenium IDE A while ago I started my journey into testing applications. Like most people I started with Selenium IDE since it&#8217;s free, easy to install and setup. The idea was to record the workflow in an application&#8230;  <p class="more-link"><a href="https://quintessens.wordpress.com/2021/03/30/testing-xpages/">Continue reading <span class="meta-nav">&#8594;</span></a></p>]]></description>
  643. <content:encoded><![CDATA[
  644. <h2 class="wp-block-heading">Introduction with Selenium IDE </h2>
  645.  
  646.  
  647.  
  648. <p>A while ago I started my journey into testing applications. Like most people I started with <a href="https://www.selenium.dev/selenium-ide/">Selenium IDE</a> since it&#8217;s free, easy to install and setup. The idea was to record the workflow in an application and play it back after the development of every new feauture. </p>
  649.  
  650.  
  651.  
  652. <p>A nice idea but it does not work so well with the dynamic ID&#8217;s XPages generates for it&#8217;s controls. Instead of the id attribute you can then go via XPath and apply parameters. Here is an example for my Edit Box control that has id &#8216;inputCustusomerName&#8217; -&gt; starts with @id,&#8217;view:&#8217; and contains @id,&#8217;inputCustusomerName&#8217;. </p>
  653.  
  654.  
  655.  
  656. <p>It becomes a lot of fiddling with the IDE and basically it becomes a long, long script (if you have a larger workflow) which you are capable of structuring in smaller pieces via the suite option. </p>
  657.  
  658.  
  659.  
  660. <h2 class="wp-block-heading"> Selenium WebDriver </h2>
  661.  
  662.  
  663.  
  664. <p>When talking with more experienced test people they all drop the IDE and go for <a href="https://www.selenium.dev/">Selenium Webdriver</a>. I will not go into details on WebDriver but the specs of WebDriver overclasses the IDE by far and it&#8217;s available in different languages. Since my XPages applications are already written mostly in Java so one is acquainted in a sense with an Eclipse environment (DDE) the step to start writing code in Eclipse IDE is not that big. </p>
  665.  
  666.  
  667.  
  668. <p>So with WebDriver used across the organization I feel more assured to join that community instead working on tests on an island (with Domino is also in a way). We have actually an infrastructure for WebDriver with Selenium Grid and support via a framework based upon Selenium WebDriver. </p>
  669.  
  670.  
  671.  
  672. <h2 class="wp-block-heading">TestNG </h2>
  673.  
  674.  
  675.  
  676. <p>When you start writing your tests in the beginning you end up like with the Selenium IDE in a long script that can do one thing. If you want to take the next leap then check <a href="https://testng.org/doc/">TestNG</a>. It extends the test capabilities by far and allows to structure and configure your tests to way you want. </p>
  677.  
  678.  
  679.  
  680. <p> ith TestNG your can setup &#8216;testsuites&#8217; and in those suites you can define which tests to run. I use the suites to run tests in different roles.  </p>
  681.  
  682.  
  683.  
  684. <p>At first I looked at the option to run my tests from DDE ( I found some posts/presentations where it looked it should be possible) to avoid moving to another development IDE. But after installing the TestNG plugin in DDE and writing some scripts using WebDriver when running the TestNG suite it searched for files that where outside my NSF (workspace directory location). So the option to remain coding in DDE I gave up.  </p>
  685.  
  686.  
  687.  
  688. <h2 class="wp-block-heading">Test framework </h2>
  689.  
  690.  
  691.  
  692. <p>If you work in a larger organization you are probably not the first person who writes tests. I found in my organization a supported test framework that is based upon Selenium WebDriver and TestNG and includes more features like for example <a href="https://reportng.uncommons.org/">ReportNG</a> which allows you to create HTML reports of your tests. Selenium WebDriver has a feature to take a screenshot so that is nice to include in your test report. </p>
  693.  
  694.  
  695.  
  696. <p>The framework has many more features which I have not touched (yet). </p>
  697.  
  698.  
  699.  
  700. <h2 class="wp-block-heading">Lessons learned </h2>
  701.  
  702.  
  703.  
  704. <p>With Selenium WebDriver you will face the same problems with dynamic id&#8217;s as in Selenium IDE. Use XPath as selector the web element e.g.:</p>
  705.  
  706.  
  707.  
  708. <p> </p>
  709.  
  710.  
  711.  
  712. <p>When accessing lists, like link controls in a repeat control these XPath reference does not work. they all end with the same ID part. So when you register a new customer and that customer will appear in a table you do not know in which row that customer will appear depending on the content in that table. You can even have so many customers in the table so that you need to use a pager. </p>
  713.  
  714.  
  715.  
  716. <p>In Domino it is common you define userroles in your Access Control List and then distribute these roles to users/groups. Especially if you want to test a workflow you access the application in different roles. Via TestNG tend to provide a role as parameter, and for that role I use different user credentials. When working in a team and Git you do not want to expose these credentials so I started to use <a href="http://www.jasypt.org">Jasypt</a> for decrypting these values. </p>
  717.  
  718.  
  719.  
  720. <p>If you have an application that supports multiple languages you also want to check your application in those languages. In WebDriver you can find links by their text and these textes probably differ in languages. </p>
  721.  
  722.  
  723.  
  724. <h2 class="wp-block-heading">Conclusion </h2>
  725.  
  726.  
  727.  
  728. <p>Tests are a common part of development and in modern development test drive development. As a Domino developer you have to adapt to this paradigm. If your team is too small for test developers you probably have to write those test yourself. Writing tests expands your development skills and you talk with colleagues in different areas of your organization you otherwise never would have contact with. </p>
  729.  
  730.  
  731.  
  732. <p>In my situation WebDriver is a common tool and I could not find any JavaScript supported framework available in our organization. Writing test scripts with WebDriver is not a big step for XPages developers and I recommend to take a look at TestNG to be able to structure your tests from the start. </p>
  733.  
  734.  
  735.  
  736. <p>Test is a wide area and I have only explored a part of it. Test is also an important part of CICD (continious integration continious delivery) if you happen to have as goal to deliver an automated process for the build of your Domino applications. </p>
  737.  
  738.  
  739.  
  740. <p>Good luck and enjoy the journey! </p>
  741. ]]></content:encoded>
  742. <wfw:commentRss>https://quintessens.wordpress.com/2021/03/30/testing-xpages/feed/</wfw:commentRss>
  743. <slash:comments>0</slash:comments>
  744. <media:content url="https://1.gravatar.com/avatar/7e6954ce3d50c2f8a30613f9c097ed76e101ebf75e6f790c056476352d53f969?s=96&#38;d=identicon&#38;r=G" medium="image">
  745. <media:title type="html">quintessens</media:title>
  746. </media:content>
  747. </item>
  748. <item>
  749. <title>Git question</title>
  750. <link>https://quintessens.wordpress.com/2021/01/27/git-question/</link>
  751. <comments>https://quintessens.wordpress.com/2021/01/27/git-question/#respond</comments>
  752. <dc:creator><![CDATA[Patrick Kwinten]]></dc:creator>
  753. <pubDate>Wed, 27 Jan 2021 12:19:06 +0000</pubDate>
  754. <category><![CDATA[source control]]></category>
  755. <category><![CDATA[development]]></category>
  756. <category><![CDATA[GIT]]></category>
  757. <category><![CDATA[nsf]]></category>
  758. <guid isPermaLink="false">http://quintessens.wordpress.com/?p=2937</guid>
  759.  
  760. <description><![CDATA[So how do you organize your code for an application in GIT? All code (multiple NSF&#8217;s) in 1 repository or each NSF in it&#8217;s own repository? Curious about your experiences and advantages/disadvantages:]]></description>
  761. <content:encoded><![CDATA[
  762. <p>So how do you organize your code for an application in GIT? All code (multiple NSF&#8217;s) in 1 repository or  each NSF in it&#8217;s own repository? Curious about your experiences and advantages/disadvantages:</p>
  763.  
  764.  
  765.  
  766. <figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
  767. <div class="embed-twitter"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="en" dir="ltr">A GIT question for you <a href="https://twitter.com/hashtag/dominoforever?src=hash&amp;ref_src=twsrc%5Etfw">#dominoforever</a> <a href="https://twitter.com/hashtag/xpages?src=hash&amp;ref_src=twsrc%5Etfw">#xpages</a> developers, for your application what do you prefer? <a href="https://twitter.com/hashtag/spreadtheword?src=hash&amp;ref_src=twsrc%5Etfw">#spreadtheword</a> and do comment</p>&mdash; Patrick Kwinten (@patrickkwinten) <a href="https://twitter.com/patrickkwinten/status/1354011386519687171?ref_src=twsrc%5Etfw">January 26, 2021</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
  768. </div></figure>
  769. ]]></content:encoded>
  770. <wfw:commentRss>https://quintessens.wordpress.com/2021/01/27/git-question/feed/</wfw:commentRss>
  771. <slash:comments>0</slash:comments>
  772. <media:content url="https://1.gravatar.com/avatar/7e6954ce3d50c2f8a30613f9c097ed76e101ebf75e6f790c056476352d53f969?s=96&#38;d=identicon&#38;r=G" medium="image">
  773. <media:title type="html">quintessens</media:title>
  774. </media:content>
  775. </item>
  776. <item>
  777. <title>It&#8217;s a bug, it&#8217;s a pain, it&#8217;s an xp:checkBoxGroup!</title>
  778. <link>https://quintessens.wordpress.com/2020/11/05/its-a-bug-its-a-pain-its-an-xpcheckboxgroup/</link>
  779. <comments>https://quintessens.wordpress.com/2020/11/05/its-a-bug-its-a-pain-its-an-xpcheckboxgroup/#respond</comments>
  780. <dc:creator><![CDATA[Patrick Kwinten]]></dc:creator>
  781. <pubDate>Thu, 05 Nov 2020 10:45:22 +0000</pubDate>
  782. <category><![CDATA[XPages]]></category>
  783. <guid isPermaLink="false">http://quintessens.wordpress.com/?p=2931</guid>
  784.  
  785. <description><![CDATA[Many where wondered why the xp:checkBoxGroup with the Bootstrap theme was transformed into a HTML table. I have not heard so many complained that when you add a styleClass to it another class attribute is added and the browser simply&#8230;  <p class="more-link"><a href="https://quintessens.wordpress.com/2020/11/05/its-a-bug-its-a-pain-its-an-xpcheckboxgroup/">Continue reading <span class="meta-nav">&#8594;</span></a></p>]]></description>
  786. <content:encoded><![CDATA[
  787. <p>Many where wondered why the xp:checkBoxGroup with the Bootstrap theme was transformed into a HTML table.</p>
  788.  
  789.  
  790.  
  791. <p>I have not heard so many complained that when you add a styleClass to it another class attribute is added and the browser simply ignores the second class attribute.  Hell yeah, when you create a div element and add two class attributes DDE complains that a class attribute was already added for that element.</p>
  792.  
  793.  
  794.  
  795. <p>So:</p>
  796.  
  797.  
  798.  
  799. <p>xp:checkBoxGroup id=&#8221;checkBoxGroup1&#8243; styleClass=&#8221;testBox&#8221;</p>
  800.  
  801.  
  802.  
  803. <p>becomes in your browser source</p>
  804.  
  805.  
  806.  
  807. <p>div class=&#8221;checkbox&#8221; id=&#8221;view:_id1:checkBoxGroup1&#8243; class=&#8221;testBox&#8221;</p>
  808.  
  809.  
  810.  
  811. <p>and your browser renders:</p>
  812.  
  813.  
  814.  
  815. <p>div class=&#8221;checkbox&#8221; id=&#8221;view:_id1:checkBoxGroup1&#8243;</p>
  816. ]]></content:encoded>
  817. <wfw:commentRss>https://quintessens.wordpress.com/2020/11/05/its-a-bug-its-a-pain-its-an-xpcheckboxgroup/feed/</wfw:commentRss>
  818. <slash:comments>0</slash:comments>
  819. <media:content url="https://1.gravatar.com/avatar/7e6954ce3d50c2f8a30613f9c097ed76e101ebf75e6f790c056476352d53f969?s=96&#38;d=identicon&#38;r=G" medium="image">
  820. <media:title type="html">quintessens</media:title>
  821. </media:content>
  822. </item>
  823. <item>
  824. <title>Save your day, Save the state of your repeat control</title>
  825. <link>https://quintessens.wordpress.com/2020/10/09/save-your-day-save-the-state-of-your-repeat-control/</link>
  826. <comments>https://quintessens.wordpress.com/2020/10/09/save-your-day-save-the-state-of-your-repeat-control/#respond</comments>
  827. <dc:creator><![CDATA[Patrick Kwinten]]></dc:creator>
  828. <pubDate>Fri, 09 Oct 2020 09:29:31 +0000</pubDate>
  829. <category><![CDATA[XPages]]></category>
  830. <category><![CDATA[Repeat control]]></category>
  831. <category><![CDATA[SSJS]]></category>
  832. <guid isPermaLink="false">http://quintessens.wordpress.com/?p=2924</guid>
  833.  
  834. <description><![CDATA[I am writing a demo application with a faceted search functionality. For displaying the &#8220;results&#8221; I am using a repeat control. Now users want to switch back and forth between the &#8220;view&#8221; and the &#8220;document&#8221;. If you display the &#8220;results&#8230;  <p class="more-link"><a href="https://quintessens.wordpress.com/2020/10/09/save-your-day-save-the-state-of-your-repeat-control/">Continue reading <span class="meta-nav">&#8594;</span></a></p>]]></description>
  835. <content:encoded><![CDATA[
  836. <p>I am writing a demo application with a faceted search functionality. For displaying the &#8220;results&#8221; I am using a repeat control. </p>
  837.  
  838.  
  839.  
  840. <p>Now users want to switch back and forth between the &#8220;view&#8221; and the &#8220;document&#8221;. If you display the &#8220;results &#8221; in a &#8220;view&#8221; with an &#8220;view panel&#8221; control you can apply a pager to that view and for that pager you can apply a &#8220;pager save state&#8221; control. So when you go from &#8220;results&#8221; xpage to the &#8220;document&#8221; xpage and back you land in the same state (same page in that view) and the user does not have to navigate again to the last page in the view panel control.</p>
  841.  
  842.  
  843.  
  844. <p>Now with the repeat control that is a different thing. The &#8220;pager save state&#8221;  was not designed for it. Luckily there is an approach which will deliver you the same result. Add for your repeat control the property: first=&#8221;#{javascript:return (sessionScope.first != null)?sessionScope.first:0;}&#8221;. Than from the link (could be a button or whatever) in the repeat control add the following in the onClick event handler: sessionScope.put(&#8216;first&#8217;,getComponent(&#8220;rpCollection&#8221;).first);. Then do your normal stuff (like redirect to a page). If you from that redirected page go back to the &#8220;results&#8221; page the repeat control will show the last set of items from where you left.</p>
  845.  
  846.  
  847.  
  848. <p>I hope it will save your day and your project. Happy coding! <img src="https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
  849. ]]></content:encoded>
  850. <wfw:commentRss>https://quintessens.wordpress.com/2020/10/09/save-your-day-save-the-state-of-your-repeat-control/feed/</wfw:commentRss>
  851. <slash:comments>0</slash:comments>
  852. <media:content url="https://1.gravatar.com/avatar/7e6954ce3d50c2f8a30613f9c097ed76e101ebf75e6f790c056476352d53f969?s=96&#38;d=identicon&#38;r=G" medium="image">
  853. <media:title type="html">quintessens</media:title>
  854. </media:content>
  855. </item>
  856. <item>
  857. <title>Adding the optgroup tag quickly to your xp:combobox</title>
  858. <link>https://quintessens.wordpress.com/2020/09/08/adding-the-optgroup-tag-quickly-to-your-xpcombobox/</link>
  859. <comments>https://quintessens.wordpress.com/2020/09/08/adding-the-optgroup-tag-quickly-to-your-xpcombobox/#respond</comments>
  860. <dc:creator><![CDATA[Patrick Kwinten]]></dc:creator>
  861. <pubDate>Tue, 08 Sep 2020 18:58:50 +0000</pubDate>
  862. <category><![CDATA[development]]></category>
  863. <category><![CDATA[combobox]]></category>
  864. <category><![CDATA[Java]]></category>
  865. <category><![CDATA[jsf]]></category>
  866. <category><![CDATA[optgroup]]></category>
  867. <category><![CDATA[XPages]]></category>
  868. <guid isPermaLink="false">http://quintessens.wordpress.com/?p=2911</guid>
  869.  
  870. <description><![CDATA[Today I was working on modernizing an xpages application when I came up with a simple enhancement: adding the optgroup tag to a xp:combobox. By default this option is no available in XPages and if you look around there are&#8230;  <p class="more-link"><a href="https://quintessens.wordpress.com/2020/09/08/adding-the-optgroup-tag-quickly-to-your-xpcombobox/">Continue reading <span class="meta-nav">&#8594;</span></a></p>]]></description>
  871. <content:encoded><![CDATA[
  872. <p>Today I was working on modernizing an xpages application when I came up with a simple enhancement: adding the <a href="https://www.w3schools.com/tags/tag_optgroup.asp">optgroup </a>tag to a xp:combobox.</p>
  873.  
  874.  
  875.  
  876. <p>By default this option is no available in XPages and if you look around there are some suggestions from <a href="http://naveegator.blogspot.com/2012/07/creating-optgroup-tag-in-combo-boxes-in.html">hard-coded</a> to <a href="https://stackoverflow.com/questions/11226402/optgroup-with-combo-box-control">DOM modification</a> but I rather looked for a proper <a href="https://stackoverflow.com/questions/31905878/understanding-selectitemgroup">JSF implementation</a>. </p>
  877.  
  878.  
  879.  
  880. <p>The data for my combobox resides in a categorized Notes view in a solid NSF so I had two options: navigating through the NotesView via a ViewNavigator (probably next post) or a quick and dirty combo of a <a href="https://openntf.org/XSnippets.nsf/snippet.xsp?id=pure-java-version-of-dblookup-dbcolumn-with-cache-sort-and-unique">dbcolumn and dblookup</a>. </p>
  881.  
  882.  
  883.  
  884. <p>In context with the combobox control the dbcolumn/lookup combo seems suitable <img src="https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
  885.  
  886.  
  887.  
  888. <p>Here is the simplified setup for my xp:combobox:</p>
  889.  
  890.  
  891.  
  892. <figure class="wp-block-image size-large"><img loading="lazy" width="931" height="262" data-attachment-id="2917" data-permalink="https://quintessens.wordpress.com/combo_cp/" data-orig-file="https://quintessens.files.wordpress.com/2020/09/combo_cp.png" data-orig-size="931,262" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="combo_cp" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2020/09/combo_cp.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2020/09/combo_cp.png?w=636" src="https://quintessens.files.wordpress.com/2020/09/combo_cp.png?w=931" alt="" class="wp-image-2917" srcset="https://quintessens.files.wordpress.com/2020/09/combo_cp.png 931w, https://quintessens.files.wordpress.com/2020/09/combo_cp.png?w=150 150w, https://quintessens.files.wordpress.com/2020/09/combo_cp.png?w=300 300w, https://quintessens.files.wordpress.com/2020/09/combo_cp.png?w=768 768w" sizes="(max-width: 931px) 100vw, 931px" /></figure>
  893.  
  894.  
  895.  
  896. <p>As data source I am calling a method on a managed bean. The method is as followed:</p>
  897.  
  898.  
  899.  
  900. <figure class="wp-block-image size-large"><img loading="lazy" width="900" height="357" data-attachment-id="2919" data-permalink="https://quintessens.wordpress.com/combo_bean/" data-orig-file="https://quintessens.files.wordpress.com/2020/09/combo_bean.png" data-orig-size="900,357" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="combo_bean" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2020/09/combo_bean.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2020/09/combo_bean.png?w=636" src="https://quintessens.files.wordpress.com/2020/09/combo_bean.png?w=900" alt="" class="wp-image-2919" srcset="https://quintessens.files.wordpress.com/2020/09/combo_bean.png 900w, https://quintessens.files.wordpress.com/2020/09/combo_bean.png?w=150 150w, https://quintessens.files.wordpress.com/2020/09/combo_bean.png?w=300 300w, https://quintessens.files.wordpress.com/2020/09/combo_bean.png?w=768 768w" sizes="(max-width: 900px) 100vw, 900px" /></figure>
  901.  
  902.  
  903.  
  904. <p>The result is nice and straight-forward:</p>
  905.  
  906.  
  907.  
  908. <figure class="wp-block-image size-large"><img loading="lazy" width="982" height="672" data-attachment-id="2920" data-permalink="https://quintessens.wordpress.com/combo_result/" data-orig-file="https://quintessens.files.wordpress.com/2020/09/combo_result.png" data-orig-size="982,672" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="combo_result" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2020/09/combo_result.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2020/09/combo_result.png?w=636" src="https://quintessens.files.wordpress.com/2020/09/combo_result.png?w=982" alt="" class="wp-image-2920" srcset="https://quintessens.files.wordpress.com/2020/09/combo_result.png 982w, https://quintessens.files.wordpress.com/2020/09/combo_result.png?w=150 150w, https://quintessens.files.wordpress.com/2020/09/combo_result.png?w=300 300w, https://quintessens.files.wordpress.com/2020/09/combo_result.png?w=768 768w" sizes="(max-width: 982px) 100vw, 982px" /></figure>
  909.  
  910.  
  911.  
  912. <p></p>
  913.  
  914.  
  915.  
  916. <p>If you questions or difficulties with the implementation, just give me call. Happy development <img src="https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
  917. ]]></content:encoded>
  918. <wfw:commentRss>https://quintessens.wordpress.com/2020/09/08/adding-the-optgroup-tag-quickly-to-your-xpcombobox/feed/</wfw:commentRss>
  919. <slash:comments>0</slash:comments>
  920. <media:content url="https://1.gravatar.com/avatar/7e6954ce3d50c2f8a30613f9c097ed76e101ebf75e6f790c056476352d53f969?s=96&#38;d=identicon&#38;r=G" medium="image">
  921. <media:title type="html">quintessens</media:title>
  922. </media:content>
  923.  
  924. <media:content url="https://quintessens.files.wordpress.com/2020/09/combo_cp.png?w=931" medium="image" />
  925.  
  926. <media:content url="https://quintessens.files.wordpress.com/2020/09/combo_bean.png?w=900" medium="image" />
  927.  
  928. <media:content url="https://quintessens.files.wordpress.com/2020/09/combo_result.png?w=982" medium="image" />
  929. </item>
  930. <item>
  931. <title>Adding a GDPR message to my XPages app</title>
  932. <link>https://quintessens.wordpress.com/2020/05/20/adding-a-gdpr-message-to-my-xpages-app/</link>
  933. <comments>https://quintessens.wordpress.com/2020/05/20/adding-a-gdpr-message-to-my-xpages-app/#comments</comments>
  934. <dc:creator><![CDATA[Patrick Kwinten]]></dc:creator>
  935. <pubDate>Wed, 20 May 2020 09:25:36 +0000</pubDate>
  936. <category><![CDATA[development]]></category>
  937. <category><![CDATA[GDPR]]></category>
  938. <category><![CDATA[domino]]></category>
  939. <category><![CDATA[JavaScript]]></category>
  940. <category><![CDATA[jquery]]></category>
  941. <category><![CDATA[XPages]]></category>
  942. <guid isPermaLink="false">http://quintessens.wordpress.com/?p=2899</guid>
  943.  
  944. <description><![CDATA[GDPR or Cookies plugins are nothing new. A simple search will give you a quick overview which jQuery based plugins are available. So I decided the one that looked nicest to me and implemented it my XPages app. It worked&#8230;  <p class="more-link"><a href="https://quintessens.wordpress.com/2020/05/20/adding-a-gdpr-message-to-my-xpages-app/">Continue reading <span class="meta-nav">&#8594;</span></a></p>]]></description>
  945. <content:encoded><![CDATA[
  946. <p>GDPR or Cookies plugins are nothing new. A <a href="https://www.jqueryscript.net/tags.php?/GDPR/">simple search</a> will give you a quick overview which jQuery based plugins are available.</p>
  947.  
  948.  
  949.  
  950. <p>So I decided the one that looked nicest to me and implemented it my XPages app. It worked but not when I met a user who was using IE. No JS error or whatever so where to start debugging? <img src="https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f626.png" alt="😦" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
  951.  
  952.  
  953.  
  954. <p>When looking in the original code I noticed that a different version of jQuery was used than is available on or Domino V10 server. So I posted an idea for an upgrade on the <a href="https://domino-ideas.hcltechsw.com/ideas/DDXP-I-637">HCL Products Ideas Portal</a>.</p>
  955.  
  956.  
  957.  
  958. <p>In the end I tried the <a href="https://www.jqueryscript.net/other/EU-Cookie-Notice-Plugin-jQuery-CookiePopup.html">Customizable EU Cookie Notice Popup Plugin</a> which uses the 2.1.1 version of jQuery which is the same version as on the Domino server. (Loading multiple versions jQuery makes Dojo complain).</p>
  959.  
  960.  
  961.  
  962. <p>But then the requirements of the project changes and the functionality should become more to highlight news or updates within the application so I had to add some additional functionality:</p>
  963.  
  964.  
  965.  
  966. <ul><li>enable / disable news display/popup</li><li>option to steer location / appearance on screen</li><li>from / until dates, so a period when the message should be displayed.</li></ul>
  967.  
  968.  
  969.  
  970. <p>I decided when the option to enable the display but leave the from and until dates empty the popup will be displayed as long as the session of the browser lasts.</p>
  971.  
  972.  
  973.  
  974. <p>So these settings are stored in a Notes &#8211; Configuration document and made available as session scope variables.</p>
  975.  
  976.  
  977.  
  978. <p>Also the content of the popup has to be easily editable so for this I use Notes &#8211; Keywords documents so I can have messages in multiple languages.</p>
  979.  
  980.  
  981.  
  982. <p>When the code was working I lifted it up into a custom control which I can now re-use across other applications. Not that the custom control contains custom properties (yet)</p>
  983.  
  984.  
  985.  
  986. <p><img data-attachment-id="2902" data-permalink="https://quintessens.wordpress.com/2020/05/20/adding-a-gdpr-message-to-my-xpages-app/gdpr_cc/" data-orig-file="https://quintessens.files.wordpress.com/2020/05/gdpr_cc.png" data-orig-size="861,599" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="gdpr_cc" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2020/05/gdpr_cc.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2020/05/gdpr_cc.png?w=636" class="wp-image-2902" style="width:px;" src="https://quintessens.files.wordpress.com/2020/05/gdpr_cc.png" alt="undefined"></p>
  987.  
  988.  
  989.  
  990. <p>The function to set the cookie expiry date is as followed:</p>
  991.  
  992.  
  993.  
  994. <figure class="wp-block-image size-large"><img loading="lazy" width="441" height="188" data-attachment-id="2903" data-permalink="https://quintessens.wordpress.com/gdpr_js/" data-orig-file="https://quintessens.files.wordpress.com/2020/05/gdpr_js.png" data-orig-size="441,188" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="gdpr_js" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2020/05/gdpr_js.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2020/05/gdpr_js.png?w=441" src="https://quintessens.files.wordpress.com/2020/05/gdpr_js.png?w=441" alt="" class="wp-image-2903" srcset="https://quintessens.files.wordpress.com/2020/05/gdpr_js.png 441w, https://quintessens.files.wordpress.com/2020/05/gdpr_js.png?w=150 150w, https://quintessens.files.wordpress.com/2020/05/gdpr_js.png?w=300 300w" sizes="(max-width: 441px) 100vw, 441px" /></figure>
  995.  
  996.  
  997.  
  998. <p>To set a java date in a scope variable can be a little tricky. I did it as follow:</p>
  999.  
  1000.  
  1001.  
  1002. <figure class="wp-block-image size-large"><img loading="lazy" width="693" height="558" data-attachment-id="2905" data-permalink="https://quintessens.wordpress.com/gdpr_dates/" data-orig-file="https://quintessens.files.wordpress.com/2020/05/gdpr_dates.png" data-orig-size="693,558" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="gdpr_dates" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2020/05/gdpr_dates.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2020/05/gdpr_dates.png?w=636" src="https://quintessens.files.wordpress.com/2020/05/gdpr_dates.png?w=693" alt="" class="wp-image-2905" srcset="https://quintessens.files.wordpress.com/2020/05/gdpr_dates.png 693w, https://quintessens.files.wordpress.com/2020/05/gdpr_dates.png?w=150 150w, https://quintessens.files.wordpress.com/2020/05/gdpr_dates.png?w=300 300w" sizes="(max-width: 693px) 100vw, 693px" /></figure>
  1003.  
  1004.  
  1005.  
  1006. <p>But this is all the code I needed. The result is as followed:</p>
  1007.  
  1008.  
  1009.  
  1010. <figure class="wp-block-image size-large"><img loading="lazy" width="946" height="751" data-attachment-id="2906" data-permalink="https://quintessens.wordpress.com/gdpr_result/" data-orig-file="https://quintessens.files.wordpress.com/2020/05/gdpr_result.png" data-orig-size="946,751" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="gdpr_result" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2020/05/gdpr_result.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2020/05/gdpr_result.png?w=636" src="https://quintessens.files.wordpress.com/2020/05/gdpr_result.png?w=946" alt="" class="wp-image-2906" srcset="https://quintessens.files.wordpress.com/2020/05/gdpr_result.png 946w, https://quintessens.files.wordpress.com/2020/05/gdpr_result.png?w=150 150w, https://quintessens.files.wordpress.com/2020/05/gdpr_result.png?w=300 300w, https://quintessens.files.wordpress.com/2020/05/gdpr_result.png?w=768 768w" sizes="(max-width: 946px) 100vw, 946px" /></figure>
  1011.  
  1012.  
  1013.  
  1014. <p>Note: I have altered the JS file of the plugin to bootstrap it more and to make it responsive.</p>
  1015.  
  1016.  
  1017.  
  1018. <p>When I press the OK button a cookie is set that last a browser session (I left the from and until dates empty in my settings):</p>
  1019.  
  1020.  
  1021.  
  1022. <figure class="wp-block-image size-large"><img loading="lazy" width="966" height="244" data-attachment-id="2908" data-permalink="https://quintessens.wordpress.com/gdpr_cookie/" data-orig-file="https://quintessens.files.wordpress.com/2020/05/gdpr_cookie.png" data-orig-size="966,244" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="gdpr_cookie" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2020/05/gdpr_cookie.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2020/05/gdpr_cookie.png?w=636" src="https://quintessens.files.wordpress.com/2020/05/gdpr_cookie.png?w=966" alt="" class="wp-image-2908" srcset="https://quintessens.files.wordpress.com/2020/05/gdpr_cookie.png 966w, https://quintessens.files.wordpress.com/2020/05/gdpr_cookie.png?w=150 150w, https://quintessens.files.wordpress.com/2020/05/gdpr_cookie.png?w=300 300w, https://quintessens.files.wordpress.com/2020/05/gdpr_cookie.png?w=768 768w" sizes="(max-width: 966px) 100vw, 966px" /><figcaption><br></figcaption></figure>
  1023.  
  1024.  
  1025.  
  1026. <p>If you like this post then please support my idea for upgrading the jQuery version on Domino: <a href="https://domino-ideas.hcltechsw.com/ideas/DDXP-I-637">https://domino-ideas.hcltechsw.com/ideas/DDXP-I-637</a> </p>
  1027.  
  1028.  
  1029.  
  1030. <p>Happy development <img src="https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
  1031.  
  1032.  
  1033.  
  1034. <p> </p>
  1035. ]]></content:encoded>
  1036. <wfw:commentRss>https://quintessens.wordpress.com/2020/05/20/adding-a-gdpr-message-to-my-xpages-app/feed/</wfw:commentRss>
  1037. <slash:comments>1</slash:comments>
  1038. <media:content url="https://1.gravatar.com/avatar/7e6954ce3d50c2f8a30613f9c097ed76e101ebf75e6f790c056476352d53f969?s=96&#38;d=identicon&#38;r=G" medium="image">
  1039. <media:title type="html">quintessens</media:title>
  1040. </media:content>
  1041.  
  1042. <media:content url="https://quintessens.files.wordpress.com/2020/05/gdpr_cc.png" medium="image">
  1043. <media:title type="html">undefined</media:title>
  1044. </media:content>
  1045.  
  1046. <media:content url="https://quintessens.files.wordpress.com/2020/05/gdpr_js.png?w=441" medium="image" />
  1047.  
  1048. <media:content url="https://quintessens.files.wordpress.com/2020/05/gdpr_dates.png?w=693" medium="image" />
  1049.  
  1050. <media:content url="https://quintessens.files.wordpress.com/2020/05/gdpr_result.png?w=946" medium="image" />
  1051.  
  1052. <media:content url="https://quintessens.files.wordpress.com/2020/05/gdpr_cookie.png?w=966" medium="image" />
  1053. </item>
  1054. <item>
  1055. <title>RAD Table walker</title>
  1056. <link>https://quintessens.wordpress.com/2020/03/16/rad-table-walker/</link>
  1057. <comments>https://quintessens.wordpress.com/2020/03/16/rad-table-walker/#respond</comments>
  1058. <dc:creator><![CDATA[Patrick Kwinten]]></dc:creator>
  1059. <pubDate>Mon, 16 Mar 2020 15:57:21 +0000</pubDate>
  1060. <category><![CDATA[XPages]]></category>
  1061. <category><![CDATA[bootstrap]]></category>
  1062. <category><![CDATA[Java]]></category>
  1063. <category><![CDATA[Rapid Application Design]]></category>
  1064. <category><![CDATA[tables]]></category>
  1065. <guid isPermaLink="false">http://quintessens.wordpress.com/?p=2885</guid>
  1066.  
  1067. <description><![CDATA[For a project I received some very unclear description for a change. After a conversation I came up with the suggestion to rebuild the UI and present a Bootstrap table with add and delete buttons. Something what developers would call&#8230;  <p class="more-link"><a href="https://quintessens.wordpress.com/2020/03/16/rad-table-walker/">Continue reading <span class="meta-nav">&#8594;</span></a></p>]]></description>
  1068. <content:encoded><![CDATA[
  1069. <p>For a project I received some very unclear description for a change. After a conversation I came up with the suggestion to rebuild the UI and present <a href="https://www.tutorialrepublic.com/snippets/preview.php?topic=bootstrap&amp;file=table-with-add-and-delete-row-feature">a Bootstrap table with add and delete buttons</a>. Something what developers would call a table walker.</p>
  1070.  
  1071.  
  1072.  
  1073. <p>So how did I do this?</p>
  1074.  
  1075.  
  1076.  
  1077. <p>First I had to extend the Model object of my MVC model. The table repeats rows with persons details so I added:</p>
  1078.  
  1079.  
  1080.  
  1081. <figure class="wp-block-image size-large"><img loading="lazy" width="526" height="36" data-attachment-id="2890" data-permalink="https://quintessens.wordpress.com/tw00/" data-orig-file="https://quintessens.files.wordpress.com/2020/03/tw00.png" data-orig-size="526,36" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="tw00" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2020/03/tw00.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2020/03/tw00.png?w=526" src="https://quintessens.files.wordpress.com/2020/03/tw00.png?w=526" alt="" class="wp-image-2890" srcset="https://quintessens.files.wordpress.com/2020/03/tw00.png 526w, https://quintessens.files.wordpress.com/2020/03/tw00.png?w=150 150w, https://quintessens.files.wordpress.com/2020/03/tw00.png?w=300 300w" sizes="(max-width: 526px) 100vw, 526px" /></figure>
  1082.  
  1083.  
  1084.  
  1085. <p>The Person class is simplified as followed:</p>
  1086.  
  1087.  
  1088.  
  1089. <figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="692" data-attachment-id="2887" data-permalink="https://quintessens.wordpress.com/tw01/" data-orig-file="https://quintessens.files.wordpress.com/2020/03/tw01.png" data-orig-size="1049,709" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="tw01" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2020/03/tw01.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2020/03/tw01.png?w=636" src="https://quintessens.files.wordpress.com/2020/03/tw01.png?w=1024" alt="" class="wp-image-2887" srcset="https://quintessens.files.wordpress.com/2020/03/tw01.png?w=1024 1024w, https://quintessens.files.wordpress.com/2020/03/tw01.png?w=150 150w, https://quintessens.files.wordpress.com/2020/03/tw01.png?w=300 300w, https://quintessens.files.wordpress.com/2020/03/tw01.png?w=768 768w, https://quintessens.files.wordpress.com/2020/03/tw01.png 1049w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
  1090.  
  1091.  
  1092.  
  1093. <p>On my model object I also added getters and setters and and an add method:</p>
  1094.  
  1095.  
  1096.  
  1097. <figure class="wp-block-image size-large"><img loading="lazy" width="484" height="213" data-attachment-id="2889" data-permalink="https://quintessens.wordpress.com/tw02/" data-orig-file="https://quintessens.files.wordpress.com/2020/03/tw02.png" data-orig-size="484,213" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="tw02" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2020/03/tw02.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2020/03/tw02.png?w=484" src="https://quintessens.files.wordpress.com/2020/03/tw02.png?w=484" alt="" class="wp-image-2889" srcset="https://quintessens.files.wordpress.com/2020/03/tw02.png 484w, https://quintessens.files.wordpress.com/2020/03/tw02.png?w=150 150w, https://quintessens.files.wordpress.com/2020/03/tw02.png?w=300 300w" sizes="(max-width: 484px) 100vw, 484px" /></figure>
  1098.  
  1099.  
  1100.  
  1101. <p>Then I had to build the table with the following important elements:</p>
  1102.  
  1103.  
  1104.  
  1105. <ul><li>a repeat control to represent my arraylist of Person objects</li><li>input fields bounded to the Person name and email</li><li>a button for each row to remove the Person from the arraylist</li><li>a button to display a new blank row to register a new Person</li></ul>
  1106.  
  1107.  
  1108.  
  1109. <p>The code is not that long or complicated. I highlighted the important parts with bleeding yellow:</p>
  1110.  
  1111.  
  1112.  
  1113. <figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="606" data-attachment-id="2892" data-permalink="https://quintessens.wordpress.com/tw03/" data-orig-file="https://quintessens.files.wordpress.com/2020/03/tw03.png" data-orig-size="1376,815" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="tw03" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2020/03/tw03.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2020/03/tw03.png?w=636" src="https://quintessens.files.wordpress.com/2020/03/tw03.png?w=1024" alt="" class="wp-image-2892" srcset="https://quintessens.files.wordpress.com/2020/03/tw03.png?w=1024 1024w, https://quintessens.files.wordpress.com/2020/03/tw03.png?w=150 150w, https://quintessens.files.wordpress.com/2020/03/tw03.png?w=300 300w, https://quintessens.files.wordpress.com/2020/03/tw03.png?w=768 768w, https://quintessens.files.wordpress.com/2020/03/tw03.png 1376w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
  1114.  
  1115.  
  1116.  
  1117. <p>In the next phase I decided to replace the input field the name field with  namespickers (by first name or by last name)  wrapped as Bootstrap field add-ons. Here is the rough code:</p>
  1118.  
  1119.  
  1120.  
  1121. <figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="538" data-attachment-id="2894" data-permalink="https://quintessens.wordpress.com/tw04/" data-orig-file="https://quintessens.files.wordpress.com/2020/03/tw04.png" data-orig-size="1402,737" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="tw04" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2020/03/tw04.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2020/03/tw04.png?w=636" src="https://quintessens.files.wordpress.com/2020/03/tw04.png?w=1024" alt="" class="wp-image-2894" srcset="https://quintessens.files.wordpress.com/2020/03/tw04.png?w=1024 1024w, https://quintessens.files.wordpress.com/2020/03/tw04.png?w=150 150w, https://quintessens.files.wordpress.com/2020/03/tw04.png?w=300 300w, https://quintessens.files.wordpress.com/2020/03/tw04.png?w=768 768w, https://quintessens.files.wordpress.com/2020/03/tw04.png 1402w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
  1122.  
  1123.  
  1124.  
  1125. <p>This all resulted in a nice BS table with add / remove buttons:</p>
  1126.  
  1127.  
  1128.  
  1129. <figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="225" data-attachment-id="2896" data-permalink="https://quintessens.wordpress.com/tw05/" data-orig-file="https://quintessens.files.wordpress.com/2020/03/tw05.png" data-orig-size="1457,321" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="tw05" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2020/03/tw05.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2020/03/tw05.png?w=636" src="https://quintessens.files.wordpress.com/2020/03/tw05.png?w=1024" alt="" class="wp-image-2896" srcset="https://quintessens.files.wordpress.com/2020/03/tw05.png?w=1024 1024w, https://quintessens.files.wordpress.com/2020/03/tw05.png?w=1021 1021w, https://quintessens.files.wordpress.com/2020/03/tw05.png?w=150 150w, https://quintessens.files.wordpress.com/2020/03/tw05.png?w=300 300w, https://quintessens.files.wordpress.com/2020/03/tw05.png?w=768 768w, https://quintessens.files.wordpress.com/2020/03/tw05.png 1457w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
  1130.  
  1131.  
  1132.  
  1133. <p>Now I am just waiting for customer approval. That is mostly the longest part in Rapid Application Design.</p>
  1134. ]]></content:encoded>
  1135. <wfw:commentRss>https://quintessens.wordpress.com/2020/03/16/rad-table-walker/feed/</wfw:commentRss>
  1136. <slash:comments>0</slash:comments>
  1137. <media:content url="https://1.gravatar.com/avatar/7e6954ce3d50c2f8a30613f9c097ed76e101ebf75e6f790c056476352d53f969?s=96&#38;d=identicon&#38;r=G" medium="image">
  1138. <media:title type="html">quintessens</media:title>
  1139. </media:content>
  1140.  
  1141. <media:content url="https://quintessens.files.wordpress.com/2020/03/tw00.png?w=526" medium="image" />
  1142.  
  1143. <media:content url="https://quintessens.files.wordpress.com/2020/03/tw01.png?w=1024" medium="image" />
  1144.  
  1145. <media:content url="https://quintessens.files.wordpress.com/2020/03/tw02.png?w=484" medium="image" />
  1146.  
  1147. <media:content url="https://quintessens.files.wordpress.com/2020/03/tw03.png?w=1024" medium="image" />
  1148.  
  1149. <media:content url="https://quintessens.files.wordpress.com/2020/03/tw04.png?w=1024" medium="image" />
  1150.  
  1151. <media:content url="https://quintessens.files.wordpress.com/2020/03/tw05.png?w=1024" medium="image" />
  1152. </item>
  1153. <item>
  1154. <title>Fiddling with jax-rs and getting frustrated</title>
  1155. <link>https://quintessens.wordpress.com/2020/02/12/fiddling-with-jax-rs-and-getting-frustrated/</link>
  1156. <comments>https://quintessens.wordpress.com/2020/02/12/fiddling-with-jax-rs-and-getting-frustrated/#respond</comments>
  1157. <dc:creator><![CDATA[Patrick Kwinten]]></dc:creator>
  1158. <pubDate>Wed, 12 Feb 2020 20:38:15 +0000</pubDate>
  1159. <category><![CDATA[development]]></category>
  1160. <category><![CDATA[Java]]></category>
  1161. <category><![CDATA[jax-rs]]></category>
  1162. <category><![CDATA[XPages]]></category>
  1163. <guid isPermaLink="false">http://quintessens.wordpress.com/?p=2878</guid>
  1164.  
  1165. <description><![CDATA[Today was probably not the best day for development. After getting the Jakarta EE project to work on the development server by a miraculous second signing of the plugins in the update site NSF and restart of HTTP on Domino&#8230;  <p class="more-link"><a href="https://quintessens.wordpress.com/2020/02/12/fiddling-with-jax-rs-and-getting-frustrated/">Continue reading <span class="meta-nav">&#8594;</span></a></p>]]></description>
  1166. <content:encoded><![CDATA[
  1167. <p>Today was probably not the best day for development.  After getting <a href="https://github.com/OpenNTF/org.openntf.xsp.jakartaee">the Jakarta EE project</a> to work on the development server by a miraculous second signing of the plugins in the update site NSF and restart of HTTP on Domino (v10) my next step was to actually getting to get some code running.</p>
  1168.  
  1169.  
  1170.  
  1171. <p>Curious as I am I found some code samples <a href="https://github.com/OpenNTF/org.openntf.xsp.jakartaee">here</a> , <a href="https://bitbucket.org/howardtlcc-admin/collabsphere-2019-dev112/src/master/">here</a> and <a href="https://bitbucket.org/pradnik/pristo_rest/src/master/">here</a> but after trying some of the samples in my NSF I keep on running on errors:</p>
  1172.  
  1173.  
  1174.  
  1175. <p></p>
  1176.  
  1177.  
  1178. <div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
  1179. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM: ERROR i18n RESTEASY002025: Unknown exception while executing GET /sample/counter
  1180. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  
  1181. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM: org.jboss.weld.exceptions.AmbiguousResolutionException: WELD-001318: Cannot resolve an ambiguous dependency between:
  1182. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:   - Managed Bean &#91;class servlet.Sample] with qualifiers &#91;@Any @Default],
  1183. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:   - Managed Bean &#91;class servlet.Sample] with qualifiers &#91;@Any @Default]
  1184. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at org.jboss.weld.manager.BeanManagerImpl.resolve(BeanManagerImpl.java:1164)
  1185. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at org.jboss.resteasy.cdi.CdiConstructorInjector.construct(CdiConstructorInjector.java:66)
  1186. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at org.jboss.resteasy.cdi.CdiConstructorInjector.construct(CdiConstructorInjector.java:73)
  1187. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at org.jboss.resteasy.plugins.server.resourcefactory.POJOResourceFactory.createResource(POJOResourceFactory.java:67)
  1188. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:309)
  1189. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:439)
  1190. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at org.jboss.resteasy.core.SynchronousDispatcher.lambda$invoke$4(SynchronousDispatcher.java:229)
  1191. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at org.jboss.resteasy.core.SynchronousDispatcher$$Lambda$95.0000000046F8EF20.run(Unknown Source)
  1192. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at org.jboss.resteasy.core.SynchronousDispatcher.lambda$preprocess$0(SynchronousDispatcher.java:135)
  1193. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at org.jboss.resteasy.core.SynchronousDispatcher$$Lambda$96.0000000046F8F8D0.get(Unknown Source)
  1194. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at org.jboss.resteasy.core.interception.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:355)
  1195. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at org.jboss.resteasy.core.SynchronousDispatcher.preprocess(SynchronousDispatcher.java:138)
  1196. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:215)
  1197. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:227)
  1198. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56)
  1199. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51)
  1200. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at org.openntf.xsp.jaxrs.impl.FacesJAXRSServletContainer.service(FacesJAXRSServletContainer.java:96)
  1201. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
  1202. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at com.ibm.designer.runtime.domino.adapter.ComponentModule.invokeServlet(ComponentModule.java:600)
  1203. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at com.ibm.domino.xsp.module.nsf.NSFComponentModule.invokeServlet(NSFComponentModule.java:1352)
  1204. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at com.ibm.designer.runtime.domino.adapter.ComponentModule$AdapterInvoker.invokeServlet(ComponentModule.java:877)
  1205. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at com.ibm.designer.runtime.domino.adapter.ComponentModule$ServletInvoker.doService(ComponentModule.java:820)
  1206. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at com.ibm.designer.runtime.domino.adapter.ComponentModule.doService(ComponentModule.java:589)
  1207. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at com.ibm.domino.xsp.module.nsf.NSFComponentModule.doService(NSFComponentModule.java:1336)
  1208. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at com.ibm.domino.xsp.module.nsf.NSFService.doServiceInternal(NSFService.java:662)
  1209. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at com.ibm.domino.xsp.module.nsf.NSFService.doService(NSFService.java:482)
  1210. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at com.ibm.designer.runtime.domino.adapter.LCDEnvironment.doService(LCDEnvironment.java:357)
  1211. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at com.ibm.designer.runtime.domino.adapter.LCDEnvironment.service(LCDEnvironment.java:313)
  1212. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at com.ibm.domino.xsp.bridge.http.engine.XspCmdManager.service(XspCmdManager.java:272)
  1213. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM: org.jboss.resteasy.spi.UnhandledException: org.jboss.weld.exceptions.AmbiguousResolutionException: WELD-001318: Cannot resolve an ambiguous dependency between:
  1214. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:   - Managed Bean &#91;class servlet.Sample] with qualifiers &#91;@Any @Default],
  1215. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:   - Managed Bean &#91;class servlet.Sample] with qualifiers &#91;@Any @Default]
  1216. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at org.jboss.resteasy.core.ExceptionHandler.handleException(ExceptionHandler.java:257)
  1217. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at org.jboss.resteasy.core.SynchronousDispatcher.writeException(SynchronousDispatcher.java:193)
  1218. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:455)
  1219. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at org.jboss.resteasy.core.SynchronousDispatcher.lambda$invoke$4(SynchronousDispatcher.java:229)
  1220. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at org.jboss.resteasy.core.SynchronousDispatcher$$Lambda$95.0000000046F8EF20.run(Unknown Source)
  1221. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at org.jboss.resteasy.core.SynchronousDispatcher.lambda$preprocess$0(SynchronousDispatcher.java:135)
  1222. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at org.jboss.resteasy.core.SynchronousDispatcher$$Lambda$96.0000000046F8F8D0.get(Unknown Source)
  1223. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at org.jboss.resteasy.core.interception.PreMatchContainerRequestContext.filter(PreMatchContainerRequestContext.java:355)
  1224. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at org.jboss.resteasy.core.SynchronousDispatcher.preprocess(SynchronousDispatcher.java:138)
  1225. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:215)
  1226. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.service(ServletContainerDispatcher.java:227)
  1227. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:56)
  1228. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.service(HttpServletDispatcher.java:51)
  1229. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at org.openntf.xsp.jaxrs.impl.FacesJAXRSServletContainer.service(FacesJAXRSServletContainer.java:96)
  1230. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
  1231. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at com.ibm.designer.runtime.domino.adapter.ComponentModule.invokeServlet(ComponentModule.java:600)
  1232. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at com.ibm.domino.xsp.module.nsf.NSFComponentModule.invokeServlet(NSFComponentModule.java:1352)
  1233. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at com.ibm.designer.runtime.domino.adapter.ComponentModule$AdapterInvoker.invokeServlet(ComponentModule.java:877)
  1234. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at com.ibm.designer.runtime.domino.adapter.ComponentModule$ServletInvoker.doService(ComponentModule.java:820)
  1235. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at com.ibm.designer.runtime.domino.adapter.ComponentModule.doService(ComponentModule.java:589)
  1236. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at com.ibm.domino.xsp.module.nsf.NSFComponentModule.doService(NSFComponentModule.java:1336)
  1237. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at com.ibm.domino.xsp.module.nsf.NSFService.doServiceInternal(NSFService.java:662)
  1238. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at com.ibm.domino.xsp.module.nsf.NSFService.doService(NSFService.java:482)
  1239. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at com.ibm.designer.runtime.domino.adapter.LCDEnvironment.doService(LCDEnvironment.java:357)
  1240. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at com.ibm.designer.runtime.domino.adapter.LCDEnvironment.service(LCDEnvironment.java:313)
  1241. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at com.ibm.domino.xsp.bridge.http.engine.XspCmdManager.service(XspCmdManager.java:272)
  1242. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM: Caused by:
  1243. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM: org.jboss.weld.exceptions.AmbiguousResolutionException: WELD-001318: Cannot resolve an ambiguous dependency between:
  1244. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:   - Managed Bean &#91;class servlet.Sample] with qualifiers &#91;@Any @Default],
  1245. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:   - Managed Bean &#91;class servlet.Sample] with qualifiers &#91;@Any @Default]
  1246. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at org.jboss.weld.manager.BeanManagerImpl.resolve(BeanManagerImpl.java:1164)
  1247. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at org.jboss.resteasy.cdi.CdiConstructorInjector.construct(CdiConstructorInjector.java:66)
  1248. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at org.jboss.resteasy.cdi.CdiConstructorInjector.construct(CdiConstructorInjector.java:73)
  1249. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at org.jboss.resteasy.plugins.server.resourcefactory.POJOResourceFactory.createResource(POJOResourceFactory.java:67)
  1250. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at org.jboss.resteasy.core.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:309)
  1251. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  at org.jboss.resteasy.core.SynchronousDispatcher.invoke(SynchronousDispatcher.java:439)
  1252. &#91;14EC:0011-0484] 2020-02-12 21:24:57   HTTP JVM:  ... 23 more
  1253.  
  1254. </pre></div>
  1255.  
  1256.  
  1257. <p>Here is the code that I am running:</p>
  1258.  
  1259.  
  1260.  
  1261. <figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="532" data-attachment-id="2880" data-permalink="https://quintessens.wordpress.com/snip_jaxrs01/" data-orig-file="https://quintessens.files.wordpress.com/2020/02/snip_jaxrs01.png" data-orig-size="1116,580" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="snip_jaxrs01" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2020/02/snip_jaxrs01.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2020/02/snip_jaxrs01.png?w=636" src="https://quintessens.files.wordpress.com/2020/02/snip_jaxrs01.png?w=1024" alt="" class="wp-image-2880" srcset="https://quintessens.files.wordpress.com/2020/02/snip_jaxrs01.png?w=1024 1024w, https://quintessens.files.wordpress.com/2020/02/snip_jaxrs01.png?w=150 150w, https://quintessens.files.wordpress.com/2020/02/snip_jaxrs01.png?w=300 300w, https://quintessens.files.wordpress.com/2020/02/snip_jaxrs01.png?w=768 768w, https://quintessens.files.wordpress.com/2020/02/snip_jaxrs01.png 1116w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
  1262.  
  1263.  
  1264.  
  1265. <figure class="wp-block-image size-large"><img loading="lazy" width="585" height="254" data-attachment-id="2881" data-permalink="https://quintessens.wordpress.com/snip_jaxrs02/" data-orig-file="https://quintessens.files.wordpress.com/2020/02/snip_jaxrs02.png" data-orig-size="585,254" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="snip_jaxrs02" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2020/02/snip_jaxrs02.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2020/02/snip_jaxrs02.png?w=585" src="https://quintessens.files.wordpress.com/2020/02/snip_jaxrs02.png?w=585" alt="" class="wp-image-2881" srcset="https://quintessens.files.wordpress.com/2020/02/snip_jaxrs02.png 585w, https://quintessens.files.wordpress.com/2020/02/snip_jaxrs02.png?w=150 150w, https://quintessens.files.wordpress.com/2020/02/snip_jaxrs02.png?w=300 300w" sizes="(max-width: 585px) 100vw, 585px" /></figure>
  1266.  
  1267.  
  1268.  
  1269. <figure class="wp-block-image size-large"><img loading="lazy" width="558" height="203" data-attachment-id="2882" data-permalink="https://quintessens.wordpress.com/snip_jaxrs03/" data-orig-file="https://quintessens.files.wordpress.com/2020/02/snip_jaxrs03.png" data-orig-size="558,203" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="snip_jaxrs03" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2020/02/snip_jaxrs03.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2020/02/snip_jaxrs03.png?w=558" src="https://quintessens.files.wordpress.com/2020/02/snip_jaxrs03.png?w=558" alt="" class="wp-image-2882" srcset="https://quintessens.files.wordpress.com/2020/02/snip_jaxrs03.png 558w, https://quintessens.files.wordpress.com/2020/02/snip_jaxrs03.png?w=150 150w, https://quintessens.files.wordpress.com/2020/02/snip_jaxrs03.png?w=300 300w" sizes="(max-width: 558px) 100vw, 558px" /></figure>
  1270. ]]></content:encoded>
  1271. <wfw:commentRss>https://quintessens.wordpress.com/2020/02/12/fiddling-with-jax-rs-and-getting-frustrated/feed/</wfw:commentRss>
  1272. <slash:comments>0</slash:comments>
  1273. <media:content url="https://1.gravatar.com/avatar/7e6954ce3d50c2f8a30613f9c097ed76e101ebf75e6f790c056476352d53f969?s=96&#38;d=identicon&#38;r=G" medium="image">
  1274. <media:title type="html">quintessens</media:title>
  1275. </media:content>
  1276.  
  1277. <media:content url="https://quintessens.files.wordpress.com/2020/02/snip_jaxrs01.png?w=1024" medium="image" />
  1278.  
  1279. <media:content url="https://quintessens.files.wordpress.com/2020/02/snip_jaxrs02.png?w=585" medium="image" />
  1280.  
  1281. <media:content url="https://quintessens.files.wordpress.com/2020/02/snip_jaxrs03.png?w=558" medium="image" />
  1282. </item>
  1283. <item>
  1284. <title>Getting the Select2-to-Tree working in XPages</title>
  1285. <link>https://quintessens.wordpress.com/2020/01/15/getting-the-select2-to-tree-working-in-xpages/</link>
  1286. <comments>https://quintessens.wordpress.com/2020/01/15/getting-the-select2-to-tree-working-in-xpages/#comments</comments>
  1287. <dc:creator><![CDATA[Patrick Kwinten]]></dc:creator>
  1288. <pubDate>Wed, 15 Jan 2020 13:21:23 +0000</pubDate>
  1289. <category><![CDATA[XPages]]></category>
  1290. <category><![CDATA[csjs]]></category>
  1291. <category><![CDATA[notesview]]></category>
  1292. <category><![CDATA[rpcservice]]></category>
  1293. <category><![CDATA[select2]]></category>
  1294. <guid isPermaLink="false">http://quintessens.wordpress.com/?p=2867</guid>
  1295.  
  1296. <description><![CDATA[In a modernization project (increase browser compatibility) I needed a more simple solution for a custom value picker. The less design elements the merrier 🙂 Another highly desired feature was to have a search function within the picker because there&#8230;  <p class="more-link"><a href="https://quintessens.wordpress.com/2020/01/15/getting-the-select2-to-tree-working-in-xpages/">Continue reading <span class="meta-nav">&#8594;</span></a></p>]]></description>
  1297. <content:encoded><![CDATA[
  1298. <p>In a modernization project (increase browser compatibility) I needed a more simple solution for a custom value picker. The less design elements the merrier <img src="https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
  1299.  
  1300.  
  1301.  
  1302. <p>Another highly desired feature was to have a search function within the picker because there are a lot of values to choose from.</p>
  1303.  
  1304.  
  1305.  
  1306. <p>So my initial though was to present the options in a listbox and wrap the select2 plugin around it. Well it turned out the customer found the categorization of options a need to have, including collapse and expand options (who has not grown up with twisties?).</p>
  1307.  
  1308.  
  1309.  
  1310. <p>Next attempt was to implement the <a rel="noreferrer noopener" aria-label="Select2-to-tree plugin (opens in a new tab)" href="https://github.com/clivezhg/select2-to-tree" target="_blank">Select2-to-tree plugin</a> since it presents a hierarchy of links in a select2 object</p>
  1311.  
  1312.  
  1313.  
  1314. <figure class="wp-block-image size-large"><img loading="lazy" width="285" height="256" data-attachment-id="2868" data-permalink="https://quintessens.wordpress.com/blog_example/" data-orig-file="https://quintessens.files.wordpress.com/2020/01/blog_example.png" data-orig-size="285,256" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="blog_example" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2020/01/blog_example.png?w=285" data-large-file="https://quintessens.files.wordpress.com/2020/01/blog_example.png?w=285" src="https://quintessens.files.wordpress.com/2020/01/blog_example.png?w=285" alt="" class="wp-image-2868" srcset="https://quintessens.files.wordpress.com/2020/01/blog_example.png 285w, https://quintessens.files.wordpress.com/2020/01/blog_example.png?w=150 150w" sizes="(max-width: 285px) 100vw, 285px" /></figure>
  1315.  
  1316.  
  1317.  
  1318. <p>Looks familiar like a Notes view right? Luckily my Notes view only got one level of categorization and my <a rel="noreferrer noopener" aria-label="skills with transforming Notes view data into  other objects (opens in a new tab)" href="https://quintessens.wordpress.com/2020/01/10/data-for-bootstrap-treeview-from-a-notes-view/" target="_blank">skills with transforming Notes view data into  other objects</a> came in handy. So in a short time I have my data providing REST service setup .</p>
  1319.  
  1320.  
  1321.  
  1322. <p>Here is the initiation script for the plugin:</p>
  1323.  
  1324.  
  1325.  
  1326. <figure class="wp-block-image size-large"><img loading="lazy" width="672" height="543" data-attachment-id="2870" data-permalink="https://quintessens.wordpress.com/blog_script/" data-orig-file="https://quintessens.files.wordpress.com/2020/01/blog_script.png" data-orig-size="672,543" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="blog_script" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2020/01/blog_script.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2020/01/blog_script.png?w=636" src="https://quintessens.files.wordpress.com/2020/01/blog_script.png?w=672" alt="" class="wp-image-2870" srcset="https://quintessens.files.wordpress.com/2020/01/blog_script.png 672w, https://quintessens.files.wordpress.com/2020/01/blog_script.png?w=150 150w, https://quintessens.files.wordpress.com/2020/01/blog_script.png?w=300 300w" sizes="(max-width: 672px) 100vw, 672px" /></figure>
  1327.  
  1328.  
  1329.  
  1330. <p>Then I tried to send the selected value to the server to check the value but I was not able to. The XPage did not send a message but the page just frooze.</p>
  1331.  
  1332.  
  1333.  
  1334. <p>So to avoid to spend a lot of time on finding and fixing the bug I decided to run the alternative route and use SELECT element instead of the xp:listBox and write the value from csjs to the server via a RPC service (hence the change listener)</p>
  1335.  
  1336.  
  1337. <div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
  1338. &lt;select
  1339. id=&quot;lbTest1&quot;
  1340. multiple=&quot;true&quot;
  1341. class=&quot;form-control&quot;&gt;
  1342. &lt;/select&gt;
  1343. </pre></div>
  1344.  
  1345.  
  1346. <p>The RPC service has nothing special, just setting a viewScope variable:</p>
  1347.  
  1348.  
  1349.  
  1350. <figure class="wp-block-image size-large"><img loading="lazy" width="1024" height="333" data-attachment-id="2872" data-permalink="https://quintessens.wordpress.com/blog_rpc/" data-orig-file="https://quintessens.files.wordpress.com/2020/01/blog_rpc.png" data-orig-size="1086,354" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="blog_rpc" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2020/01/blog_rpc.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2020/01/blog_rpc.png?w=636" src="https://quintessens.files.wordpress.com/2020/01/blog_rpc.png?w=1024" alt="" class="wp-image-2872" srcset="https://quintessens.files.wordpress.com/2020/01/blog_rpc.png?w=1022 1022w, https://quintessens.files.wordpress.com/2020/01/blog_rpc.png?w=150 150w, https://quintessens.files.wordpress.com/2020/01/blog_rpc.png?w=300 300w, https://quintessens.files.wordpress.com/2020/01/blog_rpc.png?w=768 768w, https://quintessens.files.wordpress.com/2020/01/blog_rpc.png 1086w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
  1351.  
  1352.  
  1353.  
  1354. <p>So that is basically it. With a minimum of design elements / coding I got my Notes view data in a treeview presented in a select2 component:</p>
  1355.  
  1356.  
  1357.  
  1358. <figure class="wp-block-image size-large"><img loading="lazy" width="936" height="186" data-attachment-id="2873" data-permalink="https://quintessens.wordpress.com/blog_demo/" data-orig-file="https://quintessens.files.wordpress.com/2020/01/blog_demo.png" data-orig-size="936,186" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="blog_demo" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2020/01/blog_demo.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2020/01/blog_demo.png?w=636" src="https://quintessens.files.wordpress.com/2020/01/blog_demo.png?w=936" alt="" class="wp-image-2873" srcset="https://quintessens.files.wordpress.com/2020/01/blog_demo.png 936w, https://quintessens.files.wordpress.com/2020/01/blog_demo.png?w=150 150w, https://quintessens.files.wordpress.com/2020/01/blog_demo.png?w=300 300w, https://quintessens.files.wordpress.com/2020/01/blog_demo.png?w=768 768w" sizes="(max-width: 936px) 100vw, 936px" /></figure>
  1359.  
  1360.  
  1361.  
  1362. <p>One item to be removed from my back-log. Happy development <img src="https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
  1363. ]]></content:encoded>
  1364. <wfw:commentRss>https://quintessens.wordpress.com/2020/01/15/getting-the-select2-to-tree-working-in-xpages/feed/</wfw:commentRss>
  1365. <slash:comments>3</slash:comments>
  1366. <media:content url="https://1.gravatar.com/avatar/7e6954ce3d50c2f8a30613f9c097ed76e101ebf75e6f790c056476352d53f969?s=96&#38;d=identicon&#38;r=G" medium="image">
  1367. <media:title type="html">quintessens</media:title>
  1368. </media:content>
  1369.  
  1370. <media:content url="https://quintessens.files.wordpress.com/2020/01/blog_example.png?w=285" medium="image" />
  1371.  
  1372. <media:content url="https://quintessens.files.wordpress.com/2020/01/blog_script.png?w=672" medium="image" />
  1373.  
  1374. <media:content url="https://quintessens.files.wordpress.com/2020/01/blog_rpc.png?w=1024" medium="image" />
  1375.  
  1376. <media:content url="https://quintessens.files.wordpress.com/2020/01/blog_demo.png?w=936" medium="image" />
  1377. </item>
  1378. <item>
  1379. <title>Data for Bootstrap Treeview from a Notes View?</title>
  1380. <link>https://quintessens.wordpress.com/2020/01/10/data-for-bootstrap-treeview-from-a-notes-view/</link>
  1381. <comments>https://quintessens.wordpress.com/2020/01/10/data-for-bootstrap-treeview-from-a-notes-view/#comments</comments>
  1382. <dc:creator><![CDATA[Patrick Kwinten]]></dc:creator>
  1383. <pubDate>Fri, 10 Jan 2020 10:07:40 +0000</pubDate>
  1384. <category><![CDATA[XPages]]></category>
  1385. <category><![CDATA[bootstrap]]></category>
  1386. <category><![CDATA[JavaScript]]></category>
  1387. <category><![CDATA[jquery]]></category>
  1388. <category><![CDATA[notesview]]></category>
  1389. <category><![CDATA[treeview]]></category>
  1390. <guid isPermaLink="false">http://quintessens.wordpress.com/?p=2841</guid>
  1391.  
  1392. <description><![CDATA[In a modernization project (increase of browser compatibility) I needed to find a solution for a list of links, categorized and sorted like a Notes View. Since I already use Bootstrap as CSS framework I decided to check the following&#8230;  <p class="more-link"><a href="https://quintessens.wordpress.com/2020/01/10/data-for-bootstrap-treeview-from-a-notes-view/">Continue reading <span class="meta-nav">&#8594;</span></a></p>]]></description>
  1393. <content:encoded><![CDATA[
  1394. <p>In a modernization project (increase of browser compatibility) I needed to find a solution for a list of links, categorized and sorted like a Notes View.</p>
  1395.  
  1396.  
  1397.  
  1398. <p>Since I already use Bootstrap as CSS framework I decided to check the following Bootstrap Treeview project: <a href="https://github.com/jonmiles/bootstrap-treeview">https://github.com/jonmiles/bootstrap-treeview</a> .&nbsp; I was satisfied with the following example(s):</p>
  1399.  
  1400.  
  1401.  
  1402. <figure class="wp-block-image"><img data-attachment-id="2844" data-permalink="https://quintessens.wordpress.com/2020/01/10/data-for-bootstrap-treeview-from-a-notes-view/treeview_ex/" data-orig-file="https://quintessens.files.wordpress.com/2020/01/treeview_ex.png" data-orig-size="954,307" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="treeview_ex" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2020/01/treeview_ex.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2020/01/treeview_ex.png?w=636" src="https://quintessens.files.wordpress.com/2020/01/treeview_ex.png" alt="treeview_ex.png" class="wp-image-2844" /></figure>
  1403.  
  1404.  
  1405.  
  1406. <p>The initialisation is pretty simple:</p>
  1407.  
  1408.  
  1409.  
  1410. <figure class="wp-block-image"><img data-attachment-id="2848" data-permalink="https://quintessens.wordpress.com/2020/01/10/data-for-bootstrap-treeview-from-a-notes-view/snipp01/" data-orig-file="https://quintessens.files.wordpress.com/2020/01/snipp01.png" data-orig-size="673,393" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="snipp01" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2020/01/snipp01.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2020/01/snipp01.png?w=636" src="https://quintessens.files.wordpress.com/2020/01/snipp01.png" alt="snipp01" class="wp-image-2848" /></figure>
  1411.  
  1412.  
  1413.  
  1414. <p>Now I just needed to set up a REST service to provide me the data. The service is setup on an XPage and bounded to a Java class:</p>
  1415.  
  1416.  
  1417.  
  1418. <figure class="wp-block-image"><img data-attachment-id="2849" data-permalink="https://quintessens.wordpress.com/2020/01/10/data-for-bootstrap-treeview-from-a-notes-view/snipp02/" data-orig-file="https://quintessens.files.wordpress.com/2020/01/snipp02.png" data-orig-size="466,142" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="snipp02" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2020/01/snipp02.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2020/01/snipp02.png?w=466" src="https://quintessens.files.wordpress.com/2020/01/snipp02.png" alt="snipp02" class="wp-image-2849" /></figure>
  1419.  
  1420.  
  1421.  
  1422. <p>The Java class I will reuse for providing multiple data streams so it detects the different method parameters:</p>
  1423.  
  1424.  
  1425.  
  1426. <figure class="wp-block-image"><img data-attachment-id="2850" data-permalink="https://quintessens.wordpress.com/2020/01/10/data-for-bootstrap-treeview-from-a-notes-view/snipp03/" data-orig-file="https://quintessens.files.wordpress.com/2020/01/snipp03.png" data-orig-size="578,365" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="snipp03" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2020/01/snipp03.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2020/01/snipp03.png?w=578" src="https://quintessens.files.wordpress.com/2020/01/snipp03.png" alt="snipp03" class="wp-image-2850" /></figure>
  1427.  
  1428.  
  1429.  
  1430. <p>As mentioned the data for the list comes from a Notes View. As you all know views entries have different characteristics which I have to bear in mind:</p>
  1431.  
  1432.  
  1433.  
  1434. <ul><li>Documents can land anywhere in the view since it is categorized on a text field where the multiple levels can set individually eg Europe\\Sweden\\Stockholm or Afrika\\Johannesburg.</li><li>The view also holds links for other menus organized under a category so I decided to us a viewnavigator and start collecting data from a specific category.</li><li>For each entry in the view I have to check what type it is: category, document or total. The last one is not of my interest so I have to skip if that option occurs.</li><li>The columnindentlevel tells me all about where I am in the view in comparison with the columnindentlevel of the previous entry. Here are the scenarios:</li></ul>
  1435.  
  1436.  
  1437.  
  1438. <p>// case 1: current indent level &lt; columnindentlevel<br>
  1439. // -&gt; new category, propobably start situation<br>
  1440. // case 2: current indent level = column indentlevel<br>
  1441. // -&gt; new category (sibling) but close the previous<br>
  1442. // one first (just one level)<br>
  1443. // case 3: current indent level &gt; column indent<br>
  1444. // level -&gt; new category but closes the previous<br>
  1445. // one(s) first. how many depends on difference curr<br>
  1446. // and column level</p>
  1447.  
  1448.  
  1449.  
  1450. <p>Ofcourse categories behave different that documents.</p>
  1451.  
  1452.  
  1453.  
  1454. <p>So here is the code:</p>
  1455.  
  1456.  
  1457.  
  1458. <figure class="wp-block-image"><img data-attachment-id="2853" data-permalink="https://quintessens.wordpress.com/2020/01/10/data-for-bootstrap-treeview-from-a-notes-view/serv01/" data-orig-file="https://quintessens.files.wordpress.com/2020/01/serv01.png" data-orig-size="867,1044" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="serv01" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2020/01/serv01.png?w=249" data-large-file="https://quintessens.files.wordpress.com/2020/01/serv01.png?w=636" src="https://quintessens.files.wordpress.com/2020/01/serv01.png" alt="serv01.PNG" class="wp-image-2853" /></figure>
  1459.  
  1460.  
  1461.  
  1462. <figure class="wp-block-image"><img data-attachment-id="2854" data-permalink="https://quintessens.wordpress.com/2020/01/10/data-for-bootstrap-treeview-from-a-notes-view/serv02/" data-orig-file="https://quintessens.files.wordpress.com/2020/01/serv02.png" data-orig-size="850,1014" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="serv02" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2020/01/serv02.png?w=251" data-large-file="https://quintessens.files.wordpress.com/2020/01/serv02.png?w=636" src="https://quintessens.files.wordpress.com/2020/01/serv02.png" alt="serv02" class="wp-image-2854" /></figure>
  1463.  
  1464.  
  1465.  
  1466. <figure class="wp-block-image"><img data-attachment-id="2855" data-permalink="https://quintessens.wordpress.com/2020/01/10/data-for-bootstrap-treeview-from-a-notes-view/serv03/" data-orig-file="https://quintessens.files.wordpress.com/2020/01/serv03.png" data-orig-size="855,899" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="serv03" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2020/01/serv03.png?w=285" data-large-file="https://quintessens.files.wordpress.com/2020/01/serv03.png?w=636" src="https://quintessens.files.wordpress.com/2020/01/serv03.png" alt="serv03.PNG" class="wp-image-2855" /></figure>
  1467.  
  1468.  
  1469.  
  1470. <p>Some notes:</p>
  1471.  
  1472.  
  1473.  
  1474. <ul><li>I have set the header of the REST service to text/html and the plugin needs a JavaScript object. Therefor capture my data response in an eval() method.</li><li>A target attribute is not provided by the plugin, so I add one myself. Categories have the # as href so based on that info I include a target attribute or not. I do this via a function:</li></ul>
  1475.  
  1476.  
  1477.  
  1478. <figure class="wp-block-image"><img data-attachment-id="2856" data-permalink="https://quintessens.wordpress.com/2020/01/10/data-for-bootstrap-treeview-from-a-notes-view/snipp04/" data-orig-file="https://quintessens.files.wordpress.com/2020/01/snipp04.png" data-orig-size="375,271" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="snipp04" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2020/01/snipp04.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2020/01/snipp04.png?w=375" src="https://quintessens.files.wordpress.com/2020/01/snipp04.png" alt="snipp04" class="wp-image-2856" /></figure>
  1479.  
  1480.  
  1481.  
  1482. <ul><li>If the treeview is collapsed there is no anchor element for underlying list-items so you cannot add the target for all links.</li><li>Also when collapsing and expanding a category the added target attributes are gone. So for opening of every category you need to re-apply the href attribute for underlying anchors.</li><li>A category can be opened via a &#8216;twistie&#8217; image or the text link so we need to register an action on these onclick events</li></ul>
  1483.  
  1484.  
  1485.  
  1486. <figure class="wp-block-image"><img data-attachment-id="2858" data-permalink="https://quintessens.wordpress.com/2020/01/10/data-for-bootstrap-treeview-from-a-notes-view/snipp05/" data-orig-file="https://quintessens.files.wordpress.com/2020/01/snipp05.png" data-orig-size="442,134" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="snipp05" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2020/01/snipp05.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2020/01/snipp05.png?w=442" src="https://quintessens.files.wordpress.com/2020/01/snipp05.png" alt="snipp05" class="wp-image-2858" /></figure>
  1487.  
  1488.  
  1489.  
  1490. <figure class="wp-block-image"><img data-attachment-id="2859" data-permalink="https://quintessens.wordpress.com/2020/01/10/data-for-bootstrap-treeview-from-a-notes-view/snipp06/" data-orig-file="https://quintessens.files.wordpress.com/2020/01/snipp06.png" data-orig-size="416,64" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="snipp06" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2020/01/snipp06.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2020/01/snipp06.png?w=416" src="https://quintessens.files.wordpress.com/2020/01/snipp06.png" alt="snipp06" class="wp-image-2859" /></figure>
  1491.  
  1492.  
  1493.  
  1494. <p>The result is a nice looking &#8216;Notes View data-driven&#8217; treeview with Bootstrap styling:</p>
  1495.  
  1496.  
  1497.  
  1498. <figure class="wp-block-image"><img data-attachment-id="2860" data-permalink="https://quintessens.wordpress.com/2020/01/10/data-for-bootstrap-treeview-from-a-notes-view/snipp07/" data-orig-file="https://quintessens.files.wordpress.com/2020/01/snipp07.png" data-orig-size="964,442" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="snipp07" data-image-description="" data-image-caption="" data-medium-file="https://quintessens.files.wordpress.com/2020/01/snipp07.png?w=300" data-large-file="https://quintessens.files.wordpress.com/2020/01/snipp07.png?w=636" src="https://quintessens.files.wordpress.com/2020/01/snipp07.png" alt="snipp07" class="wp-image-2860" /></figure>
  1499.  
  1500.  
  1501.  
  1502. <p>Happy coding <img src="https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
  1503.  
  1504.  
  1505.  
  1506. <p>PS. I noticed I have a lot of unused local variables in my code, you may clean that up <img src="https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/1f642.png" alt="🙂" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
  1507. ]]></content:encoded>
  1508. <wfw:commentRss>https://quintessens.wordpress.com/2020/01/10/data-for-bootstrap-treeview-from-a-notes-view/feed/</wfw:commentRss>
  1509. <slash:comments>3</slash:comments>
  1510. <media:content url="https://1.gravatar.com/avatar/7e6954ce3d50c2f8a30613f9c097ed76e101ebf75e6f790c056476352d53f969?s=96&#38;d=identicon&#38;r=G" medium="image">
  1511. <media:title type="html">quintessens</media:title>
  1512. </media:content>
  1513.  
  1514. <media:content url="https://quintessens.files.wordpress.com/2020/01/treeview_ex.png" medium="image">
  1515. <media:title type="html">treeview_ex.png</media:title>
  1516. </media:content>
  1517.  
  1518. <media:content url="https://quintessens.files.wordpress.com/2020/01/snipp01.png" medium="image">
  1519. <media:title type="html">snipp01</media:title>
  1520. </media:content>
  1521.  
  1522. <media:content url="https://quintessens.files.wordpress.com/2020/01/snipp02.png" medium="image">
  1523. <media:title type="html">snipp02</media:title>
  1524. </media:content>
  1525.  
  1526. <media:content url="https://quintessens.files.wordpress.com/2020/01/snipp03.png" medium="image">
  1527. <media:title type="html">snipp03</media:title>
  1528. </media:content>
  1529.  
  1530. <media:content url="https://quintessens.files.wordpress.com/2020/01/serv01.png" medium="image">
  1531. <media:title type="html">serv01.PNG</media:title>
  1532. </media:content>
  1533.  
  1534. <media:content url="https://quintessens.files.wordpress.com/2020/01/serv02.png" medium="image">
  1535. <media:title type="html">serv02</media:title>
  1536. </media:content>
  1537.  
  1538. <media:content url="https://quintessens.files.wordpress.com/2020/01/serv03.png" medium="image">
  1539. <media:title type="html">serv03.PNG</media:title>
  1540. </media:content>
  1541.  
  1542. <media:content url="https://quintessens.files.wordpress.com/2020/01/snipp04.png" medium="image">
  1543. <media:title type="html">snipp04</media:title>
  1544. </media:content>
  1545.  
  1546. <media:content url="https://quintessens.files.wordpress.com/2020/01/snipp05.png" medium="image">
  1547. <media:title type="html">snipp05</media:title>
  1548. </media:content>
  1549.  
  1550. <media:content url="https://quintessens.files.wordpress.com/2020/01/snipp06.png" medium="image">
  1551. <media:title type="html">snipp06</media:title>
  1552. </media:content>
  1553.  
  1554. <media:content url="https://quintessens.files.wordpress.com/2020/01/snipp07.png" medium="image">
  1555. <media:title type="html">snipp07</media:title>
  1556. </media:content>
  1557. </item>
  1558. <item>
  1559. <title>10 minutes pitch for Domino</title>
  1560. <link>https://quintessens.wordpress.com/2019/10/29/10-minutes-pitch-for-domino/</link>
  1561. <comments>https://quintessens.wordpress.com/2019/10/29/10-minutes-pitch-for-domino/#comments</comments>
  1562. <dc:creator><![CDATA[Patrick Kwinten]]></dc:creator>
  1563. <pubDate>Tue, 29 Oct 2019 08:08:09 +0000</pubDate>
  1564. <category><![CDATA[IBM Notes]]></category>
  1565. <category><![CDATA[Lotus Domino]]></category>
  1566. <category><![CDATA[presentation]]></category>
  1567. <guid isPermaLink="false">http://quintessens.wordpress.com/?p=2837</guid>
  1568.  
  1569. <description><![CDATA[Uhm what did I forget to mention in my im-pressentation? What is Notes Domino and what is special about it]]></description>
  1570. <content:encoded><![CDATA[<p>Uhm what did I forget to mention in my im-pressentation? <a title="What is Notes Domino and what is special about it" href="https://quintessens.files.wordpress.com/2019/10/what-is-notes-domino-and-what-is-special-about-it.pptx">What is Notes Domino and what is special about it</a></p>
  1571. ]]></content:encoded>
  1572. <wfw:commentRss>https://quintessens.wordpress.com/2019/10/29/10-minutes-pitch-for-domino/feed/</wfw:commentRss>
  1573. <slash:comments>2</slash:comments>
  1574. <media:content url="https://1.gravatar.com/avatar/7e6954ce3d50c2f8a30613f9c097ed76e101ebf75e6f790c056476352d53f969?s=96&#38;d=identicon&#38;r=G" medium="image">
  1575. <media:title type="html">quintessens</media:title>
  1576. </media:content>
  1577. </item>
  1578. </channel>
  1579. </rss>
  1580.  

If you would like to create a banner that links to this page (i.e. this validation result), do the following:

  1. Download the "valid RSS" banner.

  2. Upload the image to your own server. (This step is important. Please do not link directly to the image on this server.)

  3. Add this HTML to your page (change the image src attribute if necessary):

If you would like to create a text link instead, here is the URL you can use:

http://www.feedvalidator.org/check.cgi?url=http%3A//quintessens.wordpress.com/feed

Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda