go to post Dmitry Maslennikov · Jun 12, 2017 Func works perfectly USER>set rs=##class(%SYS.ProcessQuery).PPGFunc(,$j) USER>do rs.%Display() key name value blocks demo 123 demo(123) hello 2 Rows(s) Affected USER>write $zv Cache for UNIX (Red Hat Enterprise Linux for x86-64) 2017.1.1 (Build 111U) Wed May 17 2017 15:49:57 EDT
go to post Dmitry Maslennikov · Jun 6, 2017 2. How about editing performance. Sometimes it works so slowly when just typing a code.4. Only macro completion or completion in XData also will be added?Is there any plans to open sources of Atelier or some parts?
go to post Dmitry Maslennikov · Jun 6, 2017 It is not possible to past my result here, it will not work after that. But my result is 22.Attached source with this methodcontest.xml.zip in expression mode it become 19
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 2, 2017 For integrity checking only ^Integrity tool from InterSystems. And it should check database periodically, but it is not enough just to start periodically checking database. Backing up database also should be used, as well, as journalling for all time since the latest full backup was planned. Every day checking or every week depends on how big is your database, how much time it takes.Repair, it is another story, I don't know any automatic tools which can do such task. It is only manual work, with some knowledge about the structure of Caché Blocks. I did it multiple times. For one customer I repaired database from corrupted backup. They used the same disk for database and backups, and after issues with this disk, one of the backups appeared to have more valuable data available than the database, but they lost some working days anyway. For repair database, the very useful tool is ^REPAIR from InterSystems. But sometimes even this tool could say that there is no database in this file. Once I succeeded with repairing database when some blocks were changed in their position, and the first block was deleted, and ^REPAIR said it is not a database.
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" }]
go to post Dmitry Maslennikov · Jun 1, 2017 Next time, when you have a question, please create it from the main page, not as a comment to the post. In this case, you may get the response much quicker.And to you question, on which side you have to do such transformation? Do you call some external REST API from Caché, or do you call some API written in Caché from your WebApplication which worked in Browser, or another way?
go to post Dmitry Maslennikov · May 31, 2017 I have not used UnitTests before but looks like, you can just analyze ^UnitTest.Result global, by latest index. USER>set sc=##class(%UnitTest.Manager).DebugRunTestCase("", "MyPackage.Tests","","TestAdd") =============================================================================== Directory: /opt/cache/dev/tutorials/UnitTestEx/ =============================================================================== (root) begins ... MyPackage.Tests begins ... TestAdd() begins ... AssertEquals:Test Add(2,2)=4 (passed) AssertNotEquals:Test Add(2,2)'=5 (failed) <<==== **FAILED** (root):MyPackage.Tests:TestAdd: LogMessage:Duration of execution: .000045 sec. TestAdd failed MyPackage.Tests failed Skipping deleting classes (root) failed Use the following URL to view the result: http://192.168.56.140:57774/csp/sys/%25UnitTest.Portal.Indices.cls?Index=5&$NAMESPACE=USER Some tests FAILED in suites: USER>zw ^UnitTest.Result(^UnitTest.Result) ^UnitTest.Result(5)=$lb("2017-05-31 12:08:01",.0013,"MacBook-Pro.local","CACHE","Cache for UNIX (Apple Mac OS X for x86-64) 2016.2 (Build 736U) Fri Sep 30 2016 11:56:58 EDT","USER","","") ^UnitTest.Result(5,"(root)")=$lb(0,.001218,"","There are failed TestCases") ^UnitTest.Result(5,"(root)","MyPackage.Tests")=$lb(0,.000554,"","There are failed TestMethods") ^UnitTest.Result(5,"(root)","MyPackage.Tests","TestAdd")=$lb(0,.000045,"","There are failed TestAsserts") ^UnitTest.Result(5,"(root)","MyPackage.Tests","TestAdd",1)=$lb(1,"AssertEquals","Test Add(2,2)=4") ^UnitTest.Result(5,"(root)","MyPackage.Tests","TestAdd",2)=$lb(0,"AssertNotEquals","Test Add(2,2)'=5") ^UnitTest.Result(5,"(root)","MyPackage.Tests","TestAdd",3)=$lb(1,"LogMessage","Duration of execution: .000045 sec.") I think from this global, will be quite easy to extract needed information to any format.
go to post Dmitry Maslennikov · May 31, 2017 I don't know how you call Caché method from Jenkins, but anyway you can use $SYSTEM.Process.Terminate in Caché script to exit with an exit status. Something like this. set tSC=##class(%UnitTest.Manager).DebugRunTestCase(....) if 'tSC do $SYSTEM.Process.Terminate(,1) halt I suggest that you may use csession or cterm to call Caché code, then you should get exit code and send it to Jenkins, which will be recognized by Jenkins as an error and will fail the job.
go to post Dmitry Maslennikov · May 30, 2017 I would give you a list from fastest to slowest.Local variables. Yes, this sort of variables is limited by memory, but currently, memory cost not so much and if you need only 1GB per server, it should be quite easy to get. By default, the process has only 256MB of memory for local variables, but you can extend it on a fly with special variable $zstorage, and maximum level is 2TB.Process private globals (^||Global), it is already globals but works faster than any other types of globals, but slower than local variables. It is not limited by memory per process, but stored in memory, and could be moved to the disk if you exceed global buffer size.Globals mapped to CACHETEMP (e.g. ^CacheTemp*, ^mtmp), such globals faster than usual globals because in this database journaling of any changes is switched off. Every other Globals, but still depends on is this database used journaling changes or if changes were made in a transaction.
go to post Dmitry Maslennikov · May 26, 2017 Sure, I forgot to fix to this first Dockerfile. This needed because Docker have some caching mechanism for layers. And when each command become as a different layer, in every next build, Docker tries to optimize this process, and skip all unchanged layers. So, 'ccontrol start' could be skipped and next commands fail after that.I fixed now in the article.
go to post Dmitry Maslennikov · May 25, 2017 Error with code 126 it is, usually dependencies error. Looks like you loose some of system libraries which used by zlib1.dll.I would suggest using Dependency Walker, to find what you need.
go to post Dmitry Maslennikov · May 22, 2017 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.
go to post Dmitry Maslennikov · May 18, 2017 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
go to post Dmitry Maslennikov · May 18, 2017 set global=$name(^A),count=0 set i="" for { set i=$o(@global@(i)) quit:i="" if $increment(count) } zw count