go to post Robert Cemper · Aug 26 Hiked/enjoyed nature Yes Traveled somewhere new Yes Watched a movie or series Yes Read a book Yes, many ~ 1500 pages Earned points and redeemed a reward on Global Masters 🏆 Earned points but didn't redeem Spent time with family or friends Yes Moved to a different location of living Yes Did a lot of manual work to enable that move Yes
go to post Robert Cemper · Aug 26 Correct! |"NS"| is not allowed as a Class reference.BUT: It is a valid syntax for .INT/.MAC Rooutine do label^|"NS"|routineAnd %objlasterror never shows the class, but the generated .int or .obj you run.It's rather a comfort of the COS compiler that your class name matches the .int
go to post Robert Cemper · Aug 16 I'm fully in Sync with @Dmitry Maslennikov Uniqueness is the TOP priority. Though you can switch it off for rare cases by the class parameter MANAGEDEXTENT. Concerning access speed, naming is not really relevant.Top level of global storage is a sorted hierarchical directory structure that points to the globals.So, on average, any global has - with actual storage speed - the same access time.And global directory is mostly permanently cached in Global buffers.BTW: You can list this directory using ^$GLOBAL() set dir="^$GLOBAL("""")" for write dir,! set dir=$QUERY(@dir) quit:dir=""
go to post Robert Cemper · Aug 15 Just as you, I start my CSP also from good old Studio the EXIT button is inside <bod>y<form> ....<button>.. </form></body>in upload <!-- Copyright (c) 2001 InterSystems Inc. ALL RIGHTS RESERVED. --> <csp:class description="Demo of how to upload a file from the browser."> <html> <head> </head> <body bgcolor="#CCCCFF"> <!-- display standard sample template using a custom tag --> <isc:SAMPLE title="Upload a file Sample"> This sample uses an '<input type=file>' element in a form to upload a file from the web browser to CSP. Pick a file and hit the submit button to try it. </isc:SAMPLE> <!-- HTML Form to submit the file. You must specify the enctype="multipart/form-data" --> <!-- for this to work --> <form enctype="multipart/form-data" method="post" action="upload.csp"> Enter a file to upload here: <input type=file size=30 name=FileStream> <p> <ul><input type="submit" value="Upload file"></ul> <p> <button onclick="window.close()" style="width: 100px; height: 40px; font-size: 18px;"> Exit </button> </form> <!-- As form is submitted to this page look to see if we have the stream in the %request object --> <csp:if condition='($data(%request.MimeData("FileStream",1)))'> <hr><br> Submitted filename: <b>#(..EscapeHTML(%request.MimeData("FileStream",1).FileName))#</b><br> Size of file: <b>#(..EscapeHTML(%request.MimeData("FileStream",1).Size))#</b><br> Mime Section: <b>#(..EscapeHTML(%request.MimeData("FileStream",1).MimeSection))#</b><br> Type of stream: <b>#(..EscapeHTML($classname(%request.MimeData("FileStream",1))))#</b><br> Content Type: <b>#(..EscapeHTML(%request.MimeData("FileStream",1).ContentType))#</b><br> <br> First 200 characters of stream:<br> <ul> <script language="Cache" runat="server"> New bytes Set bytes=%request.MimeData("FileStream",1).Read(200) Set bytes=##class(%CSP.Utils).DecodeData(bytes) Write bytes,! </script> </ul> </csp:if> </body> </html> while your calling JS script is best located in <head>......</head> <html> <head> <title>Demo for David</title> <script language="JavaScript" type="text/javascript"> function importExtract() { var url='upload.csp' ; var options = 'popup,status=yes,scrollbars=yes,resizable=yes,width=750,height=250' ; newwindow=window.open(url,'UPLOAD',options); newwindow.focus(); alert('back'); } </script> </head> <body> <h3>Demo for David</h3> <Input type="button" value="Import Client Consultation Extract" onclick="importExtract();"/> </body> </html>
go to post Robert Cemper · Aug 15 I also struggled over that strange offset. and dropped the approach
go to post Robert Cemper · Aug 15 Strange.Did you try to load 'upload.csp' directly and just isolated? window.close() is the most basic function in JS in any browser.If that fails, your browser might have a problem.Do you run some sick PopUp blocker or similar in your browser?
go to post Robert Cemper · Aug 15 Well, you have to do it yourself.Suggestion: Keep a list of the indices processed and skip all followersFor the list you need a small Stored Procedure that you add toyour SQL SELECT in the WHERE clause. CREATE PROCEDURE SQLUSER.DUPL(value VARCHAR, id INTEGER) RETURNS INTEGER LANGUAGE OBJECTSCRIPT { set used=$d(^||dupl(value)) set ^||dupl(value,id)=$i(^||dupl(value)) quit used } And in the SELECT SELECT id, sickindex, . . . . . FROM your.data WHERE DUPL(sickindex,id) < 1 As a side effect, you create a list of affected indices.I used a PPG to avoid the need to clear it before use.If you are interested in the duplicate, you need to change the global nameand add some cleanup before use
go to post Robert Cemper · Aug 15 Hi Jean, Taking a look into ##class(%Library.PosixTime) you see that you shouldn't be concerned on efficiencyIt's pretty obvious that the implementation is missing a selectable precision.so set stripped = $P(str,".",1) Is similar effective as set stripped = $E(str,1,19) It's not perfect but will be correct and lasting for almost the next 8000 years 😉
go to post Robert Cemper · Aug 14 In SMP (System Management Portal), you step to EXLORER and then step into SQLwhere you select your TABLE. and can rebuild index Furthermore, every persistent class has by default• classmethod %BuildDeferredIndices• classmethod %BuildIndices• classmethod %BuildIndicesAsyncNext variant : use $SYSTEM.OBJ.ValidateIndices()Details described here Fix broken index 8 years ago, still valid
go to post Robert Cemper · Aug 12 Due to limited practice in ZEN I transferred your example to straight CSP and JS <html> <head> <title>Demo for David</title> <script language="JavaScript" type="text/javascript"> function importExtract() { var url='upload.csp' ; var options = 'popup,status=yes,scrollbars=yes,resizable=yes,width=750,height=250' ; newwindow=window.open(url,'UPLOAD',options); newwindow.focus(); alert('back'); } </script> </head> <body> <h3>Demo for David</h3> <Input type="button" value="Import Client Consultation Extract" onclick="importExtract();"/> </body> </html> in upload.csp I just added this BUTTON to the end ot the main form <button onclick="window.close()" style="width: 100px; height: 40px; font-size: 18px;"> Exit </button> </form>
go to post Robert Cemper · Aug 11 1. Use $$DIR^TRACE(dir) you haven't set a suitable directory2. Use $$ON^TRACE(5352) ; the job you want to trace ==> open file3: USE $$OFF ^TRACE(5352) to stop trace ==> close file4.Now ^TRACE should show the file I traced my own studio session: START:1810291850,0,%SYS.BINDSRV,2,1 STACK: [ 0] D - SuperServer+112^%SYS.SERVER +1 STACK: [ 1] D - SuperConnect+34^%SYS.DBSRV +1 STACK: [ 2] D - Dispatch+14^%SYS.BINDSRV +1 DO:1812736542,0,%SYS.BINDSRV,39 ARG:[ 0] INT: 0 ARG:[ 1] INT: 1 ARG:[ 2] INT: 1 DO:1812736624,0,%SYS.BINDSRV,625 ARG:[ 0] INT: 0 ARG:[ 1] INT: 0 DO:1812736631,0,%SYS.BINDSRV,258 ARG:[ 0] INT: 0 ARG:[ 1] INT: 0 QUIT:1812736638,291 DO:1812736642,0,%SYS.BINDSRV,627
go to post Robert Cemper · Aug 8 Not sure for Caché 2017 BUT Cache for UNIX (Red Hat Enterprise Linux for x86-64) 2018.1.5 (Build 659U) Mon Mar 22 2021 07:12:43 EDTHas ^TRACE in %SYSwith enough $v(..) and $ZU(..) to look promising W $ZU(5) %SYS %SYS>D ^TRACE TRACE utility for Cache. You can signal a process to write a record of all procedure, function, or subroutine calls to a file. Then use this utility to interpret and display the trace. The trace file is named: CacheTrace_'pid'.txt Use $$DIR^TRACE(dir) to set the directory where the file(s) should be written (process must have create/write access to the directory). $$DIR^TRACE() returns the current directory for trace files. Use $$ON^TRACE(pid) to start the trace and $$OFF^TRACE(pid) to end the recording. Then just run ^TRACE to see the results. Process ID for trace file:
go to post Robert Cemper · Aug 8 So %SYS>d ^TRACE might be a useful start This utility traces the execution of a process. Traced processes write events to a trace file with details about the routine line where the event occurred and, if applicable, the global reference. The events available for tracing correspond to the metrics availabe in performance monitoring tools (PERFMON, %SYS.MONLBL etc). Raw data is written to iristrace_<pid>.txt in the configured directory, and is then parsed and displayed by this utility. Trace file directory: not set Trace file size limit: unlimited Trace events selected: RtnLoad, GloRef, BlockWait, NCacheMiss, DirBlkRd UpntBlkRd, BpntBlkRd, DataBlkRd, BdataBlkRd, MapBlkRd, OthBlkRd 1) Configure Trace 2) Trace Process (Foreground) 3) Start Background Trace 4) Stop Background Trace 5) Display Trace Files 6) Delete All Trace Files Option?
go to post Robert Cemper · Aug 7 If I understand it right, you do not just expect a tracking down to some point, but also a history of all up and down you did from a certain starting point.Similar to a TCP traceroute
go to post Robert Cemper · Aug 4 The feedback button is not available for Python and for Node.js.These were my 1st broken examples
go to post Robert Cemper · Aug 4 AH, That was meant by feedbackWhich is easy now, as it wasn't a bug but an explicit feature
go to post Robert Cemper · Aug 4 It might be great to remove the related refences alsofrom official documentationPyhttps://docs.intersystems.com/components/csp/docbook/Python-Native/v1.0.0/irisnative.iris.html#irisnative.iris.function Nodes.jshttps://docs.intersystems.com/components/csp/docbook/NodeJS-Native/v2019.2/external-_intersystems-iris-native_.Iris.html Javahttps://docs.intersystems.com/iris20201/csp/docbook/DocBook.UI.Page.cls?KEY=BJAVNAT_call#BJAVNAT_call_function .NEThttps://docs.intersystems.com/iris20201/csp/docbook/DocBook.UI.Page.cls?KEY=BNETNAT_call#BNETNAT_call_function Also Class reference for 2025.1https://docs.intersystems.com/iris20251/csp/documatic/%25CSP.Documatic.cls?LIBRARY=%25SYS&CLASSNAME=%25Net.DB.Iris#Function like this:Calls a function (label^routine), passing zero or more arguments and returning the function's return value. Trailing arguments may be omitted, causing default values to be used for those arguments. This method throws an exception when an error condition is encountered. routineName input The name of the routine that implements the function to be called. functionName input The name of the function to be invoked. args input... The arguments to be passed to the method. return The value returned by the functionName function. Such a misleading documentation roughly 1.5 years behind reality is not so impressive It took days to find this out. 😖
go to post Robert Cemper · Aug 4 Thank you for the explanation. @Vitaliy Serdtsev 🙂👍This matches my investigations
go to post Robert Cemper · Aug 3 quite an interesting hidden feature. Though testing with _SYSTEM/SYS and %All, this had no visible impactIt is exactly 1 method that breaks in all 4 Nativ packages And with %All the rest is available anyhow and working fine. BUT eventually %All is not All enough