Skip to content

alborghetti/ABAPFire

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

49 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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:

  • shallow: Limit the depth of the data returned. If the data at the location is a JSON primitive (string, number, or boolean) its value will simply be returned. If the data snapshot at the location is a JSON object, the values for each key will be truncated to true.
  • orderBy: Set a sequence order that can be used to filter the data in combination with startAt endAt and equalTo parameters.
  • startAt: Set an arbitrary starting point.
  • endAt: Set an arbitrary ending point.
  • equalTo: Filter on specific value.
  • limitToFirst: Set a maximum number of children for which to receive data.
  • limitToLast: Set a maximum number of children for which to receive data in reverse order.

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.