{"id":10201,"date":"2025-01-21T21:36:38","date_gmt":"2025-01-21T19:36:38","guid":{"rendered":"https:\/\/u-labs.de\/portal\/?p=10201"},"modified":"2025-01-21T21:36:38","modified_gmt":"2025-01-21T19:36:38","slug":"hcl-cnx-eigener-java-code-spi-events","status":"publish","type":"post","link":"https:\/\/u-labs.de\/portal\/hcl-cnx-eigener-java-code-spi-events\/","title":{"rendered":"Eigenen Java-Code bei HCL Connections Ereignissen ausf\u00fchren mit SPI-Events"},"content":{"rendered":"<p>HCL Connections l\u00e4sst sich bereits umfangreich konfigurieren und anpassen, etwa \u00fcber die XML-Dateien. Noch weiter geht die SPI-Schnittstelle: Sie erm\u00f6glicht es, Java-Code bei bestimmten Ereignissen auszuf\u00fchren &#8211; beispielsweise dem Hochladen einer Datei, wenn neue Mitglieder zu einer Community hinzugef\u00fcgt werden, usw. Damit hat man nahezu grenzenlose Freiheiten, um CNX in andere Systeme zu integrieren.<\/p>\n<h2 class=\"wp-block-heading\">So funktionierten SPI-Ereignisse<\/h2>\n<p>Am Anfang steht eine eigene Java-Klasse, welche die Schnittstelle  <code class=\"\" data-line=\"\">com.ibm.connections.spi.events.EventHandler<\/code> implementiert. Sie stellt eine Methode <code class=\"\" data-line=\"\">handleEvent<\/code> zur Verf\u00fcgung &#8211; diese wird beim Eintreten eines Ereignisses zusammen mit einem <code class=\"\" data-line=\"\">Event<\/code> Objekt aufgerufen. F\u00fcr den Verweis auf die <code class=\"\" data-line=\"\">EventHandler<\/code>-Schnittstelle muss <code class=\"\" data-line=\"\">lc.events.spi.jar<\/code> im Java ClassPath liegen. <\/p>\n<p>In der <code class=\"\" data-line=\"\">events-config.xml<\/code> definiert ein Event-Handler, welche Ereignisse eure Anwendung empfangen soll. Au\u00dferdem die Art der Ausf\u00fchrung: Pre-Events k\u00f6nnen Daten ver\u00e4ndern, Post-Events durch ihre asynchrone Ausf\u00fchrung nach dem Ereignis nicht. Aus eurem Code und dem Interface muss eine Jar erzeugt und als gemeinsame Bibliothek in WebSphere hinterlegt werden. Schlussendlich ist es erforderlich, diese in der News-Anwendung zu aktivieren. Nach dessen Neustart l\u00e4uft euer Code.<\/p>\n<p>Die Ereignisse werden von der News-Anwendung abgearbeitet. S\u00e4mtliche Log-Eintr\u00e4ge aus dem eigenen Code landen daher im InfraCluster (<code class=\"\" data-line=\"\">SystemOut.log<\/code>).<\/p>\n<h2 class=\"wp-block-heading\">Erzeugen eines Jar-Archives mit eigenem Java-Code<\/h2>\n<p>Zur Demonstration habe ich eine simple Klasse <code class=\"\" data-line=\"\">AuditHandler<\/code> (Paket <code class=\"\" data-line=\"\">classes<\/code>) als Post-EventHandler entwickelt. Sie reagiert auf neu hochgeladene Dateien (Ereignis <code class=\"\" data-line=\"\">files.file.created<\/code>) und schreibt uns dazu Informationen (Nutzername, ID von Datei\/Bibliothek, Dateiname, Pfad im Dateisystem, Mime-Type) in das Log des InfraCluster. Wenn man nur auf bestimmte Ereignisse reagieren m\u00f6chte, k\u00f6nnen diese in der <code class=\"\" data-line=\"\">events-config.xml<\/code> angegeben werden. Die Filterung hier dient als Beispiel zur Demonstration, da man ggf. mehrere abonniert und im Code differenzieren muss.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-java\" data-line=\"\">package classes;\n\nimport com.ibm.connections.spi.events.EventHandler;\nimport com.ibm.connections.spi.events.EventHandlerException;\nimport com.ibm.connections.spi.events.EventHandlerInitException;\nimport com.ibm.connections.spi.events.object.Attachment;\nimport com.ibm.connections.spi.events.object.Event;\nimport java.io.IOException;\nimport java.io.Serializable;\n\nimport java.util.logging.Level;\nimport java.util.logging.Logger;\n\npublic class AuditHandler implements EventHandler, Serializable {\n  private static Logger log = Logger.getLogger(&quot;AuditHandler&quot;);\n\n  public void destroy() {\n    log.info(&quot;Destroy MailFileHandler&quot;);\n  }\n  \n  public void init() throws EventHandlerInitException {\n    log.info(&quot;START init with java &quot; + System.getProperty(&quot;java.version&quot;));\n  }\n  \n  public void handleEvent(Event event) throws EventHandlerException {\n    String fileId = event.getItem().getID();\n    String libraryId = event.getContainer().getID();\n    String appName = event.getSource().getName();\n    Object eventType = event.getType(); \/\/ CREATE\n    String actorUserId = event.getActor().getExtID();\n    String actorDisplayName = event.getActor().getDisplayName();\n\n    if(event.getName().equals(&quot;files.file.created&quot;)) {\n        log.info(&quot;Handling SPI event: &quot; + event.getName() + &quot; from app &quot; + appName);\n        System.out.println(&quot;  Actor Id: &quot; + actorUserId);\n        System.out.println(&quot;  DisplayName: &quot; + actorDisplayName);\n        System.out.println(&quot;  FileId: &quot; + fileId);\n        System.out.println(&quot;  FileLibId: &quot; + libraryId);\n\n        if (event.getAttachmentData() == null || event.getAttachmentData().getAdded().isEmpty()) {\n          log.warning(&quot;No attachment data available for the event. Cannot retrieve old filename or file system location.&quot;);\n          return;\n        }\n\n        Attachment attachment = event.getAttachmentData().getAdded().iterator().next();\n        System.out.println(&quot;Attachment object&quot;);\n        System.out.println(attachment.getFileName());\n        System.out.println(attachment.getFileSystemLocation());\n        System.out.println(attachment.getContentType());\n      }else {\n        System.out.println(&quot;Skipping SPI-Event: &quot; + event.getName());\n      }\n  }\n}<\/code><\/pre>\n<p>Damit aus diesem Code eine Jar-Datei gebaut werden kann, ist die anfangs erw\u00e4hnte <code class=\"\" data-line=\"\">lc.events.spi.jar<\/code> Bibliothek notwendig. Ihr findet sie im entpackten Ear-Ordner jeder CNX-Anwendung: Blogs, Wikis, Dateien, usw.<sup data-fn=\"bcb2c51c-e47e-4a71-923e-e99b61982384\" class=\"fn\"><a href=\"#bcb2c51c-e47e-4a71-923e-e99b61982384\" id=\"bcb2c51c-e47e-4a71-923e-e99b61982384-link\">1<\/a><\/sup> Es spielt keine Rolle, aus welcher die Jar kopiert wird.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-java\" data-line=\"\">find \/opt -name lc.events.spi.jar\n\/opt\/IBM\/WebSphere\/AppServer\/profiles\/CnxNode01\/installedApps\/CnxCell\/Blogs.ear\/lc.events.spi.jar\n\/opt\/IBM\/WebSphere\/AppServer\/profiles\/CnxNode01\/installedApps\/CnxCell\/Activities.ear\/lc.events.spi.jar\n\/opt\/IBM\/WebSphere\/AppServer\/profiles\/CnxNode01\/installedApps\/CnxCell\/Files.ear\/lc.events.spi.jar\n...<\/code><\/pre>\n<p>Java ben\u00f6tigt eine MANIFEST.MF Datei f\u00fcr Jars mit Angabe des Einstiegspunktes sowie der externen Bibliothek, damit diese im ClassPath verf\u00fcgbar ist:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-java\" data-line=\"\">Manifest-Version: 1.0\nClass-Path: lc.events.spi.jar\nMain-Class: classes.AuditHandler\n<\/code><\/pre>\n<p>Zum bauen wird ein JDK ben\u00f6tigt, und zwar ein altes JDK 8. Das verwenden CNX\/WAS &#8211; diese k\u00f6nnen euren Code nicht laden, wenn dessen Jar mit einer neueren Version gebaut wurde. OpenJDK jdk8u362-b09 hat in meinem Test funktioniert. Folgender Aufruf geht davon aus, dass <code class=\"\" data-line=\"\">AuditHandler.java<\/code> im Ordner <code class=\"\" data-line=\"\">classes<\/code> liegt, <code class=\"\" data-line=\"\">lc.events.spi.jar <\/code>auf der aktuellen Ebene.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-java\" data-line=\"\">jar cfm AuditHandler.jar MANIFEST.MF &quot;classes\/*.class&quot;\njar uf AuditHandler.jar lc.events.spi.jar<\/code><\/pre>\n<p>Es macht Sinn, dies f\u00fcr die Entwicklung in einem Skript durchzuf\u00fchren. Insbesondere, wenn das verwendete JDK nicht global in <code class=\"\" data-line=\"\">$PATH<\/code> liegt. Dort k\u00f6nnen auch die erzeugten Class-Dateien bereinigt werden &#8211; so liegt bei jeder Ausf\u00fchrung ein sauberer Build vor.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-java\" data-line=\"\">#!\/bin\/bash\nrm &quot;classes\/*.class&quot;\n\nset -e \nset -o pipefail\nPATH=$PATH:~\/jdk8u362-b09\/bin\n\njavac -cp .\/FILES_lc.events.spi.jar &quot;classes\/*.java&quot;\nrm AuditHandler.jar\njar cfm AuditHandler.jar MANIFEST.MF &quot;classes\/*.class&quot;\njar uf AuditHandler.jar lc.events.spi.jar<\/code><\/pre>\n<h2 class=\"wp-block-heading\">Anlegen des Event-Handlers in CNX<\/h2>\n<p>In <code class=\"\" data-line=\"\">events-config.xml<\/code> im Knoten <code class=\"\" data-line=\"\">&lt;postHandlers&gt;<\/code> eure Klasse registrieren:<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-xml\" data-line=\"\">&lt;postHandler class=&quot;classes.AuditHandler&quot; enabled=&quot;true&quot; invoke=&quot;ASYNC&quot; name=&quot;AuditHandler&quot;&gt;\n    &lt;subscriptions&gt;\n       &lt;subscription eventName=&quot;*&quot; source=&quot;FILES&quot; type=&quot;*&quot;\/&gt;\n    &lt;\/subscriptions&gt;\n&lt;\/postHandler&gt;<\/code><\/pre>\n<p>Dieses Beispiel registriert sich f\u00fcr alle Ereignisse der Files-Anwendung. Beides l\u00e4sst sich filtern bzw. erweitern, eine Liste aller unterst\u00fctzten Anwendungen &amp; Ereignisse ist in der API Dokumentation zu finden.<sup data-fn=\"0e6224ba-54be-4eec-ba6f-f3cd29ecf425\" class=\"fn\"><a href=\"#0e6224ba-54be-4eec-ba6f-f3cd29ecf425\" id=\"0e6224ba-54be-4eec-ba6f-f3cd29ecf425-link\">2<\/a><\/sup> Nach dem \u00c4ndern der Datei auf dem Deployment-Manager muss in der ISC ein sync durchgef\u00fchrt und CNX neu gestartet werden.<\/p>\n<h2 class=\"wp-block-heading\">Registrieren der Jar in WebSphere<\/h2>\n<p>Legt einen neuen Ordner an, der f\u00fcr alle WAS-Nodes verf\u00fcgbar ist &#8211; z.B. im shared directory. Der Pfad ist frei w\u00e4hlbar, so lange der WAS-Node darauf zugreifen kann (oder eben die Nodes). In diesen Ordner wird die erzeugte <code class=\"\" data-line=\"\">AuditHandler.jar<\/code> kopiert.<\/p>\n<p>In der ISC unter <strong>Environment > Shared libraries<\/strong> einen neuen Eintrag mit dem Scope cells an, bei dem dieser Pfad zur Jar-Datei eingef\u00fcgt wird. Im Falle von Abh\u00e4ngigkeiten muss deren Pfad in eine neue Zeile. Hierf\u00fcr kann eine WAS-Variable (<strong>Environment > WebSphere variables<\/strong>) angelegt und im Classpath-Feld im Format <code class=\"\" data-line=\"\">${Varname}<\/code> verwendet werden. <\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/11\/shared-lib2.avif\"><img loading=\"lazy\" decoding=\"async\" width=\"669\" height=\"748\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/11\/shared-lib2.avif\" alt=\"\" class=\"wp-image-14037\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/11\/shared-lib2.avif 669w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/11\/shared-lib2-268x300.jpg 268w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/11\/shared-lib2-322x360.jpg 322w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/11\/shared-lib2-152x170.jpg 152w\" sizes=\"auto, (max-width: 669px) 100vw, 669px\" \/><\/a><\/figure>\n<\/div>\n<h2 class=\"wp-block-heading\">EventHandler in der News-Anwendung aktivieren<\/h2>\n<p>Damit die Jar aufgerufen wird, muss sie in der ISC unter <strong>Applications > Application Types > WebSphere enterprise applications<\/strong> in der <strong>News<\/strong> Anwendung bei <strong>Shared library references<\/strong> aktiviert werden.<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/11\/lib-ref-start.avif\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"245\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/11\/lib-ref-start-1024x245.jpg\" alt=\"\" class=\"wp-image-14046\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/11\/lib-ref-start-1024x245.jpg 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/11\/lib-ref-start-300x72.jpg 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/11\/lib-ref-start-768x184.jpg 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/11\/lib-ref-start-640x153.jpg 640w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/11\/lib-ref-start-709x170.jpg 709w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/11\/lib-ref-start.avif 1139w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n<p>Hat die vorherige Registrierung funktioniert (Neustart), taucht in der Liste <em>Available<\/em> nun der <strong>AuditHandler<\/strong> auf. Durch anklicken und Pfeil nach Rechts wird er aktiviert. <\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/11\/lib-mapping.avif\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"390\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/11\/lib-mapping-1024x390.jpg\" alt=\"\" class=\"wp-image-14042\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/11\/lib-mapping-1024x390.jpg 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/11\/lib-mapping-300x114.jpg 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/11\/lib-mapping-768x293.jpg 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/11\/lib-mapping-640x244.jpg 640w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/11\/lib-mapping-446x170.jpg 446w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/11\/lib-mapping.avif 1141w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n<p>Nach dem Neustart der <strong>News<\/strong> Anwendung sieht man in SystemOut.log die Informationen, welche \u00fcber das Ereigniss \u00fcbermittelt werden:<\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/11\/systemout-log.avif\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"258\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/11\/systemout-log-1024x258.jpg\" alt=\"\" class=\"wp-image-14043\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/11\/systemout-log-1024x258.jpg 1024w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/11\/systemout-log-300x76.jpg 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/11\/systemout-log-768x194.jpg 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/11\/systemout-log-640x161.jpg 640w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/11\/systemout-log-674x170.jpg 674w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/11\/systemout-log.avif 1090w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n<\/div>\n<p>Es stehen weitere zur Verf\u00fcgung. Die <em>Events Reference<\/em> Dokumentation listet diese ausf\u00fchrlich auf.<sup data-fn=\"f8429c83-9525-4883-a4a8-2542618999d0\" class=\"fn\"><a href=\"#f8429c83-9525-4883-a4a8-2542618999d0\" id=\"f8429c83-9525-4883-a4a8-2542618999d0-link\">3<\/a><\/sup><\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/11\/event-doc.avif\"><img loading=\"lazy\" decoding=\"async\" width=\"873\" height=\"302\" src=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/11\/event-doc.avif\" alt=\"\" class=\"wp-image-14044\" srcset=\"https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/11\/event-doc.avif 873w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/11\/event-doc-300x104.jpg 300w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/11\/event-doc-768x266.jpg 768w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/11\/event-doc-640x221.jpg 640w, https:\/\/u-labs.de\/portal\/wp-content\/uploads\/2024\/11\/event-doc-491x170.jpg 491w\" sizes=\"auto, (max-width: 873px) 100vw, 873px\" \/><\/a><\/figure>\n<\/div>\n<h2 class=\"wp-block-heading\">Weitere Informationen<\/h2>\n<p>\u00dcber Properties ist es anscheinend m\u00f6glich, dem Event Parameter mitzugeben. Ich habe das als Codeschnipsel wo kopiert, eine M\u00f6glichkeit zum Auslesen im Java-Code fehlt. Ist eventuell ein n\u00fctzlicher Ansatz, falls man das braucht. <\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-xml\" data-line=\"\">&lt;postHandler class=&quot;classes.AuditHandler&quot; enabled=&quot;true&quot; invoke=&quot;ASYNC&quot; name=&quot;AuditHandler&quot;&gt;\n    &lt;subscriptions&gt;\n       &lt;subscription eventName=&quot;*&quot; source=&quot;FILES&quot; type=&quot;*&quot;\/&gt;\n    &lt;\/subscriptions&gt;\n    &lt;properties&gt;\n       &lt;property name=&quot;foo&quot;&gt;bar&lt;\/property&gt;\n    &lt;\/properties&gt;\n&lt;\/postHandler&gt;<\/code><\/pre>\n<h2 class=\"wp-block-heading\">Quellen\/Dokumentation<\/h2>\n<ol class=\"wp-block-footnotes\">\n<li id=\"bcb2c51c-e47e-4a71-923e-e99b61982384\">https:\/\/ds_infolib.hcltechsw.com\/ldd\/lcwiki.nsf\/xpAPIViewer.xsp?lookupName=HCL+Connections+7.0+API+Documentation#action=openDocument&amp;res_title=Programming_an_event_handler_70&amp;content=apicontent <a href=\"#bcb2c51c-e47e-4a71-923e-e99b61982384-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 1 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"0e6224ba-54be-4eec-ba6f-f3cd29ecf425\">https:\/\/ds_infolib.hcltechsw.com\/ldd\/lcwiki.nsf\/xpAPIViewer.xsp?lookupName=HCL+Connections+7.0+API+Documentation#action=openDocument&amp;res_title=Deploying_an_event_handler_70&amp;content=apicontent <a href=\"#0e6224ba-54be-4eec-ba6f-f3cd29ecf425-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 2 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<li id=\"f8429c83-9525-4883-a4a8-2542618999d0\">https:\/\/ds_infolib.hcltechsw.com\/ldd\/lcwiki.nsf\/xpAPIViewer.xsp?lookupName=HCL+Connections+7.0+API+Documentation#action=openDocument&amp;res_title=HCL_Connections_Event_Reference_-_Files_70&amp;content=apicontent <a href=\"#f8429c83-9525-4883-a4a8-2542618999d0-link\" aria-label=\"Zur Fu\u00dfnotenreferenz 3 navigieren\">\u21a9\ufe0e<\/a><\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>HCL Connections l\u00e4sst sich bereits umfangreich konfigurieren und anpassen, etwa \u00fcber die XML-Dateien. Noch weiter geht die SPI-Schnittstelle: Sie erm\u00f6glicht es, Java-Code bei bestimmten Ereignissen auszuf\u00fchren &#8211; beispielsweise dem Hochladen einer Datei, wenn neue Mitglieder zu einer Community hinzugef\u00fcgt werden, usw. Damit hat man nahezu grenzenlose Freiheiten, um CNX in andere Systeme zu integrieren. So &#8230;<\/p>\n","protected":false},"author":5,"featured_media":14505,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":"[{\"content\":\"https:\/\/ds_infolib.hcltechsw.com\/ldd\/lcwiki.nsf\/xpAPIViewer.xsp?lookupName=HCL+Connections+7.0+API+Documentation#action=openDocument&amp;res_title=Programming_an_event_handler_70&amp;content=apicontent\",\"id\":\"bcb2c51c-e47e-4a71-923e-e99b61982384\"},{\"content\":\"https:\/\/ds_infolib.hcltechsw.com\/ldd\/lcwiki.nsf\/xpAPIViewer.xsp?lookupName=HCL+Connections+7.0+API+Documentation#action=openDocument&amp;res_title=Deploying_an_event_handler_70&amp;content=apicontent\",\"id\":\"0e6224ba-54be-4eec-ba6f-f3cd29ecf425\"},{\"content\":\"https:\/\/ds_infolib.hcltechsw.com\/ldd\/lcwiki.nsf\/xpAPIViewer.xsp?lookupName=HCL+Connections+7.0+API+Documentation#action=openDocument&amp;res_title=HCL_Connections_Event_Reference_-_Files_70&amp;content=apicontent\",\"id\":\"f8429c83-9525-4883-a4a8-2542618999d0\"}]"},"categories":[765],"tags":[760],"class_list":["post-10201","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hcl-connections","tag-hcl-connections"],"_links":{"self":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/10201","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/comments?post=10201"}],"version-history":[{"count":24,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/10201\/revisions"}],"predecessor-version":[{"id":14507,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/posts\/10201\/revisions\/14507"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media\/14505"}],"wp:attachment":[{"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/media?parent=10201"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/categories?post=10201"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/u-labs.de\/portal\/wp-json\/wp\/v2\/tags?post=10201"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}