Page 1 sur 1

PHP et lignes de commande pour ouverture SAGE

MessagePosté: Mer 11 Déc 2013 13:46
de cirylBD28
Bonjour à tous,

J'utilise la version SQL de SAGE Ligne 100 (version 16.05) et j'ai une appli en php qui va me faire un select dans la BDD.
Par un script, je fais une recherche sur les documents de vente et celui-ci m'affiche une liste.
Je voudrais avoir un bouton en face de chaque ligne correspondant à un doc de vente. Et ce bouton m'ouvrirait directement la commande correspondante dans Sage.
Seulement entre les caractères à échapper en PHP + ceux à échapper via SAGE, je m'en sors plus. :evil:
Quelqu'un a t-il déjà ouvert une commande ou un client via un script PHP et pourrait me donner qques pistes ?
Ci-après ma requête d'affichage :
Code: Tout sélectionner
$display = '<table id = "recherche">
<tr><th>N° Commande</th><th>Reference</th><th>Nom Client</th><th>Adresse 1</th><th>Adresse 2</th><th>Code Postal</th><th>Ville</th><th>Téléphone</th><th>Date Livraison</th></tr>' ;


while ($tab_req = odbc_fetch_array($req_req))
      {
      $tab_req['Ad1']=utf8_encode($tab_req['Ad1']);
      $display .= '<tr><td>'.$tab_req['DO_Piece'].'</td><td>'.$tab_req['DO_Ref'].'</td><td>'.$tab_req['Nom'].'</td><td>'.$tab_req['Ad1'].'</td><td>'.$tab_req['Ad2'].'</td><td>'.$tab_req['Code_Postal'].'</td>
      <td>'.$tab_req['Ville'].'</td><td>'.$tab_req['Tel_Livraison'].'</td><td>'.$tab_req['DO_DateLivr'].'</td><td class = "bouton">'exec(C:\>"C:\Program Files (x86)\GecoMaes\GecoMaes.exe" "S:\BD_GESTION.gcm" -cmd=Document.Show(Type=BonCommandeClient, Piece=\''.$tab_req['DO_Piece'].'\'))'<img src = "img/valider.png"></td></tr>' ;
      }
echo $display ;



Le script ne m'affiche plus le résultat de recherche et me donne l'erreur suivante :
[12:45:28,366] POST http://10.100.100.6/outils/fetes/ajax/recherche.php [HTTP/1.0 500 Internal Server Error 3ms]

Re: PHP et lignes de commande pour ouverture SAGE

MessagePosté: Mer 11 Déc 2013 23:29
de asr31
Bonjour,

J'ai tendance à préparer ma commande destinée au shell par petits bouts :
* l'exécutable (en prenant en compte l'environnement coté client (X86 ou x64 ou installation genre H:\MesProgs\MonSage\Maestria.exe))
* l'emplacement de la base
* la gestion des users password (si pas de password, ne pas le rajouter, peut-être, dans la commande)
* la construction des arguments de la commande
* assemblage de la commande (-cmd)
* assemblage de l'ensemble de la ligne à passer au shell
(ouais, c'est un peu long, mais on sait ou on met les pieds).

Une fois la chaine construite, rien n’empêche de l'intercepter et de la coller dans un batch quelconque ou de l'exécuter pour voir comment ça réagit.

Cordialement,

Re: PHP et lignes de commande pour ouverture SAGE

MessagePosté: Jeu 12 Déc 2013 10:24
de cirylBD28
Merci asr31.

J'ai donc petit à petit construit et testé la commande suivante dans le Shell :
Code: Tout sélectionner
start "GecoMaes.exe" "\\chemin" -u='utilisateur' -p='password' -cmd=Document.Show(Type=BonCommandeClient, Piece='M1202325')

Ca m'envoie bien vers la Gescom, mais rien ne se passe, aucune fenêtre ne s'ouvre.

J'ai essayé avec Document.show, SaisiePiece.Show et DocumentVente.List mais rien de mieux...

Merci de votre coup de main

Re: PHP et lignes de commande pour ouverture SAGE

MessagePosté: Jeu 12 Déc 2013 10:42
de cirylBD28
Après qques modifs, ma commande s'execute bien dans le Shell, mais ne fonctionne pas en php. Voici le bout de code :
Code: Tout sélectionner
<td class = "bouton"><?exec("GecoMaes.exe "S:\BD_GESTION.gcm" -cmd=Document.Show(Piece='.$tab_req['DO_Piece'].')"); ?><img src = "img/valider.png"></td>

Re: PHP et lignes de commande pour ouverture SAGE

MessagePosté: Jeu 12 Déc 2013 17:18
de cirylBD28
Re,

Alors après multiples tentaives, ça avance...
J'ai mon fichier PHP d'origine :
Code: Tout sélectionner
while ($tab_req = odbc_fetch_array($req_req))
      {
      $tab_req['Ad1']=utf8_encode($tab_req['Ad1']);

      $display .= '<tr><td>'.$tab_req['DO_Piece'].'</td><td>'.$tab_req['DO_Ref'].'</td><td>'.$tab_req['Nom'].'</td><td>'.$tab_req['Ad1'].'</td><td>'.$tab_req['Ad2'].'</td><td>'.$tab_req['Code_Postal'].'</td>
      <td>'.$tab_req['Ville'].'</td><td>'.$tab_req['Tel_Livraison'].'</td><td>'.$tab_req['DO_DateLivr'].'</td><td id=cde class = "bouton" onclick = "acces_cde(\''.$tab_req['DO_Piece'].'\') ;"><img src="img/valider.png"></a></td></tr>' ;
      }
echo $display ;


le code JS qui récupère la variable :
Code: Tout sélectionner
function acces_cde(cde)
{
   var xhr;

   if (cde != '')
      {   
            if (window.XMLHttpRequest)          //  Objet de la fenêtre courant
            {
            xhr = new XMLHttpRequest();     //  Firefox, Safari, ...
            }
         else if (window.ActiveXObject)      //  Version Active
               {
             xhr = new ActiveXObject( "Microsoft.XMLHTTP" );   // Internet Explorer
               }
   
      xhr.open( "POST" , "ajax/fiche.php" , false );
      xhr.setRequestHeader( "Content-Type" , "application/x-www-form-urlencoded" );
      xhr.send("cde=" + cde);

      document.getElementById( 'resultatreq' ).innerHTML = xhr.responseText;
      }
}

J'ai testé avec un "alert" et ma variable est bien récupérée.

Qui nous envoie ensuite vers la page fiche.php :
Code: Tout sélectionner
<?php
$prog=("C:\Program Files (x86)\GecoMaes\GecoMaes.exe" "\\srv-sql\sage\BD_GESTION.gcm" -cmd=Document.Show(Piece='.$cde.');
shell_exec($prog);
?>


Mais toujours rien qui se passe.

Je sens que je suis pas loin, mais je vais pas tarder à m'arracher les cheveux. Si qqun pouvait me dire d'où vient l'erreur ?

Merci

Re: PHP et lignes de commande pour ouverture SAGE

MessagePosté: Jeu 12 Déc 2013 20:16
de asr31
Bonjour,

Je suis chauve ....

Cordialement,

Re: PHP et lignes de commande pour ouverture SAGE

MessagePosté: Ven 13 Déc 2013 08:54
de cirylBD28
mais encore...

Re: PHP et lignes de commande pour ouverture SAGE

MessagePosté: Ven 13 Déc 2013 16:08
de asr31
Bonjour,

Chauve car comme toi, a force de m'arracher les cheveux ....

Quel est le contexte de ton appli PHP ?
C'est un intranet ?
Ton code PHP va t'il s'appliquer coté serveur uniquement ? (et à quoi ça sert dans ce cas).

Cordialement,

Re: PHP et lignes de commande pour ouverture SAGE

MessagePosté: Ven 13 Déc 2013 16:15
de cirylBD28
merci asr de t'occuper de mon cas.

Alors pour t'expliquer brièvement :
C'est un outil en PHP, qui va récupérer sur une BDD SQL server, les clients ayant passé une commande avec des conditions définies.
J'ai un onglet qui me récapitule les commandes du jour, et un champ de recherche par nom ou tel pour retrouver un client.
Une fois sur la liste des résultats de recherche, qui m'affiche le n° de commande, son nom, son adresse... et au bout de chaque ligne, j'ai besoin d'un bouton qui m'ouvrirait sa commande dans Sage.

Le serveur wamp et tous les fichiers php sont sur un serveur qui n'a pas Sage d'installé. J'ai donc besoin qu'il m'ouvre Sage côté client.

J'espère m'être fait comprendre...

Ca rend dingue parce que qd je colle mon code dans un batch, ça marche !!

Re: PHP et lignes de commande pour ouverture SAGE

MessagePosté: Ven 13 Déc 2013 16:31
de asr31
Bonjour,

Je ne connais pas bien PHP, mais si ça fonctionne grosso-modo comme un serveur ASP, tu fabrique ta page HTML par PHP.
Donc, dans le HTML donné au client, il faut :
1- avoir la commande que tu construit pour lancer la gescom,
2- un script qui s'exécute coté client (JS, VBS), donc, script dans la page HTML coté client.

Cordialement,

Re: PHP et lignes de commande pour ouverture SAGE

MessagePosté: Ven 13 Déc 2013 17:09
de cirylBD28
Merci à toi,

Seulement, je ne suis pas du tout un pro du vbs... Voire je connais pas du tout en fait...
une piste peut-etre ?

Re: PHP et lignes de commande pour ouverture SAGE

MessagePosté: Ven 13 Déc 2013 18:15
de cirylBD28
C'est quand meme bizarre parce que même un exec('cmd.exe') ne marche. Même en mettant le chemin absolu...

Re: PHP et lignes de commande pour ouverture SAGE

MessagePosté: Ven 13 Déc 2013 19:46
de cirylBD28
Bon, après maintes tentatives et essais divers, j'ai trouvé la solution suivante :
recherche.php :
Code: Tout sélectionner
while ($tab_req = odbc_fetch_array($req_req))
      {
      $tab_req['Ad1']=utf8_encode($tab_req['Ad1']);
 
      $display .= '<tr><td>'.$tab_req['DO_Piece'].'</td><td>'.$tab_req['DO_Ref'].'</td><td>'.$tab_req['Nom'].'</td><td>'.$tab_req['Ad1'].'</td><td>'.$tab_req['Ad2'].'</td><td>'.$tab_req['Code_Postal'].'</td>
      <td>'.$tab_req['Ville'].'</td><td>'.$tab_req['Tel_Livraison'].'</td><td>'.$tab_req['DO_DateLivr'].'</td><td><a href="ajax/fiche.php?cde=\''.$tab_req['DO_Piece'].'\'"><img src="img/valider.png"></a></td></tr>' ;
      }
echo $display ;

Passage de la variable dans l'url

Ensuite, récupération de la variable et écriture d'un fichier .bat :
Code: Tout sélectionner
<?php
$cde=$_GET['cde'];
// 1 : on ouvre le fichier
$monfichier = fopen('test.bat', 'r+');
 
// 2 : on lit la première ligne du fichier
fputs($monfichier, "start GecoMaes.exe \\\srv-sql\sage\BD_GESTION.gcm -cmd=Document.Show(Piece=$cde)");
 
// 3 : quand on a fini de l'utiliser, on ferme le fichier
fclose($monfichier);

exec('test.bat');
exit;

?>


Tout marche enfin, mon fichier bat se crée avec tout ce qu'il faut dedans

Maintenant, je voudrais qu'il se lance au clic... Comment faire ? J'ai essaye exec(), shell_exec(), system() mais rien n'y fait.
Même sous IE, il ne me propose pas d'executer le fichier...

Re: PHP et lignes de commande pour ouverture SAGE

MessagePosté: Sam 14 Déc 2013 11:43
de cirylBD28
Bon beh ça y est !!!
Après plusieurs essais, contournements et autres tentatives, j'y arrive enfin :

Code: Tout sélectionner
<?php
$cde=$_GET['cde'];
// 1 : on ouvre le fichier
$monfichier = fopen('test.bat', 'r+');
 
// 2 : on lit la première ligne du fichier
fputs($monfichier, "start GecoMaes.exe \\\srv-sql\sage\BD_GESTION.gcm -cmd=Document.Show(Piece=$cde)");
 
// 3 : quand on a fini de l'utiliser, on ferme le fichier
fclose($monfichier);

header('Content-type: application/bat');
header('Content-Disposition: attachment; filename="test.bat"');
readfile('test.bat');
exit;

?>