go to post Michael Davidovich · Feb 8, 2023 While trying to do this I've used both my public IP address and my VPN IP address and I get the error Couldn't reach InterSystems IRIS at xxx.xx.x.xx:52773. One or both of your IP and Port are incorrect. Strangely I got this to work last week without having the IAM application or user enabled. That said I was able to access the IAM portal and set some stuff up but I'm not sure it was actually truly working. Any troubleshooting advice?
go to post Michael Davidovich · Feb 7, 2023 Pinging @Eduard Lebedyuk and @Stefan Wittmann to see if folks had additional thoughts.
go to post Michael Davidovich · Jan 26, 2023 Please correct me if I'm wrong but I found $system.Status.GetErrorText(sc) was the appropriate method to use over DisplayError() as DisplayError simply writes to the console and would not save to the database or a variable.
go to post Michael Davidovich · Jan 25, 2023 If one were to write or save %objlasterror's output to a database, how would one interpret these characters: 0 ß!> I find pretty consistently I get this as part of the output which I can work around but isn't helpful.
go to post Michael Davidovich · Dec 7, 2022 @Colin Brough I have found generally the message header and body data is a bit putzy to access, but not impossible. I'm fairly new at all of this but in the spirit of trying to be helpful: I think a business process in-between that holds on to the metadata for the message in a context object and then pass that all to a custom business operation that uses the data to generate the file name. I am thinking though that if you are using a message router you can't send the context over, but I think if you use a call operation in the BPL you can pass in the context to the custom operation that you are calling. You could define a rule then that picks the correct operation to route to and use indirection to call that in the BPL while passing the context. Someone more experienced will have to fact check me there.
go to post Michael Davidovich · Nov 28, 2022 @Tony Alexander, @Jeffrey Drumm I came across your replies here and wanted to confirm I am having the same issue, but I am using the DTL editor and not so much code. My base ADT is version 2.3.1 and I am transforming to 2.4. In the DTL it seems that's there's no problem bridging the two messages, however, when the message is ultimately routed out of Ensemble, the message body says the DocType is 2.3.1 but the TypeVersion is 2.4, but also the DocTypeCategory is 2.3.1. I suppose I would expect that after the transformation the message body would reflect the correct metadata but maybe I misundersand what it's supposed to represent in the context of the whole process? In the DTL, I select "existing" as the Create action thinking that this will overwrite the data on the base object. Would be interested in your understanding of all of this.
go to post Michael Davidovich · Nov 28, 2022 I have always over-used parentheses for this reason. It's also very important when using logical operators: 1=0&&1=0 -> 0&&0=0 -> 1=0 -> 0 (1=0)&&(1=0) -> 0&&0 -> 1
go to post Michael Davidovich · Nov 15, 2022 /// This method is for File and FTP Operations: per-message batch output with no reply. TCP and HTTP Operations/// receive reply messages and only support entire batch output. Why?
go to post Michael Davidovich · Nov 15, 2022 Looks like the superclass for EnsLib.HL7.Operation.FileOperation wants to return an HL7.Message so I believe I'm on the right track.
go to post Michael Davidovich · Nov 15, 2022 I re-read the documentation and implemented very carefully the steps using the adaptor-less method and was able to remove the need for a custom adatptor.
go to post Michael Davidovich · Nov 15, 2022 The <call> was on sync, so I put it on async to wait for a response. The order is better now, but still a new response from the outbound file service.
go to post Michael Davidovich · Nov 15, 2022 I have found https://docs.intersystems.com/healthconnect20212/csp/docbook/DocBook.UI.... Evidently what I'm doing is a 'less common task.' How do others setup business operations when the 'incoming' data isn't an external application, rather IRIS itself?
go to post Michael Davidovich · Nov 14, 2022 @Eduard Lebedyuk if it helps, I just ran into the same issue and solved it as @Ronald Peña did. I found it odd that the name of the business service can't defer from the class name (and you can't rename them it seems, at least not in the management portal). Is this a bug?
go to post Michael Davidovich · Nov 9, 2022 I did get my code to work as expected but there's still some unknowns. I used the example as shown above but also added another block of code to capture the properties that changed into a log. I also did a KILL on the ^test array before the lines of code were generated. I either the KILL on the array and/or the number of saves and background calls happening in our system had something to do with my initial issues. My most apparent issue however, was I wasn't using %code.WriteLine to produce the generated code. At the end of the day this will probably go into a local array and not a global so all the update operations don't compete.
go to post Michael Davidovich · Nov 8, 2022 I did set some debug targets in the INT code and just opened an object, set a property and %Save(). The ^test array did show a true for the property I changed. So it worked command on the command line, but something is breaking down when using CSP.
go to post Michael Davidovich · Nov 8, 2022 Hi @Pravin Barton, I was looking for this exact advice however, I am having trouble debugging. I have looked at the generated INT code and I'm a bit stumped. All our %Persistent objects are updated via object access in CSP pages calling class methods. I utilzed the example you have below but I used set tableName = %compiledclass.NameGet() to get the tableName. The properties wrote to ^test no problem, so that's not an issue. The issue is after updating objects using the CSP pages (i.e. the front end), all the checks for {property*C} are false (0). I see expected operations being passed into the zFunctions with the pChanged array being setup. All our inserts and updates are accomplished by %Save(). We never %Delete(). I also included Time=After as a parameter in the trigger generator. So according to the doc, the trigger should happen similar to then %OnAfterSave() method. Any thoughts on what I may have missed or why this isn't working in my setup?
go to post Michael Davidovich · Nov 3, 2022 I suppose another way of stating the issue. The doc says you might want to use sessions to: Preserve data across REST calls — in some cases, preserving data across REST calls may be necessary to efficiently meet your business requirements. Well, I'm not finding an easy way to do this using spec first dev because the %session variable is undefined in the generated impl.cls. Even when I extend impl.cls to use %CSP.REST. @Eduard Lebedyuk I did catch one article you wrote that said sessions are basically only good for authentication (I assume you just meeting keep one logged into the IRIS server over the session), however since the doc does mention preserving data, I would like to see if I can utilize that feature. For now I've reverted to the manual creation of rest services which now allows me the %session variable to use.
go to post Michael Davidovich · Nov 1, 2022 Thanks, @Eduard Lebedyuk. See above that I did set UseSession=1. That's all the doc really explains. What next though? How to utilize the session (%session) in impl.cls? When I do this I get a undefined error: "error":"ERROR #5002: ObjectScript error: <UNDEFINED>zgetQuotes+1^API.QuoteLibrary.impl.1 *.Data(\"session\",1)"