integração Ágiles –...
TRANSCRIPT
Pág. 1 Image Technology S.A.©2003
Integração Ágiles –
SAP
Pág. 2 Image Technology S.A.©2003
Introdução
• Existem 2 tipos de integração possíveis do
Ágiles com o SAP:
– Integração servidor/servidor
– Integração com a interface gráfica do SAP em
formulários no Ágiles
Pág. 3 Image Technology S.A.©2003
Integração entre Servidores
• Integração realizada através da API JCo (SAP
Java Connector)
• Integração feita com o SAP através de
chamada a RFCs (Remote Function Call)
• Não é possível acessar tabelas do SAP
diretamente, somente através de RFCs
Pág. 4 Image Technology S.A.©2003
RFC
• As RFCs são compostas de:
– Nome
– Parâmetros:
• Entrada
• Saída
• Tabelas
• Exceções
• Para obter detalhes de uma RFC utilizar a
transação SE37 do SAP (no SAP GUI)
Pág. 5 Image Technology S.A.©2003
Modos de Conexão
• Conexão direta
• Pool de Conexões
– Mantém um lista de conexões e libera uma que não
estiver sendo utilizada
Pág. 6 Image Technology S.A.©2003
Criação da Connection Pool
import com.sap.mw.jco.*; // Todas nesse pacote
//...
Properties logonProperties = new Properties()
JCO.addClientPool(“Pool Name”, // Nome da Pool
5, // Número máximo de conexões
“199”, // Cliente
“user”, // User
“senha”, // Senha
“PT”, // Idioma
“172.16.1.1”, // Host (servidor)
“00”); // Número do Sistema
Pág. 7 Image Technology S.A.©2003
Exemplo de Uso
JCO.Client client = null;
try {
// Obtenção da Conexão
client = JCO.getClient(POOL_NAME);
// Uso da Conexão
} catch(Exception e) {
// Tratamento de Exceção
} finally {
// Liberação da Conexão
JCO.releaseClient(client);
}
Pág. 8 Image Technology S.A.©2003
Repositório
• O repositório contém a informação
(metadados) de todas as RFCs que podem ser
chamadas.
• Para obter uma referência ao repositório:IRepository repository =
JCO.createRepository("NOME_REPOSITÓRIO", // Nome
JCO.getClient(POOL_NAME)); //Conexão
Pág. 9 Image Technology S.A.©2003
Função (RFC)
IFunctionTemplate ft =
repository.getFunctionTemplate(“NOME_RFC”);
JCO.Function function = ft.getFunction();
• A RFC tem os 3 tipos de Parametros:
JCO.ParameterList input = function.getImportParameterList();
JCO.ParameterList output = function.getExportParameterList();
JCO.ParameterList tables = function.getTableParameterList();
Pág. 10 Image Technology S.A.©2003
Parâmetros
• Definindo parâmetros
input.setValue("Valor parâmetro", "NOME_PARAMETRO");
input.setValue(10, "NOME_PARAMETRO2");
input.setValue(new Date(), "NOME_PARAMETRO3");
// ...
• Obtendo parâmetrosString x = output.getString("NOME_PARAMETRO_SAIDA")
int y = output.getInt("NOME_PARAMETRO_SAIDA2")
Date z = output.getDate("NOME_PARAMETRO_SAIDA3")
Pág. 11 Image Technology S.A.©2003
Tipos de Dados
Tipo ABAP Descrição Tipo Java Código JCO
b Inteiro de 1 byte int JCO.TYPE_INT1
s Inteiro de 2 bytes int JCO.TYPE_INT2
I Inteiro de 4 bytes int JCO.TYPE_INT
C Caractere String JCO.TYPE_CHAR
N Caractere Numérico String JCO.TYPE_NUM
P Binary Coded Decimal BigDecimal JCO.TYPE_BCD
D Data Date JCO.TYPE_DATE
T Tempo Date JCO.TYPE_TIME
F Número Ponto Flutuante double JCO.TYPE_FLOAT
X Dados Binários byte[] JCO.TYPE_BYTE
g String (tamanho variável) String JCO.TYPE_STRING
y Dados Binários (tamanho variável) byte[] JCO.TYPE_XSTRING
Pág. 12 Image Technology S.A.©2003
Métodos de Acesso
Código JCO Método de Acesso
JCO.TYPE_INT1
int getInt()JCO.TYPE_INT2
JCO.TYPE_INT
JCO.TYPE_CHAR
String getString()JCO.TYPE_NUM
JCO.TYPE_STRING
JCO.TYPE_BCD BigDecimal getBigDecimal()
JCO.TYPE_DATE Date getDate()
JCO.TYPE_TIME Date getTime()
JCO.TYPE_FLOAT double getDouble()
JCO.TYPE_BYTEbyte[] getByteArray()
JCO.TYPE_XSTRING
Pág. 13 Image Technology S.A.©2003
Trabalhando com Structs
• Obtendo Struct:
JCO.Structure struct = input.getStructure("NOME_STRUCT")
• Setando parâmetrosstruct.setValue("Valor parâmetro", "NOME_PARAMETRO");
struct.setValue(10, "NOME_PARAMETRO2");
struct.setValue(new Date(), "NOME_PARAMETRO3");
• Obtendo parâmetrosString x = struct.getString("NOME_PARAMETRO_SAIDA")
int y = struct.getInt("NOME_PARAMETRO_SAIDA2")
Date z = struct.getDate("NOME_PARAMETRO_SAIDA3")
Pág. 14 Image Technology S.A.©2003
Trabalhando com Tabela
JCO.ParameterList tables = function.getTableParameterList();
JCO.Table tabela = tables.getTable(“NOME_TABELA”);
// LEITURA
for (int i = 0; i < tabela.getNumRows(); i++){
tabela.setRow(i);
System.out.println(tabela.getString(“NOME PARAMETRO”));
}
// ESCRITA
tabela.firstRow();
for (int i = 0; i < 10; i++){
tabela.appendRow();
tabela.setValue(i, “NOME PARAMETRO”));
}
Pág. 15 Image Technology S.A.©2003
Exemplo Completo:
Integração com Ágiles• Código no Eclipse
Pág. 16 Image Technology S.A.©2003
Integração com Interface
Gráfica em Formulários• Uso do ActiveX do SAP via Javascript
• Acesso a transações (telas) do SAP
• Uso da RFC RFC_CALL_TRANSACTION_USING do SAP
Pág. 17 Image Technology S.A.©2003
Login / Logoutvar fns; // Objeto ActiveX
var conn; // Conexão
var trans // Transação
function doSAPlogon() {
// Obtendo objetos
fns = new ActiveXObject("SAP.Functions");
trans = fns.Transactions;
conn = fns.connection;
// parametros de conexão
conn.System = 'PS1'
conn.ApplicationServer = '172.16.128.166';
conn.Client = '199';
conn.Language = 'PT';
/* conn.user = 'xxxxx'; // Se colocado login e senha ele não pede pro usuário
conn.password = 'xxxxx'; */
conn.tracelevel = 6;
conn.RFCWithDialog = 1;
conn.logon(0,0); // efetuar logon
}
function doSAPlogoff() { conn.logoff(); }
Pág. 18 Image Technology S.A.©2003
Chamando a teladoSAPlogon(); // LOGIN
callta = fns.add("RFC_CALL_TRANSACTION_USING"); // RFC que chama transações
callta.exports("TCODE") = "/PWS/ZYCI012"; // Nome da transação do SAP
callta.exports("MODE") = "E";
var bt_data = callta.tables("BT_DATA"); // Parâmetros
var i = 1;
bt_data.AppendRow;
bt_data(i,"PROGRAM") = "/PWS/SAPMZYCI012“ // Nome do programa
bt_data(i,"DYNPRO") = "0100"; // Número da Tela
bt_data(i,"DYNBEGIN") = "X";
i++;
bt_data.AppendRow;
bt_data(i,"PROGRAM") = ""; bt_data(i,"DYNPRO") = ""; bt_data(i,"DYNBEGIN") = "";
bt_data(i,"FNAM") = "/PWS/ZYCIE008-NRADTO"; // Preenche o campo
bt_data(i,"FVAL") = "000000000"; // Valor a ser preenchido
i++;
bt_data.AppendRow;
bt_data(i,"PROGRAM") = ""; bt_data(i,"DYNPRO") = ""; bt_data(i,"DYNBEGIN") = "";
bt_data(i,"FNAM") = "BDC_OKCODE"; // Manda um comando de confirmação
bt_data(i,"FVAL") = "=ENTE"; // ENTER
i++;
Pág. 19 Image Technology S.A.©2003
Continuação// Após o Enter mudou de tela
bt_data.AppendRow;
bt_data(i,"PROGRAM") = "/PWS/SAPMZYCI012"; // Novo programa (o mesmo)
bt_data(i,"DYNPRO") = "0200"; // Nova tela
bt_data(i,"DYNBEGIN") = "X";
i++;
bt_data.AppendRow;
bt_data(i,"PROGRAM") = ""; bt_data(i,"DYNPRO") = ""; bt_data(i,"DYNBEGIN") = "";
bt_data(i,"FNAM") = "BDC_CURSOR"; // Posiciona o cursor
bt_data(i,"FVAL") = "/PWS/ZYCIE008-NRADTO(01)"; // na primeira linha, no campo NRATO
i++;
bt_data.AppendRow;
bt_data(i,"PROGRAM") = ""; bt_data(i,"DYNPRO") = ""; bt_data(i,"DYNBEGIN") = "";
bt_data(i,"FNAM") = "BDC_OKCODE"; // Mande uma confirmação
bt_data(i,"FVAL") = "=CS"; // clique do mouse
retcd = callta.call; // chama transação
// Agora é aberta a tela do SAP na transação escolhida, e efetuados os comandos
// em backgroud.
doSAPlogoff(); // logoff