I believe the proper way to do this is not by editing the Production class XData, but rather by using the icon/button you can see in the image above, with the small light-blue arrow:
When hovering over this icon you can see the text: "Select settings defaults".
In your case you would there check the checkbox fro the "try" setting, press the "Restore Defaults" button on the bottom of the dialog, and then press Apply on the Settings tab.
If, as you mention the purpose of this logging is debugging, then I would recommend going with $$$TRACE vs. $$$LOGINFO. This will allow you to turn on and off tracing without making code changes. Whereas if you go with $$$LOGINFO it's always there unless you remove it (or comment it out), then you need to compile, and then if you need it once more...
If I understood the question correctly I think there might be some confusion...
Indeed internally Ensemble stores the Message Header times (TimeCreated & TimeProcessed) in a UTC time (per the considerations Robert mentioned) but when these times are displayed in the Message Viewer they go through conversion and are displayed in local time.
So if you would open the object via code, or run an SQL query directly, you would be dependent on running the relevant LogicalToDisplay() or LogicalToOdbc() methods for objects, or using the ODBC or Display runtime modes, but on the default Message Viewer web page these times should appear local.
You can examine this by doing a simple select on the Message Header table and you can see the difference between the Logical and Display modes.
For example, for a certain message, the Logical (internal UTC) time is 10:42 -
And now the same time using Display mode, the time is 13:42 -
And compare this with what you see in the Message Viewer, you see 13:42 -
and -
Note if you take a look at the Ens.DataType.UTC data-type class you can see it's conversion methods.
For example the LogicalToDisplay() method.
Here's an example of what it looks like when it's code runs.
In the following code I show my current local time (using $H, taking into account Time Zone and Daylight Saving), then I show the current general time (using $ZTS, per GMT and no Daylight Saving), and then applying the code run by the method, calling the method, and explicitly.
See the -3 argument in the $ZDTH function call, from the docs this does the following -
$ZDATETIMEH takes a datetime value specified in $ZTIMESTAMP internal format, converts that value from UTC Universal time to local time, and returns the resulting value in the same internal format
Recommending your very cool and useful utility to someone I realized I did not find installation instructions, not here in this article, nor in the GitHub readme.
Could you please point me to them, or in case they indeed do not exist currently can you please provide them, for the benefit not only of the person I'm sharing this with, but with other Community members who will want to use this in the future.
Is it also a Business Service? If so - what is the name of the BS component in the Production?
What URL are you using to access this WebService?
I have encountered this error when trying to call the WebService in a way that did not allow Ensemble to understand what is the name of the business service class it needs to use (for example by using the CfgItem URL parameter).
In general (you might be aware of this, but for the benefit of the Community) a good resource about searching Messages (including Search Tables and SQL, and other options), is this Online Course.
The issue of indexing data previously processed (before the Search Table was defined for the Business Service/Operation) is addressable by calling the BuildIndex() method of the relevant SearchTable class.
For example:
Set sc=##class(YourPackage.YourSearchTableClass).BuildIndex()
If you need to query specifically via SQL (and not using the Message Viewer) then see also this answer (though relating to HL7, but relevant in the same way to the XML case) regarding using the Search Table within a query.
Please note that by default when a Persistent instance is %Saved()'d it gets done inside a Transaction, and therefore, even if the Database the Class' storage globals' are in, is not journaled, these SETs (and KILLs) will get journaled (for supporting rollback).
See this article for more details regarding avoiding journaling data. Specifically - the options of using CACHETEMP or turning off transactions for object filing.
Note if you are concerned with the audit logs generated for every turning off and on the journal for your process - you could simply turn off that System Audit event - %System/%System/JournalChange. Taking of course into consideration the drawback of not logging these kind of events outside the context of this specific scenario.
I am using v2017.2.1 and Atelier 1.2.118 and I'm not experiencing this.
What I have encountered with regard to license consumption and Atelier (also with version 1.1 of Atelier) was that if I did not define a proper user for the server login (i.e. UnknownUser) then multiple users where consumed (per CSP session of the REST calls). So the recommendation is (also regardless of this licensing aspect) to define a real User for login. Note the phenomena I saw was that of multiple Users, not multiple connections of the same User (if that was what you were seeing).
I suggest that if, also when you define a proper User for login, the issue persists (and you don't get any other swift answer from the Community), you should work with the WRC to resolve this (and then hopefully post the answer back here on the Community).
When I tried to use the Tools menu I was in an "Atelier element" (e.g. an Ensemble class) so I don't think that was the cause.
Just in case, I double-checked now again - I'm editing an Ensemble class and the items in the Tools menu are disabled... (in the workspace that originally gave the problem; in the newer workspace this does not happen)
Indeed I had the Error Log view open and saw various errors - but those were to some projects I had in my workspace that connected to servers that were offline. So I ignored them.
But now you confirmed it should work on this version - I kicked off a new workspace, defined just one project to an online server, and I got to see my Add-Ins...
So unfortunately I don't know exactly what the problem was... but a new workspace solved it...
go to post
Re #2 you might find this related article by @Jose-Tomas Salvador useful:
https://community.intersystems.com/post/configure-environment-use-docker-hyper-v-ubuntu-virtual-machines-running-windows-10-host
go to post
Note for more information about the pButtons/SystemPerformance utility see -
From Documentation:
https://docs.intersystems.com/irislatest/csp/docbook/DocBook.UI.Page.cls?KEY=GCM_systemperf
From the Developer Community (mostly by @Murray Oldfield):
https://community.intersystems.com/post/intersystems-data-platforms-and-performance-%E2%80%93-part-1
https://community.intersystems.com/post/intersystems-data-platforms-and-performance-%E2%80%93-how-update-pbuttons
https://community.intersystems.com/post/extracting-pbuttons-data-csv-file-easy-charting
https://community.intersystems.com/post/yape-yet-another-pbuttons-extractor-and-automatically-create-charts
https://community.intersystems.com/post/extracting-pbuttons-data-csv-file-windows
go to post
Hi Michel,
Are you using DICOM interfaces?
go to post
I believe the proper way to do this is not by editing the Production class XData, but rather by using the icon/button you can see in the image above, with the small light-blue arrow:
When hovering over this icon you can see the text: "Select settings defaults".
See details of how to use this here from the Docs.
In your case you would there check the checkbox fro the "try" setting, press the "Restore Defaults" button on the bottom of the dialog, and then press Apply on the Settings tab.
go to post
If, as you mention the purpose of this logging is debugging, then I would recommend going with $$$TRACE vs. $$$LOGINFO. This will allow you to turn on and off tracing without making code changes. Whereas if you go with $$$LOGINFO it's always there unless you remove it (or comment it out), then you need to compile, and then if you need it once more...
go to post
See also this related article.
go to post
Regarding your question on the *.impl generated class -
if you already added code to this class and later update the swagger and consume it again - indeed the code you added will remain.
If you review the video recording of the Global Summit Solution Developer Conference session I mentioned above - you can see a live demonstration of this specific case. [I recommend you see all of it, but this particular part starts at about 33:30]
go to post
Looks great David!
I think for the "background" part this Global Summit presentation - "API Design for REST" (by @Michael Smart) could be helpful.
go to post
See also using the ^SECURITY utility (for manual export vs. programmatic which is possible via the Security package classes API).
For example:
go to post
If I understood the question correctly I think there might be some confusion...
Indeed internally Ensemble stores the Message Header times (TimeCreated & TimeProcessed) in a UTC time (per the considerations Robert mentioned) but when these times are displayed in the Message Viewer they go through conversion and are displayed in local time.
So if you would open the object via code, or run an SQL query directly, you would be dependent on running the relevant LogicalToDisplay() or LogicalToOdbc() methods for objects, or using the ODBC or Display runtime modes, but on the default Message Viewer web page these times should appear local.
You can examine this by doing a simple select on the Message Header table and you can see the difference between the Logical and Display modes.
For example, for a certain message, the Logical (internal UTC) time is 10:42 -
And now the same time using Display mode, the time is 13:42 -
And compare this with what you see in the Message Viewer, you see 13:42 -
and -
Note if you take a look at the Ens.DataType.UTC data-type class you can see it's conversion methods.
For example the LogicalToDisplay() method.
Here's an example of what it looks like when it's code runs.
In the following code I show my current local time (using $H, taking into account Time Zone and Daylight Saving), then I show the current general time (using $ZTS, per GMT and no Daylight Saving), and then applying the code run by the method, calling the method, and explicitly.
See the -3 argument in the $ZDTH function call, from the docs this does the following -
$ZDATETIMEH takes a datetime value specified in $ZTIMESTAMP internal format, converts that value from UTC Universal time to local time, and returns the resulting value in the same internal format
go to post
Hi Dmitry,
Recommending your very cool and useful utility to someone I realized I did not find installation instructions, not here in this article, nor in the GitHub readme.
Could you please point me to them, or in case they indeed do not exist currently can you please provide them, for the benefit not only of the person I'm sharing this with, but with other Community members who will want to use this in the future.
Tx!
go to post
What is the class name of your Web Service?
Is it also a Business Service? If so - what is the name of the BS component in the Production?
What URL are you using to access this WebService?
I have encountered this error when trying to call the WebService in a way that did not allow Ensemble to understand what is the name of the business service class it needs to use (for example by using the CfgItem URL parameter).
go to post
Happy this helped.
In general (you might be aware of this, but for the benefit of the Community) a good resource about searching Messages (including Search Tables and SQL, and other options), is this Online Course.
go to post
The issue of indexing data previously processed (before the Search Table was defined for the Business Service/Operation) is addressable by calling the BuildIndex() method of the relevant SearchTable class.
For example:
Set sc=##class(YourPackage.YourSearchTableClass).BuildIndex()
go to post
If I understand your question correctly then I think you'd benefit from defining and using a Search Table.
See from the Documentation -
If you need to query specifically via SQL (and not using the Message Viewer) then see also this answer (though relating to HL7, but relevant in the same way to the XML case) regarding using the Search Table within a query.
go to post
Please note that by default when a Persistent instance is %Saved()'d it gets done inside a Transaction, and therefore, even if the Database the Class' storage globals' are in, is not journaled, these SETs (and KILLs) will get journaled (for supporting rollback).
See this article for more details regarding avoiding journaling data. Specifically - the options of using CACHETEMP or turning off transactions for object filing.
Note if you are concerned with the audit logs generated for every turning off and on the journal for your process - you could simply turn off that System Audit event - %System/%System/JournalChange. Taking of course into consideration the drawback of not logging these kind of events outside the context of this specific scenario.
go to post
Hi Wolf,
I am using v2017.2.1 and Atelier 1.2.118 and I'm not experiencing this.
What I have encountered with regard to license consumption and Atelier (also with version 1.1 of Atelier) was that if I did not define a proper user for the server login (i.e. UnknownUser) then multiple users where consumed (per CSP session of the REST calls). So the recommendation is (also regardless of this licensing aspect) to define a real User for login. Note the phenomena I saw was that of multiple Users, not multiple connections of the same User (if that was what you were seeing).
I suggest that if, also when you define a proper User for login, the issue persists (and you don't get any other swift answer from the Community), you should work with the WRC to resolve this (and then hopefully post the answer back here on the Community).
go to post
Regarding Samples see also from the InterSystems IRIS documentation:
Downloading Samples for Use with InterSystems IRIS
go to post
Thanks Michelle.
When I tried to use the Tools menu I was in an "Atelier element" (e.g. an Ensemble class) so I don't think that was the cause.
Just in case, I double-checked now again - I'm editing an Ensemble class and the items in the Tools menu are disabled... (in the workspace that originally gave the problem; in the newer workspace this does not happen)
go to post
Thanks Alexander.
Indeed I had the Error Log view open and saw various errors - but those were to some projects I had in my workspace that connected to servers that were offline. So I ignored them.
But now you confirmed it should work on this version - I kicked off a new workspace, defined just one project to an online server, and I got to see my Add-Ins...
So unfortunately I don't know exactly what the problem was... but a new workspace solved it...