PHP et lignes de commande pour ouverture SAGE

Cette section est consacrée aux développements d'applications interfacées avec les logiciels Sage.

Modérateurs: Super-Apogea, Super Modérateur

PHP et lignes de commande pour ouverture SAGE

de cirylBD28 » Mer 11 Déc 2013 13:46

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]
Dernière édition par cirylBD28 le Sam 14 Déc 2013 12:35, édité 1 fois.
Posteur néophyte
Posteur néophyte
 
Messages: 13
Inscription: Jeu 8 Aoû 2013 10:57

Re: PHP et lignes de commande pour ouverture SAGE

de asr31 » Mer 11 Déc 2013 23:29

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,
ASR31

En recherche de missions.
Avatar de l’utilisateur
Super Contributeur
Super Contributeur
 
Messages: 2975
Inscription: Mer 13 Fév 2008 15:31
Localisation: TOULOUSE

Re: PHP et lignes de commande pour ouverture SAGE

de cirylBD28 » Jeu 12 Déc 2013 10:24

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
Posteur néophyte
Posteur néophyte
 
Messages: 13
Inscription: Jeu 8 Aoû 2013 10:57

Re: PHP et lignes de commande pour ouverture SAGE

de cirylBD28 » Jeu 12 Déc 2013 10:42

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>
Posteur néophyte
Posteur néophyte
 
Messages: 13
Inscription: Jeu 8 Aoû 2013 10:57

Re: PHP et lignes de commande pour ouverture SAGE

de cirylBD28 » Jeu 12 Déc 2013 17:18

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
Posteur néophyte
Posteur néophyte
 
Messages: 13
Inscription: Jeu 8 Aoû 2013 10:57

Re: PHP et lignes de commande pour ouverture SAGE

de asr31 » Jeu 12 Déc 2013 20:16

Bonjour,

Je suis chauve ....

Cordialement,
ASR31

En recherche de missions.
Avatar de l’utilisateur
Super Contributeur
Super Contributeur
 
Messages: 2975
Inscription: Mer 13 Fév 2008 15:31
Localisation: TOULOUSE

Re: PHP et lignes de commande pour ouverture SAGE

de cirylBD28 » Ven 13 Déc 2013 08:54

mais encore...
Posteur néophyte
Posteur néophyte
 
Messages: 13
Inscription: Jeu 8 Aoû 2013 10:57

Re: PHP et lignes de commande pour ouverture SAGE

de asr31 » Ven 13 Déc 2013 16:08

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,
ASR31

En recherche de missions.
Avatar de l’utilisateur
Super Contributeur
Super Contributeur
 
Messages: 2975
Inscription: Mer 13 Fév 2008 15:31
Localisation: TOULOUSE

Re: PHP et lignes de commande pour ouverture SAGE

de cirylBD28 » Ven 13 Déc 2013 16:15

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 !!
Posteur néophyte
Posteur néophyte
 
Messages: 13
Inscription: Jeu 8 Aoû 2013 10:57

Re: PHP et lignes de commande pour ouverture SAGE

de asr31 » Ven 13 Déc 2013 16:31

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,
ASR31

En recherche de missions.
Avatar de l’utilisateur
Super Contributeur
Super Contributeur
 
Messages: 2975
Inscription: Mer 13 Fév 2008 15:31
Localisation: TOULOUSE

Re: PHP et lignes de commande pour ouverture SAGE

de cirylBD28 » Ven 13 Déc 2013 17:09

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 ?
Posteur néophyte
Posteur néophyte
 
Messages: 13
Inscription: Jeu 8 Aoû 2013 10:57

Re: PHP et lignes de commande pour ouverture SAGE

de cirylBD28 » Ven 13 Déc 2013 18:15

C'est quand meme bizarre parce que même un exec('cmd.exe') ne marche. Même en mettant le chemin absolu...
Posteur néophyte
Posteur néophyte
 
Messages: 13
Inscription: Jeu 8 Aoû 2013 10:57

Re: PHP et lignes de commande pour ouverture SAGE

de cirylBD28 » Ven 13 Déc 2013 19:46

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...
Posteur néophyte
Posteur néophyte
 
Messages: 13
Inscription: Jeu 8 Aoû 2013 10:57

Re: PHP et lignes de commande pour ouverture SAGE

de cirylBD28 » Sam 14 Déc 2013 11:43

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;

?>
Posteur néophyte
Posteur néophyte
 
Messages: 13
Inscription: Jeu 8 Aoû 2013 10:57


Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité
cron