Skip to Content

Hello community,

Background Light is a server application, it is an ABAP to COM bridge and a replacement for the CL_GUI_FRONTEND_SERVICES class. It allows to use COM libraries and OS functions with ABAP background processes and without the SAP GUI for Windows.

In a normal ABAP program you can use COM calls and OS functions very easily. But, if you execute the same program as background process, COM calls and OS functions does not work. It is not possible to use COM calls and OS functions in ABAP background processes, because there is no communication between the application and the presentation server in this case.

Also you can not use COM calls with SAP GUI for Java, because it supports no COM calls. But with Background Light it is also possible. Background Light is an SAP server program and offers these possibilities. It is a bridge from your ABAP program to any COM library. After the registering of Background Light in the SAP system of your choice – via transaction SM59 – and the start of the server program on your presentation server you can use COM calls and OS functions in fore- and background processes with the same code and on each platform.

Here an older example how to send an e-mail via Outlook:

"-Begin-----------------------------------------------------------------
Report zBLightExample.

  "-Variables-----------------------------------------------------------
  Data:
    BLight  Type Ref To zBackgroundLight,
    Outlook Type Integer,
    hResult Type Integer,
    olMsg   Type Integer
    .

  "-Main--------------------------------------------------------------
  Create Object BLight.
  Check BLight->BackgroundLightExists( ) = 1.

  BLight->CreateObject(
    Exporting
      progid  = 'Outlook.Application'
    Importing
      oleobj  = Outlook
      hresult = hResult
  ).
  Check Outlook <> 0 And hResult = BLight->S_OK.

  BLight->GetPropertyObject(
    Exporting
      oleobj  = Outlook
      command = 'CreateItem(0)'
    Importing
      object  = olMsg
      hresult = hResult
  ).
  If olMsg <> 0.

    BLight->SetProperty(
      Exporting
        oleobj  = olMsg
        command = 'To=''my.name@stschnell.de'''
      Importing
        hresult = hResult
    ).
    BLight->SetProperty(
      Exporting
        oleobj  = olMsg
        command = 'Subject=''Test'''
      Importing
        hresult = hResult
    ).
    BLight->SetProperty(
      Exporting
        oleobj  = olMsg
        command = 'Body=''This is a test'''
      Importing
        hresult = hResult
    ).
    BLight->CallMethod(
      Exporting
        oleobj  = olMsg
        command = 'Display'
      Importing
        hresult = hResult
    ).
    BLight->CallMethod(
      Exporting
        oleobj  = olMsg
        command = 'send'
      Importing
        hresult = hResult
    ).
    BLight->CallMethod(
      Exporting
        oleobj  = olMsg
        command = 'Quit'
      Importing
        hresult = hResult
    ).
    Call Method BLight->FreeObject
      Exporting OLEObj = olMsg.
  EndIf.

  Call Method BLight->FreeObject
    Exporting OLEObj = Outlook.

"-End-------------------------------------------------------------------

Beyond these functionality offers Background Light an enrichment of methods to handle COM libraries. Also open Background Light the gate wide, to use all COM libraries without any customizing of the security options of the SAP Logon program. And it offers with his functional Add-Ons the mighty possibility to use Windows Management Instrumentation (WMI).

Here an example how to read information from the BIOS:

"-Begin-----------------------------------------------------------------
  Program zBLightExample.

  "-DataTypes-----------------------------------------------------------
    Types BackgroundLight Type Ref To zBackgroundLight.

  "-Variables-----------------------------------------------------------
    Data:
     BLight Type BackgroundLight,
     hResult Type Integer,
     WMI Type Integer,
     oEnum Type Integer,
     oNext Type Integer,
     ExecQuery Type String,
     BIOSManufacturer Type String,
     BIOSName Type String,
     BIOSVersion Type String,
     Text Type String,
     Button Type i
     .

  "-Main----------------------------------------------------------------
    Create Object BLight.
    Check BLight->BackgroundLightExists( ) = 1.

    Call Method BLight->GetObject
      Exporting ProgID = 'winmgmts:\\.\root\CIMV2'
      Importing OLEObj = WMI hResult = hResult.

    Check WMI <> 0 And hResult = BLight->S_OK.

    ExecQuery = 'ExecQuery(''Select * from Win32_BIOS''' &&
      ', ''WQL'', 48)'.

    Call Method BLight->CreateEnumeration
      Exporting OLEObj = WMI Command = ExecQuery
      Importing EnumObj = oEnum hResult = hResult.

    If oEnum <> 0 And hResult = BLight->S_OK.

      Call Method BLight->GetNextEnumerationObject
        Exporting EnumObj = oEnum
        Importing NextObject = oNext hResult = hResult.

      While oNext <> 0.

        Call Method BLight->GetPropertyString
          Exporting OLEObj = oNext Command = 'Manufacturer'
          Importing String = BIOSManufacturer hResult = hResult.

        Call Method BLight->GetPropertyString
          Exporting OLEObj = oNext Command = 'Name'
          Importing String = BIOSName hResult = hResult.

        Call Method BLight->GetPropertyString
          Exporting OLEObj = oNext Command = 'Version'
          Importing String = BIOSVersion hResult = hResult.

        Text = `Manufacturer: ` && BIOSManufacturer &&
          CL_ABAP_CHAR_UTILITIES=>CR_LF &&
          `Name: ` && BIOSName &&
          CL_ABAP_CHAR_UTILITIES=>CR_LF &&
          `Version: ` && BIOSVersion.

        Call Method BLight->MsgBox
          Exporting
            Text = Text
            Caption = 'Information about BIOS'
            Style = BLight->MB_OKOnly
          Importing
             Button = Button.

        Call Method BLight->FreeEnumeration
          Exporting EnumObj = oNext.

        Call Method BLight->GetNextEnumerationObject
          Exporting EnumObj = oEnum
          Importing NextObject = oNext hResult = hResult.

       EndWhile.

       Call Method BLight->FreeEnumeration
         Exporting EnumObj = oEnum.

    EndIf.

    Call Method BLight->FreeObject
      Exporting OLEObj = WMI.

"-End-------------------------------------------------------------------

 

Background Light offers an easy interface to start and stop the server thread and to control the incoming calls.

/wp-content/uploads/2015/04/blight_705555.jpg

 

Hint: If you use Background Light with a tiny trick, you can ensure that the COM calls are for the correct user on their presentation server – use as destination the sy-uname variable.

2015/06/05 – A new version of Background Light is available

  • Background Light is not longer only as 32-bit version available, it is now also as 64-bit version available – you can find some reasons here.

 

You can download Background Light here.

Enjoy it.

Cheers
Stefan

To report this post you need to login first.

Be the first to leave a comment

You must be Logged on to comment or reply to a post.

Leave a Reply