For Components of the same type, within the management portal production, you can left click to select the top/first component (operation) and then scroll to the bottom, hold the "shift" key while left-clicking to select the last/bottom component (operation). This should highlight all of the operations between the two also AND it will open the actions tab on the right allowing you to disable, enable or restart all of the components selected. 

I am pretty sure that most pathways lead to the makeStatusFault function of the %SOAP.WebService class. It seems most likely that the path leading you there based on what you are digging into above is OnPreSoap function of EndLib.SOAP.Service class. 

Personally I used the generic soap class so the status is typically set in the OnProcessInput. 

As far as troubleshooting goes, I updated one setting at a time and played messages through Postman (an app for API and HTTP simulation) to determine how that affected the HTTP Responses. There are ways to adjust these settings in custom in soap services and business processes depending on where this process would make the most sense.

You can learn more about custom SOAP Faults here which I think is more like what you are looking for: 
https://docs.intersystems.com/irisforhealth20241/csp/docbook/DocBook.UI....

I hope this was a little helpful!

Hey Andre! 


I have taken the exam and only took the online course indicated before I did and passed! 


However, I think I would have felt better prepared if I had taken the Getting Started with Health Connect for Implementers  Program! I am working through this program now and it does go more in depth into some of those outline elements. You will notice a lot of overlap with the Building Basic HL7 V2 Integrations with InterSystems learning path suggested. 

I can tell you that the outline provided indicates abilities and those are exactly the things you want to focus on! 

I agree with Phil and Oliver both! 


Like Phil, I created JSON enabled classes for my JSON structure. This allowed me to control the element names and nesting. 


*I do have a couple of extra steps. This was the only way I could get it to work for me but also this was how I was taught to do it so there might be better ways. 


So in addition to the JSON enabled message classes, I also created a one-to-one version of that message class but as an XML Schema. 


Then in a BPL, I used a DTL to transform the HL7 to the XML, then I used another transform to map the XML to JSON, and followed that with yet another transform with just a code block (similar to what Oliver did) to add in the custom HTTP Headers for the API call and to convert the body of the message into true JSON format using %JSONExportToStream() then I finally send it out on an HTTP call. 

Many of our systems utilize the default as the acks don't really provide anything more meaningful than the message was received but when I am doing state reporting over TCP/IP and their acknowledgements are meaningful and point out updates being needed on the interface, I use this string ":?R=W,:?E=W,:~=W,:?A=C,:*=W,:I?=W,:T?=C" to log warnings on the messages but to still count the messages as complete so that it will send the next message in the queue. 

Hello, Geoff! 

You seem like a deep researcher already so you have probably found this documentation already but I believe you are on the right track! You will probably need to create a custom subclass that extends the %CSP.Error class! 

You can take a look here if you are looking to generate custom errors. I am not able to offer a code example as so far for us the default error pages have been suffice but maybe this can be a leaping point if you haven't found one yet! 
 

HANDLEING ERRORS: 
https://docs.intersystems.com/iris20222/csp/docbook/DocBook.UI.Page.cls?...

CSP ERROR CODES:
https://docs.intersystems.com/iris20222/csp/docbook/DocBook.UI.Page.cls?...

I dealt with a similar issue and found that if I wrapped the "set action" in an if statement where I would only set the target tag IF the length of the source tag was greater than 1, then it would not send an empty tag. 

Have you tried wrapping that set in an if statement? 

For example in this screenshot below, I take in one XML file and I send it to another XML file with NO IF surrounding the set statements of all of my data tags. 

And that when I test this there are not even any data in my DATA source tag yet everything populates in my DATA Target Tags with null values: 


However, when I wrap all of those same data tag sets in an if statement so that they are set only if an data id is populated like so: 


It will no longer send null tags for the data elements: 


Hopefully the issue is similar and this helps!