Com a evolução dos meios de comunicação, a internet, a mobilidade de informação e novos dispositivos sendo criados, nos dias de hoje é essencial que uma linguagem de programação se adapte para continuar competitiva. O Abap possui já há algum tempo uma integração com a poderosa e quase unanime linguagem de programação para web, o Javascript e apesar do Abap ainda não suportar as versões mais recentes da linguagem possui alguns recursos excelentes que ajudam na programação Abap Javascript, como por exemplo compilar uma linguagem que é interpretada, facilitando muito para o programador encontrar erros já que o Abap neste caso fica responsável pelas mensagens de erro desta compilação, que ao contrario dos Browsers, simplesmente ignoram uma instrução com erro deixando a cargo do programador descobrir o motivo que levou a não execução do script.
JavaScript
É uma linguagem leve, interpretada e baseada em objetos com funções de primeira classe, mais conhecida como a linguagem de script para páginas Web, mas usada também em vários outros ambientes sem browser como node.js ou Apache CouchDB. É uma linguagem de script multi paradigma, baseada em protótipo que é dinâmica, e suporta estilos de programação orientado a objetos, imperativo e funcional.
ABAP JavaScript
Programas ABAP JavaScript permitem executar e também permitem a transferência de dados entre ABAP e JavaScript. A classe CL_JAVA_SCRIPT implementa uma API que pode ser usada em programas ABAP como um motor JavaScript (JS), implementado no kernel do SAP. A classe encapsula a API JavaScript C Engine e fornece ao programador ABAP métodos e atributos que podem ser usados para executar programas em JavaScript no servidor de aplicativos do sistema R/3 no modo normal ou depuração (Scripting do lado do servidor). O motor de JavaScript em uso suporta JavaScript Versão 1.5. Variáveis do script pode ser ligado a objetos de dados do programa ABAP (Bind).
Get
Lê uma variável global do contexto JavaScript. A variável global pode ter sido criada anteriormente ou com o método SET ou executando um script do contexto. As propriedades de um objeto não pode ser acessados. A variável global deve ser uma propriedade do objeto raiz.
Set
Define uma variável global do contexto JavaScript para um valor. Se a variável ainda não está disponível, ela é criada com o nome especificado. A variável pode ser acessada enquanto todos os scripts compilados de um mesmo contexto estão sendo executados e com o método GET. Somente as propriedades do objeto raiz pode ser definida com SET.
Limitações
O Java Script é regulamentado pelo padrão ECMAScript. Desde 2012, todos os navegadores modernos possuem suporte total ao ECMAScript 5.1. Navegadores mais antigos suportam pelo menos ECMAScript 3. Existe uma 6ª versão do padrão sendo desenvolvida no momento. Sendo assim Abap JavaScript não suporta todos os recursos atuais como por exemplo alguns recursos de manipulação de arrays através do seu protótipo usando a instrução MAP incluída pelo ECMAScript 3, você encontra o seguinte erro:
Erro de execução de script: CL_JAVA_SCRIPT, Rcode: ( 600 ), Type Error objeto.map is not a function.
Exemplo:
Neste exemplo criamos um objeto instanciado da classe cl_java_script e criamos um objeto Abap e um javascript em tempo execução e passamos e retornamos parâmetros para este script através do objeto Abap.
Abap
*&---------------------------------------------------------------------* *& Report ZJAVASCRIPT *& *&---------------------------------------------------------------------* *& Desenvolvimento Aberto *& Abap integrado com JavaScript *&---------------------------------------------------------------------* REPORT ZJAVASCRIPT. * Declara objetos javascript e scripts DATA: Get_valor TYPE string, JS_Objeto TYPE REF TO CL_JAVA_SCRIPT, MeuScript TYPE String. * Cria Script CONCATENATE ' function quadrado(x) { return x * x}; ' ' var resultado = quadrado(mapa) ' INTO MEUSCRIPT SEPARATED BY CL_ABAP_CHAR_UTILITIES=>CR_LF. * Cria objeto javascript JS_OBJETO = CL_JAVA_SCRIPT=>CREATE( ). * Compila objeto javascript JS_OBJETO->COMPILE( exporting SCRIPT_NAME = 'script.js' SCRIPT = MEUSCRIPT ). * Verifica compilação if JS_OBJETO->LAST_CONDITION_CODE <> 0. write: / 'Erro de compilação de script', JS_OBJETO->LAST_ERROR_MESSAGE. else. write / 'foi compilado com sucesso'. endif. skip. * Define um valor de variavel atravez do ABAP JS_OBJETO->SET( NAME = 'mapa' VALUE = '5' ). * Executa Javascript JS_Objeto->EXECUTE( exporting SCRIPT_NAME = 'script.js' ). * Verifica se script foi executado if JS_OBJETO->LAST_CONDITION_CODE <> 0. write: / 'Erro na execução de script', JS_OBJETO->LAST_ERROR_MESSAGE. else. write / 'JavaScript foi executado com sucesso'. endif. skip. * Retorna valor de script GET_VALOR = JS_OBJETO->GET( NAME = 'resultado' ). * Verifica se o objeto retornou um valor if JS_OBJETO->LAST_CONDITION_CODE <> 0. write: / 'Erro em recuperar objeto javascript', JS_OBJETO->LAST_ERROR_MESSAGE. else. write: / 'Valor do objeto :', GET_VALOR. endif. skip.