لكي تعمل بشكل صحيح، يجب وضعها في تطبيق افتراضي على الخادم، كما يجب وضع ملف global.asa المقدم في الدليل الجذر للتطبيق. إن أبسط طريقة هي وضع الملف global.asa في الدليل الجذر لموقع الويب الافتراضي (C:/InetPub/WWWRoot بشكل افتراضي).
إنها فكرة جيدة إعادة تسمية أي ملفات global.asa موجودة بحيث يمكن استعادتها لاحقًا.
1. عرض محتويات مجموعة التطبيقات
يعتبر كائن ASPCounter عضوًا في مجموعة StaticObjects (المحددة من خلال عنصر <OBJECT>)، ولكن الباقي (الذي تم إنشاء مثيل له بواسطة Server.CreateObject) هو عضو في مجموعة المحتويات.
يمكنك رؤية القيم الموضوعة في هذه المجموعات باستخدام مثال صفحة الويب global.asa، التي رأيناها سابقًا:
<!-- قم بتعريف مثيل مكون ASPCounter باستخدام
نطاق مستوى التطبيق //-->
<معرف الكائن=”ASPCounter” RUNAT=”الخادم” النطاق=”Applicatoin”
PROGID=”MSWC.Counters”>
</الكائن>
...
...
<لغة البرنامج النصي=”VBScript” RUNAT=”الخادم”>
التطبيق الفرعي_onStart()
'إنشاء مثيل لاتصال ADO بنطاق مستوى التطبيق
تعيين التطبيق ("ADOConnection") = Server.CreateObject("ADODB.Connection")
Dim varArray(3) "إنشاء مصفوفة متغيرة وملئها."
varArray(0) = "هذا"
varArray(1) = "المصفوفة المتغيرة"
varArray(2) = "مخزن في"
varArray(3) = "كائن التطبيق"
Application("Variant_Array") = varArray 'قم بتخزينه في التطبيق
التطبيق("Start_Time") = CStr(Now) 'قم بتخزين التاريخ/الوقت كسلسلة
التطبيق ("Visit_Count") = 0 'تعيين متغير العداد إلى الصفر
نهاية الفرعية
...
...
</SCRIPT>
(1) رمز لاجتياز مجموعة المحتويات
لاجتياز مجموعة المحتويات، يمكنك استخدام البنية لكل...التالي. يمكن أن يكون كل عنصر في المجموعة متغيرًا بسيطًا من نوع Variant، أو مصفوفة من Variant، أو مرجعًا لكائن ما. نظرًا لأن كل نوع من القيمة يحتاج إلى التعامل معه بشكل مختلف، فيجب فحص كل نوع لتحديد نوعه.
يمكنك استخدام الدالة VarType في VBScript لإنجاز هذا العمل. استخدم الدالتين IsObject وIsArray بدلاً من ذلك:
For Each objItem in Application.Contents
إذا كان IsObject(Application.Contents(objItem)) إذن
الاستجابة.اكتب "مرجع الكائن: '" & objItem & "'
"
ElseIf IsArray(Application.Contents(objItem)) ثم
Response.اكتب "Array: '" & objItem & "" محتويات هي:
"
VarArray = Application.Contents(objItem)
'ملاحظة: ما يلي يعمل فقط مع مصفوفة أحادية البعد
من أجل intLoop = 0 إلى UBound(varArray)
الاستجابة.اكتب " الفهرس(" & intLoop & ") = " & _
فاراراي(intLoop) & "
"
التالي
آخر
الاستجابة.اكتب "المتغير: '" & objItem & "' = " _
& Application.Contents (objItem) & "
"
نهاية إذا
بعد ذلك
كيف يسترد البرنامج هذه المصفوفة من كائن التطبيق. قم بتعيينه إلى متغير محلي (متغير) واستخدم العبارة التالية:
varArray = Application.Contents(objItem)
استخدم الدالة UBound لمعرفة حجم الصفيف (عدد العناصر) يمكن استخدام هذه القيمة كشرط الإنهاء للاجتياز:
For intLoop = 0 UBound(varArray)
هذا المثال عبارة عن مصفوفة أحادية البعد وسيعرض فقط محتويات هذه المصفوفة. قم بتحرير التعليمات البرمجية حسب الحاجة للتعامل مع المصفوفات متعددة الأبعاد، على سبيل المثال:
For intLoop = 0 To UBound(varArray)
IntNumberOfDimensions = UBound(varArray, 1)
من أجل intDimension = 0 إلى intNumberOfDimensions
الاستجابة.اكتب " الفهرس(" & intLoop & ") = " _
& فارأراي (intLoop، intDimension)
التالي
الرد.اكتب ""
التالي
(2) التعليمات البرمجية لاجتياز مجموعة StaticObjects
تحتوي مجموعة StaticObjects على كافة مراجع الكائنات المعلنة باستخدام عنصر <OBJECT> في global.asa. نظرًا لأن كل إدخال عبارة عن متغير كائن، فيمكن تكرار المصفوفة باستخدام تعليمات برمجية أبسط. سنقوم بإخراج اسم الكائن (كما هو محدد في الأصل في خاصية المعرف):
For Each objItem in Application.StaticObjects
إذا كان IsObject(Application.StaticObjects(objItem)) إذن
الاستجابة.اكتب "<OBJECT> العنصر: ID='" & objItem & "'
"
نهاية إذا
التالي
2. العمليات على المجموعات
1) إضافة قيم إلى
مجموعة المحتويات طريقة إضافة القيم إلى مجموعة المحتويات هي نفسها المستخدمة في كود البرنامج النصي لصفحة الويب global.asa. يسمح بإضافة قيمة متغير جديدة إلى كائن التطبيق، مع اسم وقيمة مقترحين (والتي يمكن تحريرها حسب الحاجة)، وانقر فوق الزر، وأعد تحميل الصفحة، وأضف القيمة إلى مجموعة Application.Contents، وإظهار في القائمة .
أضف التعليمات البرمجية لإدخال المحتويات الجديد
لوضع كافة الأزرار وعناصر تحكم HTML الأخرى في نموذج في نموذج صفحة الويب. يقوم ACTION بتعيين مسار صفحة الويب الحالية وإعادة تحميلها عند إرسال النموذج. السمة METHOD هي "POST"، لذا تظهر القيمة الموجودة في عنصر التحكم في مجموعة Request.Form. تم استخدام هاتين التقنيتين في الفصول السابقة:
<FORM ACTION="<% = Request.ServerVariables("SCRIPT_NAME") %>" METHOD="POST">
الأزرار الموجودة في هذا النموذج هي عناصر تحكم HTML INPUT عادية، ولها نفس العنوان (ثلاث مسافات) ولكن باسم مختلف. على سبيل المثال، رمز إنشاء الزر الأول (إضافة القيمة إلى كائن التطبيق) هو:
<INPUT TYPE="SUBMIT" NAME="cmdAdd" VALUE="">
عند إعادة تحميل صفحة الويب، تحقق من مجموعة Request.Form ، حدد زر الإرسال الذي تم النقر عليه والتعامل معه وفقًا لذلك. إذا كان الزر يضيف قيمة إلى كائن التطبيق (يُسمى الزر cmdAdd في عنصر HTML <INPUT>)، فاستخدم مقطع البرنامج التالي:
If Len(Request.Form("cmdAdd")) ثم
strVarName = Request.Form("txtVarName")
strVarValue = Request.Form("txtVarValue")
التطبيق.القفل
Application("strVarName") = strVarValue
التطبيق.فتح
End If
لاحظ كيف يستخدم التطبيق طريقتي Application.Lock وApplication.Unlock للتأكد من عدم الخلط بين هذه القيم من قبل مستخدمين يصلان إليها بشكل متزامن. هذا غير ممكن عمومًا إذا كنت تقوم فقط بتعيين قيمة محددة. ولكن من الحكمة استخدام طرق القفل وفتح القفل دائمًا.
2) حذف القيم من مجموعة المحتويات
قم بإنشاء هذه القائمة عند تنفيذ صفحة ويب ASP عن طريق اجتياز مجموعة المحتويات (كما فعلنا سابقًا). ومع ذلك، فإننا نقوم فقط بجمع أسماء كل عنصر ووضعها في عنصر <OPTION> ضمن عنصر القائمة <SELECT>:
...
<حدد الاسم=”lstRemove”الحجم=”1”>
<%
لكل objItem في Application.Contents
الاستجابة.اكتب "<OPTION>" وobjItem و"</OPTION>"
التالي
&>
</اختيار>
…
بعد تنفيذ كود ASP تكون النتيجة التي تظهر في المتصفح هي:
<SELECT NAME="lstRemove" SIZE="1">
<الخيار>اتصال ADO</الخيار>
<OPTION>Variant_Array</OPTION>
<الخيار>وقت_البدء</الخيار>
<OPTION>Visit_Count</OPTION>
<OPTION>My_New_Value</OPTION>
</SELECT>
(1) حذف قيمة واحدة
عند النقر فوق الزر لحذف قيمة واحدة، يتم إرسال النموذج إلى نفس صفحة الويب مرة أخرى، ولكن هذه المرة سيتم إعداد زر إرسال لـ cmdRemoveThis، ثم إزالة سيتم استدعاء أسلوب مجموعة Application.Contents:
إذا كان Len(Request.Form("cmdRemoveThis")) ثم
strToRemove = Request.Form("lstRemove")
Response.Write "strToRemove = " & strToRemove
التطبيق.القفل
Application.Contents.Remove(strToRemove)
التطبيق.فتح
End If
لاحظ أن هذه طريقة لمجموعة المحتويات، وليست كائن التطبيق. بناء الجملة هو Application.Contents.Remove، وليس Application.Remove.
نتيجة إزالة قيمة Start_Time من مجموعة المحتويات.
(2) احذف جميع القيم
إذا قمت بالنقر فوق آخر أزرار نوع الإرسال الثلاثة، فسيكتشف الكود الموجود في صفحة الويب أن الزر الذي تم النقر عليه هو cmdRemoveAll، وسينفذ طريقة RemoveAll لمجموعة Application.Contents:
If Len( طلب النموذج ("cmdRemoveAll")) ثم
التطبيق.القفل
التطبيق.المحتويات.إزالة الكل
التطبيق.فتح
End If
يذكرك مرة أخرى بأن هذه طريقة لجمع المحتويات، وليست تطبيقًا. بناء الجملة هو Application.Contents.RemoveAll، وليس Application.RemoveAll.