Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Section
Column

Si vous voulez utiliser le web service pour accéder à vos données Logistics, vous devez impérativement passer par l'installation du web service.

Le web service est constitué de plusieurs méthodes que nous allons décrire ci-dessous. Ces méthodes se trouvent dans un fichier appelé ws_proc109 contenu dans ws_proc109.zip. Ces fichiers sont à placer dans le répertoire Webservice (à créer si nécessaire) se trouvant dans le parent du dossier client (ex : c:\winbooks\data\logistics\Webservice).

Warning

Veillez toujours à avoir la dernière version du fichier ws_proc109.fxp installée (surtout en cas d'erreur avec le web service). La dernière version ne correspond pas au numéro 109 contenu dans le nom du fichier mais à la date du fichier. Pour s'assurer d'avoir la dernière version, téléchargez ws_proc109.zip, ou (à partir de la version 5.5 de Logistics) cliquez sur le bouton Télécharger ou mettre à jour le WsProc qui est accessible via le menu Dossier > Paramétrage > Paramètres généraux, onglet Options, dans l'option E-Commerce.

Ces méthodes permettent par exemple de créer, modifier un utilisateur ou encore d'avoir le prix actuel d'un article donné pour un stock bien précis, etc...

La première chose à faire est d'initialiser le web service que vous voulez utiliser en appelant sa méthode WSLOGIN. Cette méthode vous renverra différentes variables sous forme d'XML, ces variables vous serviront pour l'appel de vos méthodes (en vert ci-dessous). Tous les appels de méthodes se font par le biais de la méthode REQUEST dont voici les paramètres :

wsrequest (Nom de la procédure, LsPath, LsKey, LsLang, XmlHeader, XmlFile,XmlFooter)

 

Panel
titleGestion des timeouts du web service version DBF
La gestion des timeouts dans le web service (version DBF) permet d'éviter des erreurs sur des serveurs lents ou engorgés de demande.
Voici quelques explications afin de pouvoir adapter votre site web en conséquence.

En cas de timeout d'une fonction wsrequest, un XML de réponse de ce type est renvoyé par le web service :

 

Code Block
languagehtml/xml
titleXML timeout
<timeout>
    <msg>Timeout after 40 seconds</msg>
    <transacid>8c7cea366e9a429ebed5363835b87c32</transacid>
    <retrycount>0</retrycount>
</timeout>
La balise <msg> correspond à un message explicatif. La balise <transacid> contient l'ID de la transaction. Et la balise <retrycount> contient la valeur du compteur d’essais.

Le timeout est définit à 40 secondes pour un wscheckorder ou wsputorder et à 24 secondes pour les autres fonctions du wsrequest.

 

A partir de ce point, le site web peut interroger à nouveau le web service grâce à la nouvelle fonction TRANSACSTATUS du wsrequest. 

Cette fonction utilise la même structure que les autres fonctions wsrequest. Elle s'attend juste à retrouver un XML dans le XmlHeader contenant les balises <transacid> et <retrycount>. 

 

Code Block
languagehtml/xml
titleXML transacinfo
<transacinfo>
    <transacid>8c7cea366e9a429ebed5363835b87c32</transacid>
    <retrycount>0</retrycount>
</transacinfo>
Cette fonction va rechercher si un problème est survenu dans le processus ou si une réponse a été générée entre temps.

Au bout de 20 secondes, si le processus n'a pas retourné de résultat alors le même XML timeout que précédemment est retourné avec la valeur du retrycount incrémentée.

Dans le cas où une réponse a été générée, ce résultat est retourné.
Column
width250px
Panel

Sur cette page:

Table of Contents
maxLevel3

WsLogin

Cette fonction WsLogin renvoie trois paramètres (Path, Key, language). Vous devez ensuite utiliser ces 3 paramètres pour faire appel aux autres fonctions du webservice.

Exemple en ASP
Code Block
languageactionscript3
private function ConnectEdb
LsUSER = "WSUSER"  // Utilisateur FlexLogistics
LsPSWD = "987654"  // Mot de passé de l'utilisateur FlexLogistics
LsCOMPANY = "DEMO" // Dossier FlexNom du dossier Logistics
LsVERSION = "109"  // Version du Webservicewebservice
LsPRGROOT = "\\server\winbooks\data\logistics\" // Chemin où se trouve le plugin (utilisé par le web service). Attention, comme le web service peut se trouver sur un autre serveur que celui des pages du site, il faut impérativement lui envoyer un chemin UNC. Le chemin dans le fichier Logistics.ini doit également être un chemin UNC.

LsCTRL = "<?xml version = '1.0' encoding='Windows-1252' standalone='yes'?>" & _
         "<VFPData><login>" & _
         "<userid>" & LsUSER & "</userid>" & _
         "<pswd>" & LsPSWD & "</pswd>" & _
         "<compid>" & LsCOMPANY & "</compid>" & _
         "<version>" & LsVERSION & "</version>" & _
         "<PrgRoot>" & LsPRGROOT & "</PrgRoot></login></VFPData>"

set soapclient = CreateObject("MSSOAP.SoapClient30")
soapclient.ClientProperty("ServerHTTPRequest") = True
soapclient.mssoapinit(WSPath)

Lsresult = soapclient.login (LsCTRL)
set oLogin = new clsLogin
oLogin.XmlLoginResponse = LsResult

session("edb_Path") = oLogin.DbPath
session("edb_Key") = oLogin.DbKey
session("edb_Lang") = oLogin.Language
Exemple en

...

C#
Code Block
languagecsharp
String lsValue = "";
String lsName = "";
String LsCTRL = "<?xml version = '1.0' encoding='Windows-1252' standalone='yes'?>" +
                "<VFPData><login>" +
                "<userid>" + psUSER + "</userid>" +
                "<pswd>" + psPSWD + "</pswd>" +
                "<compid>" + psCOMPANY + "</compid>" +
                "<version>" + psVERSION + "</version>" +
                "<PrgRoot>" + psPRGROOT + "</PrgRoot></login></VFPData>";
WsFlex ws = new WsFlex("");
psResultLogin = ws.LOGIN(LsCTRL);

Cette fonction renvoie trois paramètres (Path, Key, language). Vous devez ensuite utiliser ces paramètres pour faire appel aux fonctions. WsFlex est En C#, WsFlex doit être déclaré dans les WebRéférences de votre projet qui pointe vers le fichier WSDL de votre web servicewebservice.

Exemple en PHP
Code Block
languagephp
<?php

// 1. Initialisation

$client = new SoapClient("http://217.112.181.34/wsflexDotNet/ServiceFlexDotNet.asmx?wsdl", array('soap_version' => SOAP_1_2));
$LsUSER = "WSUSER";  // Utilisateur Logistics
$LsPSWD = "987654";
$LsCOMPANY  = "DEMO";
$LsVERSION = "109";// Mot de passé de l'utilisateur Logistics
$LsCOMPANY = "DEMO"; // Nom du dossier Logistics
$LsVERSION = "109";  // Version du webservice
$LsPRGROOT = "\\server\winbooks\data\logistics\\";
$LsCTRL = "<?xml version = '1.0' encoding='Windows-1252' standalone='yes'?><VFPData><login><userid> ?>
<VFPData>
  <login>
    <userid>".$LsUSER."</userid><pswd>userid>
    <pswd>".$LsPSWD."</pswd><compid>pswd>
    <compid>".$LsCOMPANY."</compid><version>compid>
    <version>".$LsVERSION. "</version><PrgRoot>version>
    <PrgRoot>".$LsPRGROOT."</PrgRoot></login><PrgRoot>
  </login>
</VFPData>";

try
{
    $params =  array("PcCtrl" =>$LsCTRL> $LsCTRL);
    $Res = $client->__call('Login', array("parameter" =>$params))> $params));
    
    $language = "F";
    $dbpath = $LsPRGROOT."".$LsCOMPANY."\\";
    $dbkey = $Res->LOGINResult;

    //echo 'RESPONSE: ' .$client->__getLastResponse()."<br>";
    //echo 'REQUEST : ' . $client->__getLastRequest()."<br>";
} 
catch (SoapFault $fault) 
{
            print_r($fault);
            throw new Exception($fault->getMessage());
}
var_dump($Res);

// 2. Request

$xmlFile = '<?xml version="1.0" encoding="Windows-1252" standalone="yes" ?>
<VFPData>
  <xmlreturn>
    <custid>WS00000003</custid>
  </xmlreturn>
</VFPData>';

try
{
    $param = array("PcFunc" => "WsGetCustInfo", "PcPath" => $dbpath, "PcKey" => $dbkey, "PcLang" => $language, "Pcxmlheader" => "a", "pcxmlfile" => $xmlFile, "pcxmlfooter" => "a");
    $cust = $client->__call("WsRequest", array("parameter" => $param));
    var_dump($cust);
}
catch (SoapFault $fault)
{
    print_r($fault);
    throw new Exception($fault->getMessage());
}

?>

Utilisation du web service

...