Many systems that send HL7 over HTTP use very simple requests -- they just send the raw HTML as the HTTP request body. There's no SOAP layer on top. This is the approach that EnsLib.HL7.Operation.HTTPOperation uses.

HTTP docs say that 415 could indicate that the content-type header is specifying a content type that the receiving system doesn't like. Assuming the recipient doesn't actually need SOAP, if you can find out what content type they are looking for, you can change this in the Business Operation settings under Additional Settings/ContentType.

If the receiving system really does need a SOAP call you can look at EnsLib.HL7.Operation.SOAPOperation. I haven't seen this in use so I don't know the details but it might be worth a try.

Here's how you can iterate through the results:

 set query = "SELECT Facility FROM FROM osuwmc_EnterpriseDirDB.RelationshipMedCtrID WHERE OSUmedcenterID = ?"
 SET rset = ##class(%SQL.Statement).%New()
 SET qStatus = rset.%Prepare(query)
 SET rset = rset.%Execute($Get(ID))
 
 while (rset.%Next()) {
    // Check Facility value in each row
    set facility=rset.%Get("Facility")
    if (facility = "SOMEVALUE") {
        //...
    }
 }

As you noted, fromDao is in the HS.FHIRModel classes, but in the code you pasted you're actually using a class under HS.FHIR:

Set cls = $CLASSMETHOD("HS.FHIR.DTL.vR4.Model.Resource.Patient","fromDao",dao)

I think you want to do this instead:

Set cls = $CLASSMETHOD("HS.FHIRModel.R4.Patient","fromDao",dao)

https://docs.intersystems.com/irisforhealth20241/csp/documatic/%25CSP.Do...

I've seen Zen reports used extensively for Chinese content, so they can definitely handle the far reaches of the Unicode realm.

What happens if you do this?

write !,"<PostInfo>My GE: "_$c(8805)_"</PostInfo>"

or this?

write !,"<PostInfo>My GE: "_$zcvt($c(8805),"O","UTF8")_"</PostInfo>"

Some other things to check:

Hopefully this can save you some work. It uses a much larger chunk size (which is a multiple of 57) and works with or without CR/LFs (set the argument pAddCRLF):

Class Example.B64.Util Extends %RegisteredObject
{

/// Be cautious if changing CHUNKSIZE. Incorrect values could cause the resulting encoded data to be invalid.
/// It should always be a multiple of 57 and needs to be less than ~2.4MB when MAXSTRING is 3641144
Parameter CHUNKSIZE = 2097144;

ClassMethod B64EncodeStream(pStream As %Stream.Object, pAddCRLF As %Boolean = 0) As %Stream.Object
{
    set tEncodedStream=##class(%Stream.GlobalCharacter).%New()
    
    do pStream.Rewind()
    
    while ('pStream.AtEnd) {
        set tReadLen=..#CHUNKSIZE
        set tChunk=pStream.Read(.tReadLen)
        
        do tEncodedStream.Write($System.Encryption.Base64Encode(tChunk,'pAddCRLF))
        if (pAddCRLF && 'pStream.AtEnd) {
            do tEncodedStream.Write($c(13,10))
        }
    }
    
    do tEncodedStream.Rewind()
    
    quit tEncodedStream
}

}

My experience with Zebras was quite a few years ago, so this may or may not still apply... Using Zen reports at the time, the print server would end up rendering the label as a bitmap and sending that over to the Zebra. ZPL code to print an equivalent label was much smaller than a bitmap, so ZPL labels tended to print faster than those rendered by a report.

Ok, so the flow would look roughly like this:

  • The GenericService accepts an inbound REST request, populates a GenericMessage, and sends it to your business process
  • Business process extracts the JSON payload from the GenericMessage, and pulls out any relevant details needed for the call to Athena
  • Business process creates a new GenericMessage, populates any items needed by Athena, uses %SYS.OAuth2 (and the OAuth client profile you created) to request an OAuth token and adds it to the GenericMessage, and passes the new GenericMessage to the business operation.
  • Business operation makes the outbound REST call to Athena, and returns a new GenericMessage containing the response to your business process.
  • Business process extracts JSON payload from the GenericMessage, uses a transformation to create the payload required by your internal REST client.
  • Business process creates a new GenericMessage, populates it with the response payload, and returns it to the GenericService
  • GenericService returns response to REST client