Well, docker container is very good. So, is it possible to get an access to this container, if I don't want to test Atelier with my code on servers outside of my company?

Sorry, I forgot to mention it. It works only with versions where added native JSON, so, 2015.3FT and 2016.1FT

Dmitry Maslennikov · Dec 10, 2015 go to post

Timur already wrote about it some time before. It is works, but not shows any response, before you update the page.

Dmitry Maslennikov · Dec 23, 2015 go to post

First problem is with Work Queue Manager, that it does not work in CSP processes. In my project CacheBlocksExplorer, I tried to use it for async scan of database blocks. Here you can find my source, where I use it with WebSocket. Another problem is It does not work as well, if you just have only one core. 

So, you can force set how many jobs use:

Set ^||%ISC.WorkQueueMgr("ForceJobs")=2

Dmitry Maslennikov · Dec 23, 2015 go to post

Maybe if need not just import sources from xml, but some more actions. And anyway one more interesting way to deploy your code, is using Installer Manifest. With this manifest, you can just import your code to any namespace, or before it, create namespace, csp-applications, do some configurations for your application. For further information see documentation.

In our project we use manifest for build project, and for deploy on a new servers.

Dmitry Maslennikov · Dec 24, 2015 go to post

I now working on backporting this project to versions less then 2016.1. (2014.1 or 2015.1). But unfortunately can't test test it yet. Unfortunately, I don't have an access to any versions except FieldTest. When I will get such version I'll test my project on it.

Dmitry Maslennikov · Jan 12, 2016 go to post

start() public {

  do init()
  set result=$$ask(0)

  write !!,"Result: ",result 
}
init() {

  kill ^DECISIONTREE

  set ^DECISIONTREE(0)="Smoker"

  set ^DECISIONTREE(0,"Yes")=1

  set ^DECISIONTREE(0,"No")=2
  #; Smoker -> Yes

  set ^DECISIONTREE(1)="Age"

  set ^DECISIONTREE(1,"<30")=3

  set ^DECISIONTREE(1,">30")=4
  #; Smoker -> No

  set ^DECISIONTREE(2)="Diet"

  set ^DECISIONTREE(2,"Good")=3

  set ^DECISIONTREE(2,"Poor")=4
  #; Smoker -> Yes|Age -> <30

  set ^DECISIONTREE(3)="Less risk"
  #; Smoker -> Yes|Age -> >30

  set ^DECISIONTREE(4)="More risk"
  #; Smoker -> No|Diet -> Good

  set ^DECISIONTREE(5)="Less risk"
  #; Smoker -> No|Diet -> Poor

  set ^DECISIONTREE(6)="More risk"
}
ask(id) {

  set text=(^DECISIONTREE(id))

  quit:$data(^DECISIONTREE(id))=1 text

  

  write !,text

  set answer=""

  for i=1:1 {

    set answer=$order(^DECISIONTREE(id,answer),1,nextId)

    quit:answer=""

    set answer(i)=nextId

    write !,$justify(i,3),") ",answer

  }

  set nextId=$$read(.answer)

  quit:nextId="" "" 

  quit $$ask(nextId)
}
read(&answers) {

  write !

  do {

    write $char(13),"Option? "

    read res#1

    quit:$zconvert(res,"L")="q"

  while (res="")||('$data(answers(res)))

  

  write !

  

  quit $get(answers(res))
}

USER>d start^tree()

 

Smoker

  1) No

  2) Yes

Option? 2

 

Age

  1) <30

  2) >30

Option? 1

 

 

Result: Less risk

Dmitry Maslennikov · Jan 13, 2016 go to post

It is just a simple working example. But for reali life, it could be in some class. And flexible it will be with good UI, storage anyway for such task is quite simple. How well will be your UI, for organize that tree, so flexible it will be. Here is an example of complete UI, for creatingand running Decision trees. I think you could try to connect this project with Cache. And I think it is possible to find more web-libraries, which could help you.

Dmitry Maslennikov · Jan 13, 2016 go to post

In this case, in a table you just add a new column with link 

<column header="" width="5%" linkCaption="view" link="ZenTutorial.ViewContact.cls?ID=#(%query.ID)#"/>

so, now, we got an contact's ID in every row.

and then in a ViewContact page, we should add a dataController, to our Model, and define an modelId, from url

<dataController id="contactData" 

                modelClass="ZenTutorial.ContactModel"

                 modelId="#(%url.ID)#" />

You can set modelId with URI Parameters as weel, after adding a property:

Property ContactID As %ZEN.Datatype.integer(ZENURL = "ID");

and new modelId, which now uses our new Property 

modelId="#(%page.ContactID)#"



and finally form, wich connected with previously added controllerId, and it shows two fields, read only, yet. But it is not so diffucult to add editng.

<form id="MyForm" layout="vertical" controllerId="contactData">
  <text label="ID:" id="ID" name="ID" 

    dataBinding="%id" size="5"

    readOnly="true"/>
  <text label="Name:" id="Name" name="Name" 

    dataBinding="Name" size="30"

    labelClass="required" required="true"/>
</form>

 

Dmitry Maslennikov · Jan 14, 2016 go to post

Yes, here form is required, data could tied with model only via dataController, and form or dataGrid

Dmitry Maslennikov · Jan 14, 2016 go to post

Templates in ZEN, is a quite simple as I think. When you doing template page just add <pane paneName="MainContent"/>. And then in a children, you should add XData with the same name "MainContent", which starting with tag <pane>.

XData MainContent
{
<pane xmlns="http://www.intersystems.com/zen">
</pane>
}
 

You should not rewrite Contects XData in children pages, and such subpanes could in the same class, or in children. 

Dmitry Maslennikov · Jan 14, 2016 go to post

And every time for any cases, it add only 1 point. And even every view of page, unique or not also give you points.

Dmitry Maslennikov · Jan 21, 2016 go to post

Hi Steve, are you have seen class ZENReports.PageLayouts in SAMPLES namespace? It shows a lot possiblities for ZEN Reports. Page headers as well. And with sample is not so difficult to make a groupped report with a value on ech page at header.  For more control on page header in reports, you should look at page pagemastermasterreferencepageheader

Dmitry Maslennikov · Jan 21, 2016 go to post

Well, with this example, I just changed that block, which works for all rest pages in a group except the first one.

<masterreference masterReference="rest" pagePosition="rest">
<document width="8.5in" height="11in" marginLeft="1.25in" 
marginRight="1.25in" marginTop="1.0in" 
marginBottom="1.0in" headerHeight="1.0in">
</document>
<pageheader>
<table orient="col" layout="fixed" width="6in">
<item style="text-align:left" value="Sales Report" />
<item field="@name" width="2in"></item>
<item style="text-align:right" special="page-number-of-with-xpath" field="@name" />
</table>
</pageheader>
</masterreference>
 

And it shows Sale rep in a header where page counter was shown before, for example

Sales Report Jack 2 of 5

Sales Report Jen 3 of 5

You can see my result here. A changed only first section.

Dmitry Maslennikov · Jan 21, 2016 go to post

In Cache uses typeless language. So in some cases such as in command IF

if varName write "true" else  write "false"

or any other logical operations any non zero values will be as true values.

and '1 will give a 0

Dmitry Maslennikov · Jan 21, 2016 go to post

Final method or not it checks only in a compile time.  Much helpier would be if you show an error which you get. 

Dmitry Maslennikov · Jan 23, 2016 go to post

Is it your account on github ?

Looks like you already know how to create repository and work with github.

Just create another repository,  and create some readme (in english), license file. Most of projects on InterSystems technologies uses MIT license.

In your porject more then one class, so better to export each file separately. Easy to do it with Studio hooks, for example with this project. It can help to export project files automaticaly after compile.

And then after publish your project, Evgeny or somebody else who manage intersystems account, will fork it.

Dmitry Maslennikov · Jan 26, 2016 go to post

I'm very agree, with advertising stackoverflow tags, it is a very good platform for questions. But unfortunately just a few people use it, some more at different google groups , and as I think much more at russian forum sql.ru.  But I see that stackoverflow, much better that any others. Unfortunately here as we already know, it is quite difficult to  recognize a question in new posts. And very bad that this site still does not have any RSS, i can't wait when it happen. And too difficult to catch any new posts via email subscriptions, which is so ugly yet.



You mentioned tag objectscript at stackoverflow, but I don't understand why so many people choose it as relevant to intersystems technologies. It does not, it looks odd, even every last question marked with this tag, depends only with caché. And it looks we should change description for this tag, which will be relevant to Caché. 

Dmitry Maslennikov · Jan 26, 2016 go to post

And even if you don't extend any classes, it any case will be hidden extend with %Library.Base. and %systemInclude still be included.

Dmitry Maslennikov · Jan 27, 2016 go to post

Yes, it is so. And yes, I'm already have enough rep for editing. But I'm not sure in stackoverflow rules, is it available for such changes? And I'm not sure in my english, that's maybe main reason, why I have not done it yet.

Hi Luca,
Will there any academic sessions at global summit with Docker ?

I think it should be, it will be very helpful, to understand how it works with Cache, how possible to deploy applications. I like docker, and think about it, but still do not understand how it can be used with our applications, and how to make container for it, and connect to Cache's container.

Unfortunately not so many information could be found in documentation, yet. But what I know, when ordinary class/classmethod or clientmethod defined in %Dictionary.MethodDefinition, systemmethod defined in %Dictionary.SystemMethodDefinition (link to localhost:57772). Defintion for systemmethod is quite close to method, but with much less parameters.

You want to log, every outputs in csession like in cterm in windows, or just want to log every output for concrete command/routine ?