USER>DO HELP^%G
 
The %G utility displays global nodes. A "?" at the "Global ^" prompt
displays the global directory. If you enter just the name of a global,
%G displays the entire global. You may also display a portion of the
global at different subscript levels or specific nodes.
 
A complete global reference, such as ^GLO(3,"BED",5) will display
only that particular node. You may specify a subtree, such as
^GLO(3,"BED", to display all descendants of that node. To display
both the node and its descendants, do not end your entry with a
comma or a right parenthesis.
 
You can leave a subscript field empty when you specify the subtree and
the %G utility displays any nodes matching the other subscripts:
^GLO(,"BED") will match any nodes with 'BED' as the second subscript.
 
You can specify a range of subscripts for a particular subscript
level by inserting a colon between the first and last subscript in the
range: ^PT(1,"ACC":"BIRTH"
 
You can use variables and simple expressions in a subscript
specification by assigning a value to the variable before calling %G.
For example SET ID=214 and enter something like ^PT(ID,0).

It has happened to me a few time not having access to terminal (OS or IRIS).

For this situation I developed a quick and dirty CSP class to allow me to execute IRIS or OS commands.

Class SomePackege.Cmd Extends %CSP.Page
{

ClassMethod OnPage() As %Status
{
    &html<<html>
<head>
</head>
<body>
<form>
<input type="text" name="cmdOS" size="150" value='#(%request.Get("cmdOS"))#'>
<input type="submit" value="runOS" onclick="this.form.submitted.value=this.value;" >
<br/>
<input type="text" name="cmd" size="150" value='#(%request.Get("cmd"))#'>
<input type="submit" value="runCMD" onclick="this.form.submitted.value=this.value;" >
<input type="hidden" name="submitted">
</form>
>
    If (%request.Get("submitted")="runOS") && (%request.Get("cmdOS")'="") {
        Set cmdOS=%request.Get("cmdOS")
        Set io=$io
        Open cmdOS:"QR"
        Write "<tt>"
        Try {
            For  Use cmdOS Read line Use io Write $replace(..EscapeHTML(line)," ","&nbsp;"),"<br>"
        } Catch CatchError {
            Set sc=CatchError.AsStatus()
        }
        Use io Write "</tt>"
        Close cmdOS
        Use io
    } ElseIf (%request.Get("submitted")="runCMD") && (%request.Get("cmd")'="") {
        Set cmd=%request.Get("cmd")
        Write "<pre>"
        x cmd
        Write "</pre>"
    }
    &html<</body>
</html>>
    Quit $$$OK
}

}

Once the class is loaded (say, from Studio or VS code) in one namespace, just call it from the default csp/web application, for example:

http://yourhost:57772/csp/user/SomePackage.Cmd.cls

Please note that the UI is very, very, VERY rudimental (ugly), but gets the job done in case of need.

I'm confused, it seems that the error you have posted it's not from the Business Operation with the setting posted.

The error says that the "Reply Code Action" is ':?R=RF,:?E=S,:~=S,?A=C,*=S,:I?=W' while in your screenshot is E=F.

What was the "Reply Code Action" setting when the error occurred?

In addition, the two traces looks different, the first has a sync incoming request, the second async.

Is the Business Operation the same component/host?

I'm puzzled by the fact that the two $$$LOGINFO() are present in the trace when an exception should have raised BEFORE the $$$LOGINFO().

The code posted is not the code that generated that trace. And this is very confusing.

Maybe the code was modified without restarting the Business Operation?

..Adapter.Credentials.Username and ..Adapter.Credentials.Password

Credentials property of EnsLib.FTP.InboundAdapter is %String, so I expect an <INVALID OREF> error.

In general, I'd suggest to put your code inside a Try/Catch, something like:

	Set sc=$$$OK
	Try {
	    
	    ; your code here
	    
	} Catch CatchError {
		#dim CatchError as %Exception.SystemException
		Set sc=CatchError.AsStatus()
	}
	Quit sc

Using your code (simplified by me) from terminal it works fine using a sample CCDA from here.

set ccdaStream = ##class(%Stream.FileBinary).%OpenId("c:\temp\CCDA_CCD_b1_Ambulatory_v2.xml")
write "Size of CCDA Stream: ", ccdaStream.Size,!
set xsltTransform = "SDA3/CCDA-to-SDA.xsl"
set tTransformer = ##class(HS.Util.XSLTTransformer).%New()
set tSC = tTransformer.Transform(ccdaStream, xsltTransform, .sdaStream)
if 'tSC write "Transformation to SDA3 failed with error ",$system.Status.GetErrorText(tSC),!
set fhirStream = ##class(%Stream.TmpBinary).%New()
set SDA3ToFHIRObject = ##class(HS.FHIR.DTL.Util.API.Transform.SDA3ToFHIR).TransformStream(sdaStream, "HS.SDA3.Container", "R4")
if '$isobject(SDA3ToFHIRObject.bundle) write "Failed to transform SDA3 to FHIR",!
do SDA3ToFHIRObject.bundle.%ToJSON()

The result/output is a pretty long JSON FHIR bundle with CCDA data (I didn't check the content!)

Does your code works with that sample CCDA?

If not, then maybe there is something wrong in your CCDA.

For my test I used: IRIS for Windows (x86-64) 2024.1 (Build 267_2U) Tue Apr 30 2024 16:35:10 EDT