Escolar Documentos
Profissional Documentos
Cultura Documentos
ABAP - Apostila
ABAP - Apostila
2) Converso entre tipos: TIPO SAP P (DEC) N, CHAR DATS, TIME I TIPO BASE EXTERNA Numeric Varchar Integer
Com esse modelo, no teremos problema algum com a converso de data-types entre os ambientes. Convm ressaltar que NO devemos usar os tipos especficos do SAP, para no termos que nos preocupar com converso de tipo de dados em todos os programas que faro acesso essas tabelas.
3) Criando Sinnimo (SYNONYM) na base da dados externa: Primeiramente, apesar de normalmente ns (equipe de ABAP) criarmos as tabelas no SAP, quando se trata de sinnimos, devido natureza e complexidade da criao, no nos incumbe tal tarefa. Ns somente devemos nos preocupar com a criao da tabela no SAP, conforme demonstrado no item 1 acima, porm veremos abaixo procedimentos para que possamos entender e, se necessrio for, at criarmos os sinnimos: 3.1) Definio: Os sinnimos fazem parte do esquema de uso de tabelas remotas, destinadas a troca de informaes entre o sistema R/3 e outros sistemas de Banco de Dados. O sinnimo ( synonym ) um recurso do SGBD que permite acesso a objetos em bancos de dados remotos, de maneira transparente, que consiste basicamente na criao de um redirecionamento de chamadas ( requests ) dos clientes para um banco remoto.
3.2) Porque utilizarmos Sinnimos ? Como j vimos, o sinnimo (synonym) uma ferramenta dos SGBDs atuais que permitem fazermos ligao lgica entre uma requisio de informaes e a informao fsica. Esquecendo um pouco o SAP (se que possvel isso), imaginemos um sistema qualquer, escrito em uma linguagem qualquer (que no seja ABAP!) onde temos inmeros programas acessando determinada tabela em deterninado servidor e em determinado Banco de Dados. Por alguma razo (utilizaremos a hiptese de espao em disco), precisamos alterar o servidor (mquina fsica) e banco de dados e, de quebra tambm o nome desta tabela. Pronto, temos um enorme problema em nossas mos: precisaremos localizar e alterar TODOS os cdigos fonte que fazem acesso essa tabela. Porm, neste momento em que entra um Sinnimo, pois atravs dele, enganaremos o servidor de Banco de Dados. Como? Criaremos um sinnimo, no banco de dados j existente, apontando para aquele servidor/banco de dados/tabela, fazendo assim com que no precisemos alterar NENHUMA linha de codificao.
(ORACLE/UNIX): Deve-se incluir os novos schemas a serem acessados no listener do DB Server para o SAP R/3.
vi /oracle/SID/network/admin/tnsnames.ora O05DS.WORLD = (DESCRIPTION = (ADDRESS = (PROTOCOL= TCP)(Host= risc05)(Port= 1521)) (CONNECT_DATA = (SID = O05DS)) ) S08PR = (DESCRIPTION = (ADDRESS = (PROTOCOL= TCP)(Host= risc05)(Port= 1521)) (CONNECT_DATA = (SID = s08pr)(SERVER=DEDICATED)) )
onde: <NOME>: identificao do database link <USER>: usurio remoto utilizado para acesso (uso do sapr3 para este fim definitivamente no permitido) <SERVICENAME>: identificao do sistema remoto (conforme configurado no listener do Oracle) Utilizar usurio padro do R/3 SYSTEM Exemplos: create public database link O05DS
3.8) Criao do Sinnimo para a tabela do SAP R/3: Remover, manualmente a tabela da base de dados ( manter a definio do dicionrio de dados do R/3 ), como mencionado no item 1, ou conforme abaixo: Utilizar usurio padro do R/3 SAPR3 Exemplo: drop table ZTABELA4; Criar o sinnimo, com o nome da tabela ( transparent table ) removida, para a tabela remota. Sintaxe do comando:
create public synonym <NOME> for <USER>.<TABLE>@<SERVICENAME>.WORLD;
4) Formas de Acesso Base de Dados externa: Um problema no acesso aos dados que esto na base de dados externa, que eles no so visveis no ambiente SAP, como as tabelas no SAP. Exemplo: no podemos visualizar o contedo da tabela de forma alguma pelas transaes do DDIC, sendo que ao tentarmos, receberemos a infeliz mensagem de que a tabela no existe no banco de dados.
No adianta insistir...
Bem, como vimos, impossvel visualizar-mos os dados destas tabelas pelo SAP, o que de certa forma dificulta um pouco nosso trabalho. A nica forma de vermos as informaes armazenadas nestas tabelas, acessando diretamente o servidor de banco de dados
Portanto, para sanarmos esse e qualquer outro eventual problema, podemos utilizar o que a SAP chama de NativeSQL, pois atravs deste mtodo de acesso, no h interferncia no comando SQL pelo interpretador ABAP, sendo que este comando vai diretamente para a Base de Dados externa, conforme esquema abaixo:
Lembremos que o OpenSQL permite-nos acessar as tabelas do banco de dados declaradas no dicionrio ABAP, independente da plataforma em que estamos trabalhando com o R/3, porm, algumas vezes, necessitamos utilizar comandos especficos do banco de dados e, no somente para acessar sinnimos, como vimos at agora. Para decidirmos pela utilizao de NativeSQL, devemos ter em mente que quando escrevemos um programa com comandos especficos do banco de dados, este programa s funcionar no DB para o qual foi previamente escrito, portanto, se no quisermo incorrer em problemas futuros com possveis mudanas de banco de dados, no devemos utilizar NativeSQL. Um comando NativeSQL, deve ser sempre precedido pela declarao EXEC SQL e, finalizado sempre com a declarao ENDEXEC, conforme exemplo abaixo:
EXEC SQL [PERFORMING <form>]. ENDEXEC. Parmetro opcional
Vejamos agora uma lista de comandos que, independente do Banco de Dados, esto includos no NativeSQL. (esta lista pode ser maior, dependendo do Banco de Dados).
Data definition o CREATE TABLE o DROP TABLE o ALTER TABLE o CREATE VIEW o DROP VIEW o CREATE INDEX o DROP INDEX o GRANT o REVOKE
diretamente dentro de uma tabela interna, pois seu processamento executado linha-a-linha, fazendo com isso que, se o resultado desejado for uma tabela, deveremos utilizar a sintaxe PERFORMING <form>, onde transportaremos os dados da WA para uma Tabela Interna. Quanto utilizamos o comando PERFORMING <form>, o formulrio <form> executado para cada registro retornado pela clusula SELECT, ou seja, podemos process-los um a um, ou executar APPEND em uma tabela interna para processamento(s) futuro(s), sendo que o comando EXIT FROM SQL. Outro ponto importante, que o AUTHORIT-CHECK no executado quando usamos NativeSQL.
d) para simplificar a clusula INTO, podemos tambm informar uma estrutura, como j mencionado, a exemplo de como fazemos com OpenSQL. DATA: BEGIN OF WA, CLIENT(3), ARG1(3), ARG2(3), END OF WA. DATA F3(3). F3 = ' 1 ' EXEC SQL. SELECT CLIENT, ARG1 INTO :WA FROM AVERI_CLNT WHERE ARG2 = :F3 ENDEXEC. WRITE: / WA-CLIENT, WA-ARG1.
e) podemos utilizar OpenSQL para tabelas externas, desde que tenham sido criados sinnimos anteriormente para elas: NativeSQL: EXEC SQL PERFORMING ZF_APPEND_TAB.
6) Comandos OpenSQL/NativeSQL avanados: Veremos agora algumas clusulas SQL que esto presentes na maioria dos banco de dados atuais e, que desta forma podemos utilizar no ambiente SAP. 6.1) Funes Agregadas ou de Agrupamento: funo 1) 2) 3) 4) 5) avg(n) count(expr) max(expr) min(expr) sum(n) retorno
mdia do valor n, ignorando nulos vezes que o nmero da expr avalia para algo no nulo maior valor da expr menor valor da expr soma dos valores de n, ignorando nulos
COUNT: OpenSQL: SELECT COUNT( DISTINCT MATNR ) FROM MARC INTO V_CONTA_1. NativeSQL: EXEC SQL. SELECT COUNT( MATNR ) FROM MARC INTO :V_CONTA_2 WHERE MANDT = :SY-MANDT ENDEXEC. MAX: OpenSQL: SELECT MATNR MAX( BSTMI ) MAX( BSTMA ) FROM MARC INTO TABLE T_MARC GROUP BY MATNR.
dentro do SAP, deve ser utilizada atravs da clusula FOR ALL ENTRIES, sendo que em SQL, no existe tal clusula, como veremos a seguir: OpenSQL: ***Apenas para utilizao no FOR ALL ENTRIES SELECT MATNR MTART FROM MARA INTO TABLE T_MARA WHERE MTART = 'HAWA'. SELECT MARA~MATNR MAKT~MAKTX MARC~WERKS FROM MARA INNER JOIN MAKT ON MARA~MATNR EQ MAKT~MATNR INNER JOIN MARC ON MARA~MATNR EQ MARC~MATNR INTO TABLE T_JOIN FOR ALL ENTRIES IN T_MARA WHERE MARC~WERKS = 'CE01' AND MAKT~SPRAS = SY-LANGU AND MARA~MATNR = T_MARA-MATNR.
6.6) Trabalhando com Cursores de Banco de Dados: Para abrirmos um cursor de banco de dados, obrigatrio declararmos uma varivel tipo CURSOR, e um cursor de banco de dados pode ser utilizado somente para comandos SELECT e, este comando SELECT, deve, obrigatoriamente retornar mais do que uma linha como resultado. Sintaxe: OPEN CURSOR C1 FOR SELECT * FROM SFLIGHT WHERE CARRID = 'LH '. FETCH CURSOR C1. CLOSE CURSOR C1. Sim, este comando muito semelhante ao OpenSQL, at porque pertence classe de comandos do OpenSQL, sendo desta forma, impossvel a sua utilizao atravs de NativeSQL.
7) Utilizando o SQLTrace: Esta uma ferramenta muito importante no nosso dia-a-dia, pois com ela podemos transaes descobrir e com exatamente quais quais tabelas podemos determinadas bem simples: chaves,
Transao ST05
O resultado ser este Report, com todos os acessos de tabela executados pelo usurio enquanto o Trace estava ativo. Para obtermos maiores detalhes, devemos clicar duas vezes na linha desejada.
Veremos ento, o comando SQL que foi enviado para o DB Server, podendo at copiarmos e utilizarmos em instrues Native ou OpenSQL.
t_r3_xxxx xxxx
nm_seq_registro: NUMBER(15,0) NOT NULL dt_geracao: VARCHAR2(8) NULL hr_geracao: VARCHAR2(6) NULL dt_processamento: VARCHAR2(8) NULL hr_processamento: VARCHAR2(6) NULL id_sit_registro: NUMBER(3) NOT NULL cd_erro_registro: VARCHAR2(8) NULL coluna_1: VARCHAR2(8) NULL coluna_2: VARCHAR2(10) NULL coluna_n: NUM BER(5) NULL
10) FORMAS DE INTERFACEAMENTO COM O SAP R/3 Tabelas de Interface Tabelas Corporativas IDOCs CALL FUNCTION (RFC)
SAP
Progra ABAP
Progra
10.2)
TABELAS DE INTERFACE
So as tabelas definidas no Modelo de Dados, que sero utilizadas para a troca de informaes entre o SAP R/3 e os Sistemas Natura(e vice-versa). Sempre que possvel utilizaremos esta soluo. Esta soluo dever ser utilizada para a maioria das interfaces com o SAP R/3, exceto nos casos onde ser necessrio utilizar-se de IDOCs.
SAP
Programa ABAP
R/3
Sistema Legado
t_r3_interface
t_r3_xxxx
DB SAP
DBLINK
DB
Legado
t_r3_interface
t_r3_yyy