Showing posts with label guest blogger. Show all posts
Showing posts with label guest blogger. Show all posts

Monday, July 14, 2014

ec4u Releases Application Composer for Siebel Open UI

Earlier this year, I have been invited by ec4u expert consulting AG Germany to take part in a workshop. My job was to deliver Siebel Open UI training as well as discuss a new tool that ec4u planned to implement.

The tool should enable administrative users to quickly change the appearance of list and form applets in Siebel Open UI without having to use Siebel Tools. I was intrigued and inspired by the presentation of the tool during the workshop.

Just recently, ec4u has released the new tool, which now goes by the name 'Application Composer for Siebel Open UI'.


As we can learn from the fact sheet, the Application Composer provides an administrative view (and underlying data model) to store personalization/customization metadata for list and form applets.

Administrators can for example define which applet controls shall be hidden for certain responsibilities, positions, languages or organizations.

It is also possible to make fields mandatory, read-only or change the labels at runtime.

Form applet with changes made by ec4u Application Composer
ec4u makes the solution available to Siebel CRM customers and packages it with a deployment tool and consulting services.

For more information, please contact Markus Schneeweis.

have a nice day

@lex

Tuesday, June 10, 2014

Siebel CRM and Customer Experience (CX)

by Jan Peterson

In recent years and months the term "Customer Experience (CX)" has slowly but gradually started to replace the term "Customer Relationship Management (CRM)". A good starting point to understand CX is the Wikipedia article on Customer Experience. The article uses a widely accepted definition and states that "Customer experience (CX) is the sum of all experiences a customer has with a supplier of goods and/or services, over the duration of their relationship with that supplier."

As there are literally hundreds and thousands of articles, blogs and pieces of collateral around CX - just like the official Oracle CX blog for example - I will focus on highlighting some of the concepts and ideas.

Why should companies focus on CX?

The core value proposition is simple: Based on the assumption that we live in a commoditised world, the key differentiator for companies is the experience they provide to their customers. It is hard to come up with a current example where a company has a unique product. One might argue that Apple was in such a lucky situation when they released the first version of the iPhone and the iPad, but looking at the current market, I am unable to come up with any decent example. There are various surveys that underline that the customer experience is directly linked to the behavior of customers. The general message is simple (and totally in line with my own behavior ;-) ): "Happy customers will come back and buy more, while unhappy customers will buy somewhere else".

In the context of CX a generic customer life-cycle is often described by using the following picture:

Customer Lifecycle

From a traditional CRM point of view we differentiate between Sales, Service and Marketing  (and sometimes introduce Loyalty as another pillar). However, customers are not aware of the organisational structure of a company and don't care if they talk to the Service, Sales or Marketing department. Essentially, they are only interested in getting their immediate need addressed or issue resolved.

Hence, CX treats these disconnected processes as part of a single journey. In addition, while we talk about multi- or cross-channel CRM, there is no need to talk about cross-channel CX (or to use a modern term, omni-channel CX). CX implicitly includes all channels that have been touched along the customer lifecycle. I mentioned earlier that "unhappy customers will go somewhere else". I should have added "and will tell their friends about it - potentially using a social channel". As social channel and mobile internet access have entered our world after the first wave of CRM systems, CX acknowledges three things:
  1. Channels have evolved and changed over time. The most important changes include Social and Mobile.
  2. The power of an individual - primarily driven by social channels - has significantly increased.
  3. As a result of 1) and 2), achieving customer advocacy is a key goal for companies. This is inline with the observation that it is significantly more expensive to acquire new customers than retaining existing customers.
In summary, CX looks at customers more holistically than CRM and puts a higher focus on all customer interactions. To differentiate, companies need to provide a consistent and tailored experience across channels that is specific for every use case.

What does this mean for Oracle Siebel CRM?

Oracle has acquired various companies over the past few years to complement its CX application portfolio.
As the core of a CX solution is a CRM system, Oracle's customers have the following choice:
  • Oracle's cloud based CRM products
  • As Siebel remains Oracle's recommended on-premise CRM product, Siebel has a strong value proposition in the context of CX.
Siebel and CX - Application Portfolio
While Open UI has received a lot of attention, the work that Oracle has done around integrating the acquired CX products with Siebel has barely attracted any attention.  In the following articles we will look at how the different Oracle CX products fit into the Siebel universe and how they enable Siebel to be part of a compelling CX application portfolio.

Thanks to Jan for this article

have a nice day

@lex

Monday, June 9, 2014

Legodo Customer Communication Suite and Siebel CRM

On his On Demand Education blog, my friend, book reviewer and overall good guy Richard Napier recently started a series of posts on the integration of Legodo CCS (Customer Communication Suite) and Siebel CRM.

Image Source: legodo.com
***

Richard writes:

Legodo CCS � Why Siebel Consultants should know about CCS
Legodo / Actuate CCS � a Series of Overviews for Siebel People

As many of you read on the various websites like Siebel Observer, Actuate Corporation recently acquired Legodo AG, a German company based in Karlsruhe.

You, our dear readers, may be wondering what this company provides, and may be thinking about what this company means in the Siebel ecosystem. We at ODE think you need to know about this product and what it can do for your Siebel Enterprise customers.

ODE reached out to the company shortly after the news of the acquisition, and despite being very busy the company responded with lots of enthusiasm and information. We would like to take this opportunity to thank Sven, Martin and Manuel who were so kind to get involved in the process of getting ODE access to the software and helping us set it up with a Siebel Enterprise instance. So we are going to be giving you a couple of posts to discuss why Legodo (Actuate) CCS needs to be on every Siebel consultant�s radar:

  • Overview of the Product
  • Key Differentiators
  • Functionality that your customer needs

Now on to our first post about the Customer Communication Suite � Let us start by making some big picture statements. Not all of them are true for every CRM customer, but we are willing to bet that you have met many of them.

Generating documents (Word, PDF, HTML, MHTML, Emails, SMS, and Fax etc) in a CRM system such as Siebel is often a pain point. Thinking back to the �good old days� we would use Siebel Correspondence and be frustrated by the performance issues and stability � actually we would just question the concept of using Microsoft Word as the generation engine in an environment where we want to be  generating hundreds of documents a second. As a friend said the other day, that architecture was out of date ten years ago.

Creating report or document templates for use in Siebel or another partner application has never truly been open to the end user. One way or another, the different tools at our disposal have been too complicated or too unfriendly to give to a typical user of Microsoft Word. Some tools have been better than others, but most fail either at the document creation and process, or the document management / upload level.

Embedding business logic into the creation of documents has always been a struggle. Sure we can create snazzy documents and let Siebel users generate them by clicking on a list of �Siebel Reports�. But when it comes to stipulating that document A is not appropriate for customer 1, or that this document is only appropriate for Gold Customers, or that this document should only be emailed not printed, or that such and such a block of text is recommended in a particular context, then we struggle, let alone using different channels (SMS, Fax, Email and so on).

Updating Templates usually involves compilation, Integration Object changes and so on, slowing down the process and making it harder for the end Word user to be comfortable with their design tools. There are a number of other pain points but most people will share some of these I am sure. So with that in mind, here is an overview of Legodo / Actuate CCS.  It is comprised of several parts

Server Management application This application is the technical hub of the Suite. In here you will find the application setup, the connectivity to Siebel as well as the mappings between Siebel concepts and Legodo objects. At a simple level, this is where the structures we know as Business Objects and Components and Fields are mapped. Interestingly, the tool does not use Integration Objects, reading instead directly from the Repository tables which lessens the workload to deliver changes.



It also uses industry standard techniques (XSLT, XML) to get complex jobs done like mapping CCS output to Siebel. As a result, it makes it easier to find out what is going on, and to consult the output of a given session. Even ODE could do some debugging and fix an issue in this way, after only a few hours of operation. For our demonstration platform we were able to mount the server and the other components on Apache, which meant a quick and easy start! There is a whole slew of functionality that is business driven, such as defining which users can access which partner systems (Siebel, SAP etc), what business rules are applied to business processes (for example, apply the Gold Customer rule to a process to avoid the wrong document being printed for the wrong types of customer) and so on. We will investigate some of the key features in a later post.



About the CCS Designer

Sure, we have heard about MS Word Plugins before. But too often they are not business driven and don�t really speak to the report designer, more to a nebulous person called a report developer who wouldn�t have to exist in an ideal world. CCS Designer comes closest to the goal of business user-focus. The wizards are very easy to use, very simple to understand. CCS (wisely in my opinion) splits the wizard into two separate worlds � �business� and �technical� views that can be switched between depending on the user and what you are trying to do, so the information you get is not trying to be �all things to all people all of the time� which can make for an overload of information to view (and thus a big turn-off for report designers).



Particularly useful is the simple structure of the document (reusable text blocks, fields and other text) and the powerful tools to filter usage of a document and make it easier for the end users to make the right choices. For example, the ability to make text blocks no longer available, or to create them for availability in the future.


End User Interaction

After all this designer-related power and flexibility, it is nice to see the end user is not neglected either. Accessing CCS from Siebel or another Partner system displays a great dialogue. Organized templates, a preview, channel options and more give the user a flexible modern interface. It makes some of the things we have to put up with look really old-fashioned.



 vs



Of course the comparison is maybe not a fair one. CCS is so far into the realm of correspondence that mere report-generators cannot compete.

Naturally, the templates, options and channels available have all been set up in the application to ensure that only the right documents are available to the right people in the right format. And furthermore , design of business processes means the ability to communicate with the Partner System and work with native Siebel concepts like Actions.



The level of control of business processes extends right into documents that may be generated � notice in the screenshot below that the CCS end-user toolbar only offers the options to Print or Save, and that native functionality has been disabled.



There is so much more to CCS than this short post, and we will be investigating some more of the functionality in a short series.

For now though, let us leave you with a quote from a well-known reference customer (we will share another couple in the next post) :-

With Legodo, we can deliver customer relevant correspondence in the right context and at the right ti me � easily, directly, and with a personal touch of course.� Christian Viatte, Manager Service Champion Program, Swisscom

You can download the full Legodo / Swisscom PDF here. Until next time!

The original article can be found here.

***

have a nice day

@lex

Monday, May 26, 2014

Migrating Open UI Configuration to Oracle Sales Cloud - A Test Case

Thanks to Jan Peterson for this article

Oracle Sales Cloud has made some significant progress in the past 18 months and has become a very compelling offering. Alex has posted a summary of the R8 release a while ago. Simplified UI is - in my humbled opinion - the biggest improvement of recent releases. It has been introduced with R7 and significantly improved as part of R8.  As part of the R8 release, the configuration capabilities have been significantly enhanced. As I had a bit of time, I decided to test if more complex Open UI configuration examples can be migrated to Simplified UI. The short answer - at least for the example I picked - is "yes".

I have recently posted an article about arbor, a jQuery plug-in that allows to display complex relationship hierarchies. In the Open UI example we used it to display relationships of a contact. For Simplified UI, I picked opportunities as an example. Below a screenshot of the final outcome that shows a opportunity and its related recurring revenue items, contact and resources:


The configuration framework for Simplified UI in R8 is very powerful. Different options exist to achieve the outcome depicted above. As REST-web service support hasn't made it into  R8 I read Angelo Santagata's blog article with interest. Angelo is a Technology Evangelist working for Oracle. In the article Angelo presents a REST facade for Oracle's Sales Cloud.

I was keen to see how this works and decided to use it for my experiment:
  1. I downloaded and installed JDeveloper 11.1.2.4.0 and followed the description in Angelo's article to set up the facade. Angelo recommends to use Oracle Java Cloud - Oracle's Java PaaS service. It seems to be one of the less known facts that Oracle has a comprehensive offering in this space. While the recommendation is definitely correct I decided to use the integrated Weblogic server that comes as part of JDeveloper instead. Apparently this is a valid option for a small test case - for everything beyond a simple test case Java Cloud is the recommended option.
  2. Taking the original Open UI PR, removing all Open UI specifics and migrating it to a standalone html page turned out to be surprisingly painless. Plugging in the call to the REST facade and extracting the returned information was also straight forward, especially as JQuery provides easy API's for this use case.The final html-file can be downloaded here
  3. I deployed the standalone html page to the local web server that comes with Weblogic following the instructions given here. As the files gets embedded via an iFrame into Sales Cloud and Sales Cloud is using SSL-encryption the web page needs to get exposed via SSL.
  4. Eventually the HTML file needed to be embedded in Sales Cloud using the Application Composer. As the HTML page expects the current opportunity as a parameter we have to write a very simple Groovy-statement to pass the id:
Application Composer

Summary

While Sales Cloud doesn't have the depth and breadth of configuration capabilities of Open UI (yet?) it provides comprehensive options to tailor the user experience. As the Open UI capabilities come with some complexity, the Sales Cloud configuration framework is easy to master. In addition, combining Sales Cloud with a Java-based PaaS service - such as Oracle's Java Cloud - opens up a new world of opportunities.

have a nice day

Jan

Thursday, March 6, 2014

Siebel Mobile Applications: Create Activities for Outbound Phone Calls

The following is a guest post by Sandra Wamsley, Programmer Analyst at Laerdal Medical. In her article she describes how to use a custom Physical Renderer in Siebel Mobile Applications to capture the event when the user taps the phone icon to make a call as an activity record in the Siebel database. The code samples and manifest configuration described are for Siebel 8.1.1.10 / 8.2.2.3.

***

When we first began developing our Mobile application, an early request came in for the application to automatically create an Activity when an outbound phone call was made through it.


 This was accomplished by having a physical renderer call a business service from within Siebel, which would create the activity. We had to accomplish this on two different business components - Accounts and Contacts - using two different fields.

The physical renderer had to accomplish three things: It had to see that the phone icon had been pressed in the application, get the Id of the Contact or Account that the icon had been pressed on, and invoke the business service, passing it the Contact or Account Id.

We created two physical renderers for our environment, because there were two business components that the business service could be invoked from - Accounts and Contacts. On the Account BC, the PR looks for �MainPhoneNumber� and on the Contact BC it looks for �WorkPhoneNum.�

Below is the code for the physical renderer:

if (typeof(SiebelAppFacade.MobileAccountFormAppletPR) === "undefined") {

 SiebelJS.Namespace("SiebelAppFacade.MobileAccountFormAppletPR");
 SiebelApp.S_App.RegisterConstructorAgainstKey ("MobileAccountFormAppletPR",  "SiebelAppFacade.MobileAccountFormAppletPR");

 SiebelAppFacade.MobileAccountFormAppletPR = (function () {

  function MobileAccountFormAppletPR(pm){
         SiebelAppFacade.MobileAccountFormAppletPR.superclass.constructor.call(this,pm);
 this.GetPM().AddMethod("ShowSelection",recordChanged,{sequence:false,scope:this})
 }

SiebelJS.Extend(MobileAccountFormAppletPR, SiebelAppFacade.JQMFormRenderer);

function recordChanged() {
  var that=this;
  $("#"+this.GetPM().Get("GetControls")["MainPhoneNumber"].GetInputName()+"_tel").on('click',function(){

  SiebelJS.Log(that.GetPM().Get("GetBusComp").GetFieldValue("Id"));

  var svc = SiebelApp.S_App.GetService("Create Activity");
  var iPS = SiebelApp.S_App.NewPropertySet();
  iPS.SetProperty("Account Id",that.GetPM().Get("GetBusComp").GetFieldValue("Id"));
  iPS.SetProperty("Contact Id", "");
  outPS = svc.InvokeMethod("CreateActivity", iPS).childArray[0];
  debugger;
  })
 }
 return MobileAccountFormAppletPR;
 }());
}

This PR was used for Accounts. When the phone icon is clicked to make an outgoing call, the PR gets the Business Component in use to pull the record�s Id (Contact or Account), gets the Business Service (Create Activity), and gives it the Account Id. It also sends a blank string for Contact Id, which we used as an indicator of which PR had been called, but there are many other ways to accomplish this.

The Contact PR was identical, except that it used �WorkPhoneNum� instead of �MainPhoneNumber�, and it sent the Contact Id and a blank string for Account Id.

In addition to the Physical Renderer, we needed to update our Custom Manifest and Manifest Extensions files. In the Custom Manifest XML file, the following two sections were added to the <PLATFORM Name=�Mobile�> section. �MobileAccountFormAppletPR� and �MobileContactFormAppletPR� were the names of the Physical Renderers created earlier.

<KEY Name="MobileAccountFormAppletPR">
<FILE_NAME> 3rdParty/jqmobile/mobiscroll-2.0.full.min.js      </FILE_NAME>
<FILE_NAME> 3rdParty/jqmobile/jquery.mobile.simpledialog.min.js  </FILE_NAME>
<FILE_NAME> siebel/jqmformrenderer.js                            </FILE_NAME>
<FILE_NAME> siebel/custom/MobileAccountFormAppletPR.js           </FILE_NAME>
</KEY>

<KEY Name="MobileContactFormAppletPR">
<FILE_NAME> 3rdParty/jqmobile/mobiscroll-2.0.full.min.js         </FILE_NAME>
<FILE_NAME> 3rdParty/jqmobile/jquery.mobile.simpledialog.min.js  </FILE_NAME>
<FILE_NAME> siebel/jqmformrenderer.js                            </FILE_NAME>
<FILE_NAME> siebel/custom/MobileContactFormAppletPR.js           </FILE_NAME>
</KEY>

In the Manifest Extensions file, we needed to specify which applets should load these PRs. We ended up with five applets that had the option of triggering a phone call, and set the correct PRs from there.

SHCE Account Entry Applet - Mobile = MobileAccountFormAppletPR
SHCE Account Entry Applet ReadOnly - Mobile = MobileAccountFormAppletPR
SHCE Sales Contact Form Applet - Mobile = MobileContactFormAppletPR
SHCE Sales Contact Form Applet ReadOnly - Mobile = MobileContactFormAppletPR
SHCE Contact Form Applet Mobile = MobileContactFormAppletPR

From the JavaScript side of things, that was everything that had to be done. We built a business service to actually create the activity, and once we got them communicating with each other, it worked as intended. Now the user can click the icon to make a phone call, and an activity will be automatically created for them.

***

Many thanks to Sandra for sharing

have a nice day

@lex

Siebel Mobile Applications: Create Activities for Outbound Phone Calls

The following is a guest post by Sandra Wamsley, Programmer Analyst at Laerdal Medical. In her article she describes how to use a custom Physical Renderer in Siebel Mobile Applications to capture the event when the user taps the phone icon to make a call as an activity record in the Siebel database. The code samples and manifest configuration described are for Siebel 8.1.1.10 / 8.2.2.3.

***

When we first began developing our Mobile application, an early request came in for the application to automatically create an Activity when an outbound phone call was made through it.


 This was accomplished by having a physical renderer call a business service from within Siebel, which would create the activity. We had to accomplish this on two different business components - Accounts and Contacts - using two different fields.

The physical renderer had to accomplish three things: It had to see that the phone icon had been pressed in the application, get the Id of the Contact or Account that the icon had been pressed on, and invoke the business service, passing it the Contact or Account Id.

We created two physical renderers for our environment, because there were two business components that the business service could be invoked from - Accounts and Contacts. On the Account BC, the PR looks for “MainPhoneNumber” and on the Contact BC it looks for “WorkPhoneNum.”

Below is the code for the physical renderer:

if (typeof(SiebelAppFacade.MobileAccountFormAppletPR) === "undefined") {

 SiebelJS.Namespace("SiebelAppFacade.MobileAccountFormAppletPR");
 SiebelApp.S_App.RegisterConstructorAgainstKey ("MobileAccountFormAppletPR",  "SiebelAppFacade.MobileAccountFormAppletPR");

 SiebelAppFacade.MobileAccountFormAppletPR = (function () {

  function MobileAccountFormAppletPR(pm){
         SiebelAppFacade.MobileAccountFormAppletPR.superclass.constructor.call(this,pm);
 this.GetPM().AddMethod("ShowSelection",recordChanged,{sequence:false,scope:this})
 }

SiebelJS.Extend(MobileAccountFormAppletPR, SiebelAppFacade.JQMFormRenderer);

function recordChanged() {
  var that=this;
  $("#"+this.GetPM().Get("GetControls")["MainPhoneNumber"].GetInputName()+"_tel").on('click',function(){

  SiebelJS.Log(that.GetPM().Get("GetBusComp").GetFieldValue("Id"));

  var svc = SiebelApp.S_App.GetService("Create Activity");
  var iPS = SiebelApp.S_App.NewPropertySet();
  iPS.SetProperty("Account Id",that.GetPM().Get("GetBusComp").GetFieldValue("Id"));
  iPS.SetProperty("Contact Id", "");
  outPS = svc.InvokeMethod("CreateActivity", iPS).childArray[0];
  debugger;
  })
 }
 return MobileAccountFormAppletPR;
 }());
}

This PR was used for Accounts. When the phone icon is clicked to make an outgoing call, the PR gets the Business Component in use to pull the record’s Id (Contact or Account), gets the Business Service (Create Activity), and gives it the Account Id. It also sends a blank string for Contact Id, which we used as an indicator of which PR had been called, but there are many other ways to accomplish this.

The Contact PR was identical, except that it used “WorkPhoneNum” instead of “MainPhoneNumber”, and it sent the Contact Id and a blank string for Account Id.

In addition to the Physical Renderer, we needed to update our Custom Manifest and Manifest Extensions files. In the Custom Manifest XML file, the following two sections were added to the <PLATFORM Name=”Mobile”> section. “MobileAccountFormAppletPR” and “MobileContactFormAppletPR” were the names of the Physical Renderers created earlier.

<KEY Name="MobileAccountFormAppletPR">
<FILE_NAME> 3rdParty/jqmobile/mobiscroll-2.0.full.min.js      </FILE_NAME>
<FILE_NAME> 3rdParty/jqmobile/jquery.mobile.simpledialog.min.js  </FILE_NAME>
<FILE_NAME> siebel/jqmformrenderer.js                            </FILE_NAME>
<FILE_NAME> siebel/custom/MobileAccountFormAppletPR.js           </FILE_NAME>
</KEY>

<KEY Name="MobileContactFormAppletPR">
<FILE_NAME> 3rdParty/jqmobile/mobiscroll-2.0.full.min.js         </FILE_NAME>
<FILE_NAME> 3rdParty/jqmobile/jquery.mobile.simpledialog.min.js  </FILE_NAME>
<FILE_NAME> siebel/jqmformrenderer.js                            </FILE_NAME>
<FILE_NAME> siebel/custom/MobileContactFormAppletPR.js           </FILE_NAME>
</KEY>

In the Manifest Extensions file, we needed to specify which applets should load these PRs. We ended up with five applets that had the option of triggering a phone call, and set the correct PRs from there.

SHCE Account Entry Applet - Mobile = MobileAccountFormAppletPR
SHCE Account Entry Applet ReadOnly - Mobile = MobileAccountFormAppletPR
SHCE Sales Contact Form Applet - Mobile = MobileContactFormAppletPR
SHCE Sales Contact Form Applet ReadOnly - Mobile = MobileContactFormAppletPR
SHCE Contact Form Applet Mobile = MobileContactFormAppletPR

From the JavaScript side of things, that was everything that had to be done. We built a business service to actually create the activity, and once we got them communicating with each other, it worked as intended. Now the user can click the icon to make a phone call, and an activity will be automatically created for them.

***

Many thanks to Sandra for sharing

have a nice day

@lex

Monday, March 3, 2014

Siebel Open UI: Collapsible Applets - Another Revisit

By Jan Peterson

During a presentation to the technical team of a customer who is in the progress of updating to Open UI, I showed how easy it is to make all applets collapsible by just adding some code to a postload event handler.
We have looked at the general concepts in an earlier post:
postload.js

I quickly received a follow up question if it is possible to collapse applets automatically in case the applet doesn't have any records. As often in the new world of Open UI, the solution is very easy.

Replacing

oAppletPModel.SetProperty("defaultAppletDisplayMode", collapsed");

with

oAppletPModel.SetProperty("defaultAppletDisplayMode",
oAppletPModel.Get("GetNumRows") > 0) ? "expanded" : "collapsed");

does the job :-).

A few notes:
  • In the example I updated postload.js. For a production environment it is recommended to have a custom file that subscribes to the postload event..
  •  The postload event is only triggered if a user navigates to a new view or reloads the current view. If a child applet has no records and the user selects a different parent record which has some records in the child applet, the applet doesn't get automatically expanded. This can be achieved as well but requires some additional logic.
  • Not all applets support the "Default Applet Display Mode" user property. An example are most applets on the vanilla home views.
In summary, IP2013 makes it easy to make all applets collapsible and allows to add some additional logic around it.

Monday, February 10, 2014

Siebel Open UI: View PRs - a Toolbar to quickly access Applets

by Jan Peterson

In a previous post we already looked at physical renderers for views. Today we look at an example that was in a similar form part of the first pre-beta demos of Open UI (yes - the version that was shown during OOW 2011 :-) ) - a toolbar of buttons where each button represents an applet.

In our example, clicking the button will collapse all other applets (which is slightly different to the OOW 2011 demo where the corresponding applet was floating to the top):

Click to enlarge
The code structure of the PM is essentially the same as in the previous example:

Click to enlarge

Most of the logic resides in SetRenderer:
Click to enlarge
First, we create two buttons - one for collapsing all applets and one for expanding all applets.
Afterwards, we iterate through all applets and make sure that they are collapsible - a trick we looked at in a previous post.

Afterwards we create a button for each applet. The button-text is the label of the applet. As a small gimmick we add the number of records in the applet to the button-text. Pressing the button calls the method CollapseApplets which will collapse all applets but the applet linked to the button.

Finally, we inject the different buttons into the view.

In summary, View PRs allow to easily add additional UI features to views. In the example we create a toolbar which simplify access to applets in complex views.

have a nice day

Jan

Monday, February 3, 2014

Siebel Open UI: View PRs - Sort 'em out

Thanks to Jan again for this guest article

***

In prior releases of Open UI most configurations were limited to a single applet. Presentation Models (PMs) and Physical Renderers (PRs) could be reused for different applets but - apart from CSS changes - there was no documented way to provide changes outside of applets or enable configuration that spawned more than a single applet. Most of the time such changes ended up in the (undocumented) postload.js.

A feature that didn't make it into the first release of IP2013 but ended up in the first patchset are PMs and PRs for views  (I am pretty sure that I saw this documented in the release notes of patchset 1 - unfortunately I am unable to find the note - please drop me a note with the link if you have the URL at hand).

In case you are unfamiliar with the new concepts of patchsets have a look at Latest recommended maintenance pack for Siebel Open UI on Siebel Version 8.1.1.x and Version 8.2.2.x [Document 1535281.1]  which states:

 "For Siebel CRM version 8.1.1.11 and 8.2.2.4 (Innovation Pack 2013, also known as IP2013), Siebel Open UI fixes will no longer be shipped in monthly quick fix (QF) format but be part of the monthly IP2013 patchsets. For IP2013, regular fixes (including Siebel Open UI fixes) will be shipped as part of monthly bundles called Siebel IP2013 patchsets. These fixes also, are cumulative, meaning the fixes included in IP2013 Patchset 1 will be included in IP2013 Patchset 2".

View PM and PRs significantly mitigate the need to add code to postload.js. In the following we look at an example that enable two things in the vanilla view Contact Summary View:
  1. Making all applets in a view resizable
  2. Allowing to drag&drop applets without loosing a grid layout.


Creating a View PR follows the same steps as creating an Applet PR:

First, we create the PR code proper and save it in the custom folder. Kudos to Duncan Ford who wrote the first version of this View PR. 
    Click to enlarge
    As bookshelf doesn't contain any reference to View PRs (yet?) I spent a bit of time looking at the different events. So far I found four methods that are called:
    1. Init: the first method that is called. In the example, we use a complex looking CSS selector to identify the bottom four applets in our view. Afterwards we flag them with a class and and unique id and apply the JQuery-method sortable to the applets. This allows to drag and drop the four bottom applets in the view.
    2. Setup
    3. SetRenderer: In the example we iterate through all applets in the current view and apply the JQuery-method resizable to them which allows to dynamically resize all applets. SetRenderer is the first method in the chain in which GetAppletMap returns a list of applets. In Init and Setup the method returns an empty array.
    4. EndLife - called when a user navigates to a different view. It seems that it gets called twice.
    5. None of the methods seem to provide any predefined behavior but are just empty hooks. As an interesting matter of fact, ShowUI, BindData and BindEvents -as used by Applet PRs - are not called for View PRs. In case you are intested in the details have a look at the proxy file pmodel.js which defines the root class for View PMs.
      Using the new manifest view we need to register the custom .js file and link it against a view. Apart from selecting a type View instead of Applet in the UI Objects applet there is no difference to the process described in Siebel Open UI Manifest Administration Changes in IP 2013.

        Click to enlarge
        Playing around with the example it is obvious that the code is not production ready:
        1. It is possible to resize applets in a way that make them unusable.
        2. Changes are not persistent - refreshing the view makes all changes void. However, it should be simple to store the information in cookies as explained in Siebel Open UI Tab Layout: Sort 'em out - Part 2
        In summary, View PRs and PMs open up a new range of configuration options and significantly reduce the need to add code to postload.js. Documentation is essentially non-existent at the moment but using the knowledge from applet PMs and PRs it is easy to create PMs and PRs for views.

        have a nice day

        Jan

        Monday, January 27, 2014

        Siebel Open UI: Collapsible Applets Revisited


        by fellow author Jan:

        In a previous post we looked at how applets can be made collapsible by using the Default Applet Display Mode applet user property in Siebel Tools. In the following we look how we can use the same feature in a custom physical renderer (PR) without the need to change the repository (or SRF).

        How ClientPMUserProp works

        Let's investigate what happens when we add a value to the ClientPMUserProp applet user property:

        First, Siebel passes all values that are in the list of the values of ClientPMUserProp to the client.

        Next, the values are encapsulated in a property set of type apm which is read in the the Setup method of the Open UI proxy file pmodel.js and put into properties of the PM. As we can see the value of the user property Default Applet Display Mode is stored in the PM property defaultAppletDisplayMode.


        Click to enlarge

        The PM property defaultAppletDisplayMode is read in the method ShowCollapseExpand of the Open UI proxy file phyrenderer.js which is called from ShowUI. ShowCollapseExpand injects the code that enables the collapsing:
          Click to enlarge
          Make applets collapsible in the PR

          With the knowledge gathered from the proxy code, we only have to set the PM property defaultAppletDisplayMode in our custom PM/PR to make an applet collapsible "on the fly". In my example I set it in the PR - one might argue that it should be set in the PM:

          Click to enlarge
          As we set the property before  the call of ShowUI no other change is required.  If we set it after the call of ShowUI we can call this.GetPM().GetRenderer().ShowCollapseExpand() to inject it. Just be aware that you shouldn't call the method more than once as every call of ShowCollapseExpand adds a collapsing icon to the applet.

          Please note that the above is undocumented.

          Summary

          By setting the defaultAppletDisplayMode PM property we can make an applet collapsible without the need to perform any change in Siebel Tools.

          ***

          Thanks to Jan for this article

          have a nice day

          @lex