{"id":36824,"date":"2019-01-03T05:15:49","date_gmt":"2019-01-03T13:15:49","guid":{"rendered":"https:\/\/www.exoplatform.com\/blog\/?p=18162"},"modified":"2023-07-16T15:30:53","modified_gmt":"2023-07-16T13:30:53","slug":"how-to-integrate-angular-business-applications-in-exo-platform","status":"publish","type":"post","link":"https:\/\/www.exoplatform.com\/blog\/how-to-integrate-angular-business-applications-in-exo-platform\/","title":{"rendered":"How to integrate Angular business applications in eXo Platform"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"36824\" class=\"elementor elementor-36824\">\r\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-section elementor-top-section elementor-element elementor-element-c3fd84d elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"c3fd84d\" data-element_type=\"section\" id=\"sec-image-title\">\r\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\r\n\t\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-c2e497c\" data-id=\"c2e497c\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\r\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-9585f92 elementor-align-left elementor-widget elementor-widget-post-info\" data-id=\"9585f92\" data-element_type=\"widget\" id=\"author-time\" data-widget_type=\"post-info.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<link rel=\"stylesheet\" href=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/plugins\/elementor\/assets\/css\/widget-icon-list.min.css\"><link rel=\"stylesheet\" href=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/plugins\/elementor-pro\/assets\/css\/widget-theme-elements.min.css\">\t\t<ul class=\"elementor-inline-items elementor-icon-list-items elementor-post-info\">\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item elementor-repeater-item-a070ed2 elementor-inline-item\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text elementor-post-info__item elementor-post-info__item--type-custom\">\n\t\t\t\t\t\t\t\t\t\t<span class=\"bsf-rt-reading-time\"><span class=\"bsf-rt-display-label\" prefix=\"Reading Time\">\n\t\t<\/span> <span class=\"bsf-rt-display-time\" reading_time=\"1\"><\/span> \n\t\t<span class=\"bsf-rt-display-postfix\" postfix=\"min\"><\/span><\/span>\n\t\t  \n\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t<li class=\"elementor-icon-list-item elementor-repeater-item-c638fde elementor-inline-item\" itemprop=\"author\">\n\t\t\t\t\t\t<a href=\"https:\/\/www.exoplatform.com\/blog\/author\/ayoub-zayati\/\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text elementor-post-info__item elementor-post-info__item--type-author\">\n\t\t\t\t\t\t\t\t\t\tAyoub Zayati\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t<\/li>\n\t\t\t\t<li class=\"elementor-icon-list-item elementor-repeater-item-f24db26 elementor-inline-item\" itemprop=\"datePublished\">\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-calendar\"><\/i>\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text elementor-post-info__item elementor-post-info__item--type-date\">\n\t\t\t\t\t\t\t\t\t\tjanvier 3, 2019\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t<\/ul>\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-a95a6ff undertitle elementor-widget elementor-widget-heading\" data-id=\"a95a6ff\" data-element_type=\"widget\" id=\"bigtitle\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<style>\/*! elementor - v3.13.2 - 11-05-2023 *\/\r\n.elementor-heading-title{padding:0;margin:0;line-height:1}.elementor-widget-heading .elementor-heading-title[class*=elementor-size-]>a{color:inherit;font-size:inherit;line-height:inherit}.elementor-widget-heading .elementor-heading-title.elementor-size-small{font-size:15px}.elementor-widget-heading .elementor-heading-title.elementor-size-medium{font-size:19px}.elementor-widget-heading .elementor-heading-title.elementor-size-large{font-size:29px}.elementor-widget-heading .elementor-heading-title.elementor-size-xl{font-size:39px}.elementor-widget-heading .elementor-heading-title.elementor-size-xxl{font-size:59px}<\/style><h1 class=\"elementor-heading-title elementor-size-default\">How to integrate Angular business applications in eXo Platform<\/h1>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-90e9215 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"90e9215\" data-element_type=\"widget\" data-widget_type=\"divider.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<style>\/*! elementor - v3.13.2 - 11-05-2023 *\/\r\n.elementor-widget-divider{--divider-border-style:none;--divider-border-width:1px;--divider-color:#0c0d0e;--divider-icon-size:20px;--divider-element-spacing:10px;--divider-pattern-height:24px;--divider-pattern-size:20px;--divider-pattern-url:none;--divider-pattern-repeat:repeat-x}.elementor-widget-divider .elementor-divider{display:flex}.elementor-widget-divider .elementor-divider__text{font-size:15px;line-height:1;max-width:95%}.elementor-widget-divider .elementor-divider__element{margin:0 var(--divider-element-spacing);flex-shrink:0}.elementor-widget-divider .elementor-icon{font-size:var(--divider-icon-size)}.elementor-widget-divider .elementor-divider-separator{display:flex;margin:0;direction:ltr}.elementor-widget-divider--view-line_icon .elementor-divider-separator,.elementor-widget-divider--view-line_text .elementor-divider-separator{align-items:center}.elementor-widget-divider--view-line_icon .elementor-divider-separator:after,.elementor-widget-divider--view-line_icon .elementor-divider-separator:before,.elementor-widget-divider--view-line_text .elementor-divider-separator:after,.elementor-widget-divider--view-line_text .elementor-divider-separator:before{display:block;content:\"\";border-bottom:0;flex-grow:1;border-top:var(--divider-border-width) var(--divider-border-style) var(--divider-color)}.elementor-widget-divider--element-align-left .elementor-divider .elementor-divider-separator>.elementor-divider__svg:first-of-type{flex-grow:0;flex-shrink:100}.elementor-widget-divider--element-align-left .elementor-divider-separator:before{content:none}.elementor-widget-divider--element-align-left .elementor-divider__element{margin-left:0}.elementor-widget-divider--element-align-right .elementor-divider .elementor-divider-separator>.elementor-divider__svg:last-of-type{flex-grow:0;flex-shrink:100}.elementor-widget-divider--element-align-right .elementor-divider-separator:after{content:none}.elementor-widget-divider--element-align-right .elementor-divider__element{margin-right:0}.elementor-widget-divider:not(.elementor-widget-divider--view-line_text):not(.elementor-widget-divider--view-line_icon) .elementor-divider-separator{border-top:var(--divider-border-width) var(--divider-border-style) var(--divider-color)}.elementor-widget-divider--separator-type-pattern{--divider-border-style:none}.elementor-widget-divider--separator-type-pattern.elementor-widget-divider--view-line .elementor-divider-separator,.elementor-widget-divider--separator-type-pattern:not(.elementor-widget-divider--view-line) .elementor-divider-separator:after,.elementor-widget-divider--separator-type-pattern:not(.elementor-widget-divider--view-line) .elementor-divider-separator:before,.elementor-widget-divider--separator-type-pattern:not([class*=elementor-widget-divider--view]) .elementor-divider-separator{width:100%;min-height:var(--divider-pattern-height);-webkit-mask-size:var(--divider-pattern-size) 100%;mask-size:var(--divider-pattern-size) 100%;-webkit-mask-repeat:var(--divider-pattern-repeat);mask-repeat:var(--divider-pattern-repeat);background-color:var(--divider-color);-webkit-mask-image:var(--divider-pattern-url);mask-image:var(--divider-pattern-url)}.elementor-widget-divider--no-spacing{--divider-pattern-size:auto}.elementor-widget-divider--bg-round{--divider-pattern-repeat:round}.rtl .elementor-widget-divider .elementor-divider__text{direction:rtl}.e-con-inner>.elementor-widget-divider,.e-con>.elementor-widget-divider{width:var(--container-widget-width,100%);--flex-grow:var(--container-widget-flex-grow)}<\/style>\t\t<div class=\"elementor-divider\">\r\n\t\t\t<span class=\"elementor-divider-separator\">\r\n\t\t\t\t\t\t<\/span>\r\n\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-92e4635 elementor-widget elementor-widget-text-editor\" data-id=\"92e4635\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<style>\/*! elementor - v3.13.2 - 11-05-2023 *\/\r\n.elementor-widget-text-editor.elementor-drop-cap-view-stacked .elementor-drop-cap{background-color:#69727d;color:#fff}.elementor-widget-text-editor.elementor-drop-cap-view-framed .elementor-drop-cap{color:#69727d;border:3px solid;background-color:transparent}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap{margin-top:8px}.elementor-widget-text-editor:not(.elementor-drop-cap-view-default) .elementor-drop-cap-letter{width:1em;height:1em}.elementor-widget-text-editor .elementor-drop-cap{float:left;text-align:center;line-height:1;font-size:50px}.elementor-widget-text-editor .elementor-drop-cap-letter{display:inline-block}<\/style>\t\t\t\tFrequently, we <strong>develop business web applications with Angular framework<\/strong>.\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-59b69cb elementor-widget elementor-widget-text-editor\" data-id=\"59b69cb\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tWith just a few steps, these applications can be migrated easily to get them integrated as <strong>eXo applications<\/strong>.\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-column elementor-col-66 elementor-top-column elementor-element elementor-element-c47d184\" data-id=\"c47d184\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\r\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-bae4358 elementor-widget elementor-widget-image\" data-id=\"bae4358\" data-element_type=\"widget\" data-widget_type=\"image.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<style>\/*! elementor - v3.13.2 - 11-05-2023 *\/\r\n.elementor-widget-image{text-align:center}.elementor-widget-image a{display:inline-block}.elementor-widget-image a img[src$=\".svg\"]{width:48px}.elementor-widget-image img{vertical-align:middle;display:inline-block}<\/style>\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" src=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/elementor\/thumbs\/angular-800x533-1-q0eontepw340u084tfpz46h09cdmi3jpjhyjw3jpmw.jpg\" title=\"How to integrate Angular business applications in eXo Platform\" alt=\"Angular\" loading=\"lazy\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-13283ec elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"13283ec\" data-element_type=\"section\">\r\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\r\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-23a8e88\" data-id=\"23a8e88\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\r\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-baabeb1 table-content-cs elementor-widget elementor-widget-table-of-contents\" data-id=\"baabeb1\" data-element_type=\"widget\" id=\"sticky-tds\" data-settings=\"{&quot;exclude_headings_by_selector&quot;:&quot;.am__title,h6&quot;,&quot;marker_view&quot;:&quot;bullets&quot;,&quot;min_height&quot;:{&quot;unit&quot;:&quot;vh&quot;,&quot;size&quot;:0,&quot;sizes&quot;:[]},&quot;headings_by_tags&quot;:[&quot;h2&quot;,&quot;h3&quot;],&quot;_animation&quot;:&quot;none&quot;,&quot;icon&quot;:{&quot;value&quot;:&quot;&quot;,&quot;library&quot;:&quot;&quot;},&quot;min_height_tablet&quot;:{&quot;unit&quot;:&quot;vh&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;min_height_mobile&quot;:{&quot;unit&quot;:&quot;vh&quot;,&quot;size&quot;:&quot;&quot;,&quot;sizes&quot;:[]},&quot;hierarchical_view&quot;:&quot;yes&quot;}\" data-widget_type=\"table-of-contents.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<style>\/*! elementor-pro - v3.8.2 - 21-11-2022 *\/\n.elementor-widget-table-of-contents .elementor-toc__header-title{color:var(--header-color)}.elementor-widget-table-of-contents.elementor-toc--collapsed .elementor-toc__toggle-button--collapse,.elementor-widget-table-of-contents:not(.elementor-toc--collapsed) .elementor-toc__toggle-button--expand{display:none}.elementor-widget-table-of-contents .elementor-widget-container{min-height:var(--box-min-height);border:var(--box-border-width,1px) solid var(--box-border-color,#a4afb7);border-radius:var(--box-border-radius,3px);background-color:var(--box-background-color);-webkit-transition:min-height .4s;-o-transition:min-height .4s;transition:min-height .4s;overflow:hidden}.elementor-toc__header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:var(--box-padding,20px);background-color:var(--header-background-color);border-bottom:var(--separator-width,1px) solid var(--box-border-color,#a4afb7)}.elementor-toc__header-title{font-size:18px;margin:0;color:var(--header-color)}.elementor-toc__toggle-button{cursor:pointer;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex}.elementor-toc__toggle-button i{color:var(--toggle-button-color)}.elementor-toc__toggle-button svg{height:1em;width:1em;fill:var(--toggle-button-color)}.elementor-toc__spinner-container{text-align:center}.elementor-toc__spinner{font-size:2em}.elementor-toc__spinner.e-font-icon-svg{height:1em;width:1em}.elementor-toc__body{padding:var(--box-padding,20px);max-height:var(--toc-body-max-height);overflow-y:auto}.elementor-toc__body::-webkit-scrollbar{width:7px}.elementor-toc__body::-webkit-scrollbar-thumb{background-color:#c2cbd2;border-radius:10px}.elementor-toc__list-wrapper{list-style:none;padding:0}.elementor-toc__list-item{margin-bottom:.5em}.elementor-toc__list-item.elementor-item-active{font-weight:700}.elementor-toc__list-item .elementor-toc__list-wrapper{margin-top:.5em;margin-left:var(--nested-list-indent,1em)}.elementor-toc__list-item-text:hover{color:var(--item-text-hover-color);-webkit-text-decoration:var(--item-text-hover-decoration);text-decoration:var(--item-text-hover-decoration)}.elementor-toc__list-item-text.elementor-item-active{color:var(--item-text-active-color);-webkit-text-decoration:var(--item-text-active-decoration);text-decoration:var(--item-text-active-decoration)}.elementor-toc__list-item-text-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.elementor-toc__list-item-text-wrapper:before,.elementor-toc__list-item-text-wrapper i{margin-right:8px;color:var(--marker-color)}.elementor-toc__list-item-text-wrapper svg{margin-right:8px;fill:var(--marker-color);height:var(--marker-size,.5em);width:var(--marker-size,.5em)}.elementor-toc__list-item-text-wrapper i{font-size:var(--marker-size,.5em)}.elementor-toc__list-item-text-wrapper:before{font-size:var(--marker-size,1em)}.elementor-toc--content-ellipsis .elementor-toc__list-item-text{white-space:nowrap;overflow:hidden;-o-text-overflow:ellipsis;text-overflow:ellipsis}.elementor-toc__list-items--collapsible>.elementor-toc__list-wrapper>.elementor-toc__list-item>.elementor-toc__list-wrapper{display:none}.elementor-toc__heading-anchor{position:absolute}.elementor-toc__body .elementor-toc__list-item-text{color:var(--item-text-color);-webkit-text-decoration:var(--item-text-decoration);text-decoration:var(--item-text-decoration)}.elementor-toc__body .elementor-toc__list-item-text:hover{color:var(--item-text-hover-color);-webkit-text-decoration:var(--item-text-hover-decoration);text-decoration:var(--item-text-hover-decoration)}.elementor-toc__body .elementor-toc__list-item-text.elementor-item-active{color:var(--item-text-active-color);-webkit-text-decoration:var(--item-text-active-decoration);text-decoration:var(--item-text-active-decoration)}ol.elementor-toc__list-wrapper{counter-reset:item}ol.elementor-toc__list-wrapper .elementor-toc__list-item{counter-increment:item}ol.elementor-toc__list-wrapper .elementor-toc__list-item-text-wrapper:before{content:counters(item,\".\") \". \"}<\/style>\t\t<div class=\"elementor-toc__header\">\n\t\t\t<h4 class=\"elementor-toc__header-title\">\n\t\t\t\tContent\t\t\t<\/h4>\n\t\t\t\t\t<\/div>\n\t\t<div class=\"elementor-toc__body\">\n\t\t\t<div class=\"elementor-toc__spinner-container\">\n\t\t\t\t<i class=\"elementor-toc__spinner eicon-animation-spin eicon-loading\" aria-hidden=\"true\"><\/i>\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-top-column elementor-element elementor-element-5603079\" data-id=\"5603079\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\r\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-e00ea51 elementor-widget elementor-widget-text-editor\" data-id=\"e00ea51\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tThat way, we will not only <strong>benefit from all eXo Platform native features<\/strong>, but also increase adoption by allowing access to our <strong>business applications<\/strong> from a unique point, with needed authorization and easier administration.\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-d0ada99 elementor-widget elementor-widget-text-editor\" data-id=\"d0ada99\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tIn this blog post, we would like to explain the required <strong>steps to migrate and integrate a sample of a business application into eXo Platform<\/strong>, with a particular focus on the steps that <a href=\"https:\/\/www.bacancytechnology.com\/angular-js-development\" target=\"_blank\" rel=\"noopener\"><u>Angular developers<\/u><\/a> need to take.\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-8ec6f5a elementor-widget elementor-widget-text-editor\" data-id=\"8ec6f5a\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tYou can find the <a href=\"https:\/\/github.com\/exo-samples\/docs-samples\/tree\/master\/portlet\/angular-portlet-webpack\" target=\"_blank\" rel=\"noopener\">code base of the target application <\/a>in the <a href=\"https:\/\/github.com\/exo-samples\/docs-samples\" target=\"_blank\" rel=\"noopener\">eXo samples Github repository<\/a>.\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-da1b21a elementor-widget elementor-widget-text-editor\" data-id=\"da1b21a\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tThis is a Maven-based project, so it should be easy to import and run as is.\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-5ee2656 myheader1 elementor-widget elementor-widget-heading\" data-id=\"5ee2656\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">1. Let\u2019s in brief present the original angular application<\/h2>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-20213a5 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"20213a5\" data-element_type=\"widget\" data-widget_type=\"divider.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"elementor-divider\">\r\n\t\t\t<span class=\"elementor-divider-separator\">\r\n\t\t\t\t\t\t<\/span>\r\n\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-acc1bb3 elementor-widget elementor-widget-text-editor\" data-id=\"acc1bb3\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tThe original application is an example of a <a href=\"https:\/\/github.com\/marinantonio\/angular-mat-table-crud\" target=\"_blank\" rel=\"noopener\">CRUD application<\/a> for github issues management based on <strong>Angular 6<\/strong> as front-end framework.\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-9a357ea elementor-widget elementor-widget-text-editor\" data-id=\"9a357ea\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tThe migration consists of upgrading to the latest stable version, <strong>Angular 7.1.1<\/strong>, in order to manage products instead of github issues.\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-42e122c myheader1 elementor-widget elementor-widget-heading\" data-id=\"42e122c\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">2. eXo Add-on structure<\/h2>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-9105272 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"9105272\" data-element_type=\"widget\" data-widget_type=\"divider.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"elementor-divider\">\r\n\t\t\t<span class=\"elementor-divider-separator\">\r\n\t\t\t\t\t\t<\/span>\r\n\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-7969f97 elementor-widget elementor-widget-text-editor\" data-id=\"7969f97\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tThe goal is to create an <strong>eXo Add-on<\/strong> that will be deployed on top of the <a href=\"https:\/\/www.exoplatform.com\/?utm_source=BlogEn&amp;utm_medium=Blog&amp;utm_campaign=Content&amp;utm_content=link\">eXo Platform<\/a> 5.1.0 server.\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-309919e elementor-widget elementor-widget-text-editor\" data-id=\"309919e\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tIt consists on a <strong>Maven project<\/strong> with the following structure:\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-f6e6255 elementor-widget elementor-widget-text-editor\" data-id=\"f6e6255\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\t<ul style=\"list-style: disc; margin-left: 20px!important;\">\n \t<li style=\"font-weight: 400;\"><strong>portlets<\/strong>: FrontEnd module to generate a web app with the product management portlet and a custom configuration to add a page displaying this portlet.<\/li>\n \t<li style=\"font-weight: 400;\"><strong>services<\/strong>: BackEnd module to generate a jar file with CRUD services used by the portlet.<\/li>\n \t<li style=\"font-weight: 400;\"><strong>packaging<\/strong>: eXo add-on package module to generate a zip file to be installed in the eXo platform server.<\/li>\n<\/ul>\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-fbdeab8 elementor-widget elementor-widget-text-editor\" data-id=\"fbdeab8\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\t<p>To find out more about <strong>eXo add-ons development<\/strong>, read the dedicated <a href=\"https:\/\/docs.exoplatform.org\/en\/latest\/Dev_eXo_Addons.html\" target=\"_blank\" rel=\"noopener\"><strong>eXo documentation<\/strong><\/a>.<\/p>\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-933e463 myheader1 elementor-widget elementor-widget-heading\" data-id=\"933e463\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">3. Migration steps<\/h2>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-1339312 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"1339312\" data-element_type=\"widget\" data-widget_type=\"divider.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"elementor-divider\">\r\n\t\t\t<span class=\"elementor-divider-separator\">\r\n\t\t\t\t\t\t<\/span>\r\n\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-d1a1735 elementor-widget elementor-widget-heading\" data-id=\"d1a1735\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">FrontEnd<\/h3>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-e5f4788 elementor-widget elementor-widget-text-editor\" data-id=\"e5f4788\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tThe first step is to switch the original <strong>Angular application <\/strong>into an <a href=\"https:\/\/www-upgrade.exoplatform.com\/blog\/2018\/07\/11\/use-vue-js-hooks-within-exo-portlet\/\" target=\"_blank\" rel=\"noopener\">eXo portlet<\/a> using the following portlets module structure:\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-c844019 elementor-widget elementor-widget-image\" data-id=\"c844019\" data-element_type=\"widget\" data-widget_type=\"image.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"274\" height=\"700\" src=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/switch-angular-application-into-exo-portlet.png.png\" class=\"attachment-large size-large wp-image-35814\" alt=\"Switch Angular Application into an eXo Portlet\" loading=\"lazy\" srcset=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/switch-angular-application-into-exo-portlet.png.png 274w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/switch-angular-application-into-exo-portlet.png-117x300.png 117w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/switch-angular-application-into-exo-portlet.png-185x473.png 185w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/switch-angular-application-into-exo-portlet.png-128x328.png 128w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/switch-angular-application-into-exo-portlet.png-92x236.png 92w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/switch-angular-application-into-exo-portlet.png-51x131.png 51w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/switch-angular-application-into-exo-portlet.png-35x90.png 35w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/switch-angular-application-into-exo-portlet.png-12x30.png 12w\" sizes=\"(max-width: 274px) 100vw, 274px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-771a7b2 elementor-widget elementor-widget-heading\" data-id=\"771a7b2\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-full wp-image-25828\" src=\"https:\/\/www-dev.exoplatform.com\/blog\/wp-content\/uploads\/2022\/12\/pucejaune.jpg\" alt=\"\" width=\"7\" height=\"6\" \/> Portlet.xml<\/h4>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-aa038b8 elementor-widget elementor-widget-text-editor\" data-id=\"aa038b8\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tEvery <strong>eXo portlet<\/strong> is defined within the portlet descriptor <strong>portlet.xml<\/strong>.\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-f9d9f74 elementor-widget elementor-widget-text-editor\" data-id=\"f9d9f74\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tIn our case, we will develop an <strong>eXo GenericDispatchedViewPortlet <\/strong>with the following <strong>portlet.xml <\/strong>configuration:\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-558dd9c elementor-widget elementor-widget-code-highlight\" data-id=\"558dd9c\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp><portlet-app version=\"2.0\"\r\n\txmlns=\"http:\/\/java.sun.com\/xml\/ns\/portlet\/portlet-app_2_0.xsd\"\r\n\txmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\r\nxsi:schemaLocation=\"http:\/\/java.sun.com\/xml\/ns\/portlet\/portlet-app_2_0.xsd http:\/\/java.sun.com\/xml\/ns\/portlet\/portlet-app_2_0.xsd\">\r\n\r\n\t<portlet>\r\n\t\t<portlet-name>angular-sample-portlet<\/portlet-name>\r\n\t\t<portlet-class>org.exoplatform.commons.api.portlet.GenericDispatchedViewPortlet<\/portlet-class>\r\n\t\t<init-param>\r\n\t\t\t<name>portlet-view-dispatched-file-path<\/name>\r\n\t\t\t<value>\/frontend\/index.html<\/value>\r\n\t\t<\/init-param>\r\n\t\t<supports>\r\n\t\t\t<mime-type>text\/html<\/mime-type>\r\n\t\t<\/supports>\r\n\t\t<portlet-info>\r\n\t\t\t<title>Angular Sample Portlet<\/title>\r\n\t\t<\/portlet-info>\r\n\t<\/portlet>\r\n\r\n<\/portlet-app><\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-ae89cfb elementor-widget elementor-widget-heading\" data-id=\"ae89cfb\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-full wp-image-25828\" src=\"https:\/\/www-dev.exoplatform.com\/blog\/wp-content\/uploads\/2022\/12\/pucejaune.jpg\" alt=\"\" width=\"7\" height=\"6\" \/> Gatein-resources.xml<\/h4>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-ba23004 elementor-widget elementor-widget-text-editor\" data-id=\"ba23004\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tIn order to define the <strong>AMD<\/strong> js module and its dependencies of our portlet, we need to declare them in the <strong>eXo configuration<\/strong> file <strong>gatein-resources.xml<\/strong>:\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-f41dae9 elementor-widget elementor-widget-code-highlight\" data-id=\"f41dae9\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp><gatein-resources xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\r\n\txsi:schemaLocation=\"http:\/\/www.exoplatform.org\/xml\/ns\/gatein_resources_1_4 http:\/\/www.exoplatform.org\/xml\/ns\/gatein_resources_1_4\"\r\n\txmlns=\"http:\/\/www.exoplatform.org\/xml\/ns\/gatein_resources_1_4\">\r\n\r\n\t<portlet>\r\n\t\t<name>angular-sample-portlet<\/name>\r\n\t\t<module>\r\n\t\t\t<depends>\r\n\t\t\t\t<module>angularSamplePortletBundle<\/module>\r\n\t\t\t<\/depends>\r\n\t\t<\/module>\r\n\t<\/portlet>\r\n\r\n\t<module>\r\n\t\t<name>angularSamplePortletBundle<\/name>\r\n\t\t<script>\r\n\t\t\t<minify>false<\/minify>\r\n\t\t\t<path>\/frontend\/main.js<\/path>\r\n\t\t<\/script>\r\n\t\t<depends>\r\n\t\t\t<module>polyfillsBundle<\/module>\r\n\t\t<\/depends>\r\n\t<\/module>\r\n\r\n\t<module>\r\n\t\t<name>polyfillsBundle<\/name>\r\n\t\t<script>\r\n\t\t\t<minify>false<\/minify>\r\n\t\t\t<path>\/frontend\/polyfills.js<\/path>\r\n\t\t<\/script>\r\n\t<\/module>\r\n\r\n<\/gatein-resources><\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-bfac8f7 elementor-widget elementor-widget-text-editor\" data-id=\"bfac8f7\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tTo make this configuration work correctly, and since <strong>angular<\/strong> is using <a href=\"https:\/\/www.typescriptlang.org\" target=\"_blank\" rel=\"noopener\">typescript language<\/a>, we need to use <a href=\"https:\/\/webpack.js.org\/concepts\" target=\"_blank\" rel=\"noopener\">webpack<\/a> in order to generate only one js file <strong>\/frontend\/main.js<\/strong>.\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-5b77909 elementor-widget elementor-widget-text-editor\" data-id=\"5b77909\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tThis js file will be the entry path for <strong>angularSamplePortletBundle <\/strong>module, which needs also <a href=\"https:\/\/angular.io\/guide\/browser-support\" target=\"_blank\" rel=\"noopener\"><strong>polyfillsBundle<\/strong><\/a> js module in order to keep our angular application running for all browsers.\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-0f446f8 elementor-widget elementor-widget-heading\" data-id=\"0f446f8\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-full wp-image-25828\" src=\"https:\/\/www-dev.exoplatform.com\/blog\/wp-content\/uploads\/2022\/12\/pucejaune.jpg\" alt=\"\" width=\"7\" height=\"6\" \/> Index.html<\/h4>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-e9950e6 elementor-widget elementor-widget-text-editor\" data-id=\"e9950e6\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tThis file corresponds to the html template of the portlet to be used as is from the original application:\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-4277fe9 elementor-widget elementor-widget-code-highlight\" data-id=\"4277fe9\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp><crud-app>\r\n\t<div class=\"lds-spinner\">\r\n\t\t<div><\/div>\r\n\t\t<div><\/div>\r\n\t\t<div><\/div>\r\n\t\t<div><\/div>\r\n\t\t<div><\/div>\r\n\t\t<div><\/div>\r\n\t\t<div><\/div>\r\n\t\t<div><\/div>\r\n\t\t<div><\/div>\r\n\t\t<div><\/div>\r\n\t\t<div><\/div>\r\n\t\t<div><\/div>\r\n\t<\/div>\r\n<\/crud-app><\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-7460a34 elementor-widget elementor-widget-heading\" data-id=\"7460a34\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-full wp-image-25828\" src=\"https:\/\/www-dev.exoplatform.com\/blog\/wp-content\/uploads\/2022\/12\/pucejaune.jpg\" alt=\"\" width=\"7\" height=\"6\" \/> Pom.xml<\/h4>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-db3a4e3 elementor-widget elementor-widget-text-editor\" data-id=\"db3a4e3\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tThis is pom.xml of portlets module which should configure <strong>frontend-maven-plugin<\/strong> in order to install <strong>NodeJS <\/strong>and needed <strong>NPM <\/strong>modules:\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-6accf47 elementor-widget elementor-widget-code-highlight\" data-id=\"6accf47\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp><plugin>\r\n\t\t\t\t<groupId>com.github.eirslett<\/groupId>\r\n\t\t\t\t<artifactId>frontend-maven-plugin<\/artifactId>\r\n\t\t\t\t<version>1.0<\/version>\r\n\t\t\t\t<configuration>\r\n\t\t\t\t\t<workingDirectory>src\/main\/webapp\/frontend\/<\/workingDirectory>\r\n\t\t\t\t\t<installDirectory>target\/frontend-maven-plugin<\/installDirectory>\r\n\t\t\t\t<\/configuration>\r\n\t\t\t\t<executions>\r\n\r\n\t\t\t\t\t<!-- It will install nodejs and npm -->\r\n\t\t\t\t\t<execution>\r\n\t\t\t\t\t\t<id>install node and npm<\/id>\r\n\t\t\t\t\t\t<goals>\r\n\t\t\t\t\t\t\t<goal>install-node-and-npm<\/goal>\r\n\t\t\t\t\t\t<\/goals>\r\n\t\t\t\t\t\t<configuration>\r\n\t\t\t\t\t\t\t<workingDirectory>src\/main\/webapp\/<\/workingDirectory>\r\n\t\t\t\t\t\t\t<installDirectory>target\/node-and-npm<\/installDirectory>\r\n\t\t\t\t\t\t\t<nodeVersion>${nodeVersion}<\/nodeVersion>\r\n\t\t\t\t\t\t\t<npmVersion>${npmVersion}<\/npmVersion>\r\n\t\t\t\t\t\t<\/configuration>\r\n\t\t\t\t\t<\/execution>\r\n\r\n\t\t\t\t\t<!-- Install webpack module -->\r\n\t\t\t\t\t<execution>\r\n\t\t\t\t\t\t<id>npm webpack<\/id>\r\n\t\t\t\t\t\t<goals>\r\n\t\t\t\t\t\t\t<goal>npm<\/goal>\r\n\t\t\t\t\t\t<\/goals>\r\n\t\t\t\t\t\t<configuration>\r\n\t\t\t\t\t\t\t<workingDirectory>src\/main\/webapp\/frontend\/<\/workingDirectory>\r\n\t\t\t\t\t\t\t<installDirectory>target\/node-and-npm<\/installDirectory>\r\n\t\t\t\t\t\t\t<arguments>install webpack -g<\/arguments>\r\n\t\t\t\t\t\t<\/configuration>\r\n\t\t\t\t\t<\/execution>\r\n\r\n\t\t\t\t\t<!-- Download all dependencies in node_modules -->\r\n\t\t\t\t\t<execution>\r\n\t\t\t\t\t\t<id>npm install<\/id>\r\n\t\t\t\t\t\t<goals>\r\n\t\t\t\t\t\t\t<goal>npm<\/goal>\r\n\t\t\t\t\t\t<\/goals>\r\n\t\t\t\t\t\t<configuration>\r\n\t\t\t\t\t\t\t<workingDirectory>src\/main\/webapp\/frontend\/<\/workingDirectory>\r\n\t\t\t\t\t\t\t<installDirectory>target\/node-and-npm<\/installDirectory>\r\n\t\t\t\t\t\t\t<arguments>install<\/arguments>\r\n\t\t\t\t\t\t<\/configuration>\r\n\t\t\t\t\t<\/execution>\r\n\r\n\t\t\t\t\t<!-- Converting ts file to js and bundling them all together. -->\r\n\t\t\t\t\t<!-- For Dev Environment. -->\r\n\r\n\t\t\t\t\t<execution>\r\n\t\t\t\t\t\t<id>npm build<\/id>\r\n\t\t\t\t\t\t<goals>\r\n\t\t\t\t\t\t\t<goal>npm<\/goal>\r\n\t\t\t\t\t\t<\/goals>\r\n\t\t\t\t\t\t<configuration>\r\n\t\t\t\t\t\t\t<workingDirectory>src\/main\/webapp\/frontend<\/workingDirectory>\r\n\t\t\t\t\t\t\t<installDirectory>target\/node-and-npm\/<\/installDirectory>\r\n\t\t\t\t\t\t\t<arguments>run build<\/arguments>\r\n\t\t\t\t\t\t<\/configuration>\r\n\t\t\t\t\t<\/execution>\r\n\t\t\t\t<\/executions>\r\n\t\t\t<\/plugin><\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-dd9bb67 elementor-widget elementor-widget-heading\" data-id=\"dd9bb67\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-full wp-image-25828\" src=\"https:\/\/www-dev.exoplatform.com\/blog\/wp-content\/uploads\/2022\/12\/pucejaune.jpg\" alt=\"\" width=\"7\" height=\"6\" \/> Typescript components<\/h4>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-f3386b1 elementor-widget elementor-widget-text-editor\" data-id=\"f3386b1\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tThese files correspond to the <strong>Angular Typescript <\/strong>components to be used as are from the original application.\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-75a1a3e elementor-widget elementor-widget-heading\" data-id=\"75a1a3e\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-full wp-image-25828\" src=\"https:\/\/www-dev.exoplatform.com\/blog\/wp-content\/uploads\/2022\/12\/pucejaune.jpg\" alt=\"\" width=\"7\" height=\"6\" \/> eXo Extension configuration<\/h4>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-44f84f2 elementor-widget elementor-widget-heading\" data-id=\"44f84f2\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h5 class=\"elementor-heading-title elementor-size-default\">Configuration.xml\n<\/h5>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-ad168b6 elementor-widget elementor-widget-text-editor\" data-id=\"ad168b6\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tThis file should be added under META-INF\/exo-conf in order to get the portlet running as an <strong>eXo Extension<\/strong>:\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-0e3ca74 elementor-widget elementor-widget-code-highlight\" data-id=\"0e3ca74\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp><external-component-plugins>\r\n\t\t<target-component>org.exoplatform.container.definition.PortalContainerConfig<\/target-component>\r\n\t\t<component-plugin>\r\n\t\t\t<name>Change PortalContainer Definitions<\/name>\r\n\t\t\t<set-method>registerChangePlugin<\/set-method>\r\n\t\t\t<type>org.exoplatform.container.definition.PortalContainerDefinitionChangePlugin<\/type>\r\n\t\t\t<priority>101<\/priority>\r\n\t\t\t<init-params>\r\n\t\t\t\t<value-param>\r\n\t\t\t\t\t<name>apply.default<\/name>\r\n\t\t\t\t\t<value>true<\/value>\r\n\t\t\t\t<\/value-param>\r\n\t\t\t\t<object-param>\r\n\t\t\t\t\t<name>change<\/name>\r\n\t\t\t\t\t<object\r\n\t\t\t\t\t\ttype=\"org.exoplatform.container.definition.PortalContainerDefinitionChange$AddDependencies\">\r\n\t\t\t\t\t\t<field name=\"dependencies\">\r\n\t\t\t\t\t\t\t<collection type=\"java.util.ArrayList\">\r\n\t\t\t\t\t\t\t\t<value>\r\n\t\t\t\t\t\t\t\t\t<string>angular-portlet-webpack<\/string>\r\n\t\t\t\t\t\t\t\t<\/value>\r\n\t\t\t\t\t\t\t<\/collection>\r\n\t\t\t\t\t\t<\/field>\r\n\t\t\t\t\t<\/object>\r\n\t\t\t\t<\/object-param>\r\n\t\t\t<\/init-params>\r\n\t\t<\/component-plugin>\r\n\t<\/external-component-plugins><\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-750243f elementor-widget elementor-widget-heading\" data-id=\"750243f\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h5 class=\"elementor-heading-title elementor-size-default\">Web.xml<\/h5>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-10d0806 elementor-widget elementor-widget-text-editor\" data-id=\"10d0806\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tIn this file, <strong>PortalContainerConfigOwner eXo Listener<\/strong> configuration is required for our <strong>eXo Extension<\/strong>:\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-5a7d024 elementor-widget elementor-widget-code-highlight\" data-id=\"5a7d024\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp><web-app id=\"WebApp_ID\" version=\"2.4\"\r\n\txmlns=\"http:\/\/java.sun.com\/xml\/ns\/j2ee\" xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\r\n\txsi:schemaLocation=\"http:\/\/java.sun.com\/xml\/ns\/j2ee \r\n\thttp:\/\/java.sun.com\/xml\/ns\/j2ee\/web-app_2_4.xsd\">\r\n\t<display-name>angular-portlets<\/display-name>\r\n\r\n  <!-- ================================================================== -->\r\n  <!--           LISTENER                                                 -->\r\n  <!-- ================================================================== -->\r\n  <listener>\r\n    <listener-class>org.exoplatform.container.web.PortalContainerConfigOwner<\/listener-class>\r\n  <\/listener>\r\n<\/web-app><\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-16a0dbe elementor-widget elementor-widget-heading\" data-id=\"16a0dbe\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h5 class=\"elementor-heading-title elementor-size-default\">Navigation and pages configurations<\/h5>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-13951c7 elementor-widget elementor-widget-text-editor\" data-id=\"13951c7\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tWe should create a page with Products portlet in order to be accessible by <strong>\/portal\/intranet\/products<\/strong> url after server startup.\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-bb11560 elementor-widget elementor-widget-text-editor\" data-id=\"bb11560\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tFor that <strong>UserPortalConfigService eXo Component <\/strong>should be configured under <strong>WEB-INF\/conf\/configuration.xml<\/strong> file:\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-5464ba2 elementor-widget elementor-widget-code-highlight\" data-id=\"5464ba2\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp><?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\r\n\r\n<configuration xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\r\n\txsi:schemaLocation=\"http:\/\/www.exoplatform.org\/xml\/ns\/kernel_1_2.xsd http:\/\/www.exoplatform.org\/xml\/ns\/kernel_1_2.xsd\"\r\n\txmlns=\"http:\/\/www.exoplatform.org\/xml\/ns\/kernel_1_2.xsd\">\r\n\t<external-component-plugins>\r\n\t\t<target-component>org.exoplatform.portal.config.UserPortalConfigService<\/target-component>\r\n\t\t<component-plugin>\r\n\t\t\t<name>new.portal.config.user.listener<\/name>\r\n\t\t\t<set-method>initListener<\/set-method>\r\n\t\t\t<type>org.exoplatform.portal.config.NewPortalConfigListener<\/type>\r\n\t\t\t<description>this listener init the portal configuration<\/description>\r\n\t\t\t<init-params>\r\n\t\t\t\t<!-- <value-param> -->\r\n\t\t\t\t<!-- <name>override<\/name> -->\r\n\t\t\t\t<!-- <value>${exo.tasks.portalConfig.metadata.override:false}<\/value> -->\r\n\t\t\t\t<!-- <\/value-param> -->\r\n\t\t\t\t<object-param>\r\n\t\t\t\t\t<name>portal.configuration<\/name>\r\n\t\t\t\t\t<description>description<\/description>\r\n\t\t\t\t\t<object type=\"org.exoplatform.portal.config.NewPortalConfig\">\r\n\t\t\t\t\t\t<field name=\"predefinedOwner\">\r\n\t\t\t\t\t\t\t<collection type=\"java.util.HashSet\">\r\n\t\t\t\t\t\t\t\t<value>\r\n\t\t\t\t\t\t\t\t\t<string>intranet<\/string>\r\n\t\t\t\t\t\t\t\t<\/value>\r\n\t\t\t\t\t\t\t<\/collection>\r\n\t\t\t\t\t\t<\/field>\r\n\t\t\t\t\t\t<field name=\"ownerType\">\r\n\t\t\t\t\t\t\t<string>portal<\/string>\r\n\t\t\t\t\t\t<\/field>\r\n\t\t\t\t\t\t<field name=\"templateLocation\">\r\n\t\t\t\t\t\t\t<string>war:\/conf\/angular-portlets<\/string>\r\n\t\t\t\t\t\t<\/field>\r\n\t\t\t\t\t\t<field name=\"importMode\">\r\n\t\t\t\t\t\t\t<string>merge<\/string>\r\n\t\t\t\t\t\t<\/field>\r\n\t\t\t\t\t<\/object>\r\n\t\t\t\t<\/object-param>\r\n\t\t\t<\/init-params>\r\n\t\t<\/component-plugin>\r\n\t<\/external-component-plugins>\r\n<\/configuration><\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-56e542d elementor-widget elementor-widget-text-editor\" data-id=\"56e542d\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tA navigation node should be added into <strong>navigation.xml <\/strong>file:\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-6b9cd02 elementor-widget elementor-widget-code-highlight\" data-id=\"6b9cd02\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp><?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\r\n<page-set>\r\n\t<page>\r\n\t\t<name>products<\/name>\r\n\t\t<title>Products<\/title>\r\n\t\t<access-permissions>*:\/platform\/users<\/access-permissions>\r\n\t\t<edit-permission>*:\/platform\/administrators<\/edit-permission>\r\n\t\t<show-max-window>false<\/show-max-window>\r\n\t\t<portlet-application>\r\n\t\t\t<portlet>\r\n\t\t\t\t<application-ref>angular-portlets<\/application-ref>\r\n\t\t\t\t<portlet-ref>products-management-portlet<\/portlet-ref>\r\n\t\t\t<\/portlet>\r\n\t\t\t<access-permissions>*:\/platform\/users<\/access-permissions>\r\n\t\t\t<show-info-bar>false<\/show-info-bar>\r\n\t\t<\/portlet-application>\r\n\t<\/page>\r\n<\/page-set><\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-4ab719b elementor-widget elementor-widget-heading\" data-id=\"4ab719b\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">BackEnd<\/h3>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-ff65217 elementor-widget elementor-widget-text-editor\" data-id=\"ff65217\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tThe second step is to develop CRUD rest services called by angular components using the following structure:\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-eb3ae4c elementor-widget elementor-widget-image\" data-id=\"eb3ae4c\" data-element_type=\"widget\" data-widget_type=\"image.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"664\" height=\"509\" src=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/develop-crud-rest-called-angular.png.png\" class=\"attachment-large size-large wp-image-35815\" alt=\"develop CRUD rest services called by Angular\" loading=\"lazy\" srcset=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/develop-crud-rest-called-angular.png.png 664w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/develop-crud-rest-called-angular.png-300x230.png 300w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/develop-crud-rest-called-angular.png-617x473.png 617w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/develop-crud-rest-called-angular.png-428x328.png 428w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/develop-crud-rest-called-angular.png-308x236.png 308w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/develop-crud-rest-called-angular.png-171x131.png 171w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/develop-crud-rest-called-angular.png-100x77.png 100w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/develop-crud-rest-called-angular.png-39x30.png 39w\" sizes=\"(max-width: 664px) 100vw, 664px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-9dc1152 elementor-widget elementor-widget-heading\" data-id=\"9dc1152\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-full wp-image-25828\" src=\"https:\/\/www-dev.exoplatform.com\/blog\/wp-content\/uploads\/2022\/12\/pucejaune.jpg\" alt=\"\" width=\"7\" height=\"6\" \/> Data structure initialization<\/h4>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-6ca3102 elementor-widget elementor-widget-text-editor\" data-id=\"6ca3102\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tWe have configured changelog-1.0.0.xml file to be interpreted by Liquibase in order to define the structure of Product Table:\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-82b980e elementor-widget elementor-widget-code-highlight\" data-id=\"82b980e\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp><?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<databaseChangeLog\r\n        xmlns=\"http:\/\/www.liquibase.org\/xml\/ns\/dbchangelog\"\r\n        xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\r\n        xsi:schemaLocation=\"http:\/\/www.liquibase.org\/xml\/ns\/dbchangelog\r\n                      http:\/\/www.liquibase.org\/xml\/ns\/dbchangelog\/dbchangelog-3.3.xsd\">\r\n\r\n\t<!-- Managing both DB that use sequences and db that use auto increment -->\r\n\t<property name=\"autoIncrement\" value=\"true\" dbms=\"mysql,mssql,h2,hsqldb\"\/>\r\n\t<property name=\"autoIncrement\" value=\"false\" dbms=\"oracle,postgresql\"\/>\r\n\r\n\t<!-- Managing auto generation of timestamp by Database -->\r\n\t<property name=\"now\" value=\"now()\" dbms=\"mysql,hsqldb,postgresql,h2\"\/>\r\n\t<property name=\"now\" value=\"sysdate\" dbms=\"oracle\"\/>\r\n\t<property name=\"now\" value=\"CURRENT_TIMESTAMP\" dbms=\"mssql\"\/>\r\n\t\r\n\t<changeSet author=\"sample\" id=\"1.0.0-1\">\r\n        <createTable tableName=\"PRODUCT\">\r\n            <column name=\"PRODUCT_ID\" type=\"BIGINT\" autoIncrement=\"${autoIncrement}\" startWith=\"1\">\r\n\t\t\t\t<constraints nullable=\"false\" primaryKey=\"true\" primaryKeyName=\"PK_PRODUCT_PRODUCT_ID\"\/>\r\n            <\/column>\r\n            <column name=\"PRODUCT_NAME\" type=\"VARCHAR(250)\"\/>\r\n            <column name=\"PRODUCT_AMOUNT\" type=\"VARCHAR(250)\"\/>\r\n        <\/createTable>\r\n        <modifySql dbms=\"mysql\">\r\n            <append value=\" ENGINE=INNODB CHARSET=UTF8 COLLATE utf8_general_ci\"\/>\r\n        <\/modifySql>\r\n    <\/changeSet>\r\n<\/databaseChangeLog><\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-4486d2e elementor-widget elementor-widget-text-editor\" data-id=\"4486d2e\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tThen, we have configured <strong>ChangeLogsPlugin<\/strong> in order to initialize the Product table structure defined above in the database:\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-be9f8cc elementor-widget elementor-widget-code-highlight\" data-id=\"be9f8cc\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp><external-component-plugins>\r\n<target-component>org.exoplatform.commons.api.persistence.DataInitializer<\/target-component>\r\n\t<component-plugin>\r\n\t\t<name>SampleChangeLogsPlugin<\/name>\r\n\t\t<set-method>addChangeLogsPlugin<\/set-method>\r\n\t\t<type>org.exoplatform.commons.persistence.impl.ChangeLogsPlugin<\/type>\r\n\t\t<init-params>\r\n\t\t\t<values-param>\r\n\t\t\t\t<name>changelogs<\/name>\r\n\t\t\t\t<description>Change logs of Atis<\/description>\r\n\t\t\t\t<value>db.changelogs\/changelog-1.0.0.xml<\/value>\r\n\t\t\t<\/values-param>\r\n\t\t<\/init-params>\r\n\t<\/component-plugin>\r\n<\/external-component-plugins><\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-12b3aee elementor-widget elementor-widget-heading\" data-id=\"12b3aee\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-full wp-image-25828\" src=\"https:\/\/www-dev.exoplatform.com\/blog\/wp-content\/uploads\/2022\/12\/pucejaune.jpg\" alt=\"\" width=\"7\" height=\"6\" \/> Persistence layer\n<\/h4>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-1bfd2a3 elementor-widget elementor-widget-text-editor\" data-id=\"1bfd2a3\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tTo persist products, we are based on <strong>eXo JPA implementation<\/strong>.\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-b2119ac elementor-widget elementor-widget-text-editor\" data-id=\"b2119ac\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tProduct Entity is implemented according to Product table structure:\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-fdca294 elementor-widget elementor-widget-code-highlight\" data-id=\"fdca294\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>@Entity\r\n@ExoEntity\r\n@Table(name = \"PRODUCT\")\r\npublic class Product {\r\n  \r\n  @Id\r\n  @SequenceGenerator(name=\"SEQ_PRODUCT_PRODUCT_ID\", sequenceName=\"SEQ_PRODUCT_PRODUCT_ID\")\r\n  @GeneratedValue(strategy=GenerationType.AUTO, generator=\"SEQ_PRODUCT_PRODUCT_ID\")\r\n  @Column(name=\"PRODUCT_ID\")\r\n  private Long productId;\r\n\r\n  @Column(name=\"PRODUCT_NAME\")\r\n  private String productName;\r\n  \r\n  @Column(name=\"PRODUCT_AMOUNT\")\r\n  private String productAmount;\r\n  ...\r\n<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-be67c64 elementor-widget elementor-widget-text-editor\" data-id=\"be67c64\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tThen we need <strong>ProducDAO<\/strong> to be implemented and configured as an <strong>eXo component<\/strong> in order to be called by <strong>CRUD rest services<\/strong>:\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-c91a1ed elementor-widget elementor-widget-code-highlight\" data-id=\"c91a1ed\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp><component>\r\n    <type>org.exoplatform.dao.ProductDAO<\/type>\r\n<\/component>\r\n\r\n--------------------------------------------------------------\r\n\r\npackage org.exoplatform.dao;\r\nimport org.exoplatform.entity.Product;\r\n\r\nimport org.exoplatform.commons.persistence.impl.GenericDAOJPAImpl;\r\n\r\npublic class ProductDAO extends GenericDAOJPAImpl<Product, Long> {\r\n  \r\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-536787c elementor-widget elementor-widget-heading\" data-id=\"536787c\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h4 class=\"elementor-heading-title elementor-size-default\"><img decoding=\"async\" loading=\"lazy\" class=\"alignleft size-full wp-image-25828\" src=\"https:\/\/www-dev.exoplatform.com\/blog\/wp-content\/uploads\/2022\/12\/pucejaune.jpg\" alt=\"\" width=\"7\" height=\"6\" \/> Business layer<\/h4>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-342fd43 elementor-widget elementor-widget-text-editor\" data-id=\"342fd43\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tWe have configured CrudPortletRestService as an <strong>eXo component<\/strong>:\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-0b04316 elementor-widget elementor-widget-code-highlight\" data-id=\"0b04316\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp><component>\r\n<type>org.exoplatform.services.rest.CrudPortletRestService<\/type>\r\n<\/component><\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-8e12d35 elementor-widget elementor-widget-text-editor\" data-id=\"8e12d35\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tThis component will expose <strong>CRUD rest services<\/strong> to be called by frontend angular components in order to perform getAll, add, delete and edit operations:\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-d12d3e3 elementor-widget elementor-widget-code-highlight\" data-id=\"d12d3e3\" data-element_type=\"widget\" data-widget_type=\"code-highlight.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"prismjs-default copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-javascript line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-javascript\">\n\t\t\t\t\t<xmp>package org.exoplatform.services.rest;\r\n\r\nimport java.util.List;\r\n\r\nimport javax.annotation.security.RolesAllowed;\r\nimport javax.ws.rs.GET;\r\nimport javax.ws.rs.Path;\r\nimport javax.ws.rs.PathParam;\r\nimport javax.ws.rs.QueryParam;\r\nimport javax.ws.rs.core.Context;\r\nimport javax.ws.rs.core.MediaType;\r\nimport javax.ws.rs.core.Response;\r\nimport javax.ws.rs.core.UriInfo;\r\n\r\nimport org.json.JSONArray;\r\nimport org.json.JSONObject;\r\n\r\nimport org.exoplatform.dao.ProductDAO;\r\nimport org.exoplatform.entity.Product;\r\nimport org.exoplatform.services.rest.resource.ResourceContainer;\r\n\r\n@Path(\"crud\")\r\npublic class CrudPortletRestService implements ResourceContainer {\r\n\r\n  private ProductDAO productDAO;\r\n\r\n  public CrudPortletRestService(ProductDAO productDAO) {\r\n    this.productDAO = productDAO;\r\n  }\r\n\r\n  @GET\r\n  @Path(\"\/addProduct\")\r\n  @RolesAllowed(\"users\")\r\n  public Response addProduct(@Context UriInfo uriInfo,\r\n                             @QueryParam(\"productName\") String productName,\r\n                             @QueryParam(\"productAmount\") String productAmount) throws Exception {\r\n    ...\r\n  }\r\n\r\n  @GET\r\n  @Path(\"\/deleteProduct\/{productId}\")\r\n  @RolesAllowed(\"users\")\r\n  public Response deleteProduct(@Context UriInfo uriInfo, @PathParam(\"productId\") String productId) throws Exception {\r\n    ...\r\n  }\r\n  \r\n  @GET\r\n  @Path(\"\/getAllProducts\")\r\n  @RolesAllowed(\"users\")\r\n  public Response getAllProducts(@Context UriInfo uriInfo) throws Exception {\r\n    ...\r\n  }\r\n  \r\n  @GET\r\n  @Path(\"\/getProductById\/{productId}\")\r\n  @RolesAllowed(\"users\")\r\n  public Response getProductById(@Context UriInfo uriInfo, @PathParam(\"productId\") String productId) throws Exception {\r\n    ...\r\n  }\r\n\r\n  @GET\r\n  @Path(\"\/updateProduct\/{productId}\")\r\n  @RolesAllowed(\"users\")\r\n  public Response updateProduct(@Context UriInfo uriInfo,\r\n                                @PathParam(\"productId\") String productId,\r\n                                @QueryParam(\"productName\") String productName,\r\n                                @QueryParam(\"productAmount\") String productAmount) throws Exception {\r\n\t...\r\n  }\r\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-991da4b elementor-widget elementor-widget-heading\" data-id=\"991da4b\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Addon packaging<\/h3>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-e241de0 elementor-widget elementor-widget-text-editor\" data-id=\"e241de0\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tAfter <strong>building our Maven project<\/strong>, a zip file is <a href=\"https:\/\/docs.exoplatform.org\/en\/latest\/Dev_eXo_Addons.html#packaging\" target=\"_blank\" rel=\"noopener\">generated<\/a> with needed war and jar files in order to be <a href=\"https:\/\/docs.exoplatform.org\/en\/latest\/Dev_eXo_Addons.html#plfdevguide-exoadd-ons-deployment\" target=\"_blank\" rel=\"noopener\">deployed<\/a> in the <strong>eXo platform server<\/strong>.\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-d4c15c5 myheader1 elementor-widget elementor-widget-heading\" data-id=\"d4c15c5\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">4. Deployment<\/h2>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-273aa06 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"273aa06\" data-element_type=\"widget\" data-widget_type=\"divider.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"elementor-divider\">\r\n\t\t\t<span class=\"elementor-divider-separator\">\r\n\t\t\t\t\t\t<\/span>\r\n\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-778c883 elementor-widget elementor-widget-heading\" data-id=\"778c883\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">First startup<\/h3>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-f6b73b5 elementor-widget elementor-widget-text-editor\" data-id=\"f6b73b5\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tA welcome spinner is shown waiting the product list to be displayed:\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-e136602 elementor-widget elementor-widget-image\" data-id=\"e136602\" data-element_type=\"widget\" data-widget_type=\"image.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1024\" height=\"311\" src=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/spinner-waiting-product-1024x311.png\" class=\"attachment-large size-large wp-image-35816\" alt=\"Waiting spinner\" loading=\"lazy\" srcset=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/spinner-waiting-product-1024x311.png 1024w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/spinner-waiting-product-300x91.png 300w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/spinner-waiting-product-768x233.png 768w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/spinner-waiting-product-720x219.png 720w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/spinner-waiting-product-500x152.png 500w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/spinner-waiting-product-360x109.png 360w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/spinner-waiting-product-200x61.png 200w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/spinner-waiting-product-100x30.png 100w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/spinner-waiting-product-70x21.png 70w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/spinner-waiting-product.png 1066w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-c2c7b13 elementor-widget elementor-widget-text-editor\" data-id=\"c2c7b13\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tFor the first startup, the Product table structure is created without data:\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-3c6f89d elementor-widget elementor-widget-image\" data-id=\"3c6f89d\" data-element_type=\"widget\" data-widget_type=\"image.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1024\" height=\"483\" src=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/product-table-structure-created-without-data-1024x483.png\" class=\"attachment-large size-large wp-image-18166\" alt=\"Product table structure is created\" loading=\"lazy\" srcset=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/product-table-structure-created-without-data-1024x483.png 1024w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/product-table-structure-created-without-data-300x141.png 300w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/product-table-structure-created-without-data-768x362.png 768w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/product-table-structure-created-without-data-1536x724.png 1536w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/product-table-structure-created-without-data-1250x589.png 1250w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/product-table-structure-created-without-data-720x339.png 720w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/product-table-structure-created-without-data-500x236.png 500w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/product-table-structure-created-without-data-360x170.png 360w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/product-table-structure-created-without-data-200x94.png 200w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/product-table-structure-created-without-data-100x47.png 100w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/product-table-structure-created-without-data-64x30.png 64w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/product-table-structure-created-without-data.png 1914w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-81aeefd elementor-widget elementor-widget-heading\" data-id=\"81aeefd\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Second startup<\/h3>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-54ae1cf elementor-widget elementor-widget-text-editor\" data-id=\"54ae1cf\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tIn order to get data in the <strong>Product table<\/strong>, we can restore the original data from an <strong>SQL dump<\/strong>.\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-16b9e16 elementor-widget elementor-widget-text-editor\" data-id=\"16b9e16\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tFor the second startup, restored data are displayed and paginated. It is possible to filter and sort &nbsp;them according to our needs:\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-0e90ec2 elementor-widget elementor-widget-image\" data-id=\"0e90ec2\" data-element_type=\"widget\" data-widget_type=\"image.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1024\" height=\"508\" src=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/restored-data-displayed-paginated-1024x508.png\" class=\"attachment-large size-large wp-image-18167\" alt=\"restored data are displayed\" loading=\"lazy\" srcset=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/restored-data-displayed-paginated-1024x508.png 1024w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/restored-data-displayed-paginated-300x149.png 300w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/restored-data-displayed-paginated-768x381.png 768w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/restored-data-displayed-paginated-720x357.png 720w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/restored-data-displayed-paginated-500x248.png 500w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/restored-data-displayed-paginated-360x179.png 360w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/restored-data-displayed-paginated-200x99.png 200w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/restored-data-displayed-paginated-100x50.png 100w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/restored-data-displayed-paginated-60x30.png 60w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/restored-data-displayed-paginated.png 1074w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-a22c5e5 elementor-widget elementor-widget-text-editor\" data-id=\"a22c5e5\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tIt is possible to add a new product as shown below:\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-86364d3 elementor-widget elementor-widget-image\" data-id=\"86364d3\" data-element_type=\"widget\" data-widget_type=\"image.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1024\" height=\"521\" src=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/add-new-product-table-structure-1024x521.png\" class=\"attachment-large size-large wp-image-18168\" alt=\"New product table\" loading=\"lazy\" srcset=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/add-new-product-table-structure-1024x521.png 1024w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/add-new-product-table-structure-300x153.png 300w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/add-new-product-table-structure-768x390.png 768w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/add-new-product-table-structure-720x366.png 720w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/add-new-product-table-structure-500x254.png 500w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/add-new-product-table-structure-360x183.png 360w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/add-new-product-table-structure-200x102.png 200w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/add-new-product-table-structure-100x51.png 100w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/add-new-product-table-structure-59x30.png 59w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/add-new-product-table-structure.png 1078w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-a483170 elementor-widget elementor-widget-text-editor\" data-id=\"a483170\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tIt is possible to edit a product as shown below:\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-0076253 elementor-widget elementor-widget-image\" data-id=\"0076253\" data-element_type=\"widget\" data-widget_type=\"image.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1024\" height=\"604\" src=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/edit-new-product-table-structure-1024x604.png\" class=\"attachment-large size-large wp-image-18169\" alt=\"edit product table\" loading=\"lazy\" srcset=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/edit-new-product-table-structure-1024x604.png 1024w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/edit-new-product-table-structure-300x177.png 300w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/edit-new-product-table-structure-768x453.png 768w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/edit-new-product-table-structure-720x425.png 720w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/edit-new-product-table-structure-500x295.png 500w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/edit-new-product-table-structure-360x212.png 360w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/edit-new-product-table-structure-200x118.png 200w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/edit-new-product-table-structure-100x59.png 100w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/edit-new-product-table-structure-51x30.png 51w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/edit-new-product-table-structure.png 1081w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-93a6642 elementor-widget elementor-widget-text-editor\" data-id=\"93a6642\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tIt is possible to remove a product as shown below:\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-ed52520 elementor-widget elementor-widget-image\" data-id=\"ed52520\" data-element_type=\"widget\" data-widget_type=\"image.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"1024\" height=\"515\" src=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/remove-new-product-table-structure-1024x515.png\" class=\"attachment-large size-large wp-image-18170\" alt=\"remove product table\" loading=\"lazy\" srcset=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/remove-new-product-table-structure-1024x515.png 1024w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/remove-new-product-table-structure-300x151.png 300w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/remove-new-product-table-structure-768x387.png 768w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/remove-new-product-table-structure-720x362.png 720w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/remove-new-product-table-structure-500x252.png 500w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/remove-new-product-table-structure-360x181.png 360w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/remove-new-product-table-structure-200x101.png 200w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/remove-new-product-table-structure-100x50.png 100w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/remove-new-product-table-structure-60x30.png 60w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2019\/01\/remove-new-product-table-structure.png 1073w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-ca27a46 myheader1 elementor-widget elementor-widget-heading\" data-id=\"ca27a46\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Conclusion<\/h2>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-1d658c2 elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"1d658c2\" data-element_type=\"widget\" data-widget_type=\"divider.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"elementor-divider\">\r\n\t\t\t<span class=\"elementor-divider-separator\">\r\n\t\t\t\t\t\t<\/span>\r\n\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-e527d5b elementor-widget elementor-widget-text-editor\" data-id=\"e527d5b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tIn this article, we have tried to set up a step-by-step <strong>tutorial of angular 7 business applications migration to eXo portlets<\/strong>.\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-a50429a elementor-widget elementor-widget-text-editor\" data-id=\"a50429a\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\tDon\u2019t hesitate to share us your experience by applying this tutorial on your own applications and contact us if you have some questions or issues.\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t\t\t\t<\/div>\r\n\t\t<\/section>\r\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-7c23f51 dow1-cl elementor-reverse-tablet elementor-reverse-mobile elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"7c23f51\" data-element_type=\"section\">\r\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\r\n\t\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-542102a\" data-id=\"542102a\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap\">\r\n\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-column elementor-col-66 elementor-top-column elementor-element elementor-element-9108bd7\" data-id=\"9108bd7\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\r\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d437522 elementor-cta--skin-cover elementor-cta--valign-middle elementor-widget elementor-widget-call-to-action\" data-id=\"d437522\" data-element_type=\"widget\" data-settings=\"{&quot;_animation&quot;:&quot;none&quot;}\" data-widget_type=\"call-to-action.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<link rel=\"stylesheet\" href=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/plugins\/elementor-pro\/assets\/css\/widget-call-to-action.min.css\">\t\t<div class=\"elementor-cta\">\n\t\t\t\t\t<div class=\"elementor-cta__bg-wrapper\">\n\t\t\t\t<div class=\"elementor-cta__bg elementor-bg\" style=\"background-image: url(https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2022\/12\/cta-datasheet-exo-6-9.png);\"><\/div>\n\t\t\t\t<div class=\"elementor-cta__bg-overlay\"><\/div>\n\t\t\t<\/div>\n\t\t\t\t\t\t\t<div class=\"elementor-cta__content\">\n\t\t\t\t\n\t\t\t\t<div class=\"elementor-cta__title elementor-cta__content-item elementor-content-item\">eXo Platform 6 Free Datasheet\u200b\u200b<\/div>\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-cta__description elementor-cta__content-item elementor-content-item\">\n\t\t\t\t\t\tDownload the eXo Platform 6 Datasheet and <br>discover all the features and benefits\t\t\t\t\t<\/div>\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t<div class=\"elementor-cta__button-wrapper elementor-cta__content-item elementor-content-item \">\n\t\t\t\t\t<a class=\"elementor-cta__button elementor-button elementor-size-md\" href=\"https:\/\/www.exoplatform.com\/datasheet-exo-platform-6\/?utm_source=BlogEn&#038;utm_medium=Blog&#038;utm_campaign=Content&#038;utm_content=cta\">\n\t\t\t\t\t\tDownload Now\t\t\t\t\t<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t\t\t\t<\/div>\r\n\t\t<\/section>\r\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-1fa6567 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"1fa6567\" data-element_type=\"section\">\r\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\r\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-f4ca0c8\" data-id=\"f4ca0c8\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\r\n\t\t\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-4399bb5 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"4399bb5\" data-element_type=\"section\">\r\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\r\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-b22c9e0\" data-id=\"b22c9e0\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\r\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-41bf836 elementor-align-left tags_class_element elementor-widget elementor-widget-post-info\" data-id=\"41bf836\" data-element_type=\"widget\" data-widget_type=\"post-info.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<ul class=\"elementor-icon-list-items elementor-post-info\">\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item elementor-repeater-item-4f61546\" itemprop=\"about\">\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t\t<i aria-hidden=\"true\" class=\"fas fa-tags\"><\/i>\t\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text elementor-post-info__item elementor-post-info__item--type-terms\">\n\t\t\t\t\t\t\t<span class=\"elementor-post-info__item-prefix\">Tags:<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-post-info__terms-list\">\n\t\t\t\t<a href=\"https:\/\/www.exoplatform.com\/blog\/exo\/\" class=\"elementor-post-info__terms-list-item\">eXo<\/a>, <a href=\"https:\/\/www.exoplatform.com\/blog\/tutorial\/\" class=\"elementor-post-info__terms-list-item\">Tutorial<\/a>\t\t\t\t<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t<li class=\"elementor-icon-list-item elementor-repeater-item-105f90f\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text elementor-post-info__item elementor-post-info__item--type-custom\">\n\t\t\t\t\t\t\t\t\t\t&nbsp;\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t<\/ul>\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-ac2ad4b\" data-id=\"ac2ad4b\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\r\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-86329ad elementor-widget elementor-widget-shortcode\" data-id=\"86329ad\" data-element_type=\"widget\" data-widget_type=\"shortcode.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"elementor-shortcode\">\n\n<div class=\"kk-star-ratings kksr-shortcode\"\n    data-payload='{&quot;id&quot;:&quot;36824&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;shortcode&quot;,&quot;align&quot;:&quot;&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;0&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;0&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;valign&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;5&quot;,&quot;greet&quot;:&quot;Rate this post&quot;,&quot;legend&quot;:&quot;0\\\/5 - (0 vote)&quot;,&quot;size&quot;:&quot;24&quot;,&quot;width&quot;:&quot;0&quot;,&quot;_legend&quot;:&quot;{score}\\\/{best} - ({count} {votes})&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 0px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 5px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 24px; height: 24px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 19.2px;\">\n            <span class=\"kksr-muted\">Rate this post<\/span>\n    <\/div>\n    <\/div>\n<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t\t\t\t<\/div>\r\n\t\t<\/section>\r\n\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t\t\t\t<\/div>\r\n\t\t<\/section>\r\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-a5316c8 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"a5316c8\" data-element_type=\"section\" id=\"end-tet\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\r\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\r\n\t\t\t\t\t<div class=\"elementor-column elementor-col-33 elementor-top-column elementor-element elementor-element-9cee58b\" data-id=\"9cee58b\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\r\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-807a4f7 elementor-widget__width-inherit elementor-widget elementor-widget-testimonial\" data-id=\"807a4f7\" data-element_type=\"widget\" data-widget_type=\"testimonial.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<style>\/*! elementor - v3.13.2 - 11-05-2023 *\/\r\n.elementor-testimonial-wrapper{overflow:hidden;text-align:center}.elementor-testimonial-wrapper .elementor-testimonial-content{font-size:1.3em;margin-bottom:20px}.elementor-testimonial-wrapper .elementor-testimonial-name{line-height:1.5;display:block}.elementor-testimonial-wrapper .elementor-testimonial-job{font-size:.85em;display:block}.elementor-testimonial-wrapper .elementor-testimonial-meta{width:100%;line-height:1}.elementor-testimonial-wrapper .elementor-testimonial-meta-inner{display:inline-block}.elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-details,.elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-image{display:table-cell;vertical-align:middle}.elementor-testimonial-wrapper .elementor-testimonial-meta .elementor-testimonial-image img{width:60px;height:60px;border-radius:50%;-o-object-fit:cover;object-fit:cover;max-width:none}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-image{padding-right:15px}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-aside .elementor-testimonial-details{text-align:left}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-details,.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-image{display:block}.elementor-testimonial-wrapper .elementor-testimonial-meta.elementor-testimonial-image-position-top .elementor-testimonial-image{margin-bottom:20px}<\/style>\t\t<div class=\"elementor-testimonial-wrapper\">\r\n\t\t\t\r\n\t\t\t\t\t\t<div class=\"elementor-testimonial-meta elementor-has-image elementor-testimonial-image-position-top\">\r\n\t\t\t\t<div class=\"elementor-testimonial-meta-inner\">\r\n\t\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-testimonial-image\">\r\n\t\t\t\t\t\t\t<a href=\"https:\/\/www.exoplatform.com\/blog\/author\/ayoub-zayati\/\" target=\"_blank\"><img decoding=\"async\" src=\"https:\/\/secure.gravatar.com\/avatar\/965fd745623720d02d95c5ea0d0a4a81?s=96&amp;d=mm&amp;r=g\" title=\"\" alt=\"\" loading=\"lazy\" \/><\/a>\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"elementor-testimonial-details\">\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-testimonial-name\" href=\"https:\/\/www.exoplatform.com\/blog\/author\/ayoub-zayati\/\" target=\"_blank\">Ayoub Zayati<\/a>\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t\t\t\t<\/div>\r\n\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-column elementor-col-66 elementor-top-column elementor-element elementor-element-ad18d96\" data-id=\"ad18d96\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\r\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-13f4de7 elementor-widget elementor-widget-testimonial\" data-id=\"13f4de7\" data-element_type=\"widget\" data-widget_type=\"testimonial.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"elementor-testimonial-wrapper\">\r\n\t\t\t\t\t\t\t<div class=\"elementor-testimonial-content\">\n  <figcaption>\n  <\/figcaption>\n<\/div>\r\n\t\t\t\r\n\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t\t\t\t<\/div>\r\n\t\t<\/section>\r\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-216307b elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"216307b\" data-element_type=\"section\">\r\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\r\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-475b5f1\" data-id=\"475b5f1\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\r\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-de26b17 faq-id elementor-widget elementor-widget-heading\" data-id=\"de26b17\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h6 class=\"elementor-heading-title elementor-size-default\">Related posts<\/h6>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-6aa12de emp-cat elementor-widget elementor-widget-shortcode\" data-id=\"6aa12de\" data-element_type=\"widget\" data-widget_type=\"shortcode.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"elementor-shortcode\">\n\t<div class=\"am_ajax_post_grid_wrap\"  style=\"background-color: transparent !important; \" data-pagination_type=\"load_more\" data-am_ajax_post_grid='{\"show_filter\":\"yes\",\"btn_all\":\"yes\",\"initial\":\"-1\",\"layout\":\"1\",\"post_type\":\"post\",\"posts_per_page\":\"3\",\"cat\":\"\",\"terms\":\"\",\"paginate\":\"no\",\"hide_empty\":\"true\",\"orderby\":\"date\",\"order\":\"ASC\",\"pagination_type\":\"load_more\",\"infinite_scroll\":\"\",\"animation\":\"\",\"grid_id\":\"\"}'>\r\n\r\n\t\t\t\t\t<div class=\"asr-filter-div\" data-layout=\"1\"><ul>\r\n\t\t\t\t\t\t\t\t\t<li \r\n\r\n\r\n\r\n \r\n   class=\"asr_texonomy active\" style=\"font-weight:bold;\"data_id=\"-1\" style=\"background-color: transparent !important;\">All<\/li>\r\n\t\t\t\t\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1302\">eXo<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"508\">eXo<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"642\">eXo<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1407\">Anerkennung der Mitarbeiter<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"454\">Digital workplace<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"500\">Digital workplace<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1337\">Arbeitsplatz<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"462\">Employee engagement<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"616\">Engagement collaborateur<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1465\">Branchentrends<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"486\">Open source<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"506\">Open source<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"620\">Avenir du travail<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1411\">Cartoon<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"504\">Future of work<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1137\">Actualit\u00e9s<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1366\">Change Management<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"460\">Internal communication<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"492\">Collaboration<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"458\">Collaboration<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1287\">Digital Workplace<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1323\">Digitale Transformation<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"496\">Exp\u00e9rience collaborateur<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"705\">News<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"452\">intranet<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1135\">intranet<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"494\">Communication interne<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1311\">Infografik<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"409\">workplace<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1294\">interne Kommunikation<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"456\">Knowledge management<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"618\">onboarding<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"512\">Employee experience<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"490\">Gestion des connaissances<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1281\">intranet<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"502\">Conduite de changement<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"514\">Employee productivity<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1329\">Kollaboration<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1451\">Leadership<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1187\">Leadership<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"614\">onboarding<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1183\">Cartoon<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"518\">Employee recognition<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1331\">Leitfaden<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1181\">Astuces et bonnes pratiques<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"516\">Change management<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1292\">Mitarbeiter engagement<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"813\">Cartoon<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"411\">Etudes de cas<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1339\">Mitarbeiter Erfahrung<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"622\">Digital transformation<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1175\">Guide<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1317\">Nachrichten<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"799\">Infographic<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1185\">Infographie<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1403\">Onboarding<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1300\">Open source<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"510\">Remote work<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"498\">Productivit\u00e9<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1173\">T\u00e9l\u00e9travail<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"488\">Transformation digitale<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1179\">Tutoriel<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1443\">Actualit\u00e9s produit<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1562\">Extranet<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1461\">Industry trends<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1445\">Product News<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1447\">Produkt Nachrichten<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1309\">Produktivit\u00e4t<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1405\">Reconnaissance des employ\u00e9s<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1307\">Telearbeit<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1463\">Tendances<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1449\">Thought leadership<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1345\">Tipps und Tricks<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"780\">Tips &amp; Tricks<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"819\">Tutorial<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1269\">Uncategorized<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"699\">Uncategorized<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1378\">Wissensmanagement<\/li>\r\n\t\t        \t\t            <li class=\"asr_texonomy\" data_id=\"1304\">Zukunft der Arbeit<\/li>\r\n\t\t        \t        <\/ul><\/div>\r\n\t    \r\n\t    <div class=\"asr-ajax-container\" style=\"background-color: transparent !important;\">\r\n\t\t    <div class=\"asr-loader\">\r\n\t\t    \t<div class=\"lds-dual-ring\"><\/div>\r\n\t\t    <\/div>\r\n\t\t    <div class=\"asrafp-filter-result\">\r\n\t\t    \t<div class=\"am-postgrid-wrapper\">\r\n\r\n\t\t<div class=\"am_post_grid am__col-3 am_layout_1  \">\r\n\t\t\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"am_grid_col\">\r\n\t\t\t\t<div class=\"am_single_grid\">\r\n\t\t\t\t\t<div class=\"am_thumb\">\r\n\t\t\t\t\t<a href=\"https:\/\/www.exoplatform.com\/blog\/open-source-digital-sovereignty-ow2con-2026\/\">\r\n\t\t\t\t\t\t<img width=\"800\" height=\"533\" src=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/05\/Banner-blog-OW2con26.png\" class=\"attachment-full size-full wp-post-image\" alt=\"\" decoding=\"async\" loading=\"lazy\" srcset=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/05\/Banner-blog-OW2con26.png 800w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/05\/Banner-blog-OW2con26-300x200.png 300w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/05\/Banner-blog-OW2con26-768x512.png 768w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/05\/Banner-blog-OW2con26-710x473.png 710w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/05\/Banner-blog-OW2con26-492x328.png 492w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/05\/Banner-blog-OW2con26-354x236.png 354w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/05\/Banner-blog-OW2con26-197x131.png 197w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/05\/Banner-blog-OW2con26-100x67.png 100w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/05\/Banner-blog-OW2con26-45x30.png 45w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/05\/Banner-blog-OW2con26-640x426.png 640w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t<\/a>\t\r\n\t\t\t\t\t<\/div>\r\n\t\t\t\t\t<div class=\"am_cont\">\r\n\t\t\t\t\t\t<a href=\"https:\/\/www.exoplatform.com\/blog\/open-source-digital-sovereignty-ow2con-2026\/\"><h2 class=\"am__title\">Open Source and Digital Sovereignty:  Join us at OW2con\u201926!<\/h2><\/a>\r\n\t\t\t\t\t\t<div class=\"am__excerpt\">\r\n\t\t\t\t\t\t<a href=\"https:\/\/www.exoplatform.com\/blog\/open-source-digital-sovereignty-ow2con-2026\/\">On June 2 and 3, the eXo Platform team will participate in\u2026<\/a>\r\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t<a href=\"https:\/\/www.exoplatform.com\/blog\/open-source-digital-sovereignty-ow2con-2026\/\" class=\"am__readmore\">Read More<\/a>\r\n\t\t\t\t\t<\/div>\r\n\t\t\t\t\t<div class=\"post_tags\"><a href=\"https:\/\/www.exoplatform.com\/blog\/news\/\" title=\"News Tag\" class=\"news\">News<\/a> <\/div>\t\t\t\t\t<div class=\"am_time\">\r\n\t\t\t\t\t\t<span class=\"bsf-rt-reading-time\"><span class=\"bsf-rt-display-label\" prefix=\"Reading Time\">\n\t\t<\/span> <span class=\"bsf-rt-display-time\" reading_time=\"1\"><\/span> \n\t\t<span class=\"bsf-rt-display-postfix\" postfix=\"min\"><\/span><\/span> \r\n\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t<\/div>\r\n\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"am_grid_col\">\r\n\t\t\t\t<div class=\"am_single_grid\">\r\n\t\t\t\t\t<div class=\"am_thumb\">\r\n\t\t\t\t\t<a href=\"https:\/\/www.exoplatform.com\/blog\/exo-platform-ai-augmented-digital-workplace\/\">\r\n\t\t\t\t\t\t<img width=\"800\" height=\"533\" src=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/Cover_blog_features_IA_EN-800x533-1-1.png\" class=\"attachment-full size-full wp-post-image\" alt=\"\" decoding=\"async\" loading=\"lazy\" srcset=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/Cover_blog_features_IA_EN-800x533-1-1.png 800w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/Cover_blog_features_IA_EN-800x533-1-1-300x200.png 300w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/Cover_blog_features_IA_EN-800x533-1-1-768x512.png 768w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/Cover_blog_features_IA_EN-800x533-1-1-710x473.png 710w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/Cover_blog_features_IA_EN-800x533-1-1-492x328.png 492w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/Cover_blog_features_IA_EN-800x533-1-1-354x236.png 354w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/Cover_blog_features_IA_EN-800x533-1-1-197x131.png 197w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/Cover_blog_features_IA_EN-800x533-1-1-100x67.png 100w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/Cover_blog_features_IA_EN-800x533-1-1-45x30.png 45w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/Cover_blog_features_IA_EN-800x533-1-1-640x426.png 640w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t<\/a>\t\r\n\t\t\t\t\t<\/div>\r\n\t\t\t\t\t<div class=\"am_cont\">\r\n\t\t\t\t\t\t<a href=\"https:\/\/www.exoplatform.com\/blog\/exo-platform-ai-augmented-digital-workplace\/\"><h2 class=\"am__title\">eXo Platform launches an AI-augmented Digital Workplace<\/h2><\/a>\r\n\t\t\t\t\t\t<div class=\"am__excerpt\">\r\n\t\t\t\t\t\t<a href=\"https:\/\/www.exoplatform.com\/blog\/exo-platform-ai-augmented-digital-workplace\/\">Today, we are proud to introduce our new AI-augmented Digital Workplace.<\/a>\r\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t<a href=\"https:\/\/www.exoplatform.com\/blog\/exo-platform-ai-augmented-digital-workplace\/\" class=\"am__readmore\">Read More<\/a>\r\n\t\t\t\t\t<\/div>\r\n\t\t\t\t\t<div class=\"post_tags\"><a href=\"https:\/\/www.exoplatform.com\/blog\/product-news\/\" title=\"Product News Tag\" class=\"product-news\">Product News<\/a> <\/div>\t\t\t\t\t<div class=\"am_time\">\r\n\t\t\t\t\t\t<span class=\"bsf-rt-reading-time\"><span class=\"bsf-rt-display-label\" prefix=\"Reading Time\">\n\t\t<\/span> <span class=\"bsf-rt-display-time\" reading_time=\"17\"><\/span> \n\t\t<span class=\"bsf-rt-display-postfix\" postfix=\"min\"><\/span><\/span> \r\n\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t<\/div>\r\n\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t<div class=\"am_grid_col\">\r\n\t\t\t\t<div class=\"am_single_grid\">\r\n\t\t\t\t\t<div class=\"am_thumb\">\r\n\t\t\t\t\t<a href=\"https:\/\/www.exoplatform.com\/blog\/multi-llm-ai-digital-workplace-launch\/\">\r\n\t\t\t\t\t\t<img width=\"800\" height=\"533\" src=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/exo-platform-AI-press-release.png\" class=\"attachment-full size-full wp-post-image\" alt=\"\" decoding=\"async\" loading=\"lazy\" srcset=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/exo-platform-AI-press-release.png 800w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/exo-platform-AI-press-release-300x200.png 300w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/exo-platform-AI-press-release-768x512.png 768w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/exo-platform-AI-press-release-710x473.png 710w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/exo-platform-AI-press-release-492x328.png 492w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/exo-platform-AI-press-release-354x236.png 354w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/exo-platform-AI-press-release-197x131.png 197w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/exo-platform-AI-press-release-100x67.png 100w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/exo-platform-AI-press-release-45x30.png 45w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2026\/03\/exo-platform-AI-press-release-640x426.png 640w\" sizes=\"(max-width: 800px) 100vw, 800px\" \/>\t\t\t\t\t<\/a>\t\r\n\t\t\t\t\t<\/div>\r\n\t\t\t\t\t<div class=\"am_cont\">\r\n\t\t\t\t\t\t<a href=\"https:\/\/www.exoplatform.com\/blog\/multi-llm-ai-digital-workplace-launch\/\"><h2 class=\"am__title\">eXo Platform Introduces a Controlled, Multi-LLM AI Digital Workplace<\/h2><\/a>\r\n\t\t\t\t\t\t<div class=\"am__excerpt\">\r\n\t\t\t\t\t\t<a href=\"https:\/\/www.exoplatform.com\/blog\/multi-llm-ai-digital-workplace-launch\/\">Paris, March 31, 2026 \u2013 eXo Platform announces the launch of its\u2026<\/a>\r\n\t\t\t\t\t\t<\/div>\r\n\t\t\t\t\t\t<a href=\"https:\/\/www.exoplatform.com\/blog\/multi-llm-ai-digital-workplace-launch\/\" class=\"am__readmore\">Read More<\/a>\r\n\t\t\t\t\t<\/div>\r\n\t\t\t\t\t<div class=\"post_tags\"><a href=\"https:\/\/www.exoplatform.com\/blog\/news\/\" title=\"News Tag\" class=\"news\">News<\/a> <\/div>\t\t\t\t\t<div class=\"am_time\">\r\n\t\t\t\t\t\t<span class=\"bsf-rt-reading-time\"><span class=\"bsf-rt-display-label\" prefix=\"Reading Time\">\n\t\t<\/span> <span class=\"bsf-rt-display-time\" reading_time=\"1\"><\/span> \n\t\t<span class=\"bsf-rt-display-postfix\" postfix=\"min\"><\/span><\/span> \r\n\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t<\/div>\r\n\t\t\t\r\n\t\t\t\t<\/div>\r\n\r\n\t\t<div class=\"am_posts_navigation\">\r\n\t\t<button type='button' data-paged='1' data-next='2' class=' am-post-grid-load-more '>Voir Plus<\/button>\t\t<\/div>\r\n\r\n\t\t<\/div>\t\t    <\/div>\r\n\t    <\/div>\r\n    <\/div>\r\n\r\n\t\n\n\n\n\t\t\t\n\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t\t\t\t<\/div>\r\n\t\t<\/section>\r\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-6c661c7 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"6c661c7\" data-element_type=\"section\">\r\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\r\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-4cc91c3\" data-id=\"4cc91c3\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\r\n\t\t\t\t\t\t\t\t<section class=\"elementor-section elementor-inner-section elementor-element elementor-element-bdf6033 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"bdf6033\" data-element_type=\"section\">\r\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\r\n\t\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-5cc2f55\" data-id=\"5cc2f55\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\r\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-abc1229 elementor-widget elementor-widget-heading\" data-id=\"abc1229\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t<h6 class=\"elementor-heading-title elementor-size-default\">Leave a Reply<\/h6>\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t<div class=\"elementor-column elementor-col-50 elementor-inner-column elementor-element elementor-element-018e67e\" data-id=\"018e67e\" data-element_type=\"column\">\r\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\r\n\t\t\t\t\t\t\t\t<div class=\"elementor-element elementor-element-e080249 elementor-widget elementor-widget-text-editor\" data-id=\"e080249\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t\t\t<p>( Your e-mail address will not be published)<\/p>\t\t\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t\t\t\t<\/div>\r\n\t\t<\/section>\r\n\t\t\t\t<div class=\"elementor-element elementor-element-1d5f39f elementor-widget-divider--view-line elementor-widget elementor-widget-divider\" data-id=\"1d5f39f\" data-element_type=\"widget\" data-widget_type=\"divider.default\">\r\n\t\t\t\t<div class=\"elementor-widget-container\">\r\n\t\t\t\t\t<div class=\"elementor-divider\">\r\n\t\t\t<span class=\"elementor-divider-separator\">\r\n\t\t\t\t\t\t<\/span>\r\n\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t\t<\/div>\r\n\t\t<\/div>\r\n\t\t\t\t\t\t\t<\/div>\r\n\t\t<\/section>\r\n\t\t\t\t\t\t\t<\/div>\r\n\t\t","protected":false},"excerpt":{"rendered":"How to integrate Angular business applications in eXo Platform Frequently, we develop business web applications with Angular framework. With just a few steps, these applications can be migrated easily to get them integrated as eXo applications. Content That way, we will not only benefit from all eXo Platform native features, but also increase adoption by [&hellip;]","protected":false},"author":60,"featured_media":18171,"comment_status":"open","ping_status":"open","sticky":false,"template":"main1-article.php","format":"image","meta":[],"categories":[508,819],"tags":[606,827,1249],"lang":"en","translations":{"en":36824},"pll_sync_post":[],"_links":{"self":[{"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/posts\/36824"}],"collection":[{"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/users\/60"}],"replies":[{"embeddable":true,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/comments?post=36824"}],"version-history":[{"count":0,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/posts\/36824\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/media\/18171"}],"wp:attachment":[{"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/media?parent=36824"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/categories?post=36824"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/tags?post=36824"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}