الاثنين، 23 يناير، 2012

أتمتة طباعة صفحات الويب بواسطة فيجوال بيسك سكربت VBS

      
        شغلت في الفترة الماضية عن المدونة والتدوين كثيراً، وذلك لأسباب كثيرة، ولكن أحد هذه الأسباب اني حقيقة لم أجد ما يستحق التدوين فآثرت ان أبقي صامتاً علي ان أكتب كلاماً لا فائدة منه.
      في خلال هذا الشهر كان هناك الكثير من الضغط في العمل؛ مئات الإستمارات لإدخالها و مثلها لطباعتها هذا غير الإجراءات المكتبية الأخري، فراودتني فكرة ان أقوم بعمل برنامج يقوم بأتمتة العمل لي (حقيقة كنت فقط اتضجر)، كلمة برنامج تبدو كبيرة علي ما قمت به إنه في الحقيقة سكريبت صغير بلغة فيجوال بيسك سكربت. المشكلة في تطبيق المؤسسة انه web based، مما يعني ان البحث عن بيانات محددة يتطلب اولا عمل بحث و من ثم إختيار الشخص المراد ومن ثم عرض البيانات ومن ثم إعطاء أمر الطباعة، وهنا يأتي هذا السكربت لإنقاذي. فكرة عمله هو أن السكربت يقوم يقوم بالبحث في قاعدة بيانات المؤسسة عن بيانات محددة لأشخاص يتم تحديدهم له عبر تزويده بملف نصي يحتوي علي أرقام هؤلاء الأشخاص ومن ثم يعرض هذه البيانات ويقوم بطباعتها (من دون تدخلي طبعا). قبل أن أقوم ببرمجة هذا السكربت لم أكن اعرف عن VBS إلا إسمها ولكن ما سهل علي  التعامل معها هو المكتبة الضخمة التي توفرها مايكروسوفت لدعم اللغات التي تنتجها ( حقيقة مايكروسوفت تعرف كيف تجذب المبرمجين)، إضغط هنا للذهاب إلي مكتبة VBS.
أترك لكم السكربت لإستخدامه ( إن إحتجتم لذلك طبعاً :) ) أو تعديله بما يناسب حوجتكم. للإستخدام كل ما عليك هو نسخ السكريبت إلي ملف نصي ومن ثم حفظ الملف بلاحقة  vbs. ، عدل مسار ملف المتغيرات بما يناسبك، و عدل رابط صفحة الويب.
Option Explicit
'Declaring variables
Dim ie, arrLines, arrElement, oFSO
'setting file system object to read from the source text file
Set oFSO = WScript.CreateObject("Scripting.FileSystemObject")
arrLines = oFSO.OpenTextFile("c:\variables.txt").ReadAll, VbCrLf)

' halt internet explorer
Sub WaitForLoad(obj)
Do While ie.Busy: Loop
Do While obj.readyStat <> 4: Loop
wscript.sleep(100)
End Sub
'set the ie properaties
ie.ToolBar = 0
ie.StatusBar = 1
ie.Width = 999
ie.Height = 999
ie.Left = 0
ie.Top = 0
ie.Visible = 1
'start the loop throught the txt file
For arrElement in arrLines
fe.Navigate("http://www.example.com/contact.php?contact_id="+arrElement+"print-option=1")
' waiting ie  to load the page
WaitForLoad(ie)
' print the loaded page
ie.ExecWB 6, 2
Next

'wait until all pages loads
WaitForLoad(ie)

'close Internet Explorer
ie.quit

هناك تعليق واحد:

  1. جاري التجربة ونشوف الحاصل فيهو شنو .. ونرجع ليك بالتعليقات عشان تورينا ممكن يحصل شنو ..
    لكن شكلو كده مبدئياً كلام جميل جداً ..

    ردحذف