Connector für SAP Business Suite - Entwicklerhandbuch Teil 5 - Addons

Der Connector für SAP Business Suite bietet eine funktionale Erweiterung in Form von Addons. Diese Addons können auf Intrexx-Seiten mit Velocity-Aufrufen oder in Intrexx-Prozessen in Groovy-Skript verwendet werden. Bitte beachten Sie, dass die Addons bestimmten Lizensierungsbedingungen unterliegen können oder eine Mindestlizenz voraussetzen.

Verwendung in Velocity

Auf Applikations-Seiten können Addons mit dem Element Statischer Text mit der Option "Programmierung, Nur Standardsprache"

oder einem VTL-Include-Element eingebunden werden.

Das Addon wird über den Connector für SAP Business Suite initialisiert und nimmt Bezug auf

  • die ID des Addons

  • die SAP-Datenquelle

  • die verwendende Applikation

Beispiel (für Addon "sapbop"):

#set( $api = $GSAP.getAddOn('sapbop', 'saperp', $Request) )

Die Variable "$api" stellt dann die Funktionen des Addons zur Verfügung und kann auch in der Kurzform aufgerufen werden:

$GSAP.getAddOn('sapbop', 'saperp', $Request).<api-methode-addon>

Verwendung in Groovy-Skript

Die Verwendung in Groovy ist ähnlich der in Verwendung in Velocity. Das folgende Mustercoding wird für alle Addons (hier "sapbop") verwendet.

import net.initall.ixapi.groovy.IxSapGroovyAPI;
def g_sap = IxSapGroovyAPI.getInstance();
if(g_sap == null){
g_log.error("No SAP Adapter access");
}else{
// syntax: getAddOn(<addonname>, <sap instance>, g_record);
def g_api = g_sap.getAddOn("sapbop", "saperp", g_record);
if(g_api == null){
g_log.error("No SAP Adapter Addon access");
}else{
// use addon api -- insert your code
// destroy addon api
g_api.destroy();
}
g_sap.destroy();
}

Addon sapbop – Business-Objekt-Dokumente

Business-Objekt-Dokumente ist die Umsetzung von objektorientierten Formularen, die auf allen verwendeten Oberflächen (z.B. SAPGUI, Internet Portal, mobile Endgeräte) gleich aussehen sollen. Der Connector für SAP Business Suite stellt Funktionen bereit, um Dokumente wie PDF, technische Zeichnungen o.ä. auf allen Benutzeroberflächen zur Verfügung zu stellen. Die Bereitstellung der Dokumente erfolgt im SAP-System und verwendet in den meisten Fällen den SAP-Standard "Smartforms" und "Report". Damit können z.B. für das Objekt Kunde (technisch "KNA1") verschiedene Formulare (z.B. Kundenstammblatt, Besuchsbericht, OP Liste u.ä.) übergreifend zur Verfügung gestellt werden.

Konfiguration

Die Konfiguration der Business-Objekt-Dokumente erfolgt im SAP-System unterhalb des Customizings des Portal-Plugins im Ordner "Erweiterungen".

Handler

Für die wichtigsten Generierungen wurden bereits Handler vorbereitet, die in der Standardauslieferung vorhanden sind:

  • /IATL/POPI_IXAPI_SMARTFORM

    Aufruf von Smartforms mit POPI API

  • /IATL/POPI_IXAPI_REPORT

    Aufruf von Reports mit POPI API

  • /IATL/POPI_IXAPI_NO_DOC

    Dummy Handler zum Ausblenden

  • /IATL/POPI_IXAPI_CFW_FORM

    Aufruf von Formularen des Cockpit FW

  • /IATL/POPI_IXAPI_DEFAULT

    Mustervorlage; auch Einfaches Speichern

Weitere Handler könnten in den Systemen vorhanden sein. Mit wenigen Anpassungen können durch Vererbung auch eigene Handler integriert werden. Dies ist z.B. notwendig, um die API von speziellen Smartform-Formularen oder Reports anzupassen. In den meisten Fällen muss hier nichts konfiguriert werden.

Dokumente und Varianten

Im Customizingpunkt "Business-Objekt-Dokumente – Konfiguration" werden Business-Objekte, ihre Varianten und deren Bezug zu einem Handler gepflegt.

Der folgende Eintrag stellt z.B. den Aufruf des Reports "/IATL/POPI_IXAPI_BODOC_REP" über den Aufruf "Objekttyp = "KNA1"" und "Variante/Subtyp = "TEST"" zur Verfügung. Der Report "/IATL/POPI_IXAPI_BODOC_REP" kann auch als Kopiervorlage für eigene Implementierungen verwendet werden.

Test

Der Punkt "Test Business-Objekt-Dokument" stellt eine einfache Testmöglichkeit zur Verfügung.

Der Test als "Popup" wird nur unterstützt, wenn der Handler dies unterstützt. Dies ist aber bei Smartforms und Reports der Fall.

Durch das Ausführen wird das Dokument im SAP-System angezeigt - hier als PDF. Diese Funktion kann auch im SAPGUI in Standardprozessen verwendet werden.

Das Ausführen als Dateistream (Option Popup deaktiviert) führt die eigentliche Verwendung aus – zur Verfügungstellung einer Datei für die externe Verwendung.

Durch diesen Aufruf werden nur die Dateiinformationen angezeigt, die einem externen Aufruf zur Verfügung stehen würden.

Dieses Testprogramm kann auch zum Löschen des internen Caches bzw. zur Vorgenerierung von Dokumenten im Batch verwendet werden.

Eigene Handler

Eigene Handler werden benötigt, wenn die Daten-erzeugenden Programme bereits vorhanden sind (z.B. Reports, Smartforms). Hier muss wenigstens die Aufrufschnittstelle angepasst werden. Dieser Abschnitt zeigt das Vorgehen für den Aufruf der Transaktion "MB53". Hinter dieser Transaktion liegt das Programm "RM07MWRKK".

Um die Ausgabe dieses Reports als PDF zu erzeugen, muss ein eigener Handler implementiert werden, der genau die Schnittstelle des Reports umsetzt. Für den Aufruf von Reports stellt der Connector für SAP Business Suite auf ABAP-Seite die Klasse "/IATL/POPI_CL_IXAPI_BUSDOC_REP" zur Verfügung. Legen Sie zuerst eine SAP-ABAP-Klasse an, die von diesem Handler vererbt ist. Danach wird die Methode "REPORT_MODIFY_PARAMETERS" vererbt und angepasst. Das Coding für den Aufruf der Transaktion "MB53" ist im Folgendem dargestellt.

METHOD report_modify_parameters.
* -------- local data
DATA: ls_params LIKE LINE OF ct_params.
DATA: lv_matnr TYPE matnr.
* -------- call super
CALL METHOD super->report_modify_parameters
CHANGING
cv_program = cv_program
cv_variant = cv_variant
ct_params = ct_params
EXCEPTIONS
failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
RAISE failed.
ENDIF.
* -------- set defaults for report calling
cv_program = 'RM07MWRKK'.
* -------- get prefilled id and map
LOOP AT ct_params INTO ls_params
WHERE selname = 'ID'.
ls_params-selname = 'MATNR'.
lv_matnr = ls_params-low.
ls_params-low = lv_matnr.
MODIFY ct_params FROM ls_params.
ENDLOOP.
ENDMETHOD.

Dieses Coding sollte leicht verständlich sein. Im Parameter "ct_params" werden die Selektionsparameter in der Struktur "RSPARAMS" zur Verfügung gestellt. Die extern übergebene ID wird als Selektionsparameter "ID" gespeichert und muss umgesetzt werden. Falls benötigt kann so auch die ID geprüft und ggf. geändert werden (z.B. führende Nullen ergänzen). Der nächste Schritt registriert die soeben angelegte Klasse als Handler im Customizing.

Danach kann der Handler einem konkreten Business-Objekt zugeordnet werden (hier "MARA" und "MB53").

Über die Testtransaktion kann sofort getestet werden, ob die Klasse funktioniert. Das Debugging ist von hier aus ebenfalls möglich.

Der Aufruf "als Popup" startet den Report im Anzeigemodus.

Ohne die Popup-Funktion wird das PDF erzeugt, dass hier aber nicht weiter einsehbar ist.

Falls es bereits existierende Smartforms gibt, die Sie aufrufen möchten, ist das Vorgehen analog wie bei den Reports. Nehmen Sie als vererbende Klasse "/IATL/POPI_CL_IXAPI_BUSDOC_SF". Der Aufruf des Funktionsbausteins der Smartform-API erfolgt in Methode "SMARTFORM_CALL". Je nach API des Smartforms kann die Datenbeschaffung umfangreicher sein. Das folgende Coding zeigt dies für den Aufruf von Smartforms für Lieferscheine.

method smartform_call.
data: ls_nast type nast.
data: ls_likp type likp.
data: ls_document_output_info type ssfcrespd.
data: ls_job_output_info type ssfcrescl.
data: ls_job_output_options type ssfcresop.
data: ls_dlv_delnote type ledlv_delnote.
data: ls_delivery_key type leshp_delivery_key.
data: ls_print_data_to_read type ledlv_print_data_to_read.
data: lf_parvw type sna_parvw.
data: lf_parnr type na_parnr.
data: lf_language type na_spras.
data: lv_vbeln type vbeln.
data: lv_saved_langu type sylangu.
field-symbols: <parnr> type any.
* -------- check likp
lv_vbeln = me->current_id.
select single * from likp
into ls_likp
where vbeln = lv_vbeln.
if sy-subrc ne 0.
trace( 'wrong likp' ).
raise failed.
endif.
* -------- prepare access
lf_language = me->current_language.
ls_delivery_key-vbeln = lv_vbeln.
translate ls_print_data_to_read using ' X'.
lf_parvw = 'AG'.
if me->cust_doc-param_2 ne space.
lf_parvw = me->cust_doc-param_2.
endif.
lf_parnr = ls_likp-kunag.
if me->cust_doc-param_3 ne space.
unassign <parnr>.
assign component me->cust_doc-param_3 of structure ls_likp
to <parnr>.
if <parnr> is not assigned.
trace( 'wrong param 3. field not exists in table likp.' ).
raise failed.
endif.
endif.
* --------- call data preparation
call function 'LE_SHP_DLV_OUTP_READ_PRTDATA'
exporting
is_delivery_key = ls_delivery_key
is_print_data_to_read = ls_print_data_to_read
if_parvw = lf_parvw
if_parnr = lf_parnr
if_language = lf_language
importing
es_dlv_delnote = ls_dlv_delnote
exceptions
records_not_found = 1
records_not_requested = 2
Intrexx Business Adapter - SAP
United Planet Seite 306
others = 4.
if sy-subrc <> 0.
trace( 'Error calling data likp read module.' ).
raise failed.
endif.
* ----------- call smartform
lv_saved_langu = sy-langu.
sy-langu = me->current_language.
catch system-exceptions others = 1.
call function me->sf_function
exporting
archive_index = archive_index
archive_index_tab = archive_index_tab
archive_parameters = archive_parameters
control_parameters = control_parameters
mail_appl_obj = mail_appl_obj
mail_recipient = mail_recipient
mail_sender = mail_sender
output_options = output_options
user_settings = user_settings
is_dlv_delnote = ls_dlv_delnote
is_nast = ls_nast
importing
document_output_info = document_output_info
job_output_info = job_output_info
job_output_options = job_output_options
exceptions
formatting_error = 1
internal_error = 2
send_error = 3
user_canceled = 4
others = 5.
sy-langu = lv_saved_langu.
if sy-subrc ne 0.
trace( 'Error calling smartform.' ).
raise failed.
endif.
endcatch.
if sy-subrc ne 0.
trace( 'Error calling smartform module.' ).
raise failed.
endif.
endmethod.

API-Methoden

Erzeugung von Links:

  • String getBoImage(String p_objtype, String p_subobj, String p_objid)

    Erzeugt ein Icon mit Link zum Dokument, wenn das Business-Objekt im SAP-System konfiguriert wurde. Dieses Icon kann z.B. immer hinter einer Objekt-ID in der Oberfläche platziert werden.

  • String getBoLink(String p_objtype, String p_subobj, String p_objid, String p_text, String p_style)

    Diese Funktion erzeugt einen Textlink zum Dokument. Hier kann der anzuzeigende Text im Parameter "p_text" und ein Stil für das HTML-Element <a></a> (optional) mitgegeben werden.

  • String getBoURL(String p_objtype, String p_subobj, String p_objid)

    Wenn nur die URL zum Dokument benötigt wird (z.B. weil diese in eigener HTML-Generierung verwendet werden soll), kann diese Funktion verwendet werden.

Konfiguration:

setImageNormal(String p_image) setImageHover(String p_image) eigenes Bild für den Link setzen

Beispiele

Velocity langer Aufruf:

#set( $Api = $GSAP.getAddOn('sapbop', 'saperp', $Request) )
#if( $Api )
#set( $strId = $DC.getValueHolder('textvcontrol159CC346').getValue())
$Api.getBoImage('LIKP', '', $strId)
#else
##<b>No API<b/>#end

Velocity kurzer Aufruf:

$GSAP.getAddOn('sapbop', 'saperp', $Request).$Api.getBoLink('LIKP', '', '0080000031', 'Text', '')

Weitere Informationen

Entwicklerhandbuch Mustercodings
API Entwicklerhandbuch