lunes, 31 de julio de 2017

WCP 12c: Using WCCDOC Task Flow as Document Preview

One of the biggest changes of Oracle WebCenter Portal 12c has been its integration with Oracle WebCenter Content.

All the legacy ADF Bounded Task Flows such as Document Explorer, Document Viewer etc... has been deprecated and replaced with the same component as used by WCC ADF UI.

Oracle WebCenter Portal 12c uses a wrapper to WCC ADF UI called Content Manager Task Flow (which internally calls to wccdoc, wccmain and other internal Task Flows used by Oracle WebCenter Content).


One of the missing functionalities is how can we preview a Document in WCP 12c as Document Viewer does not exists anymore.

In OTN WCP Forum I was asked how to achieve this. It can be achieved with the wccdoc Task Flow (https://community.oracle.com/thread/4061288)

There are two choices for accessing a detail of a specific content / document in WCP 12c:
  • Offer a link by using /wccdoc Servlet which will open a Oracle WebCenter Portal page with Content Manager Task Flow pre-loading the specific content / document specified in the dDocName parameter. (E.g.: /wccdoc/d?dDocName=[YourdDocName])

    Use the following snippet of code for generating links to Detail / Download a specific document in WCP:
    public static String getApplicationURL() {
     HttpServletRequest request = (HttpServletRequest)ADFContext.getCurrent().getEnvironment().getRequest();
     StringBuilder urlBuilder = new StringBuilder(request.getScheme()).append("://").append(request.getServerName()).append(':').append(request.getServerPort()).append(request.getContextPath());
     return urlBuilder.toString();
    }
    
    public static String generateDownloadDocumentLink(String dDocName) {
     StringBuilder docURL = new StringBuilder(DocUtil.getApplicationURL());
     docURL.append("/wccproxy/d?dDocName=");
     docURL.append(dDocName);
     return docURL.toString();
    }
    
    public static String generateDetailDocumentLink(String dDocName) {
     StringBuilder docURL = new StringBuilder(DocUtil.getApplicationURL());
     docURL.append("/portal/wccdoc?dDocName=");
     docURL.append(dDocName);
     return docURL.toString();
    }

  • By adding the wccdoc Task Flow to the Resource Catalog and configuring its Input Parameters.
    wccdoc Task Flow in the Resource Catalog

    WCCDOC Task Flow Input Parameters (Compact Mode overrided)
Take care when configuring the WCCDOC Task Flow as it will throw a  ClassCastException ( javax.servlet.ServletException: /wcc/docInfoTabs.jsff @23,67 test="#{wccDocInfoBean.summaryTabDisplayed}": java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Boolean) If you try to use the checkbox of the Compact Mode Input Parameter. The secret is to setup manually to a boolean EL Expression!!.

Use #{wccRuiConfiguration} in the Wcc Rui Configuration Input Parameter. It is a Managed Bean pre-calculated by Oracle WebCenter Portal with the connection settings.

Now you can configure a WebCenter Portal Page to display specific document / content.
Map the dID and (or) dDocName to a URL parameter or Page Attribute to make it dynamic!.

Note: The usage of WCCDOC Task Flow is not supported by Oracle.

jueves, 6 de abril de 2017

WCP-BPM12c: Process Workspace

In case of you are planning to integrate the BPM Process Workspace in WebCenter Portal in 12c version then read the following :).

First of all you need to follow the steps mentioned in the official documentation (Note that now this information is in the BPM 12c documentation and not in WCP 12c documentation):

BPM 12c - Integrating with Oracle WebCenter Portal

Basically you need to:
  1. Register a BPEL connection within WebCenter Portal.
  2. Restart Portal (then it will use this BPEL connection to create a Worklist Connection as well). You can check all of this connections by using WebCenter Portal WLST Scripts.
  3. Add the BPM Resource Catalog as in the Shared Assets of WebCenter Portal

Surprisingly the Resource Catalog only offers the Task List and Available Processes Task Flows. I am wondering what happened with Cases and other stuff you can access in the BPM Workspace :/. In 11g version we had the Portal Templates and a complete setup of BPM Task Flows. All of them has been deprecated (as I saw when decompiled the BPM-WCP Task Flows library)

BPM Resource Catalog (BPM Task Flows)
When you add any of these Task Flows into a WebCenter Portal Page you will face an amazing and sexy error in your SOA server logs.

java.lang.NullPointerException
at oracle.bpm.workspace.adf.wcp.WebCenterTaskFlowPageListener.beforePhase(WebCenterTaskFlowPageListener.java:67)
at oracle.adfinternal.controller.lifecycle.LifecycleImpl.internalDispatchBeforeEvent(LifecycleImpl.java:97)
at oracle.adfinternal.controller.lifecycle.LifecycleImpl.executePhase(LifecycleImpl.java:195)
at oracle.adfinternal.controller.faces.lifecycle.


This is due to a BUG that has been solve in previous releases. But, unfortunately were not included in 12c version. I have already raised this bug and you can find the patch here:

Patch: 25064586: 12.2.1.2.0 Blank worklist portlet in webcenter portal to bpm integration

Now... We can add the Task List and Available Processes Task Flow to our pages :).

BPM Task List in WebCenter Portal
If you still face a blank screen and the following stack trace appears in soa_server1.out

Broken pipe[[
java.io.IOException: Broken pipe
    at sun.nio.ch.FileDispatcherImpl.write0(Native Method)
    at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47)
    at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93)
 
It means that you are accessing to your WCP using the OHS port or LB Port and you have made the configurtion of your BPEL connection by using the SOA Server Managed Server Port. Please, make sure you followed properly the steps mentioned in the documentation about configuring OHS :).

I hope this guideline helped you!.

My next step is ask Oracle why they have deprecated the Other Task Flows as I have the feeling that all BPM functionality is not now exposed :(.

WCP 12c: Automatic switch of the Skin when a Template is selected

Do you like when an Out of the Box Page Template is selected then a Skin is selected automatically?.

You can do it with to your custom Page Template / Skins as well.

Basically you need to add a property to your Page Template called preferredSkin. Go to the Edit Properties of your Page Template and add the preferredSkin (skin-family name).

preferredSkin Property for auto-skin selection


Now when you select the Page Template then the Skin will be automatically selected as well.
This will help your Portal Administrators to do not have headaches looking for the Skin that is more suitable for your Page Template.