واحد پشتیبانی نرم افزار » ECE

برجسب های نوشته ها ECE

نمونه اجرایی مبادله مکاتبات به گونه ECE

بهمن ۱۸م, ۱۳۸۸ دسته متفرقه | ۳ دیدگاه »

در مقاله قبل سعی کردیم تا نگاهی عملیاتی به پروتوکول مبادله الکترونیکی مکاتبات یا ECE بیاندازیم.
در پی انتشار این مقاله که اولین مقاله عملی در این زمینه بشمار می رود ، تقاضاهای فراوانی از طریق ایمیل و همچنین پرسشهای متنوعی در زمینه چگونگی پیاده سازی آن بدستمان رسید.
لذا پس از بررسی موضوع در شرکت ، بر آن شدیم تا یک نمونه کامل از پیاده سازی را بصورت منبع باز در اختیارتان قرار دهیم.
شما می توانید یک برنامه کامل(شامل پروسه ارسال و دریافت) را از اینجا دانلود کنید:
tsa.ece.tester.rar
در مورد برنامه فوق ذکر نکات زیر الزامی است:
۱- این برنامه در دلفی ۶ نوشته شده و همانطور که می دانید مجموعه کامپاننتهای Indy نصب شده در این دلفی از SSL پشتیبانی نمی نمایند.برای آنکه بتوانید از Mail Server هایی استفاده نمایید که نوع Authentication آنها از نوع SSL می باشد (همانند gmail) باید ابتدا Indy 10 را در این دلفی نصب کنید و یا همین برنامه نمونه را در دلفی ۷ یا بالاتر باز نموده و اصلاحات لازم را بانجام رسانید.نمونه ای از کد کار در حالت SSL را می توانید در لینک زیر ببینید:
اینجا
۲- در بخش دریافت پیامها ، اگر نگاهی به کد بیاندازید ، تنها به رمزگشایی مکاتبات نوع Letter پرداخته ایم یعنی یک نامه رسمی و در مورد پیامهایی که از نوع رسید و یا Receipt می باشند تنها روش تشخیص آن در متن کد دیده می شود.بدیهی است که روش کار همانند Letter بوده و تنها کافیست با مطالعه مستندات ECE ، اسامی و کاربرد نودها و فیلدها را دانسته و جایگذاری نمایید.

۳- در بخش دریافت مکاتبات ، ابتدا پرونده های XML در مسیر Inbox از پوشه برنامه ، ذخیره می شوند ، سپس برای مشاهده مشخصات نامه دریافتی و همچنین Extract شدن تصویر نامه ، باید بر روی لیست فوقانی این بخش که از نوع FileListBox می باشد ، روی فایل مورد نظر دوبار کلیک کنید تا هم مشخصات نامه نمایش داده شود و هم پرونده حاوی تصویر و یا پیوست نامه Extract گردد.بعنوان نمونه یک پرونده XML در همین پوشه قرار دارد که می توانید اثر دوبار کلیک بر روی آنرا عملا مشاهده نمایید.

موفق باشید

پیاده سازی مبادله الکترونیک مکاتبات با استاندارد ECE

بهمن ۱۴م, ۱۳۸۸ دسته متفرقه | ۷ دیدگاه »

تقریبا تمامی تولید کنندگان نرم افزارهای اتوماسیون اداری ، پس از ابلاغ معاونت راهبردی ریاست جمهوری مبنی بر انتخاب نرم افزارهایی که از پروتوکل ECE استفاده می کنند ، اقدام به پیاده سازی امکان تبادل مکاتبات به گونه ECE نموده اند.

اما بسیاری از شرکتهای کوچکتر ، هنوز در رویه پیاده سازی آن با مشکلاتی مواجه اند که اینموضوع ، عملا مبادله پبام با سایر نرم افزارهای اتوماسیون اداری را غیر ممکن ساخته است.

مستندات مربوط به این پروتوکل در سامانه http://www.ecep.ir بطور کامل وجود دارد.

در این مقاله سعی بر آنست که به پیاده سازی مرحله به مرحله روش مبادله ECE و مشکلات احتمالی بپردازیم.پلتفرم مورد بحث دلفی بوده لکن با اندک تغییرات ، قابل استفاده در ویژوال استودیو می باشد.

مقدمه:

پیش از پرداختن به پیاده سازی روش مبادله فوق ، لازمست بدانیم:

۱- پروتوکول مورد بحث ، از بستر پست الکترونیکی نوع POP/SMTP استفاده می کند.بنابر این پیامها با استفاده از SMTP ارسال و مکاتبات دریافتی باید با استفاده از POP دریافت و بررسی و در صورت لزوم در دبیرخانه ثبت گردند.

۲- در پروتوکول ECE به ازای هر مکاتبه مورد نظر جهت ارسال ، یک پرونده XML با ساختار و شمای معرفی شده در مستندات ECE تولید می شود.این پرونده شامل مشخصات شناسنانه ای مکاتبه(شماره ثبت ، تاریخ ثبت ، موضوع نامه ، فوریت نامه، محرمانگی نامه ، فرستنده ، گیرنده/گیرندگان نامه) ، و همچنین متن نامه مورد نظر به قالبهای استانداری همچون doc یا docx یا pdf یا tif یا bmp یا jpg می باشد.ضمائم و پیوستهای نامه می تواند بصورت بخشی از نامه اصلی(که در ادامه تصویر نامه اضافه شده باشد) و یا با استفاده از پرکردن بخش Attachments از پرونده ECE با درنظر گرفتن مستندات ارائه شده ، در پرونده تولید شده XML درج گردند.

۳- پرونده XML تولید شده ، نهایتا با استفاده از SMTP Server ، به گیرنده/گیرندگان ، ایمیل می شود.

ابزارهای مورد نیاز:

۱- محیط برنامه سازی دلفی

۲- کنترل های ایمیل مربوط به پکیج Indy.این پکیج بطور پیشفرض در دلفی نصب شده و در قسمت Indy Clients از نوار کامپاننت دلفی در دسترس هستند.

۳- یک اکانت POP/SMTP Server: شامل Username و Password و POP Server Address و SMTP Server Address و پورتهای POP وSMTP .بعنوان نمونه برای تست می توانید از اکانت gmail استفاده کنید.اما توجه داشته باشید که سرویس POP/SMTP بطور پیشفرض در جیمیل فعال نیست و باید با ورود به بخش Setting گزینه مربوطه را فعال نمایید:

http://www.google.com/mail/help/images/screenshots/enable_pop/pop.gif

۴- یک نرم افزار ویرایشگر XML: یکی از بهترین نرم افزارها در این زمینه Oxygen XML Editor  می باشد که می توانید از لینک زیر دانلود نمایید:
http://rapidshare.com/files/322464135/O.x.y.g.e.n.X.M.L.E.d.i.t.o.r.v11.1.rar

مراحل پیاده سازی:

۱- تولید پرونده XML:


uses
xmldom,XMLIntf, msxmldom, XMLDoc,
SZCodeBaseX;

procedure CreateECEXMLDocument;

var

ms:TMemoryStream;

d,ns ,afc:WideString;

XMLDoc:TXMLDocument;

aln,aln2,aln3,an,ann:IXMLNode;

n,i:integer; sl:TStringList;

ss:TStringStream;

begin
XMLDoc:=TXMLDocument.Create(Self);

XMLDoc.Active:= True;

XMLDoc.version:= ‘1.0′;

XMLDoc.Encoding:=’UTF-8′;

XMLDoc.Options:=[doNodeAutoIndent];

ann:=xmlDoc.AddChild(’Letter’,”);

ns:=’http://www.irica.com/ECE/1383-12/SendSchema’;

ann.Attributes['xmlns']:= ns;
ann.Attributes['Any']:=”;

ss:=TStringStream.Create(”);
ms:=TMemoryStream.Create;


SZEncodeBase64(’c:\MYLETTER.TIF’,ss);

فرض آنست که تصویر نامه قبلا در c:\MYLETTER.TIF ذخیره شده است//

afc:=ss.DataString;


aln:=XMLDoc.ChildNodes.FindNode(’Letter’);

an:=aln.AddChild(’Protocol’,ns);

an.Attributes['Name']:=’ECE’;

an.Attributes['Version']:=’1.01′;

an:=aln.AddChild(’Software’,ns);


an.Attributes['SoftwareDeveloper']:=’G.A.M.A TSA Co’;

an.Attributes['Version']:=’7.1′;


an.Attributes['GUID']:=’9D4E9BE2-6573-412F-9AA0-4654A4901005′;

مقدار GUID توسط شرکت سازنده
بصورت اختیاری پر می شود و در حال حاضر مقدارآن اهمیتی ندارد //

an:=aln.AddChild(’Sender’,ns);

an.Attributes['Organization']:=’اداره کل منابع طبیعی سمنان‘;

an.Attributes['Department']:=’حوزه مدیریت‘;

an.Attributes['Position']:=’مدیر کل‘;

an.Attributes['Name']:=’مهندس …..‘;

an.Attributes['Code']:=’2322‘;

an.Attributes['Any']:=”;

an:=aln.AddChild(’Receiver’,ns);

an.Attributes['Organization']:=’سازمان جنگلها و مراتع کشور‘;

an.Attributes['Department']:=’اداره کل امور اداری‘;

an.Attributes['Position']:=’مدیر کل‘;

an.Attributes['Name']:=’جناب آقای
مهندس…..
‘;

an.Attributes['Code']:=’56433′;


an.Attributes['ReceiveType']:=’Origin’;

an.Attributes['Any']:=”;


an:=aln.AddChild(’OtherReceivers’,ns);

فرض بر آنست که این نامه تنها یک گیرنده داشته و لذا تنها یک تگ
OtherReceivers بدون فرزند ،
ایجاد می گردد.//

an:=aln.AddChild(’LetterNo’,ns);

an.Attributes['Any']:=”;

an.NodeValue:=’374321/21/الف‘;


an:=aln.AddChild(’LetterDateTime’,ns);


an.Attributes['ShowAs']:=’gregorian’;

an.Attributes['Any']:=”;

d:=solartochrists();


d:=StringReplace(d,’/',’-',[rfReplaceAll]);


d:=d+’T'+trim(LeftStr(TimeToStr(Now),5))+’:01′;

an.NodeValue:=d;

در خطوط فوق ابتدا تاریخ شمسی به میلادی تبدیل گردیده و سپس به فرمت
ISO 8601 تبدیل می گردد.//


an:=aln.AddChild(’RelatedLetters’,ns);

an:=aln.AddChild(’Subject’,ns);

an.NodeValue:=’تعیین تکلیف اراضی
اختلافی دامغان
‘;

an.Attributes['Any']:=”;

an:=aln.AddChild(’Priority’,ns);

an.Attributes['Name']:=’عادی‘;

an.Attributes['Code']:=’1′;

an.Attributes['Any']:=”;


an:=aln.AddChild(’Classification’,ns);

an.Attributes['Name']:=’عادی‘;

an.Attributes['Code']:=’1′;

an.Attributes['Any']:=”;

an:=aln.AddChild(’Keywords’,ns);

aln2:=aln.AddChild(’Origins’,ns);

an:=aln2.AddChild(’Origin’,ns);


an.Attributes['ContentType']:=’image/tiff’;


an.Attributes['Extension']:=’tif’;


an.Attributes['Description']:=’تصویر نامه‘;


an.Attributes['Any']:=”;

an.NodeValue:=afc;

اگر نامه شامل پیوست باشد ، خطوط زیر جهت درج پیوست در پرونده بکار می رود:


aln3:=aln.AddChild(’Attachments’,ns);

if assigned(ss) then ss.Free;


ss:=TStringStream.Create(”);


SZEncodeBase64(’c:\myAttach1.TIF’,ss);


afc:=ss.DataString;


an:=aln3.AddChild(’Attachment’,ns);


an.Attributes['ContentType']:=’image/tiff’;


an.Attributes['Extension']:=’tif’;


an.Attributes['Description']:=’تصویر پیوست‘;


an.Attributes['Any']:=”;


an.NodeValue:=afc;

ms.Free;

XMLDoc.SaveToFile(’c:\ece_test.xml’);

end;

همانطورکه در کد بالا مشاهده می شود ، پرونده نهایی در گردونه C بنام ece_test.xml ساخته می شود.توجه داشته باشید که پرونده های باینری مانند پرونده های doc و tif و …. باید به فرمت Base64 در فایل نهایی قرار بگیرند و بهمین منظور از یونیت SZCodeBaseX  و فانکشن SZEncodeBase64 آن استفاده شده است.این یونیت براحتی با جستجو در google قابل دانلود می باشد.

یک نمونه پرونده تولید شده با استفاده از تابع فوق از لینک زیر قابل دریافت می باشد:
ece_test.xml
2- ارسال پرونده از طریق ابمبل:

در مرحله بعد ، می توانید پرونده ece_test.xml تولید شده را که حاوی مشخصات شناسنامه ای نامه و تصویر آن می باشد ، با استفاده از پروتوکل SMTP و سرویس دهنده پست الکترونیکی (مثلا gmail) ارسال نمایید.

نکته مهم در ارسال نامه از طریق ایمیل آنست که برخی شرکتهای تولید کننده اتوماسیون اداری ، (مانند همکاران سیستم) اقدام به افزودن یک فیلد جدید به سرآیند (Header) پست الکترونیک می نمایند.این موضوع جهت شناسایی ایمیل ارسالی بعنوان یک مکاتبه الکترونیکی انجام شده و باعث می شود که گیرنده بتواند ایمیلهای دریافتی را که از نوع مکاتبه اداری با پروتوکل ECE هستند از ایمیلهای دیگر که ممکن است مکاتبه الکترونیکی نباشند تمییز دهد.گرچه افزودن این فیلد جدید (که در مستندات ECE بنام X-ECE_SEND و با مقدار ۱٫۰۱ تعریف شده است) بصورت یک عمل اختیاری(Optional) تعریف شده و نه اجباری ، لکن توصیه می شود برای سازگاری حداکثر با سایر اتوماسیونهای اداری ، این حوزه نیز به Mail Header اضافه گردد.

نمونه کد ارسال(شامل اضافه نمودن فیلد  X-ECE_SEND به Mail Header) بشرح  زیر می باشد:

Uses

IdBaseComponent, IdComponent, IdTCPConnection,IdTCPClient, IdMessageClient,IdPOP3, IdSMTP, IdHeaderList;

procedure SendByMail(mn:smallint;af:string);

var

ex:TIdHeaderList;

IdMsgSend:TIdMessage;

Begin

IdMsgSend:=TIdMessage.Create(Self);

IdMsgSend.MessageParts.Clear;

TIdAttachment.Create(IdMsgSend.MessageParts, ‘c:\ece_test.xml’);

ex:=TIdHeaderList.Create;

ex.Values['X-ECE_SEND']:=’1.01′;

with IdMsgSend do

begin

Body.Text:=’تصویر نامه به پیوست می باشد‘;

From.Text:=’info@tsa-co.ir’;

Recipients.EMailAddresses:=’ece@frw.ir’;

Subject:=’تعیین تکلیف اراضی اختلافی دامغان‘;

Priority:=TIdMessagePriority(mpHighest);

Headers.Add(’X-ECE_SEND: 1.01′);

SetExtraHeaders(ex);

end;

SMTP.UserID := ‘dp.semnan@frw.org.ir’;

SMTP.Password := ‘mypassword’;

SMTP.Host := ‘ mail.frw.org.ir’;

SMTP.Port := 25;

if not SMTP.Connected then SMTP.Connect;

SMTP.Send(IdMsgSend);

SMTP.Disconnect;

end;

اگر گیرنده را بصورت آزمایشی ، یک اکانت gmail تعریف کرده باشید ، با چک کردن ایمیل رسیده در gmail و سپس کلیک بر روی گزینه Show Orginal در آن ، می توانید اضافه شدن فیلد X-ECE_SEND  را ببینید.بعنوان نمونه:

….
….
….
Authentication-Results: mx.google.com; spf=neutral (google.com: 87.247.177.2 is neither permitted nor denied by best guess record for domain of dp.khuzestan@frw.org.ir) smtp.mail=dp.khuzestan@frw.org.ir
Message-Id: <4b672eba.1102be0a.1dd1.68a5SMTPIN_ADDED@mx.google.com>
Received: from UnknownHost [78.39.193.152] by mail.nedahosting.net with SMTP;
Mon, 1 Feb 2010 23:13:45 +0330
From: dp.khuzestan@frw.org.ir
Subject: Re:ECE 1388/11/12
To: gama@gmail.com
Content-Type: multipart/mixed; boundary=”=_NextPart_2rfkindysadvnqw3nerasdf”;
MIME-Version: 1.0
Date: Mon, 1 Feb 2010 23:12:20 +0330
X-Priority: 1
X-Library: Indy 8.0.25
X-ECE_SEND: 1.01
X-Cyberoam-Version: 9.6.0.62
X-Cyberoam-smtpxy-version: 1.0.7.0
X-Cyberoam-AV-Status: Clean
X-Cyberoam-Proto: SMTP
X-Cyberoam-AV-Policy: None
X-Cyberoam-AS-Policy: Global Spam Policy
….
….
….

This is a multi-part message in MIME format

امید است مقاله فوق بتواند راهگشای شرکتهای تولید کننده نرم افزارهای اتوماسیون اداری باشد.

این مقاله هم رو می توانید ببینید:

http://tsa-co.ir/blogs/support/?p=69