1 http://desvino.altervista.org - Accesso ad una IView nel PCD

1
http://desvino.altervista.org - Accesso ad una IView nel PCD tramite Portal Component
PCD o Portal Content Directory è il repository per i contenuti del portale SAP, siano essi custom o rilasciati
con il portale stesso. Il PCD contiene una gerarchia di cartelle al cui interno troviamo oggetti quali IViews,
pagine, ruoli etc. Attraverso l'esempio riportato nel documento studiamo l'accesso al PCD da un
componente portale sviluppato con il Developer Studio; in particolare otteniamo il valore di uno specifico
attributo di una IView.
L’accesso al PCD avviene attraverso il PCD Generic Layer (GL).
Prima di tutto creiamo un progetto di tipo “Portal Application”.
Developer Studio – Portal Application Project
Developer Studio – Portal Application Project
2
http://desvino.altervista.org - Accesso ad una IView nel PCD tramite Portal Component
La View Package Explorer mostra la gerarchia di librerie, cartelle e classi del nostro porgetto.
Portal Application Project – Package Explorer
Portal Application Project – Package Explorer
Il file portalapp.xml contiene le informazioni di configurazione per il corretto funzionamento di una
applicazione.
Da help.sap.com:
“The portalapp.xml file (deployment descriptor) provides configuration information for your application, and
defines the components and services in your application.”
3
http://desvino.altervista.org - Accesso ad una IView nel PCD tramite Portal Component
Struttuta del file portalapp.xml
Creiamo un nuovo oggetto di tipo Portal Application Object all’interno del nostro progetto.
Developer Studio – Portal Application Object
4
http://desvino.altervista.org - Accesso ad una IView nel PCD tramite Portal Component
Abstact Portal Component
Portal Application Object – Name, Location, Class name
Ecco come si presenta inizialmente IViewAttribute.java.
import com.sapportals.portal.prt.component.*;
public class IViewAttribute extends AbstractPortalComponent
{
public void doContent(IPortalComponentRequest request,
IPortalComponentResponse response)
{
}
}
5
http://desvino.altervista.org - Accesso ad una IView nel PCD tramite Portal Component
Inseriamo il codice necessario per accedere al PCD ed ottenere il valore dell’attributo della nostra IView.
import
import
import
import
java.util.Hashtable;
javax.naming.Context;
javax.naming.InitialContext;
javax.naming.NamingException;
import
import
import
import
import
com.sap.portal.pcm.admin.PcmConstants;
com.sap.portal.pcm.iview.IiView;
com.sapportals.portal.prt.component.AbstractPortalComponent;
com.sapportals.portal.prt.component.IPortalComponentRequest;
com.sapportals.portal.prt.component.IPortalComponentResponse;
import com.sapportals.portal.pcd.gl.IPcdContext;
import com.sap.portal.directory.Constants;
public class PortalIviewProperties extends AbstractPortalComponent
{
IiView iView = null;
public void doContent(IPortalComponentRequest request,
IPortalComponentResponse response)
{
Hashtable ht_env = new Hashtable();
ht_env.put(Context.INITIAL_CONTEXT_FACTORY,
IPcdContext.PCD_INITIAL_CONTEXT_FACTORY);
ht_env.put(Context.SECURITY_PRINCIPAL, request.getUser());
ht_env.put(Constants.REQUESTED_ASPECT, PcmConstants.ASPECT_SEMANTICS);
InitialContext iCtx = null;
try{
String iViewID = "pcd:Percorso IView/IView";
iCtx = new InitialContext(ht_env);
IiView myIView =(IiView)iCtx.lookup(iViewID);
response.write(myIView.getAttribute("Nome Attributo"));
}catch(NamingException e) { response.write(e.getMessage()); }
}
All’interno del PCD un oggetto è semplicemente un contesto con un insieme di attributi. Un attributo è un
oggetto della classe com.sap.portal.pcd.gl.ObjectClass. Quando viene eseguita una look up, il PCD esegue
un check per determinare quale object provider utilizzare per creare un oggetto Java dall’insieme di
attributi.
Alcune variabili di ambiente vanno specificate quando si crea un contesto per il PCD. Quelle utilizzate nel
nostro codice sono:

Context.INITIAL_CONTEXT_FACTORY
o Valorizzata con IPcdContext.PCD_INITIAL_CONTEXT_FACTORY in caso di
creazione di un contesto iniziale.
6
http://desvino.altervista.org - Accesso ad una IView nel PCD tramite Portal Component

Context.SECURITY_PRINCIPAL
o

Attraverso l’oggetto request di tipo IPortalComponentRequest per la
richiesta corrente si controlla che l’utente abbia l’autorizzazione
necessaria ad eseguire look up.
Constants.REQUESTED_ASPECT
o Specifica il tipo di oggetto di ritorna da una look up. Il valore
impostato nell’esempio, PcmConstants.ASPECT_SEMANTICS, è relativo ad
oggetti di tipo IView, IPage, ILayout, ISystem.
Per
ottenere
la
view
personalizzata
dell’utente
bisogna
aggiungere
(IPcdContext.PCD_PERSONALIZATION_PRINCIPAL con valore request.getUser().
la
variabile
L’utilizzo della Hashtable e dell’oggetto iCtx (classe InitialContext) rende possibile il set dei parametri per il
JNDI ed il successivo lookup della IView.
Modificare il file portalapp.xml come mostrato, ciò che facciamo è indicare le references necessarie.
<?xml version="1.0" encoding="utf-8"?>
<application>
<application-config>
<property name="PrivateSharingReference" value="com.sap.portal.htmlb"/>
<property name="startup" value="true"/>
<property name="SharingReference"
value="htmlb,com.sap.portal.pcd.glservice,com.sap.portal.pcmbuilderservice,userm
anagement" />
<property name="ServicesReference" value="com.sap.portal.ivs.api_iview,
com.sap.portal.ivs.api_landscape"/>
</application-config>
<components>
<component name=" IViewAttribute ">
<component-config>
<property name="ClassName" value=" IViewAttribute "/>
</component-config>
<component-profile/>
</component>
</components>
<services/>
</application>
Importare i jar elencati.
Properties -> JavaBuildPath -> Add External JARs

com.sap.portal.ivs.api_iview_api

tc~epbc~pcm~adminapi~java

com.sap.portal.pcd.glservice_api
7
http://desvino.altervista.org - Accesso ad una IView nel PCD tramite Portal Component

gl_api

htmlb

prtjndisupport
Java Build Path – Importazione dei JARs esterni
Eseguiamo il QuickPARUpload, creiamo una ulteriore IView che contiene il componente deployato ed
eseguiamo; il valore dell’attributo indicato nel codice viene visualizzato a video.
Lo scenario evidenziato è molto semplice; è chiaro che un componente di questo tipo è utile se richiamato
da altre applicazioni in modo tale che possa lavorare come componente di servizio.
In generale l’accesso al PCD è utile per accedere a tutti i tipi di oggetto in esso contenuti, per ottenere
informazioni, per personalizzare gli oggetti e con essi il portale stesso.