BlackTDN Search

terça-feira, 26 de novembro de 2013

BlackTDN :: Protheus WebService e PHP SoapClient

 

Para montar os exemplos de consumo de um WebService no Protheus usando PHP SoapClient resgatei um exemplo de código publicado em 2011 (

Protheus :: WebServices : Exemplo de uso da Estrutura TableView
Read more: http://www.blacktdn.com.br/2011/06/protheus-webservices-exemplo-de-uso-da.html#ixzz2llqVGZkihttp://www.blacktdn.com.br/2011/06/protheus-webservices-exemplo-de-uso-da.html#ixzz2llqVGZki

) fiz algumas modificações e atualizações e “Voilà”.

Montei alguns exemplos em PHP e, para testá-los, utilizei phpfiddle (para isso precisei de um IP Público). Se tiver o PHP instalado teste-o diretamente. Se tiver um IP público com acesso ao WS do Protehus e não tiver uma instalação do PHP utilize phpfiddle para executar os exemplos.

Ao código:

Um Exemplo de consumo usando o PHP

<html>
    <head>
        <title>BlackTDN :: UBTDNTBLVIEW.php</title>
    </head>
    <body>
        <?php
            $wsdl    = "http://BlackTDN:8088/ws02/UBTDNTVIEW.apw?WSDL";    
            $client  = new SoapClient($wsdl,array("cache_wsdl"=>WSDL_CACHE_NONE));
            $alias   = "SRA";
            $deleted = false;
            $recno   = false;
            $param   = array("ALIAS"=>$alias,"RDELETED"=>$deleted);
            $result  = $client->GETTRMAX($param);
            $tRMax   = $result->GETTRMAXRESULT/10;
             if ($tRMax>0){
                $step    = $tRMax%10;
                $results = array();
                for ($i = 1; $i <= $tRMax; $i+=$step) {
                    $e    = min($i+$step,$tRMax);
                    $param   = array("ALIAS"=>$alias,"RINIT"=>$i,"REND"=>$e,"RDELETED"=>$deleted,"RRECNO"=>$recno);
                    $result  = $client->GETTABLE($param);
                    array_push ($results,$result);
                }
                $result = $results[0];
                echo "<table border='1' align='left'>";
                echo     "<thead>";
                echo         "<tr align='left'>";
                echo             "<th>FLDNAME</th>";
                echo             "<th>FLDTYPE</th>";
                echo             "<th>FLDSIZE</th>";
                echo             "<th>FLDDEC</th>";
                echo             "<th>FLDTITLE</th>";
                echo             "<th>FLDDESCRIPTION</th>";
                echo             "<th>FLDMANDATORY</th>";
                echo         "</tr>";
                echo     "</thead>";      
                echo "<tbody>";
                if (is_array($result->GETTABLERESULT->TABLESTRUCT->UFIELDSTRUCT)){
                    foreach ($result->GETTABLERESULT->TABLESTRUCT->UFIELDSTRUCT as $item) {
                         echo "<tr>";
                            echo "<td><pre>".print_r($item->FLDNAME,true)."</pre></td>";
                            echo "<td><pre>".print_r($item->FLDTYPE,true)."</pre></td>";
                            echo "<td><pre>".print_r($item->FLDSIZE,true)."</pre></td>";
                            echo "<td><pre>".print_r($item->FLDDEC,true)."</pre></td>";
                            echo "<td><pre>".print_r($item->FLDTITLE,true)."</pre></td>";
                            echo "<td><pre>".print_r($item->FLDDESCRIPTION,true)."</pre></td>";
                            echo "<td><pre>".print_r($item->FLDMANDATORY,true)."</pre></td>";
                        echo "</tr>";
                    }
                } else {
                    echo "<tr>";
                    foreach ($result->GETTABLERESULT->TABLESTRUCT as $item) {
                            echo "<td><pre>".print_r($item->FLDNAME,true)."</pre></td>";
                            echo "<td><pre>".print_r($item->FLDTYPE,true)."</pre></td>";
                            echo "<td><pre>".print_r($item->FLDSIZE,true)."</pre></td>";
                            echo "<td><pre>".print_r($item->FLDDEC,true)."</pre></td>";
                            echo "<td><pre>".print_r($item->FLDTITLE,true)."</pre></td>";
                            echo "<td><pre>".print_r($item->FLDDESCRIPTION,true)."</pre></td>";
                            echo "<td><pre>".print_r($item->FLDMANDATORY,true)."</pre></td>";
                    }
                    echo "</tr>";
                }    
                echo "<tbody>";
                echo "</table>";
                echo "<br />";
                echo "<table border='1' align='left'>";
                echo     "<thead>";
                echo         "<tr align='left'>";
                if (is_array($result->GETTABLERESULT->TABLESTRUCT->UFIELDSTRUCT)){
                    foreach ($result->GETTABLERESULT->TABLESTRUCT->UFIELDSTRUCT as $item) {
                            echo "<th><pre>".print_r($item->FLDNAME,true)."</pre></th>";
                    }
                } else {
                    foreach ($result->GETTABLERESULT->TABLESTRUCT as $item) {
                            echo "<th><pre>".print_r($item->FLDNAME,true)."</pre></th>";
                    }
                }                    
                echo         "</tr>";
                echo     "</thead>";      
                echo "<tbody>";
                foreach ($results as $result){
                    if (is_array($result->GETTABLERESULT->TABLEDATA->FIELDVIEW)){
                        foreach ($result->GETTABLERESULT->TABLEDATA->FIELDVIEW as $itens) {
                            echo "<tr align='left'>";
                            if (is_array($itens->FLDTAG->STRING)){
                                foreach ($itens->FLDTAG->STRING as $item) {
                                    echo "<td><pre>".print_r($item,true)."</pre></td>";
                                }
                            } else {
                                foreach ($itens->FLDTAG as $item) {
                                    echo "<td><pre>".print_r($item,true)."</pre></td>";
                                }
                            }    
                            echo "</tr>";
                        }
                    } else{
                        echo "<tr align='left'>";
                            if (is_array($result->GETTABLERESULT->TABLEDATA->FIELDVIEW->FLDTAG->STRING)){
                                foreach ($result->GETTABLERESULT->TABLEDATA->FIELDVIEW->FLDTAG->STRING as $item) {
                                    echo "<td><pre>".print_r($item,true)."</pre></td>";
                                }
                            } else {
                                $item = $result->GETTABLERESULT->TABLEDATA->FIELDVIEW->FLDTAG->STRING;
                                echo "<td><pre>".print_r($item,true)."</pre></td>";
                            }
                        echo "<tr>";
                    }
                }    
                echo "</tbody>";            
                echo "</table>";
            }    
            die();
        ?>
    </body>
</html>

O código do WS em advpl bem como os demais exemplos em PHP poderão ser obtidos aqui.



Obs.: Existe dependencia do programa NDJLIB006.prg que pode ser obtido ao clicar aqui.


[]s
иαldσ dj

3 comentários:

  1. ola. naldo. vc tem condicoes de exemplos como consumir o webservice da vtex.com.br em php?

    ResponderExcluir
  2. Boa Tarde Naldo.
    Muito bom o seu site, parabéns !.
    Gostaria de saber se pode me ajudar com uma questão. Preciso consumir um webservice NAO Protheus e enviar ao mesmo um arquivo XML e um arquivo PDF.
    Estou usando o comando HTTPPOST porém, pelo retorno obtido, o arquivo em si está indo apenas como parametro da URL e nao sofrendo o upload propriamente dito.
    Vc teria exemplos de uso dessa funcao ?
    Te agradeço muito.
    Meu e-mail é rafael.nogueira@mrntecnologia.com.br
    Grande abraço

    ResponderExcluir
  3. Existe um exemplo simples de montar um WEBSERVICE no protheus de apenas enviar e receber um txt ?

    ResponderExcluir