go to post Robert Cemper · Feb 13 see: https://docs.intersystems.com/irislatest/csp/documatic/%25CSP.Documatic.cls?LIBRARY=%25SYS&CLASSNAME=SYS.Database#FreeSpace
go to post Robert Cemper · Feb 4 I just identified a possible source of the hidden Python installation:https://docs.intersystems.com/iris20243/csp/docbook/DocBook.UI.Page.cls?KEY=GEPYTHON_prereqs#GEPYTHON_prereqs_version Microsoft Windows does not come with a default version of Python, andas of InterSystems IRIS 2024.2, the InterSystems IRIS installer for Windowsno longer installs Python for you. I did an upgrade from my previous IRIS 2024.1
go to post Robert Cemper · Feb 4 After un-install of my own python versionsPY was still there in a different hidden and protected version unknown for me.I detected it using regedit C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.12_3.12.2288.0_x64__qbz5n2kfra8p0\ I fail to explain where it came from (pre-installed win ?? )Manual killing it and reinstallation of an official Python distribution fixed it.BIG THANKS for your advise and help-
go to post Robert Cemper · Feb 3 Your file format doesn't fit, but you are close.UDL Header is missing, also leading blanks in the lines as you have no labels.And you have to switch to namespace %SYS and back to make it work. ROUTINE DisplayDB[Type=INT] new $namespace zn "%SYS" set db=##class(Config.Databases).DatabasesByServer("",.dbList) for i=1:1:$LENGTH(dbList,",") { set dbName= $PIECE(dbList,",",i) write dbName,! } quit
go to post Robert Cemper · Feb 1 Try this from %Library.Routine: https://docs.intersystems.com/iris20243/csp/documatic/%25CSP.Documatic.cls?LIBRARY=%25SYS&CLASSNAME=%25Library.Routine#Deletewith flag=2 classmethod Delete(rtnname As %String, flag As %String = 0, supressbackup As %Boolean = 0, nsp As %String = $namespace) as %Status Delete the routine rtnname. If the rtnname is not fully qualified we will resolve this into a fully qualified name first and then proceed with the rest of the delete. For example if you specify 'test' and there is a 'test.mac' it will resolve to this, if there was only a 'test.obj' it will resolve the name to this. The parameter flag specifies how much to delete. The options are: 0 - Delete entire routine, for a MAC routine this will delete MAC, INT, OBJ. For an INT routine it will delete INT and OBJ, for a INC routine it will only delete the INC, for a BAS routine it will delete the BAS and the OBJ code. 1 - Delete just the named routine, for example for a MAC routine it will only delete the MAC and it will leave the INT and OBJ if present. 2 - Delete all the source code but leave any OBJ code.
go to post Robert Cemper · Jan 31 this fails with <ILLEGAL VALUE> if time part is negative (before 3AM)
go to post Robert Cemper · Jan 22 something like this ? | COL | VAL | | ------ | --- | | codRep | 401, 428, 428, 464, 472 | | Abril | 100000, 180000, 160000, 0, 0 | | Agosto | 100000, 350000, 200000, 90000, 0 | then this is the SQL statement SELECT 'codRep' "COL", list($JUSTIFY(codRepresentante,10)) "VAL" FROM Ped.MetasRepresen where ano=2024 Union All SELECT ' Abril', list($JUSTIFY(vendasAbril,10)) FROM Ped.MetasRepresen where ano=2024 Union All SELECT 'Agosto', list($JUSTIFY(vendasAgosto,10)) FROM Ped.MetasRepresen where ano=2024
go to post Robert Cemper · Jan 20 Yes i! I'm quite sure! DSTIME was introduced with or short after release of DeepSee morethan a decade back and didn't change.
go to post Robert Cemper · Jan 17 Almost 6 years back I wrote and article on data synchronizationUsing DSTIME and a related example in OEX.It is focussed on detecting and optimizing insert, change, delete of specified Tables/Classesand it takes care of processing cycles to avoid duplications.So the output might be minimized.Transmission speed to PostgreSQL is not part of the example
go to post Robert Cemper · Jan 14 like this: /// using $ZZFIX() custom function Class rcc.GetFixZZ Extends %Library.String { Parameter LENGTH As %String = 10; Parameter ALIGN As %String = "LEFT"; Parameter PADCHAR As %String = " "; Method Get() As %String [ CodeMode = generator, ServerOnly = 1 ] { set code=+%parameter("LENGTH")_","""_$E(%parameter("PADCHAR")_" ",1)_"""" set code=code_","_("RIGHT"=$zcvt(%parameter("ALIGN"),"U"))_")" $$$GENERATE(" quit $ZZFIX(%val,"_code ) QUIT $$$OK } ClassMethod StorageToLogical(%val As %String) As %String [ CodeMode = generator, ServerOnly = 1 ] { set code=+%parameter("LENGTH")_","""_$E(%parameter("PADCHAR")_" ",1)_"""" set code=code_","_("RIGHT"=$zcvt(%parameter("ALIGN"),"U"))_")" $$$GENERATE(" quit $ZZFIX(%val,"_code ) QUIT $$$OK } }
go to post Robert Cemper · Jan 14 Though, if you need this functionality over multiple namespacesI'd suggest to use a Language Extension:#1 an .inc for the the code definition in namespace %SYS ROUTINE ZZFIX [Type=INC] /// fix length string + padding + l/r-adjustment ZZFIX(%val, len , pad = "", right = 0) if right quit $e($tr($j("",len)," ",$e(pad_" "))_%val,*+1-len,*) quit $e(%val_$tr($j("",len)," ",$E(pad_" ")),1,len) #2 add this line to %ZLANGF00.mac #include ZZFIX after compiling it you may run a test in any namespace USER>set test="213abc" USER>write $ZZFIX(test,10,"*") 213abc**** USER>write $ZZFIX(test,10,"*",1) ****213abc USER>write $zzfix(test,5,"*",1) 13abc USER>write $zzfix(test,15,"$") 213abc$$$$$$$$$ USER>write $zzfix(test,15,"$",1) $$$$$$$$$213abc USER> If available this could of course also replace theClassMethod in the DataType definition.It's a matter of taste.
go to post Robert Cemper · Jan 13 Thank you @Jeffrey Drumm !Yet another idea:Sometimes you may want a static non-blank padding character.e.g. ****123 or 345~~~~this is included as Parameter PADCHAR as %String =" " ; default= blank /// padding other than " " might be useful in some cases Class rcc.GetFixSqlPad Extends %Library.String { Parameter LENGTH As %String = 10; Parameter ALIGN As %String = "LEFT"; Parameter PADCHAR As %String = ""; Method Get() As %String [ CodeMode = generator, ServerOnly = 1 ] { set code=+%parameter("LENGTH")_","""_$E(%parameter("PADCHAR")_" ",1)_"""" set code=code_","_("RIGHT"=$zcvt(%parameter("ALIGN"),"U"))_")" $$$GENERATE(" quit ##class(rcc.GetFixSqlPad).Fix(%val,"_code ) QUIT $$$OK } ClassMethod StorageToLogical(%val As %String) As %String [ CodeMode = generator, ServerOnly = 1 ] { set code=+%parameter("LENGTH")_","""_$E(%parameter("PADCHAR")_" ",1)_"""" set code=code_","_("RIGHT"=$zcvt(%parameter("ALIGN"),"U"))_")" $$$GENERATE(" quit ##class(rcc.GetFixSqlPad).Fix(%val,"_code ) QUIT $$$OK } /// PADCHAR=" "; LEFT=0, RIGHT=1 ClassMethod Fix(%val, rcc, rccp = "", rccal = 0) As %String { if rccal{ set %val=$e($tr($j("",rcc)," ",$e(rccp_" "))_%val,*+1-rcc,*) } else { set %val=$e(%val_$tr($j("",rcc)," ",$e(rccp_" ")),1,rcc) } quit %val } }
go to post Robert Cemper · Jan 12 This doesn't work for SQL - Therefore a new version Class rcc.GetFixSql Extends %Library.String { Parameter LENGTH As %String = 10; Parameter ALIGN As %String = "LEFT"; Method Get() As %String [ CodeMode = generator, ServerOnly = 1 ] { set code=+%parameter("LENGTH")_","_("RIGHT"=$zcvt(%parameter("ALIGN"),"U"))_")" $$$GENERATE(" quit ##class(rcc.GetFixSql).Fix(%val,"_code ) QUIT $$$OK } ClassMethod LogicalToDisplay(%val As %String) As %String [ CodeMode = generator, ServerOnly = 0 ] { set code=+%parameter("LENGTH")_","_("RIGHT"=$zcvt(%parameter("ALIGN"),"U"))_")" $$$GENERATE(" quit ##class(rcc.GetFixSql).Fix(%val,"_code ) QUIT $$$OK } ClassMethod LogicalToOdbc(%val As %String) As %String [ CodeMode = generator, ServerOnly = 1 ] { set code=+%parameter("LENGTH")_","_("RIGHT"=$zcvt(%parameter("ALIGN"),"U"))_")" $$$GENERATE(" quit ##class(rcc.GetFixSql).Fix(%val,"_code ) QUIT $$$OK } // only required for SQL Display Logical mode ! ClassMethod StorageToLogical(%val As %String) As %String [ CodeMode = generator, ServerOnly = 1 ] { set code=+%parameter("LENGTH")_","_("RIGHT"=$zcvt(%parameter("ALIGN"),"U"))_")" $$$GENERATE(" quit ##class(rcc.GetFixSql).Fix(%val,"_code ) QUIT $$$OK } /// LEFT=0, RIGHT=1 ClassMethod Fix(%val, rcc, rccal = 0) As %String { if rccal{ set %val=$e($j(%val,rcc),*+1-rcc,*) } else { set %val=$e(%val_$j("",rcc),1,rcc) } quit %val } }
go to post Robert Cemper · Jan 12 A more compact data type with LENGTH and ALIGNFor RIGHT alignment I cut off oversized data by LENGHT counted from the end. Class rcc.GetFixAligned Extends %Library.String { Parameter LENGTH As %String = 10; Parameter ALIGN As %String = "LEFT"; Method Get() As %String [ CodeMode = generator, ServerOnly = 1 ] { set rcc=+%parameter("LENGTH") if "RIGHT"=$zcvt(%parameter("ALIGN"),"U") { set code="$e($j(%val,"_rcc_"),*+1-"_rcc_",*)" } else { set code="$e(%val_$j("""","_rcc_"),1,"_rcc_")" } $$$GENERATE(" Quit "_code) QUIT $$$OK } }
go to post Robert Cemper · Jan 11 by extending %RegisteredObject you lost the basic data typeand all other parameters of %Stringthis should do it: Class rcc.FixStr Extends (%Library.String, rcc.FixStr.Props) { /// Fill value according to LENGTH parameter Method Get() As %String [ CodeMode = generator, ServerOnly = 1 ] { set tCode="$e(%val_"""_$j("",+%parameter("LENGTH")) set tCode=tCode_""",1,"_+%parameter("LENGTH")_")" $$$GENERATE( " Quit "_tCode) QUIT $$$OK } }
go to post Robert Cemper · Jan 2 different approach: SELECT LI.id from FDRD_Com.List LI JOIN FDRD_Com.Prod PR ON LI.vehicle = PR.Car WHERE PE.ProductLineName='Toyota' AND PR.Car is not null -- might be obsolete
go to post Robert Cemper · Nov 21, 2024 Hi @Jeffrey Drumm ;different approach: use your own datatype that always returns fixed MAXLEN string: /// Make fixlength String according to MAXLEN parameter Class rcc.GetFix Extends %Library.String { /// Fill value <var>%val</var> to <a href="#MAXLEN">MAXLEN</a> characters. Method Get() As %String [ CodeMode = generator, ServerOnly = 1 ] { set code="$e(%val_"""_$j("",+%parameter("MAXLEN")) set code=code_""",1,"_+%parameter("MAXLEN")_")" $$$GENERATE( " Quit "_code) QUIT $$$OK } } and a test class: Class rcc.FixTest Extends %RegisteredObject { Property test As rcc.GetFix(MAXLEN = 12); } and now some check from terminal: SAMPLES>set z=##class(rcc.FixTest).%New() set z.test="rob" SAMPLES>write z.test,$L(z.test) rob 12 SAMPLES>;some oversized string SAMPLES>set z.test=";some oversized string" SAMPLES>write z.test,$L(z.test) ;some oversi12 SAMPLES> Hope this helps you along
go to post Robert Cemper · Nov 11, 2024 #2)Every LOCK persists until the process is ended or the LOCK is removed explicitely (LOCK -....)it is not related to any error handling. #1)depends on your design.If there is no conflict of subscripts between ADD and REMOVE possible there is no need of a Lock