ABAPFire

ABAP Firebase Client

View the Project on GitHub alborghetti/ABAPFire

Tested SAP release: ABAP 740 SP9

ABAPFire

ABAP Firebase REST API Helper Library

Installation

Clone it using abapGit

Install abapGit, then clone the repository in a package (e.g. $ABAPFIRE).

Install Google certificate

Install Root CA from Google Internet Authority G2 using transaction STRUST in SSL identity ANONYMOUS.

Usage

Program ZABAPFIRE_DEMO provides usage examples.

Initialize the Application

To initialize the library, just pass to it your firebase configuration:

DATA:
  firebase     TYPE REF TO zabapfire_cl_firebase,
  ls_config    TYPE zabapfire_cl_firebase=>ty_firebase_config.
  
  ls_config-apikey = '[your apikey]'.
  ls_config-authdomain = '[your authdomain]'.
  ls_config-databaseurl = '[your databaseurl]'.
  ls_config-messagingsenderid = '[your messagingsenderid]'.
  ls_config-projectid = '[your projectid]'.
  ls_config-storagebucket = '[your storagebucket]'.

  firebase = zabapfire_cl_firebase=>initialize_app( ls_config ).

User Authentication

The library support only email and password authentication:

TRY.
      firebase->auth->authenticate_with_email(
        EXPORTING
        email = p_email
        password = p_pass ).
    CATCH zcx_abapfire_firebase INTO lcx_firebase.
      WRITE lcx_firebase->get_text( ).

  ENDTRY.

Retrieve firebase data

TRY.
    ls_parameters-order_by = 'carrid'.
    ls_parameters-equal_to = 'AC'.
    firebase->db->get(
        EXPORTING
        path =  p_path
        parameters = ls_parameters
        IMPORTING
        child = lt_abap ).
  CATCH zcx_abapfire_firebase INTO lcx_firebase.
    MESSAGE i000(zabapfire_msg) WITH lcx_firebase->get_text( )
      DISPLAY LIKE 'E'.
    EXIT.
ENDTRY.

If your target ABAP structure contains a column with name $KEY, firebase generated unique keys are saved in this column:

 TYPES:
      BEGIN OF ty_abap,
        $key        TYPE string.
          INCLUDE STRUCTURE sflight.
  TYPES:
     END OF ty_abap

retrieve firebase keys

For data retrieving, following query parameters are supported:

Refer to official firebase documentation for more info.

Save data to firebase

Set

Writes data to firebase Database location. This will overwrite any data at this location and all child locations.

SELECT * FROM sflight
INTO CORRESPONDING FIELDS OF TABLE lt_abap.
TRY.
    firebase->db->set(
      EXPORTING
        path =  p_path
        child = lt_abap ).
  CATCH zcx_abapfire_firebase INTO lcx_firebase.
    MESSAGE i000(zabapfire_msg) WITH lcx_firebase->get_text( )
      DISPLAY LIKE 'E'.
    EXIT.
ENDTRY.

Update

As opposed to the set( ) method, update( ) can be use to selectively update only the referenced properties at the current location (instead of replacing all the child properties at the current location).

TRY.
    firebase->db->update(
      EXPORTING
        path =  p_path
        child = lt_abap ).
  CATCH zcx_abapfire_firebase INTO lcx_firebase.
    MESSAGE i000(zabapfire_msg) WITH lcx_firebase->get_text( )
      DISPLAY LIKE 'E'.
    EXIT.
ENDTRY.

Push

Generates a new child location using a unique key and return the generated unique key.

TRY.
    LOOP AT lt_abap ASSIGNING <ls_abap>.
      <ls_abap>-$key = firebase->db->push(
         EXPORTING
           path =  p_path
           child = <ls_abap> ).
    ENDLOOP.
  CATCH zcx_abapfire_firebase INTO lcx_firebase.
    MESSAGE i000(zabapfire_msg) WITH lcx_firebase->get_text( )
      DISPLAY LIKE 'E'.
    EXIT.
ENDTRY.

Remove

Removes the data at this firebase Database location.

TRY.
    firebase->db->remove(
      EXPORTING
        path =  p_path ).
  CATCH zcx_abapfire_firebase INTO lcx_firebase.
    MESSAGE i000(zabapfire_msg) WITH lcx_firebase->get_text( )
      DISPLAY LIKE 'E'.
    EXIT.
ENDTRY.