Clear filter
Article
Evgeny Shvarov · Aug 29, 2019
Hi Developers!
Often when we develop some library, tool, package, whatever on InterSystems ObjectScript we have a question, how we deploy this package on the target machine?
Also, we often expect that some other libraries already installed, so our package depends on them, and often on some particular version of it.
When you code on javascript, python, etc the role of packages deployment with dependency management takes package manager.
So, I'm pleased to announce that InterSystems ObjectScript Package Manager available!
CAUTION!
Official Disclaimer.
InterSystems ObjectScript Package Manager server situated on pm.community.intersystems.com and InterSystems ObjectScript Package Manager client installable from pm.community.intersystems.com or from Github are not supported by InterSystems Corporation and are presented as-is under MIT License. Use it, develop it, contribute to it on your own risk.
How does it work?
InterSystems ObjectScript Package Manager consists of two parts. There is a Package Manager server which hosts ObjectScript packages and exposes API for ZPM clients to deploy and list packages. Today we have a Developers Community Package Manager server available at pm.community.intersystems.com.
You can install any package into InterSystems IRIS via ZPM client installed first into IRIS system.
How to use InterSystems Package Manager?
1. Check the list of available packages
Open https://pm.community.intersystems.com/packages/-/all to see the list of currently available packages.
[{"name":"analyzethis","versions":["1.1.1"]},{"name":"deepseebuttons","versions":["0.1.7"]},{"name":"dsw","versions":["2.1.35"]},{"name":"holefoods","versions":["0.1.0"]},{"name":"isc-dev","versions":["1.2.0"]},{"name":"mdx2json","versions":["2.2.0"]},{"name":"objectscript","versions":["1.0.0"]},{"name":"pivotsubscriptions","versions":["0.0.3"]},{"name":"restforms","versions":["1.6.1"]},{"name":"thirdpartychartportlets","versions":["0.0.1"]},{"name":"webterminal","versions":["4.8.3"]},{"name":"zpm","versions":["0.0.6"]}]
Every package has the name and the version.
If you want to install one on InterSystems IRIS you need to have InterSystems ObjectScript Package Manager Client aka ZPM client installed first.
2. Install Package Manager client
Get the release of the ZPM client from ZPM server: https://pm.community.intersystems.com/packages/zpm/latest/installer
It is ObjectScript package in XML, so it could be installed by importing into classes via Management Portal, or by terminal:
USER>Do $System.OBJ.Load("/yourpath/zpm.xml","ck")
once installed it can be called from any Namespace cause it installs itself in %SYS as Z-package.
3. Working with ZPM client
Zpm client has CLI interface. Call zpm in any namespace like:
USER>zpm
zpm: USER>
Call help to see the list of all the available commands.
Check the list of currently available packages on ZPM server (pm.community.intersystems.com):
zpm: USER>repo -list-modules -n registry
deepseebuttons 0.1.7 dsw 2.1.35 holefoods 0.1.0 isc-dev 1.2.0 mdx2json 2.2.0 objectscript 1.0.0 pivotsubscriptions 0.0.3 restforms 1.6.1 thirdpartychartportlets 0.0.1 webterminal 4.8.3 zpm 0.0.6
Installing a Package
To install the package call
install package-name version
This will install the package with all the dependencies. You can omit version to get the latest package. Here is how to install the latest version of web terminal:
zpm: USER> install webterminal
How to know what is already installed?
Call list command:
zpm:USER> list
zpm 0.0.6
webterminal 4.8.3
Uninstall the Package
zpm: USER> uninstall webterminal
Supported InterSystems Data Platforms
Currently, ZPM supports InterSystems IRIS and InterSystems IRIS for Health.
I want my package to be listed on Package Manager
It's possible. The requirements are:
Code should work in InterSystems IRIS
You need to have module.xml in the root.
Module.xml is the file which describes the structure of the package and what is need to be set up on the deployment phase. Examples of module.xml could be very simple, e.g.
ObjectScript Example
Or relatively simple:
Samples BI (previously known as HoleFoods),
Web Terminal
Module with dependencies:
DeepSee Web expects MDX2JSON to be installed and this is how it described in module.xml:DeepSeeWeb
If you want your application to be listed on the Community Package Manager comment in this post or DM me.
Collaboration and Support
ZPM server source code is not available at the moment and will be available soon.
ZPM client source code is available here and is currently supported by InterSystems Developers Community and is not supported by InterSystems Corporation. You are welcome to submit issues and pull requests.
Roadmap
The current roadmap is:
introduce Open Exchange support,
introduce the automation for package updating and uploading;
open source ZPM server.
Stay tuned and develop your InterSystems ObjectScript packages on InterSystems IRIS! Interesting... however I have some questions:
1 - Is there any plans to automatize the `module.xml` generation by using something like a Wizard?
2 - Is there any plans to support non-specific dependency versions like NPM does?
3 - Is it possible to run pre/post-install scripts as well? Kind of what installer classes do.
4 - Is also possible to use the `module.xml`to provide a contextual root? this way it would be used to run UnitTests without the need of defining (or overwriting) the UnitTestRoot global. I already did it with Port, so it's not hard to implement as you basically have to overwrite the `Root` method:
```objectscript
Class Port.UnitTest.Manager Extends %UnitTest.Manager
{
ClassMethod Root() As %String
{
// This provides us the capability to search for tests unrelated to ^UnitTestRoot.
return ##class(%File).NormalizeFilename(##class(Port.Configuration).GetWorkspace())
}
ClassMethod RunTestsFromWorkspace(projectName As %String, targetClass As %String = "", targetMethod As %String = "", targetSpec As %String = "") As %Status
{
set recursive = "recursive"
set activeProject = $get(^||Port.Project)
set ^||Port.Project = projectName
if targetClass '= "" set target = ##class(Port.UnitTest.Util).GetClassTestSpec(targetClass)
else set target = ##class(Port.Configuration).GetTestPath()
if targetMethod '= "" {
set target = target_":"_targetMethod
set recursive = "norecursive"
}
set sc = ..RunTest(target_$case(targetSpec, "": "", : ":"_targetSpec), "/"_recursive_"/run/noload/nodelete")
set ^||Port.Project = activeProject
return sc
}
}
``` 1 - Is there any plans to automatize the module.xml generation by using something like a Wizard?Submit an issue? More over, craft a module which supports that! And PR - it's a Community Package manager.3 - Is it possible to run pre/post-install scripts as well? Kind of what installer classes do.I think, this already in place. @Dmitry.Maslennikov who contributed a lot will comment.4 - Is also possible to use the module.xmlto provide a contextual root?We maybe can use the code! Thanks! @Dmitry.Maslennikov ? And!It worth to mention, that credit in development goes to:@Timur.Safin6844 @Timothy.Leavitt @Dmitry.Maslennikov Thank you very much, guys! I hope the list of contributors will be much longer soon! 1 - Is there any plans to automatize the module.xml generation by using something like a Wizard?Any reasons for it? Are you so lazy, that you can't write this simple XML by hand? Just kidding, not yet, I think best and fastest what I can do it, add Intellisense in vscode for such files, so you can help to do it easier. Any UI, at the moment, is just a waste of time, it is not so important. And anyway, is there any wizard from NPM?2 - Is there any plans to support non-specific dependency versions like NPM does?It is already there, should work the same as semver in npm3 - Is it possible to run pre/post-install scripts as well? Kind of what installer classes do.There is already something like this, but I would like to change this way.4 - Is also possible to use the module.xmlto provide a contextual root? Not sure about contextual root. But if saying about UnitTests, yes actually there are many things which should be changed in the original %UnitTests engine. But in this case, it has some way to run tests without care about UnitTestRoot global. ZPM itself has own module.xml, and look there. You will find lines about UnitTests. with this definition, you run these commands, and it will run tests in different phases
zpm: USER>packagename test
zpm: USER>packagename verify
> Any reasons for it? Are you so lazy, that you can't write this simple XML by hand? Just kidding, not yet, I think best and fastest what I can do it, add Intellisense in vscode for such files, so you can help to do it easier. Any UI, at the moment, is just a waste of time, it is not so important. And anyway, is there any wizard from NPM?
Haha, I'll overlook this first line. I meant something like a CLI wizard really, that asks you for steps, but maybe this can be something apart, you know Yeoman don't you?
NPM does have the command `npm init` which asks you the basic information about your package and generates a package.json.
> It is already there, should work the same as semver in npm
Nice! Does it follow the same format as the one from NPM? (symbolically speaking ^ and *)
> Not sure about contextual root. But if saying about UnitTests, yes actually there are many things which should be changed in the original %UnitTests engine. But in this case, it has some way to run tests without care about UnitTestRoot global. ZPM itself has own module.xml, and look there. You will find lines about UnitTests. with this definition, you run these commands, and it will run tests in different phases.
Yeah, that's exactly what I meant about contextual root, my wording looked wrong because I intended for this feature to be used outside UnitTest, but now I see that there isn't much use for it outside of unit testing. NPM does have the command npm init which asks you the basic information about your package and generates a package.json.Yes, kind of init command sounds useful. You know, we anyway have many differences with npm, for instance. Like, zpm works inside the database with nothing on disk, while npm in OS close to source files, but I think we can find the way how to achieve the best way.It is already there, should work the same as semver in npmNice! Does it follow the same format as the one from NPM?Yes, the same way This brought me to another question. How does the ZPM handle two modules that use the same dependency but both have different versions while being used as peer dependencies?
Example:
Module A using dependency C requires its major 1.
Module B also uses dependency C but requires the newer major 2.
The requisite for this case is: You must have both because you're making a module D that uses both module A and B. In our case, it should actually fail the installation, as we don't have any way to install two versions at the same time.But, not sure, if we already have such check. Hi @Evgeny.Shvarov
In Step "2. Install Package Manager client", it says to run the following code:
Do $System.OBJ.Load("/yourpath/zpm.xml")
It also needs to be compiled and should probably be:
Do $System.OBJ.Load("/yourpath/zpm.xml","ck") Can ZPM run in Cache' ?
Tried to install ZPM on Cache' but failed:
%SYS>D $system.OBJ.Load("/tmp/deps/zpm.xml","ck")Load started on 04/21/2021 11:30:27Loading file /tmp/deps/zpm.xml as xmlImported class: %ZPM.InstallerCompiling class %ZPM.InstallerCompiling routine : %ZPM.Installer.G1.MACERROR #6353: Unexpected attributes for element Import (ending at line 9 character 45): Recurse > ERROR #5490: Error reported while running generator for method '%ZPM.Installer:setup' > ERROR #5030: An error occurred while compiling class %ZPM.InstallerCompiling routine %ZPM.Installer.1ERROR: Compiling method/s: ExtractPackageERROR: %ZPM.Installer.1(3) : MPP5610 : Referenced macro not defined: 'FileTempDir' TEXT: Set pFolder = ##class(%File).NormalizeDirectory($$$FileTempDir)ERROR: Compiling method/s: MakeERROR: %ZPM.Installer.1(7) : MPP5610 : Referenced macro not defined: 'FileTempDir' TEXT: Set tmpDir = ##class(%File).NormalizeDirectory($$$FileTempDir)%ZPM.Installer.1.INT(79) ERROR #1002: Invalid character in tag : '##class(%Library.File).NormalizeDirectory($$$FileTempDir)' : Offset:61 [zExtractPackage+1^%ZPM.Installer.1] TEXT: Set pFolder = ##class(%Library.File).NormalizeDirectory($$$FileTempDir)%ZPM.Installer.1.INT(117) ERROR #1002: Invalid character in tag : '##class(%Library.File).NormalizeDirectory($$$FileTempDir)' : Offset:62 [zMake+4^%ZPM.Installer.1] TEXT: Set tmpDir = ##class(%Library.File).NormalizeDirectory($$$FileTempDir)Detected 5 errors during load.
ZPM works in IRIS only, but you can search around on DC, and OEX - there were attempts to provide alternative support of ZPM in Cache. I hope this ZPM will be a yet-another-reason to upgrade to IRIS ;) When I try to install webterminal, I am getting the following...
IRIS for Windows (x86-64) 2022.1 (Build 209U) Tue May 31 2022 12:16:40 EDT
zpm:USER>install webterminal [USER|webterminal] Reload START (C:\InterSystems\HealthConnect_2022_1\mgr\.modules\USER\webterminal\4.9.2\)[USER|webterminal] Reload SUCCESS[webterminal] Module object refreshed.[USER|webterminal] Validate START[USER|webterminal] Validate SUCCESS[USER|webterminal] Compile STARTInstalling WebTerminal application to USERCreating WEB application "/terminal"...WEB application "/terminal" is created.Assigning role %DB_CACHESYS to a web application; resulting roles: :%DB_CACHESYS:%DB_USERCreating WEB application "/terminalsocket"...WEB application "/terminalsocket" is created.ERROR #879: Target role %DB_CACHESYS does not exist.[webterminal] Compile FAILUREERROR! Target role %DB_CACHESYS does not exist. > ERROR #5090: An error has occurred while creating projection WebTerminal.Installer:Reference. Hi Scott! which version of IRIS it is? What is the version of ZPM client? I have seen this on both... HealthShare Health Connect
IRIS for Windows (x86-64) 2022.1 (Build 209U) Tue May 31 2022 12:16:40 EDT
IRIS for UNIX (Red Hat Enterprise Linux 8 for x86-64) 2022.1 (Build 209U) Tue May 31 2022 12:13:24 EDT
using the link from https://pm.community.intersystems.com/packages/zpm/latest/installer
zpm:USER>version
%SYS> zpm 0.5.0https://pm.community.intersystems.com - 1.0.6 This was fixed by me on https://github.com/intersystems-community/webterminal/pull/149 in July 2022.
The ZPM package is outdated.
I recommend you use instructions at https://intersystems-community.github.io/webterminal/#docs to install the latest version. @Nikita.Savchenko7047 made a ZPM release - now could be installable via ZPM too
Thanks @John.Murray ! ZPM package is updated When a config for instance CSPApplication already exist and the module.xml has the CSPApplication section, can you opt to not override config on server for if the client for instance made changes to application Roles then after an upgrade it is missing
Announcement
Evgeny Shvarov · Aug 22, 2019
Hi Developers!Here is a new release of InterSystems Open Exchange - InterSystems applications gallery!What's new?Github Integration is improved;Better application update mechanism;UI/UX enhancements.See the details below.Better Github IntegrationWith this release, if your InterSystems application source code is hosted on Github a lot of mandatory Open Exchange application fields could be imported from Github repo. Enter the URL of the GitHub repo and the name, download URL, short description, license, full description will be imported from Github. The only mandatory fields to feel in will be InterSystems Data platform and tag-list. Check the video which illustrates the process.Improved application update procedureAll the parameters of Open Exchange application need to pass the approval procedure. And starting from this release you don't need to unpublish the repository if you want to make changes and publish the next release. If you want to publish the next release of the application do the following steps:1. Open the published app and click Edit:2. Make the necessary changes and click Save - this will create a draft version of your application. You may see both published and draft entries on My Apps section:3. Once you good with the new changes send the draft application for approval review.4. When and if the new version of the app is approved the previously published version will be changed to the newly approved version.Minor UI/UX improvementsWith this release, we've improved the performance of Open Exchange and we introduced a set of minor UI enhancements such as sorting selector for apps, better image icon update for apps and companies, clickable category on the application page and things like this which could improve your experience with InterSystems Open Exchange.Also, don't hesitate to use Google Adwords vouchers option we are introducing with this release to promote your Open Exchange application which you can redeem with Global Masters program. Learn more.Check all the tasks we solved in this version and welcome the new kanban for the next release where we plan email subscriptions, better integration with Developers Community and Partner hub, better analytics, and other nice features!Introduce your bug reports and feature requests and stay tuned!
Announcement
Evgeny Shvarov · Oct 3, 2019
Hi Developers!
This a release post what we did and what are the new features on the Developers community.
Editor enhancements: tables for markdown, source-WYSIWYG switcher, emoji ;
The email system is improved - better images, analytics, and tags;
Bookmarks for comments and answers;
A lot of minor enhancements.
See the details below!
Editor enhancementsFor those who are contributing in markdown mode, we now implemented the support of tables with markdown. Another enhancement is that if you switch to source from WYSIWYG mode you'll see the source in multi-lines, and not in one-line which was impossible to edit. Now, this all works fine!
And! We added emoji support! ) Feel free to add it to introduce all your emotions )
Email system enhancements
We improved tracking of what email notifications we send on what triggers and we'll try to send you only what you want to receive. In order to improve this, we added the feature to send notifications for tag subscribers if the tag has been introduced to the article or question. Also, we fixed the bug when some emails were not shown in Gmail.
Bookmarks for comments
We added the feature. Now if you find the comment/answer you really don't want to forget you can click on the "star" in the comment and find it then in your Bookmarks section of member profile.
As always we fixed a few bugs, hopefully, added less new and planned a new version for October 2019! And we are waiting for your bug reports and enhancement requests !
Stay tuned!
Announcement
Evgeny Shvarov · Oct 9, 2019
Hi Developers!
I'm pleased to announce the September release notes of the InterSystems Open Exchange!
Here is what the new release introduces:
Better performance;
Better UX;
Discuss and Issues tabs on the application page.
See the details below.
Better Open Exchange Performance
We improved the REST API and introduced a caching mechanism for Github descriptions thus the performance of Open Exchange has been greatly improved. If you think we need to improve it more please submit an issue!
UX improvements
We introduced several UX improvements e.g. you can right-click on an app tile and open the app page in a new tab. Also with this release, you can open apps with a particular tab - tab selector is added in URL. E.g. check the URL with releases history of Serenji.
Discuss tab
If you add the link to community article related to the app this will activate the Discuss button and with the current release, it also will introduce the Discuss tab on the app page which contains the iframe with this community article. So you are able to read and comment on the article in the Discuss tab without opening the community page. See the example.
Issues tab
If you submit the app with the link to Github repositories this will introduce an Issues tab that lists open issues for the application and lets you submit a new issue if you click a NEW ISSUE button. E.g. check the issues for VSCode ObjectScirpt or add a new one )
Check the full list of tasks solved in August-September.
Here is the plan for the next version, add your bug fixes and enhancements, submit your solutions and tools to Open Exchange, and stay tuned!
Announcement
Anastasia Dyubaylo · Oct 14, 2019
Hi Community,
See all the Key Notes videos from Global Summit 2019 in a dedicated Global Summit 2019 Keynotes playlist on InterSystems Developers YouTube Channel!
1. The Age of Interoperability – presented by Terry Ragon, InterSystems CEO & Founder, presents a vision of data as the engine of the future and how the data platform will let people do more with their data.
2. The Future Begins Now – presented by Erica Orange, Executive Vice President and Chief Operating Officer of The Future Hunters.
3. Taking Flight with Data – presented by Scott Gnau, Head of Data Platforms, InterSystems.
4. InterSystems IRIS: Three Perspectives (panel) with Steve Ayer, Rhodes Group & David Gahan, RxMx & Jim Heiman, Northwell Health.
5. Healthcare Unbounded – presented by @Donald.Woodlock, Head of HealthShare, InterSystems & @Christine.Chapman, Head of TrakCare, InterSystems.
6. A Next-Generation Data & Technology Network for Healthcare Systems – presented by Jeff Elton, Concerto Health AI (CHAI) CEO.
7. We Have the Power to Make Healthcare Work Better – presented by David Braza, Executive VP, Chief Financial Officer, and Chief Actuary at Premera.
8. Artificial Intelligence in Healthcare and BioMedicine – presented by James Collins, MIT Professor.
9. Disruption and Opportunities for Developers – presented by Vivek Wadhwa, Distinguished Fellow at Harvard Law School and the Carnegie Mellon University College of Engineering at Silicon Valley.
10. InterSystems IRIS Show and Tell – presented by @Jeff.Fried, Director of Product Management, Data Platforms, InterSystems.
BIG APPLAUSE TO ALL SPEAKERS! 👏🏼
And...
If you want to learn more about Global Summit 2019, follow this link.
Enjoy and stay tuned with InterSystems Developers!
Question
Rui Figueiredo · Nov 1, 2019
Hi,
Has anyone tried the InterSystems IRIS for Health Community Edition on Azure
https://azuremarketplace.microsoft.com/en-us/marketplace/apps/intersystems.intersystems-iris-health-communityIt seems the image is the InterSystems IRIS for Health image instead of the Community Edition.
Thanks,
Rui
I am confused. The link above is for the IRIS for Health Community Edition. I would expect you get the IRIS for Health image. Please elaborate Hi Andreas,
From the link, you got an IRIS for Health image, the issue is that the image has BYOL license instead of a Comunity Edition Licence.
Rui Thank you for the clarification Hi Rui -
Yes this is true, but it's temporary. We had some issues with the Community Edition and the marketplace listing was set up this was as an interim measure.
This will be replaced by the IRIS for Health Community Edition shortly. Meantime it gives you the same rights and you can develop with it fine, but it will expire (at which point you should just go to the marketplace and get a new one).
-jeff
Announcement
Evgeny Shvarov · Nov 3, 2019
Hi Developers!
Here is the release of what's was enhanced and fixed in the DC engine in October 2019.
New look-and-feel and features for the Developers Events;
"Smart" social sharing in Twitter;
5 min delay before sending emails, nested tags for group tags, better articles linkage, and other small enhancements and bug fixes.
See the details below.
New Developers Events
We improved the Developers Events section, so now developers' events mandatory contain registration link, the place and you can add the event into your calendar including date, time, place, and the content. Check how it works!
Twitter Smart Sharing
Every post on DC contains social buttons panel - just in case you want to share the post in the preferred social network in conveniently opens your network account and adds the link of the post.
With this release, we improved this feature, especially for Twitter sharings. Now if you share the post on twitter with this button it also introduces all the hashtags related to DC tags in the post. E.g. if you share the post on new IRIS and IRIS for Health release, you get the following for Twitter:
Minor enhancements
With this release, we introduced a 5 min delay before sending the announcements. This is to let you make final tweaks to your post after pressing the button "Publish". Often we see something which needs to be fixed just after we press "Publish". At least I do that )
We improved the tag tree: now it has nested tags to group posts to make the structure of taxonomy more close to the content semantics.
Also, the linkage mechanism was improved: now if you include the "Next chapter" link in one post this automatically includes the "Prev post" link to another post which makes the linkage mechanism a lot easier.
And as always, we fixed a ton of bugs, added a few more and have great plans for the future!
Submit your ideas, share your InterSystems experience and stay tuned!
Announcement
Anastasia Dyubaylo · Nov 23, 2018
Hi Community!It's started! Home sale of the year!This weekend, November 23-25, is a Black Friday Deals weekend on InterSystems Global Masters Advocate Hub!Only 3 days left! Hurry to visit Rewards Catalogue to redeem your prize with 50% OFF! Note: Some of the rewards are limited...Skip the lines this year and get the items you want here on Global Masters! Wish you great deals on Black Friday! The rewards seem to be almost sold out after an hour.Can we add some new ones in the future?How about Raspberry PI board? Arduino board? Or something based on x86. While InterSystems does not work on ARM. That would be a lot of points. Said the one who has the highest number of points. I think it should not be too much expensive, and it will be a good goal for some participants. To join Global Masters leave a comment to the post and we'll send the invite.
Question
Ponnumani Gurusamy · Jan 8, 2019
Hi Team,
I am interesting to learn InterSystems IRIS data platform. How to I download and install the InterSystems IRIS instance and sandbox. So Please give the instruction for how to I use it.
Thanks & Regards,
Ponnumani G. The best place to start would be our learning portal. There is an InterSystems IRIS learning track, and it has videos and courses that include sandboxes. Ponnumani,To give you a more specific spot to start with InterSystems IRIS, I would look at either our QuickStarts, which are designed for you to use with our InterSystems Labs sandbox, or one of the cloud providers. They assume you are a developer and want to do more of the work on your own. You can also look at our our Experiences, which provide a bit more guidance and also include fully configured InterSystems Labs that include the data, code, and even IDEs that you might need to get your hands on the technology.Doug FosterManager, Online Education
Announcement
Evgeny Shvarov · Dec 2, 2019
Hi Developers!
Here is what's we introduced in Developers Community features and UI last month:
Pinned topics for main feed and tags;
One-click unsubscribe option in every email we send;
A 'new' indicator for the posts and comments;
Notification of changes made by moderators;
Articles without translation don't show 'access denied' anymore.
See the details below!
Pinned topics
Important news and posts now could be pinned to the top of the main feed and tags. I think this will be very used by partners - tag owners.
One-click unsubscribe action
If you don't want to receive any email notifications from Developers Community now you can unsubscribe now with one click.
New indicator
DC marks with New indicator posts and comments you haven't seen yet since your last visit. And removes the indicator once you do.
Also, you may find useful a New filter in the filter list:
Notifications of changes made by moderators
We have moderators on DC, and they work. Since this release, you will get a 'diff' notification of what changes moderators made to your post to make moderators' work more clear and visible.
No 'Access denied for the posts without translation
As you know, we are the two-languages community since May 2019! And every post has a switcher to another language.
And if there is a translation you see the translated post. If there is no translation you see the UI to request a translation. If you are logged in. If not - you saw 'Access denied', now we fixed it.
Also, we fixed a lot of bugs and introduced new tasks!
Add your requests, contribute to InterSystems Developers Community, and stay tuned!
Announcement
Jean Dormehl · Dec 6, 2018
Hi CommunityI have created a simple package that allows the use of Cache with the Laravel Framework.From my initial testing everything seems to be operating smoothly but I would like to appeal to the PHP users in the community to help me improve this package.For those of you out there who have time and would be interested in this, please visit the repo at https://github.com/jeandormehl/laracacheThanks in advance Cool staff, Jean!Do you want to publish it on Open Exchange? Hi EvgenySure, that sounds fun. I'll go have a look. Available on Open Exchange! So fast!Jean, could it be ported for InterSystems IRIS too? Doesn't Laravel already has its own Cache system? It has a great package for using caching. Additionally, if you want, you can also use memcached for database caching and varnish in Laravel (Source: https://www.cloudways.com/blog/integrate-laravel-cache/ ). So what did you do in this package? Can you give some information here. @oliver.russell I think you are confusing the name of an InterSystems product (Caché) with the term 'cache'. Easy mistake to make, ever since InterSystems released Caché a couple of decades ago. Hi Jean,
Need a help, I try to connect my laravel web app to intersystem cache using this package but still not working.
Error Message :
SQLSTATE[01000] SQLDriverConnect: 0 [unixODBC][Driver Manager]Can't open lib '/usr/lib/intersystems/odbc/bin/libirisodbcur6435.so' : file not found
I'm confused in this part :
# create the symlink
sudo ln -s /usr/lib/x86_64-linux-gnu/libodbccr.so.2.0.0 /usr/lib/x86_64-linux-gnu/odbc/libodbccr.so
Thank you in advance
Interesting ... Jean - do you have equivalent instructions to connect to IRIS instead of Cache' ?
Steve I think this error showing reason is you are not installed the odbc driver of Cache DB.
Please try to download it and install it, after that please try.
Download Locations
https://github.com/intersystems-community/iris-driver-distribution/tree/main/ODBC
Caché ODBC drivers are located here: ftp://ftp.intersystems.com/pub/cache/odbc/
InterSystems IRIS ODBC drivers -- here: ftp://ftp.intersystems.com/pub/iris/odbc/
Announcement
Anastasia Dyubaylo · Jan 14, 2019
Hi Community!
We're pleased to invite you to the InterSystems Benelux Symposium 2019!
Date: February 5 - 6, 2019
Place: Radisson Blu Astrid Hotel, Antwerp, Belgium
Please find all the details here: https://bnl.intersystems.com/symposium-2019
I'm going to be there, too, and I have something to show for you. I can demonstrate VSCode extension for InterSystems ObjectScript. And I can show how to build and deploy with Kubernetes. Now this I am looking forward to :) I shall also be there with the VSCode extension from George James Software. When will you be presenting your extension?Will it be on the usergroup, or after the event? When will you be presenting your extension?Will it be on the usergroup, or after the event? I have not planned any special, just wanted to see how it will be on place. I shall be there from the Tuesday lunchtime until Wednesday night and will be happy to demonstrate it wherever people want to gather round my laptop. There isn't a Partner Pavilion at the event. Hi Bert! Hi guys!I'll be on a Symposium as well on the 5th of February and we can arrange demos of different VSCode plugins for InterSystems ObjectScript! We will finalize the agenda for the Caché User Group @BeneluxSymposium shortly.All questions or suggestions for demos or presentations you want to do are still welcome here or at CUG Benelux Blog Reading the comments here, it seems as we'll be short on time to show & discuss everything during the CUG meeting! I'm looking forward to see these nice add-ons & howto's.See you all at the symposium! Sorry for everybody who wanted to see my demo there, unfortunately, I can't go, because of some issues with getting a visa.
Announcement
Jeff Fried · Jan 21, 2019
The preview release of InterSystems IRIS for Health 2019.1 is now available - try it out!Kits and container images are available via WRC's preview download site.InterSystems IRIS for Health 2019.1 is the second major version of InterSystems IRIS for Health. It has many new capabilities including:Significant enhancements to SQL usability and performanceImproved scalability and operations for sharded clustersClient language updates and performance boostsNew interoperability capabilities that speed configuring and troubleshooting of productionsUpdates to FHIR support and message transformations. System security, performance, and efficiency enhancementsThese are detailed in the draft documentation and release notes for IRIS for Health.(Note that the InterSystems IRIS for Health documentation requires a registration on the online learning site and is currently available only to registered healthcare customers.)Server platform support for traditional installations have been updated, as have the base OS layer and storage drivers for InterSystems IRIS containers. You can see read details in the draft Supported Platforms document. With 2019.1, InterSystems IRIS for Health now officially supports self-service BI tools using ODBC connections, specifically Tableau and PowerBI. Customers interested in using these are encouraged to take the Power BI survey or Tableau survey; this feedback will help us in providing dedicated connectors to these tools in a future release. Preview releases allow our customers to get an early start working with new features and functionality. They are supported for development and test purposes, but not for production. When issues are found, how do we report them to support if our organization has tech support? WRC doesn't seem to list 2019.1 version as one that can be selected when incident is created. Thanks for pointing that out, Yuriy - you should now see 2019.1 as a version you can select.
Announcement
Jeff Fried · May 9, 2019
The preview release of IRIS for Health 2019.2 is now available - give it a try! Container images are available via the WRC's preview download site.The build number for these releases is 2019.2.0.100.0. InterSystems IRIS for Health 2019.2 is the first CD (continuous delivery) release of IRIS for Health. It has many new capabilities including:enhancements to FHIR STU3 supportadditional IHE profiles a new JMS (java message service) connectorAddition of the IRIS Native API for Python and Node.js and relational access for Node.jsSimplified sharding architecture and flexible sharded schema designSupport for the new PowerBI connector for InterSystems IRISNew look in the Management PortalSystem security, performance, and efficiency enhancementsEnhancements to the InterSystems Cloud Manager These are detailed in the prerelease documentation and release notes. As this is a CD release, it is only available in OCI (Open Container Initiative) a.k.a. Docker container format. The platforms on which this is supported for production and development are detailed in the Supported Platforms document. For more information on what a CD release is, review the new release cadence post on InterSystems Developer Community.Preview releases allow our customers to get an early start working with new features and functionality. They are supported for development and test purposes, but not for production.
Question
WHAT THE · May 20, 2019
Hi everyone,
Im new in cache, i came from Java and im missing some features that i couldn't find in the documentation, I hope you can help me with this questions.
Just a brief introducction:
- Im in a project with old cache version, so saddly i can't use Eclipse + Atelier, so im using Studio.
- Currently im in a project with persistent classes, we want to turn apart the globals and focus on tables.
The questions:
Is there any way to make something like hibernate for cache %Persistent classes? For example, if i want to get all the records for a table in Java+Hibernate+Criteria i'll do something like this:
myListOfObjects = myPersistentClass.list(); // Equivalent to SELECT *
In cache i have to create a %SQL.Statement, put the query inside and get the recordSet, iterate it and then get a list of %Persistent objects, for every object i want to use it.
I tried to create some class that inheritance from %Persistent and contains all the methods i want to be used for the rest of persistent objects. With this i only have the data access methods in one place (something similar to the sample Employee who extends from Person, but that creates some weird table called Person that only will contains the ID's and it will have the ID duplicated by every class that extends from it).
Another example, i have some dictonary tables that all of them contains a column called "CODE" i want all of the persistent classes that references a dictionary table own a method to get all the records " WHERE CODE = Xparameter" and this method only returns one result.
myObject = myPersistentClass.getByCode(Xparameter); // Equivalent to SELECT * FROM X WHERE CODE = "Xparameter"
In this example i asked for the most easy questions that came to my mind, i don't only want to achive a "SELECT *" and a "WHERE CODE = ", this question goes far from that. Im looking for a better way to get information from %Persistent classes with good practices.
Is there any accepted way to achive this?
I hope i explained myself correctly. So... nothing accepted by the community? May be rephrase the question.Also Java and Cache are polls apart. I don't know of anything similar to Hibernate in Caché. If you want to encapsulate some data access logic inside of a class, it's helpful to define a [class query](https://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GOBJ_queries) that other objects can access through dynamic SQL.
More specific to your getByCode example, I use the index [auto-generated methods](https://community.intersystems.com/post/useful-auto-generated-methods) a lot. For example in your dictionary table I would create a unique index on Code ` Index CodeIndex On Code [ Unique ]; ` and then use `##class(Whatever.Dictionary).CodeIndexOpen()` to open the object I want. It's better to not create lists, especially lists which you need to filter later.Write a SQL query, iterate over it results and do stuff you need to do right there.SQL Query can be a separate class element for readability purposes. Hi, with regard to your second question, if your property "CODE" is unique and indexed, ie, your class definition includes something like:
Index CodeIndex on CODE [Unique];
Then there is a generated method you can use to open the object that has CODE=Xparameter:
set myObject = ##class(User.MyPersistentClass).CodeIndexOpen(Xparameter, concurrency, .sc)
For any unique index, the method name is always "[index-name]Open". You can read more about auto-generated methods here:
https://community.intersystems.com/post/useful-auto-generated-methods
With regard to your first question, I'm not aware of any system method that returns a list of all saved objects for a class, but you could implement that by creating a class method that creates and executes the appropriate query, then iterates over the results and copies them to a list. I would be cautious about doing something like this with large tables though, since you would essentially be loading the entire table into memory. This could lead to <STORE> errors:
https://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=RERR_system
A better solution might be to implement some kind of iterator method that only loads one object at a time.