SAP – Presentation Server – Execute – Abap Program e CSharp .NET Program – Abap

Publicado: 10 de agosto de 2014 em Abap

Como sabemos o servidor de apresentação do sistema SAP, possui varias funções que permitem comunicação com o servidor de aplicações, como por exemplo, importar e exportar arquivos do lado cliente, entre suas varias outras funções, o servidor de apresentação nos permite também executar programas externos.

WS_EXECUTE é um módulo de função padrão disponível nos sistemas R/3 da SAP, dependendo da versão e nível de release. Esta função é responsável por executar qualquer programa não SAP, por exemplo, um editor, uma calculadora ou qualquer outro programa de sua escolha. WS_EXECUTE executa um programa no servidor de apresentação, podendo também utilizar parâmetros comuns para se comunicar com o executável.

Contudo o sistema SAP possui grande quantidade de funções obsoletas que ainda funcionam por compatibilidade com versões de programas mais antigos, a função WS_EXECUTE é uma delas, você pode substituir esta função pela classe CL_GUI_FRONTEND_SERVICES.

Abaixo vamos criar um programa baseado na brincadeira Simon disse, neste caso nosso programa passara mensagens através de parâmetros para um executável criado em uma outra linguagem de programação, o executável receberá a mensagem e a exibira em seu formulário.

Para a versão mais recente deste procedimento utilize CL_GUI_FRONTEND_SERVICES: Serviços de Frontend SAP

 

Comunicando-se com um programa C# através de parâmetros

1 – Primeiro precisamos criar um programa C# utilizando a IDE Visual Studio. Arraste para o formulário dois componentes Label, um componente PictureBox, 2 Componentes Panel e um componente Richtextbox. A captura dos parâmetros será executada no evento SHOWN do formulário. Utilize a figura abaixo para modelar o design do seu programa:

Visual Studio - Design

Visual Studio – Design

2 – Crie um novo programa Abap e utilize o código abaixo. Entre com um ou mais parâmetros separados por espaço na caixa de texto do sistema SAP e pressione o botão executar na barra de tarefas. Dê permissão para o servidor de apresentação executar o programa:

Parâmetros - Abap

Parâmetros – Abap

3 – Você receberá uma mensagem de acordo com o resultado apresentado pelo servidor de apresentação:

Resultado

Resultado

4 – Pronto o programa C# será executado e receberá os parâmetros enviados que serão mostrados em uma caixa de texto. Visto que o ambiente do .NET Framework nos retorna um ARRAY contendo, primeiro o caminho e o nome do executável e sequencialmente todos os parâmetros enviados:

Programa C# - Parâmetros

Programa C# – Parâmetros

Exemplo:

Neste exemplo escrevemos dois programas em linguagens de programação diferentes e conseguimos uma comunicação entre eles por meio de parâmetros, este simples exemplo nos mostra inúmeras possibilidades de comunicação entre um programa ABAP e programas externos sem utilizar as funções de RFC da SAP.

C#

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace CsSap
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Shown(object sender, EventArgs e)
        {
            // Recupera e exibi parâmetros enviados para o executavel
            string[] args = Environment.GetCommandLineArgs();
            richTextBox1.AppendText(string.Format("{0}", String.Join(", ", args)));      
           
            // TODO: Criar funcionalidades para os parâmetros recebidos.
        }

    }
}

Abap

Função WS_EXECUTE:

*&---------------------------------------------------------------------*
*& Report  ZSAPDISSE
*&
*&---------------------------------------------------------------------*
*& Desenvolvimento Aberto
*& SAP Disse: WS_EXECUTE
*&---------------------------------------------------------------------*

REPORT  ZSAPDISSE.

* cria parametro para os parametros do executavel
PARAMETER SAPDISSE TYPE c LENGTH 70.

* declara variavel para o caminho do executavel
DATA programa TYPE string.

programa = 'C:\Desenvolvimento Aberto\temp\CsSap.exe'.

* Chama função que executa um executavel
CALL FUNCTION 'WS_EXECUTE'
  EXPORTING
    PROGRAM            = programa
    COMMANDLINE        = SAPDISSE
    INFORM             = ' '
  EXCEPTIONS
    FRONTEND_ERROR     = 1
    NO_BATCH           = 2
    PROG_NOT_FOUND     = 3
    ILLEGAL_OPTION     = 4
    GUI_REFUSE_EXECUTE = 5
    OTHERS             = 6.

* verifica estado da execução
CASE SY-SUBRC.
  WHEN 1.
    WRITE: / 'ERRO NO FRONTEND!'.
  WHEN 2.
    WRITE: / 'NO BATCH!'.
  WHEN 3.
    WRITE: / 'PROGRAMA NÃO ECONTRADO!'.
  WHEN 4.
    WRITE: / 'OPÇÃO ILEGAL!'.
  WHEN 5.
    WRITE: / 'SAP GUI SE RECUSOU A EXECUTAR O PROGRAMA!'.
  WHEN 6.
    WRITE: / 'OUTROS ERROS!'.
  WHEN OTHERS.
    WRITE: / 'PROGRAMA EXECUTADO COM SUCESSO!!!!'.
    MESSAGE 'Programa executado com sucesso!' TYPE 'S'.
ENDCASE.

Classe CL_GUI_FRONTEND_SERVICES:

*&---------------------------------------------------------------------*
*& Report  ZSAPDISSE_FES
*&
*&---------------------------------------------------------------------*
*& Desenvolvimento Aberto
*& CL_GUI_FRONTEND_SERVICES
*&---------------------------------------------------------------------*

REPORT  ZSAPDISSE_FES.

* cria parametro para os parametros do executavel
PARAMETER SAPDISSE TYPE string.

* declara variavel para o caminho do executavel
DATA programa TYPE string.

programa = 'C:\Desenvolvimento Aberto\temp\CsSap.exe'.

* Executa método de classe
CL_GUI_FRONTEND_SERVICES=>EXECUTE(
  exporting
    APPLICATION            =     programa
    PARAMETER              =     sapdisse
  exceptions
    CNTL_ERROR             = 1
    ERROR_NO_GUI           = 2
    BAD_PARAMETER          = 3
    FILE_NOT_FOUND         = 4
    PATH_NOT_FOUND         = 5
    FILE_EXTENSION_UNKNOWN = 6
    ERROR_EXECUTE_FAILED   = 7
    SYNCHRONOUS_FAILED     = 8
    NOT_SUPPORTED_BY_GUI   = 9
    OTHERS                 = 10 ).

* verifica estado da execução
CASE SY-SUBRC.
  WHEN 1.
    WRITE: / 'ERRO CNTL!'.
  WHEN 2.
    WRITE: / 'ERRO NO FRONTEND!!'.
  WHEN 3.
    WRITE: / 'ERRO NO PARAMETRO!'.
  WHEN 4.
    WRITE: / 'PROGRAMA NÃO ECONTRADO!'.
  WHEN 5.
    WRITE: / 'CAMINHO NÃO ECONTRADO!'.
  WHEN 6.
    WRITE: / 'EXTENSÃO DESCONHECIDA!'.
  WHEN 7.
    WRITE: / 'ERRO DE EXECUÇÃO!'.
  WHEN 8.
    WRITE: / 'FALHA NA SINCRONIZAÇÃO!'.
  WHEN 9.
    WRITE: / 'NÃO SUPORTADO PELO GUI!'.
  WHEN 10.
    WRITE: / 'OUTROS!'.
  WHEN OTHERS.
    WRITE: / 'PROGRAMA EXECUTADO COM SUCESSO!!!!'.
    MESSAGE 'Programa executado com sucesso!' TYPE 'S'.
ENDCASE.

 

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s