تطبيق عملي :
سنقوم الآن بعمل تطبيق بسيط ، سنقوم بالطلب من المستخدم ادخال كلمة المرور ، في حالة كون كلمة المرور صحيحة سوف نقوم بعرض رسالة ترحيب وإلا اعادة المحاولة لادخال كلمة المرور مرة أخرى .
لذا قم ببدء مشروع جديد 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 .
نكمل في الدرس القادم ...