Thanks @Evgeny Shvarov
I'm working on an update in the IRIS History Monitor, using the new IRIS API and WebService in version 2019.4
Besides that, I include the module.xml file, making the ZPM installation possible.
- Log in to post comments
Thanks @Evgeny Shvarov
I'm working on an update in the IRIS History Monitor, using the new IRIS API and WebService in version 2019.4
Besides that, I include the module.xml file, making the ZPM installation possible.
Hi @Evgeny Shvarov
I'm creating a module.xml for iris-history-monitor, and during the process, a question came up.
When you run docker-compose up in my project, the Installer has an invoke tag to execute a class method.
But how can I make this works in the ZPM?
Perfect!
Thanks @Evgeny Shvarov
I apologize for the lack of the link. I ended up extending myself in the article and ended up just informing the Management Portal link.
I'm fixing it right now.
Thank you for your kind words
Thanks for your PR on GitHub.
Answering your questions:
1. I'm always trying to make things simple and using those opportunities to make Caché/IRIS to shiny a little bit in my work environment. And choosing CSP over REST+Angular or any other technology stack is one of those attempts to show what CSP (Caché/IRIS) is capable of creating. I can say that it was a personal choice.
2. I'm improving these points, and I'll publish the fix as soon as possible.
3. Right now, I don't have any plans to create a new visual trace. Unfortunately, I didn't face a situation as you mention "... single session exceeds 300-500 thousands of messages ..." But, I'll search for something that can improve your scenario.
Thank you again for spending your time with my article and my application.
Hi Neerav,
Thanks for pointing the license situation. But, as we discussed before in LinkedIn messages and the post of History Monitor.
The license for the DevExtreme is free to develop Non-Commercial applications. I updated the README.md file to make the situation clear following the instructions provided by the DevExtreme website.
Sure,
Visual Trace appears to need improvements in huge productions. But, right now, I'm just collecting information to found out a way to create something different.
Hi Scott,
Thanks for your interest in my project.
A similar question happened with the History Monitor Dashboard.
https://community.intersystems.com/post/dashboard-iris-history-monitor#comment-73721
You can choose to import the code in an existent Namespace, and just like Eduard replied before, for the non-docker environment, import the code in your Namespace and access the main csp.
Or you can choose to install the Message Viewer in a new Namespace and make use of the Installer.cls.
If that was your choice change the parameters in the Installer.cls
<Default Name="APPPATH" Dir="/opt/app/" />
Change the /opt/app/ to whatever directory you want.
Next, you can use the class Installer.cls to create the Database, Namespace, and Web Application.
So, run the following lines of the Dockerfile in the Caché/Ensemblé/IRIS Terminal:
Do $system.OBJ.Load("/opt/app/Installer.cls","ck")
Set sc = ##class(App.Installer).setup(,3)
HTH
Answering the question, "What is docker-compose?"
"Compose is a tool for defining and running multi-container Docker applications. With Compose, you use a YAML file to configure your application's services. Then, with a single command, you create and start all the services from your configuration."
for more info: https://docs.docker.com/compose/
IRIS History Monitor is using the new API /api/monitor
Can I submit the application to this contest?
Thanks, @Luca Ravazzolo , I'm happy with your comment.
The main goal of this article was to be clear enough with an example to show the possibilities of the IRIS, and to show that you don't need a fancy architecture to take advantage of what IRIS offers.
@Evgeny Shvarov congratulations on such a milestone!
That many more apps come in the next future!
Hi,
Thanks @Lorenzo Scalese !
Congrats to all participants and special thanks for this community for the incredible support ![]()
Thanks, @Francisco Ramalho !
I'm thrilled to be remembered by you. You are an inspiration for me and for those who want to bring innovation! ![]()
![]()
Hi, @Ben Spead,
I'm using a plugin to change the color of each one of my workspaces. The plugin's easy to use and helps me a lot, avoiding mistakes editing in the wrong workspace.
Peacock
https://marketplace.visualstudio.com/items?itemName=johnpapa.vscode-peacock
The plugin creates the configuration inside the .vscode folder in a JSON file.
{
"objectscript.conn.ns": "IRISMONITOR",
"objectscript.conn.port": 52773,
"objectscript.conn.active": true,
"objectscript.format": {
"commandCase": "word",
"functionCase": "word"
},
"objectscript.export.addCategory": true,
"workbench.colorCustomizations": {
"activityBar.background": "#88d7ea",
"activityBar.activeBorder": "#de41bf",
"activityBar.foreground": "#15202b",
"activityBar.inactiveForeground": "#15202b99",
"activityBarBadge.background": "#de41bf",
"activityBarBadge.foreground": "#e7e7e7",
"titleBar.activeBackground": "#5dc9e2",
"titleBar.inactiveBackground": "#5dc9e299",
"titleBar.activeForeground": "#15202b",
"titleBar.inactiveForeground": "#15202b99",
"statusBar.background": "#5dc9e2",
"statusBarItem.hoverBackground": "#32bbda",
"statusBar.foreground": "#15202b",
"activityBar.activeBackground": "#88d7ea",
"statusBar.border": "#5dc9e2",
"titleBar.border": "#5dc9e2"
},
"peacock.color": "#5dc9e2"
}HTH
Hi @Paul Hula
If I understand the question correctly, you want to download a new excel file after manipulating the data using COS.
I had a similar situation and used this project by Robert Cemper.
The lightweight Excel download. Maybe this project can help you.
https://community.intersystems.com/post/light-weight-excel-download
HTH
Great article!
Very well detailed
I am looking forward to creating something using the python suite as a reference.
Thanks @Henry Pereira
Thanks @Kurro Lopez @Evgeny Shvarov @Vladimir Mologa
Valeu @Felipe Carvalho
Obrigado @Vera Lucia Alves de Oliveira
@Timothy Leavitt this is amazing!
I'll be making use of it in my application :)
I was looking into the OpenExchange description, and in the Tutorial and User Guide, I think the links are broken. I got a "Not found" message when I try to access the URLs.
https://openexchange.intersystems.com/docs/sample-phonebook.md
This is really cool! Great article
I think it would be better for us to understand and try to help you if you provide a kind of sketch of your idea.
Maybe I'm wrong, but the minimum requirement here it's because you don't have %JSON.Adaptor on Caché.
One of your approaches could be to simplify your diagram to create blocks using divs and make it easier to understand and show what you want in a more straightforward way, using CSS and simple javascript/jQuery.
The other one can be using different libraries that give to you power to create any diagram you want ![]()
I found a few libraries that could be useful in your journey.
https://modeling-languages.com/javascript-drawing-libraries-diagrams/
One of them that calls my attention was:
https://gojs.net/latest/samples/index.html
Hope that helps
Best Regards,
Henrique
I want to generalize, and not every Namespace will be an Interoperability production.
Hi @Timothy Leavitt
I'm testing the AppS.REST to create a new application, following the Tutorial and Sample steps in Github I created a Dispatch Class:
Class NPM.REST.Handler Extends AppS.REST.Handler{ClassMethod AuthenticationStrategy() As %Dictionary.CacheClassname{
Quit ##class(AppS.REST.Authentication.PlatformBased).%ClassName(1)}ClassMethod GetUserResource(pFullUserInfo As %DynamicObject) As AppS.REST.Authentication.PlatformUser{
Quit ##class(AppS.REST.Authentication.PlatformUser).%New()}}And a simple persistent class:
Class NPM.Model.Task Extends (%Persistent, %Populate, %JSON.Adaptor, AppS.REST.Model.Adaptor){Parameter RESOURCENAME = "task";Property RowID As %String(%JSONFIELDNAME = "_id", %JSONINCLUDE = "outputonly") [ Calculated, SqlComputeCode = {Set {*} = {%%ID}}, SqlComputed, Transient ];Property TaskName As %String(%JSONFIELDNAME = "taskName");/// Checks the user's permission for a particular operation on a particular record./// <var>pOperation</var> may be one of:/// CREATE/// READ/// UPDATE/// DELETE/// QUERY/// ACTION:<action name>/// <var>pUserContext</var> is supplied by <method>GetUserContext</method>ClassMethod CheckPermission(pID As %String, pOperation As %String, pUserContext As AppS.REST.Authentication.PlatformUser) As %Boolean{
Quit ((pOperation = "QUERY") || (pOperation = "READ") || (pOperation = "CREATE") || (pOperation = "UPDATE"))}}But when I try the REST API using Postman GET: http://localhost:52773/csp/npm-app-rest/api/task/1
I'm getting a 404 Not Found message.
Am I doing something wrong or missing something?
Thanks
Yes, I already populated the class.

I added auditing on everything, and the <PROTECT> error never showed up. So, I started everything from scratch and found out a typo on Postman. ![]()
Thanks, @Eduard Lebedyuk @Timothy Leavitt
PS: Sorry, guys. I think not sleeping enough hours isn't good for health and cause this kind of mistakes ![]()
Great @Yuri Marx
I'm looking forward to the next articles.
It's great!
I tried the application, and I liked the interface and how easy it is to create a simple CRUD using RESTForms.