This quickstart shows you how to process documents (invoices) from a source
bucket and store the processed document
(JSON file) in a target bucket by using the batch processing
capability of Document AI API.
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 a program to process documents
In the SAP system, create an executable program in your
custom namespace (for example, Z or Y) by using transaction SE38.
In the SAP GUI, enter transaction code SE38.
In the Program field, enter a name of your program,
for example, ZDEMO_DOCUMENT_AI.
Click Create.
Specify the program attributes:
In the Title field, enter a title of your program,
for example, Process invoices.
In the Type field, choose Executable Program.
Click Save.
Save the program as a Local Object.
In the ABAP Editor, add the following code:
**********************************************************************
* Copyright 2023 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. *
**********************************************************************
REPORT zr_qs_process_documents.
* data declarations
DATA:
lv_p_projects_id TYPE string,
lv_p_locations_id TYPE string,
lv_p_processors_id TYPE string,
ls_input TYPE /goog/cl_documentai_v1=>ty_017.
TRY.
* open http connection
DATA(lo_client) = NEW /goog/cl_documentai_v1( iv_key_name = 'DEMO_DOC_PROCESSING' ).
* populate relevant parameters
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
CALL METHOD lo_client->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_client->is_success( lv_ret_code ).
MESSAGE 'Success' TYPE 'S'.
ELSE.
MESSAGE lv_err_text TYPE 'E'.
ENDIF.
* close http connection
lo_client->close( ).
CATCH /goog/cx_sdk INTO DATA(lo_exception).
MESSAGE lo_exception->get_text( ) TYPE 'E'.
ENDTRY.
Replace the following:
DEMO_DOC_PROCESSING: the client key name.
PROJECT_ID: the ID of the Google Cloud project.
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.
Run your application in SE38.
To validate the results, follow these steps:
In the Google Cloud console, go to Cloud Storage Buckets page.
Open the target bucket. The processed document is stored in the form of a JSON file.
[[["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\nbucket 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).\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 on-premises or any cloud edition of ABAP SDK for Google Cloud is installed and configured. [See how to install and configure the on-premises or any cloud edition of ABAP SDK for Google Cloud](/sap/docs/abap-sdk/on-premises-or-any-cloud/latest/install-config).\n\n\u003cbr /\u003e\n\n- Authentication to access Google Cloud APIs is set up. [See how to set up authentication](/sap/docs/abap-sdk/on-premises-or-any-cloud/latest/authentication).\n\n- Make sure the Document AI API is enabled in 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`. 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 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 a program to process documents\n-------------------------------------\n\n1. In the SAP system, create an executable program in your\n custom namespace (for example, Z or Y) by using transaction `SE38`.\n\n 1. In the SAP GUI, enter transaction code `SE38`.\n\n 2. In the **Program** field, enter a name of your program,\n for example, `ZDEMO_DOCUMENT_AI`.\n\n 3. Click **Create**.\n\n 4. Specify the program attributes:\n\n 1. In the **Title** field, enter a title of your program,\n for example, `Process invoices`.\n\n 2. In the **Type** field, choose `Executable Program`.\n\n 3. Click **Save**.\n\n 5. Save the program as a **Local Object**.\n\n 6. In the **ABAP Editor**, add the following code:\n\n **********************************************************************\n * Copyright 2023 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\n REPORT zr_qs_process_documents.\n\n * data declarations\n DATA:\n lv_p_projects_id TYPE string,\n lv_p_locations_id TYPE string,\n lv_p_processors_id TYPE string,\n ls_input TYPE /goog/cl_documentai_v1=\u003ety_017.\n\n TRY.\n\n * open http connection\n DATA(lo_client) = NEW /goog/cl_documentai_v1( iv_key_name = '\u003cvar translate=\"no\"\u003eDEMO_DOC_PROCESSING\u003c/var\u003e' ).\n\n * populate relevant parameters\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 CALL METHOD lo_client-\u003ebatch_process_processors\n EXPORTING\n 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_client-\u003eis_success( lv_ret_code ).\n MESSAGE 'Success' TYPE 'S'.\n ELSE.\n MESSAGE lv_err_text TYPE 'E'.\n ENDIF.\n\n * close http connection\n lo_client-\u003eclose( ).\n\n CATCH /goog/cx_sdk INTO DATA(lo_exception).\n MESSAGE lo_exception-\u003eget_text( ) TYPE 'E'.\n ENDTRY.\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.\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.\n2. Run your application in `SE38`.\n\n3. To validate the results, follow these steps:\n\n 1. In the Google Cloud console, go to Cloud Storage **Buckets** page.\n\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- Explore other quickstarts available on the GitHub repository, [GoogleCloudPlatform/google-cloud-abap/abap-sdk\n /ZGOOG_SDK_QUICKSTART/](https://github.com/GoogleCloudPlatform/google-cloud-abap/tree/main/abap-sdk/ZGOOG_SDK_QUICKSTART).\n- Read the guide [Application development with the on-premises or any cloud edition of ABAP SDK for Google Cloud](/sap/docs/abap-sdk/on-premises-or-any-cloud/latest/developer).\n- View the [code samples](/sap/docs/abap-sdk/samples/all-samples#on-premises-or-any-cloud-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"]]