تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
الدرس الثامن والستون - مقدمة إلى عالم wwf
#1
كاتب الموضوع : أحمد جمال

بسم الله الرحمن الرحيم .
السلام عليكم ورحمة الله وبركاته .


منذ الاصدار .net 3.0 تم اضافة ما يسمى بـ Windows Workflow Foundation ويعرف اختصاراً WWF ، وهي مجموعة من المهام والدوال API تسمح لك بادارة ومراقبة وتنفيذ الـ workflow او سير العمليات إن صحت الترجمة .
طبعاً تعد هذه الخاصية واحدة من انفع الخصائص لمهندسي البرمجيات التي تمت اضافتها داخل ال viusal studio حيث اصبح بالامكان دمج ال workflows مع الكود أو التنفيذ الفعلي مباشرة .
ال WF او ال Workflow هي مجموعة العمليات التي يتم تشكيل البرنامج بناء عليها ، حيث يتكون البرنامج من مجموعة مرتبطة مع بعضها البعض من ال Business Process والتي تحتوي بدورها على مجموعة من المهام ذات الصلة بينها وبين بعضها البعض والتي تعمل سوية .

مثال :
خدمة الصيانة لمنتج : يحتوي هذا البرنامج على طلب الايصال وادخال رقمه وعمل Check على قاعدة البيانات للتأكد من وجوده ثم تقديم خدمة الصيانة ثم طباعة ايصال صيانة .
هذه العملية كلها تسمى Business Process والعناصر الداخلية تسمى tasks والبرنامج يتكون من عدة Business Process .
هناك العديد من البرامج التي تقدم خدمة اداة ال Workflow ، ولكن الميزة هنا انها مرتبطة ارتباطاً وثيقاً بالكود بحيث يمكن عمل trace لكل واحدة على حدة وتتبع الأخطاء إن وجدت ، اضف إلى ذلك امكانيه التعديل لاحقاً في الجزئيات الكبرى بسهولة ويسر .

سنبدأ ابتداء من الدرس القادم في معرفة WWF .
}}}
تم الشكر بواسطة:
#2
مكونات واساسيات WF :
ال WF هي كود قابل للتنفيذ وليس فقط مجرد رسومات توضيحية مثل visio ، لذا فالجمل الشرطية والتكرارات وخلافه الموجودة في ال WF يتم تنفيذها فعلياً .
ولهذا السبب فال WF تحتوي على namespaces و assemblies وخلافه شأنها شأن اي مكونات لل .net .

Workflow Activity :
يتم توصيف العمل الخاص بنا على شكل Activities ويتيح لنا الفيجوال ستوديو وسائل للربط والانتقال بينهم وبين البعض مثل if else أو delay لفترة أو حصول Invoke معين او يتم تنفيذها على شكل خطوات معينة :

البدأ مع WF :
قم بانشاء مشروع جديد ، اجعل نوع المشروع Workflow ثم اختر Empty Workflow :



Empty Workflow : مشروع فارغ لا يحتوي على اي تنسيقات خاصة ، اضافة للأنواع التالية والتي تعد اساسيات عالم تصميم البرمجيات :

Sequential Workflow :
النوع الأول من انواع ال Diagrams التي توضح ال UML الخاص بنا ، يتم توضيح العمل فيه على شكل عمليات متلاحقة متتالية توضح الشكل العام لكامل العمليات ، وهو النوع الأشهر والأكثر استخداماً :


State Machine Workflow :
تهتم اكثر ما تهتم بالأحداث عن طريق مجموعة من الطلبات والتغييرات :

}}}
تم الشكر بواسطة:
#3
تطبيق عملي :

سنقوم الآن بعمل تطبيق بسيط ، سنقوم بالطلب من المستخدم ادخال كلمة المرور ، في حالة كون كلمة المرور صحيحة سوف نقوم بعرض رسالة ترحيب وإلا اعادة المحاولة لادخال كلمة المرور مرة أخرى .

لذا قم ببدء مشروع جديد Sequential Workflow Console Application وسمه كما تريد ، ستظهر لك شاشة المصمم بالشكل التالي كبداية :


الآن سنقوم بادراج Code Activity وسنضع الأمر التالي في الحدث codeActivity1_ExecuteCode :

C#:

كود :
private void codeActivity1_ExecuteCode(object sender, EventArgs e)
{
Console.ForegroundColor = ConsoleColor.Yellow;
Console.WriteLine("***** First WPF Example *****\n\n");
Console.ForegroundColor = ConsoleColor.White;
}
vb.net:

كود :
Private Sub codeActivity1_ExecuteCode(ByVal sender As Object, ByVal e As EventArgs)
Console.ForegroundColor = ConsoleColor.Yellow

Console.WriteLine("***** First WPF Example *****" & Chr(10) & "" & Chr(10) & "")

Console.ForegroundColor = ConsoleColor.White
End Sub
الخطوة التالية هي اضافة حلقة تكرارية لا يتم الخروج منها الا بادخال كلمة مرور صحيحة ، لذا قم بسحب While Loop ، وسنقوم بتحديد ال Condition الذي ستخرج منه اما بناء على :

- دالة function تعود بقيمة منطقية Boolean بحيث يتم استدعائها مع كل Loop وتعيد false للتوقف أو true للاستمرار.
- او بناء على declarative rule condition اي عن طريق جملة خاصة .

في مثالنا هذا سنعرف دالة AskAgain والتي ستعيد لنا True في حالة الجملة الخاطة لاعادة السؤال فيما تعيد لنا false في حالة الوصول لكلمة السر الصحيحة .

لذا من الشاشة الجانبية اكتب اسم الدالة في الشرط Condition بالشكل التالي - بعد تعريف خاصية بكلمة المرور اولاً - :


وكود الدالة :
C#:

كود :
public string Password { get; set; }
private void AskAgain(object sender, ConditionalEventArgs e)
{
Console.Write("Enter Password: ");
Password = Console.ReadLine();
if (Password == "Ahmed Gamal")
e.Result = false;
else
e.Result = true;
}
vb.net:

كود :
Public Property Password() As String
Get
End Get
Set
End Set
End Property
Private Sub AskAgain(ByVal sender As Object, ByVal e As ConditionalEventArgs)
Console.Write("Enter Password: ")
Password = Console.ReadLine()

If Password = "Ahmed Gamal" Then
e.Result = False
Else
e.Result = True
End If
End Sub

الآن خطوتنا الأخيرة هي اضافة Activity فيما لو لم يتم ادخال كلمة مرور صحيحة ، سيتم فيها طباعة كلمة This Password is Wrong ، لذا قم بسحب Activity وضع هذا الكود فيها :
C#:

كود :
private void codeActivity2_ExecuteCode(object sender, EventArgs e)
{
Console.WriteLine("This Password is Wrong...");
}
vb.net:

كود :
Private Sub codeActivity2_ExecuteCode(ByVal sender As Object, ByVal e As EventArgs)
Console.WriteLine("This Password is Wrong...")
End Sub
هكذا سيكون الشكل الكامل لل Sequential WF بالشكل التالي :



وشاشة النتائج :


*** لاحظ ان مثل هذا ال WF يمكن تطبيقه على نظام دخول معقد جداً كما هو الحال في نظام دخول بسيط ، نفس الهيكل مع اختلاف محتويات الكود لكل منهما ، لكن الصورة العامة واضحة وهو ما يفيد كثيراً في تسهيل قراءة وفهم محتويات الكود اضافة لعمليات ال trace وال Debug .

نكمل في الدرس القادم ...
}}}
تم الشكر بواسطة:
#4
WF Code Liabrary :
في هذه النوعية اصبح بامكاننا انشاء WF يمكنه العمل مع ASP.net أو مع Windows Forms وليس فقط Console ، حيث سيتم تحويلها إلى ملف .dll ومن ثم استخدامها في اي تطبيق آخر .

إلى هنا انتهت دروسنا حول WF ، كنت اود اضافة درس حول ما يحدث حقيقة في عالم ال WF ولكني وجدت نفسي غير مؤهل لاعطاء مثل هذا الدرس في حين انني لم اجرب فهم العملية بطريقة كاملة ، لذا اعتذر .

درسنا القادم سيكون عن WCF بمشيئة الله تعالى ...

والله الموفق ...
والسلام عليكم ورحمة الله وبركاته .
}}}
تم الشكر بواسطة:



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم