J'ai récemment repris un projet EDI et j'ai gagné beaucoup. En fait, j'ai eu des contacts avec Edi dans ma première entreprise. À ce moment-là, nous avons utilisé EDI pour réaliser principalement la transmission des données de commande. Les clients nous ont placé des bons de commande et ont placé les commandes d'achat sous la forme de messages convenus au serveur de fichiers désigné via VPN et FTP Tools. Ensuite, notre système EDI ira régulièrement sur le serveur de fichiers pour obtenir des messages, et enfin analyser et générer nos commandes de vente. Après ces années, je me souviens encore que ceux que j'ai utilisés le plus étaient EDI850 et EDI855.
1. Premièrement, présentons le concept d'Edi
Échange de données électroniques, échange de données électroniques.
EDI utilise en fait l'ordre d'origine de la commande / expédition de papier et d'autres documents commerciaux à partir de méthodes traditionnelles telles que Fax / Express à utiliser pour interagir aux données électroniques en ligne afin d'améliorer l'efficacité de l'entreprise. Dans le même temps, grâce à l'implémentation et à la configuration de certains logiciels EDI, les données de document correspondantes peuvent souvent être générées directement à partir du système commercial de l'entreprise et transmises automatiquement aux clients / fournisseurs pour réaliser l'effet de l'application à l'application et éviter les erreurs humaines (telles que les erreurs de données, etc.) dans des documents papier. Par conséquent, les grandes entreprises avec des systèmes informatiques complètes préfèrent EDI car EDI est transparent au personnel commercial, et le personnel commercial peut exploiter ses systèmes commerciaux quotidiens.
EDI dépend de plusieurs parties:
1. PATAINE DE TRANSMISSION EDI. Généralement, EDI est directement connecté via le protocole AS2, les FTP / s, etc., et peut également être transféré via des fournisseurs de services de fourgonnette tiers (réseau à valeur ajoutée) (c'est la même chose que notre mode de messagerie). Étant donné que cela implique des informations commerciales, les exigences de sécurité de la transmission seront relativement élevées;
2. Normes EDI, c'est-à-dire la forme organisationnelle des données commerciales, les normes américaines les plus couramment utilisées, l'ANSI X12 et l'édifact des Nations Unies et l'Union européenne. Bien sûr, il existe de nombreuses autres normes. Tant que les deux parties EDI suivent la même norme, l'interaction EDI peut être bien réalisée;
3. La meilleure façon d'implémenter le logiciel EDI (environnement) aux deux extrémités est d'envoyer et de recevoir automatiquement les messages EDI (fichiers de données) par le logiciel EDI et de les intégrer automatiquement dans le système d'entreprise.
Dans le chemin de transmission, nous utilisons FTP pour le transfert de fichiers. Ici, je présenterai principalement comment Java télécharge et télécharge des fichiers via des outils FTP. Ici, notre serveur FTP est le système d'exploitation Linux.
2. Référence du package Java
Parmi eux, "Commons-net-1.4.1.jar" et "jakarta-oro-2.0.8.jar" peuvent être téléchargés directement en cliquant sur le lien, et il est garanti d'être utilisé, afin que tout le monde puisse le télécharger en toute confiance.
3. Chemin de fichier <br /> Le chemin du dossier "E: / EDI / EDI850" que le client doit télécharger, par défaut, télécharger tous les fichiers dans ce dossier.
Le chemin de téléchargement du côté serveur FTP est "/ home / test / edi850". En cas de téléchargement en tant que chemin, le serveur FTP établira le chemin d'accès correspondant.
4. Code Java
Classe FTP
package com.pcmall; classe publique ftp {chaîne privée iPaddr; // Adresse IP Port entier privé; // numéro de port de chaîne privée nom d'utilisateur; // nom d'utilisateur String privé pwd; // mot de passe Private String Path; // Path Public String getIPADDR () {return iPaddr; } public void setipaddr (string iPaddr) {this.ipaddr = iPaddr; } public Integer getport () {return port; } public void setport (port entier) {this.port = port; } public String getUserName () {return username; } public void setUsername (String username) {this.userName = username; } public String getpwd () {return pwd; } public void setpwd (String pwd) {this.pwd = pwd; } public String getPath () {return path; } public void setPath (String Path) {this.path = path; }} Classe ftputil
package com.pcmall; Importer java.io.file; import java.io.fileInputStream; Importer java.io.fileOutputStream; Importer java.io.ioException; import java.io.outputStream; import org.apache.commons.net.ftp.ftpclient; import org.apache.commons.net.ftp.ftpfile; import org.apache.commons.net.ftp.ftpreply; import org.apache.log4j.logger; classe publique ftputil {private static logger logger = logger.getLogger (ftputil.class); FTP FTPClient privé; / ** * Obtenez la connexion FTP * * @param f * @return * @throws exception * / public static boolean connectftp (ftp f) lève une exception {ftp = new ftpClient (); booléen drapeau = false; int réponse; if (f.getport () == null) {ftp.connect (f.getIpaddr (), 21); } else {ftp.connect (f.getIpaddr (), f.getport ()); } ftp.login (f.getUserName (), f.getpwd ()); ftp.setFileType (ftpclient.binary_file_type); Répondre = ftp.getReplyCode (); if (! ftpreply.ispositivecompletion (réponse)) {ftp.disconnect (); drapeau de retour; } ftp.changeworkingDirectory (f.getPath ()); Flag = true; drapeau de retour; } / ** * Close Ftp Connection * / public static void closeftp () {if (ftp! = Null && ftp.isconnected ()) {try {ftp.logout (); ftp.disconnect (); } catch (ioException e) {e.printStackTrace (); }}} / ** * FTP Téléchargez le fichier * * @param f * @throws exception * / public static void upload (fichier f) lève exception {if (f.isdirectory ()) {ftp.Makedirectory (f.getName ()); ftp.changeworkingDirectory (f.getName ()); String [] files = f.list (); pour (String fstr: fichiers) {file file1 = new File (f.getPath () + "/" + fstr); if (file1.isdirectory ()) {upload (file1); ftp.changetoparentDirectory (); } else {file file2 = new File (f.getPath () + "/" + fstr); FileInputStream Input = new FileInputStream (File2); ftp.storefile (file2.getName (), entrée); input.close (); }}} else {file file2 = new File (f.getPath ()); FileInputStream Input = new FileInputStream (File2); ftp.storefile (file2.getName (), entrée); input.close (); }} / ** * Télécharger la configuration du lien * * @param f * @param localbasedir * Répertoire local * @param Remotebasedir * Remote Directory * @throws exception * / public static void startdown (ftp f, string localbasedir, string totebasedir) lance exception {if (ftputil.connectftp (f)) {try {ftpfile [] fichiers = null; Boolean SOGMIRIR = ftp.changeworkingDirectory (RemoteBasedir); if (changolIr) {ftp.setControleCcoding ("gbk"); files = ftp.listFiles (); for (int i = 0; i <files.length; i ++) {try {downloadFile (files [i], localBasedir, RemoteBasedir); } catch (exception e) {logger.error (e); Logger.Error ("<" + fichiers [i] .getName () + "> téléchargement échoué"); }}}} catch (exception e) {logger.error (e); Logger.Error ("Exception s'est produite lors du téléchargement"); }} else {Logger.Error ("Link a échoué!"); }} / ** * * Télécharger le fichier FTP Lorsque vous devez télécharger le fichier FTP, appeler cette méthode à télécharger en fonction du nom de fichier, de l'adresse locale et de l'adresse distante obtenue par <b> * * @param ftpfile * @param relativelocalPath * @param relativerremotepath * / private static downloadfile (ftpfile ftpfile, string relatoLocalipph RelaTIVEREMOTEPATH) {if (ftpfile.isfile ()) {if (ftpfile.getName (). indexof ("?") == -1) {outputStream OutputStream = null; try {file locafile = new File (relativeLocalPath + ftpfile.getName ()); // Déterminez si le fichier existe, et if (locafile.exists ()) {return; } else {OutputStream = new FileOutputStream (relativeLocalPath + ftpfile.getName ()); ftp.RetReeveFile (ftpfile.getName (), outputStream); outputStream.flush (); outputStream.close (); }} catch (exception e) {logger.error (e); } enfin {try {if (outputStream! = null) {outputStream.close (); }} catch (ioException e) {Logger.Error ("Exception du flux de fichiers de sortie"); }}}}} else {String NewLocalRelatePath = RelativeLocalPath + ftpfile.getName (); String newRemote = new String (RelativerEmotePath + ftpFile.getName (). ToString ()); Fichier fl = nouveau fichier (newLocalRelatePath); if (! fl.exists ()) {fl.mkdir (); } essayez {newLocalRelatePath = newlocalrelatePath + '/'; newRemote = newRemote + "/"; String currentworkDir = ftpfile.getName (). ToString (); Boolean changeir = ftp.changeworkingdir); if (changolIr) {ftpfile [] files = null; files = ftp.listFiles (); for (int i = 0; i <files.length; i ++) {downloadFile (files [i], newlocalrelatePath, newRemote); }} if (changéir) {ftp.changetOparentDirectory (); }} catch (exception e) {logger.error (e); }}} public static void main (String [] args) lève une exception {ftp ftp = new ftp (); ftp.setipaddr ("192.168.16.128"); ftp.setUsername ("test"); ftp.setpwd ("123456"); Ftputil.connectftp (ftp); Fichier file = nouveau fichier ("e: / edi / edi850 /"); // S'il s'agit d'un chemin, tous les fichiers sous le chemin seront téléchargés. S'il s'agit d'un fichier, le fichier sera téléchargé ftputil.upload (fichier); // Télécharger le fichier sur ftp ftputil.startdown (ftp, "e: / ftptest /", "/ home / test / edi850"); // télécharger le fichier ftp à tester, le deuxième paramètre. }}Une fois le téléchargement réussi, la situation du fichier de fichiers FTP est la suivante
Une fois le téléchargement réussi, une fois le fichier client ouvert comme suit, le contenu du fichier est le suivant. Comment télécharger et télécharger des fichiers via des outils FTP dans EDI sera introduit ici en premier. Les codes ci-dessus que j'ai personnellement testés et peuvent être exécutés.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.