Biblioteka AJAX 

Wprowadzenie

Biblioteka AJAX oparta jest na prototype.js.

Składa się ona z poniższych plików, automatycznie ładowanych do przeglądarki poprzez poniższy token <script adx='ALIBJS'></script>:

prototype.js

Biblioteka - wersja prototypowa 1.6.0.3

XtendAjax.js

Zarządzanie zapytaniami AJAX do serwera XTEND

XtendAjaxFlash.js

Zarządzanie zapytaniami AJAX o komponenty FLASH X3

XtendAjaxMsgs.js

Zarządzanie zapytaniami AJAX o wyświetlenie w przeglądarce komunikatów użytkownika

Poprzez funkcję JavaScript xtdAlert(messId,p1,P2,P3,P4)

XtendAjaxScripts.js

Zarządzanie zapytaniami AJAX dotyczącymi odwołań do skryptów serwera

XtendAjaxWsvc.js

Zarządzanie zapytaniami AJAX dotyczącymi wywołań interfejsów XTEND (usługi sieciowe X3)

XtendAjaxDom.js

Narzędzie do zarządzania DOM XML

XtendAjaxUtils.js

Inne narzędzia

XTENDAJAX.request

Zasada

Wywołanie do zapytań AJAX jest asynchroniczne. Po wysłaniu zapytania HHTP na serwer, program wywołujący nie otrzymuje odpowiedzi z serwera.

Odpowiedź przychodzi po pewnym czasie”, którego długości nie można kontrolować.

Wyłącznie w przypadku zapytań HTTPREQUEST otrzymywana jest odpowiedź - jest to funkcja JavaScript CallBack - pozwalająca na dalsze przetwarzanie uzyskanych wyników.

Zgodnie z ustawieniami standardowymi funkcja JavaScript CallBack nie umożliwia podawania odpowiedzi HTTP i nie może służyć do wyszukiwania kontekstu wywołania danego zapytania.

Klasa XTENDAJAX.request biblioteki XtendAjax.js przeciąża klasę Ajax.Request biblioteki prototypowej w celu ułatwienia obsługi i umożliwienia dostępu do kontekstu funkcji CallBack.

XTENDAJAX.request=Class.create(Ajax.Request,{
initialize: function(aCaller,url,aContentType,aReturnedType,setups)
{
// Określony proces
// Wywołanie zapytania Ajax prototype.js
$super(url,options);
},

aCaller

Obiekt wywołujący (patrz: następny §;)

url

wywołanie adresu url usługi sieciowej REST XTEND

aContentType

ContentType przesłanych danych - brak autoryzowanych

  • application/xml
    -> konfiguracja zawiera ciąg XML
  • application/json
    -> konfiguracja zawiera ciąg JSON
  • application/x-www-form-urlencoded
    -> konfiguracja zawiera Hash ($H prototype.js)
aReturnedType

ContentType zwróconych danych - brak autoryzowanych

setups

Dane przesłane w treści zapytania - brak autoryzowanych

Wszystkie klasy i funkcje przypisane są do obiektu XTENDAJAX.

Obiekt wywołujący

Jest to obiekt wywołujący podczas zapytania i zarządzający kontekstem wywołania, koniecznym dla przetworzenia odpowiedzi.

W celu przetworzenia różnych raportów z odpowiedzi, obiekt ten musi realizować poniższe metody:

//------------------------------------------------
//Appel si HTTP status is equal to 200
//odpowiedź : Classe Ajax.Response
onSuccess:function(response){

},
//------------------------------------------------
//Wywołanie jeżeli status HTTP jest inny niż 200
//zapytanie : Class Ajax.Request
//wyjątek: String ou classe Error
onFailure:function(request, exception){

},
//------------------------------------------------
//Wywołanie wyjątku JavaScript
//zapytanie : Classe Ajax.Request
onException :function(response,headerJSON){

}

Funkcje onFailure i onException mogą być stosowane opcjonalnie.

Jeżeli obiekt wywołujący ich nie stosuje, wówczas wywoływane będą funkcje XTENDAJAX.displayException i XTENDAJAX.displayFailure .

Na przykład

Poniższy przykład ilustruje wywołanie usługi sieciowej REST, która zidentyfikowana jest przez konfigurację aURL z aData i wyświetla odpowiedź.

var wClassCaller=Class.create({
onSuccess:function(response){
response.xtdDisplay();
},
call:function(aURL,aData){
new XTENDAJAX.request(this,aURL,null,null,aData);
}
});
var wURL='http://ecfdalbopro:28980/xtend/ajax/SOLPAIE/PAIE/FDBTEST/INT/XTDLOGIN';
var wInput={
_JSONOPT:{OPTIONS:'nogroups'},
AXUSERCODE:'DIS001',
AXPWD:'adonix'
};
new wClassCaller().call(wURL,wInput);

Użytkownik w rzeczywistości wykorzystuje klasy z klasy XTENDWSVC.classCallerSpg , która jest formą biblioteki XtendAjaxWsvc.js , co ułatwia obliczenie adresu url i wykorzystanie danych.

Obiekt „Odpowiedź”

Konfiguracja odpowiedzi inicjowana jest z klasy Ajax.response , która została poszerzona o pewne metody mające na celu obsługę odpowiedzi serwera XTEND (XTENDAJAX.xtdExtendResponse).

{
//-------------------------------------------------
// Wyświetla treść odpowiedzi w formacie tekstowym (XTENDAJAX.msgBox)
xtdDisplay:function(),
//-------------------------------------------------
// Tabela zawierająca komunikaty o błędach
xtdMsgErr:,
// Odesłanie literału true jeżeli wiadomość zawiera błąd aplikacji X3
xtdHasX3Error:function(),
//-------------------------------------------------
// Tabela zawierająca komunikaty o ostrzeżeniach
xtdMsgWarning:,
//-------------------------------------------------
// Tabela zawierająca komunikaty informacyjne
xtdMsgInfo:,
//-------------------------------------------------
// Tabela zawierająca wszystkie komunikaty
xtdMsgAll:,
//-------------------------------------------------
// ContenType odpowiedzi
xtdContentType:,
//-------------------------------------------------
// Prawdziwe jeżeli ContentType=text/plain
xtdIsText:function(),
//-------------------------------------------------
// Prawdziwe jeżeli ContentType=text/html
xtdIsHtml:function(),
//-------------------------------------------------
// Prawdziwe jeżeli ContentType=application/xml
xtdIsXml:function(),
//-------------------------------------------------
// Prawdziwe jeżeli ContentType=application/json
xtdIsJson:function(),

/*------------------ Odpowiedź XML------------------*/
//Ocenia odpowiedzi i wysyła DOM XML (patrz: XtendAjaxDom.js)
xtdEvalXML,
//Zawiera DOM XML utworzone przez xtdEvalXML
xtdResponseXML:,

/*------------------ Odpowiedź JSON ---------*/
//Ocenia odpowiedź i wysyła obiekt JSON, który reprezentuje odpowiedź
xtdEvalJSON:function(),
//Zawiera odpowiedź JSON utworzoną przez xtdEvalJSON
xtdResponseJSON:,
//Odsyła Hash ($H) utworzony z klucza i tabeli wartości
xtdHash:function(aKeyArray,aValArray),

/*------- Odpowiedź USŁUGI SIECIOWEJ PODPROGRAMU-------*/
//Ocenia odpowiedź na podprogram
//-> Dodaje wybrane metody
xtdEvalJSONSpg:function(),
//Odsyła wartość konfiguracji AXPAR
AXPAR:function(aCode),
//Odsyła wartość konfiguracji AXPAR jako typ liczbowy
AXPARInt:function(aCode,aDefValue),

/*------ Odpowiedź PODPROGRAMU DATA ACCESS -------*/
//Ocenia odpowiedź na usługę sieciową podprogramu dostępu do danych
//-> Dodaje wybrane metody
xtdEvalJSONSpgAccess:function(),
//Liczba żądanych rekordów
askedRecords:function(),
//Łączna liczba rekordów
totalRecords:function(),
//Liczba odesłanych rekordów
returnedRecords:function(),
//Pozycja (1-N) pierwszego rekordu
startRank:function(),
//Prawda, jeżeli dalej istnieją jeszcze rekordy - Fałsz, jeżeli jest to ostatnia strona
hasNext:function(),

/*--------- USŁUGA SIECIOWA OBIEKTU X3 ----------*/
//Ocenia odpowiedź na usługę sieciową obiektu X3
//-> Dodaje wybrane metody
xtdEvalJSONObject:function(),
//grupy techniczne ADXTEC
adxADXTEC:function(aField),
//Znacznik czasu obiektu X3
adxTimeStamp:function(),
//UserCode X3, który jako ostatni zmodyfikował obiekt
adxUser:function(),
}

Interfejs usług sieciowych

Wprowadzenie

Biblioteka XtendAjaxWsvc.js udostępnia szeroki zakres klas interfejsu w celu ułatwienia wywoływania usług sieciowych REST z XTEND

Zapytanie AJAX uruchamia wykonywanie usług sieciowych określonych przez zapisy interfejsu i przetwarza bezpośrednio wyniki. Serwer XTEND wywołuje jedynie usługi sieciowe X3 i ponownie wysyła odpowiedź.

Wszystkie klasy i funkcje przypisane są do obiektu XTENDWSVC .

Narzędzia

/*----------------- TESTY -----------------*/
//Wywołuje interfejs aInterfaceId z danymi aXmlData
// Wyświetla wynik
testSpgXML:function(aInterfaceId,aXmlData),
//---------------------------------------------
//Wywołuje interfejs aInterfaceId z danymi aJSONData
// Wyświetla wynik
testSpgJSON:function(aInterfaceId,aJSONData),

/*----------------- WYWOŁANIE STATYCZNE -----------------*/
//Wywołuje interfejs pod-programu aInterfaceId z danymi
//Funkcje statystyczne CallBack wprowadzone są jako konfiguracja
runSpg:function(aInterfaceId,aData,onSuccess,onFailure),
//---------------------------------------------
//Idem runSpg z danymi JSON w zamian
runSpgJSON:function(aInterfaceId,aData,onSuccess,onFailure),
//---------------------------------------------
//Idem runSpg z danymi XML w zamian
runSpgXML:function(aInterfaceId,aData,onSuccess,onFailure),

/*----------------- PARAMETRY WYWOŁANIA-----------------*/
//Odsyła obiekt konfiguracji bazy XTENDWSVC.classParam
//aJSONOptions: Opcje JSON (opcjonalnie)
newParam:function (aJSONOptions),
//---------------------------------------------
//Odsyła obiekt konfiguracji dla wywołania usługi sieciowej obiektu X3
//Classe XTENDWSVC.newParamXtdObject
//aTimeStampX3: znacznik czasu X3 dla obiektów (opcjonalnie)
newParamXtdObject:function (aTimeStampX3,aJSONOptions),
//---------------------------------------------
//Odsyła obiekt konfiguracji dla wywołania usługi sieciowej podprogramu
//Classe XTENDWSVC.classParamXtdSpg
newParamXtdSpg:function (aJSONOptions),
//---------------------------------------------
//Odsyła obiekt konfiguracji dla wywołania podprogramu „data access”
//Classe XTENDWSVC.classParamXtdSpgAccess
//aNbLines: maksymalna liczba żądanych rekordów
//aStartAt: 1. klasyfikacja rekordu
newParamXtdSpgAccess:function (aNbLines,aStartAt,aJSONOptions),
//---------------------------------------------
//Odsyła obiekt konfiguracji dla wywołania listy szybkiego wyboru obiektu X3
//Klasa Hash (klucz/tabela wartości)
//aNbLinesReturned: liczba żądanych wierszy
newParamQuery:function(aNbLinesReturned,aJSONOPtions),
//---------------------------------------------
//Odsyła obiekt konfiguracji klucza
//Klasa Hash (klucz/tabela wartości)
newParamRead:function(aJSONOPtions),
//---------------------------------------------
//Sprawdza, czy aHash jest konfiguracją dla zapytania
//Obecność klucza „_COUNT” zawierającego liczbę żądanych wierszy
checkQueryParam:function(aHash,aReturnedCount),

Klasy konfiguracji

XTENDWSVC.classParam

Klasa bazy konfiguracji

XTENDWSVC.classParam=Class.create({
/---------------------------------------
//aJSONOptions: Opcje JSON
initialize: function(aJSONOptions),
/---------------------------------------
//Odsyła opcje JSON
options:function(),
/---------------------------------------
//Dodaje konfigurację aCode z wartością: a Code
add:function(aCode,aValue),
/---------------------------------------
//Odsyła wartość konfiguracji aCode
get:function(aCode),
)}

XTENDWSVC.classParamXtdSpg

Klasa konfiguracji wywołania usługi sieciowej podprogramu posiadająca XTENDWSVC.classParam.

XTENDWSVC.classParamXtdSpg=Class.create(XTENDWSVC.classParam,{
/---------------------------------------
//aJSONOptions: Opcje JSON
initialize: function(OptionsJSON),
/---------------------------------------
//Dodanie konfiguracji AXPAR
addAXPAR:function(aCode,aValue)
});

XTENDWSVC.classParamXtdSpgAccess

Klasa ustawień wywołania dla usługi sieciowej podprogramu „Data access” posiadającej XTENDWSVC.classParamXtdSpgAccess.

XTENDWSVC.classParamXtdSpgAccess=Class.create(XTENDWSVC.classParamXtdSpg,{
/---------------------------------------
//aJSONOptions : Opcje JSON
//aNbLines : maksymalna liczba żądanych rekordów
//aStartAt : 1. klasyfikacja rekordu
//Aktualizuje konfiguracje „$REC_STARTAT','$TOTAL_COUNT','$RET_COUNT','$HAS_NEXT”
initialize: function(aNbLines,aStartAt,aJSONOptions),
});

XTENDWSVC.classParamObject

Klasa konfiguracji wywołania usługi sieciowej obiektu X3, posiadającego XTENDWSVC.classParam.

XTENDWSVC.classParamObject=Class.create(XTENDWSVC.classParam,{
/---------------------------------------
//aJSONOptions : Opcje JSON
//aTimeStampX3 : Ciąg - TimeStamp obiektu X3 (może wynosić zero lub być pusty)
//Dodaje konfigurację WW_MODSTAMP w grupie ADXTEC z wartością aTimeStamp
initialize: function(aTimeStampX3,aJSONOptions),
});

XTENDWSVC.classJsonOpt class

Klasa reprezentująca opcje JSON.

//---------------------------------------
//Aktywuje opcję noGroups
noGroups:function(),
//---------------------------------------
//Aktywowana opcja noRows
noRows:function(),
//---------------------------------------
//Aktywuje opcję noLabels
noLabels:function(),
//---------------------------------------
//Aktywuje opcję noClobs
noClobs:function(),
/---------------------------------------
//Aktualizuje listę grup do wykluczenia
//aValue : Ciąg lub Tablica ciągu
excludeGrp:function(aValue),
//---------------------------------------
//Aktualizuje listę grup do wykluczenia
includeGrp:function(aValue),
//---------------------------------------
//aktualizuje listę pól do wykluczenia
excludeFld:function(aValue),
//---------------------------------------
//aktualizuje listę pól do wykluczenia
includeFld:function(aValue),

/*------------- PRZYKŁAD -------------*/
var wOpts=new XTENDWSVC.classJsonOpt().noGroups().includeFld(['SOHNUM''ITMREF','QTY']);

Classe XTENDWSVC.classCaller

Jest to klasa bazowa służąca do wywoływania usługi sieciowej REST.

Domyślnie klasa ta nie może być wykorzystywana do zgłaszania wielu zapytań jednocześnie a także blokuje próby wykonania wielokrotnych wywołań.

/*---------------- GŁÓWNE METODY----------------*/
//Constructeur
//aInterfaceId: ID interfejsu XTEND
//Opcjonalne: możliwe jest wprowadzanie funkcji statystycznych CallBack jako konfiguracji
// jeżeli nie zostało zaimplementowane w klasie
// -> aInterfaceId,onSuccess,onFailure,onException
initialize:function(aInterfaceId),
//-------------------------------------------------------
//Sprawdza bieżące wywołanie i inicjuje wysłanie zapytania
//aUrl : Url usługi
//aData : Dane
//aContenType: ContentType
exec:function(aUrl,aData ,aContenType),

/*-------- METODA CALLBACK SŁUŻĄCA DO SYSTEMATYCZNEGO PRZEŁADOWYWANIA
// HTTP STATUS=200
// !! Metody potomne muszą wywoływać $super(response) w celu ustawienia
// flagi wywołania w pozycji fałsz
onSuccess:function(response),

/*--------- METODA CALLBACK SŁUŻĄCA DO POTENCJALNEGO PRZEŁADOWANIA ----------*/
// EXCEPTION JAVASCRIPT
//Domyślnie metoda ta wyświetla wyjątek
// !! Metoda potomna musi wywoływać $super(request,exception,true)
// w celu ustawienia flagi wywołania bez wyświetlania wyniku
onException:function(request,exception,aIsOverriden),
//-------------------------------------------------------
// HTTP STATUS!=200
//Domyślnie metoda ta wyświetla przyczynę błędu
// !! Metoda potomna musi wywoływać $super(request,headerJSON,true)
// w celu ustawienia flagi wywołania bez wyświetlania wyniku
onFailure:function(response,headerJSON,aIsOverriden),

/*--------------------- FORMATY --------------------*/
//Ustawia application/json jako typ danych otrzymywanych w zwrotach
//Typ domyślny
setReturnJSON:function(),
//-------------------------------------------------------
//Ustawia application/xml jako typ danych otrzymywanych w zwrotach
setReturnXML:function(),
//-------------------------------------------------------
//Prawda jeżeli w zwrocie są dane XML
returnXML:function(),
//-------------------------------------------------------
//Prawda jeżeli w zwrocie są dane JSON
returnJSON:function(),


/*--------------------- POZOSTAŁE ---------------------*/
//skutecznie wysyła zapytanie do serwera jeżeli nie ma obecnie żadnych zapytań
sendRequest:function(aUrl,aDataObject,aContenType)
//-------------------------------------------------------
//Odsyła ID interfejsu
getId:function(),

/*------------- ZARZĄDZANIE WYWOŁANIAMI WIELOKROTNYMI -------------*/
//W celu przeładowania, gdy użytkownik chce odblokować wywołania wielokrotne
//aBusy : Prawda jeżeli wywołanie w toku
//”Prawda” odsyłana w celu autoryzacji wywołania do usługi sieciowej
doSendRequest:function(aBusy),
//-------------------------------------------------------
//Aktualizuje flagę zajętości
setBusy:function(aYes),
//-------------------------------------------------------
//Prawda jeżeli wywołanie w toku
isBusy:function(),

Classe XTENDWSVC.classCallerSpg

Jest to klasa bazowa służąca do wywoływania usługi sieciowej REST podprogramu.

XTENDWSVC.classCallerSpg=Class.create(XTENDWSVC.classCaller,{
//-------------------------------------------------------
//Producent
initialize:function(aInterfaceId),
//-------------------------------------------------------
//Realizuje zapytanie z wykorzystaniem danych aData
//Autoryzowana wartość dla aData
// -zerowe lub niezdefiniowane -> this.exec()
// -Ciąg -> this.exec(aString,'text/plain')
// -Hash -> this.runFORMENCODED(aData)
// -Inne -> this.runJSON(Object.toJSON(aData))
run:function(aData),
//-------------------------------------------------------
//Realizuje zapytanie z wykorzystaniem danych XML aXML
runXML:function(aXML),
//-------------------------------------------------------
//Realizuje zapytanie z wykorzystaniem danych JSON aJSON
// JSON : Ciąg JSON lub obiekt JavaScript (klasa konfiguracji)
runJSON:function(aJSON),
//-------------------------------------------------------
//Realizuje zapytanie z wykorzystaniem aHash tabeli klucza/wartości
//aHash przedstawia zawartość formularza <form>
runFORMENCODED:function(aHash),
});

Na przykład

Poniższy przykład wywołuje interfejs XTDLOGIN bieżącej witryny i wyświetla odpowiedź.

Wywołanie podprogramu

var wClassCaller=Class.create(XTENDWSVC.classCallerSpg,{
//Producent jeżeli aInterfaceId jest jedyną konfiguracja
initialize:function($super,aInterfaceId){
$super(aInterfaceId);
},
//Méthode obligatoire pour traiter la réponse
onSuccess:function(response){
response.xtdDisplay();
}
});
var wJSONOpts=new XTENDWSVC.classJsonOpt().noGroups();
var wParams=new XTENDWSVC.classParamXtdSpg(wJSONOpts);
wParams.add('AXUSERCODE','DIS001');
wParams.add('AXPWD','adonix');
new wClassCaller('XTDLOGIN').run(wParams);

Wynik

Adres URL :
http://ecfdalbopro:28980/xtend/ajax/SOLPAIE/PAIE/FDBTEST/INT/XTDLOGIN

Typ Treści:
application/json;charset=utf-8

KOMUNIKATY INFORMACYJNE X3:
Użytkownik połączony z wykorzystaniem kodu użytkownika DIS001

{
'AXUSERCODE':'DIS001',
'AXPWD':'adonix',
'AXUSERPROF':'B2B',
'AX3SOL':['SOLPAIE','X3V5','XTENDV2'],
'AX3FLDR':['PAIE','X3TESTV5','DEMOFRA'],
'AX3LANG':['FRA','FRA','FRA'],
'AX3USER':['XTEND','JPJ1','OG'],
'AX3PWD':['adonix','',''],
'AXLOGCOD':['NAME','FIRSTNAME','EMAIL','PHONE'],
'AXLOGVAL':['DAL BO','Frédéric','
frdal@sage.com','00102030405'],
'SHIPADR1':['Sage Lyon new','Sage MGE','Sage PARIS'],
'SHIPCITY':['LYON','Echirolles','PARIS'],
'SHIPZIP':['69443','38130','75834']
}

Class XTENDWSVC.classCallerObject

Jest to klasa bazowa służąca do wywoływania usługi sieciowej REST obiektu X3.

XTENDWSVC.classCallerObject=Class.create(XTENDWSVC.classCaller,{
//-------------------------------------------------------
//Constructeur
initialize:function(aInterfaceId),
//-------------------------------------------------------
//Metoda zapisu
//aData : Dane w formacie JSON lub XML
actCreate:function(aData),
//-------------------------------------------------------
//Méthode Read
//aHashKeys : Hash zawierający klucze obiektu
actRead:function(aHashKeys),
//-------------------------------------------------------
//Methode Delete
//aHashKeys : Hash zawierający klucze obiektu
actDelete:function(aHashKeys),
//-------------------------------------------------------
//Modyfikacja Metody
//aHashKeys : Hash zawierający klucze obiektów
//aData : Dane w formacie JSON lub XML
actUpdate:function(aHashKeys,aData),
//-------------------------------------------------------
//Action de code aCode
//aCode : Kod czynności
//aHashKeys : Hash zawierający klucze obiektu
actOtherKey:function(aCode,aHashKeys),
//-------------------------------------------------------
//Czynność kodu aCode
//aCode : Kod czynności
//aData : Dane w formacie JSON lub XML
actOtherData:function(aCode,aData),
//-------------------------------------------------------
//Lista szybkiego wyboru zgłoszeń czynności
//aHashKeys : Hash zawierający klucze wybranych elementów
//aReturnedCount : Opcjonalne - liczba żądanych wierszy
actQuery:function(aHashKeys,aReturnedCount),
});

Na przykład

Poniższy przykład wywołuje interfejs obiektu X3 OBJAYZ (obiekt AYZ) bieżącej witryny podczas tworzenia i wyświetla odpowiedź.

Wywołaj Obiekt

var wClassCaller=Class.create(XTENDWSVC.classCallerObject,{
onSuccess:function(response){
response.xtdDisplay();
}
});
var wJSONOpts=new XTENDWSVC.classJsonOpt().noGroups();
var wParams=new XTENDWSVC.classParamObject(null,wJSONOpts);
wParams.add('TTL','Form title');
wParams.add('MAICOD','
frdal@sage.com');
wParams.add('CMT','Comment');
new wClassCaller('OBJAYZ').actCreate(wParams);

Wynik

Adres URL :
http://ecfdalbopro:28980/xtend/ajax/SOLPAIE/PAIE/FDBTEST/INT/OBJAYZ/S

Typ Treści:
application/json;charset=utf-8

KOMUNIKATY INFORMACYJNE X3:
Utworzono formularz

{
'FRMCOD':'0902000005',
'FCYCOD':'FDBTEST',
'ZFCYCOD':'Site de test fdalbo',
'TYP':'OTH',
'ZTYP':'Divers',
'STATUT':'1',
'STATUT_LBL':'A traiter',
'TTL':'Form title',
'MAICOD':'
frdal@sage.com',
'CREDAT':'20090227',
'CREHEURE':'184431',
'CMT':'Comment',
'PARCOD':[],
'PARVAL':[],
'WW_MODSTAMP':'000000000000',
'WW_MODUSER':''
}

Skrypt usług sieciowych

Wprowadzenie

Biblioteka XtendAjaxScripts.js udostępnia szeroki zakres klas w celu ułatwienia wywoływania skryptu serwera usług sieciowych.

Skrypt, jaki wykonywany jest na serwerze XTEND ma dostęp do kontekstu sesji poprzez interfejs IXtdAjaxScriptContext .

XTENDSCRIPTS.classCaller class

Jest to klasa bazowa służąca do wywoływania usługi sieciowej skryptu serwera.

Klasa ta działa w taki sam sposób jak usługi sieciowe interfejsu, jednak konfiguracje wpisane w skrypt serwera mogą być dowolne.

Są one odczytywane poprzez funkcjęXTD_CTX.getHttpBody a ich zawartość jest interpretowana przez samą siebie.

Format odpowiedzi jest również dowolny.

Funkcja wydruku zapisuje (układa w ciąg) dane w sposób bezpośredni w buforze, który zostanie wysłany do klienta.

Funkcja XTD_CTX.setHttpContenType służy do zarządzania ContentType odpowiedzi.

Na przykład, skrypt może odsyłać HTML, który zostanie w dynamiczny sposób umieszczony na stronie.

Metody

/*---------------- METODY GŁÓWNE ----------------*/
//Producent
//aScriptId : Ścieżka powiązana ze skryptem, zgodnie ze źródłem skryptu
//Opcjonalne: możliwe jest wprowadzanie funkcji statystycznych CallBack jako konfiguracji
// jeżeli nie zostało zaimplementowane w klasie
// -> aScriptId,onSuccess,onFailure,onException
initialize:function(aScriptId),
//-------------------------------------------------------
//Wykonuje skrypt z aParams jako konfiguracją
//Zawartość aParams jest dowolna i zależy od wywołanego skrytpu
run:function(aParams),


/*-------- METODA CALLBACK SŁUŻĄCA DO SYSTEMATYCZNEGO PRZEŁADOWYWANIA
// HTTP STATUS=200
// !! Metody potomne muszą wywoływać $super(response) w celu ustawienia
// flagi wywołania w pozycji fałsz
onSuccess:function(response),

/*--------- METODA CALLBACK SŁUŻĄCA DO POTENCJALNEGO PRZEŁADOWANIA ----------*/
// WYJĄTEK JAVASCRIPT
//Domyślnie metoda ta wyświetla wyjątek
// !! Metody potomne muszą wywoływać $super(request,exception,true)
// w celu ustawienia flagi wywołania na fałsz bez wyświetlania wyniku
onException:function(request,exception,aIsOverriden),
//-------------------------------------------------------
// HTTP STATUS!=200
//Domyślnie metoda ta wyświetla przyczynę błędu
// !! Metody potomne muszą wywoływać $super(request,headerJSON,true)
// w celu ustawienia flagi wywołania na fałsz bez wyświetlania wyniku
onFailure:function(response,headerJSON,aIsOverriden),

/*------------- ZARZĄDZANIE WYWOŁANIAMI WIELOKROTNYMI-------------*/
//W celu przeładowania, gdy użytkownik chce odblokować wywołania wielokrotne
//aBusy : Prawda jeżeli wywołanie w toku
//”Prawda” odsyłana w celu autoryzacji wywołania do usługi sieciowej
doSendRequest:function(aBusy),
//-------------------------------------------------------
//Aktualizuje flagę zajętości
setBusy:function(aYes),
//-------------------------------------------------------
//Prawda jeżeli wywołanie w toku
isBusy:function()

Class XTENDSCRIPTS.classUpdater

Klasa ta służy do aktualizowania elementu z DOM HTML (div, span) w momencie otrzymania odpowiedzi usługi sieciowej, jeżeli ta wysłała odpowiedź w formacie HTML text/html .

XTENDSCRIPTS.classUpdater=Class.create(XTENDSCRIPTS.classCaller,{

//-------------------------------------------------------
//Producent
//aScriptId : Ścieżka serwera skryptu.
//aUpdateId : ID elementu DOM przeznaczonego do aktualizacji
//aClearBefore : „Prawda” do wykasowania zawartości Uplateld przed wysłaniem zapytania
initialize: function(aScriptId,aUpdateId,aClearBefore),

//-------------------------------------------------------
//Wykonuje skrypt z aParams jako konfiguracją
run:function(aParams),
});

Na przykład

Wywołanie skryptu odczytującego dwie konfiguracje, P1 oraz P2 i wysyłającego zawartość konfiguracji w formie treści HTML.

Skrypt

//Zawiera bibliotekę narzędzi
#zawiera 'libs\xtdWsvc.js'

//Odczyt danych przesłanych przez klienta
// -> w tym przykładzie są to dane JSON
// -> Ciąg w formacie: {P1:'ValueP1',P2:'ValueP2'}
//Funkcja Eval tworzy z Ciągu obiekt JavaScript
var wInput=eval('('+XTD_CTX.getHttpBody()+')');

//Obiekt narzędzia do tworzenia odpowiedzi HTML
var wHtml=new XTENDWSVC.classHTMLBuffer;

//HTML zawierający konfigurację napisaną wytłuszczoną czcionką jest wysyłany ponownie
wHtml.append('<b>P1=').append(wInput.P1).append('</b><br>');
wHtml.append('<b>P2=').append(wInput.P2).append('</b><br>');

//Zapisywanie odpowiedzi
print(wHtml.html());

//Aktualizacja ContenType
XTD_CTX.setHttpContenType('text/html');

Wywołanie ze strony HTML

<script>
funkcja callAjaxScript(aP1,aP2){
//Ustawienia
var wParams={P1:aP1,P2:aP2};
//ajaxTest3.js jest stroną skryptu
//idReponseScript jest ID div wyświetlającego wyniki HTML
„Prawda” do wykasowania zawartości div przed wywołaniem skryptu
new XTENDSCRIPTS.classUpdater('ajaxTest3.js','idReponseScript',true).run(wParams);
}
</script>
<!--Przycisk uruchamiający wywołanie-->
<input type='button' value='callAjaxScript' onClick='javascript:callAjaxScript('Hello','world');'><br>
<!--div wyświetlający wynik-->
<div id='idReponseScript'></div>

Żądany wynik

GESAY_ADV_AJAX_1.jpg