Clear filter
Article
Stefan Cronje · Jan 25, 2023
Hi folks,
I am announcing a new package I have loaded on the OEX, which I am also planning on entering into the contest this month.
In a nutshell, what it offers you are the following.
Base classes to use on Persistent (table) classes for InterSystems IRIS to keep record history
These classes enable the historizing of persistent class records into another persistent class when touched.
This provides for a full history of any record.
It allows for record rollback to a specific version.
It can automatically purge old history records.
Do you need it?
Have you ever had the scenario where a data fix has gone terribly wrong, and you need to roll back the update?Have you ever tried to find out what or who updated or inserted a specific record?Have you ever needed to find out what has happened to a record over its lifetime?
You can get all this now, by simply extending from two classes.
What this article covers is what it offers. The package contains all the instructions needed, and there are only a few.
The Basics
The table that contains the "current" record have two sets of fields
Create
This contains the details of when the entry was created and is immutable.
Update
This contains the information of the last time the record was updated.
The table that contains the history records have three sets of fields
Create
This is copied as is from the current record when inserted.
Update
This is copied as is from the current record when inserted.
Historize
This contains details on the historization entry on insertion, and is immutable.
Each of the sets above contain the following fields:
Name
Content
DateTimeStamp
The system's date and time
Job
The PID value ($JOB)
SystemUser
The system user performing the action. $USERNAME
BusinessHost
The interoperability business host that was involved, if available.
ClientIP
The client's IP address that instructed this, if available.
CSPSessionID
The CSP Session ID that was involved, if available.
Routine
The calling routing. This can really help pinpoint where in the code this originated from.
The "current" record table has a Version property, and this is set when extending from the base class.The history racoed table has a Version property, which is the version that the "current" record was at that point.
What can it historize?
Serial Properties
"Normal" Properties
Class References
Arrays of Data types
Lists of Data types
Arrays of Objects
Lists of Objects
Relationship - where cardinality is "one"
Note that in this case, the history table's prpperty must be an object reference and not a relationship.
What can't it historize?
Relationships where the cardinality is "many"
What about my other triggers?
The triggers activate in order slot number 10. This means you can add your triggers before or after the execution of these triggers.
Additional Functionality
Record historization can be switched off for a specific table by setting a global. This is to cater for bulk updates where is the history is not required, for example, populating a new field during a deployment.
An auto purge setting can be set per table in a global. If you have a table that does get a lot of updates, and you only need the previous two records for example, you can set it to keep the last two records in hte history and remove the older ones. This happens during the historization of the record.
Restoring Previous Versions
The base classes will generate methods in the "current" record class that can be used to restore a specific version, or the previous version, back into the current table.These can be invoked via SQL too, if you need to restore from a selection of rows.
Note that the restored record will bump the version number on the "current" table and will not have its old version number, which is probably a good thing.
Congrats on your first entry to our contests on Open Exchange! good luck :) Hi Stefan,
Your video is now on InterSystems Developers YouTube:
⏯ IRIS Table Audit Demo
Announcement
Anastasia Dyubaylo · Mar 17, 2023
Hey Community,
Tired of entering login-password during the docker build with your InterSystems IRIS every time?
There is a handy way to turn it on and off – use the passwordless zpm module.
Watch this video to explore how to use the passwordless ipm module to turn on and off entering login-password during docker build with your InterSystems IRIS:
⏯️ Passwordless mode for development with InterSystems IRIS
Add zpm "install passwordless" in %SYS namespace during your docker build phase, and IRIS will no longer ask for a password.
Example application with passwordless.
Article
Rizmaan Marikar · Mar 20, 2023
Introduction
Data analytics is a crucial aspect of business decision-making in today's fast-paced world. Organizations rely heavily on data analysis to make informed decisions and stay ahead of the competition. In this article, we will explore how data analytics can be performed using Pandas and Intersystems Embedded Python. We will discuss the basics of Pandas, the benefits of using Intersystems Embedded Python, and how they can be used together to perform efficient data analytics.
What's Pandas for?
Pandas is a versatile tool that can be used for a wide range of tasks, to the point where it may be easier to list what it cannot do rather than what it can do.
Essentially, pandas serves as a home for your data. It allows you to clean, transform, and analyze your data to gain familiarity with it. For instance, if you have a dataset saved in a CSV file on your computer, pandas can extract the data into a table-like structure called a DataFrame. With this DataFrame, you can perform various tasks such as:
Calculating statistics and answering questions about the data such as finding the average, median, maximum, or minimum of each column, determining if there is correlation between columns, or exploring the distribution of data in a specific column.
Cleaning the data by removing missing values or filtering rows and columns based on certain criteria.
Visualizing the data with the help of Matplotlib, which enables you to plot bars, lines, histograms, bubbles, and more.
Storing the cleaned and transformed data back into a CSV, database, or another type of file.
Before delving into modeling or complex visualizations, it's essential to have a solid understanding of your dataset's nature, and pandas provides the best way to achieve this understanding.
Benefits of using Intersystems Embedded Python
Intersystems Embedded Python is a Python runtime environment that is embedded within the Intersystems data platform. It provides a secure and efficient way to execute Python code within the data platform, without having to leave the platform environment. This means that data analysts can perform data analytics tasks without having to switch between different environments, resulting in increased efficiency and productivity.
Combining Pandas and Intersystems Embedded Python
By combining Pandas and Intersystems Embedded Python, data analysts can perform data analytics tasks with ease. Intersystems Embedded Python provides a secure and efficient runtime environment for executing Python code, while Pandas provides a powerful set of data manipulation tools. Together, they offer a comprehensive data analytics solution for organizations.
Installing Pandas.
Install a Python Package
To use Pandas with InterSystems Embedded Python, you'll need to install it as a Python package. Here are the steps to install Pandas:
Open a command prompt as Administrator mode (on Windows).
Navigate to the <installdir>/bin directory in the command prompt.
Run the following command to install Pandas: irispip install --target <installdir>\mgr\python pandas This command installs Pandas into the <installdir>/mgr/python directory, which is recommended by InterSystems. Note that the exact command may differ depending on the package you're installing. Simply replace pandas with the name of the package you want to install.
That's it! Now you can use Pandas with InterSystems Embedded Python.
irispip install --target C:\InterSystems\IRIS\mgr\python pandas
Now that we have Pandas installed, we can start working with the employees dataset. Here are the steps to read the CSV file into a Pandas DataFrame and perform some data cleaning and analysis:
First Lets create a new instance of python
Set python = ##class(%SYS.Python).%New()
Import Python Libraries, in this case i will be importing pandas and builtins
Set pd = python.Import("pandas")
#;To import the built-in functions that are part of the standard Python library
Set builtins = python.Import("builtins")
Importing data into the pandas library
There are several ways to read data into a Pandas DataFrame using InterSystems Embedded Python. Here are three common methods.I am using the following sample file as a example.
Read data from a CSV.
Use read_csv() with the path to the CSV file to read a comma-separated values
Set df = pd."read_csv"("C:\InterSystems\employees.csv")
Importing text files
Reading text files is similar to CSV files. The only nuance is that you need to specify a separator with the sep argument, as shown below. The separator argument refers to the symbol used to separate rows in a DataFrame. Comma (sep = ","), whitespace(sep = "\s"), tab (sep = "\t"), and colon(sep = ":") are the commonly used separators. Here \s represents a single white space character.
Set df = pd."read_csv"("employees.txt",{"sep":"\s"})
Importing Excel files
To import Excel files with a single sheet, the "read_excel()" function can be used with the file path as input. For example, the code df = pd.read_excel('employees.xlsx') reads an Excel file named "diabetes.xlsx" and stores its contents in a DataFrame called "df".
Other arguments can also be specified, such as the header argument to determine which row becomes the header of the DataFrame. By default, header is set to 0, which means the first row becomes the header or column names. If you want to specify column names, you can pass a list of names to the names argument. If the file contains a row index, you can use the index_col argument to specify it.
It's important to note that in a pandas DataFrame or Series, the index is an identifier that points to the location of a row or column. It labels the row or column of a DataFrame and allows you to access a specific row or column using its index. The row index can be a range of values, a time series, a unique identifier (e.g., employee ID), or other types of data. For columns, the index is usually a string denoting the column name.
Set df = pd."read_excel"("employees.xlsx")
Importing Excel files (multiple sheets)
Reading Excel files with multiple sheets is not that different. You just need to specify one additional argument, sheet_name, where you can either pass a string for the sheet name or an integer for the sheet position (note that Python uses 0-indexing, where the first sheet can be accessed with sheet_name = 0)
#; Extracting the second sheet since Python uses 0-indexing
Set df = pd."read_excel"("employee.xlsx", {"sheet_name":"1"})
Read data from a JSON.
Set df = pd."read_json"("employees.json")
Lets look at the data in the dataframe.
How to view data using .head() and .tail()
For this we can use the builtins library which we imported (ZW works too )
do builtins.print(df.head())
Let's list all the columns on the dataset
Do builtins.print(df.columns)
Lets Cleanup the data
Convert the "Start Date" column to a datetime object.
Set df."Start Date" = pd."to_datetime"(df."Start Date")
the updated dataset looks as follows.
Convert the 'Last Login Time' column to a datetime object
Set df."Last Login Time" = pd."to_datetime"(df."Last Login Time")
Fill in missing values in the 'Salary' column with the mean salary
Set meanSal = df."Salary".mean()
Set df."Salary" = df."Salary".fillna(meanSal)
Perform Some Analysis.
Calculate the average salary by gender.
Do builtins.print(df.groupby("Gender")."Salary".mean())
Calculate the average bonus percentage by team.
Do builtins.print(df.groupby("Team")."Bonus %".mean())
Calculate the number of employees hired each year.
Do builtins.print(df."Start Date".dt.year."value_counts"()."sort_index"())
Calculate the number of employees by seniority status.
Do builtins.print(df."Senior Management"."value_counts"())
Outputting data in pandas
Just as pandas can import data from various file types, it also allows you to export data into various formats. This happens especially when data is transformed using pandas and needs to be saved locally on your machine. Below is how to output pandas DataFrames into various formats.
Outputting a DataFrame into a CSV file
A pandas DataFrame (here we are using df) is saved as a CSV file using the ."to_csv"() method.
do df."to_csv"("C:\Intersystems\employees_out.csv")
Outputting a DataFrame into a JSON file
Export DataFrame object into a JSON file by calling the ."to_json"() method.
do df."to_json"("C:\Intersystems\employees_out.json")
Outputting a DataFrame into an Excel file
Call ."to_excel"() from the DataFrame object to save it as a “.xls” or “.xlsx” file.
do df."to_excel"("C:\Intersystems\employees_out.xlsx")
Let's create a basic bar chart that shows the number of employees hired each year.
for this i am using matplotlib.pyplot
//import matplotlib
Set plt = python.Import("matplotlib.pyplot")
//create a new dataframe to reprecent the bar chart
set df2 = df."Start Date".dt.year."value_counts"()."sort_index"().plot.bar()
//export the output to a png
do plt.savefig("C:\Intersystems\barchart.png")
//cleanup
do plt.close()
That's it! With these simple steps, you should be able to read in a CSV file, clean the data, and perform some basic analysis using Pandas in InterSystems Embedded Python.
Video
You are now able to access the video by utilizing the link provided below. The video itself serves as a comprehensive overview and elaboration of the above tutorial.https://youtu.be/hbRQszxDTWU
Conclusion
The tutorial provided only covers the basics of what pandas can do. With pandas, you can perform a wide range of data analysis, visualization, filtering, and aggregation tasks, making it an invaluable tool in any data workflow. Additionally, when combined with other data science packages, you can build interactive dashboards, develop machine learning models to make predictions, automate data workflows, and more. To further your understanding of pandas, explore the resources listed below and accelerate your learning journey.
Disclaimer
It is important to note that there are various ways of utilizing Pandas with InterSystems. The article provided is intended for educational purposes only, and it does not guarantee the most optimal approach. As the author, I am continuously learning and exploring the capabilities of Pandas, and therefore, there may be alternative methods or techniques that could produce better results. Therefore, readers should use their discretion and exercise caution when applying the information presented in the article to their respective projects. Great article, if your are looking for an approach without objectscript and making use of "irispyhton", check this code :
python code :
```python
import pandas as pd
from sqlalchemy import create_engine,types
engine = create_engine('iris+emb:///')
df = pd.read_csv("/irisdev/app/notebook/Notebooks/date_panda.csv")
# change type of FullDate to date
df['FullDate'] = pd.to_datetime(df['FullDate'])
df.head()
df.to_sql('DateFact', engine, schema="Demo" ,if_exists='replace', index=True,
dtype={'DayName': types.VARCHAR(50), 'FullDate': types.DATE, 'MonthName': types.VARCHAR(50),
'MonthYear': types.INTEGER, 'Year': types.INTEGER})
```
requirements.txt :
```
pandas
sqlalchemy==1.4.22
sqlalchemy-iris==0.5.0
irissqlcli
```
date_panda.csv
```
ID,DayName,FullDate,MonthName,MonthYear,Year
1,Monday,1900-01-01,January,190001,1900
2,Tuesday,1900-01-02,January,190001,1900
3,Wednesday,1900-01-03,January,190001,1900
4,Thursday,1900-01-04,January,190001,1900
5,Friday,1900-01-05,January,190001,1900
6,Saturday,1900-01-06,January,190001,1900
7,Sunday,1900-01-07,January,190001,1900
8,Monday,1900-01-08,January,190001,1900
9,Tuesday,1900-01-09,January,190001,1900
``` @Guillaume.Rongier7183 that’s awesome thank you for sharing, will check this out. Hi Rizman,
Your video is available on InterSystems Developers YouTube:
⏯Pandas with embedded python
Thank you!
Announcement
Vadim Aniskin · Sep 15, 2022
Hello Community,
In the previous announcement, we introduced our feedback portal – InterSystems Ideas! Now we'd like to tell you more about it, notably about the topics which are covered there.
You can submit your ideas in the following categories:
💡 InterSystems Products where you can post ideas for new development directions for our products:
InterSystems IRIS data platform
InterSystems IRIS for Health
InterSystems HealthShare
InterSystems TrakCare
💡 InterSystems Services where you can post ideas on how we can make our services even better than they are now:
Developer Community
Open Exchange app gallery
Global Masters gamification platform
Partner Directory
Documentation
Certification
Learning
and InterSystems Ideas Portal itself
There is also the category "Other" for feedback that is not related directly neither to InterSystems Products or Services.
After choosing a category, feel free to also add keywords / tags:
Feel free to share your suggestions for categories and keywords worth adding to the portal. We will be glad to hear from you!
See you on the InterSystems Ideas portal ✌️
Announcement
Olga Zavrazhnova · Oct 4, 2022
Meet InterSystems at TechCrunch Disrupt 2022 - the biggest event for startups!
This year we will host 4 roundtables at TechCrunch as well as a developer meetup in San Francisco on October 19!
At TechCrunch we invite you to join our roundtables to discuss the following topics:
Roundtable: Breaking Into the Healthcare Monolith: Strategies for working with Payors and Providers
How do you build a health-tech startup that can achieve high growth? What can startups do to make their technologies more compelling to the biggest players in healthcare: payors and health systems? In this session, we will discuss the pain points of getting into healthcare, as well as strategies to open doors to these organizations for pilots and sustainable revenue. You’ll leave this round table discussion with a list of best practices from InterSystems’ 40+ years in the healthcare industry. The session will run twice: Tuesday 10/18 and Wednesday at 10:30 - 11:00 am
Roundtable: What the heck is Interoperability Anyways?
In a world where data is commonly available at a coder’s fingertips, why is it so hard to connect to some customers? Doesn’t everyone have APIs we can use to get to data? What is interoperability anyways? Can cloud technologies and data fabrics solve our problems? How can our startups be better prepared to enter the data ecosystems in industries like healthcare, financial services, or supply chain? This round table will give you an overview of what interoperability is, why these established industries interface the way they do, and strategies to make this process less painful as you develop your products.
The session will run twice: Tuesday 10/18 and Wednesday at 10:30 - 11:00 am
Speaker: Neal Moawed, Global Head of Industry Research, InterSystems
Who will be there? Let us know!
Question
Tyffany Coimbra · Nov 10, 2022
I need to download InterSystems Caché ODBC Data Source 2018 and I can't.I want to know where I can download it. Have you looked in ftp://ftp.intersystems.com/pub/ ? Try here: ftp://ftp.intersystems.com/pub/cache/odbc/ Hello guys!I can't download from these links. Hi. If you mean the ODBC driver, then it gets installed when you install Cache. So, any Cache install file for that version has it. I don't know if you can select to only install the driver and nothing else as I always want the full lot on my PC.
(... just tried and a "custom" setup allows you to remove everything but the ODBC driver, but it's fiddly.) ODBC drivers are available for download from the InterSystems Components Distribution page here: https://wrc.intersystems.com/wrc/coDistGen.csp Howdy all,
Iain is right that you can get the ODBC driver from the WRC site directly if you are a customer of ours, but the new spot InterSystems hosts drivers for ODBC and so on is here:
https://intersystems-community.github.io/iris-driver-distribution/
edit: I realized this was asking for Cache, not IRIS drivers, so my answer doesn't address it. How are you trying to access the ftp link? I tested and it should be publicly available. Try pasting the link into your file explorer on Windows, for example.
Announcement
Anastasia Dyubaylo · Jan 23, 2023
Hey Developers,
Thank you so much for staying with InterSystems Developer Community for yet another year!
Day in and day out our team is trying to make it better and more useful for each and every one of our 12K+ members!
We'd like to know how useful the Developer Community is for you at this point. Please take a few moments to let us know what you think and what could be improved:
👉🏼 InterSystems Developer Community Annual Survey 2022 👈🏼
Note: The survey will take less than 5 minutes to complete.
And your feedback is also welcome in the comments section of this post.
We're looking forward to learning your opinions! 😉
Hey guys,
If you haven't taken our survey yet, now is the time! We look forward to your feedback about our Community:
👉 https://www.surveymonkey.com/r/6238FBP
Enjoy!
Announcement
Anastasia Dyubaylo · Feb 6, 2023
Hi Community,
It's voting time! Cast your votes for the best applications in our InterSystems Developer Tools Contest:
🔥 VOTE FOR THE BEST APPS 🔥
How to vote? Details below.
Experts nomination:
InterSystems experienced jury will choose the best apps to nominate the prizes in the Experts Nomination. Please welcome our experts:
⭐️ @Alexander.Koblov, Support Specialist⭐️ @Guillaume.Rongier7183, Sales Engineer⭐️ @Eduard.Lebedyuk, Senior Cloud Engineer⭐️ @Steve.Pisani, Senior Solution Architect⭐️ @Timothy.Leavitt, Development Manager⭐️ @Evgeny.Shvarov, Developer Ecosystem Manager⭐️ @Dean.Andrews2971, Head of Developer Relations⭐️ @Alexander.Woodhead, Technical Specialist⭐️ @Andreas.Dieckow , Principal Product Manager⭐️ @Aya.Heshmat, Product Specialist⭐️ @Benjamin.DeBoe, Product Manager⭐️ @Robert.Kuszewski, Product Manager⭐️ @Carmen.Logue , Product Manager⭐️ @Jeffrey.Fried, Director of Product Management⭐️ @Luca.Ravazzolo, Product Manager⭐️ @Raj.Singh5479, Product Manager⭐️ @Patrick.Jamieson3621, Product Manager⭐️ @Stefan.Wittmann, Product Manager⭐️ @Steven.LeBlanc, Product Specialist⭐️ @Thomas.Dyar, Product Specialist
Community nomination:
For each user, a higher score is selected from two categories below:
Conditions
Place
1st
2nd
3rd
If you have an article posted on DC and an app uploaded to Open Exchange (OEX)
9
6
3
If you have at least 1 article posted on DC or 1 app uploaded to OEX
6
4
2
If you make any valid contribution to DC (posted a comment/question, etc.)
3
2
1
Level
Place
1st
2nd
3rd
VIP Global Masters level or ISC Product Managers
15
10
5
Ambassador GM level
12
8
4
Expert GM level or DC Moderators
9
6
3
Specialist GM level
6
4
2
Advocate GM level or ISC Employees
3
2
1
Blind vote!
The number of votes for each app will be hidden from everyone. Once a day we will publish the leaderboard in the comments to this post.
The order of projects on the contest page will be as follows: the earlier an application was submitted to the competition, the higher it will be on the list.
P.S. Don't forget to subscribe to this post (click on the bell icon) to be notified of new comments.
To take part in the voting, you need:
Sign in to Open Exchange – DC credentials will work.
Make any valid contribution to the Developer Community – answer or ask questions, write an article, contribute applications on Open Exchange – and you'll be able to vote. Check this post on the options to make helpful contributions to the Developer Community.
If you changed your mind, cancel the choice and give your vote to another application!
Support the application you like!
Note: contest participants are allowed to fix the bugs and make improvements to their applications during the voting week, so don't miss and subscribe to application releases! quite interesting.OEX was unreachable just now for some timeand now my previous voting is gone.no problem, I still remember.It's a warning to other early voters. Since the beginning of the voting we have the results:
Expert Nomination, Top 5
OpenAPI-Suite by @Lorenzo.Scalese
irissqlcli by @Dmitry.Maslennikov
iris-tripleslash by @Henry.HamonPereira
Intersystems IRIS platform queue trend monitoring component by @yubo.mao
message_key_query by @wang.zhe
➡️ Voting is here.
Community Nomination, Top 5
Intersystems IRIS platform queue trend monitoring component by @yubo.mao
iris-tripleslash by @Henry.HamonPereira
message_key_query by @wang.zhe
DX Jetpack for VS Code by @John.Murray
OpenAPI-Suite by @Lorenzo.Scalese
➡️ Voting is here.
So, the voting continues.
Please support the application you like! Wow thanks Robert,Thank you for bringing to our attention the issue with the votes during the downtime of the OEx website. As soon as we got down alerts we started working to resolve the problem and get OEx back up and running.
But the good news here is that OEx has been gaining popularity, and we understood that this has put additional strain on our server resources. Rest assured that we have taken this into consideration while fixing the issue. At the moment we have next results:
Expert Nomination, Top 5
irissqlcli by @Dmitry Maslennikov
OpenAPI-Suite by @Lorenzo Scalese
iris-tripleslash by @Henry Pereira
iris-geo-map by @Muhammad.Waseem
IRIS Data Migration Manager by @Oleh.Dontsov
➡️ Voting is here.
Community Nomination, Top 5
iris-tripleslash by @Henry Pereira
Intersystems IRIS platform queue trend monitoring component by @Yubo Mao
irissqlcli by @Dmitry Maslennikov
OpenAPI-Suite by @Lorenzo Scalese
message_key_query by @王喆
➡️ Voting is here.
Don't forget to vote for your favorite app!
Please check out today's voting results:
Expert Nomination, Top 5
irissqlcli by @Dmitry Maslennikov
OpenAPI-Suite by @Lorenzo Scalese
iris-geo-map by @Muhammad Waseem
iris-tripleslash by @Henry Pereira
iris-log-viewer by @Oliver.Wilms
➡️ Voting is here.
Community Nomination, Top 5
iris-tripleslash by @Henry Pereira
Intersystems IRIS platform queue trend monitoring component by @Yubo Mao
irissqlcli by @Dmitry Maslennikov
OpenAPI-Suite by @Lorenzo Scalese
message_key_query by @王喆
➡️ Voting is here. Developers!
Last call!Only one day left to the end of voting!
Cast your votes for applications you like!
Announcement
Anastasia Dyubaylo · Feb 13, 2023
It's time to announce the winners of the InterSystems Developer Tools Contest!
But first, we'd like to say Thank you to all our amazing participants who submitted 21 applications 🔥
We are thrilled to know that you think this subject is important! Now, without further ado, the winners are...
Experts Nomination
🥇 1st place and $5,000 go to the irissqlcli app by @Dmitry.Maslennikov
🥈 2nd place and $3,000 go to the DX Jetpack for VS Code app by @John.Murray
🥉 3rd place and $1,500 go to the OpenAPI-Suite app by @Lorenzo.Scalese
🏅 4th place and $750 go to the iris-geo-map app by @Muhammad.Waseem
🏅 5th place and $500 go to the iris-tripleslash app by @José.Pereira, @Henrique.GonçalvesDias, @Henry.HamonPereira
More winners:
🏅 $100 go to the iris-log-viewer app by @Oliver.Wilms
🏅 $100 go to the iris-persistent-class-audit app by @Stefan.Cronje1399
🏅 $100 go to the iris-connections app by @Yuri.Gomes
🏅 $100 go to the cos-url-shortener app by @Daniel.Aguilar
🏅 $100 go to the iris-deploy-tools app by @Francisco.López1549
Community Nomination
🥇 1st place and $1,000 go to the iris-tripleslash app by @José.Pereira, @Henrique.GonçalvesDias, @Henry.HamonPereira
🥈 2nd place and $750 go to the Intersystems IRIS platform queue trend monitoring component app by @yubo.mao
🥉 3rd place and $500 go to the irissqlcli app by @Dmitry.Maslennikov
Our sincerest congratulations to all the participants and winners!
Join the fun next time 😎 Congrats to all winners WOW!!!! this is the first time that I participate in a Intersystems contest and it won't be the last... thanks for all voted and congrats to the winners Congratulations to all the winners Congrats everyone. There were so many worthy projects this time around that voting was really tricky. Thank you all for your contributions and Congrats to the Winners!! Congratulations to all!
It was a fantastic contest!This is the first time I have seen so many applications. Congratulations to all winners!!
Congrats to all the winners! Congratulations everyone! Well done everyone! Congratulations to all the participants! This was an amazing contest! Congratulations to all Video highlighting the winners
Question
Tom Cross · Jan 30, 2023
I have a question for people currently in the community who support TrakCare implementations.
Are you all currently working through the migration from Crystal/Zen over to Logi Reports?
What are you plans for the Zen reports you can't migration off for example the HTML letter template?
I have spoken with a few people regarding this topic but starting to get concerned if there is a call in the near future to decommission ZEN/ We're still using a combination of Crystal Reports and ZEN reports, but also looking into Intersystems reports. I don't have much to say yet, other than that I'm also interested in this topic.
Announcement
Anastasia Dyubaylo · Jul 15, 2023
Hey Developers,
Enjoy watching the new video on InterSystems Developers YouTube:
⏯ What Is InterSystems IRIS for Supply Chain
See how InterSystems IRIS for Supply Chain improves supply chain operations with real-time, actionable data. InterSystems IRIS for Supply Chain includes an extensible data model, integration engine, and API framework that allow you to create real-time full-stack applications for order processing, issue processing, demand forecasting, and more.
Enjoy and stay tuned! 👍
Article
David Hockenbroch · Jun 2, 2023
We are looking at what we need to do to migrate from our current usage of Zen reports to InterSystems Reports. One of the hurdles for us is figuring out ways to interact with InterSystems reports programmatically from ObjectScript routines. There is a Java API for it, but it is possible to generate a report from InterSystems reports to a stream object in ObjectScript without diving into Java by using a %Net.HttpRequest. Here is a code example, followed by an explanation:
#include %cspInclude
GetStream(catalog="",report="",type="2",paramnames,paramvalues,str) public{
try{
set namelist = $LFS(paramnames)
set valuelist = $LFS(paramvalues)
if $LL(valuelist) '= $LL(namelist){
$$$ThrowStatus($$$ERROR(5001,"Mismatched parameter name and value list sizes."))
}
if report = ""{
$$$ThrowStatus($$$ERROR(5001,"No report name provided"))
}
if catalog = ""{
$$$ThrowStatus($$$ERROR(5001,"No catalog name provided"))
}
set myreq = ##class(%Net.HttpRequest).%New()
set myreq.Server = "127.0.0.1"
set myreq.Port = "8888"
set myreq.Location = "jinfonet/tryView.jsp"
set myreq.Username = "MyUserName"
set myreq.Password = "MyPassword"
do myreq.SetParam("jrs.report",$$$URLENCODE(report))
do myreq.SetParam("jrs.catalog",$$$URLENCODE(catalog))
do myreq.SetParam("jrs.result_type",type)
for i=1:1:$LL(namelist){
do myreq.SetParam($$$URLENCODE("jrs.param$"_$LG(namelist,i)),$$$URLENCODE($LG(valuelist,1)))
}
set sc = myreq.Get()
if $$$ISERR(sc) {$$$ThrowStatus(sc)}
set response = myreq.HttpResponse.Data
if $ISOBJECT(response){
set sc = response.Rewind()
if $$$ISERR(sc) {$$$ThrowStatus(sc)}
while 'response.AtEnd{
set sc = str.Write(response.Read())
if $$$ISERR(sc) {$$$ThrowStatus(sc)}
}
}
else{
set sc = str.Write(response)
if $$$ISERR(sc) {$$$ThrowStatus(sc)}
}
}
catch ex{
do ex.Log()
return ex.AsStatus()
}
return $$$OK
}
This routine takes the following arguments:
catalog - The catalog name in InterSystems reports, including directory (i.e. /MyCatalog/Catalog.cat)
report - The report name in InterSystems reports, including directory (i.e. /MyCatalog/MyReport.cls)
type - The file type to create. I have set 2 as the default because that's the type for PDF, which is what we typically use. 1 is HTML, 2 is PDF, 3 is TEXT, 4 is Excel, 5 is PostScript, 6 is RTF, and 7 is XML.
paramnames - If the report has parameters, this is a comma-separated list of report parameters
paramvalues - The values to use for those parameters, in the same order as the names.
str - A %Stream.Object (or any class that inherits from it) which should be passed by reference. This is the stream that will eventually hold the report.
I have some initial checking at the top for a few things that will cause a problem. The type has to be 1-7, so I throw an error if it's not. (Side Note: I apologize for my overuse of the throw/catch error checking; it's a construct I'm used to from other languages!) The lists of parameter names and values should be the same size. There must be a catalog and a report provided.
The server and port for the request must be the domain/IP and port of your InterSystems report server. This assumes it's running on the same server as your IRIS instance at its default port. If not, adjust accordingly. The location is /jinfonet/tryView.jsp. This is a web page on the report server that uses accepts a GET request. It's also a handy one to redirect a browser to if you want to link to a report. If the user is not authenticated, it redirects to a login prompt. If the report has parameters and they are not provided, it will then prompt for parameters. I'm going to set some parameters on the request to handle all of that so we can get straight to the report. That's why we're setting the Username and Password properties on the HttpRequest object; they must be a valid username and password for your InterSystems Reports server.
The tryView.jsp can accept quite a few parameters. They are fully documented by Logi here, but for purposes of this example, I'm keeping it pretty basic. We set a parameter called jrs.report that contains the URL encoded report name, jrs.catalog which contains the url encoded catalog name, and jrs.result_type which uses our type argument to tell the JSP what kind of file to generate.
After that, I loop through the parameter name and value lists to send the parameters to the report. The name of the HttpRequest parameter is jrs.param$ followed by the report parameter name, and is set to whatever value needs passed to this parameter. So my report has a parameter called "OrderNumber" the HTTP request parameter must be named jrs.param$OrderNumber and be set to whatever order number the report parameter should be set to. At that point, we're ready to send the request off using the Get() method.
Once the response comes back, the report's stream is now in the request object's HttpResponse.Data, which depending on length, can sometimes be a string and sometimes be a stream, so I've got some steps to check that, then write that data to the %Stream.Object that was passed by reference.
And there you have it; an InterSystems Report generated to a stream.
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!
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