Recent Bloggers

Christine Reyes

Staff
2 Mensagens
26 de Setembro de 2016

Javeed Chida

12 Mensagens
26 de Setembro de 2016

Cristina Gonzalez

Staff
1 Mensagens
26 de Setembro de 2016

Geert van der Ploeg

1 Mensagens
20 de Setembro de 2016

Olaf Kock

Staff
117 Mensagens
20 de Setembro de 2016

Antonio Pol

Staff
1 Mensagens
19 de Setembro de 2016

David H Nebinger

31 Mensagens
15 de Setembro de 2016

Jan Eerdekens

13 Mensagens
14 de Setembro de 2016

Nate Cavanaugh

Staff
39 Mensagens
12 de Setembro de 2016

Maarten van Heiningen

2 Mensagens
5 de Setembro de 2016

有的放矢,Liferay进军数字体验市场

Company Blogs 3 de Junho de 2016 Por Neil Jin Staff

业内知名门户(Portal)软件商Liferay已经将新产品重命名为DXP - 数字体验平台,剑指数字体验市场。

 

这种转变其实并不是Liferay特有的,它更像是一种自然演化。“传统portal中的功能,已无法满足当今客户的功能需求,在Liferay平台上我们需要持续开发和整合这些需求功能。所以基于这些转变,我们需要重定义我们在市场中的位置。”Liferay首席执行官Bryan Cheung如是说。

 

Chueng说,当我们在观察分析自己的案例时候,发现我们已经朝着数字体验管理方向转变了。但是从某些角度看,Liferay却有着其他数字体验平台不具备的特性

 

首先,由于portal独特的架构,Liferay可以深度整合多种后台商务系统。正因为Liferay是许多客户使用的骨干门户,我们借此得以深入客户体验。这也使得Liferay,可以在整个客户生命周期中,帮助客户打造更好的客户关系,而不仅仅是停留在客户获取阶段。

什么是Liferay DXP

 

Liferay DXP是由一些不同的组件构成。核心部分是portal平台本身。其次是整合的内置后台系统包括CRM、ERP、技术支持和其他系统。整合平台使用的是微服务架构,使其定制化与整合客户需求功能更加方便。

 

Chueng说,对于企业来说,深度数字化意味着经营方式的转变。Liferay DXP可以深入到业务流程处理,以助力客户系统设计与模块整合,使其可以重新配置和部署必要的商业服务。

 

这样的架构,可以使客户在他们的客户生命周期中提供丰富用户体验方案,包括页面体验、移动设备体验、离线在线混合体验。Liferay甚至支持新型技术的的接口,如React或者Angular。这些体验还包括市场前景站点、客户站点(客户登录接口)、客户支持(在客户门户系统或者技术支持系统中)。

 

基于Liferay DXP平台,可以轻松的创建网页站点、登录页面、移动站点、移动应用和表单等。亦可创建定向受众体验和为市场客户支持和服务定制个性化体验。

 

Liferay DPX 平台还有两个组件年内问世,营销活动管理(Campaign Management)和单一客户视图(Single View of Customer, SVOC)。SVOC组件可以用来定制化体验,它能够将零散的信息整理重构,然后集中显示。营销活动管理组件使市场营销人员通过一些活动,如促销活动、客户支持或服务,以提高目标客户的参与度。

 

下面是一个银行柜员使用的页面中显示的单一用户视图。在一个页面中,柜员可以看见实时的相关信息,比如客户与银行最后一次的对话(也可能是其他任何信息),这些信息是从银行中其他部门的后台系统中整理出来。基于视图中的信息,柜员可以向用户提供更精准的建议,为银行开创更多交叉销售和业绩提升机遇。

 

客户门户新兴方案

 

Chueng论及了Liferay在传统客户门户解决方案,重点不仅是考虑到成本方面,同时也顾及拓展更多机遇、提供自助服务、强化客户忠诚度以及在与客户的交互中增进购买率。

 

Cheung谈论的另外一个领域就是如何让客户更道德的去管理他们的客户数据。Chueng相信,终端用户理应在如何使用他们自己的数据有一定程度的控制,公司也需要工具来控制用户数的的安全性和敏感性。

 

Liferay DXP采用订阅服务以及混合式结局方案(例如,云服务中的营销活动管理和SVOC)的销售方式。在未来Liferay也会寻机提供更多的管理服务。

 

完备的用户体验

 

Liferya正在以一种独创的方式前进。在整个市场营销领域,整体客户生命周期支持的解决方案,是许多其他数字体验商从未提及的。在这个方案,Liferay在整体用户体验扮演者更重要的角色。

 

大多数的厂商关注在客户获取客户服务阶段。过度关注某一方面会,都会使企业在用户全局参数方面时使失焦。其实这么做也不意味着对与不对,但是对于许多企业,有一种基于各种组件的一体化的解决方案来帮助企业优化业务处理了流程,是一种更智慧的选择。

 

原文地址:http://www.cms-connected.com/News-Articles/May-2016/%E2%80%8BLiferay-Takes-Direct-Aim-at-the-Digital-Experienc

原文作者:BARB MOSHER ZINCK

Liferay DXP数字体验平台,荣耀绽放:端对端的客户体验

Company Blogs 24 de Maio de 2016 Por Neil Jin Staff

知名软件厂商Liferay,已经宣布Lifeay Digital Experience Platform(DXP)的面世。

此次Liferay公开的这个全新的数字平台,针对企业管理体验和用户端对端关系管理在设计上有了一个质的飞跃。这些全新的设计可以向企业展现出他们数字用户的的全貌,为桌面站点,移动站点,社交平台和店面的触屏设备等众多平台提供出众一致性客户体验。

 

进化中的市场

商务巨头们很早就明白一个道理,今天的市场早就已经变化了。当今客户们至始至终都希望优化客户体验。在最新的产品中,Liferay正在通过新设计来企及这一目标。

Liferay的产品副总裁Edwin Chueng,阐释了这一观点:
“当今的商务市场,早就超越了仅将目光放在用户的体验这一层面。Liferay DXP通过革命性的创新体验,帮助企业博得客户信心,赢得竞标,开创更多销售机遇。在深度整合的商务流程系统中,企业可以全面掌握客户偏好和历史事件,及时为客户提供优质资源及建议。”
 

Liferay DXP:惊鸿一瞥

Liferay DXP平台上,销售、市场,客户支持与服务团队可以真正的为创造优质的客户体验而协作。Liferay可以汇集不同的系统中的信息,以更全面的方式在平台上展现出来借以优化客户互动体验,整合企业运维流程。

Liferay DXP也可以促进合作伙伴和员工与客户间的交流,借以缔造更佳的企业印象。
通过以下几个方面,Liferay将其实现:
 
  • 弹性架构 - 以变应变:通过高复用性的微服务与高整合性的应用,Liferay可以快速实现数字策略以适应不断更新的尖端技术。

  • 体验管理:基于精准的大数据信息,从促销活动一直到客户服务处理,每一个直接面对客户的商务环节都可以量身打造。

  • 单一客户视图(SVC):基于企业中不同的数据采集点,例如:客户情绪、兴趣点或重要对话,Liferay DXP将所有信息糅合一体,为企业提供单一的客户资料视图。

  • 定向数据:通过使客户访问视频、推广链接、社区活动与社交资料来丰富客户体验。

  • 与新兴技术对接:DXP设计初衷就是为了支持新兴的移动前段框架。这些框架被众多移动前段开发者钟爱和广泛应用。

Liferay的数字体验平台方案还有另外三重概念:

 

  1. 真正涵盖(促成)客户旅程:秉承Liferay portal的一贯作风,Liferay DXP更加的适应整个的客户生命周期。生命周期通常是指客户从观望(网站匿名访客)到转变成客户(注册)再到拥护(在客户门户与客户服务系统中)的过程。其他关注CMS产品通常只关注在客户的观望周期。基于Liferay以往的丰富经验,Lifeay在银行业的地位独一无二。

  2. 岂止于客户,广泛的目标受众:除了客户之外,Liferay DXP也是为企业合作伙伴和员工设计的。设计的初衷是为了确保Liferay DXP能够胜任于企业内部协作和效率优化。

  3. 完善的商务平台:Liferay DXP缔造了丰富的协作功能,基于整合后台系统,将更多独立业务部门的信息整理有效利用。

更多信息,请访问Liferay DXP官网
 
原文链接:https://www.cmscritic.com/liferay-digital-experience-platform/
原文作者:Kaya Ismail

使用Liferay IDE 3.0创建支持Service Builder的portlet module

Technical Blogs 4 de Maio de 2016 Por Neil Jin Staff

Liferay IDE 下载页面: https://web.liferay.com/downloads/liferay-projects/liferay-ide

Liferay IDE 3针对Liferay 7.0(Liferay DXP)做了很多的改变。其中一项就是在Liferay Blade,Eclipse Gradle和BND tool的基础上完成了创建OSGi module portlle的向导,通过向导就可以简单的创建出portlet module了。在我的客户和培训学院中,所有的技术人员在开始最关心的问题都是在Liferay 7中,怎么创建一个使用Service Builder的MVC portlet。在Liferay IDE 3中,实现起来其实非常简单。

 

首先需要创建一个Liferay Workspace项目.

Liferay Workspace更像是一个Liferay项目的容器,而不是一个类似于eclipse workspace的工作空间。在Liferay Workspace中可以开发和管理Liferay插件。

接下来点击File -> New -> Liferay Module Project,然后选择servicebuilder为项目模板。

在Liferay Workspace视图模式下

我们可以看到在新建service builder的项目下有两个gradle项目。API项目包括了各种接口和服务定义。在6.2的项目中这些文件通常是在service文件夹下。Service项目中包含了服务的具体实现源码和服务配置。在6.2中是在src文件夹下面。

在service项目中,包含了service.xml。可以根据需求改变。接下来就可以在Gradle Task窗口中,运行service项目中的buildservice任务了,这样就可以生成所需的服务了。

那么,接下来的问题是,怎么调用这个服务呢。

在7.0的项目中,我们使用gradle来管理依赖。

我们可以创建一个mvc portlet类型的Liferay Module Project。然后修改build.gradle文件。按照我们文章中的示例,我们可以添加下列代码来声明依赖。

compile project(":modules:service-builder-project:service-builder-project-api")

这样在mvc portlet项目中就可以引用服务了。如果IDE的编辑器依然报告有依赖的错误,可以右键点击项目,然后gradle -> refreash gradle project,这样编辑器就会重新计算依赖了。

在部署项目的时候,需要部署三个jar,分别是api,service和mvc portlet。

Creating service builder mvc portlet in Liferay 7 with Liferay IDE 3.

Company Blogs 26 de Abril de 2016 Por Neil Jin Staff

Liferay IDE Download Page: https://web.liferay.com/downloads/liferay-projects/liferay-ide

Liferay IDE 3 has massive change regarding to Liferay 7.0(Liferay DXP). One of the change is it streamlines the creation of OSGi module portlet by utilizing Liferay Blade tool, gradle elipse plugin and bnd tool.

One of the most concerned question by the Liferay developers is how we develop Service Builder with MVC portlet in new Liferay 7 development pattern.

With Liferay IDE 3 it's quite easy!

First we need to create a Liferay Space project.

A Liferay Workspace is a project container for Liferay porjects, within the Liferay workspace, we can develop and manage Liferay plugins.

And next we need to create a new Module Project by clicking File -> New -> Liferay Module Project, and choose the Project Template Name servicebuilder.

In the Liferay Workspace perspective 

We can see there are 2 gradle project under the service builder project. API project containse the service definition and interfaces, as the service path folder in 6.2. Service project contains the actual implementation of the service, as the service code in src folder in 6.2.

It contains a default service.xml. You can change the xml according to your need. After that, you can run buildservice task of service-builder-project-service in Gradle Task Window. 

After running buildService then run build task, the service will be ready to use.

 

How can we reference this service module in a mvc portlet module?

We use gradle to manage dependency.

We can create a mvc portlet Liferay Module Project. And modify build.gradle file. In our case we can add the following code to the dependency declaration.

compile project(":modules:service-builder-project:service-builder-project-api")

The service will be available to the mvc portlet. If the editor still complain about the dependency you can right click to the project -> gradle -> refreash gradle project to refreash the project.

When you deploy the project, remember to deploy 3 jars for api, service and mvc portlet.

 

You can download an example project here.

Modify existing datepicker that has been existed in the page.

Technical Blogs 5 de Novembro de 2015 Por Neil Jin Staff

It's very convient to use <liferay-ui:input-date> tag to create a date field. But this just provide very basic use of aui date picker. And attributes doesn't cover all options of date picker. This makes me have to create my own aui date picker through javascript. But using <liferay-ui:input-date> can save me a lot of time. So I am going to introduce a practical way to apply advanced options to the date picker that has been generated by input-date tag. Actually you can use the same method to modify any date picker.

The component name of the date picker that is generated by tag is NAMESPACE+FIELD_NAME+DatePicker

For example :

Suppose we are in a portlet under name space "_PersonalInfo_WAR_PersonalInfoportlet_"

<liferay-ui:input-date name="birthday" yearParam="birthYear" yearValue="1984" monthParam="birthMonth" monthValue="01 dayParam="birthDate" dayValue="17" />

This tag generate a date picker called _PersonalInfo_WAR_PersonalInfoportlet_birthdayDatePicker

You can easiliy get the date picker's javascript object by this method:

var datePickerName = '_PersonalInfo_WAR_PersonalInfoportlet_birthdayDatePicker';

var datePicker = Liferay.component(datePickerName);

for example we want to limit the user's input range to be in last 100 days until today, you can modify the date picker's configuration

var today = new A.Date();
var calendar = datePicker.getCalendar();

if (calendar) {
    calendar.setAttrs({minimumDate:A.Date.addDays(today, -100), maximumDate:today);

}

Same idea if you want to change Date picker's default date format, you can change the mask. Basically if you get the date picker you can do whatever you want to do with it.

 

 

A perspective 3D Liferay desktop picture.

Company Blogs 5 de Março de 2013 Por Neil Jin Staff

This one was designed by using minecraft screenshot! When I see this, I am always feel this grand brandy! Simple, strong, stable and enough space for imagination. 

Hope you will like it. The full picture size is 1920x1080.

If anyone wants some other size, please leave a comment, I would like to make it.

 

1920x1080

Making a remote javascript library loaded dynamically by AUI and be an AUI plugin

Company Blogs 27 de Fevereiro de 2013 Por Neil Jin Staff

    In the real world project, there are times when a team develops some feature like google map, twitter, facebook that need remote javascript library between several portlets but for the same portal. There are many similiar features that needs to resuse many codes. We want out code to be consistence and easily to be managed and more importantly we don't want to waste time on mutiple people working on the same feature that ultimate increase the cost of a project and once there's a bug or requirement modification(people love to do that), that the whole team need to change their own code, which is really frustrating for the whole team.

    TWO ways we think of to solve this (actually there are more solutions):

    1. Making a shared js and code standard that everybody can read it and copy it to each own code.  This method still can not guarantee a developer that use the right code without updating their js file to the up-to-date.

    2. Making a global portlet as a dependency of the portlets. This portlet will mainly be set layout.static.portlets.all=<portletID>  in portal.properties and add a <liferay-util:html-top> tag to view.jsp page that loads the remote javascript libiary , and that all pages in the portal loaded the remote javascript library.

BUT, when using code like <script src="https://maps.googleapis.com/maps/api/js?sensor=false&amp;libraries=places" type="text/javascript"></script>, in some network environment like some companies or countries, facebook, google does not work very well, so the whole portal pages became extreamly slow to wait the until loading timeout. In my test sample, The longest time to wait a loading of facebook script on a page that does not use any feature was 11.98s and 1m 24s for loading google map script under a total refreshing page (shift + refresh).

    Why do we have to do this, load a unused script in a page in such a poor network environment? This really ruins the work of our core engineer. Core Engineers took really huge effort on decreasing some ms of loading time, but we just can simply increase seconds of loading time by adding 2 scripts. Fanstastic devil

    We don't have to do this. We can easily get rid of the features at the requirement analysis period.

    Once the features were made sure to use, we would choose a better way to handel this. At least, not let every page to load the script that is not useful.

    So We can still make a global portlet as a dependency, and load the script that we need. BUT, this script is not from the remote site directilly. This will be an aui plugin that handels the connection when we need. So that solves the problem.

For example to load twitter's script, the summary script is like this

AUI().add('aui-twitter', function(A) {


 var Lang = A.Lang,

 TWITTER = 'twitter',

 TWITTER_ADDR = '',

 /*this version only support share button yet*/

 TWITTER_BUTTON = 

 '<a href="https://twitter.com/share" class="twitter-share-button">Tweet</a>'

 ;


 var Twitter = A.Component.create({


   NAME: TWITTER,


   ARRTS: {

   },

   prototype: {

     initializer: function() {

       var instance = this;

       instance._loadScript();

     },

    _loadScript: function() {

      A.Get.script(

        'https://platform.twitter.com/widgets.js',

        {

          onSuccess: function() {

           //alert("load twitter script success");

          }

        }

      );

    },

    createTwitterButton: function(options) {

      var instance = this;

      var button = A.Node.create(TWITTER_BUTTON);

      var dataLang = (options.dataLang != null ? options.dataLang : instance.LANG.ENGLISH);

      var dataCount = (options.dataCount != null ? options.dataCount : instance.COUNT_ALIGN.HORIZONTAL);

     var dataURL = (options.dataURL != null ? options.dataURL : '');


     if(options.largeButton) {

       button.setAttribute('data-size', 'large');

      }


      button.setAttribute('data-lang', dataLang);

      button.setAttribute('data-count', dataCount);

      button.setAttribute('data-url', dataURL);


      A.one(options.contentBox).append(button);


      return button;


    },


    //can add more features


    COUNT_ALIGN: {

      HORIZONTAL: 'horizontal',

      VERTICAL: 'vertical'

    },

    LANG: {

      ARABIC: 'ar',

      CHINESE_SIMPLIFIED: 'zh-cn',

      CHINESE_TRADITIONAL: 'zh-tw',

      DUTCH: 'nl',

      ENGLISH: 'en', //can add other languages

    }

   }

});


A.Twitter = Twitter;

}, '@VERSION@', {skinnable:false, requires:['aui-base', 'get']});
 
 
Once the script is loaded, if an aui object is not generated, the script won't be loaded.
In the jsp page can simply add code like:
 
<div id="<portlet:namespace />twitter-share"></div>

<aui:script use="aui-base, aui-twitter">

  AUI().use(''aui-twitter', function(A) {

    var tObj = new A.Twitter();

    var btnOpt = {

      contentBox: "#<portlet:namespace />twitter-share",
      dataLang: tObj.LANG.ENGLISH,
      dataCount: tObj.COUNT_ALIGN.VERTICAL,
      largeButton: true
    };

    tObj.createTwitterButton(btnOpt);

  });
</aui:script>

 

If AUI can have an official plugin to support those famous libraries like google and facebook and etc it would be nicer. :)

A vertial 3D Liferay desktop

Company Blogs 23 de Dezembro de 2011 Por Neil Jin Staff

Recently I tried to draw a 3D Liferay Logo with AI at home. Haven't been drawing since graduate. Maybe it just an okey job to draw this, but it can keep me thinking new ideas, create new things.

'Cause through a picture we can imagine a lot of stories. Like in this picture I can think of a boy encounters a girl in Liferay. And draw them out. And use that as my Valentine's Day's desktop. I mean it could be many ways to keep imagination.

Mostrando 8 resultados.
Items 20
de 1