เมื่อเร็ว ๆ นี้ฉันได้เข้าร่วมโครงการ EDI และได้รับมาก อันที่จริงฉันได้ติดต่อกับ EDI ใน บริษัท แรกของฉัน ในเวลานั้นเราใช้ EDI เพื่อตระหนักถึงการส่งข้อมูลการสั่งซื้อเป็นหลัก ลูกค้าวางคำสั่งซื้อให้เราและวางใบสั่งซื้อในรูปแบบของข้อความที่ตกลงกันไปยังเซิร์ฟเวอร์ไฟล์ที่กำหนดผ่านเครื่องมือ VPN และ FTP จากนั้นระบบ EDI ของเราจะไปที่เซิร์ฟเวอร์ไฟล์เป็นประจำเพื่อรับข้อความและในที่สุดก็แยกวิเคราะห์และสร้างคำสั่งขายของเรา หลังจากหลายปีที่ผ่านมาฉันยังจำได้ว่าสิ่งที่ฉันใช้มากที่สุดคือ EDI850 และ EDI855
1. ก่อนอื่นมาแนะนำแนวคิดของ EDI กันเถอะ
การแลกเปลี่ยนข้อมูลอิเล็กทรอนิกส์การแลกเปลี่ยนข้อมูลอิเล็กทรอนิกส์
EDI ใช้คำสั่งซื้อกระดาษ/การจัดส่งต้นฉบับและเอกสารทางธุรกิจอื่น ๆ จากวิธีการดั้งเดิมเช่นแฟกซ์/ด่วนเพื่อใช้ในการโต้ตอบข้อมูลอิเล็กทรอนิกส์ออนไลน์เพื่อปรับปรุงประสิทธิภาพทางธุรกิจ ในเวลาเดียวกันผ่านการใช้งานและการกำหนดค่าของซอฟต์แวร์ EDI บางตัวข้อมูลเอกสารที่สอดคล้องกันมักจะถูกสร้างขึ้นโดยตรงจากระบบธุรกิจขององค์กรและส่งไปยังลูกค้า/ซัพพลายเออร์โดยอัตโนมัติเพื่อให้ได้ผลของแอปพลิเคชันและหลีกเลี่ยงข้อผิดพลาดของมนุษย์ (เช่นข้อผิดพลาดข้อมูล ฯลฯ ) ในเอกสารกระดาษ ดังนั้น บริษัท ขนาดใหญ่ที่มีระบบไอทีที่สมบูรณ์ชอบ EDI เพราะ EDI มีความโปร่งใสต่อบุคลากรทางธุรกิจและบุคลากรทางธุรกิจสามารถดำเนินงานระบบธุรกิจประจำวันได้
EDI ขึ้นอยู่กับหลายส่วน:
1. เส้นทางการส่งผ่าน EDI โดยทั่วไปแล้ว EDI เชื่อมต่อโดยตรงผ่านโปรโตคอล AS2, FTP/S ฯลฯ และยังสามารถถ่ายโอนผ่านผู้ให้บริการ Van (เครือข่ายเพิ่มมูลค่า) (นี่เป็นเช่นเดียวกับโหมดอีเมลของเรา) เนื่องจากเกี่ยวข้องกับข้อมูลทางธุรกิจข้อกำหนดด้านความปลอดภัยของการส่งจะค่อนข้างสูง
2. มาตรฐาน EDI นั่นคือรูปแบบของข้อมูลทางธุรกิจขององค์กรมาตรฐานอเมริกันที่ใช้กันมากที่สุด ANSI X12 และ Edifact ของสหประชาชาติและสหภาพยุโรป แน่นอนว่ามีมาตรฐานอื่น ๆ อีกมากมาย ตราบใดที่ฝ่าย EDI ทั้งสองปฏิบัติตามมาตรฐานเดียวกันการโต้ตอบ EDI สามารถทำได้ดี
3. วิธีที่ดีที่สุดในการใช้งานซอฟต์แวร์ EDI (สภาพแวดล้อม) ที่ปลายทั้งสองคือการส่งและรับข้อความ EDI (ไฟล์ข้อมูล) โดยอัตโนมัติโดยซอฟต์แวร์ EDI และรวมเข้ากับระบบธุรกิจขององค์กรโดยอัตโนมัติ
ในเส้นทางการส่งเราใช้ FTP สำหรับการถ่ายโอนไฟล์ ที่นี่ฉันจะแนะนำวิธีการอัพโหลดและดาวน์โหลดไฟล์ Java ผ่านเครื่องมือ FTP ที่นี่เซิร์ฟเวอร์ FTP ของเราคือระบบปฏิบัติการ Linux
2. การอ้างอิงแพ็คเกจ Java
ในหมู่พวกเขา "Commons-Net-1.4.1.jar" และ "Jakarta-Oro-2.0.8.jar" สามารถดาวน์โหลดได้โดยตรงโดยคลิกที่ลิงค์และรับประกันว่าจะใช้เพื่อให้ทุกคนสามารถดาวน์โหลดได้อย่างมั่นใจ
3. พา ธ ไฟล์ <br/> พา ธ โฟลเดอร์ "E:/EDI/EDI850" ที่ไคลเอนต์จำเป็นต้องอัปโหลดโดยค่าเริ่มต้นอัปโหลดไฟล์ทั้งหมดในโฟลเดอร์นี้
เส้นทางการอัปโหลดของฝั่งเซิร์ฟเวอร์ FTP คือ "/home/test/EDI850" หากอัปโหลดเป็นพา ธ เซิร์ฟเวอร์ FTP จะสร้างเส้นทางที่สอดคล้องกัน
4. รหัส Java
คลาส FTP
แพ็คเกจ com.pcmall; คลาสสาธารณะ FTP {สตริงส่วนตัว ipaddr; // ที่อยู่ IP พอร์ตจำนวนเต็มส่วนตัว; // หมายเลขพอร์ตสตริงส่วนตัวชื่อผู้ใช้; // ชื่อผู้ใช้สตริงส่วนตัว pwd; // รหัสผ่าน private String พา ธ ; // path สตริงสาธารณะ getipaddr () {return ipaddr; } โมฆะสาธารณะ setipaddr (string ipaddr) {this.ipaddr = ipaddr; } Public Integer GetPort () {พอร์ตส่งคืน; } โมฆะสาธารณะ setport (พอร์ตจำนวนเต็ม) {this.port = พอร์ต; } สตริงสาธารณะ getUserName () {ส่งคืนชื่อผู้ใช้; } โมฆะสาธารณะ setUserName (ชื่อผู้ใช้สตริง) {this.userName = ชื่อผู้ใช้; } สตริงสาธารณะ getpwd () {return pwd; } โมฆะสาธารณะ setpwd (สตริง pwd) {this.pwd = pwd; } สตริงสาธารณะ getPath () {เส้นทางกลับ; } โมฆะสาธารณะ setPath (เส้นทางสตริง) {this.path = path; - คลาส ftputil
แพ็คเกจ com.pcmall; นำเข้า Java.io.File; นำเข้า Java.io.FileInputStream; นำเข้า Java.io.FileOutputStream; นำเข้า java.io.ioException; นำเข้า Java.io.OutputStream; นำเข้า org.apache.commons.net.ftp.ftpclient; นำเข้า org.apache.commons.net.ftp.ftpfile; นำเข้า org.apache.commons.net.ftp.ftpreply; นำเข้า org.apache.log4j.logger; คลาสสาธารณะ ftputil {logger logger แบบคงที่ส่วนตัว = logger.getLogger (ftputil.class); ftpclient แบบคงที่ส่วนตัว; / ** * รับการเชื่อมต่อ ftp * * @param f * @return * @throws Exception */ Public Static Boolean Connectftp (FTP F) โยนข้อยกเว้น {ftp = new ftpClient (); ธงบูลีน = เท็จ; int ตอบ; 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); ตอบ = ftp.getReplyCode (); if (! ftpreply.ispositiveCompletion (ตอบกลับ)) {ftp.disconnect (); ธงกลับ; } ftp.changeworkingDirectory (f.getPath ()); ธง = จริง; ธงกลับ; } / *** ปิดการเชื่อมต่อ FTP* / โมฆะสาธารณะคงที่ closeftp () {ถ้า (ftp! = null && ftp.isconnected ()) {ลอง {ftp.logout (); ftp.disconnect (); } catch (ioexception e) {e.printstacktrace (); }}} / ** * ไฟล์อัปโหลด ftp * * @param f * @throws Exception * / โมฆะคงที่การอัปโหลด (ไฟล์ f) พ่นข้อยกเว้น {ถ้า (f.isdirectory ()) {ftp.makedirectory (f.getName ()); ftp.changeworkingDirectory (f.getName ()); สตริง [] ไฟล์ = f.list (); สำหรับ (String fstr: ไฟล์) {ไฟล์ file1 = ไฟล์ใหม่ (f.getPath () + "/" + fstr); if (file1.isdirectory ()) {upload (file1); ftp.changetoparentDirectory (); } else {file file2 = ไฟล์ใหม่ (f.getPath () + "/" + fstr); fileInputStream input = new FileInputStream (file2); ftp.storefile (file2.getName (), อินพุต); input.close (); }}} else {file file2 = ไฟล์ใหม่ (f.getPath ()); fileInputStream input = new FileInputStream (file2); ftp.storefile (file2.getName (), อินพุต); input.close (); }} / ** * ดาวน์โหลดการกำหนดค่าลิงค์ * * @param f * @param localbasedir * ไดเรกทอรีท้องถิ่น * @param remotebasedir * ไดเรกทอรีระยะไกล * @throws Exception * / Public Static Void Startdown (ftp f, String localbasedir, String remotebasedir) Boolean Changeir = ftp.changeworkingDirectory (Remotebasedir); if (changeir) {ftp.setControlencoding ("GBK"); files = ftp.listfiles (); สำหรับ (int i = 0; i <files.length; i ++) {ลอง {downloadfile (ไฟล์ [i], localbasedir, remotebasedir); } catch (exception e) {logger.error (e); logger.error ("<" + ไฟล์ [i] .getName () + "> ดาวน์โหลดล้มเหลว"); }}}} catch (exception e) {logger.error (e); logger.error ("ข้อยกเว้นเกิดขึ้นระหว่างการดาวน์โหลด"); }} else {logger.error ("ลิงก์ล้มเหลว!"); }} / ** * * ดาวน์โหลดไฟล์ ftp เมื่อคุณต้องการดาวน์โหลดไฟล์ ftp โทรหาวิธีนี้เพื่อดาวน์โหลดตามชื่อไฟล์ที่อยู่ท้องถิ่นและที่อยู่ระยะไกลที่ได้รับโดย <b> * * @param ftpfile * @param relativelocalpath * @param relativeremotepath * RelativeremotePath) {if (ftpfile.isfile ()) {ถ้า (ftpfile.getName (). indexof ("?") == -1) {outputStream outputstream = null; ลอง {file locafile = ไฟล์ใหม่ (relativelocalpath + ftpfile.getName ()); // พิจารณาว่าไฟล์มีอยู่หรือไม่และถ้า (locafile.exists ()) {return; } else {outputStream = ใหม่ fileOutputStream (relatiVelocalPath + ftpfile.getName ()); ftp.retrievefile (ftpfile.getName (), outputstream); outputstream.flush (); outputstream.close (); }} catch (exception e) {logger.error (e); } ในที่สุด {ลอง {ถ้า (outputStream! = null) {outputStream.close (); }} catch (ioexception e) {logger.error ("ข้อยกเว้นสตรีมไฟล์เอาต์พุต"); }}}}} else {String newLocalRelatePath = relativelocalPath + ftpfile.getName (); สตริง newRemote = สตริงใหม่ (relativeremotepath + ftpfile.getName (). toString ()); ไฟล์ FL = ไฟล์ใหม่ (newLocalRelatePath); if (! fl.exists ()) {fl.mkdir (); } ลอง {newLocalRelatePath = newLocalRelatePath + '/'; newRemote = newRemote + "/"; สตริง currentworkdir = ftpfile.getName (). toString (); boolean changeir = ftp.changeworkingdir); if (changeir) {ftpfile [] files = null; files = ftp.listfiles (); สำหรับ (int i = 0; i <files.length; i ++) {downloadfile (ไฟล์ [i], newLocalRelatePath, newRemote); }} if (changeir) {ftp.changetoparentDirectory (); }} catch (exception e) {logger.error (e); }}} โมฆะคงที่สาธารณะหลัก (สตริง [] args) พ่นข้อยกเว้น {ftp ftp = new ftp (); ftp.setipaddr ("192.168.16.128"); ftp.setusername ("ทดสอบ"); ftp.setpwd ("123456"); ftputil.connectftp (FTP); ไฟล์ไฟล์ = ไฟล์ใหม่ ("E:/EDI/EDI850/"); // หากเป็นพา ธ ไฟล์ทั้งหมดภายใต้พา ธ จะถูกอัปโหลด หากเป็นไฟล์ไฟล์จะถูกอัปโหลด ftputil.upload (ไฟล์); // อัปโหลดไฟล์บน ftp ftputil.startdown (ftp, "e:/ftptest/", "/home/test/edi850"); // ดาวน์โหลดไฟล์ FTP }}หลังจากการอัปโหลดสำเร็จสถานการณ์ไฟล์เซิร์ฟเวอร์ไฟล์ FTP มีดังนี้
หลังจากการดาวน์โหลดสำเร็จหลังจากเปิดไฟล์ไคลเอนต์ดังนี้เนื้อหาไฟล์มีดังนี้ วิธีการอัปโหลดและดาวน์โหลดไฟล์ผ่านเครื่องมือ FTP ใน EDI จะได้รับการแนะนำที่นี่ก่อน รหัสข้างต้นที่ฉันทดสอบเป็นการส่วนตัวและสามารถเรียกใช้ได้
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น