SAP MII Blog - Agora na versão Mobile

MII´rs estou disponibilizando o blog agora na versão mobile, veja a imagem abaixo:


Para abrir o Blog em seu aparelho segue QR-Code.

Abraços e até a próxima!

SAP MII - Transaction Hello World!!!

MII´rs esses dias estava navegando em um link que ensinava a escrever Hello World em diversas linguagens, veja abaixo:

http://helloworldsite.he.funpic.de/

Fiquei muito triste em não ver o tão famoso "Hello World!" escrito em SAP MII! Existem concursos na WEB para ver quem escreve o tão famoso Hello World! de maneira mais complicada e pensando nisto resolvi criar uma transaction complicando um pouco, segue imagem e fonte para download abaixo:


Para abaixar o arquivo segue link: http://www.danilosantos.eti.br/TrxHelloWorld.zip

Fica a dica para descontrair e o aprendizado de Transaction para aprimorar os conhecimentos técnicos, fiquem a vontade para contribuirem, caso alguém possua alguma versão mais complicada por favor enviem que eu irei postar.

Abraços e até a próxima!!!!

Trabalhando com a variável do tipo lista

No post de hoje vou mostrar como trabalhar com uma variável do tipo "list". Este e outros tipos de variáveis foram adicionados na versão 12.1 do SAP MII.

Primeiro criamos uma variável local chamada "Modulo" do tipo "list":


Em seguida vamos popular a variável com os seguintes elementos:

  • SAP CO
  • SAP FI
  • SAP MM
  • SAP PM
  • SAP PP
Sendo todos os elementos desta lista do tipo "string". É possível criar elementos de outros tipos, tais como, dateTime, float, integer, xml, entre outros. Também é permitido inserir elementos de tipos diferentes em uma mesma variável lista:

Portanto a nossa variável Modulo está com os seguintes elementos:


[0:SAP CO] [1:SAP MM] [2:SAP PM] [3:SAP PP]

Assim como a inclusão de novos tipos de variável, na versão SAP MII 12.1 foram agregadas mais funções ao Link Editor para trabalhar com esses tipos. Abaixo vamos listar as funções que tratam o tipo "list", o qual estamos usando:

append [ append(list, value1,...) ]

Acrescenta novos elementos ao fim da lista.
Ex.:
Comando: append(Local.Modulo,"SAP MII", "SAP BO")

Resultado: [0:SAP CO] [1:SAP MM] [2:SAP PM] [3:SAP PP] [4:SAP BO]

emptylist [ emptylist ]

Remove todos os elementos da lista.

find [ find(list, value) ]

Verifica se existe o elemento na lista. Retorna a posição em que o elemento se encontra.
Ex.:
Comando: find(Local.Modulo,"SAP PM")

Resultado: 2

first [ first(list) ]

Retorna o primeiro elemento da lista.
Ex.:
Comando: first(Local.Modulo)

Resultado: SAP CO

insert [ insert(list,location,value) ]

Insere um elemento na lista e na posição informada deslocando os demais posteriores.
Ex.:
Comando: insert(Local.Modulo, 3, "SAP QM")

Resultado: [0:SAP CO] [1:SAP MM] [2:SAP PM] [3:SAP QM] [4:SAP PP]

last [ last(list) ]

Retorna o último elemento da lista.
Ex.:
Comando: last(Local.Modulo)

Resultado: SAP PP

list [ list(value1, ...) ]

Cria uma lista com os elementos informados.

liststomap [ liststomap(namelist, valuelist) ]

Transforma uma lista em uma variável do tipo "map".

remove [ remove(collection, value) ]

Remove o elemento na posição informada.
Ex.:
Comando: remove(Local.Modulo, 1)

Resultado: [0:SAP CO] [1:SAP MM] [1:SAP PM] [2:SAP PP]

set [ set(list, index, value) ]

Altera o elemento da posição informada pelo novo valor.
Ex.:
Comando: set(Local.Modulo, 0, "SAP MII")

Resultado: [0:SAP MII] [1:SAP MM] [2:SAP PM] [3:SAP PP]

size [ size(collection) ]

Retorna o número de elementos da lista.
Ex.:
Comando: size(Local.Modulo)

Resultado: 4

sort [ sort(list) ]

Ordena (ASC) os elementos da lista.


Com estas funções você poderá trabalhar com suas variáveis do tipo "list".



DICA

É possível saber o valor de um determinado elemento da lista usando o seguinte comando:


List{index}


Ou seja, se quisermos saber o valor do segundo elemento da nossa variável do tipo lista "Modulo" bastaria informar o seguinte comando:



Local.Modulo{1}


Usamos o número 1 para buscar o segundo valor porque a lista sempre é iniciada pelo índice 0.

Origem da variável lista: http://download.oracle.com/javase/1.4.2/docs/api/java/util/List.html

Diferenças entre "list" e "map" é que na variável "list" é possivel ter registros duplicados enquanto na variável "map" não.

Using SAP MII as Data Source and Environment for Business Objects Xcelsius

Using SAP MII as Data Source and Environment for Business Objects Xcelsius

Lista de cursos disponíveis sobre SAP MII

Segue lista de cursos disponíveis na SAP sobre a ferramenta SAP MII.

Online Knowledge Product SAP xApp Manufacturing Integration & Intelligence 11.5
xMII Lab Workshop
xMII Fundamentals
MII - Manuf. Integ. and Intelligence Fundamentals
Online Knowledge Product SAP xApp Manufacturing Intelligence & Integration (xMII) 12.0
OKP SAP Manufacturing Integration and Intelligence (MII) 12.2

Fica a dica de cursos básicos sobre a ferramenta. O único treinamento ministrado no Brasil atualmente é o SCM380.

Já fui instrutor do treinamento SCM380 e ministro Workshop sobre a ferramenta SAP MII, caso alguém tiver interesse em alguma das opções entrar em contato direto comigo através do Blog ou E-mail msn@danilosantos.eti.br

Configurando o Dreamweaver para editar arquivos IRPT

O Post de hoje é simples porém de grande utilidade para desenvolvedores SAP MII. Como configurar o Dreamweaver para editar arquivos do tipo IRPT?

O Help da ferramenta nas versões 12.0 e 12.1 não ensinam como fazer esta configuração dentro do Dreamweaver, porém o Help da antiga versão 11.5 ensina como fazer passo a passo.

http://help.sap.com/saphelp_xmii115/helpdata/en/popups/DreamweaverPopup.htm

Fica a dica e até a próxima pessoal.

SAP Forum 2011 - TEMPO DE FAZER MELHOR - Inscrições abertas

Hoje irei comentar sobre um dos eventos que acontece todos os anos aqui em São Paulo o famoso SAP Forum - o maior evento de negócios e tecnologia da América Latina que irá acontecer este ano nos dias 22-24 de Março.

Apesar de ser ainda cedo para pensar, vale a pena já ir preparando a sua agenda e participar das palestras que abordam diversos assuntos, a agenda pode ser conferida atráves do link abaixo:

http://www.sap.com/brazil/about/eventos/sapforum2011/agenda_at_glance.epx#premium

Como faço para participar?

Segue 2 opções:


1- Fazendo a inscrição no site, segue valores e link:


http://www.sap.com.br/sapforum2011/inscricoes/registro_dados.php



2- Falar com alguém da área de eventos da empresa onde você trabalha e verificar se não é possível colocar seu nome na lista para entrar sem pagar absolutamente nada. Geralmente a SAP libera um número limitado de participantes para alguns clientes e parceiros.

Fica a dica do evento e nos ultimos 3 anos (ou mais) sempre existe uma ou duas empresas apresentando soluções e cases desenvolvidos utilizando a ferramenta SAP MII, vale a pena participar, esclarecer dúvidas, etc.....

Site do Evento:
http://www.sap.com/brazil/about/eventos/sapforum2011/index.epx

Local:
Centro de Convenções WTC
Avenida das Nações Unidas, 12.559
CEP 04795-901 – Brooklin Novo – São Paulo, SP
(11) 3055-8000 | 3055-8001 (fax)

Abraços e até a próxima.

Exemplo de ComboBox utilizando Ajax e XML SAP MII

Hoje estarei demonstrando como criar um comboBox a partir de um XML do SAP MII utilizando Ajax, para quem ainda não conhece o que é Ajax recomendo a seguinte leitura antes de continuar:

http://www.w3schools.com/Ajax/Default.Asp

Iniciaremos com a criação do objeto para carregar o XML para dentro da nossa aplicação, eu particularmente recomendo deixar essa função dentro de um arquivo externo, isto para não ficar criando em todas as páginas, por exemplo:  

Default.js

function createXMLHttpRequest(){
    try{
        return new XMLHttpRequest();
    }catch(ee){
        try{
            return new ActiveXObject("Msxml2.XMLHTTP");
        }catch(e){
            try{
                return new ActiveXObject("Microsoft.XMLHTTP");
            }catch(E){
                alert(Mensagem[1]);
            }
        }
    }
    return null;
}

O próximo passo é criar um arquivo externo e adicionar o seguinte código, no meu caso o nome do arquivo é:

LoadComboOnPage.js


/*************************************************************************
 @ Autor: Danilo Santos
 @ Objetivo: Carregar combo a partir de um arquivo XML MII
**************************************************************************/
// Exemplo de chamada
// readData(<< path arquivo xml >>,
//           << nome do objeto em tela >>,
//           << se quiser carregar o combo com um valor já determinado >>,
//           << exibir linha -- select -- {true or false}>>);               
// Exemplo: readData("XMII/Illuminator?QueryTemplate=ABCD%2FTeste%2FTesteComboQuery&Content-Type=text%2Fxml",document.frmnome.selectTeste, "20", true);               
// *****************************************************************************************************************************

var XMLObj;    
var SourceUrlXML; 
var ComboxOBJ;    
var DefaultValue;
var Queue = new Array();
var QueueIndex = 0;
var FirstLine  = true;
   
function initObj(){
    XMLObj = createXMLHttpRequest();
    if(XMLObj == null){
        alert(Mensagem[1]);
    }else{
        XMLObj.onreadystatechange = function ()
                           {
                            switch(XMLObj.readyState)
{
                                case 1:
                                    loading();
                                break;
                                case 4:
                                    onReadData();
                                break;
                                }
                            };
    }
}
   
function readData(urlXML,objComboBox,valueDefault,firstLine){
    SourceUrlXML = urlServer+urlXML;
    Queue[Queue.length] = new Array(SourceUrlXML, objComboBox, valueDefault, firstLine);
    if (XMLObj.readyState == 0){
        goAhead(0);
    }
}
   
function goAhead(Idx){
    ComboxOBJ = eval('document.'+eval(Queue[Idx][1]).form.name+'.'+eval(Queue[Idx][1]).name);
    DefaultValue = Queue[Idx][2];
    FirstLine = Queue[Idx][3];   
    try{
        XMLObj.open("GET",Queue[Idx][0],true);    
        XMLObj.send(null);
    }finally{
        return false;
    }
}
   
function loading(){
    ComboxOBJ.options.length = 0;
    ComboxOBJ.options[0] = new Option("","");
}
   
function onReadData(){
    ComboxOBJ.options.length = 0;
    if(FirstLine == true){   
        ComboxOBJ.options[0] = new Option("-- Select --","");
    }
   
    var XMLDoc = XMLObj.responseXML;
    var Row = XMLDoc.getElementsByTagName('Row');
       
    for(i=0; i
        var Data = new Array();
        for(j=0; j
            Data[Data.length] = Row[i].childNodes[j].firstChild.nodeValue;
        }
        ComboxOBJ.options[ComboxOBJ.options.length] = new Option(Data[1],Data[0]);
    }

    if(DefaultValue == undefined){
        DefaultValue = "";
    }   
   
    ComboxOBJ.value  = DefaultValue;
       
    if (Queue.length > QueueIndex+1){
        goAhead(++QueueIndex);
    }else{
        Queue.length = 0;
        QueueIndex   = 0;
        appLoadDiv(false);
    }
}
initObj();

E para usar o combo dentro da sua página resta chamar a seguinte linha de código:

< script language="javascript" src="../Js/Default.js" type="text/javascript">
< script language="javascript" src="../Js/LoadComboOnPage.js" type="text/javascript">

function startPage(){
      readData("XMII/Illuminator?QueryTemplate=ABCD%2FTeste%2FComboTesteQuery&Content-Type=text%2Fxml",document.frmnome.selectTeste, "20", true);                       
}



< body onload="startPage();">


Antes de utilizar o script é necessário criar o Query Template que retorne a seguinte estrutura:

< ?xml version="1.0" encoding="UTF-8"?>
< Rowsets DateCreated="2011-01-27T13:43:21" EndDate="2011-01-27T20:41:20" StartDate="2011-01-27T20:41:20" Version="12.0.4 Build(120)">
    < Rowset>
        < Columns>
            < Column Description="" MaxRange="1" MinRange="0" Name="codigo" SQLDataType="1" SourceColumn="codigo"/>
            < Column Description="" MaxRange="1" MinRange="0" Name="nome" SQLDataType="1" SourceColumn="nome"/>
        < /Columns>
        < Row>
            < codigo>10
            < nome>Monza
        < /Row>
        < Row>
            < codigo>20
            < nome>Verona
        < /Row>
    < /Rowset>
< /Rowsets>



Obs.: É importante o XML do SAP MII retornar apenas 2 nós dentro de Row, ou seja:

SELECT código, nome FROM carros;  

Não é necessário ter o nome código ou nome, tendo 2 nós o script irá funcionar.



Eu utilizo o script em meus projetos e recomendo pois desta maneira diminuimos a quantidade de applets do tipo IBrowser em uma página web, este script funciona em Firefox e Internet Explorer, porém se funcionar em mais algum favor comentar.

Até a próxima.