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.