lunes, 8 de octubre de 2012

OTN WebCenter Portal: Rescatando Post de interés

Ante un problema con Oracle WebCenter existen dos lugares donde encontrar información (Oracle My Support y los foros oficiales):
  • Oracle My Support: Para todo Partner de Oracle, se puede tener acceso ayuda por parte de la propia Oracle ante problemas serios. También, es un gran repositorio en el que consultar problemas que pueden haber sido resueltos.
  • OTN WebCenter Portal: Foro oficial de WebCenter Portal donde la gente que trabajamos con el producto intentamos ayudar y compartir soluciones a problemas que se tienen con el producto.
  • OTN WebCenter Content: Foro oficial de WebCenter Content (UCM) con ayuda relativa al gestor de contenidos y Site Studio.
  • OTN JDeveloper & ADF: Para cualquier problema con el Framework base de los productos de Oracle, es el foro por excelencia.
 En este post intentaré recoger algunos de los últimos Post interesantes que rescato de mis ratos libres por OTN:
  • Ejecución en Threads de ADF BC: En este Post se comenta que para ejecutar transacciones en distintos Threads. Es necesaria la creación de una instancia del AppModule para el nuevo hilo y hacerle un release al final del hilo ejecutor. Esto se debe a que el hilo nuevo no tiene acceso al AppModule de la session.
  • Las PageTemplate parecen "desrregistrarse" de JDeveloper: Con la versión de PS3 de JDeveloper. Existía un Bug en el que parecía que las pageTemplate "desaparecían", es decir, cuando se entra en modo diseño de una página, la etiqueta <af:pageTemplate> aparecía en rojo y en la visión de estructura no cargaba bien la página completa. El error se debia a un bug con pagetemplate-metadata.xml.
  • El parámetro SortSpec en la llamada al servicio GET_SEARCH_RESULTS parece que no funciona: En muchas ocasiones se implementa accesos a UCM mediante RIDC para realizar consultas. En algunas de ellas existe la necesidad de que los resultados vengan ordenados por más de un criterio por lo que los parámetros SortField y SortOrder no vale. Existe un parámetro SortSpec que permite la adición de más campos de ordenación. Sin embargo, siguiendo la documentación oficial y la forma de poner los campos puede traer a que el servicio de errores de "parseo". En el Post se comenta la solución para OracleTextSearch y los llamados SDATA que son metadatos configurados para ordenación desde la "Configuration Manager" de UCM.
  • Dónde se almacenan las imágenes/recursos de WebCenter Portal : Spaces y su administración: Una de las dudas que suelen surgir a programadores y arquitectos es: ¿Dónde se almacenan las imágenes de Spaces?. Cuando se trabaja con WebCenter Portal : Spaces se suele trabajar con el proyecto llamado DesignWebCenterSpaces, a través del cual se suben todo tipo de recursos a nuestra aplicación WebCenter. Las imágenes se ubican bajo una carpeta llamada /oracle/webcenter/siteresources/scopeMD/shared . Al exportar los recursos de portal, existe la posibilidad de llevarse estos recursos compartidos de portal y cargarlos en WebCenter. Éstos son almacenados en el MDS configurado para esta aplicación. En este post hay bastantes consejos prácticos de tratamiento de esta carpeta.
  • Anclas/Anchors con ADF: Cómo realizar anclas con <af:goLink>.
  • $wcUrl y default-navigation-model.xml: Una de las numerosas preguntas que existen por el foro del uso de $wcUrl. Este TAG solamente busca por la "default-navigation-model" del momento, por lo que si se quiere que funcione para más navegaciones, debería de registrarse "navigation-reference" a otras navegaciones.
  • Refresco de página / tabla tras invocar en diálogo un Task Flow: Combinación de returnListener con PPR programático para el refresco de un UIComponent de la página tras volver de un Task Flow ejecutado como diálogo.
  • Cómo obtener los usuarios que pertenecen a un espacio en concreto: Post bastante interesante que hace uso de WebCenter API y del esquema de WebCenter para que un usuario X pueda consultar los usuarios que pertenecen a un espacio en concreto. La idea consiste en atacar a la tabla WC_SPACE_USR_DETAIL a través de la cual se pueden obtener los usuarios y grupos que pertenecen al espacio. Hay que tener en cuenta que si se trata de un grupo, hay que obtener de LDAP los usuarios pertenecientes a ese grupo.
  • Expandir <af:panelBox> masivamente: En este post se da una referencia a un ejemplo para conseguir colapsar/expandir panelBox anidados de un solo click. Hay que tener en cuenta que deben encolarse los eventos porque sino el funcionamiento esperado no será el correcto (solo se colapsaran de uno en uno cada click).
  • Entendiendo pageFlowScope: La pageFlowScope es local al TaskFlow.
  • Más acerca de $wcUrl y navigations model: Similar al comentado más arriba, pero con mucha más información.
  • Código JavaScript util para redirigir a una página de búsquedas con parámetros: Un ejemplo compartido y descargable con código interesante y reutilizable. El código recoge el texto de búsqueda y redirige a una página de búsqueda externa. Recomendable.
  • Skinning en WebCenter: Info acerca de Skinning en WebCenter.
  • PhaseListener vs Listener de una sola página: No solo existen los ADF Phase Listener que se ejecutan siempre sino que también pueden registrarse Listeners individuales para ciertas páginas.
  • Construyendo aplicaciones WebCenter Portal multilenguaje: Interesante post con comentarios e ideas acerca de cómo construir aplicaciones WebCenter multiidioma.
  • ADF Phase Listener: Cuántas veces ejecuta un ADF Phase Listener en una request.
  • Navegación de 4 niveles y código reusable: Ejemplo de que sí puede construirse navegaciones de N niveles.
  • Iframes en ADF: Cómo usar iframes en páginas ADF de WebCenter.
  • Iframes para mostrar recursos estáticos HTML del proyecto PortalWebAssets: El proyecto PortalWebAssets está pensado apra almacenar estáticos. La EL Expression a usar para acceder a recursos HTML de este proyecto se describe en este post. <af:inlineFrame source="#{preferenceBean.baseResourceURL}/sample.html"/>
 Hay mucha más información interesante por OTN y Oracle My Support, invito a todos que compartan sus problemas y soluciones a través de ellos.

sábado, 6 de octubre de 2012

Bug en navegación de espacios en WebCenter Portal : Spaces PS5

Recientemente el blog de A-Team ha publicado información acerca del "bug" de WebCenter Portal : Spaces por el cual las navegaciones tanto de páginas como de espacios parece no funcionar.

Enlace al post de A-TEAM

En este post os quería comentar la solución temporal a dicho "bug" hasta que no se proporcione una solución oficial.

Muchas veces las navegaciones de espacios son implementadas en puro JSTL  + HTML donde el enlace se genera mediante un:

- <af:goLink destination="/webcenter/spaces/yourSpaceName"/>
- <a href="/webcenter/spaces/yourSpaceName"/>

En navegadores como IE 7 e IE8, al cabo de una cierta navegación y por cuestiones de caché de estos navegadores, la navegación deja de funcionar sin poder acceder a los espacios.

¿Cómo solucionar este problema?
Mediante el uso de un <af:commandLink> o componente con actionListener.
La solución lo que hace es ejecutar un Manage Bean del propio API de WebCenter para registrar internamente el espacio al que se navega.

Por lo que el enlace quedaría del siguiente modo:

<af:forEach items="{spaceContext.spacesQuery.unionOf['USER_JOINED'].shape['ROOT_LEVEL'].listSpaces}"
                            var="gsNode">
<af:commandLink partialSubmit="true" immediate="true" actionListener="#{o_w_w_sc_i_v_b_communitySwitcherPopupBean.launchSpace}" text="#{WCTruncator[gsNode.displayName]['25']}" id="gil1">
                                     <f:attribute name="spaceName" value="#{gsNode.name}"/>
</af:commandLink>
</af:forEach>

¿Implicaciones de este cambio?
Los indexadores / crawlers entienden solo de enlaces, una navegación programática como la de la solución puede acarrear problemas para los buscadores.