go to post Robert Cemper · May 31, 2019 In your case, you have to KILL the underlying globals manually.As seen in Storage definitioneg. <Global>^SVK</Global> and all others too that you didn't publishWhat I've seen so far DDL enabling might not fit your expectations because of that ancient mapping.(looks like late 80ties or before)
go to post Robert Cemper · May 31, 2019 You shouldn't be so much concerned on looping the RecordSetINSERT ...... SELECT .... looks smaller and smarter but does basically the same
go to post Robert Cemper · May 31, 2019 Well the code you posted shows a rather ancient type of table mapping away from standards.And the errors you got underlines this as standard methods like %BuildIndices and %PurgeiIndices are not implemented.I see 3 possible options:- you find in the code (not necessarily in the class definition) some method to (re) generate the indices. Without experience with Caché and Object Script a rather impossible task.- you create a copy of the class definition and move all data there by INSERT INTO new.table SELECT * from old.tablebut it is unclear from what you showed to us if INSERT into your table is supported at all - least risky. you out-comment all broken indices except [IDKEY] and just use a flat table scan.this is a fast workaround at the price of a poor performance on bigger tables.honestly. - not a funny situation
go to post Robert Cemper · May 31, 2019 You gave the answer already!By compilation, you DEFINE indexes at their rules.But you need to generate their content separately by ClassMethod %BuildIndices in each class.Or from management portal. Then they are ready to use.
go to post Robert Cemper · May 31, 2019 There is another way directly with SQL First, you CREATE a temporary table according to your needs (or have it ready) CREATE GLOBAL TEMPORARY TABLE MyTemp.Table temp1, temp2, . . . . . Next, you fill it by INSERT directly from SELECT INSERT INTO MyTemp.Table (temp1,Temp2, . . .) SELECT COL1,COL2, ... FROM Source.Table WHERE ...... The select is the same as before.
go to post Robert Cemper · May 30, 2019 give your anchor tag an ID and modify it using some JS script.or use %ZEN.Auxiliary.locatorLink or any other element that allows a HREF.or trigger it with JS from any onclick event or similar. It's not much ZEN but pure JS
go to post Robert Cemper · May 30, 2019 Hola Francisco !Málaga is a splendid place. I was there several times privately (with all related sightseeing) and on business.Always a great experience! I wish my Spanish (reading) was not so rusted to assist in tranlsation of articles.especially this one Uso de expresiones regulares en ObjectScriptBienvenido, Robert
go to post Robert Cemper · May 27, 2019 Independent of the way how your servers are linked It might be the easiest to have SOAP service to call each other passing the lab episode number '1119102928' as a parameter.If a lock exists it will be removed. if not nothing happens.Studio has an easy to use SOAP wizard to create the Server and Client part.
go to post Robert Cemper · May 24, 2019 Francisco,instead of FOR EACH which obviously uses a nonexisting Next methodyou could create a loop using <WHILE> and do a "manual" loop.For the condition source.retorno.datos.polizas.poliza.%Size() gives you the index limitand source.retorno.datos.polizas.poliza.%Get(idx).sucursal .... and similar provides the content. You have to increment idx manually and it runs from 0 (zero!) to %Size()-1It's not as elegant as <foreach> but you have control over your JSON input.
go to post Robert Cemper · May 24, 2019 You can get the pid without iteration.set nsp=$znspaceset pid=^$|nsp|lock("^DBLock(""Patient"",1119102928)","OWNER")do $system.Process.Terminate(pid)|nsp| is only required for access to a lock in a different namespace.
go to post Robert Cemper · May 22, 2019 as you describe if you refer to a file outside Caché and Caché has no control over itit's a clear case of data inconsistency you have 4 options:1a) create a fake file at that reference an delete it then 1b) add an "on before delete" trigger to check and fix in advance either in the record or in file system 2a) manipulate the file reference using the object behind your entry 2b) do the delete at object level, trap the error and ignore it. since the file is gone anyway
go to post Robert Cemper · May 17, 2019 when you generate Classes from XSD you require a reference. That' s where xsd is stored. It may make sense to ich copy it first to your default repository and generate your classes after.
go to post Robert Cemper · May 14, 2019 In fact, I see not 1 but 2 tables that share the same global.so it might be easier to have 2 separated definitions one with and the other without the 4th subscript (some $h)for access with SQL you than can use a UNION to assemble them. like:SELECT * FROM ( SELECT Account, PGC, Entity, ' ' as DateTime, ..fields... FROM TAB1 WHERE <some condition > UNION ALL SELECT Account, PGC, Entity, DateTime, ..same as above... FROM TAB2 WHERE <same condition >) order by 1,2,3,4or you decide to add the missing subscript in your global to have a common structure
go to post Robert Cemper · May 10, 2019 Thank you Dan!So after years, I realized what the proper use of [ Identity ] is.It's well documented . Anyhow it passed my attention. Thanks for the clarification.
go to post Robert Cemper · May 8, 2019 If this is Caché standard ID it is projected to SQL as xDBC Type INTEGERCaché SQL Reference - Data Types says:INTEGER%Library.Integer (MAXVAL=2147483647, MINVAL=-2147483648)so 5983658923646 is definitely out of rangexDBC Type :BIGINT%Library.BigInt represents a 64 bit integer value.I'm not aware of any parameter to change the data type of the generated ID.But this hack may do the trick. Just add this calculated Property to your class without affecting the storage. Property myID As %BigInt [ Calculated, SqlComputeCode = { set {*}=%ID}, SqlComputed ];
go to post Robert Cemper · May 6, 2019 As long as you don't go for Sharding this might work quite well.For Sharding the whole storage environment will make a significant difference also in class definitions.
go to post Robert Cemper · May 6, 2019 I tried it now in Caché 2016.2.2 manually overwriting Storage <Type>%Storage.Persistent</Type>.During compilation it gets automatically set back to <Type>%Library.CacheStorage</Type>Also in class defintion.Does this automatic change go back to repository ???
go to post Robert Cemper · May 6, 2019 At first sight in Documatic, it looks like %Library.CacheStorage was just renamed to %Storage.PersistentAs a workaround, I would simply try in Caché to make a copy of %Library.CacheStorage to a new %Storage.Persistent(a pure rename) Then compile a class with one and the other and compare the generated .int code.It's a dirty hack. But I have no hope ISC will ever provide some backward port from IRIS to Caché.Sorry I have no IRIS at hands and can't try it myself.
go to post Robert Cemper · May 5, 2019 score-1 #1 - disagree, see no valid reasoning-2 #2 - strongly disagree-1 #3 - disagree because of #2+1 #4- agree+1 #5 - agree+1 #6 - agree . pls.send enhancement req. to engineering+0 #7 - not clear about the message ? an oref is neither primitive nor dynamic+0 #8 - miss imagination of inconsistent return types+0 #9 - don't understand that message