Livraria AJAX 

Introdução

A livraria AJAX está baseada sobre prototype.js.

Ela está constituida dos ficheiros seguintes que são carregados aiutomaticamente no navegador via o token <script adx="ALIBJS"></script>:

prototype.js

Livraria protótipo versão 1.6.0.3

XtendAjax.js

Gestão dos pedidos AJAX com destino do servidor XTEND

XtendAjaxFlash.js

Gestão dos pedidos AJAX para os componentes FLASH X3

XtendAjaxMsgs.js

Gestão dos pedidos AJAX para afixação das mensagens utilizador no navegador.

Via a função JavaScript xtdAlert(messId,p1,P2,P3,P4)

XtendAjaxScripts.js

Gestão dos pedidos AJAX para a chamada dos scripts server

XtendAjaxWsvc.js

Gestão dos pedidos AJAX para a chamada das interfaces XTEND (web services X3).

XtendAjaxDom.js

Utilitário para a gestão de um DOM XML

XtendAjaxUtils.js

Utilitários diversos

XTENDAJAX.request

Principio

A chamada de pedido AJAX está assincrono o que significa que após o envio do pedido HTTP versus o programa chamador não obtem resposta do servidor.

A resposta chega ao objetivo de um "certo tempo" cujo não o domina.

É apenas quando o objeto HTTPREQUEST recebe a resposta que chama uma função JavaScript CallBack para tratar o resultado.

Em standard a função CallBack não contém que a resposta HTTP como parâmetro e não permite de encontrar o contexto de chamada do pedido.

A classe XTENDAJAX.request da livraria XtendAjax.js sobrecarga a classe Ajax.Request da livraria protótipo no objetivo em facilitar a utilizaação e de permitir um acesso ao contexto de chamada na função CallBack.

XTENDAJAX.request=Class.create(Ajax.Request,{
    inicializa: função(aCaller,url,aContentType,aReturnedType,params)
    {   
        // Tratamento específico
        // Chamada do pedido Ajax de prototype.js
        $super(url,options);
    },

aCaller

Objet appelant (voir § suivant)

url

Url de chamada do web service REST XTEND

aContentType

ContentType dos dados enviados - null autorizado

  • application/xml
    -> params contient une String XML
  • application/json
    -> params contém uma String JSON
  • application/x-www-form-urlencoded
    -> params contient un Hash ($H prototype.js)
aReturnedType

ContentType dos dados enviados - null autorizado

Param.

Dados enviados no corpo do pedido - null autorizado

Todas as classes e funções são anexadas ao objeto XTENDAJAX.

Objeto chamador

É o objecto que chama o pedido e que gera o contexto de chamada cujo se terá necessidade para tratar a resposta.

Este objeto deve implementar os métodos seguintes para tratar as diferentes listas da resposta.

    //------------------------------------------------
    //Chamada se HTTP estatuto é igual = 200
    //resposta : Classe Ajax.Response
    onSuccess:function(response){
   
    },
    //------------------------------------------------
    //Chamada se HTTP estatuto é diferente de 200
    //pedido   : Classe Ajax.Request
    //exceção: String ou classe Error
    onFailure:function(request, exception){
   
    },
    //------------------------------------------------
    //Chamada sobre exceção JavaScript
    //pedido   : Classe Ajax.Request
    onException :function(response,headerJSON){
   
    }

As funções onFailure e onException são facultativas.

Se o objeto chamador não os implementa as funções de afixação XTENDAJAX.displayException e XTENDAJAX.displayFailure serão chamados.

Exemplos:

O exemplo a seguir cchama o web service REST identificado pelo paâmetro aURL com os dados aData e afixa a resposta.

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

Na prática utiliza-se as classes da classe XTENDWSVC.classCallerSpg da livraria XtendAjaxWsvc.js que facilitam o cálculo de url e a manipulação dos dados.

Objet "response"

O parâmetro resposta está instanciado a partir da classe Ajax.response à qual se acrescentou os métodos especificos para manipular a resposta do servidor XTEND (XTENDAJAX.xtdExtendResponse).

{
    //-------------------------------------------------
    // Afixa o conteúdo da resposta ao formato texto (XTENDAJAX.msgBox)
    xtdDisplay:function(),
    //-------------------------------------------------
    // Quadro que contém as mensagens de erro
    xtdMsgErr:,
    // Reenvia verdade se a resposta comporta um erro aplicativo X3
    xtdHasX3Error:function(),
    //-------------------------------------------------
    // Quadro que contém as mensagens warning
    xtdMsgWarning:,
    //-------------------------------------------------
    // Quadro que contém as mensagens de informação
    xtdMsgInfo:,
    //-------------------------------------------------
    // Quadro que contém todas as mensagens
    xtdMsgAll:,
    //-------------------------------------------------
    // ContenType de la réponse
    xtdContentType:,
    //-------------------------------------------------
    // True si ContentType=text/plain
    xtdIsText:function(),
    //-------------------------------------------------
    // True si ContentType=text/html
    xtdIsHtml:function(),
    //-------------------------------------------------
    // True si ContentType=application/xml
    xtdIsXml:function(),
    //-------------------------------------------------
    // True si ContentType=application/json
    xtdIsJson:function(),
   
    /*------------------ Réponse XML ------------------*/
    //Avalia a resposta e reenvia um DOM XML (ver XtendAjaxDom.js)
    xtdEvalXML,
    //Contient le DOM XML créé par xtdEvalXML
    xtdResponseXML:,
   
    /*------------------ Reposta JSON------------------*/
    //Avalia a resposta e reenvia um objeto JSON que representa a resposta
    xtdEvalJSON:function(),
    //Contém o objeto JSON criado por xtdEvalJSON
    xtdResponseJSON:,
    //Reenvia un Hash ($H) criado a partir de um quadro de chaves e de valores
    xtdHash:function(aKeyArray,aValArray),
   
    /*------- Resposta WEB SERVICE SOUS-PROGRAMME -------*/
    //Avalia a resposta a um sub-programa
    //-> Acrescenta os métodos específicos
    xtdEvalJSONSpg:function(),
    //Reenvia o valor do parâmetro AXPAR
    AXPAR:function(aCode),
    //Reenvia o valor do parâmetro AXPAR como um inteiro
    AXPARInt:function(aCode,aDefValue),
   
    /*------ Resposta SOUS-PROGRAMME ACCES DONNEES -------*/    
    //Avalia a resposta a um web service sub-programa acesso dados
    //-> Acréscimo os métodos específicos
    xtdEvalJSONSpgAccess:function(),
    //Número de registos pedidos
    askedRecords:function(),
    //Número total de records
    totalRecords:function(),
    //Número de records reenviados
    returnedRecords:function(),
    //Rang (1-N) do primeiro registo
    startRank:function(),
    //Verdade se existem registos seguintes - Falso se paginação terminada
    hasNext:function(),
   
    /*--------- Resposta WEB SERVICE OBJET X3 ----------*/
    //Avalia a resposta a um web service objet X3
    //-> Acrescenta os métodos específicos
    xtdEvalJSONObject:function(),
    //Grupo técnico ADXTEC
    adxADXTEC:function(aField),
    //Timestamp de objet X3
    adxTimeStamp:function(),
    //UserCode X3 que modificaou um objeto em último
    adxUser:function(),
}

Web services interface

Introdução

A livraria XtendAjaxWsvc.js coloca à disposição do programador um conjunto de clase para facilitar a chamada das web services REST d'XTEND de tipo interface.

O pedido AJAX desencadeia a execução de um web service identificado pela ficha interface e trata diretamente o resultado. O servidor XTEND não faz que chamar o web service X3 e reenvia a resposta.

Todas as classes e funções são anexadas ao objeto XTENDWSVC

Utilitários

/*----------------- TESTES -----------------*/
//Chamada ao interface aInterfaceId com os dados aXmlData
// Afixa o resultado
testSpgXML:function(aInterfaceId,aXmlData),
//---------------------------------------------
//Chamada interface aInterfaceId com os dado aJSONData
// Afixa o resultado
testSpgJSON:function(aInterfaceId,aJSONData),

/*----------------- CALL ESTÁTICA -----------------*/
//Chamada de interface sob programa aInterfaceId com os dados aData
//As funções CallBack statiques são pasadas em parâmetro
runSpg:function(aInterfaceId,aData,onSuccess,onFailure),
//---------------------------------------------
//Idem runSpg com os dados JSON em devolução
runSpgJSON:function(aInterfaceId,aData,onSuccess,onFailure),
//---------------------------------------------
//Idem runSpg com os dados XML em retorno
runSpgXML:function(aInterfaceId,aData,onSuccess,onFailure),

/*----------------- PARAMETROS DE CHAMADA -----------------*/
//Reenvia um objeto parâmetro de base XTENDWSVC.classParam
//aJSONOptions : opções JSON (facultativo)
newParam:function (aJSONOptions),
//---------------------------------------------
//Reenvia um objeto parâmetro para a chamada de um web service objeto X3
//Classe XTENDWSVC.newParamXtdObject
//aTimeStampX3 : O timestamp X3 de objeto (facultativo)
newParamXtdObject:function (aTimeStampX3,aJSONOptions),
//---------------------------------------------
//Reenvia um objeto parâmetro para uma opção de chamada de um web service sub-programa
//Classe XTENDWSVC.classParamXtdSpg
newParamXtdSpg:function (aJSONOptions),
//---------------------------------------------
//Reenvia um objeto parâmetro para a chamada de em sub-programa "acesso aos dados"
//Classe XTENDWSVC.classParamXtdSpgAccess
//aNbLines : número máximo de registos pedidos
//aStartAt : fila do 1º registo
newParamXtdSpgAccess:function (aNbLines,aStartAt,aJSONOptions),
//---------------------------------------------
//Reenvia um objeto parâmetro para a chamada de uma lista de esquerda X3
//Classe Hash (quadro chave/valor)
//aNbLinesReturned : número de linhas pedidas
newParamQuery:function(aNbLinesReturned,aJSONOPtions),
//---------------------------------------------
//Reenvia um objeto parâmetro de tipo chave
//Classe Hash (quadro chave/valor)
newParamRead:function(aJSONOPtions),
//---------------------------------------------
//Verifica que aHash está bem parametrizada por um query
//Presença da chave "_COUNT" que contém o número de linhas pedidas
checkQueryParam:function(aHash,aReturnedCount),

Classes parâmetros

XTENDWSVC.classParam

Classe de bases dos parâmetros.

XTENDWSVC.classParam=Class.create({
    /---------------------------------------
    //aJSONOptions : Opções JSON
inicializa: function(aJSONOptions),
    /---------------------------------------
    //Reenvia as opções JSON
    opções:function(),
    /---------------------------------------
    //Acrescenta um parâmetro aCode avec la valeur aCode
    add:function(aCode,aValue),
    /---------------------------------------
    //Reenvia o valor do parâmetro aCode
    get:function(aCode)
)}

XTENDWSVC.classParamXtdSpg

Classe de parâmetros de chamada de um web service sub-programa que herda de XTENDWSVC.classParam.

XTENDWSVC.classParamXtdSpg=Class.create(XTENDWSVC.classParam,{
    /---------------------------------------
    //aJSONOptions : Opções JSON
inicializa: function(OptionsJSON),
    /---------------------------------------
    //Acrescenta um parâmetro AXPAR
    addAXPAR:function(aCode,aValue)    
});

XTENDWSVC.classParamXtdSpgAccess

Classe de parâmetros de chamada de um web service sub-programa de "tipo de dados" que herda de XTENDWSVC.classParamXtdSpgAccess

XTENDWSVC.classParamXtdSpgAccess=Class.create(XTENDWSVC.classParamXtdSpg,{
    /---------------------------------------
    //aJSONOptions : Options JSON
    //aNbLines : número máximo de registos pedidos
//aStartAt : fila do 1º registo
//Atualiza os parâmetros '$REC_STARTAT','$TOTAL_COUNT','$RET_COUNT','$HAS_NEXT'
    inicializa: function(aNbLines,aStartAt,aJSONOptions),
});

XTENDWSVC.classParamObject

Classe de paramètre d'appel d'un web service objet X3 qui hérite de XTENDWSVC.classParam.

XTENDWSVC.classParamObject=Class.create(XTENDWSVC.classParam,{
    /---------------------------------------
    //aJSONOptions : Options JSON
    //aTimeStampX3 : String - TimeStamp de objeto X3 (pode ser nula ou vazia)
    //Acréscimo o parâmetro WW_MODSTAMP no grupo ADXTEC com o valor aTimeStamp
    inicializa: function(aTimeStampX3,aJSONOptions),
});

Classe XTENDWSVC.classJsonOpt

Classe que representa as opções JSON.

//---------------------------------------
//Ativa a opção noGroups
noGroups:function(),
//---------------------------------------
//Ativa a opção noRows
noRows:function(),
//---------------------------------------
//Ativa a opção noLabels
noLabels:function(),
//---------------------------------------
//Ativa a opção noClobs
noClobs:função(),
/---------------------------------------
//Atualiza a lista dos grupos a excluir
//aValue : String or Array of string
excludeGrp:function(aValue),
//---------------------------------------
//Atualiza a lista de grupos a incluir
includeGrp:function(aValue),
//---------------------------------------
//Atualiza a lista dos campos a excluir
excludeFld:function(aValue),
//---------------------------------------
//Atualiza a lista dos campos a incluir
includeFld:function(aValue),

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

Classe XTENDWSVC.classCaller

Trata-se da classe de base utilizada para chamar um web service REST.

Por defeito esta classe não permite colocar vários pedidos simultaneamente e bloca as tentativas de chamadas múltiplas.

/*---------------- MÉTODOS PRINCIPAIS ----------------*/
//Construtor
//aInterfaceId : ID de interface XTEND
//Facultativo   : pode passar as funções CallBack estáticos em parâmetro
//se não implementado na classe
//-> aInterfaceId,onSuccess,onFailure,onException
inicializa:function(aInterfaceId),
//-------------------------------------------------------
//Verifica se a chamada em curso e desencadeada o envio do pedido
//aUrl        : Url do serviço
//aData       : Dados
//aConten Tipo : ContentType
exec:function(aUrl,aData ,aContenType),

/*-------- MÉTODO CALLBACK A SOBRECARREGAR OBRIGATORIAMENTE ----------*/
// HTTP STATUS=200
// !! O método filhos deve chamar $super (resposta) para posicionar
//o indicador de chamada a falso.
onSuccess:function(resposta),

/*--------- METODO CALLBACK A SOBRECARREGAR EVENTUALMENTE ----------*/
// EXCEPTION JAVASCRIPT
//Por defeito este método afixa a excepção
// !! O método filhos deve chamar $super(request,exception,true)
//    para posicionar o indicador de chamada a falso sem afixar o resultado
onException:function(request,exception,aIsOverriden),
//-------------------------------------------------------
// HTTP STATUS!=200
//Por defeito este método afixa a causa de erro
// !! O método filhos deve chamar $super(request,headerJSON,true)
//    para posicionar o indicador de chamada a falso sem afixar o resultado
onFailure:function(response,headerJSON,aIsOverriden),

/*--------------------- FORMATOS --------------------*/
//Fixa aplicação/json como tipo de dados em retorno
//Tipo por defeito
setReturnJSON:function(),
//-------------------------------------------------------
//Fixa aplicação como tipo de dados em retorno
setReturnXML:function(),
//-------------------------------------------------------
//Verdade se os dados XML em retorno
returnXML:function(),
//-------------------------------------------------------
//Verdade se dados JSON em devolução
returnJSON:function(),


/*--------------------- DIVERSOS ---------------------*/
//posto efetivamente o pedido versus o servidor se sem chamada em curso
sendRequest:function(aUrl,aDataObject,aContenType)
//-------------------------------------------------------
//Reenvia o id de interface
getId:function(),

/*------------- GESTÃO CHAMADAS MÚLTIPLAS -------------*/
//A sobrecarregar se pretende desbloquar as chamadas múltiplas
//aBusy : Verdade se chamada em curso
//Reenvio para autorizar a chamada de web service
doSendRequest:function(aBusy),
//-------------------------------------------------------
//Atualização indicador de ocupação
setBusy:function(aYes),
//-------------------------------------------------------
//Verdade se chamada em curso
isBusy:function(),

Classe XTENDWSVC.classCallerSpg

Trata-se da classe de base utilizada para chamar um web service REST sub-programa

XTENDWSVC.classCallerSpg=Class.create(XTENDWSVC.classCaller,{
    //-------------------------------------------------------
    //Construtor
    inicialização:function(aInterfaceId),
    //-------------------------------------------------------
    //Exécute la requête avec les données aData
    //Valeur autorisée pour aData
    // -null ou undefined -> this.exec()
    // -String -> this.exec(aString,'text/plain')
    // -Hash   -> this.runFORMENCODED(aData)
    // -Autre  -> this.runJSON(Object.toJSON(aData))
    run:function(aData),
    //-------------------------------------------------------
    //Exécute la requête avec les données XML aXML
    runXML:function(aXML),
    //-------------------------------------------------------
    //Exécute la requête avec les données JSON aJSON
    // JSON : String JSON ou objeto JavaScript (classe parâmetro)
    runJSON:function(aJSON),   
    //-------------------------------------------------------
    //Executa o pedido com o quadro de chaves/valores aHash
    //aHash representa o conteúdo de um formulário <form>
    runFORMENCODED:function(aHash),
});

Exemplos:

O exemplo a seguir chamada de interface XTDLOGIN do estabelecimento corrente e afixa a resposta.

Call Sub-Programa

var wClassCaller=Class.create(XTENDWSVC.classCallerSpg,{
   //Construtor facultativo se não há outros parâmetros que aInterfaceId
   initializa:function($super,aInterfaceId){
      $super(aInterfaceId);
   },
   //Método obrigatório para tratar a resposta
  onSuccess:function(resposta){
      responstae.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);

Resultado

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

Contente-Tipo :
aplicação/json;charset=utf-8

X3 INFORMAÇÃO MENSAGENS :
Você está bem conectado com o código utilizador 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"]
}

Classe XTENDWSVC.classCallerObject

Trata-se da classe de base utilizada para chamar um web service REST objet X3.

XTENDWSVC.classCallerObject=Class.create(XTENDWSVC.classCaller,{
    //-------------------------------------------------------
    //Construtor
    inicializa:function(aInterfaceId),
    //-------------------------------------------------------
    //Méthode save
    //aData : Dados ao formato JSON ou XML
actCreate: função (aData),
//-------------------------------------------------------
//Método Read
Hash que contém as chaves de objeto
    actRead:function(aHashKeys),
    //-------------------------------------------------------
    //Método apagar
    //aHashKeys : Hash que contém as chaves de objeto
    actDelete:function(aHashKeys),
    //-------------------------------------------------------
    //Método modificar
    //aHashKeys : Hash que contém as chaves de objeto
    //aData     : Dados ao formato JSON ou XML
actUpdate: função (aHashKeys,aData),
//-------------------------------------------------------
//Ação de code aCode
//aCode: Código de ação
//aHashKeys : Hash que contém as chaves de objecto
actOtherKey: function(aCode,aHashKeys),
//-------------------------------------------------------
//Ação de código aCode
//aCode     : Código da ação
    //aData     : Dados ao formato JSON ou XML
    actOtherData:function(aCode,aData),
    //-------------------------------------------------------
    //Ação query lista esquerda
    //aHashKeys      : Hash que contém as chaves para a seleção
    //aReturnedCount : Opcional - Número de linhas pedidos
actQuery : function(aHashKeys,aReturnedCount),
});

Exemplos:

O exemplo a seguir chamada de interface objeto X3 OBJAYZ (objeto AYZ) do estaebelecimento em criação e afixa a resposta.

Call Objet

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","Título do formulário");
wParams.add("MAICOD","
frdal@sage.com");
wParams.add("CMT","Comentário");
new wClassCaller("OBJAYZ").actCreate(wParams);

Resultado

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

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

X3 INFORMAÇÃO MENSAGENS :
Formulário criado

{
"FRMCOD":"0902000005",
"FCYCOD":"FDBTEST",
"ZFCYCOD":"Estab.de teste fdalbo",
"TYP":"OTH",
"ZTYP":"Diversos",
"STATUT":"1",
"STATUT_LBL":"A tratar",
"TTL":"Título do formulário",
"MAICOD":"
frdal@sage.com",
"CREDAT":"20090227",
"CREHEURE":"184431",
"CMT":"Comentário",
"PARCOD":[],
"PARVAL":[],
"WW_MODSTAMP":"000000000000",
"WW_MODUSER":""
}

Web services script

Introdução

A livraria XtendAjaxWsvc.js coloca à disposição do programador um conjunto de clase para facilitar a chamada das web services REST de tipo script serveur.

O scipt que se executa sobre o servisor XTEND acede ao contaxto da sessão via interface IXtdAjaxScriptContext.

Classe XTENDSCRIPTS.classCaller

Trata-se da classe de base utilizada para chamar um web service script serveur.

Esta classe funciona segundo o mesmo princípio que os web services interface mas os parâmetros que passam ao script servidor são livres,

São lidos via a função XTD_CTX.getHttpBody e o conteúdo está interpretado pelo script ele mesmo.

Assim, o formato da resposta reenviada está livre

É a função print que escreve directamente os dados (String) num buffer que será reenviado versus o cliente.

A função XTD_CTX.setHttpContenType permite gerar o ContentType da resposta.

Por exemplo, o script para reenviar do HTML que será inserido dinamicamente na página.

Métodos

/*---------------- MÉTODOS PRINCIPAIS ----------------*/
//Construtor
//aScriptId : Caminho relativo do script por relação à raíz dos scripts
//Facultativo : pode-se passar as funções CallBack estáticas em parâmetro
//               se não implementada na classe
//               -> aScriptId,onSuccess,onFailure,onException
inicializa:function(aScriptId),
//-------------------------------------------------------
//Executa os scripts com aParams como parâmetro
//O conteúdo de aParams está livre e depende do script chamado
run:function(aParams), 


/*-------- MÉTODO CALLBACK A SOBRECAREGAR OBRIGATORIAMENTE ----------*/
// HTTP STATUS=200
// !! O método filhos deve chamar $super (resposta) para posicionar
//o indicador de chamada a falso.
onSuccess:function(resposta),

/*--------- METODO CALLBACK A SOBRECARREGAR EVENTUALMENTE ----------*/
// EXCEPTION JAVASCRIPT
//Por defeito este método afixa a excepção
// !! O método filhos deve chamar $super(request,exception,true)
//    para posicionar o indicador de chamada a falso sem afixar o resultado
onException:function(request,exception,aIsOverriden),
//-------------------------------------------------------
// HTTP STATUS!=200
//Por defeito este método afixa a causa de erro
// !! O método filhos deve chamar $super(request,headerJSON,true)
//    para posicionar o indicador de chamada a falso sem afixar o resultado
onFailure:function(response,headerJSON,aIsOverriden),

/*------------- GESTÃO CHAMADAS MÚLTIPLAS -------------*/
//A sobrecarregar se pretende desbloquar as chamadas múltiplas
//aBusy : Verdade se chamada em curso
//Reenvio verdade para autorizar a chamada de web service
doSendRequest:function(aBusy),
//-------------------------------------------------------
//Atualização indicador de ocupação
setBusy:function(aYes),
//-------------------------------------------------------
//Verdade se chamada em curso
isBusy:function(),

Class XTENDSCRIPTS.classUpdater

Esta classe permite atualizar um elemento do DOM HTML (div, span...) à recepção da resposta do web service se este reenvia uma resposta HTML text/html.

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

    //-------------------------------------------------------
    //Construtor
    //aScriptId    : Path do script servidor
//aUpdateId    : ID do elemento do DOM a atualizar
//aClearBefore : Verdade para apagar o conteúdo de aUpdateId antes envio do pedido
inicializa: function(aScriptId,aUpdateId,aClearBefore),
   
    //-------------------------------------------------------
    // Executa o script com aParams como parâmetro
    run:function(aParams),
});
    

Exemplos:

Chamada de um script que lê 2 parâmetros P1 e P2 e reenvia o conteúdo dos parâmetros sob forma de um conteúdo HTML.

Script

//Inclui da livraria utilitários
#include "libs\xtdWsvc.js"

//Leitura dos dados enviados pelo cliente
// -> Neste exemplo tratam-se de dados JSON
// -> String ao formato : {P1:"Valor P1",P2:"Valor P2"}
//A função Eval cria um objeto JavaScrit à partir da String
var wInput=eval('('+XTD_CTX.getHttpBody()+')');

//Objeto utilitário para construir a resposta HTML
var wHtml=new XTENDWSVC.classHTMLBuffer;

//reenvia-se um HTML que contém os parâmetros escritos a negrito
wHtml.append("<b>P1=").append(wInput.P1).append("</b><br>");
wHtml.append("<b>P2=").append(wInput.P2).append("</b><br>");

//Registo da resposta
print(wHtml.html());

//Atualização do ContenType
XTD_CTX.setHttpContenType("text/html");

Chamada a partir da página HTML

<Script>
  função callAjaxScript(aP1,aP2){
    //Parâmetros
    var wParams={P1:aP1,P2:aP2};
    //ajaxTest3.js é o path do script
    //idReponseScript é o id da div que afixa o resultado HTML
    //verdade para apagar o conteúdo da div antes chamada do script
    new XTENDSCRIPTS.classUpdater("ajaxTest3.js","idReponseScript",true).run(wParams);
  }
</script>
<!--Botão para desencadear a chamada-->
<input type="button" value="callAjaxScript" onClick="javascript:callAjaxScript('Hello','world');"><br>
<!--div para afixar o resultado-->
<div id="idReponseScript"></div>

Resultado do pedido

GESAY_ADV_AJAX_1.jpg