go to post Dmitry Maslennikov · May 18, 2016 It's is not good idea, not all time and not everywhere I have an access to google, but I have an access to my installation, and I have to search on my local machine. And such search should be support browser's search engines. And then I could do something like this.with settingsBut Ensemble documentation, should provide their own search engine to install in my browser without any manual operations. As it possible to do with AddSearchProvider
go to post Dmitry Maslennikov · May 13, 2016 Many times I need to get some link from documentation, to show particular part to someone. And some time it is quite difficult to get such link, and the worst place in Class References, where I can't get good link for a particular part of class.So, what I need is, an active icon with link, which then I can use, and for Class reference too.As an example github.
go to post Dmitry Maslennikov · May 10, 2016 As for me, when I have to investigate some strange behavior in my application, I prefer to read all journal files or limited by time, and then all records, and then I have some some to find exactly what I need, like only kill records or only sets, and only for some concrete global references. So, my usual code looks like this: set exit=0 set docId="14105401" set jrnFile=##class(%SYS.Journal.System).GetCurrentFileName() do { w !!,jrnFile,! set jrn=##class(%SYS.Journal.File).%OpenId(jrnFile) quit:'$isobject(jrn) #dim rec As %SYS.Journal.Record = jrn.FirstRecord set last=jrn.End set pr=0,opr=0 do { set pr=$j(rec.Address/last*100,0,2) if pr'=opr write $c(13),pr_"%" set opr=pr if rec.%IsA("%SYS.Journal.SetKillRecord") { set glb=rec.GlobalNode if $qs(glb, 0),"^My.Global",$qs(glb, 1)=docId { w !!,rec.Address,!,glb w ! } } set rec=rec.Next read q:0 set exit=q="q" quit:exit } while $isobject(rec) quit:exit set sc=jrn.GetPrev(jrnFile, .jrnFile) } while $$$ISOK(sc) quit This code looks all journal files, file by file from latest to oldest, and show progress for current journal file, and shows offset if it found something interesting
go to post Dmitry Maslennikov · May 8, 2016 In my opinion, it's more looks like by mistake, not sure why it could be done in other ways, it still working, with some limitations but any way.We can wait what would say InterSystems, may be they will fix it in future.
go to post Dmitry Maslennikov · May 7, 2016 You could just pass this arguments in Execute method, something like this new $namespace set $namespace="%sys" Set tRS = ##class(%ResultSet).%New("%SYS.Journal.File:Search") Set tSC = tRS.Execute("test", "/opt/cache/mgr/journal/20160507.001") if $$$ISERR(tSC) { do $system.OBJ.DisplayError(tSC) } do tRS.%Display() this code will return all offset's which contains text - 'test' You must remember that this query should be executed only in %SYS namespace. Usually we could use some another modern ways, which allow us to call queries. set statement=##class(%SQL.Statement).%New() set tSC=statement.%PrepareClassQuery("%SYS.Journal.File","Search") if $$$ISERR(tSC) { do $system.OBJ.DisplayError(tSC) } Set tRS = statement.%Execute("test", "/opt/cache/mgr/journal/20160507.001") or even much shorter set tRS=##class(%SYS.Journal.File).SearchFunc("test", "/opt/cache/mgr/journal/20160507.001") do tRS.%Display() But unfortunately such code snippets does not work in case when Query does not contain any parameters in his original declaration.
go to post Dmitry Maslennikov · May 6, 2016 126 error means - The specified module could not be found.So, you have dependency issue, so I recommend to use dependency tool which I suggested before, to find what you need.
go to post Dmitry Maslennikov · May 6, 2016 After this error you should look at cconsole.log, where you can find error code, why loading was failed.Mostly there are two errors with loading dll in cache, using 32bit dll instead of 64bit. And if this library has unsatisfied dependencies, in this case I'm using this tool to find such dependencies.
go to post Dmitry Maslennikov · May 4, 2016 Well, you can't write conditions in this way, and compile error which you see, it is actually parsing error for such conditionHow you can change it, You should define some function which may do all this check or partially, just return some value for check. To define such function, you should have your child for Ens.Rule.FunctionSet class, something like this Class Test.Utils Extends Ens.Rule.FunctionSet { ClassMethod GetAt(value As %String = "", index As %String) As %String { if $isobject(value) { quit value.GetAt(index) } quit "" } } and then, you can use it in this way, where GetAt your just created function. <rule name=""> <constraint name="msgClass" value="Test.TestMessage"></constraint> <when condition="GetAt(Document.myList,1)="AA""> <send transform="" target="DummyOperation"></send> <return></return> </when> </rule> But your function should return final value for checking, and you can't use write so, GetAt(Document.myList,1).property1="AA"
go to post Dmitry Maslennikov · May 2, 2016 If that routine uses curly brace style, such label should be marked as public. More details here
go to post Dmitry Maslennikov · May 1, 2016 Only two way to do it, Mapping with %ALL namespace as suggested Timothy, or %-class which as you already know by default mapped to all namespace, but I said how you should name your class, to send this class to Write-enabled database.
go to post Dmitry Maslennikov · May 1, 2016 First of all you should know that namespace it is not final destination for any data in Caché. Namespace just defines easy access to set of data, but all data stores in databases. And any security settings uses on Databases not for Namespaces. DataThere some reasons why you can't just use any %-classes; By default all %-classes, appeared in CACHELIB database, which read-only by default after installation.CACHELIB database after any installation process, will be overwritten with all you custom content.Actually first point is not so truly, because InterSystems gives us one chance to create %-class, without loosing it after next upgrade. You should use %Z* or %z* name for classes and routines (some names have already reserved for InterSystems use), and in this case that classes will be stored at CACHESYS database, which available to write, and any upgrade will not rewrite such classes. So, you should read this page in documentation, to know more about names, which names you can't use, and how to name recommend.
go to post Dmitry Maslennikov · Apr 28, 2016 Sure, it should work, CACHE.DAT format is platform independent. You even can mount to another version, lower or higher.
go to post Dmitry Maslennikov · Apr 21, 2016 You can try to change your login through wrc app. Contact Details -> Select Contact, where you can enter new login in Username field.
go to post Dmitry Maslennikov · Apr 21, 2016 Stefan, do you know, why was removed $toJSONFormat() method? it was quite useful method
go to post Dmitry Maslennikov · Apr 18, 2016 That's why I use this code in my projects set stream=##class(%Stream.TmpCharacter).%New() do Result.$toJSON(stream) while 'stream.AtEnd { write stream.Read() }and such write, instead of simple do stream.OutputToDevice()because, sometime I got unreadable response in this case, don't know why, may be because of gzip
go to post Dmitry Maslennikov · Apr 18, 2016 There are some ways to retrieve this value set tSC=##class(EnsPortal.Utils).ItemSettings("Production.Name||Item.Name",.settings,.colNames) in this case you can find something like here $lb("Core","PoolSize",1,1,"",3,"Number of jobs to start for this config item. <br>Default value: <br>0 for Business Processes (i.e. use shared Actor Pool) <br>1 for FIFO message router Business Processes (i.e. use a dedicated job) <br>1 for Business Operations <br>0 for adapterless Business Services <br>1 for others <br>For TCP based Services with JobPerConnection=1, this value is used to limit the number of connection jobs if its value is greater than 1. A value of 0 or 1 places no limit on the number of connection jobs.","%Library.Integer","","0","","","",0,"Pool Size","Additional","Additional Settings","") Or just open this item, and get this property directly if ##class(Ens.Config.Item).NameExists("UT.Client.GPK.Production","RS.Transformation",.id) { set item=##class(Ens.Config.Item).%OpenId(id) write item.PoolSize }
go to post Dmitry Maslennikov · Apr 18, 2016 Caché has very useful feature names as Mapping, in your case you can look at Global MappingsHow it can help now. With a mapping you can split your globals which stores your tables.For example You have table Sample.Person, with globals ^Sample.PersonD for Data and ^Sample.PersonI for indices.then you may create new databases like PERSONDATA1, PERSONDATA2 and PERSONINDEXAnd create mappings likes on pictureIn this case we send first 10000 rows to database PERSONDATA1, and all next data to PERSONDATA2. When you decide to split it again, just create new database, and edit mappings.And you can place every database in any place as you want.But in future releases we expect to see new feature: Distributed SQL
go to post Dmitry Maslennikov · Apr 15, 2016 You can't change how project looks like in Studio, but with SourceControl class, you can organize your files for your source control as you want.