1. Introdução
Neste codelab, listamos as etapas para criar uma conta de serviço e usá-la para configurar a chave do cliente e a tabela de mapa de comunicação fornecidas pelo SDK ABAP para Google Cloud e invocar a API JSON do Cloud Storage em ABAP.
Os seguintes serviços do Google Cloud são usados neste codelab:
- Compute Engine
- Serviços de rede
- Cloud Shell
- API JSON do Cloud Storage V1
Observação: quando você cria um projeto do Google Cloud, um conjunto específico de APIs e serviços, incluindo o Cloud Storage, é ativado automaticamente. Assim, você pode aproveitar imediatamente essa solução de armazenamento robusta. Portanto, não é necessário ativá-lo como uma etapa adicional.
Pré-requisitos
- Verifique se você tem acesso a um sistema SAP com o SDK ABAP para Google Cloud instalado.
- Consulte o codelab Instalar a versão de teste da plataforma ABAP no Google Cloud Platform e instalar o SDK ABAP para configurar um novo sistema.
O que você vai criar
Você vai criar os seguintes programas no seu sistema SAP usando o SDK ABAP para Google Cloud
- Crie um bucket do Cloud Storage.
- Leia um arquivo do servidor de aplicativos e faça upload dele para o bucket do Cloud Storage criado.
2. Requisitos
- Um navegador, como o Chrome ou o Firefox
- Um projeto na nuvem do Google Cloud com o faturamento ativado ou crie uma conta de teste sem custo financeiro de 90 dias para o Google Cloud Platform.
- A GUI do SAP (Windows ou Java) instalada no seu sistema. Se a GUI do SAP já estiver instalada no seu notebook, conecte-se ao SAP usando o endereço IP externo da VM como o IP do servidor de aplicativos. Se você estiver usando um Mac, também poderá instalar a GUI do SAP para Java disponível neste link.
3. Antes de começar
- Verifique se você tem acesso a um sistema SAP com o SDK ABAP para Google Cloud instalado.
- Consulte o codelab Instalar a versão de teste da plataforma ABAP no Google Cloud Platform e instalar o SDK ABAP para configurar um novo sistema.
- No console do Google Cloud, na página de seletor de projetos, selecione ou crie um projeto do Google Cloud (por exemplo,
abap-sdk-poc). - Verifique se o faturamento está ativado para seu projeto do Cloud. Saiba como verificar se o faturamento está ativado em um projeto. Pule esta etapa se você estiver usando a conta de teste sem custo financeiro de 90 dias.
- Você vai usar o Cloud Shell, um ambiente de linha de comando executado no Google Cloud. No console do Cloud, clique em Ativar o Cloud Shell no canto superior direito:

- Execute os comandos a seguir para fazer a autenticação da sua conta e definir o projeto padrão como
abap-sdk-poc. A zonaus-west4-bé usada como exemplo. Se necessário, mude o projeto e a zona nos comandos a seguir de acordo com sua preferência.
gcloud auth login
gcloud config set project abap-sdk-poc
gcloud config set compute/zone us-west4-b
- Você precisa ter acesso a um sistema SAP com o SDK ABAP para Google Cloud instalado.
- É necessário concluir o codelab 1 (Instalar o ABAP Platform Trial 1909 no Google Cloud Platform e o SDK ABAP para Google Cloud) e o codelab 2 (Configurar a autenticação do SDK ABAP usando tokens para o SAP hospedado na VM do Compute Engine) antes de continuar com este codelab.
- Se você concluiu os codelabs 1 e 2, isso provisionou um sistema de teste da plataforma ABAP 1909 no Google Cloud, além da configuração necessária para autenticação e conectividade.
- Se você não tiver concluído os codelabs 1 e 2, não terá toda a infraestrutura e conectividade necessárias para realizar as etapas deste codelab. Portanto, conclua os codelabs 1 e 2 antes de continuar com este.
4. Criar uma conta de serviço com o papel de usuário de objetos do Storage
Para criar uma conta de serviço com a função necessária, siga estas etapas:
- Execute o seguinte comando no terminal do Cloud Shell:
gcloud iam service-accounts create abap-sdk-storage-tester \
--display-name="Service Account for Cloud Storage"
- Agora, adicione os papéis necessários à conta de serviço criada na etapa acima:
gcloud projects add-iam-policy-binding abap-sdk-poc \
--member='serviceAccount:abap-sdk-storage-tester@abap-sdk-poc.iam.gserviceaccount.com' \
--role='roles/storage.objectUser'
O comando acima usa abap-sdk-poc como um marcador de posição para o projeto do Google Cloud. Substitua abap-sdk-poc pelo ID do projeto.
- Para verificar se o papel foi adicionado, acesse a página IAM. A conta de serviço criada vai aparecer com o papel atribuído a ela, conforme mostrado abaixo:

5. Criar configuração de chave do cliente
Agora que você configurou os pré-requisitos no Google Cloud, podemos continuar com a configuração no SAP.
Para a configuração relacionada à autenticação e conectividade, o SDK ABAP para Google Cloud usa a tabela /GOOG/CLIENT_KEY.
Para manter a configuração na tabela /GOOG/CLIENT_KEY, siga estas etapas:
- Na GUI do SAP, insira o código da transação
SPRO. - Clique em IMG de referência SAP.
- Clique em SDK ABAP para Google Cloud > Configurações básicas > Configurar chave do cliente.
- Mantenha os seguintes valores nos campos:
Campo | Valor |
Nome da chave do Google Cloud | TEST_STORAGE |
Nome da conta de serviço do Google Cloud |
|
Escopo do Google Cloud |
|
ID do projeto | abap-sdk-poc |
Classe de autorização |
|
Deixe todos os outros campos em branco.
6. Criar um relatório Z para criar um bucket no Cloud Storage
- Faça login no sistema SAP.
- Acesse o código da transação
SE38e crie um programa de relatórios com o nomeZDEMO_CREATE_BUCKET. - No pop-up que aparece, forneça detalhes conforme mostrado abaixo:

No próximo pop-up, selecione "Objeto local" ou "Forneça um nome de pacote" de acordo com sua escolha.
- No editor ABAP, adicione o seguinte código:
DATA lv_json_response TYPE string.
DATA ls_input TYPE /goog/cl_storage_v1=>ty_001.
DATA lo_storage TYPE REF TO /goog/cl_storage_v1.
TRY.
lo_storage = NEW #( iv_key_name = 'TEST_STORAGE' ).
" Bucket Name should be globally unique & permanent
ls_input = VALUE #( name = 'newtest_bucket_abapsdk_gcloud001' ).
lo_storage->insert_buckets
( EXPORTING iv_q_project = CONV #( lo_storage->gv_project_id )
is_input = ls_input
IMPORTING es_raw = lv_json_response
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_storage->is_success( lv_ret_code ) = abap_true.
cl_demo_output=>new(
)->begin_section( 'Result:'
)->write_text( 'Bucket was created:'
)->next_section( 'JSON Response:'
)->write_json( lv_json_response
)->display( ).
ELSE.
DATA(lv_msg) = lv_ret_code && ':' && lv_err_text.
cl_demo_output=>new(
)->begin_section( 'Result:'
)->write_text( 'Bucket creation failed;'
)->next_section( 'Error:'
)->write_json( lv_msg
)->display( ).
ENDIF.
CATCH /goog/cx_sdk INTO DATA(lo_sdk_excp).
lv_msg = lo_sdk_excp->get_text( ).
MESSAGE lv_msg TYPE 'S' DISPLAY LIKE 'E'.
ENDTRY.
Se o nome do bucket não for exclusivo globalmente, ele não será criado. Portanto, tente usar um nome exclusivo para o bucket antes de executar o código.
- Salve e ative o relatório.
- Execute o relatório (pressione F8).
Se a execução for bem-sucedida, você vai ver a saída do relatório, conforme mostrado abaixo:

7. Criar um Z-Report para ler um arquivo do servidor de aplicativos e fazer upload dele para um bucket do Cloud Storage
Antes de realizar esta atividade, prepare um arquivo de texto grande. Aqui já temos um arquivo de texto grande criado e enviado para o servidor de aplicativos. Use o código de transação CG3Z para fazer upload de um arquivo no servidor de aplicativos do sistema SAP.
Neste exemplo, usamos um arquivo de texto de aproximadamente 40 MB, que já foi enviado para o servidor de aplicativos no diretório /tmp.
Também é possível fazer o download dessa pasta do GitHub usando o seguinte link: Arquivo de amostra
- Faça login no sistema SAP.
- Acesse o código da transação
SE38e crie um programa de relatórios com o nomeZDEMO_UPLOAD_FILE. - No pop-up que aparece, forneça detalhes conforme mostrado abaixo:

No próximo pop-up, selecione "Objeto local" ou "Forneça um nome de pacote" de acordo com sua escolha.
- No editor ABAP, adicione o seguinte código:
DATA lv_file_length TYPE i.
DATA lv_msg TYPE string.
DATA lv_dset TYPE string.
DATA lv_data TYPE string.
DATA ls_data TYPE xstring.
DATA lo_storage TYPE REF TO /goog/cl_storage_v1.
" Read file data from the application server
DATA(dset) = '/tmp/sample_file.txt'.
OPEN DATASET dset FOR INPUT IN TEXT MODE ENCODING DEFAULT.
IF sy-subrc <> 0.
MESSAGE 'Cannot opening/reading dataset' TYPE 'E'.
ENDIF.
DO.
READ DATASET dset INTO lv_dset.
IF sy-subrc <> 0.
EXIT.
ENDIF.
CONCATENATE lv_data lv_dset INTO lv_data SEPARATED BY cl_abap_char_utilities=>newline.
CLEAR lv_dset.
ENDDO.
CLOSE DATASET dset.
CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
EXPORTING text = lv_data
IMPORTING buffer = ls_data
EXCEPTIONS failed = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE 'Conversion from string to xstring failed' TYPE 'E'.
ENDIF.
TRY.
lo_storage = NEW #( iv_key_name = 'DEMO_STORAGE' ).
lo_storage->add_common_qparam( iv_name = 'uploadType' iv_value = 'resumable' ).
lo_storage->insert_objects( EXPORTING iv_q_name = 'large_text_file_demo.txt'
iv_p_bucket = 'newtest_bucket_abapsdk_gcloud001'
is_data = ls_data
iv_content_type = 'text/pdf'
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_storage->is_success( lv_ret_code ) = abap_true.
cl_demo_output=>new(
)->begin_section( 'Result:'
)->write_text( 'Object was uploaded successfully'
)->write_text( 'Object Self Link:'
)->write_text( ls_output-self_link
)->display( ).
ELSE.
cl_demo_output=>new(
)->begin_section( 'Error:'
)->write_text( lv_msg
)->display( ).
ENDIF.
CATCH /goog/cx_sdk INTO data(lo_sdk_excp).
lv_msg = lo_sdk_excp->get_text( ).
MESSAGE lv_msg TYPE 'S' DISPLAY LIKE 'E'.
RETURN.
ENDTRY.
lo_storage->close( ).
- Salve e ative o relatório.
- Execute o relatório (pressione F8).
Se a execução for bem-sucedida, você vai ver a saída do relatório, conforme mostrado abaixo:

Para verificar se o upload do arquivo foi concluído, navegue até o bucket do Cloud Storage, conforme mostrado abaixo:


8. Upload de arquivos para o Cloud Storage usando o código do SDK ABAP explicado
Em essência, esse programa ABAP se integra ao Google Cloud Storage. Ele lê um arquivo do servidor de aplicativos e transmite os dados do arquivo para o stub do cliente da API Storage para fazer upload em um bucket de armazenamento, que foi criado no programa de relatório anterior.
O programa de relatórios que você criou para fazer upload de um arquivo faz o seguinte:
Detalhamento passo a passo
Estabelecer conexão:
- Ele estabelece uma conexão HTTP com o serviço do Google Storage usando a classe
/GOOG/CL_STORAGE_V1.
Ler dados de arquivo
- Lê o arquivo no servidor de aplicativos fazendo um
OPENDATASETe chama o módulo de função padrão do SAPSCMS_STRING_TO_XSTRINGpara converter no formatoXSTRING.
Adicionar parâmetros de consulta comuns
- Para fazer o chunking, o tipo de upload que precisamos escolher é "Retomável". Por padrão, quando o upload retomável é selecionado, os dados do arquivo são divididos em partes de 8 MB e enviados. No entanto, os desenvolvedores podem alterar esse tamanho de divisão definindo o parâmetro
IV_P_CHUNK_SIZE, mas é recomendável usar a configuração padrão. - Para informar ao método da API que a opção de upload "Retomável" precisa ser escolhida, chamamos o método
ADD_COMMON_QPARAMe transmitimosuploadTypecomoresumable..
Inserir objetos
- Chama o método
INSERT_OBJECTStransmitindo os seguintes parâmetros: IV_Q_NAME: nome do arquivo com que o conteúdo será armazenado no Cloud Storage.IV_P_BUCKET: nome do bucket em que o arquivo precisa ser enviadoIS_DATA: dados de arquivo que precisam ser enviadosIV_CONTENT_TYPE: tipo de conteúdo do arquivo. No nosso cenário atual, usamos "text/plain" porque estamos enviando um arquivo de texto.
Não transmitimos nenhum valor ao parâmetro de importação IV_CHUNK_SIZE e deixamos o stub do cliente da API usar o valor padrão associado a esse parâmetro, que é de 8 MB.
Lidar com sucesso/erros:
- Mostra a resposta da API com base no sucesso ou não da chamada de API.
Encerrar conexão:
- Fecha a conexão HTTP com o serviço de armazenamento.
9. Parabéns
Parabéns! Você concluiu o codelab "Fazer upload de um arquivo para um bucket do Cloud Storage".
A API JSON do Cloud Storage tem muitos recursos, e com o SDK ABAP para Google Cloud, você pode acessá-los diretamente nos seus sistemas SAP de forma nativa usando ABAP.
O Google Cloud Storage é uma ótima opção para armazenar e gerenciar grandes quantidades de dados. Ele é usado por uma ampla variedade de empresas, empreendimentos e aplicativos.
Confira alguns benefícios de usar o Google Cloud Storage:
- Custo-benefício: o Google Cloud Storage é uma maneira econômica de armazenar e gerenciar grandes quantidades de dados.
- Simplicidade: o Google Cloud Storage é fácil de usar, com uma API simples e intuitiva.
- Flexibilidade: o Google Cloud Storage pode ser usado com vários aplicativos e plataformas.
Agora você pode continuar com o codelab abaixo para seguir sua jornada de aprendizado sobre como usar o SDK ABAP para acessar vários serviços do Google Cloud.
- Enviar um evento para o Pub/Sub
- Receber um evento do Cloud Pub/Sub
- Usar a API Cloud Translation para traduzir textos
- Usar a API DLP para encobrimento de PII
- Chamar o BigQuery ML do ABAP
10. Limpar
Se você não quiser continuar com os outros codelabs relacionados ao ABAP SDK for Google Cloud, faça a limpeza.
Excluir o projeto
- Exclua o projeto do Google Cloud:
gcloud projects delete abap-sdk-poc
Excluir recursos individuais
- Exclua a instância de computação:
gcloud compute instances delete abap-trial-docker
- Exclua as regras de firewall:
gcloud compute firewall-rules delete sapmachine
- Exclua a conta de serviço:
gcloud iam service-accounts delete \
abap-sdk-dev@abap-sdk-poc.iam.gserviceaccount.com