This quickstart shows you how to process documents (invoices) from a source
Cloud Storage bucket and store the processed document
(JSON file) in a target bucket by using the batch processing
capability of Document AI API
through the SAP BTP edition of ABAP SDK for Google Cloud.
Before you begin
Before you run this quickstart, make sure that you or your administrators have
completed the following prerequisites:
In the Document AI Workbench, create a processor with type INVOICE_PROCESSOR.
For more information, see Creating and managing processors.
In Cloud Storage, create a source bucket to store the invoices
for processing and place the invoices in this bucket. For more information, see Create buckets.
In Cloud Storage, create a target bucket to store the processed files.
Create an ABAP class to process documents
Create a package:
In ADT, go to the Project Explorer.
Right-click the package ZLOCAL, and select
New > ABAP Package.
Enter the following details for your package:
Name: enter ZABAPSDK_TEST.
Description: enter ABAP SDK Test Package.
Click Next.
In the Select a Transport Request dialog, select the
Create a new request checkbox.
Enter a description for the transport request.
Click Finish.
Create an ABAP class to call the Document AI API:
Right-click your ABAP package and select New > ABAP Class.
Enter the following details for your ABAP class:
Name: enter ZGOOG_CL_QS_DOCUMENT_AI.
Description: enter Quick start for Document AI API.
Click Next.
Select a transport request and click Finish.
In the code editor, replace the default code with the following code snippet:
" --------------------------------------------------------------------
" Copyright 2024 Google LLC -
" -
" Licensed under the Apache License, Version 2.0 (the "License"); -
" you may not use this file except in compliance with the License. -
" You may obtain a copy of the License at -
" https://www.apache.org/licenses/LICENSE-2.0 -
" Unless required by applicable law or agreed to in writing, -
" software distributed under the License is distributed on an -
" "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, -
" either express or implied. -
" See the License for the specific language governing permissions -
" and limitations under the License. -
" --------------------------------------------------------------------
CLASS zcl_qs_process_documents DEFINITION
PUBLIC FINAL
CREATE PUBLIC.
PUBLIC SECTION.
INTERFACES if_oo_adt_classrun.
ENDCLASS.
CLASS ZCL_QS_PROCESS_DOCUMENTS IMPLEMENTATION.
METHOD if_oo_adt_classrun~main.
DATA lv_p_projects_id TYPE string.
DATA lv_p_locations_id TYPE string.
DATA lv_p_processors_id TYPE string.
DATA ls_input TYPE /goog/cl_documentai_v1=>ty_017.
DATA lo_docai TYPE REF TO /goog/cl_documentai_v1.
TRY.
" Open HTTP connection
" The client key DEMO_DOC_PROCESSING is an example, replace this with actual value
lo_docai = NEW #( iv_key_name = 'DEMO_DOC_PROCESSING' ).
" Populate relevant parameters to be passed to API
lv_p_projects_id = 'PROJECT_ID'.
lv_p_locations_id = 'LOCATION_ID'.
lv_p_processors_id = 'PROCESSOR_ID'.
ls_input-input_documents-gcs_prefix-gcs_uri_prefix = 'SOURCE_BUCKET_URI'.
ls_input-document_output_config-gcs_output_config-gcs_uri = 'TARGET_BUCKET_URI'.
" Call API method
lo_docai->batch_process_processors( EXPORTING iv_p_projects_id = lv_p_projects_id
iv_p_locations_id = lv_p_locations_id
iv_p_processors_id = lv_p_processors_id
is_input = ls_input
IMPORTING
es_output = DATA(ls_output)
ev_ret_code = DATA(lv_ret_code)
ev_err_text = DATA(lv_err_text)
es_err_resp = DATA(ls_err_resp) ).
IF lo_docai->is_success( lv_ret_code ) = abap_true.
out->write( |API call successful| ).
ELSE.
out->write( |Error occurred during API call| ).
out->write( lv_err_text ).
ENDIF.
" Close HTTP connection
lo_docai->close( ).
CATCH /goog/cx_sdk INTO DATA(lo_exception).
" Handle exception here
ENDTRY.
ENDMETHOD.
ENDCLASS.
Replace the following:
DEMO_DOC_PROCESSING: the client key name.
PROJECT_ID: the ID of the Google Cloud project
that has the Document AI API enabled.
LOCATION_ID: the processor's location.
PROCESSOR_ID: the ID of the processor.
SOURCE_BUCKET_URI: the URI of the Cloud Storage
bucket folder where source documents are kept for processing.
TARGET_BUCKET_URI: the URI of the Cloud Storage
bucket where the processed document (JSON file) would be stored.
Save and activate the changes.
Run your application:
Select the ABAP class ZGOOG_CL_QS_DOCUMENT_AI.
Click Run > Run As > ABAP Application (Console).
Alternatively, press F9.
To validate the results, follow these steps:
In the Google Cloud console, go to Cloud Storage Buckets page.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-29 UTC."],[],[],null,["# Process documents\n\n\u003cbr /\u003e\n\nThis quickstart shows you how to process documents (invoices) from a source\nCloud Storage bucket and store the processed document\n(JSON file) in a target bucket by using the batch processing\ncapability of [Document AI API](/document-ai/docs/reference/rest)\nthrough the SAP BTP edition of ABAP SDK for Google Cloud.\n\nBefore you begin\n----------------\n\n\nBefore you run this quickstart, make sure that you or your administrators have\ncompleted the following prerequisites:\n\n- You have a Google Cloud account and project.\n\n- Billing is enabled for your project. [See how to confirm that billing is enabled for your project](/billing/docs/how-to/verify-billing-enabled).\n\n- The SAP BTP edition of ABAP SDK for Google Cloud is installed and configured. [See how to install and configure the SAP BTP edition of ABAP SDK for Google Cloud](/sap/docs/abap-sdk/btp/latest/install-config).\n\n- Authentication to access Google Cloud APIs is set up. [See how to set up authentication](/sap/docs/abap-sdk/btp/latest/authentication).\n\n- You have access to the [SAP BTP, ABAP environment](https://www.sap.com/india/products/technology-platform/abap.html#overview).\n\n- You have downloaded and installed the latest [ABAP Development Tools (ADT)](https://tools.hana.ondemand.com/#abap) on the latest\n Eclipse platform.\n\n- You have created an [ABAP Cloud Project](https://developers.sap.com/tutorials/abap-environment-create-abap-cloud-project.html).\n\n\u003cbr /\u003e\n\n- Make sure the Document AI API is enabled in\n your Google Cloud project.\n\n [Go to API library](https://console.cloud.google.com/project/_/apis/library/documentai.googleapis.com)\n- In the Document AI Workbench, create a processor with type `INVOICE_PROCESSOR`.\n For more information, see [Creating and managing processors](/document-ai/docs/create-processor).\n\n- In Cloud Storage, create a source bucket to store the invoices\n for processing and place the invoices in this bucket. For more information, see [Create buckets](/storage/docs/creating-buckets).\n\n- In Cloud Storage, create a target bucket to store the processed files.\n\nCreate an ABAP class to process documents\n-----------------------------------------\n\n1. Create a package:\n\n | **Note:** If you already have a package, then you can use your existing package. Skip step 1.\n 1. In ADT, go to the Project Explorer.\n 2. Right-click the package `ZLOCAL`, and select **New \\\u003e ABAP Package**.\n 3. Enter the following details for your package:\n\n - **Name** : enter `ZABAPSDK_TEST`.\n - **Description** : enter `ABAP SDK Test Package`.\n 4. Click **Next**.\n\n 5. In the **Select a Transport Request** dialog, select the\n **Create a new request** checkbox.\n\n 6. Enter a description for the transport request.\n\n 7. Click **Finish**.\n\n2. Create an ABAP class to call the Document AI API:\n\n 1. Right-click your ABAP package and select **New \\\u003e ABAP Class**.\n 2. Enter the following details for your ABAP class:\n\n - **Name** : enter `ZGOOG_CL_QS_DOCUMENT_AI`.\n - **Description** : enter `Quick start for Document AI API`.\n 3. Click **Next**.\n\n 4. Select a transport request and click **Finish**.\n\n3. In the code editor, replace the default code with the following code snippet:\n\n \" --------------------------------------------------------------------\n \" Copyright 2024 Google LLC -\n \" -\n \" Licensed under the Apache License, Version 2.0 (the \"License\"); -\n \" you may not use this file except in compliance with the License. -\n \" You may obtain a copy of the License at -\n \" https://www.apache.org/licenses/LICENSE-2.0 -\n \" Unless required by applicable law or agreed to in writing, -\n \" software distributed under the License is distributed on an -\n \" \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, -\n \" either express or implied. -\n \" See the License for the specific language governing permissions -\n \" and limitations under the License. -\n \" --------------------------------------------------------------------\n CLASS zcl_qs_process_documents DEFINITION\n PUBLIC FINAL\n CREATE PUBLIC.\n\n PUBLIC SECTION.\n INTERFACES if_oo_adt_classrun.\n ENDCLASS.\n\n\n\n CLASS ZCL_QS_PROCESS_DOCUMENTS IMPLEMENTATION.\n\n\n METHOD if_oo_adt_classrun~main.\n DATA lv_p_projects_id TYPE string.\n DATA lv_p_locations_id TYPE string.\n DATA lv_p_processors_id TYPE string.\n DATA ls_input TYPE /goog/cl_documentai_v1=\u003ety_017.\n DATA lo_docai TYPE REF TO /goog/cl_documentai_v1.\n\n TRY.\n\n \" Open HTTP connection\n \" The client key \u003cvar translate=\"no\"\u003eDEMO_DOC_PROCESSING\u003c/var\u003e is an example, replace this with actual value\n lo_docai = NEW #( iv_key_name = '\u003cvar translate=\"no\"\u003eDEMO_DOC_PROCESSING\u003c/var\u003e' ).\n\n \" Populate relevant parameters to be passed to API\n lv_p_projects_id = '\u003cvar translate=\"no\"\u003ePROJECT_ID\u003c/var\u003e'.\n lv_p_locations_id = '\u003cvar translate=\"no\"\u003eLOCATION_ID\u003c/var\u003e'.\n lv_p_processors_id = '\u003cvar translate=\"no\"\u003ePROCESSOR_ID\u003c/var\u003e'.\n ls_input-input_documents-gcs_prefix-gcs_uri_prefix = '\u003cvar translate=\"no\"\u003eSOURCE_BUCKET_URI\u003c/var\u003e'.\n ls_input-document_output_config-gcs_output_config-gcs_uri = '\u003cvar translate=\"no\"\u003eTARGET_BUCKET_URI\u003c/var\u003e'.\n\n \" Call API method\n lo_docai-\u003ebatch_process_processors( EXPORTING iv_p_projects_id = lv_p_projects_id\n iv_p_locations_id = lv_p_locations_id\n iv_p_processors_id = lv_p_processors_id\n is_input = ls_input\n IMPORTING\n es_output = DATA(ls_output)\n ev_ret_code = DATA(lv_ret_code)\n ev_err_text = DATA(lv_err_text)\n es_err_resp = DATA(ls_err_resp) ).\n\n IF lo_docai-\u003eis_success( lv_ret_code ) = abap_true.\n out-\u003ewrite( |API call successful| ).\n ELSE.\n out-\u003ewrite( |Error occurred during API call| ).\n out-\u003ewrite( lv_err_text ).\n ENDIF.\n\n \" Close HTTP connection\n lo_docai-\u003eclose( ).\n\n CATCH /goog/cx_sdk INTO DATA(lo_exception).\n \" Handle exception here\n ENDTRY.\n ENDMETHOD.\n ENDCLASS.\n\n Replace the following:\n - \u003cvar translate=\"no\"\u003eDEMO_DOC_PROCESSING\u003c/var\u003e: the client key name.\n - \u003cvar translate=\"no\"\u003ePROJECT_ID\u003c/var\u003e: the ID of the Google Cloud project that has the Document AI API enabled.\n - \u003cvar translate=\"no\"\u003eLOCATION_ID\u003c/var\u003e: the processor's location.\n - \u003cvar translate=\"no\"\u003ePROCESSOR_ID\u003c/var\u003e: the ID of the processor.\n - \u003cvar translate=\"no\"\u003eSOURCE_BUCKET_URI\u003c/var\u003e: the URI of the Cloud Storage bucket folder where source documents are kept for processing.\n - \u003cvar translate=\"no\"\u003eTARGET_BUCKET_URI\u003c/var\u003e: the URI of the Cloud Storage bucket where the processed document (JSON file) would be stored.\n4. Save and activate the changes.\n\n5. Run your application:\n\n 1. Select the ABAP class `ZGOOG_CL_QS_DOCUMENT_AI`.\n 2. Click **Run \\\u003e Run As \\\u003e ABAP Application (Console)** . Alternatively, press `F9`.\n6. To validate the results, follow these steps:\n\n 1. In the Google Cloud console, go to Cloud Storage **Buckets** page.\n\n [Go to Buckets](https://console.cloud.google.com/storage/browser)\n 2. Open the target bucket. The processed document is stored in the form of a JSON file.\n\nWhat's next\n-----------\n\n\n- Read the guide [Application development with the SAP BTP edition of ABAP SDK for Google Cloud](/sap/docs/abap-sdk/btp/latest/developer).\n- View the [code samples](/sap/docs/abap-sdk/samples/all-samples#sap-btp-edition).\n- Ask your questions and discuss ABAP SDK for Google Cloud with the community on [Cloud Forums](https://discuss.google.dev/tags/c/google-cloud/14/abap-sdk).\n\n\u003cbr /\u003e"]]