Dmitry Maslennikov · May 22, 2017 go to post

When just seen this project I thought that it is based on faker.js project (demo). But, unfortunately, they made their own base. Faker.js, by the way, is a quite good project for populating data in javascript (frontend or backend, no matter), it supports many languages, even Russian and Czech, and lots of different formats of data.

Dmitry Maslennikov · May 18, 2017 go to post

Looks like you've copied some example from the documentation. But removed some by your opinion not needed lines.

Original code looked like:

    //create Ensemble request message with given ID
    set request=##class(ESOAP.CustomerRequest).%New()
    set request.CustomerID=ID

    //send Ensemble request message 
    set sc= ..SendRequestSync("GetCustomerInfoBO",request,.response)
    if $$$ISERR(sc) do ..ReturnMethodStatusFault(sc)

You left only the last line. Where checked result from the previous one, in variable sc, as this variable is not defined in your code you got this error in SOAP

<UNDEFINED>zTestOperation+1^Test.WebService.1 *sc
Dmitry Maslennikov · May 18, 2017 go to post
set global=$name(^A),count=0
set i="" for { set i=$o(@global@(i)) quit:i=""  if $increment(count) }
zw count
Dmitry Maslennikov · May 16, 2017 go to post

I've relocated this two images from google drive storage to another one (to the same as for others pictures in this article), hope it helps.

When you define UrlMap, you should remember, that Caché uses Regular expressions. So, you can just put (?i) before Url, to make regular expression case insensitive

XData UrlMap [ XMLNamespace = "http://www.intersystems.com/urlmap" ]
{
<Routes>
    <Route Url="(?i)/user" Method="POST" Call="User"/>
    <Route Url="(?i)/emailactivation" Method="POST" Call="EmailActivation" />
    <Route Url="(?i)/login" Method="POST" Call="Login"/>
</Routes>
}
Dmitry Maslennikov · Apr 29, 2017 go to post

It is possible to get some errors depends on how long query in your URL. It is not a good idea to have such long values in a query. And such value should be escaped to be valid to place in URL. Instead much better to send data as a form in POST.

Dmitry Maslennikov · Apr 25, 2017 go to post

In my previous company, administrator used Veeam to backup Caché databases as well. And as I know it works well. It uses some scripts to call ExternalFreeze Caché before, and ExternalThaw after, just backup, without any checks. All Caché instances work on Windows.

Dmitry Maslennikov · Apr 25, 2017 go to post

command WRITE, outputs $listbuild in binary format, if you would use ZWRITE, it would show you $lb

I've just made variable from your output

USER>zzdump val

0000: 02 01 04 01 61 61 04 01 4A 4A                           ....aa..JJ
USER>zwrite val
val=$lb("","aa","JJ")

Just read the documentation and you will get everything needed to work with $listbuild

Dmitry Maslennikov · Apr 16, 2017 go to post

With Studio, you will have only one option, is to store sources from server's side. Any Studio plugin works in Caché, and this code could decide where to store code. But developers should also have access to the same folder. If you have authorization on your Caché server, it will be quite easy to split settings and storing sources on disk for every developer.

But If you would choose Atelier, you should not care about it. Atelier all changes store on client's side. And no matter how many developers works on one server.

Dmitry Maslennikov · Apr 15, 2017 go to post

How about to add basic authorization to WRC.

Now it is not possible to download some distributive from WRC in one command in Linux. In first, you should send login and password as a form, save cookies after some redirects. And then it will be possible to download with this cookies. And this command looks so big.

wget -qO /dev/null --keep-session-cookies --save-cookies /dev/stdout --post-data="UserName=$WRC_USERNAME&Password=$WRC_PASSWORD" 'https://login.intersystems.com/login/SSO.UI.Login.cls?referrer=https%253A//wrc.intersystems.com/wrc/login.csp' \
 | wget -O - --load-cookies /dev/stdin "https://wrc.intersystems.com/wrc/WRC.StreamServer.cls?FILE=/wrc/distrib/$cache-lnxrhx64.tar.gz" \
 | tar xvfzC - . 

I would expect to see a much easiest way.

​curl -u $WRC_USERNAME:$WRC_PASSWORD https://wrc.intersystems.com/wrc/WRC.StreamServer.cls\?FILE\=/wrc/distrib/$cache-lnxrhx64.tar.gz
 | tar xvfzC - .

Is it possible to do it, or maybe you can recommend some other way?

And also, will be good to get some API, where I could ask for link to latest version, or for some particular major version, e.g. 2017.1, and for particular platform. So, I could use it to download latest version. 

Dmitry Maslennikov · Apr 14, 2017 go to post

Looks like, do you use integration in Studio? It is a Java application, and as you class is so big, maybe it working so long, and you did not wait for the result. 

Dmitry Maslennikov · Apr 13, 2017 go to post

I would suggest also to use such a great tool as source code analyzer for COS, and it is the first ever for COS. You can look at the demo. This project is still in a progress, but anyway, can already help to prevent some bugs. And remember, that you can suggest adding some new rules, which you sure will be useful.

Dmitry Maslennikov · Apr 11, 2017 go to post

Some of such configuration classes contains methods Modify and Get, it may help to easy modify configuration, in a few lines

set props("DeepSeeEnabled")=1​
set sc=##class(Security.Applications).Modify("/csp/myapp", .props)

Would be much better, if InterSystems will add OpenSearch to their documentation. And I think it will be enough only for the public version. And in this case, it will be supported in all modern browsers, without installation anything external.

Something like this.

<?xml version="1.0"?>
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
 <ShortName>InterSystems docs latest</ShortName>
 <Description>InterSystems Ensemble Documentation latest Version</Description>
 <Url type="text/html" method="get" template="https://docs.intersystems.com/latest/csp/docbook/DocBook.UI.SearchPageZen.cls?KEY=&KeyWord={searchTerms}"/>
</OpenSearchDescription>
Dmitry Maslennikov · Mar 30, 2017 go to post

Try this

do ##class(%SYS.Journal.File).GetPrev("c:/cache/mgr/journal/20170330.002", prevFile)
write prevFile