Class replic.msg.XMLStructure Extends%Persistent
{
Parameter XMLNAME = "data";Property tablename As list Of replic.msg.XML(XMLPROJECTION = "ELEMENT");
}
ObjectScript
ObjectScript
Method readXML(pRequest As Ens.StreamContainer, pResponse As replic.msg.XMLStructure) As%Status
{
set tsc = $$$OKset reader = ##class(%XML.Reader).%New()
//set pResponse = ##class(replic.msg.XMLStructure).%New()#dim data As replic.msg.XMLStructure
#dim tableName As replic.msg.XML
do pRequest.Stream.Rewind()
do reader.Correlate("data","replic.msg.XMLStructure")
set status = reader.OpenStream(pRequest.Stream)
Do reader.Next(.data)
Set key = ""Set tableName = data.tablename.GetNext(.key)
While key '= "" {
set^debug() = tableName.Table
Set tableName = data.tablename.GetNext(.key)
}
}
ObjectScript
ObjectScript
Mon erreur :
ERREUR <Ens>ErrException: <METHOD DOES NOT EXIST>Next+25^%XML.Reader.1 *XMLNew,replic.msg.XMLStructure -- - connecté en tant que '-' numéro - @''
Merci pour votre réponse, en fait je n'ai pas de d'évènement déclencheur. C'est un appel permanent à une API qui me permet de récupérer un flux json et qui va ensuite déclencher le business process.
Du coup dans la méthode OnProcessInput de Ens.BusinessService, je fais un appel à l'API, je stock le flux json dans un stream que je passe ensuite au SendRequestSync afin d'éxécuter le business process et j'attends en réponse le dernier message du process avant de refaire un appel à l'API et c'est la que cela ne fonctionne pas car je récupère plusieurs fois ce flux json.
Très bien je vous remercie, voici donc l'extrait de code qui me pose soucis.
Method OnProcessInput(pInput As%RegisteredObject, Output pResponse As exparf.msg.dataXML) As%Status
{
set tSC = $$$OKs tHttpRequest = ##class(%Net.HttpRequest).%New()
set pContainer = ##class(Ens.StreamContainer).%New()
s tHttpRequest.Server = ..Servers tHttpRequest.ContentType ="application/json"// set pContainer.Stream = tHttpRequest.HttpResponse.Data// do pContainer.CopyFrom(tHttpRequest.HttpResponse.Data)Set jsonObject = [].%FromJSON(tHttpRequest.HttpResponse.Data)
Do##class(%JSON.Formatter).%New().Format(jsonObject)
set pContainer.Stream = tHttpRequest.HttpResponse.Data
for iTarget=1:1:$L(..TargetConfigNames, ",") {
set tOneTarget=$ZStrip($P(..TargetConfigNames,",",iTarget),"<>W") Continue:""=tOneTarget
$$$TRACE("The target '"_tOneTarget_"' will be called "_$SELECT(..sync=1:"synchronously",..sync=0:"synchronously"))
set tSC1=..SendRequestSync(tOneTarget,pContainer,.pResponse) Set:$$$ISERR(tSC1) tSC=$$$ADDSC(tSC,tSC1)
}
return tSC
}
ObjectScript
ObjectScript
Connectez-vous ou inscrivez-vous
Connectez-vous ou créez un nouveau compte pour continuer
accéder à la publication
Bonjour ,
La solution était de modifier en %Stream.GlobalCharacter pour la balise contenu lors du Correlate.
accéder à la publication
Cela fonctionne parfaitement en fait il me manquait le XML Adaptor.
Merci beaucoup
accéder à la publication
Merci @Lorenzo Scalese ,
En revanche je me retrouve avec un "Method does not exist" lié au reader.Next
J'ai pourtant mes 2 classes :
Class replic.msg.XML Extends (%Persistent, %XML.Adaptor, Ens.Request) { Property Table As %String(MAXLEN = ""); Property Action As %String(MAXLEN = ""); Property CleIris As %String; Property nIdentifiant As %String; Property IdIris As %String; Property Contenu As %String; }
Class replic.msg.XMLStructure Extends %Persistent { Parameter XMLNAME = "data"; Property tablename As list Of replic.msg.XML(XMLPROJECTION = "ELEMENT"); }
Method readXML(pRequest As Ens.StreamContainer, pResponse As replic.msg.XMLStructure) As %Status { set tsc = $$$OK set reader = ##class(%XML.Reader).%New() //set pResponse = ##class(replic.msg.XMLStructure).%New() #dim data As replic.msg.XMLStructure #dim tableName As replic.msg.XML do pRequest.Stream.Rewind() do reader.Correlate("data","replic.msg.XMLStructure") set status = reader.OpenStream(pRequest.Stream) Do reader.Next(.data) Set key = "" Set tableName = data.tablename.GetNext(.key) While key '= "" { set ^debug() = tableName.Table Set tableName = data.tablename.GetNext(.key) } }
Mon erreur :
ERREUR <Ens>ErrException: <METHOD DOES NOT EXIST>Next+25^%XML.Reader.1 *XMLNew,replic.msg.XMLStructure -- - connecté en tant que '-' numéro - @''
accéder à la publication
Bonjour @Sylvain Guilbaud
Merci pour cet exemple complet mais je me retrouve avec une erreur "ErrBusinessDispatchNameNotRegistered"
accéder à la publication
Bonjour @Lorenzo Scalese,
Merci pour votre réponse, en fait je n'ai pas de d'évènement déclencheur. C'est un appel permanent à une API qui me permet de récupérer un flux json et qui va ensuite déclencher le business process.
Du coup dans la méthode OnProcessInput de Ens.BusinessService, je fais un appel à l'API, je stock le flux json dans un stream que je passe ensuite au SendRequestSync afin d'éxécuter le business process et j'attends en réponse le dernier message du process avant de refaire un appel à l'API et c'est la que cela ne fonctionne pas car je récupère plusieurs fois ce flux json.
accéder à la publication
Bonjour @Irène Mykhailova ,
Très bien je vous remercie, voici donc l'extrait de code qui me pose soucis.
Method OnProcessInput(pInput As %RegisteredObject, Output pResponse As exparf.msg.dataXML) As %Status { set tSC = $$$OK s tHttpRequest = ##class(%Net.HttpRequest).%New() set pContainer = ##class(Ens.StreamContainer).%New() s tHttpRequest.Server = ..Server s tHttpRequest.ContentType ="application/json" // set pContainer.Stream = tHttpRequest.HttpResponse.Data // do pContainer.CopyFrom(tHttpRequest.HttpResponse.Data) Set jsonObject = [].%FromJSON(tHttpRequest.HttpResponse.Data) Do ##class(%JSON.Formatter).%New().Format(jsonObject) set pContainer.Stream = tHttpRequest.HttpResponse.Data for iTarget=1:1:$L(..TargetConfigNames, ",") { set tOneTarget=$ZStrip($P(..TargetConfigNames,",",iTarget),"<>W") Continue:""=tOneTarget $$$TRACE("The target '"_tOneTarget_"' will be called "_$SELECT(..sync=1:"synchronously",..sync=0:"synchronously")) set tSC1=..SendRequestSync(tOneTarget,pContainer,.pResponse) Set:$$$ISERR(tSC1) tSC=$$$ADDSC(tSC,tSC1) } return tSC }