Thanks Manel

It worked great. Admittedly, I got the surrounding text out when I actually wanted the XML out. But by your example I was able to turn it around and get the XML out.

Working string: XMLstr

set xmlheadstart=$f(XMLstr,"<?xml ")-6
set xmlheadend=$f(XMLstr,">",xmlheadstart)-1
set firsttag=$tr($p($e(XMLstr,xmlheadend+1,*),">",1)_">",$c(13,10))
set tag=$p($e($p(firsttag," ",1),2,*),">",1)
set xmlend=$f(XMLstr,"</"_tag_">")
set NewXMLstr = $EXTRACT(XMLstr,xmlheadstart,xmlend-1)

Quit NewXMLstr

The NewXMLstr variable now contains the entire XML fragment.
 
Many thanks!

Regards Michael

Hi Victoria and thank you for taking the time to reply.

I do something similar today and it gives an empty tag anyway.

The condition is that if a certain tag has no children, none of that tag should be presented-

Example:

<Parent>
      .......
      .......
     <Child>
       ...
     </Child>
<Parent>

Above XML is to be presented.

<Parent>
     .........
</Parent

Above XML should NOT be presented.

I try in the transformation:
If source.Parent.(k1).Child.(1)=""
 <False>
  Do the map
</False>


I first expected a null exception if the Child tag didn't exist but HC seems to be able to handle that.

I also tried changing the condition to your suggestion:

If ..Length(source.Parent.(k1).Child.(1)>1)

<True>
   .......
</True>

But it gave the same result unfortunately.

Sincerely, Michael

Hello again

Previous experience that I have (with health connect), underlying tags can be mandatory to a tag that is optional. So only if the parent-tag is included, the children that are mandatory must be included.

I tried with:
<xs:element name="Analysis" maxOccurs="unbounded" minOccurs="0">
and it could pass the transformation but still had no effect.

Right now I remove the tag afterwards using objectscript. It does work, but is still a more cumbersome way to solve it. It would be best if it could be removed already in the transformation.

Sincerely, Michael

Hello and thank you for taking the time to reply.
Yes, I have imported the XSD file into the namespace and it is mandatory as you ask (see image).
In the XSD file itself it is stated:
<xs:element name="Analysis" maxOccurs="unbounded">.

I tried changing to:
<xs:element name="Analysis" minOccurs="0"/>
but it gave error in the transformation.

 

Thanks Jeffrey for your answer! I looked at a solution earlier with "LinkToFile" but since I do not know where the file is physically located I abandoned that idea. We are connected to a POP account against an MS Exchange server and I do not even know if it is possible to access the file physically.

But we will take a closer look at that possibility.

Otherwise it seems like we must  use %Net.POP3. I otherwise thought that there were advantages to using EnsLib.EMail.InboundAdapter as it has several functions automatically such as scanning for and deleting mail etc.

Regards Michael

Hi and thanks for your reply!

Since this is not a stored procedure in Iris database but in an MS SQL server, syntax does not work
"SELECT PackageName.ClassName_ProcedureName ('parameter')"

Normal call is Execute procedure name.

For example, when I call a procedure that does not use an output parameter, I use
"..Adapter.ExecuteQuery (.tResult, tQuery) Quit: $$$ ISERR (tStatus)"

However, because this procedure fills an output parameter, this call does not work. It then returns "Error! Function must return a value". So i suppose i need to use  ExecuteProcedure

Sincerely, Michael

Hello and thank you very much for your answer! That/this was/is the response in SOAP log (I just deleted Style/css info): 

****************************************************
Input to Web client with SOAP action = urn: submitFile ERROR # 6243: HTTP request to SOAP WebService returned response with unexpected CONTENT-TYPE: text / html; charset = utf-8.
Input to Web client with SOAP action = urn: submitFile ERROR # 6243: HTTP request to SOAP WebService returned response with unexpected CONTENT-TYPE: text / html; charset = utf-8.
HTTP Status 500 - Internal Server Error.
The server encountered an unexpected condition that prevented it from fulfilling the request. javax.servlet.ServletException: An error occurred
see.fohm.sminet.util.CheckFilter.doFilter (CheckFilter.java:38)
org.apache.catalina.filters.ExpiresFilter.doFilter (ExpiresFilter.java:1232). Apache Tomcat / 8.5.39 (Ubuntu) End.
************************************************
We run in windows, not Ubuntu so it must come from their service 
Regards Michael

Hi and thanks for your reply.

It is not possible to queue up the requests from the external systems themselves, but they will be sent to our HC- integration regardless of how many we already have in our queue. The answer (response) may take a maximum of 15 seconds, otherwise the response must be saved in the database and delivered at a later request.

The problem is knowing how long a message has waited (in a queue) before it is sent to the business process, if the queue exceeds what our business service can process at the time. Our allowed time to process the request will then be 15 seconds minus the waiting time in the queue.

I hope I am clear enough with what I mean.

Regards Michael

Hi and thanks for answer Eduard.

It did not work properly and it is still labeled as UTC in the SOAP request I send.
I.E 2019-09-12T10: 39: 00Z.  Maybe i'm doing something wrong. I dont' know.

Anyway, if I instead changed this type in my class from:
Property VisitTime As% TimeStamp (XMLNAME = "VisitTime"  , XMLPROJECTION = "ATTRIBUTE");

To:
Property VisitTime  As% TimeStamp (XMLNAME = "VisitTime " , XMLPROJECTION = "ATTRIBUTE", XMLTIMEZONE = "IGNORE");

it came out as 2019-09-12T10:39:00 (No Z at the end indicating UTC). And that's what I was looking for. However it can couse me trouble if the schema will be updated and i will lost my changes. And it would be easier to not change every %Timestamp-property in my class