AJAX-Bibliothek 

Einführung

Die AJAX-Bibliothek basiert auf prototype.js

.Sie setzt sich aus folgenden Dateien zusammen, die automatisch mit dem Token <script adx="ALIBJS"></script>in den Browser geladen werden:

prototype.js

Prototyp-Bibliothek, Version 1.6.0.3

XtendAjax.js

Verwaltung der AJAX-Abfragen an den XTEND-Server

XtendAjaxFlash.js

Verwaltung der AJAX-Abfragen an die X3-FLASH-Komponenten

XtendAjaxMsgs.js

Verwaltung der AJAX-Abfragen für die Anzeige von Benutzermeldungen im Browser

mit der Funktion JavaScript xtdAlert(messId,p1,P2,P3,P4)

XtendAjaxScripts.js

Verwaltung der AJAX-Abfragen für den Aufruf der Skriptserver

XtendAjaxWsvc.js

Verwaltung der AJAX-Abfragen für den Aufruf der XTEND-Schnittstellen (X3-Webservices)

XtendAjaxDom.js

Werkzeug zur Verwaltung eines XML-DOM

XtendAjaxUtils.js

Sonstige Werkzeuge

XTENDAJAX.request

Funktionsweise

Der Aufruf der AJAX-Abfrage erfolgt asynchron. Dies bedeutet, dass das aufrufende Programm nach dem Versand der HTTP-Abfrage an den Server keine Antwort von diesem erhält.

Die Antwort wird nach einer 'bestimmten Zeit' gegeben, die sich der Kontrolle des Anwenders entzieht.

Das HTTPREQUEST-Objekt ruft die JavaScript-Funktion CallBack für die Ergebnisverarbeitung erst dann auf, wenn es die Antwort erhalten hat.

In der Standardversion enthält die Funktion CallBack die HTTP-Antwort nicht als Parameter und kann den Aufrufkontext der Abfrage nicht wiederherstellen.

Die Klasse XTENDAJAX.request der Bibliothek XtendAjax.js überlädt die Klasse Ajax.Request der Prototypen-Bibliothek, um die Verwendung zu vereinfachen und Zugriff auf den Aufrufkontext in der Funktion CallBack zu erhalten.

XTENDAJAX.request=Class.create(Ajax.Request,{
    initialize: function(aCaller,url,aContentType,aReturnedType,params)
    {   
        // Sonderverarbeitung
        // Aufruf der Ajax-Abrage prototype.js
        $super(url,options);
    },

aCaller

Aufrufendes Objekt (siehe nächster Absatz)

URL

Aufruf-URL des Webservice REST XTEND

aContentType

ContentType der gesendeten Daten - null ist zulässig

  • application/xml
    -> params enthält einen XML-String
  • application/json
    -> params enthält einen JSON-String
  • application/x-www-form-urlencoded
    -> params enthält ein Hash ($H prototype.js)
aReturnedType

ContentType der zurückgegebenen Daten - null ist zulässig

params

Im Abfragetext gesendete Daten - null ist zulässig

Sämtliche Klassen und Funktion sind dem Objekt XTENDAJAX zugeordnet.

Aufrufendes Objekt

Objekt, das die Abfrage aufruft und den Aufrufkontext verwaltet, der zur Verarbeitung der Antwort benötigt wird.

In diesem Objekt müssen zur Bearbeitung der verschiedenen Antwortstatus folgende Methoden implementiert sein:

    //------------------------------------------------
    //Aufruf, wenn HTTP-Status = 200
    //Antwort: Klasse Ajax.Response
    onSuccess:function(response){
   
    },
    //------------------------------------------------
    //Aufruf, wenn HTTP-Status != 200
    //Abfrage   : Klasse Ajax.Request
    //Ausnahme : String oder Klasse Error
    onFailure:function(request, exception){
   
    },
    //------------------------------------------------
    //Aufruf bei JavaScript-Ausnahme
    //Abfrage   : Klasse Ajax.Request
    onException :function(response, headerJSON){
   
    }

Die Funktionen onFailure und onException sind fakultativ.

Wenn sie nicht im aufrufenden Objekt implementiert sind, werden die Anzeigefunktionen XTENDAJAX.displayException und XTENDAJAX.displayFailure aufgerufen.

Beispiel

Im nachstehenden Beispiel wird der über den Parameter aURL definierte Webservice REST mit den Daten aData aufgerufen und die Antwort angezeigt.

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);

In der Praxis werden die Klassen der Klasse XTENDWSVC.classCallerSpg der Bibliothek XtendAjaxWsvc.js verwendet, um die Berechnung der URL und die Datenverarbeitung zu vereinfachen.

'Antwortobjekt'

Der Parameter Antwort ist eine Instanz von Ajax.response , die um spezifische Methoden zur Verwaltung der Antwort des XTEND-Servers erweitert wurde (XTENDAJAX.xtdExtendResponse).

{
    //-------------------------------------------------
    // Anzeige des Antwortinhalt im Textformat (XTENDAJAX.msgBox)
    xtdDisplay:function(),
    //-------------------------------------------------
    // Tabelle der Fehlermeldungen
    xtdMsgErr:,
    // Gibt True zurück, wenn die Antwort einen X3-Anwendungsfehler enthält
    xtdHasX3Error:function(),
    //-------------------------------------------------
    // Warnungstabelle
    xtdMsgWarning:,
    //-------------------------------------------------
    // Hinweistabelle
    xtdMsgInfo:,
    //-------------------------------------------------
    // Vollständige Meldungstabelle
    xtdMsgAll:,
    //-------------------------------------------------
    // ContenType der Antwort
    xtdContentType:,
    //-------------------------------------------------
    // True, fallsContentType=text/plain
    xtdIsText:function(),
    //-------------------------------------------------
    // True, falls ContentType=text/html
    xtdIsHtml:function(),
    //-------------------------------------------------
    // True, falls ContentType=application/xml
    xtdIsXml:function(),
    //-------------------------------------------------
    // True, falls ContentType=application/json
    xtdIsJson:function(),
   
    /*------------------ XML-Antwort ------------------*/
    //Wertet die Antwort aus und gibt ein XML-DO zurück (siehe XtendAjaxDom.js)
    xtdEvalXML,
    //Enthält den mit xtdEvalXML angelegten XML-DOM
    xtdResponseXML:,
   
    /*------------------ JSON-Antwort------------------*/
    //Wertet die Antwort aus und gibt ein JSON-Objekt zurück, das für die Antwort steht
    xtdEvalJSON:function(),
    //Enthält das mit xtdEvalJSON angelegte JSON-Objekt
    xtdResponseJSON:,
    //Gibt einen auf Basis einer Schlüssel- und Wertetabelle angelegten Hash ($H) zurück
    xtdHash:function(aKeyArray,aValArray),
   
    /*------- Antwort WEBSERVICE UNTERPROGRAMM -------*/
    //Wertet die Antwort auf ein Unterprogramm aus
    //-> Fügt spezifische Methoden hinzu
    xtdEvalJSONSpg:function(),
    //Gibt den Wert des Parameters AXPAR zurück
    AXPAR:function(aCode),
    //Gibt den Wert des Parameters AXPAR in ganzzahliger Form zurück
    AXPARInt:function(aCode,aDefValue),
   
    /*------ Antwort UNTERPROGRAMMDATENZUGRIFF -------*/    
    //Wertet die Antwort auf einen Webservice aus (Unterprogrammdatenzugriff)
    //-> Fügt spezifische Methoden hinzu
    xtdEvalJSONSpgAccess:function(),
    //Anzahl angeforderte Datensätze
    askedRecords:function(),
    //Gesamtanzahl Datensätze
    totalRecords:function(),
    //Anzahl zurückgegebene Datensätze
    returnedRecords:function(),
    //Rang (1-N) des ersten Datensatzes
    startRank:function(),
    //True, falls weitere Datensätze existieren - False, falls der Seitenumbruch beendet ist
    hasNext:function(),
   
    /*--------- Antwort X3-OBJEKT-WEBSERVICE ----------*/
    /Wertet die Antwort auf einen X3-Objekt-Webservice aus
    //-> Fügt die spezifischen Methoden hinzu
    xtdEvalJSONObject:function(),
    //Technische Gruppe ADXTEC
    adxADXTEC:function(aField),
    //Timestamp des X3-Objekts
    adxTimeStamp:function(),
    //Code, des X3-Benutzers, der das Objekt zuletzt geändert hat
    adxUser:function(),
}

Webservice-Schnittstelle

Einführung

In der Bibliothek XtendAjaxWsvc.js steht dem Benutzer eine Reihe von Klassen für die Vereinfachung des XTEND-REST-Webservice -Aufrufe vom Typ Schnittstellezur Verfügung.

Die AJAX-Abfrage stößt die Ausführung eines von der Schnittstellendatei identifizierten Webservice an und verarbeitet das Ergebnis direkt. Der XTEND-Server ruft lediglich den X3-Webservice auf und gibt die Antwort zurück.

Sämtliche Klassen und Funktion sind dem Objekt XTENDWSVC

zugeordnet.

Tools
/*----------------- TEST -----------------*/
//Aufruf der Schnittstelle aInterfaceId mit den aXmlData-Daten
// Anzeige des ErgebnissestestSpgXML:
function(aInterfaceId,aXmlData),
//---------------------------------------------
//Aufruf der Schnittstelle aInterfaceId mit den aJSONData-Daten
// Anzeige des ErgebnissestestSpgJSON:function(aInterfaceId,aJSONData),

/*----------------- CALL STATIQUE -----------------*/
//Aufruf der Schnittstelle des Unterprogramms aInterfaceId mit den aData-Daten
//Als Parameter werden die CallBack-Statistikfunktionen übergeben
runSpg:function(aInterfaceId,aData,onSuccess,onFailure),
//---------------------------------------------
//Analog runSpg mit Rückgabe der JSON-Daten
runSpgJSON:function(aInterfaceId,aData,onSuccess,onFailure),
//---------------------------------------------
//Analog runSpg Mit Rückgabe der XML-Daten
runSpgXML:function(aInterfaceId,aData,onSuccess,onFailure),

/*----------------- AUFRUFPARAMETER -----------------*/
//Gibt das Datenbankparameterobjekt XTENDWSVC.classParam zurück
//aJSONOptionen: JSON-Optionen (fakultativ)
newParam:function (aJSONOptions),
//---------------------------------------------
//Gibt ein Parameterobjekt für den Aufruf eines X3-Objekt-Webservice zurück
//Klasse XTENDWSVC.newParamXtdObject
//aTimeStampX3: X3-Timestamp des Objekts (fakultativ)
newParamXtdObject:function (aTimeStampX3,aJSONOptions),
//---------------------------------------------
//Gibt ein Parameterobjekt für den Aufruf eines Unterprogramm-Webservice zurück
//Klasse XTENDWSVC.classParamXtdSpg
newParamXtdSpg:function (aJSONOptions),
//---------------------------------------------
//Gibt ein Parameterobjekt für den Aufruf eines Unterprogramms für den Datenzugriff zurück
//Klasse XTENDWSVC.classParamXtdSpgAccess
//aNbLines: Maximal angeforderte Anzahl von Zeilen
//aStartAt: Rang des 1. Datensatzes
newParamXtdSpgAccess:function (aNbLines,aStartAt,aJSONOptions),
//---------------------------------------------
//Gibt ein Parameterobjekt für den Aufruf der Auswahlliste links zu einem X3-Objekt zurück
//Klasse Hash (Tabelle Schlüssel / Wert)
//aNbLinesReturned: Anzahl angeforderte Zeilen
newParamQuery:function(aNbLinesReturned,aJSONOPtions),
//---------------------------------------------
//Gibt ein Parameterobjekt vom Typ Schlüssel zurück
//Klasse Hash (Tabelle Schlüssel / Wert)
newParamRead:function(aJSONOPtions),
//---------------------------------------------
//Prüfung, ob es sich bei aHash wirklich um einen Abfrageparameter handelt
//Existenz des Schlüssels "_COUNT", der die Anzahl der angeforderten Zeilen umfasst
checkQueryParam:function(aHash,aReturnedCount),

Parameterklassen

XTENDWSVC.classParam

Basisklasse Parameter

XTENDWSVC.classParam=Class.create({
    /---------------------------------------
    //aJSONOptions: Options JSON
    initialize: function(aJSONOptions),
    /---------------------------------------
    //Gibt die JSON-Optionen zurück
    options:function(),
    /---------------------------------------
    // Fügt einen aCode-Parameter mit dem Wert aCode hinzu
    add:function(aCode,aValue),
    /---------------------------------------
    //Gibt den Wert des Parameters aCode zurück
    get:function(aCode)
)}

XTENDWSVC.classParamXtdSpg

Parameterklasse für den Aufruf eines Unterprogramm-Webservice, der von XTENDWSVC.classParam erbt.

XTENDWSVC.classParamXtdSpg=Class.create(XTENDWSVC.classParam,{
    /---------------------------------------
    //aJSONOptions: JSON-Optionen
    initialize: function(OptionsJSON),
    /---------------------------------------
    //Hinzufügen eines AXPAR-Parameters
    addAXPAR:function(aCode,aValue)    
});

XTENDWSVC.classParamXtdSpgAccess

Parameterklasse für den Aufruf eines Webservice vom Typ Datenzugriff, der von XTENDWSVC.classParamXtdSpgAccess erbt.

XTENDWSVC.classParamXtdSpgAccess=Class.create(XTENDWSVC.classParamXtdSpg,{
    /---------------------------------------
    //aJSONOptions: JSON-Optionen
    //aNbLines: maximale Anzahl der angeforderten Datensätze
    //aStartAt: Rang des 1. Datensatzes
    //Aktualisierung des Parameters '$REC_STARTAT','$TOTAL_COUNT','$RET_COUNT','$HAS_NEXT'
    initialize: function(aNbLines,aStartAt,aJSONOptions),
});

XTENDWSVC.classParamObject

Parameterklasse für den Aufruf eines X3-Objekt-Webservice, der von XTENDWSVC.classParam erbt.

XTENDWSVC.classParamObject=Class.create(XTENDWSVC.classParam,{
    /---------------------------------------
    //aJSONOptions: JSON-Optionen
    //aTimeStampX3: String - TimeStamp des X3-Objekts (kann null oder leer sein)
    //Hinzufügen des Parameters WW_MODSTAMP in die Gruppe ADXTEC mit Wert aTimeStamp
    initialize: function(aTimeStampX3,aJSONOptions),
});

Klasse XTENDWSVC.classJsonOpt

Klasse der JSON-Optionen

//---------------------------------------
//Aktivierung der Optionen noGroups
noGroups:function(),
//---------------------------------------
//Aktivierung der Optionen noRows
noRows:function(),
//---------------------------------------
//Aktivierung der Optionen noLabels
noLabels:function(),
//---------------------------------------
//Aktivierung der Optionen noClobs
noClobs:function(),
/---------------------------------------
//Aktualisierung der auszuschließenden Gruppenliste
//aValue: String oder Array of string
excludeGrp:function(aValue),
//---------------------------------------
//Aktualisierung der einzuschließenden Gruppenliste
includeGrp:function(aValue),
//---------------------------------------
//Aktualisierung der auszuschließenden Felder
excludeFld:function(aValue),
//---------------------------------------
//Aktualisierung der einzuschließenden Felder
includeFld:function(aValue),

/*------------- BEISPIEL -------------*/
var wOpts=new XTENDWSVC.classJsonOpt().noGroups().includeFld(["SOHNUM""ITMREF","QTY"]);

Klasse XTENDWSVC.classCaller

Basisklasse für den Aufruf eines REST-Webservice.

Standardmäßig können mit dieser Klasse nicht mehrere Abfragen parallel gestartet werden. Versuchte parallele Aufrufe werden gesperrt.

/*---------------- WICHTIGSTE METHODEN ----------------*/
//Konstruktor
//aInterfaceId: ID der XTEND-Schnittstelle
//Fakultativ: Die CallBack-Statistikfunktionen können als Parameter übergeben werden
//               falls in der Klasse nicht implementiert
//               -> aInterfaceId,onSuccess,onFailure,onException
initialize:function(aInterfaceId),
//-------------------------------------------------------
//Prüfung, ob der laufende Aufruf zum Absetzen der Abfrage führt
//aUrl        : Service-URL
//aData: Daten
//aContenType: ContentType
exec:function(aUrl,aData ,aContenType),

/*-------- METHODE CALLBACK MUSS ÜBERLADEN WERDEN ----------*/
// HTTP STATUS=200
// !! Die abgeleitete Methode muss $super(response) aufrufen, um den
//    Aufrufindikator auf False zu setzen
onSuccess:function(response),

/*--------- DIE METHODE CALLBACK MUSS EVENTUELL ÜBERLADEN WERDEN ----------*/
// JAVASCRIPT-AUSNAHME
//Die Methode wirft die Ausnahme standardmäßig
// !! Die abgeleitete Methode muss $super(request,exception,true) aufrufen,
//    um den Aufrufparameter auf False zu setzen, ohne das Ergebnis anzuzeigen
onException:function(request,exception,aIsOverriden),
//-------------------------------------------------------
// HTTP STATUS!=200
//Die Methode wirft die Ausnahme standardmäßig
// !! Die abgeleitete Methode muss $super(request,headerJSON,true) aufrufen, um den
//    Aufrufindikator auf False zu setzen, ohne das Ergebnis anzuzeigen
onFailure:function(response,headerJSON,aIsOverriden),

/*--------------------- FORMATE --------------------*/
//Festlegung von application/json als Rückgabedatentyp
//Standardtyp
setReturnJSON:function(),
//-------------------------------------------------------
//Festlegung von application/xml als Rückgabedatentyp
setReturnXML:function(),
//-------------------------------------------------------
//True, falls XML-Daten zurückgegeben werden
returnXML:function(),
//-------------------------------------------------------
//True, falls JSON-Daten zurückgegeben werden
returnJSON:function(),


/*--------------------- SONSTIGES ---------------------*/
//sendet die Anfrage an den Server, wenn kein Aufruf läuft
sendRequest:function(aUrl,aDataObject,aContenType)
//-------------------------------------------------------
//Gibt die Schnittstellen-Id zurück
getId:function(),

/*------------- VERWALTUNG PARALLELE AUFRUFE -------------*/
// Ist zu überladen, wenn parallele Aufrufe gewünscht sind
//aBusy: True, wenn ein Aufruf läuft
//Gibt True zurück, um den Webservice-Aufruf zu autorisieren
doSendRequest:function(aBusy),
//-------------------------------------------------------
//Aktualisierung des Auslastungsindikators
setBusy:function(aYes),
//-------------------------------------------------------
//True, falls ein Aufruf läuft
isBusy:function(),

Klasse XTENDWSVC.classCallerSpg

Basisklasse für den Aufruf eines REST-Unterprogramm-Webservice.

XTENDWSVC.classCallerSpg=Class.create(XTENDWSVC.classCaller,{
    //-------------------------------------------------------
    //Konstruktor
    initialize:function(aInterfaceId),
    //-------------------------------------------------------
    //Führt die Abfrage mit aData-Daten aus
    //Zulässiger Wert für aData
    // -null oder undefined -> this.exec()
    // -String -> this.exec(aString,'text/plain')
    // -Hash   -> this.runFORMENCODED(aData)
    // -Sonstige  -> this.runJSON(Object.toJSON(aData))
    run:function(aData),
    //-------------------------------------------------------
    //Führt die Abfrage mit aXML-XML-Daten aus
    runXML:function(aXML),
    //-------------------------------------------------------
    //Führt die Abfrage mit aJSON-JSON-Daten aus
    // JSON: JSON-String oder JavaScript-Objekt (Parameterklasse)
    runJSON:function(aJSON),   
    //-------------------------------------------------------
    //Die Abfrage wird mit der Schlüssel- / Wertetabelle sHash ausgeführt
    //aHash steht für den Inhalt eines Formulars <form>
    runFORMENCODED:function(aHash),
});

Beispiel

Mit nachstehendem Beispiel wird die XTDLOGIN-Schnittstelle der aktuellen Website aufgerufen und die Antwort angezeigt.

Unterprogrammaufruf

var wClassCaller=Class.create(XTENDWSVC.classCallerSpg,{
   //Der Konstruktor ist fakultativ, wenn es außer aInterfaceId keine Parameter gibt
   initialize:function($super,aInterfaceId){
      $super(aInterfaceId);
   },
   //Obligatorische Methode zur Antwortbehandlung
   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);

Ergebnis

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

Content-Type:
application/json;charset=utf-8

X3 INFORMATION MESSAGES :
Sie sind mit der Anwendung mit Benutzercode DIS001 verbunden

{
"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"]
}

Klasse XTENDWSVC.classCallerObject

Basisklasse für den Aufruf eines X3-REST-Webservice.

XTENDWSVC.classCallerObject=Class.create(XTENDWSVC.classCaller,{
    //-------------------------------------------------------
    //Konstruktor
    initialize:function(aInterfaceId),
    //-------------------------------------------------------
    //Methode save
    //aData : Daten im Format JSON ou XML
    actCreate:function(aData),
    //-------------------------------------------------------
    //Methode  Read
    //aHashKeys: Hash, der die Schlüssel des Objekts
    actRead enthält:function(aHashKeys),
    //-------------------------------------------------------
    //Methode  Delete
    //aHashKeys : Hash, der die Schlüssel des Objekts
    actDelete enthält:function(aHashKeys),
    //-------------------------------------------------------
    //Methode  Modify
    //aHashKeys : Hash, der die Schlüssel des Objekts
   //aData enthält: Daten im Format JSON ou XML
    actUpdate:function(aHashKeys,aData),
    //-------------------------------------------------------
    //Code-Aktion aCode
    //aCode     : Aktionscode
    //aHashKeys : Hash, der die Schlüssel des Objekts
    actOtherKeyenthält: function(aCode,aHashKeys),
    //-------------------------------------------------------
    //Code-Aktion aCode
    //aCode     : Aktionscode
    //aData: Daten im Format JSON oder XML
    actOtherData:function(aCode,aData),
    //-------------------------------------------------------
    //Action query list links
    //aHashKeys      : Hash, der die Auswahlschlüssel enthält
    //aReturnedCount: Fakultativ - Anzahl angeforderte Zeilen
    actQuery:function(aHashKeys,aReturnedCount),
});

Beispiel

Mit nachstehendem Beispiel wird die X3-Objekt-Schnittstelle OBJAYZ (Objekt AYZ) der aktuellen Website aufgerufen und die Antwort angezeigt.

Objektaufruf

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","Titre du formulaire");
wParams.add("MAICOD","
frdal@sage.com");
wParams.add("CMT","Commentaire");
new wClassCaller("OBJAYZ").actCreate(wParams);

Ergebnis

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

Content-Type:
application/json;charset=utf-8

X3-MELDUNG
Formular angelegt

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

Skript-Webservices

Einführung

In der Bibliothek XtendAjaxScripts.js steht dem Benutzer eine Reihe von Klassen für die Vereinfachung der REST-Webservice-Aufrufe vom Typ Skriptserverzur Verfügung.

Das auf dem XTEND-Server ausgeführte Skript greift über die Schnittstelle IXtdAjaxScriptContextauf den Sitzungskontext zu.

Klasse XTENDSCRIPTS.classCaller

Basisklasse für den Aufruf eines Skriptserver-Webservice.

Diese Klasse funktioniert analog zu den Schnittstellen-Webservices, es können aber beliebige Parameter an das Skript übergeben werden.

Die Parameter werden mit der Funktion XTD_CTX.getHttpBody gelesen. Der Inhalt wird vom Skript selbst interpretiert.

Auch das Format der zurückgegebenen Antwort ist frei.

Die Daten (String) werden von der Print-Funktion direkt in einen Buffer geschrieben, der an den Client zurückgegeben wird.

Mit der Funktion XTD_CTX.setHttpContenType kann der ContentType der Antwort verwaltet werden.

Das Skript kann beispielsweise HTML-Code zurückgeben, der dynamisch in die Seite eingefügt wird.

Methoden

/*---------------- WICHTIGSTE METHODEN ----------------*/
//Konstruktor
//aScriptId: Pfad des Skripts, relativ zum Rootverzeichnis der Skripte
//Fakultativ: Die CallBack-Statistikfunktionen können als Parameter übergeben werden
//               falls in der Klasse nicht implementiert
//               -> aScriptId,onSuccess,onFailure,onException
initialize:function(aInterfaceId),
//-------------------------------------------------------
//Führt die Skripte mit aParams als Parameter aus
//Der Inhalt von aParams und hängt vom aufgerufenen Skript ab
run:function(aParams), 


/*-------- METHODE CALLBACK MUSS ÜBERLADEN WERDEN ----------*/
// HTTP STATUS=200
// !! Die abgeleitete Methode muss $super(response) aufrufen, um den
//    Aufrufindikator auf False zu setzen
onSuccess:function(response),

/*--------- DIE METHODE CALLBACK MUSS EVENTUELL ÜBERLADEN WERDEN ----------*/
// JAVASCRIPT-AUSNAHME
//Die Methode wirft die Ausnahme standardmäßig
// !! Die abgeleitete Methode muss $super(request,exception,true) aufrufen,
//    um den Aufrufparameter auf False zu setzen, ohne das Ergebnis anzuzeigen
onException:function(request,exception,aIsOverriden),
//-------------------------------------------------------
// HTTP STATUS!=200
//Die Methode wirft die Ausnahme standardmäßig
// !! Die abgeleitete Methode muss $super(request,headerJSON,true) aufrufen, um den
//    Aufrufindikator auf False zu setzen, ohne das Ergebnis anzuzeigen
onFailure:function(response,headerJSON,aIsOverriden),

/*------------- VERWALTUNG PARALLELE AUFRUFE -------------*/
// Ist zu überladen, wenn parallele Aufrufe gewünscht sind
//aBusy: True, wenn ein Aufruf läuft
//Gibt True zurück, um den Webservice-Aufruf zu autorisieren
doSendRequest:function(aBusy),
//-------------------------------------------------------
//Aktualisierung des Auslastungsindikators
setBusy:function(aYes),
//-------------------------------------------------------
//True, falls ein Aufruf läuft
isBusy:function(),

Klasse XTENDSCRIPTS.classUpdater

Mit dieser Klasse können HTML-Elemente (div, span etc.) nach Eingang der Antwort des Webservice aktualisiert werden, sofern dieser eine Antwort der Art HTML text/htmlzurückgibt.

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

    //-------------------------------------------------------
    //Konstruktor
    //aScriptId    : Pfad des Skriptservers
    //aUpdateId    : Id des zu aktualisierenden DOM-Elements
    //aClearBefore: True, um vor Abfrageversand den Inhalt von aUpdateld löschen zu können
    initialize: function(aScriptId,aUpdateId,aClearBefore),
   
    //-------------------------------------------------------
    // Skriptausführung mit aParams wie Parameter
    run:function(aParams),
});
    

Beispiel

Aufruf eines Skripts, das die beiden Parameter P1 und P2 liegt sowie Rückgabe des Parameterinhalts in Form eines HTML-Inhalts.

Skript

//Include der Werkzeugbibliothek
#include "libs\xtdWsvc.js"

//Lesen der vom Client gesendeten Daten
// -> In diesem Beispiel JSON-Daten
// -> String im Format: {P1:"ValeurP1",P2:"ValeurP2"}
//Die Eval-Funktion legt ein JavaScript-Objekt an aus dem String
var wInput=eval('('+XTD_CTX.getHttpBody()+')');

//Hilfsobjekt zum Aufbau der HTML-Antwort
var wHtml=new XTENDWSVC.classHTMLBuffer;

//Es wird ein HTML zurückgegeben, das die fett formatierten Parameter enthält
wHtml.append("<b>P1=").append(wInput.P1).append("</b><br>");
wHtml.append("<b>P2=").append(wInput.P2).append("</b><br>");

//Schreiben der Antwort
print(wHtml.html());

//Aktualisierung ContenType
XTD_CTX.setHttpContenType("text/html");

Aufruf auf Basis der HTML-Seite

<Script>
  function callAjaxScript(aP1,aP2){
    //Parameter
    var wParams={P1:aP1,P2:aP2};
    //ajaxTest3.js ist der Pfad des Skripts
    //idReponseScript ist die Id, die das HTML-Ergebnis anzeigt
    //True zum Löschen des Inhalts der div vor Skriptaufruf
    new XTENDSCRIPTS.classUpdater("ajaxTest3.js","idReponseScript",true).run(wParams);
  }
</script>
<!--Button zum Anstoßen des Aufrufs->
<input type="button" value="callAjaxScript" onClick="javascript:callAjaxScript('Hello','world');"><br>
<!--div zur Ergebnisanzeige-->
<div id="idReponseScript"></div>

Abfrageergebnis

GESAY_ADV_AJAX_1.jpg