Show TOC Anfang des Inhaltsbereichs

Funktionsdokumentation Eventing im Portal  Dokument im Navigationsbaum lokalisieren

Verwendung

Das Portal-Eventing ermöglicht den Austausch von Informationen zwischen verschiedenen iViews einer Portalseite mithilfe von JavaScript. Der Inhalt des iViews, in dem der Event ausgelöst worden ist, bleibt sichtbar. Das Senden von Portal-Events an andere Portalseiten oder iViews außerhalb der aktuellen Portalseite ist nicht möglich. Für einen solchen Austausch von Informationen können Sie die Navigation im Portal verwenden.

Eine BEx Web Application kann sowohl Quelle als auch Ziel eines Events sein. Autoren können zwischen BEx Web Applications selbst definierte Events austauschen. Einige Anwendungen im Portal (z. B. Manager Self Service (MSS)) senden und empfangen eigene Events, die auch von BEx Web Applications empfangen oder gesendet werden können. Der Autor einer BEx Web Application ist für die Implementierung des JavaScripts zum Senden und Empfangen verantwortlich. Die Visualisierung zum Senden eines Portal-Events kann als Link oder als Erweiterung des Kontextmenüs erfolgen.

Weitere Informationen zum Portal-Eventing finden Sie unter Event API.

Funktionsumfang

Das Eventing im Portal ist Teil des Enterprise Portal Client Framework (EPCF) und erlaubt zur Laufzeit den Austausch von Informationen zwischen iViews. Das BEx Web Application iView wird als iFrame innerhalb der HTML-Seite dargestellt. Auf Grund dieser Schachtelung erfolgt die Verwendung des EPCM Proxy. Über den EPCM Proxy werden die EPCM API-Funktionen EPCM.subscribeEvent und EPCM.raiseEvent aufgerufen.

Ablauf

       1.      Eine BEx Web Application subskribiert sich auf ein Portal-Event mithilfe von EPCMPROXY.subscribeEvent:

function EPCM.subscribeEvent (nameSpace, eventName, eventHandler)

Bei der Subskription wird der Name einer JavaScript-Funktion eventHandler übergeben, die beim Empfangen des Portal-Events aufgerufen werden soll.

       2.      Eine andere BEx Web Application oder eine andere Anwendung sendet ein Portal-Event mithilfe von EPCMPROXY.raiseEvent:

function EPCM.raiseEvent(nameSpace, eventName, dataObject [, sourceId])

       3.      Wenn das Portal-Event ausgelöst wird, wird die subskribierte JavaScript-Funktion eventHandler aufgerufen.

Mehrere Web Items (z.B. Filter, Dropdown-Box, etc.) haben das Attribut ONLY_VALUES, um lediglich die Werte zu erhalten. Mit den Werten ist es möglich, eigene Form-Routinen zu implementieren. Diese Form-Routinen können bei Submit ein Portal-Event mithilfe von EPCM.raiseEvent senden.

Weitere Informationen zu den Web Items finden Sie unter Web Items.

Hinweis

Zurzeit gibt es kein Verzeichnis aller Portal-Events von SAP. Mithilfe des Web-Browser können Sie den HTML-Quelltext einer Portalseite anzeigen. Über die Suche nach raiseEvent können Sie den nameSpace und den eventName eines Portal-Events ermitteln.

Beispiele

Achtung

Ersetzen Sie nach dem Kopieren der Beispiele für die Web Templates die besonderen Anführungszeichen (z. B. „abc“) durch die normalen Anführungszeichen (z. B. "abc").

Beispiel eines Web Templates, welches Portal-Events sendet

<HTML>

<!-- BW data source object tags -->

<object>

         <param name="OWNER" value="SAP_BW"/>

         <param name="CMD" value="SET_DATA_PROVIDER"/>

         <param name="NAME" value="DATAPROVIDER_1"/>

         <param name="QUERY" value="T_PDEBW3_Q_SOLD_TO_MATERIAL"/>

         <param name="INFOCUBE" value="0D_DECU"/>

         DATA_PROVIDER:             DATAPROVIDER_1

</object>

 

<object>

         <param name="OWNER" value="SAP_BW"/>

         <param name="CMD" value="SET_PROPERTIES"/>

         <param name="TEMPLATE_ID" value="T_PDEBW3_T_EVENTING_SOURCE"/>

         TEMPLATE PROPERTIES

</object>

 

<HEAD>

<META NAME="GENERATOR" Content="Microsoft DHTML Editing Control">

<TITLE>BW Web Application</TITLE>

      <link href="/sap/bw/Mime/BEx/StyleSheets/BWReports.css" type="text/css" rel="stylesheet"/>

</HEAD>

<script language="javascript">

<!--

function dataContainer(dim, value) {

  this.dim = dim;

  this.value = value;

}

 function raiseEvent(dim, value) {

        var data = new dataContainer( dim, value );

        EPCMPROXY.raiseEvent( "urn:com.sap:BWEvents","BWFilter", data, null );

   }

-->

</script><BODY>

<TABLE cellSpacing=1 cellPadding=1 width="90%" border=0>

 

  <TR>

    <TD vAlign=top><STRONG>All</STRONG></TD>

    <TD vAlign=top><STRONG>Sold to</STRONG> </TD>

    <TD vAlign=top><STRONG>Material</STRONG></TD></TR>

  <TR>

    <TD vAlign=top width="30%"><A href="Javascript:raiseEvent('', '');">Reset</A></TD>

    <TD vAlign=top width="30%"><A href="Javascript:raiseEvent('0D_SOLD_TO', '0000001050');">Becker

      Berlin</A></TD>

    <TD vAlign=top width="40%">

<form name="myform">

<select name="myselect" size="1" onchange="Javascript:raiseEvent('0D_MATERIAL', document.myform.myselect.options[document.myform.myselect.selectedIndex].value);">

<object>

         <param name="OWNER" value="SAP_BW"/>

         <param name="CMD" value="GET_ITEM"/>

         <param name="NAME" value="DROPDOWNBOX_1"/>

         <param name="ITEM_CLASS" value="CL_RSR_WWW_ITEM_FILTER_DDOWN"/>

         <param name="DATA_PROVIDER" value="DATAPROVIDER_1"/>

         <param name="GENERATE_CAPTION" value=""/>

         <param name="IOBJNM" value="0D_MATERIAL"/>

         <param name="ONLY_VALUES" value="X"/>

         ITEM:            DROPDOWNBOX_1

</object>

</select>

</form>

</TD></TR></TABLE>

</BODY>

</HTML>

Beispiel einer BEx Web Application, welche die obigen Portal-Events empfängt

<HTML>

<!-- BW data source object tags -->

<object>

         <param name="OWNER" value="SAP_BW"/>

         <param name="CMD" value="SET_DATA_PROVIDER"/>

         <param name="NAME" value="DATAPROVIDER_1"/>

         <param name="QUERY" value="T_PDEBW3_Q_SOLD_TO_MATERIAL"/>

         <param name="INFOCUBE" value="0D_DECU"/>

         DATA_PROVIDER:             DATAPROVIDER_1

</object>

 

<object>

         <param name="OWNER" value="SAP_BW"/>

         <param name="CMD" value="SET_PROPERTIES"/>

         <param name="TEMPLATE_ID" value="T_PDEBW3_T_EVENTING_TARGET"/>

         TEMPLATE PROPERTIES

</object>

 

<HEAD>

<META NAME="GENERATOR" Content="Microsoft DHTML Editing Control">

<TITLE>BW Web Application</TITLE>

      <link href="/sap/bw/Mime/BEx/StyleSheets/BWReports.css" type="text/css" rel="stylesheet"/>

</HEAD>

<script language="Javascript">

    EPCMPROXY.subscribeEvent( "urn:com.sap:BWEvents",  "BWFilter", window, "myreceiveEvent");

    function myreceiveEvent( eventObj ) {

       if( eventObj.dataObject.value == "" ) {

           var url = location.protocol  + "//" + location.host + SAP_BW_URL_Get();

           // remove filter

           //url = url + "&CMD=REMOVE_FILTER&IOBJNM=" + eventObj.dataObject.dim + "&DATA_PROVIDER=*&MULTI=X";

           // reset

           url = url + "&CMD=RESET&DATA_PROVIDER=*&MULTI=X";

        }

        else {

           var url = location.protocol  + "//" + location.host + SAP_BW_URL_Get();

           url = url + "&FILTER_IOBJNM=" + eventObj.dataObject.dim +  "&FILTER_VALUE=" + eventObj.dataObject.value + "&DATA_PROVIDER=*&MULTI=X";

        }

        SAPBWOpenURL(url);

    }

</script>

<BODY>

<P><object>

         <param name="OWNER" value="SAP_BW"/>

         <param name="CMD" value="GET_ITEM"/>

         <param name="NAME" value="NAVIGATIONBLOCK_1"/>

         <param name="ITEM_CLASS" value="CL_RSR_WWW_ITEM_NAV_BLOCK"/>

         <param name="DATA_PROVIDER" value="DATAPROVIDER_1"/>

         ITEM:            NAVIGATIONBLOCK_1

</object></P>

<P><object>

         <param name="OWNER" value="SAP_BW"/>

         <param name="CMD" value="GET_ITEM"/>

         <param name="NAME" value="TABLE_1"/>

         <param name="ITEM_CLASS" value="CL_RSR_WWW_ITEM_GRID"/>

         <param name="DATA_PROVIDER" value="DATAPROVIDER_1"/>

         ITEM:            TABLE_1

</object></P>

</BODY>

</HTML>

Beispiel eines Web Template, welches ein Portal-Event aus dem SAP HCM Manager Self Service (MSS) subskribiert und empfängt

<script language="javascript">

   var dim = "HEMPLOYEE";

    // Subscribe Event

    if( check_for_sap_ep() == true ) {

      EPCMPROXY.subscribeEvent( "urn:com.sap.pct.hcm.orgmanagement:CurrentObject",  "objectChanged", window, "myreceiveEvent");

    }

    function myreceiveEvent( eventObj ) {

       if( eventObj.dataObject.length > 14 ) {

          var value = sourceSystem + eventObj.dataObject.substring( 6, 14 );

          var url = location.protocol  + "//" + location.host + SAP_BW_URL_Get();

          url = url + "&FILTER_IOBJNM=" + dim +  "&FILTER_VALUE=" + value + "&DATA_PROVIDER=*&MULTI=X";

          SAPBWOpenURL(url);

        }

    }

</script>

Ende des Inhaltsbereichs