miércoles, 1 de abril de 2015

Content Presenter: Wizard vs Page Definition

Content Presenter es uno de los Task Flow más populares en WebCenter Portal dado que permite la visualización de contentidos en WebCenter Content así como Assets del viejo Site Studio.

Content Presenter para mostrar contenido de Site Studio y Content

Este post explica las diferencias principales entre configurarlo utilizando el Content Presenter Wizard en Runtime y configurarlo en Design/Runtime a través de los parámetros de entrada.

Configuración a través de la Page Definition.

Configuración por parámetros de Content Presenter

Esta configuración está pensada para desarrolladores que usan Content Presenter en sus desarrollos en Design Time o para configurar de una manera más "avanzada" en Runtime cuando se requiere el uso de EL Expressions complicadas.

Configuración a través del Wizard

Content Presenter Wizard

Permite al usuario final configurar de manera sencilla los contenidos a visualizar y qué plantillas utilizar.

Diferencias

Las preferencias establecidas en Page Definition sobrescriben las realizadas en el Wizard.

La configuración de parámetros de Task Flow, obviamente se guarda en la Page Definition. Sin embargo... dónde se guarda las del Wizard?.

La configuración realizada mediante el Wizard se guarda en el MDS (Metadata Service) en la ruta:

oracle\webcenter\doclib\scopedMD\[GUID_Espacio]\[NombrePagina.jspx]\TaskFlowId.xml

Al exportar del MDS se encontrará un fichero XML por cada Content Presenter de la página con la configuración realizada mediante el Wizard.


ACTIVE

dsTypeSingleNode

ucm#dDocName:000225




oracle.webcenter.content.templates.default.detail
false



Referencias:

sábado, 21 de marzo de 2015

WCP: Profile de Usuario, Cache, Sincronización y LDAP

Existen varios niveles de Caché y API que se debe entender con respecto a los perfiles de usuario en WebCenter Portal.

En el siguiente diagrama ilustro los distintos niveles que existen

Diagrama ilustrando las capas que participan en el Profile de WebCenter

Lo importante del diagrama es:
  1. La petición de la página de perfil o información de usuario pide al API de WebCenter Portal la información.
  2. WebCenter Portal API ofrece dos capas de API.
    • Acceso a través de la Java Object Caché a la información del usuario. (WebCenterSecurityUtils / WCSecurityUtility classes) Es la ilustada en la imagen
    • Acceso directo para obtener la información refrescada. (UserCacheManager class)
  3.  La Java Object Cache y la información de usuario es recogida del esquema de WebCenter Portal.
  4. El esquema de WebCenter Portal se refresca con la información de LDAP a través de procesos de sincronización.
A niveles de configuración es importante saber que:
  • La información de Caché, sincronización de las fotos con LDAP y tamanyo de batches de LDAP puede ser configurada en la Administración de WebCenter Portal en la sección de Tools & Services.
    Propiedades de Caché y LDAP de la consola de Administración para los Perfiles de Usuario
  • Mediante la función WLST setProfileConfig un administrador puede establecer los parámetros expuestos en la consola de administración además de establecer los parámetros ProfileSyncHourOfDay, ProfileSyncFrequencyInDays para configurar cada cuanto tiempo se hara la sincronización LDAP - Database.
Por otro lado remarcar el uso del API.

Las siguientes llamadas sacan la información de usuario de Java Object Caché.
WebCenterSecurityUtils.getUserFromUserName 
WCSecurityUtility.getUserFromUserName

La siguiente llamada fuerza obtener la información de usuario de LDAP.
UserProfile userProfile = UserCacheManager.findUserFromUserName(username).getUserProfile();
Referencias:
WebCenter 11.1.1.8: 16.7 Setting Profile Configuration Properties
WebCenter 11.1.1.8: 16.8 Synchronizing Profiles with the Identity Store
WebCenter 11.1.1.8: 16.9 Configuring Cache Options for the Profile Service


viernes, 20 de marzo de 2015

Mostrando el tamaño de un fichero en Content Presenter

Este post surge del siguiente Thread del foro de OTN:

Show the file size in Kilobytes

Para mostrar el tamano de un fichero se utiliza comunmente la siguiente EL Expression que nos da el tamaño en Bytes del nodo actual en una plantilla de Content Presenter.

 #{node.propertyMap['VaultFileSize'].value}


Para mostrar en formato de texto dichos Bytes en Kilobytes etc... Tenemos dos maneras distintas:
  1. Usando el JSF Converter que proporciona la librería por defecto de Document Service de Oracle WebCenter.

     
      
     
    
  2. Usar nuestro propio JSF Converter.
    Fragmento del faces-config.xml registrando el Converter
    
        
          Converts the size of a file expressed as a Number to a String with a size unit.
        
        Documents Size Converter
        
          com.merchan.sample.jsf.converter.Size
        
        
          com.merchan.sample.jsf.converter.SizeConverter
        
      
    

    Código del Converter
    package com.merchan.sample.jsf.converter;
    
    import oracle.webcenter.doclib.internal.view.convert.AbstractConverter;
    
    import java.text.DecimalFormat;
    import java.text.NumberFormat;
    
    import java.util.Locale;
    
    import javax.faces.component.UIComponent;
    import javax.faces.context.FacesContext;
    
    import oracle.webcenter.doclib.internal.model.resource.ResourceKey;
    import oracle.webcenter.doclib.internal.view.resource.DoclibUIResource;
    
    /**
     * Size converter to Kilobytes, Megabytes, Gigabytes depending of the size in bytes
     * @author Daniel Merchan
     * @version 1.0
     */
    public final class SizeConverter extends AbstractConverter {
    
        /**
         * Not implemented
         * @param context - Current Faces Context
         * @param component - UI Component to apply the conversion
         * @param value - Value of the UI Component
         * @return Object
         */
        public Object getAsObject(FacesContext context, UIComponent component,
                                  String value) {
            // Not implemented
            return null;
        }
    
        /**
         * Obtain the conversion in KB, MB, GB... depending of the size of the file
         * @param context - Current Faces Context
         * @param component - UI Component to apply the conversion
         * @param value - Value of the UI Component
         * @return String
         */
        public String getAsString(FacesContext context, UIComponent component,
                                  Object value) {
            // Check if the value is a number, if not ignore it
            if ((value == null) || (!(value instanceof Number))) {
                return "";
            }
            double size = ((Number)value).doubleValue();
            return SizeConverter.transformBytes(size, Boolean.TRUE);
        }
        
        /**
         * Transform the bytes into a bigger readable approach
         * @param bytes - File size
         * @param si - Si or Binary Units
         * @return
         */
        private static String transformBytes(double bytes, boolean si) {
            int unit = si ? 1000 : 1024;
            if (bytes < unit) return bytes + " B";
            int exp = (int) (Math.log(bytes) / Math.log(unit));
            String pre = (si ? "kMGTPE" : "KMGTPE").charAt(exp-1) + (si ? "" : "i");
            return String.format("%.1f %sB", bytes / Math.pow(unit, exp), pre);
        }
    }
    
Content Presenter Template usada en el ejemplo:



    
      
      
        
        
          
        
      
      
        
        
            
        
      
    


Content Presenter Showing the Sizes

Nota: El JSF Converter de Document Library esta limitado hasta Gigabytes. Si se requiere sizes mas grandes usar uno propio basado en las librerías de Apache o algún algoritmo propio como el del ejemplo.