Michael Lundberg · Sep 9, 2024 go to post

After further research, it does not seem possible to use object script to write directly to the Windows event log without using a bridge such as PowerShell or similar

Michael Lundberg · Apr 17, 2024 go to post

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

Michael Lundberg · Apr 16, 2024 go to post

Hello
Yes probably. For the text that is before the XML block. The problem is that it is also text after the end tag. And the end tag can have different names.

Michael Lundberg · Apr 16, 2024 go to post

Hello and thanks for your answers. However, it is not possible to parse the stream to %XML.TextReader as it is without the status reporting error. This is due to the fact that it is not a pure XML but rubbish from other content.

I probably have to sit and extract the XML content manually as Julius describes. Thought I could get away with it :0)

Michael Lundberg · Jul 10, 2023 go to post

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

Michael Lundberg · Jul 7, 2023 go to post

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

Michael Lundberg · Jul 6, 2023 go to post

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.

 

Michael Lundberg · Aug 15, 2022 go to post

Hey!

You are absolutely right! I was also starting to think it was the html presentation. But I initially thought it would be like wysiwyg in the SQL window of the portal.

Thank you so much and you explained the "conundrum" for me :O)

Regards, Michael

Michael Lundberg · Aug 15, 2022 go to post

Thanks for reply.

This was tricky. Maybe I'm being visually deceived.

The text I am trying to enter is 24 characters long. If I take the selected value after and paste it into notepad, it shows the length 21.

But your suggestion to try SQL select length on that column/value shows the value 23

/Michael

Michael Lundberg · Apr 27, 2022 go to post

Hello and many thanks for the help! It worked. I think I read your answer a little too fast the first time and thought you meant that I should read the stream FROM the linked file instead of TO.

Thanks again! I should have seen or tested binary data myself, I think :0(.

Regards Michael

Michael Lundberg · Apr 27, 2022 go to post

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

Michael Lundberg · Mar 15, 2022 go to post

***Solved***

theResponse = ##class(%ListOfObjects).%New()
SQLQuery = "{call TheProcedure   }"
tSC = ..Adapter.ExecuteProcedure(.theResponse , ,SQLQuery)
tSnapshot = theResponse.GetAt(1)

Michael Lundberg · Mar 15, 2022 go to post

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

Michael Lundberg · Sep 4, 2021 go to post

Hello again!

Thanks for your answers and it was our service provider who turned out to have problems, just like you thought.

They have corrected (but still have some problems) and it works pretty well now

Regards Michael

Michael Lundberg · Sep 1, 2021 go to post
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
Michael Lundberg · Mar 31, 2021 go to post

Thanks for your reply! It can be very helpful and we will try your suggestion and hope we can get something done.

Regards Michael

Michael Lundberg · Mar 29, 2021 go to post

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

Michael Lundberg · Apr 24, 2020 go to post

Hello

I don't think so. This is a proxy-class of type %SerialObject which I populate and embed in to the request class

/Michael

Michael Lundberg · Apr 23, 2020 go to post

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

Michael Lundberg · Apr 23, 2020 go to post

Hi and thanks for your answer Robert.

I can now see that I was unclear about my question, I apologize for that

What I wanted is to see if it was possible to change
the value of parameter without changing the %TimeStamp class
or building a new class in my solution.

Michael Lundberg · Feb 21, 2019 go to post

Thank you for information! I will study or links and i sure now we can solve this out!

/Michael

Michael Lundberg · Feb 20, 2018 go to post

Hi and thanks for answer. It's not any explicit saving. It seems to happens  immediately at allocation of the value even if there are more properties to set after that line. And there is of course a Quit later

//Michael

Michael Lundberg · Aug 29, 2017 go to post

Hi and thank you for ansver!

I have look at the  InboundAdapter class and that will probably be our choice, since we not know any other way. As an option i was thinking to monitoring the eventlog in some way.

Just by pure curiosity, what table is "done file table "?

Appreciate your response, thanks!

- Michael