hilalss
15 Jul 2008, 10:15 PM
السلام عليكم ...
بعد غيابي الطويل عن منتدى سفن ... أود أن أقدم لكم درس عن ال Web Service في الفلاش.
مستوى الدرس: متوسط – محترف.
أهداف الدرس: التعرف على طريقة ربط الفلاش مع البرامج الأخرى بطريقة web service.
المفردات:
Simple Object Access Protocol :SOAP
وهو بروتوكول يعتمد على الXML لتمرير البيانات والمعلومات عن طريق الHTTP.
Web Services Description Language :WSDL
لوصف الخدمات و العمليات الموجودة. وتكتب بال XML
EXtensible Markup Language :XML
ماذا سنستفيد من الدرس: هذا الدرس سيفتح الأفق لعملية تمرير البيانات بين الفلاش وأي لغة أخرى تدعم SOAP و WSDL.
اللغات المستخدمة في الدرس: PHP + ActionScript 2.0+
ملاحظات أخرى:
- استخدمت professional Flash 8 لتنفيذ هذا الدرس.
- ال XML هي الأساس في تناقل المعلومات في هذا الدرس ... ولكن لا يتطلب منك أن تكون فاهم لها لتنفيذ هذا المشروع، إنما ستكون إضافة مهمة للمبرمج.
- لأن هذا القسم مختص بالفلاش ... بإمكانك تجاهل القسم المختص بال php والذهاب مباشرة لتعلم الجزء المختص بالفلاش واستخدم بدل جزء الphp الوصلة التالية التي بها نفس ما ذكر في الدرس معد وجاهز للإستخدام: http://www.techvoicellc.com/Tutorials/server.php?wsdl
- يمكن استخدام أي لغة أخرى بدل الPHP مثل الASP.net وغيرها لتنفيذ المشروع.
المتطلبات:
- اصدار الفلاش: Flash MX Professional 2004.أو النسخ الأحدث ولا بد أن تكون Professional.
- في حالة قررت عدم استخدام صفحة ال PHP الجاهزة للاستخدام في الدرس :
وأحببت تعلم كيفية تنفيذ web service server باستخدام PHP فيتطلب عليك التالي:
o وجود سيرفير يشغل ال PHP.
o عليك تحميل هذه الlibrary ووضعها في ملف المشروع داخل ملف اسمه "lib" أو أي مكان اذا كنت محترف. ( nusoap-0.7.3.zip (http://sourceforge.net/project/showfiles.php?group_id=57663)) حيث هذه open source library معدة للتعامل مع SOAP و WSDL في الPHP
المصادر:
- http://www.w3schools.com/webservices/default.asp
- ال help الخاص ب فلاش 8.
المقدمة:
رغم ان في هذا الدرس نركز على الفلاش ... إلا أن الحقيقة ان الجزء المختص بالفلاش في هذا المشروع هو جزء بسيط جدا كما سنرى.
وقد ترددت في سرد شرح عن ماهية الweb service وكيفية عملها ولكن رأيت أنه سيحيد بنا عن أهداف الدرس وبالتالي لمن لا يعرف عنها أنصح بتصفح الموقع التالي(انجليزي): http://www.w3schools.com/webservices/default.asp
ما يهمنا أن الهدف من تصميمها هو تمكين البرامج المختلفة من التواصل مع بعضها. ولذلك فأي برنامج يدعم هذه الخاصية سيتمكن من التواصل مع أي برنامج أخر. و الفلاش له خاصية التواصل باستخدام هذه الخدمة. و استخدام ال web service يمكن حصرها لهدفين:
- إعادة استخدام بعض البرامج المعدة سابقا. مثال: تخيل أنك قمت بعمل برنامج لتحويل العملات. وبعد فترة أردت ان تعمل برنامج آخر به خاصية تحويل العملات ... فلا داعي لاعادة برمجة ما قمت به .. حيث بامكانك عن طريق الweb service ان تعيد استخدام البرنامج السابق في مشروعك الجديد.
-التواصل بين مختلف البرامج بغض النظر عن اللغة أو النظام المستخدم في تصميمها.
المشروع:
لعمل مشروع يعتمد على ال web service علينا ان نعمل جزئين اساسيان:
1) server: وهنا سنعتمد على الPHP لتكوين صفحة السيرفر الخاصة للرد والاستجابة لطلبات الClient عن طريق ال web service.
2) Client: وهنا سنعتمد على الفلاش للاستفادة من الخدمات التي يقدمها ال server.
1) صفحة Server.php:
سنقوم بعمل web service لها عدد 2 methods تقوم بالتالي:
1)(getString(S,user: ستقوم باختبار المتغير الآتي من الفلاشS وبناء عليه تقوم بإرجاع التالي:
(if S=0)
- مرحبا بك في موقع سفن التعليمي (user).
(if S=1)
- تحيات hilalss (user).
(else)
- S = ? , user=?.
2) (getTimeDate(gmt: سيقوم بإرجاع array بحيث العنصر الأول منه سيرجع التاريخ ... وبالعنصر الثاني من الarray سنضع الوقت مع مراعاة فرق الساعات عن جرينيتش نمرره من الفلاش في المتغير gmt. حيث يفيد هذا الفلاش في معرفة الوقت الصحيح من السيرفير وليس من المستخدمين للفلاش .
الخطوة الأولى: قم بوضع الكود التالي في صفحة server.php (ملاحظة بإمكانك تجاهل هذا الجزء والانتقال مباشرة الى جزء الفلاش)
<?php
// load SOAP library << راعي فيها المكان الذي وضعت به
require_once("lib/nusoap.php");
// set namespace << أي اسم مميز يستخدم كتعريف للإستفادة من الخدمة
$ns="http://www.techvoicellc.com/Tutorials//";
// نكون soap سيرفر
$server = new soap_server();
// اعداد wsdl service
$server->configureWSDL('Saven7',$ns);
$server->wsdl->schemaTargetNamespace=$ns;
//.................................................. ...................
//تعريف نوع غير معرف افتراضيا في ال wsdl
$server->wsdl->addComplexType(
'ArrayOfstring',
'complexType',
'array',
'',
'SOAP-ENC:Array',
array(),
array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'string[]')),
'xsd:string'
);
// register a web service method << هنا نسجل العمليات التي نريدها ان تتواصل
$server->register('getString', //هذا اسم العملية هنا في الكود
array('S' => 'xsd:integer','user' => 'xsd:string'), // input parameters المتغيرات المدخلة
array('myRs' => 'xsd:string'), // output parameter العمليات الخارجة
$ns, // namespace
"$ns#getString", // soapaction يتنفذ الأمر
'rpc', // style
'encoded', // use
'methods by Saven7 to return strings' // documentation هذا للوصف
);
//..................................
$server->register('getTimeDate',
array('gmt' => 'xsd:float'), // input parameters
array('TmDtAr' => 'tns:ArrayOfstring'), // output parameter
$ns, // namespace
"$ns#getTimeDate", // soapaction
'rpc', // style
'encoded', // use
'method by Saven7 to get the server time and Date as an array' // documentation
);
//--------------------------------------------------------
function getString($S, $user){
switch($S){
case 0: $myStr = "(".$user.") مرحبا بك في موقع سفن التعليمي";
break;
case 1: $myStr = "(".$user.") hilalss تحيات";
break;
default: $myStr = "S = $S , user=$user";
}
return new soapval('return','xsd:string',$myStr);
}
function getTimeDate($gmt){
$date1 = gmdate("Y-m-d",time()+($gmt*60*60));
$time1 = gmdate("H:i:s",time()+($gmt*60*60));
$dtTm = array("".$date1,"".$time1);
return new soapval('return','tns:ArrayOfstring',$dtTm);
}
//.................................................. .............
// service the methods لتنفيذ الخدمة حسب الطلب
$server->service($HTTP_RAW_POST_DATA);
?>
2) الClient : (فلاش)
الخطوة الثانية: ضع الكود التالي في الفريم الأول للفلاش :
(ملاحظة: اعتمدت في هذا الكود على الصفحة التي أعددتها مسبقا ... اذا كنت ممن قام بالخطوة الأولى عليك مراعاة ان تستبدل الوصلة فيweb service بوصلة الصفحة التي اعددتها انت).
//لا بد من تحميل هذا "الكلاس" لنتمكن من استخدام الويب سيرفيس
import mx.services.WebService;
//تكوين ويب سيرفيس للاتصال بالسيرقر
myService = new WebService("http://www.techvoicellc.com/Tutorials/server.php?wsdl");
//----------- هنا ننادي ما نشاء الحصول عليه من السيرفر -----
dateTime = myService.getTimeDate(4);
getString1 = myService.getString(0,"Hilal");
getString2 = myService.getString(1,"Hilal");
getString3 = myService.getString(2,"Hilal");
//------------- هنا نقوم بتجربة في حالة عملنا خطأ ----
testFault = myService.myWrongMethod("Hilal");
//----------هذا القسم يقوم باستلام ما طلبناه
dateTime.onResult = function(result)
{
trace("--------------------");
trace("التاريخ: "+result[0]);
trace("الوقت: "+result[1]);
trace("--------------------");
}
getString1.onResult = function(result)
{
trace("getString(0,\"Hilal\"):"+result);
}
getString2.onResult = function(result){
trace("getString(1,\"Hilal\"):"+result);
}
getString3.onResult = function(result)
{
trace("getString(2,\"Hilal\"):"+result);
}
//-------- هنا تجربه ما يمكن عمله لمعرفة الأخطاء
testFault.onFault = function(fault){
trace("fault : "+fault.faultstring);
}
أرأيتم سهولة الاتصال من قبل الفلاش ... بهذه السهولة يمكن للفلاش الاتصال بال web services ... ولكم ان تكتشفوا امكانيات الweb service بصورة أكبر بتصفح ال help الخاص بالفلاش.
وعذرا للاعتماد على ال trace لتبسيط الدرس. ولكن هل تعلمون ان هناك عدة طرق أخرى للاتصال بال web service عن طريق الفلاش .... ومن هذه الطرق هناك طريقة نستطيع الاتصال بها من دون كتابة كود action script أو بالأحرى سنكتب سطر واحد فقط للتنفيذ !!!!!!! نعم بالامكان ....
في الأخير أعتذر عن شرح الكود فقط بقليل من ال comments عليه ... أتمنى أن تكون كافية لفهم الدرس. وأترك لكم حرية التفاعل والسؤال عن أي شي مبهم وغير مفهوم لأني اخترت هذه الطريقة لتمكنكم من اكتساب مهارة أكبر من خلال التقصي ومحاولة فهم ما بين سطور الكود.
آخر ملاحظة:
طريقة استخدام ال web service أفضل من استخدام loadVars لتواصل الفلاش مع اللغات الأخرى. وهي ذات سرعة وكفاءة عالية في المعلومات البسيطة والمتوسطة ( تدعم مختلف اللغات كالعربية، ممكن تمرير الarray وال object بتوافق تام ... الخ) .... وتتميز بسهولة وسرعة تنفيذها في الفلاش ...
ولكن في حالة تمرير بيانات كبيرة جدا .... فالخيار دائما هو استخدام Flash Remoting... وهي الطريقة الأسرع والأمثل على الإطلاق...
وبالطبع لكم حرية التعقيب
خالص تحياتي
هلال
بعد غيابي الطويل عن منتدى سفن ... أود أن أقدم لكم درس عن ال Web Service في الفلاش.
مستوى الدرس: متوسط – محترف.
أهداف الدرس: التعرف على طريقة ربط الفلاش مع البرامج الأخرى بطريقة web service.
المفردات:
Simple Object Access Protocol :SOAP
وهو بروتوكول يعتمد على الXML لتمرير البيانات والمعلومات عن طريق الHTTP.
Web Services Description Language :WSDL
لوصف الخدمات و العمليات الموجودة. وتكتب بال XML
EXtensible Markup Language :XML
ماذا سنستفيد من الدرس: هذا الدرس سيفتح الأفق لعملية تمرير البيانات بين الفلاش وأي لغة أخرى تدعم SOAP و WSDL.
اللغات المستخدمة في الدرس: PHP + ActionScript 2.0+
ملاحظات أخرى:
- استخدمت professional Flash 8 لتنفيذ هذا الدرس.
- ال XML هي الأساس في تناقل المعلومات في هذا الدرس ... ولكن لا يتطلب منك أن تكون فاهم لها لتنفيذ هذا المشروع، إنما ستكون إضافة مهمة للمبرمج.
- لأن هذا القسم مختص بالفلاش ... بإمكانك تجاهل القسم المختص بال php والذهاب مباشرة لتعلم الجزء المختص بالفلاش واستخدم بدل جزء الphp الوصلة التالية التي بها نفس ما ذكر في الدرس معد وجاهز للإستخدام: http://www.techvoicellc.com/Tutorials/server.php?wsdl
- يمكن استخدام أي لغة أخرى بدل الPHP مثل الASP.net وغيرها لتنفيذ المشروع.
المتطلبات:
- اصدار الفلاش: Flash MX Professional 2004.أو النسخ الأحدث ولا بد أن تكون Professional.
- في حالة قررت عدم استخدام صفحة ال PHP الجاهزة للاستخدام في الدرس :
وأحببت تعلم كيفية تنفيذ web service server باستخدام PHP فيتطلب عليك التالي:
o وجود سيرفير يشغل ال PHP.
o عليك تحميل هذه الlibrary ووضعها في ملف المشروع داخل ملف اسمه "lib" أو أي مكان اذا كنت محترف. ( nusoap-0.7.3.zip (http://sourceforge.net/project/showfiles.php?group_id=57663)) حيث هذه open source library معدة للتعامل مع SOAP و WSDL في الPHP
المصادر:
- http://www.w3schools.com/webservices/default.asp
- ال help الخاص ب فلاش 8.
المقدمة:
رغم ان في هذا الدرس نركز على الفلاش ... إلا أن الحقيقة ان الجزء المختص بالفلاش في هذا المشروع هو جزء بسيط جدا كما سنرى.
وقد ترددت في سرد شرح عن ماهية الweb service وكيفية عملها ولكن رأيت أنه سيحيد بنا عن أهداف الدرس وبالتالي لمن لا يعرف عنها أنصح بتصفح الموقع التالي(انجليزي): http://www.w3schools.com/webservices/default.asp
ما يهمنا أن الهدف من تصميمها هو تمكين البرامج المختلفة من التواصل مع بعضها. ولذلك فأي برنامج يدعم هذه الخاصية سيتمكن من التواصل مع أي برنامج أخر. و الفلاش له خاصية التواصل باستخدام هذه الخدمة. و استخدام ال web service يمكن حصرها لهدفين:
- إعادة استخدام بعض البرامج المعدة سابقا. مثال: تخيل أنك قمت بعمل برنامج لتحويل العملات. وبعد فترة أردت ان تعمل برنامج آخر به خاصية تحويل العملات ... فلا داعي لاعادة برمجة ما قمت به .. حيث بامكانك عن طريق الweb service ان تعيد استخدام البرنامج السابق في مشروعك الجديد.
-التواصل بين مختلف البرامج بغض النظر عن اللغة أو النظام المستخدم في تصميمها.
المشروع:
لعمل مشروع يعتمد على ال web service علينا ان نعمل جزئين اساسيان:
1) server: وهنا سنعتمد على الPHP لتكوين صفحة السيرفر الخاصة للرد والاستجابة لطلبات الClient عن طريق ال web service.
2) Client: وهنا سنعتمد على الفلاش للاستفادة من الخدمات التي يقدمها ال server.
1) صفحة Server.php:
سنقوم بعمل web service لها عدد 2 methods تقوم بالتالي:
1)(getString(S,user: ستقوم باختبار المتغير الآتي من الفلاشS وبناء عليه تقوم بإرجاع التالي:
(if S=0)
- مرحبا بك في موقع سفن التعليمي (user).
(if S=1)
- تحيات hilalss (user).
(else)
- S = ? , user=?.
2) (getTimeDate(gmt: سيقوم بإرجاع array بحيث العنصر الأول منه سيرجع التاريخ ... وبالعنصر الثاني من الarray سنضع الوقت مع مراعاة فرق الساعات عن جرينيتش نمرره من الفلاش في المتغير gmt. حيث يفيد هذا الفلاش في معرفة الوقت الصحيح من السيرفير وليس من المستخدمين للفلاش .
الخطوة الأولى: قم بوضع الكود التالي في صفحة server.php (ملاحظة بإمكانك تجاهل هذا الجزء والانتقال مباشرة الى جزء الفلاش)
<?php
// load SOAP library << راعي فيها المكان الذي وضعت به
require_once("lib/nusoap.php");
// set namespace << أي اسم مميز يستخدم كتعريف للإستفادة من الخدمة
$ns="http://www.techvoicellc.com/Tutorials//";
// نكون soap سيرفر
$server = new soap_server();
// اعداد wsdl service
$server->configureWSDL('Saven7',$ns);
$server->wsdl->schemaTargetNamespace=$ns;
//.................................................. ...................
//تعريف نوع غير معرف افتراضيا في ال wsdl
$server->wsdl->addComplexType(
'ArrayOfstring',
'complexType',
'array',
'',
'SOAP-ENC:Array',
array(),
array(array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'string[]')),
'xsd:string'
);
// register a web service method << هنا نسجل العمليات التي نريدها ان تتواصل
$server->register('getString', //هذا اسم العملية هنا في الكود
array('S' => 'xsd:integer','user' => 'xsd:string'), // input parameters المتغيرات المدخلة
array('myRs' => 'xsd:string'), // output parameter العمليات الخارجة
$ns, // namespace
"$ns#getString", // soapaction يتنفذ الأمر
'rpc', // style
'encoded', // use
'methods by Saven7 to return strings' // documentation هذا للوصف
);
//..................................
$server->register('getTimeDate',
array('gmt' => 'xsd:float'), // input parameters
array('TmDtAr' => 'tns:ArrayOfstring'), // output parameter
$ns, // namespace
"$ns#getTimeDate", // soapaction
'rpc', // style
'encoded', // use
'method by Saven7 to get the server time and Date as an array' // documentation
);
//--------------------------------------------------------
function getString($S, $user){
switch($S){
case 0: $myStr = "(".$user.") مرحبا بك في موقع سفن التعليمي";
break;
case 1: $myStr = "(".$user.") hilalss تحيات";
break;
default: $myStr = "S = $S , user=$user";
}
return new soapval('return','xsd:string',$myStr);
}
function getTimeDate($gmt){
$date1 = gmdate("Y-m-d",time()+($gmt*60*60));
$time1 = gmdate("H:i:s",time()+($gmt*60*60));
$dtTm = array("".$date1,"".$time1);
return new soapval('return','tns:ArrayOfstring',$dtTm);
}
//.................................................. .............
// service the methods لتنفيذ الخدمة حسب الطلب
$server->service($HTTP_RAW_POST_DATA);
?>
2) الClient : (فلاش)
الخطوة الثانية: ضع الكود التالي في الفريم الأول للفلاش :
(ملاحظة: اعتمدت في هذا الكود على الصفحة التي أعددتها مسبقا ... اذا كنت ممن قام بالخطوة الأولى عليك مراعاة ان تستبدل الوصلة فيweb service بوصلة الصفحة التي اعددتها انت).
//لا بد من تحميل هذا "الكلاس" لنتمكن من استخدام الويب سيرفيس
import mx.services.WebService;
//تكوين ويب سيرفيس للاتصال بالسيرقر
myService = new WebService("http://www.techvoicellc.com/Tutorials/server.php?wsdl");
//----------- هنا ننادي ما نشاء الحصول عليه من السيرفر -----
dateTime = myService.getTimeDate(4);
getString1 = myService.getString(0,"Hilal");
getString2 = myService.getString(1,"Hilal");
getString3 = myService.getString(2,"Hilal");
//------------- هنا نقوم بتجربة في حالة عملنا خطأ ----
testFault = myService.myWrongMethod("Hilal");
//----------هذا القسم يقوم باستلام ما طلبناه
dateTime.onResult = function(result)
{
trace("--------------------");
trace("التاريخ: "+result[0]);
trace("الوقت: "+result[1]);
trace("--------------------");
}
getString1.onResult = function(result)
{
trace("getString(0,\"Hilal\"):"+result);
}
getString2.onResult = function(result){
trace("getString(1,\"Hilal\"):"+result);
}
getString3.onResult = function(result)
{
trace("getString(2,\"Hilal\"):"+result);
}
//-------- هنا تجربه ما يمكن عمله لمعرفة الأخطاء
testFault.onFault = function(fault){
trace("fault : "+fault.faultstring);
}
أرأيتم سهولة الاتصال من قبل الفلاش ... بهذه السهولة يمكن للفلاش الاتصال بال web services ... ولكم ان تكتشفوا امكانيات الweb service بصورة أكبر بتصفح ال help الخاص بالفلاش.
وعذرا للاعتماد على ال trace لتبسيط الدرس. ولكن هل تعلمون ان هناك عدة طرق أخرى للاتصال بال web service عن طريق الفلاش .... ومن هذه الطرق هناك طريقة نستطيع الاتصال بها من دون كتابة كود action script أو بالأحرى سنكتب سطر واحد فقط للتنفيذ !!!!!!! نعم بالامكان ....
في الأخير أعتذر عن شرح الكود فقط بقليل من ال comments عليه ... أتمنى أن تكون كافية لفهم الدرس. وأترك لكم حرية التفاعل والسؤال عن أي شي مبهم وغير مفهوم لأني اخترت هذه الطريقة لتمكنكم من اكتساب مهارة أكبر من خلال التقصي ومحاولة فهم ما بين سطور الكود.
آخر ملاحظة:
طريقة استخدام ال web service أفضل من استخدام loadVars لتواصل الفلاش مع اللغات الأخرى. وهي ذات سرعة وكفاءة عالية في المعلومات البسيطة والمتوسطة ( تدعم مختلف اللغات كالعربية، ممكن تمرير الarray وال object بتوافق تام ... الخ) .... وتتميز بسهولة وسرعة تنفيذها في الفلاش ...
ولكن في حالة تمرير بيانات كبيرة جدا .... فالخيار دائما هو استخدام Flash Remoting... وهي الطريقة الأسرع والأمثل على الإطلاق...
وبالطبع لكم حرية التعقيب
خالص تحياتي
هلال