accéder à la publication Julia Pertin · Oct 6, 2023 Bonjour , La solution était de modifier en %Stream.GlobalCharacter pour la balise contenu lors du Correlate.
accéder à la publication Julia Pertin · Oct 5, 2023 Cela fonctionne parfaitement en fait il me manquait le XML Adaptor. Merci beaucoup
accéder à la publication Julia Pertin · Oct 5, 2023 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 Julia Pertin · Sept 21, 2023 Bonjour @Sylvain Guilbaud Merci pour cet exemple complet mais je me retrouve avec une erreur "ErrBusinessDispatchNameNotRegistered"
accéder à la publication Julia Pertin · Sept 20, 2023 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 Julia Pertin · Sept 20, 2023 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 }