الدرس الرابع:هياكل التحكم Control Structures

هنا سيتم شرح نظام أستريسك نظريا عن طريق سلسله من الدروس ان شاء الله تعالى.
أضف رد جديد
albalawi
مدير الموقع
مشاركات: 234
اشترك في: 11 مايو 2010, 19:53
مكان: Germany
اتصال:

الدرس الرابع:هياكل التحكم Control Structures

مشاركة بواسطة albalawi »

السلام عليكم ورحمة الله وبركاته.
بمساعده هذه الهياكل نستطيع ان نتحكم في مسير الاتصال,من حيث عامل التارخ او الوقت او اي شرط اخر وكذالك بامكاننا القفز الى مكان ما داخل خارطه الاتصال,وكذالك بامكاننا اجراء عمليات متكره.
تقسم الى شرطيه قفز والدوران.

الشرطيه:
وهي نوعين زمنيه وغير زميه
1-الزمنيه:
المقصود بالزمنيه هنا انه يتم التحقق من الوقت,على سبيل المثال اذا اردنا استقبال المكالمات فقط في ايام الدوام الرسمي
اوفي يوم محدد اوفي ساعه محدده فبامكاننا عمل ذالك .وذالك باستعمال الاقترانات التاليه:
IFTIME,GotoIfTime,ExecIfTime
IFTIME:وظيفه هذا الاقتران ارجاع القيمه التي خلف علامه ؟ اذا كان الوقت ضمن الوقت الموضوع داخله واذا كان الوقت خارج هذا المجال فسوف يرجع القيمه التي خلف :.
الصيغه:

كود: تحديد الكل

IFTIME(<timespec>?[<true>][:<false>]) 
مثال على أستخدام IFTIME:

كود: تحديد الكل

exten=>111,1,NoOp(----------exa8------------)
exten=>111,2,Set(A=${IFTIME(9:00-17:00|mon-fri|*|*?100:200)}) 
exten=>111,3,NoOp(A=${A})
GotoIfTime: وظيفه هذا الاقتران هو التحقق من ان الوقت الحالي اي وقت اتصال الشخص مطابقا للشروط التي داخل هذا الاقتران. اي انه بمكاننا وباستعمال
هذا الاقتران ان نتحكم في وقت استقبال المكالمات,حيث بامكاننا التحكم في الساعه و اليوم والشهر كماتشاهدون الصيغه:

كود: تحديد الكل

GotoIfTime(<time range>|<days of week>|<days of month>|<months>?[[context|]extension| ]pri)
بحيث انه :
  • time range:مدى الوقت,اي من ساعه كذا الى ساعه كذا:
    الصيغه التاليه:
    <hour>':'<minute>'-'<hour>':'<minute>
    القيم المحتمله:
    "*"| يعني جميع الاوقات
    hour:الساعات من 0 الى 23
    minute:الدقائق من 0 الى 59
    مثال:
    9:00-17:00
  • days of week:ايام الاسبوع
    الصيغه التاليه:
    :dayname :اي يوم معين
    <dayname>'-'<dayname> |:من يوم كذا الى يوم كذا
    "*" | :جميع الايام
    القيم المحتمله:
    "sun" | "mon" | "tue" | "wed" | "thu" | "fri" | "sat"
    مثال:
    mon-fri
  • days of month:اي ايام الشهرا
    الصيغه التاليه:
    <daynum> :يوم معين
    <daynum>'-'<daynum> :مدى معين من الايام
    "*" :كل الايام
    القيم المحتمله:من 1 حتى 31
    مثال:
    14-1
  • months:الشهر,شهر معين ام اشهر محدده ام كلها
    الصيغه التاليه:
    <monthname> : شهر معين
    <monthname>'-'<monthname>:مدى معين من الاشهر
    "*" :جميع الاشهر
    القيم المحتمله:
    "jan" | "feb" | "mar" | "apr" | "may" | "jun" | "jul" | "aug" | "sep" | "oct" | "nov" | "dec"
    مثال:
    may-aug
اسماء الايام والاشهر ليس case-sensitive اي انه اذا كان الاسم صغير الاحرف ام كبير الاحرف لافرق بينهما.
*:نستعمل هذه الاشاره لتدلنا على الجميع,اي جميع الساعات اوجميع الايام اوجميع الاشهروكذالك جميع ايام الشهر.
ويجب ان لا ننسى استعمال اشاره | للفصل بينهم.
وفي حال كان الشرط صحيحا فانه ينتقل الى الى العلامه او الى الوصله مع رقم الاولويه او الى جزء ما ثم الى الوصله ثم الى رقم الاولويه.الامثله التاليه ستوضح ذالك.
في المثال التالي يسمح بدخول المكالمات في الاوقات من الساعه التاسعه وحتى الساعه العاشره ليلا في الايام من السبت وحتى الخميس.
المثال:

كود: تحديد الكل

exten => 119,1,NoOp(---------exa9------------------------)
exten => 119,2,GotoIfTime(9:00-22:00|sat-thu|*|*?open) 
exten => 119,n,busy();we are closed
exten => 119,n,Hangup()
exten => 119,n(open),answer();we are open
exten => 119,n(open),Playback(welcome)
exten => 119,n,Hangup();
وفي المثال التالي السماح للمكالمات بالدخول فقط يوم الاحد من الساعه الثانيه عشره حتى الساعه العاشره مساءا.

كود: تحديد الكل

exten => 120,1,NoOp(---------exa9------------------------)
exten => 120,2,GotoIfTime(12:00-22:00|sun|*|*?open,10,1) 
exten => 120,n,busy();we are closed
exten => 120,n,Hangup()

[open]
exten => 10,1,answer();we are open
exten => 10,2,Playback(welcome)
exten => 10,3,Hangup()
ExecIfTime:هذا الاقتران وظيفته في حال تطابق الوقت تنفيذ احدى تطبيقات أستريسك. المثال التالي يوضح ذالك:

كود: تحديد الكل

exten=>113,1,NoOp(----------exa10------------)
exten=>113,2,ExecIfTime(9:00-17:00|mon-sun|*|*?hangup)
exten=>113,3,Playback(welcome)                    
exten=>113,4,Hangup();

2-الغير زمنيه:
وهنا يكفي ان يكون الشرط صحيحا وهي:
IF,GotoIf,GosubIf,ExecIf سوف نتناول كل اقتران على حده ,وسوف نبدأ ب IF

:IFوظيفه هذا الاقتران ارجاع القيمه التي خلف علامه ؟ اذا كان الشرط صحيحا والقيمه التي خلف:اذا كان خطأ.
المثال التالي يوضح ذالك:

كود: تحديد الكل

exten=>104,1,NoOp(----------exa11------------)
exten=>104,2,set(A=1)
exten=>104,3,Set(B=${IF($[ ${A} = 1]?100:200)}) 
exten=>104,4,NoOp(B=${B})
GotoIf: هذا الاقتران وظيفته التحقق من الشرط ثم القفز الى المكان المناسب حسب الشرط.
الصيغه كمايلي:([GotoIf(condition?label1[:label2
فاذا كان الشرط صحيح فسيتم القفز الى label1 واذا كان خطأ الى label2 .الافضل ان يكون بصيغه ال String اي ان يكون محاطا بالمنقوطتين.
ليس شرطا ان نعرف جهتين للقفز بل يمكننا تعريف واحده فقط. ويمكن ان يكون هدف القفز علامه Label اورقم اولويه او Extension مع رقم الاولويه اوجزء Context مع وصله مع رقم اولويه.
المثال التالي يوضح استعمال label1 واحد فقط:

كود: تحديد الكل

exten=>114,1,NoOp(----------exa11------------)
exten=>114,2,set(A=5)
exten=>114,3,GotoIf($["${A}" = "5"]?ok)
exten=>114,4,hangup()
exten=>114,n(ok),NoOp(----------ok------------)
exten=>114,n(ok),hangup()
المثال التالي يوضح كيفيه القفز الى واحد من ارقام الاولويه المعطاه:

كود: تحديد الكل

exten=>115,1,NoOp(----------exa12------------)
exten=>115,2,set(A=5)
exten=>115,3,GotoIf($[${A} = 5]?5:4)
exten=>115,4,hangup()
exten=>115,5,NoOp(----------ok------------)
exten=>115,6,hangup()
وهنا توضيح لعمليه القفز الى الى وصله ورقم اولويه:

كود: تحديد الكل

exten=>116,1,NoOp(----------exa13------------)
exten=>116,2,set(A=5)
exten=>116,3,GotoIf($[${A} = 5]?ok,1:4)
exten=>116,4,hangup()
exten=>ok,1,NoOp(----------ok------------)
exten=>ok,2,hangup()
واخيرا توضيح لعمليه القفز الى جزء مع وصله مع رقم الاولويه المثال التالي:

كود: تحديد الكل

exten=>117,1,NoOp(----------exa14------------)
exten=>117,2,set(A=5)
exten=>117,3,GotoIf($[${A} = 5]?ok,10,1:4)
exten=>117,4,hangup()
[ok]
exten=>10,1,NoOp(----------ok------------)
exten=>10,2,hangup()
طبعا كل ماينطبق على label ينطبق على label2 المثال التالي يوضح ذالك:

كود: تحديد الكل

exten=>118,1,NoOp(----------exa14------------)
exten=>118,2,set(A=4)
exten=>118,3,GotoIf($[${A} = 5]?ok,10,1:false,20,1)

[ok]
exten=>10,1,NoOp(----------ok------------)
exten=>10,2,hangup()

[false]
exten=>20,1,NoOp(-------false------------)
exten=>20,2,hangup()
GosubIf:وظيفه هذا الاقتران القفز والرجوع في حال ان الشرط كان صحيحا.القفز كما قلنا سابقا الى (رقم اولويه) او
الى (وصله ثم رقم اولويه)اوالى (جزء ثم وصله ثم رقم اولويه) اوممكن الى (علامه).
الصيغه:
GosubIf(condition?label1:label2)
المثال التالي يوضح عمل هذا الاقتران,هنا تم القفز الى (علامه)

كود: تحديد الكل

exten=>122,1,NoOp(----------exa13------------)
exten=>122,2,set(A=5)
exten=>122,3,GosubIf($[${A} = 5]?ok)
exten=>122,4,hangup()
exten=>122,n(ok),NoOp(----------ok------------)
exten=>122,n(ok),return()
ExecIf:وظيفه هذا الاقتران هو تنفيذ احدى تطبيقات أستريسك اذا كان الشرط صحيحا
الصيغه
ExecIF (<expr>|<app>|<data>)
المثال التالي يوضح ذالك:

كود: تحديد الكل

exten=>123,1,NoOp(----------exa13------------)
exten=>123,2,set(A=4)
exten=>123,3,ExecIf($[${A} = 5]|Playback|tt-weasels)
exten=>123,4,NoOp(----------ok------------)
exten=>123,5,hangup()
دوال القفز:
دوال القفز,وهي تساعدنا بالانتقال مباشره الى جزء او وصله اورقم اولويه وهما.
.Goto,Gosub

Goto:الانتقال مباشره الى مكان كما في الصيغ التاليه:

كود: تحديد الكل

Goto(context,extension,priority) 
Goto(extension,priority) 
Goto(priority) 
Goto(context,extension,label) 
Goto(extension,label) 
Goto(label)
مثال على ذالك:

كود: تحديد الكل

exten=>122,1,NoOp(----------exa13------------)
exten=>122,2,Goto(5)
exten=>122,3,NoOp(--------------X----------------)
exten=>122,4,NoOp(---------------X---------------)
exten=>122,5,NoOp(----------ok------------)
exten=>122,6,hangup()

:Gosubوظيفته تنفيذ عده وصلات ثم العوده لتنفيذ الوصله التاليه للمكان الذي خرج منه.
صيغه الانتقال اوالقفز كمايلي:

كود: تحديد الكل

Gosub(context,extension,priority) 
Gosub(extension,priority) 
Gosub(priority)
مثال يوضح ذالك:

كود: تحديد الكل

[Test8]
exten=>122,1,NoOp(----------exa13------------)
exten=>122,2,Gosub(subTest,100,1)
exten=>122,3,NoOp(------------continue---------------)
exten=>122,4,hangup()

[subTest]
exten=>100,1,NoOp(---------hello sub---------)
exten=>100,2,return()
اصدار 1.6 تاخذ متغيرات
دوال الدوران:
يمكن كذالك في أستريسك القيام بعمليات دوران.اي تنفيذ مجموعه من الوصلات عده مرات متتاليه.ويتم ذالك عن طريق استخدام While / EndWhile .
While / EndWhile :يتم تنفيذ كل مابين EndWhile وWhile طالما كان الشرط داخلWhile صحيحا.

الصيغه:

كود: تحديد الكل

While(condition)
EndWhile 
مثال يوضح ذالك:

كود: تحديد الكل

مثال يوضح ذالك:
exten => 123,1,Answer()
exten => 123,n,Set(i=1) 
exten => 123,n,While($[${i} < 5]) 
exten => 123,n,SayNumber(${i}) 
exten => 123,n,Set(i=$[${i} + 1]) 
exten => 123,n,EndWhile
exten=>  123,n,Hangup()
جميع الحقوق محفوظة لموقع أستريسك للعرب
albalawi
مدير الموقع
مشاركات: 234
اشترك في: 11 مايو 2010, 19:53
مكان: Germany
اتصال:

Re: الدرس الرابع:هياكل التحكم Control Structures

مشاركة بواسطة albalawi »

ءءء
elmadysm
مشاركات: 27
اشترك في: 09 فبراير 2011, 21:16

Re: الدرس الرابع:هياكل التحكم Control Structures

مشاركة بواسطة elmadysm »

مجهود رائع
بارك الله فيك
mahmoudelkholy
مشاركات: 3
اشترك في: 18 إبريل 2013, 00:10

Re: الدرس الرابع:هياكل التحكم Control Structures

مشاركة بواسطة mahmoudelkholy »

جزاك الله خيرا
zimartin.40
مشاركات: 4
اشترك في: 21 يوليو 2015, 18:48

Re: الدرس الرابع:هياكل التحكم Control Structures

مشاركة بواسطة zimartin.40 »

شكرا شكرا
أضف رد جديد

العودة إلى ”الجزء الاول:المقدمه والدروس Introduction and lessons“