Stefan Wittmann · Oct 26, 2016 go to post

Hi Simcha,

you can easily retrieve the data that you are using in your layout (AlerTList in your case), by calling the function getSourceData() on your documentView component. Assuming the id of your documentView is 'mainView', the following code sample should work in your environment:

var view = zen('mainView');

var data = view.getSourceData();

console.log(data.AlerTList);

HTH,

Stefan

Stefan Wittmann · Jan 30, 2017 go to post

Hi Jules,

which Perl distribution are you using? We do support the ActiveState Perl distribution. Also, ensure that you are using a bitness version that matches the bitness of your Caché instance (64-bit in your case).

HTH,

Stefan

Stefan Wittmann · Jun 7, 2017 go to post

Hi Lucas,

I suggest you open a WRC case with Support so that we can look into the details of what is happening here. This may be a problem specific to the environment.

Regards,

Stefan

Stefan Wittmann · Sep 28, 2017 go to post

Embedding a JLNP file in a CSP page is the same as in a plain HTML page. You have to embed and load the JLNP file using something like the following snippet:

<script src="https://www.java.com/js/deployJava.js"></script>
<script>
    var attributes = {} ;
    <!-- Base64 encoded string truncated below for readability -->
    var parameters = {jnlp_href: 'your_applet.jnlp',
        jnlp_embedded: 'PCEtLSANCi8qDQogKiBDb ... bmxwPg=='
    } ;
    deployJava.runApplet(attributes, parameters, '1.8');
</script>

In order to figure out the value for the jnlp_embedded parameter you have to base64 encode the contents of your JNLP file. The JNLP file has to be accessible from the relative link provided by the parameter jnlp_href.

This tutorial explains how to embed JNLP files:

http://docs.oracle.com/javase/tutorial/deployment/deploymentInDepth/emb…

Stefan Wittmann · Oct 12, 2017 go to post

Interesting thought Sebastian.

We haven't run dedicated benchmarks on this topic, but I can provide some guidelines.  You have to acknowledge that creating a dynamic object or a dynamic array is the most expensive part of your code style compared to just using plain variables. You are instantiating an object.

If you run a simple benchmark like the following you can observe a difference:

ClassMethod TestAll()
{
    set iterations = 1000000
    
    set start = $P($H,",",2)
    for i=1:1:iterations {
        do ..TestDynamicObject()
    }
    set time = $P($H,",",2) - start
    w "Dynamic Object test case took "_time_" seconds",!
    
    set start = $P($H,",",2)
    for i=1:1:iterations {
        do ..TestVariables()
    }
    set time = $P($H,",",2) - start
    w "Variable test case took "_time_" seconds",!
}

ClassMethod TestDynamicObject()
{
    set do = {}
    set do.setting1 = "value"
    set do.setting2 = "value"
    set do.setting3 = "value"
    set do.setting4 = "value"
    set do.setting5 = "value"
    set do.setting6 = "value"
    set do.setting7 = "value"
    set do.setting8 = "value"
    set do.setting9 = "value"
    set do.setting10 = "value"
}

ClassMethod TestVariables()
{
    set setting1 = "value"
    set setting2 = "value"
    set setting3 = "value"
    set setting4 = "value"
    set setting5 = "value"
    set setting6 = "value"
    set setting7 = "value"
    set setting8 = "value"
    set setting9 = "value"
    set setting10 = "value"
}

The result on my local machine looks like this:

USER>do ##class(User.DOAPerf).TestAll()
Dynamic Object test case took 13 seconds
Variable test case took 0 seconds

So there is a significant difference IF your code is called often enough to actually make the overhead noticeable. In the above example I called each method 1 million times. If your code is not called that often you will not observe a difference.

As a general advice I would not nest the dynamic objects or dynamic arrays when used as you describe it, as this increases the number of object creations.

Long story short: Stick with variables in performance-critical parts of your application. In other parts of your application you can use dynamic objects or dynamic arrays as temporary objects for sure, just make sure you only nest them when absolutely required. Passing complex structures between method calls with dynamic objects can be very elegant.

HTH,

Stefan

Stefan Wittmann · Aug 30, 2018 go to post

While it is true that Generics are not supported by the Java Gateway I would like to provide a little more guidance on why that is the case and how to deal with this not uncommon situation.

The Java Gateway (and the dotNet Gateway by the way) allow you to interface between ObjectScript and another language environment and obviously there are concepts in one language foreign to the other. Our approach to the Gateways is to support basic structures and concepts which are similar in both languages or easily translated between them. A "complete" approach would not only take very long to implement, would be hard to verify for correctness and because of the rules you had to apply not easy to understand. It would defeat the basic rule "power through simplicity".

Generics is a case which is not easily mapped and therefore not supported. Of course you can come up with ideas how to support such a concept with what the server-side environment has to offer, but keep in mind what I wrote above.

 Every time you encounter such a situation you find yourself in a situation where the Java API you would like to call from our side of the fence is too complex and properly includes functionality you don't want to interact with in its entirety.

The Facade pattern allows you to easily work around this challenge. Build a basic API around the functionality you want to interact with on the Java side and import your handwritten entry point. This makes the interface much more manageable for the gateway and all the participating parties as the contract between Java and ObjectScript is very clear with this pattern.

Hope that helps,

Stefan 

Stefan Wittmann · Aug 30, 2018 go to post

Hi Tosh,

it seems your path is not correctly setup as the process is not able to identify the underlying C binding libraries. I assume you are using the 64-bit version of Python. Also I want to point out that we currently only support Python 3 up to version 3.3 as later versions introduced quite significant changes in string handling. We are working on supporting versions beyond 3.3 at the moment.

HTH,

Stefan

Stefan Wittmann · Jan 15, 2019 go to post

There are various things which can bite you with the WebView component. Check the following:

  • Verify the WebView is properly sized (e.g. same size as parent container) as the initial content might be sized 0px...
  • Make sure you granted INTERNET permission
  • Explicitly enable JavaScript
Stefan Wittmann · Jun 7, 2019 go to post

You have various options, depending on what you want to achieve:

  1. Added a property of type %DynamicObject or %DynamicArray to a persistent class
  2. Store the JSON content in the Document Data Model
  3. Parse a JSON structure as Eduard indicated and generate the corresponding persistent class(es).
  4. I would not advise to use %Document.Object. Use the Document Model instead.

With option 1) and 2) you don't need to define a schema at all, but can easily persist and manage your JSON content as objects. No SQL access to individual properties of the JSON content for option 1). With the document data model you can add support for SQL queries for individual JSON paths.

Option 3) is work, but doable. Figuring out the correct datatypes will be the greatest challenge. If you have JSON schema instead, your life is much simpler. 

Stefan Wittmann · Aug 12, 2019 go to post

Hi Duncan,

great to hear that you find the community edition beneficial! We are currently working on making the IRIS for Health Community Edition available on the docker store as well. I can't give you an exact time window, but it shouldn't be too far away. Stay tuned, it will be announced on the developer community when it is available.

As Sylvain has pointed out, you can always pull the images from the WRC Distribution page if you are a registered partner. The offerings on AWS, Azure or GCP can still be helpful with zero cost, as you often get a voucher when you sign-up for a new account. Enough for playing around for sure.

Best,

Stefan

Stefan Wittmann · Aug 12, 2019 go to post

Hi Vikram,

all answers are perfectly fine, but I would like to add that if you are new to ZEN (and have to build up your knowledge) and want to build a web application, I would advise you to build your APIs via JSON over REST and develop a web application using one of the many popular web frameworks like Angular, React or Vue.js, depending on the requirements of your application and your personal style.

ZEN is not actively enhanced anymore and you might run into undesired behavior with recent browser versions that are hard to control.

Best,

Stefan

Stefan Wittmann · Jul 1, 2020 go to post

Hi @Jeffrey Drumm ,

thanks for the catch, the wording was not clear and I have corrected the statement. 2020.2 is a CD release, which only contains container images, not full kits.

Thanks,

Stefan

Stefan Wittmann · Nov 17, 2020 go to post

Hi Mark and Evgeny,

there are plenty of options available to achieve what you are asking for. You can certainly pick one of the templates that others have pointed out in the individual replies here. Starting from scratch I would probably generate a Record Map using the CSV Wizard as described in the documentation here.  Afterwards you can simply leverage the prebuilt FTPService or BatchFTPService that come with the Record Map utility. The Interoperability quick start includes a sample of the Record Map for importing a CSV file and might be a good reference as well.

Stefan Wittmann · Jan 18, 2021 go to post

Hi Akshay,

this functionality was teased at Virtual Summit but is not released yet. Also, this will be an IRIS for Health feature, as the DTL Generator works on inbound and outbound pairs of HL7 messages.

Best,

Stefan

Stefan Wittmann · Feb 17, 2021 go to post

Kong is in the process of renaming some of their products and features. When you look closer at their documentation you will find that they still differentiate between Kong Gateway (OSS) and Kong Gateway (Enterprise). Kong Enterprise  is not free of charge (it's part of Kong Konnect). Kong Enterprise includes many features that are essential for many use cases, like support for OAuth2 and OpenID Connect, as well as the capability to build your own Developer Portal - to mention a few.

IAM will soon catch up to current releases of Kong Enterprise.

Stefan Wittmann · Apr 6, 2021 go to post

Hi @Menno Voerman 
the DTL Generator is still in development and was presented at the last Virtual Summit to gather some feedback, which we are still incorporating and fine-tuning with some partners. Are you interested in the DTL generator for migrating interfaces to InterSystems IRIS or for other reasons?