لقد استولت مؤخرًا على مشروع EDI واكتسبت الكثير. في الواقع ، كان لدي اتصال مع EDI في شركتي الأولى. في ذلك الوقت ، استخدمنا EDI لتحقيق بشكل أساسي نقل بيانات الطلب. وضع العملاء طلبات الشراء لنا ووضعوا أوامر الشراء في شكل رسائل متفق عليها إلى خادم الملفات المعين من خلال أدوات VPN و FTP. ثم سيذهب نظام EDI الخاص بنا بانتظام إلى خادم الملفات للحصول على الرسائل ، وأخيراً تحليل وإنشاء أوامر المبيعات لدينا. بعد هذه السنوات ، ما زلت أتذكر أن تلك التي استخدمتها أكثر من EDI850 و EDI855.
1. أولاً ، دعونا نقدم مفهوم EDI
تبادل البيانات الإلكترونية ، تبادل البيانات الإلكترونية.
يستخدم EDI فعليًا إشعار الطلب/الشحن الورقي الأصلي ومستندات الأعمال الأخرى من الأساليب التقليدية مثل الفاكس/Express لاستخدامه للتفاعل بين البيانات الإلكترونية عبر الإنترنت لتحسين كفاءة العمل. في الوقت نفسه ، من خلال تنفيذ وتكوين بعض برامج EDI ، غالبًا ما يمكن إنشاء بيانات المستند المقابلة مباشرة من نظام أعمال المؤسسة ونقلها تلقائيًا إلى العملاء/الموردين لتحقيق تأثير التطبيق على التطبيق وتجنب الأخطاء البشرية (مثل أخطاء البيانات ، وما إلى ذلك) في المستندات الورقية. لذلك ، تفضل الشركات الكبيرة التي لديها أنظمة تكنولوجيا المعلومات الكاملة EDI لأن EDI شفاف مع موظفي الأعمال ، ويمكن لموظفي الأعمال تشغيل أنظمة أعمالهم اليومية.
يعتمد EDI على عدة أجزاء:
1. مسار انتقال EDI. بشكل عام ، يتم توصيل EDI مباشرة من خلال بروتوكول AS2 ، FTP/S ، وما إلى ذلك ، ويمكن أيضًا نقله من خلال موفري خدمات VANTY VANS (الشبكة المضافة) (هذا هو نفس وضع البريد الإلكتروني الخاص بنا). لأنه يتضمن معلومات الأعمال ، ستكون متطلبات أمان الإرسال مرتفعة نسبيًا ؛
2. معايير EDI ، أي الشكل التنظيمي لبيانات الأعمال ، والمعايير الأمريكية الأكثر شيوعًا ، ANSI X12 ، و Edifact للأمم المتحدة والاتحاد الأوروبي. بالطبع ، هناك العديد من المعايير الأخرى. طالما أن كلا الطرفين EDI يتبعان نفس المعيار ، يمكن تحقيق تفاعل EDI جيدًا ؛
3. أفضل طريقة لتنفيذ برنامج EDI (البيئة) في كلا الطرفين هي إرسال واستقبال رسائل EDI (ملفات البيانات) تلقائيًا بواسطة برنامج EDI ودمجها تلقائيًا في نظام الأعمال للمؤسسة.
في مسار الإرسال ، نستخدم FTP لنقل الملف. هنا سأقدم بشكل أساسي كيف تقوم Java بتحميل الملفات وتنزيل الملفات من خلال أدوات FTP. هنا خادم FTP هو نظام التشغيل Linux.
2. مرجع حزمة جافا
من بينهم ، يمكن تنزيل "Commons-Net-1.4.1.jar" و "Jakarta-Oro-2.0.8.Jar" مباشرة من خلال النقر على الرابط ، ويضمن استخدامه ، حتى يتمكن الجميع من تنزيله بثقة.
3. مسار الملف <br/> مسار المجلد "E:/EDI/EDI850" الذي يحتاج العميل إلى تحميله ، بشكل افتراضي ، تحميل جميع الملفات في هذا المجلد.
مسار التحميل لجانب خادم FTP هو "/home/test/edi850". إذا تم تحميله كمسار ، فسيقوم خادم FTP بإنشاء المسار المقابل.
4. كود جافا
فئة FTP
حزمة com.pcmall ؛ الفئة العامة ftp {private string ipaddr ؛ // عنوان IP منفذ Integer الخاص ؛ // رقم المنفذ اسم المستخدم الخاص ؛ } public void setipaddr (string ipaddr) {this.ipaddr = ipaddr ؛ } integer getPort () {return port ؛ } public void setport (منفذ integer) {this.port = port ؛ } السلسلة العامة getUserName () {return username ؛ } public void setusername (string username) {this.userName = username ؛ } السلسلة العامة getPwd () {return pwd ؛ } public void setPwd (String pwd) {this.pwd = pwd ؛ } السلسلة العامة getPath () {return path ؛ } public void setPath (string path) {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 {private static logger logger = logger.getLogger (ftputil.class) ؛ FTPClient ثابت FTPCLIENT ؛ / ** * احصل على اتصال FTP * * param f * regurn * throws استثناء */ public static boolean connectftp (ftp f) رمي الاستثناء {ftp = new ftpclient () ؛ العلم المنطقي = خطأ ؛ رد if (f.getport () == null) {ftp.connect (f.getipaddr () ، 21) ؛ } آخر {ftp.connect (f.getipaddr () ، f.getport ()) ؛ } ftp.login (f.getUserName () ، f.getpwd ()) ؛ ftp.setfiletype (ftpclient.binary_file_type) ؛ الرد = ftp.getReplyCode () ؛ if (! ftpreply.ispositivecOption (الرد)) {ftp.disconnect () ؛ العلم العودة } ftp.ChangeWorkingDirectory (f.getPath ()) ؛ العلم = صحيح ؛ العلم العودة } / *** أغلق اتصال ftp* / public static void closeftp () {if (ftp! = null && ftp.isconnected ()) {try {ftp.logout () ؛ ftp.disconnect () ؛ } catch (ioException e) {E.PrintStackTrace () ؛ }}} / ** * ftp upload file * * param f * throws استثناء * / تحميل الفراغ الثابت العام (ملف f) يلقي الاستثناء {if (f.isdirectory ()) {ftp.makedirectory (f.getName ()) ؛ ftp.ChangeWorkingDirectory (f.getName ()) ؛ string [] files = f.list () ؛ لـ (string fstr: files) {file file1 = new file (f.getPath () + "/" + fstr) ؛ if (file1.isdirectory ()) {expload (file1) ؛ ftp.ChangetOparentDirectory () ؛ } else {file file2 = new file (f.getPath () + "/" + fstr) ؛ FileInputStream input = new FileInputStream (file2) ؛ ftp.storefile (file2.getName () ، input) ؛ input.close () ؛ }}} else {file file2 = new file (f.getPath ()) ؛ FileInputStream input = new FileInputStream (file2) ؛ ftp.storefile (file2.getName () ، input) ؛ input.close () ؛ }} / ** * تنزيل تكوين الرابط * * param f * param localbasedir * دليل محلي * param remoteBasedir * دليل REMOTE * athrows استثناء * / public static void startDown (ftp f ، string localbasedir ، string remotebasedir) rems stispion {if (ftputil.connectp (f)) changeir boolean = ftp.ChangeWorkingDirectory (RemoteBasedir) ؛ if (changeir) {ftp.setControlenCoding ("gbk") ؛ الملفات = ftp.listfiles () ؛ لـ (int i = 0 ؛ i <files.length ؛ i ++) {try {downloadFile (files [i] ، localbasedir ، remoteBasedir) ؛ } catch (استثناء e) {logger.error (e) ؛ logger.error ("<" + files [i] .getName () + "> تنزيل فشل") ؛ }}}} catch (استثناء e) {logger.error (e) ؛ logger.error ("استثناء حدث أثناء التنزيل") ؛ }} آخر {logger.error ("فشل الرابط!") ؛ }} / ** * * تنزيل ملف ftp عندما تحتاج إلى تنزيل ملف FTP ، اتصل بهذه الطريقة للتنزيل استنادًا إلى اسم الملف ، والعنوان المحلي ، والعنوان البعيد الذي تم الحصول عليه بواسطة <b> * * * param ftpfile * @param relativelpath * param relativerepath * / private static void downloadfile (ftpfile ftpfile ، relativeremotepath) {if (ftpfile.isfile ()) {if (ftpfile.getName (). indexof ("؟") == -1) {outputStream outputStream = null ؛ حاول {file locafile = new file (relativelocalpath + ftpfile.getName ()) ؛ // تحديد ما إذا كان الملف موجودًا ، وإذا (locafile.exists ()) {return ؛ } آخر {outputStream = newOutputStream (relativelocalpath + ftpfile.getName ()) ؛ ftp.retrievefile (ftpfile.getName () ، outputStream) ؛ outputStream.flush () ؛ outputStream.Close () ؛ }} catch (استثناء e) {logger.error (e) ؛ } أخيرًا {try {if (outputStream! = null) {outputStream.close () ؛ }} catch (ioException e) {logger.error ("استثناء دفق ملف الإخراج") ؛ }}}}} آخر {String newLocalReLatePath = relativelocalpath + ftpfile.getName () ؛ String newRemote = new String (RelativereMotePath + ftpfile.getName (). toString ()) ؛ ملف fl = ملف جديد (newLocalReleTeLatePath) ؛ if (! fl.exists ()) {fl.mkdir () ؛ } جرب {newLocalRelatePath = newLocalRelatePath + '/' ؛ newRemote = newRemote + "/" ؛ String CurrentWorkDir = ftpfile.getName (). toString () ؛ Boolean changeir = ftp.ChangeWorkingDir) ؛ if (changeir) {ftpfile [] files = null ؛ الملفات = ftp.listfiles () ؛ لـ (int i = 0 ؛ i <files.length ؛ i ++) {downloadFile (files [i] ، newLocalReLatePath ، newRemote) ؛ }} if (changeir) {ftp.changetoparentDirectory () ؛ }} catch (استثناء e) {logger.error (e) ؛ }}} public static void main (string [] args) يلقي الاستثناء {ftp ftp = new ftp () ؛ ftp.setipaddr ("192.168.16.128") ؛ ftp.setusername ("اختبار") ؛ ftp.setpwd ("123456") ؛ ftputil.connectftp (FTP) ؛ ملف الملف = ملف جديد ("E:/EDI/EDI850/") ؛ // إذا كان مسارًا ، فسيتم تحميل جميع الملفات الموجودة أسفل المسار. إذا كان ملفًا ، فسيتم تحميل الملف ftputil.upload (ملف) System.out.println ("OK") ؛ }}بعد نجاح التحميل ، يكون موقف ملف خادم ملف FTP كما يلي
بعد نجاح التنزيل ، بعد فتح ملف العميل على النحو التالي ، يكون محتوى الملف كما يلي. سيتم تقديم كيفية تحميل وتنزيل الملفات من خلال أدوات FTP في EDI هنا أولاً. الرموز أعلاه التي أختبرها شخصيا ويمكن تشغيلها.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.