كل المقالات →

GlideAjax — مراجعة شاملة

نُشر في ٢٩ نوفمبر ٢٠٢٠ · 2 دقائق قراءة

كتبت عن AJAX عام 2014، لكنني أحب هذا الموضوع كثيراً فرأيت أن أعود إليه بمثال أكثر اكتمالاً.

مراجعة سريعة: المتزامن مقابل غير المتزامن

المتزامن (Synchronous): طريقة تواصل فورية حيث يستقبل كل طرف الرسائل على الفور، وينتظر مُرسل الطلب اكتمال الاستجابة قبل المتابعة.

غير المتزامن (Asynchronous): طريقة تواصل يعالج فيها كل طرف الرسائل حين تتاح له الفرصة. يواصل مُرسل الطلب عمله فوراً دون انتظار نتيجة.

متى تستخدم GlideAjax؟

استخدم GlideAjax حين تريد استدعاء دالة من جانب الخادم انطلاقاً من جانب العميل دون إعادة تحميل النموذج بالكامل.

مثال عملي

تخيّل أن مدير مكتب الخدمة يريد أن يرى المستخدمون آخر حادثة مفتوحة لهم حين يحاولون الإبلاغ عن انقطاع. من الناحية التقنية، تحتاج إلى:

  1. الحصول على معرّف المستخدم
  2. الاستعلام في جدول Incident حيث المتصل يساوي معرّف المستخدم
  3. إرجاع رقم الحادثة وعرضه

الطريقة الوحيدة للاستعلام عن بيانات الخادم من سكريبت عميل هي استدعاء الخادم — وهنا يأتي دور GlideAjax.

الخطوة الأولى: Script Include

أنشئ Script Include قابلاً للاستدعاء من العميل يمتد من AbstractAjaxProcessor:

var AJAXLastINC = Class.create();
AJAXLastINC.prototype = Object.extendsObject(AbstractAjaxProcessor, {
    getLastINC: function() {
        var vl = this.getParameter('sysparm_userid');
        var gr = new GlideRecord('incident');
        gr.addQuery('caller_id.sys_id', vl);
        gr.orderByDesc('opened_at');
        gr.query();
        if (gr.next()) {
            return 'رقم آخر حادثة مفتوحة لك: ' + gr.number;
        }
    },
    type: 'AJAXLastINC'
});

الخطوة الثانية: Client Script

أنشئ سكريبت عميل من نوع onLoad لاستدعاء Script Include:

function onLoad() {
    var ga = new GlideAjax('AJAXLastINC');
    ga.addParam('sysparm_name', 'getLastINC');
    ga.addParam('sysparm_userid', g_user.userID);
    ga.getXML(GetUserINC);
}

function GetUserINC(response) {
    var answer = response.responseXML.documentElement.getAttribute('answer');
    alert(answer);
}

النقاط الجوهرية: sysparm_name يخبر الخادم بالتابع المطلوب استدعاؤه، وgetXML غير متزامن — لن يتجمّد النموذج انتظاراً للاستجابة.

ملخص

| المفهوم | التفصيل | |---|---| | نوع Script Include | قابل للاستدعاء من العميل، يمتد من AbstractAjaxProcessor | | تمرير المعاملات | addParam('sysparm_name', 'اسم التابع') | | التنفيذ | getXML(دالة_الاستجابة) — دائماً غير متزامن | | قراءة الاستجابة | getAttribute('answer') على responseXML |