go to post Dmitry Maslennikov · Sep 18, 2017 This error may be thrown by some different reasons while you call %Save for an object.In my case at this place "%Save+5" I have a call to method %BuildObjectGraph, which is internal in %RegisteredObject class. Described as "Build the list of reachable objects and their dependencies". This method calls recursively, so, maybe some troubles with dependencies.
go to post Dmitry Maslennikov · Sep 13, 2017 Not, we don't have $listprevious. And I can say why. $listbuild format quite simple where each element of $listbuild is solid. It has header and data, where in the header we have the length of data. So, to get next element, we just have to read header and ptr used to set position where header begins. But when you want to read the previous element, you can't know how long this previous value, and you can't find this right place, you still have to read from the beginning. So, only one way to do it: for i=$listlength(myList):-1:1
go to post Dmitry Maslennikov · Sep 5, 2017 Sure, not. When you read particular patient, your URL is something like (where 1234 is ID of this patient): /fhir/Patient/1234 But to create new patient, you should use /fhir/Patient and method POST Full URL, with ID, need when you want to update particular patient, and use method PUT. This is how it should be by standard FHIR. But I have not worked with FHIR in HealtShare, and maybe there is some differences.
go to post Dmitry Maslennikov · Sep 4, 2017 I got the same error, with %SQLQuery and embedded SQL (&sql), and in 2017.2 too. Looks like some error, and you should say about it to the WRC. SQLCODE=-3 : Closing quote (') missing SELECT TOP 3 JSON_OBJECT('lit':'Employee from','t':%TABLENAME,'name':Name,'num':SSN) FROM Sample.Employee While it works perfectly with %SQL.Statement, and through Management Portal Or just from the documentation page, here.
go to post Dmitry Maslennikov · Sep 1, 2017 Look at the documentation csession instname "[label[+offset]]^routine"Specifies the name of a COS program to run in user mode. In addition to the specified formats, you can pass parameter lists consisting of string and/or numeric literals, as well as omitted (void) parameters, as follows: "routine[([parameter-list])]""[label]^routine[([parameter-list])]""##CLASS(package.class).method[([parameter-list])]" where, for example, parameter-list is specified in the form "string literal",,-+-000123.45600E+07, and omitted parameters are passed to the target as $Data(parameter)=0. Whitespace and shell meta characters must be quoted in an operating-system dependent form. So, you can just call your code in routine or class with csession. If you need another way, you can create any text file, with a list of commands, like if you would use them in csession manually. Where the last command should be HALT. While it is a code for csession, you can't use any multi line blocks and spaces at the beginning of the line. And run it: csession CACHE -UUSER < somecode.txt If you need authorization in csession before executing code, just put login and password as a plain text in first two rows.
go to post Dmitry Maslennikov · Aug 25, 2017 To keep your logging data even if transaction rolled back, you should have this changes journaled. Because transaction rollback works by the journal. If it happened to be journaled, it will be rolled back anyway. And you should remember even you disabled journaling for some database, while system journaling working well. Every change which was made during a transaction will be journaled anyway. So, how to switch off journaling, for this particular data. CACHETEMP - you can map this data to database CACHETEMP. This database not journaled even if data changed in a transaction. But the problem is, that data here will be available until server will be stopped.Switch journaling temporary off, just only when logging information should be saved. You can do it with command before save, should be placed in %OnBeforeSave method DO DISABLE^%NOJRN and return journaling back after saving in method %OnAfterSave DO ENABLE^%NOJRN
go to post Dmitry Maslennikov · Aug 23, 2017 This possibility is not alone, it is also possible to have more than one or two databases for one namespace.There is also mapping, for globals class packages and routines.One of the reasons to use it is to split different parts of applications. For instance:Let's say, you are a software developing company. Mostly it is enough to deliver to your customer only your compiled code, and it is easy to do it with CACHE.DAT, while a customer has database only with data. So, an update should be quite easy in this case, replace cache.dat, call some update code if needed.Or, you have one application, but should have different data, by some reasons. You can use one database with code, in multiple namespaces. But each namespace will have different databases for Data.With mapping, you have more flexibilities, like split your code in different databases. If you deliver your code to the customer but gave permission to extend some functionality. In this case, you can put customer's code to another database. Or you can split data to get better performance. If you would have so much count of writing to your database, you can split this data and place this database files to different hardware discs, you may get better writing speed. Or even some part of data in a namespace can be stored on another server and connected through ECP.So, I can say that even could be more reasons to split data in databases. And always it depends on a project and needs.You should read this article in the documentation about mapping to get more information about it.
go to post Dmitry Maslennikov · Aug 8, 2017 Directory tag should point to the directory on the server, where you files are located. And you also should have defined Alias directive, which should say which physical directory should be used for particular web path Alias / /srv/www <Directory /srv/www> ... </Directory>
go to post Dmitry Maslennikov · Aug 7, 2017 Open regedit.exe, go to this pathHKEY_CURRENT_USER\Software\InterSystems\Cache Studio\DocumentsWhen you can find folders by name of server and namespace. And by project name.You can just remove this project's folder, and start studio again.
go to post Dmitry Maslennikov · Aug 7, 2017 Please provide some more details. Such as codepage of your output texts, version of cache (unicode?), font in terminal, is it cterm or not.Codepage for your text, I suppose that you use CP866. Nowadays I would recommend converting to Unicode.
go to post Dmitry Maslennikov · Aug 1, 2017 As far as I know .abf file format, it is just backup for MSSQL Databases. So, It is not possible and will not possible in any way. And all this conversion will not be such easy. And you should understand that Cubes, that not about data before you should migrate all the data, and create new cubes in Caché with knowledge about, how it was in MS SQL.
go to post Dmitry Maslennikov · Jul 18, 2017 You have two ways, query fewer rows at once. Or switch to a newer version of Caché, since version 2012.2 available much more memory per process, and by default 256Mb.
go to post Dmitry Maslennikov · Jul 3, 2017 I would agree, It may look quite expensive. But I just compared it with some other conferences like Oracle, Apple, Google, and I found that all of them cost quite close, even usually bigger.I want to add, something. I'm Russian, and for us, it cost even much more expensive than for you. And unfortunately, last three years, I participated GlobalSummit and I think I was alone from Russia, except IS. But anyway, if I am not mistaken, last Global Summit participated by more than 200 people from 23 countries, but most of these people from the US.
go to post Dmitry Maslennikov · Jul 3, 2017 So strange query. But anyway if you want to get double single quotes, should double each one. So, it should be '''' Something like this. Call USER.SP('select * from Sample.Person where SSN=''''aaaaa'''' ','0','S')
go to post Dmitry Maslennikov · Jun 20, 2017 Very simple way to check is everything configured well. Just open this url in any browser. http://localhost:[port]/api/atelier/ It should return some JSON If it does not work, you should look at Apache configuration. Can you put here your apache config file?
go to post Dmitry Maslennikov · Jun 20, 2017 maybe something like this USER>set list="ªÅÊÈÉxÃļ²m" USER>for i=1:1:$l(list) s c=$a(list,i)-100+(i*2) write $c(c) Hello World! or another way a bit easier to decode, I think USER>set list="Iemlp Xosle!" USER>for i=1:1:$l(list) s c=$a(list,i)+(i#-2) write $c(c) Hello World!
go to post Dmitry Maslennikov · Jun 5, 2017 Error says "function must return a value". Did you try to return some value in called method Add?
go to post Dmitry Maslennikov · Jun 1, 2017 Just for debugging, you can use this command Do LOG^%ETN("some message") It will collect all variables, on every stack level. And you can find this logs in SMP by System > System Logs > View Application Error Log > Application Error Dates > Application Errors. But be careful, this is only for debugging, because creating a log, may take a long time.
go to post Dmitry Maslennikov · Jun 1, 2017 I would suggest that you working on frontend side in the browser, and call some REST API written in Caché or not, it does not matter. So, your code in JavaScript. var data = getDateFromRest(); // you got some data from server, no so matter how you did it. I suggest that your data is array, so, you could use map function and it contains something like this [{ "title": "car", "currency": "USD", "cost": "10000" }] var newData = data.map(el => { return { name: el.title, value: el.cost + el.currency } }) will give you new array [{ "name": "car", "value": "10000USD" }]