John Murray · Jan 16, 2019 go to post

Sorry about that David. I've edited the post to include my email address.

John Murray · Jan 16, 2019 go to post

Yes Herman, we hope to be there. But if you'd like to get your hands on it before then please contact me as indicated above.

John Murray · Jan 15, 2019 go to post

My guess is you're not testing the SQLCODE variable's result before you try and access the KeyID host variable.

Docs here.

John Murray · Jan 14, 2019 go to post

To use our extension you have to install some code on the target server. This code works on the latest platforms (e.g. the IRIS 2018.2 Field Test container) and on versions back to well before InterSystems' Minimum Supported Version. Indeed, one of my targets is still on 2008.1.

So a single VSCode instance can connect to many different server versions.

Does that answer your question Robert?

John Murray · Dec 14, 2018 go to post

Maybe cause by some kind of fault in query caching? Please post your $ZVERSION info in case it's relevant.

John Murray · Dec 7, 2018 go to post

Are you able to share the XML export of a class definition (the simpler the better) that demonstrates this problem?

John Murray · Nov 29, 2018 go to post

I don't think you need it at all. Take it out entirely and I'm betting your page will still work.

John Murray · Nov 29, 2018 go to post

What's the purpose of the  <base href="/">  in your <head> section? And if you remove it does your problem go away?

John Murray · Nov 29, 2018 go to post

Is your Z: drive a mapped one? If so, it might not be available to the Windows user that the InterSystems background processes run as. Is your Ensemble instance running as LocalSystem (see Windows Services)?

John Murray · Nov 29, 2018 go to post

If I go to http://localhost:57772/testwebapp, I get "Not found".

Yes, this is expected. The private instance of Apache which HealthShare runs on your port 57772 isn't set up to serve 'default' page(s).

As for your relative path problem, please show us what your index.html file looks like. Simplify it if you wish, but make sure you don't fix the problem as you do so!

John Murray · Nov 22, 2018 go to post

Another reference - https://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KE…

The section headed SQLCODE is reproduced below:

SQLCODE
After running an embedded SQL Query, you must check the SQLCODE before processing the output host variables.
If SQLCODE=0 the query completed successfully and returned data. The output host variables contain field values.
If SQLCODE=100 the query completed successfully, but output host variable values may differ. Either:
  • The query returned one or more rows of data (SQLCODE=0), then reached the end of the data (SQLCODE=100), in which case output host variables are set to the field values of the last row returned. %ROWCOUNT>0.
  • The query returned no data, in which case the output host variables are undefined. %ROWCOUNT=0.
If a query returns only aggregate functions, the first FETCH always completes with SQLCODE=0 and %ROWCOUNT=1, even when there is no data in the table. The second FETCH completes with SQLCODE=100 and %ROWCOUNT=1. If there is no data in the table or no data matches the query conditions, the query sets output host variables to 0 or the empty string, as appropriate.
If SQLCODE is a negative number the query failed with an error condition. For a list of these error codes and additional information, refer to the SQLCODE Values and Error Messages chapter of the Caché Error Reference.
Depending on how Embedded SQL is invoked, you may have to NEW the SQLCODE variable before entering Embedded SQL. With trigger code, setting SQLCODE to a nonzero value automatically sets %ok to zero.
In Dynamic SQL, the corresponding %SQLCODE property returns SQL error code values.
John Murray · Nov 15, 2018 go to post

And a ZMIRROR routine is useful if you're using InterSystems mirroring and need things to happen only on the primary, for example.

John Murray · Nov 5, 2018 go to post

I suggest the following strategy:

  • Read line
  • If $Length(line,"""")#2=1 then you have a complete CSV line (an even number of doublequotes)
  • Otherwise read line2 and append it to line. Repeat this until $Length(line2,"""")#2=1. If you reach the end of the file before this happens, the CSV source is malformed.

In the above algorithm you may want to cater for the case where concatenation of consecutive lines would exceed the maximum local string length.

John Murray · Nov 5, 2018 go to post

Mack, can you give me an example of the kind of CSV line that you mean here?

John Murray · Nov 2, 2018 go to post

My proposal:


USER>w csv
ABC Company,"123 Main St, Ste 102","Anytown, DC",10001,234-567-8901
USER>s i=0
 
USER>f  s i=$f(csv,",",i) q:'i  i $l($e(csv,1,i-2),"""")#2 s $e(csv,i-1)=$c(9)
 
USER>w csv
ABC Company     "123 Main St, Ste 102"  "Anytown, DC"   10001   234-567-8901
USER>

Without abbreviations:


USER>write csv
ABC Company,"123 Main St, Ste 102","Anytown, DC",10001,234-567-8901
USER>set i=0
 
USER>for  set i=$find(csv,",",i) quit:'i  if $length($extract(csv,1,i-2),"""")#2 set $extract(csv,i-1)=$char(9)
 
USER>write csv
ABC Company     "123 Main St, Ste 102"  "Anytown, DC"   10001   234-567-8901
USER>
John Murray · Oct 29, 2018 go to post

How about this?

SAMPLES>s sc=$system.OBJ.Export("/csp/samples/*.csp","c:\s\junk.xml","/recursive=1")
 
Exporting to XML started on 10/29/2018 09:36:31
Exporting CSP/CSR or file: /csp/samples/basic.csp
Exporting CSP/CSR or file: /csp/samples/cinema/Cinema.csp
Exporting CSP/CSR or file: /csp/samples/cinema/Film.csp
Exporting CSP/CSR or file: /csp/samples/cinema/LoadData.csp
Exporting CSP/CSR or file: /csp/samples/cinema/Order.csp
Exporting CSP/CSR or file: /csp/samples/cinema/Search.csp
Exporting CSP/CSR or file: /csp/samples/cinema/SearchResults.csp
Exporting CSP/CSR or file: /csp/samples/cinema/ShowTimes.csp
Exporting CSP/CSR or file: /csp/samples/cinema/TopPicks.csp
Exporting CSP/CSR or file: /csp/samples/context.csp
Exporting CSP/CSR or file: /csp/samples/cookie.csp
Exporting CSP/CSR or file: /csp/samples/custom.csp
Exporting CSP/CSR or file: /csp/samples/error.csp
Exporting CSP/CSR or file: /csp/samples/expires.csp
Exporting CSP/CSR or file: /csp/samples/form.csp
Exporting CSP/CSR or file: /csp/samples/formsubmit.csp
Exporting CSP/CSR or file: /csp/samples/include.csp
Exporting CSP/CSR or file: /csp/samples/includedpage.csp
Exporting CSP/CSR or file: /csp/samples/inspector.csp
Exporting CSP/CSR or file: /csp/samples/iterate.csp
Exporting CSP/CSR or file: /csp/samples/language.csp
Exporting CSP/CSR or file: /csp/samples/logerror.csp
Exporting CSP/CSR or file: /csp/samples/loop.csp
Exporting CSP/CSR or file: /csp/samples/lottery.csp
Exporting CSP/CSR or file: /csp/samples/lotteryend.csp
Exporting CSP/CSR or file: /csp/samples/lotteryhistory.csp
Exporting CSP/CSR or file: /csp/samples/lotteryjoin.csp
Exporting CSP/CSR or file: /csp/samples/lotterymain.csp
Exporting CSP/CSR or file: /csp/samples/lotterymenu.csp
Exporting CSP/CSR or file: /csp/samples/menu.csp
Exporting CSP/CSR or file: /csp/samples/object.csp
Exporting CSP/CSR or file: /csp/samples/popform.csp
Exporting CSP/CSR or file: /csp/samples/private.csp
Exporting CSP/CSR or file: /csp/samples/protected.csp
Exporting CSP/CSR or file: /csp/samples/protectedentry.csp
Exporting CSP/CSR or file: /csp/samples/query.csp
Exporting CSP/CSR or file: /csp/samples/redirect.csp
Exporting CSP/CSR or file: /csp/samples/rulemgr.csp
Exporting CSP/CSR or file: /csp/samples/serversideredirect.csp
Exporting CSP/CSR or file: /csp/samples/sessionevents.csp
Exporting CSP/CSR or file: /csp/samples/showsource.csp
Exporting CSP/CSR or file: /csp/samples/soapdemo.csp
Exporting CSP/CSR or file: /csp/samples/staticsql.csp
Exporting CSP/CSR or file: /csp/samples/streamserve.csp
Exporting CSP/CSR or file: /csp/samples/submit.csp
Exporting CSP/CSR or file: /csp/samples/svgdemo.csp
Exporting CSP/CSR or file: /csp/samples/testerror.csp
Exporting CSP/CSR or file: /csp/samples/textinclude.csp
Exporting CSP/CSR or file: /csp/samples/upload.csp
Exporting CSP/CSR or file: /csp/samples/wapzipcode.csp
Exporting CSP/CSR or file: /csp/samples/while.csp
Exporting CSP/CSR or file: /csp/samples/xmlclasses.csp
Exporting CSP/CSR or file: /csp/samples/xmlclasseserror.csp
Exporting CSP/CSR or file: /csp/samples/xmlclassesresult.csp
Exporting CSP/CSR or file: /csp/samples/xmlimport.csp
Exporting CSP/CSR or file: /csp/samples/xmlquery.csp
Exporting CSP/CSR or file: /csp/samples/xmlqueryresult.csp
Exporting CSP/CSR or file: /csp/samples/zipcode.csp
Export finished successfully.
 
SAMPLES>

John Murray · Oct 26, 2018 go to post

No, according to my tests the %qarfunc routine is available in all namespaces. It comes from the CACHELIB / IRISLIB database. But I think it's a remnant of an ancient InterSystems tool called M/SQL, so I wouldn't recommend starting to rely on it in new code you're writing.

John Murray · Oct 25, 2018 go to post

My guess is that those absolute paths are being specified by your CSP application, so need to be changed so they become relative.

Presumably the CSP app is already working when accessed from a webserver that's on the same computer as your Cache server, right?

John Murray · Oct 25, 2018 go to post

AFAIK, freezing and thawing is system-wide. It can't be done on a per-database level.

I'm not aware of any REST APIs being available 'out of the box' for Backup.General. But in any case it'd be useful to know what the $ZVERSION string is for the Cache instance(s) you're dealing with.

John Murray · Oct 23, 2018 go to post

Here's one way, which uses $JUSTIFY to add leading spaces, then $TRANSLATE to convert these to zeroes:

USER>s number=1

USER>w $tr($j(number,4)," ","0")
0001
USER>