go to post Vitaliy Serdtsev · Jan 16, 2019 if I call giveMeAFalseMe from Cache when it's returning "true" or "false", Cache will translate "true" into a truthy %Boolean return value, right? No, it does zenBool, which is on the client side. The important thing is that #server()# always returns a string, for example: <script language="cache" method="giveMeAFalse" arguments="" procedureblock='1' returntype="%Integer">return 4</script> var bool = #server(..giveMeAFalse())#; console.log("bool = " + bool); console.log("typeof bool = ", typeof bool); Result: bool = 4 typeof bool = string PS: you can further explore the sources of the #server()# -> cspHttpServerMethod() -> cspProcessResponse(), which are in the file cspxmlhttp.js.
go to post Vitaliy Serdtsev · Jan 15, 2019 See zenConvertType() [///Converts a typed value returned from the server to an appropriate JS type] from zenutils.js. Try this: <script src="zenutils.js"></script> <script language="javascript"> function isItActuallyFalse() { var bool = zenConvertType('BOOLEAN',#server(..giveMeAFalse())#); ... } </script> <script language="cache" method="giveMeAFalse" arguments="" returntype="%Boolean" procedureblock='1'>return $$$NO</script>or var bool = zenBool(#server(..giveMeAFalse())#); ... <script language="cache" method="giveMeAFalse" arguments="" returntype="%Boolean" procedureblock='1'>return "false"</script>
go to post Vitaliy Serdtsev · Dec 31, 2018 s tags=$lb("a","b","c"), str="c,a1,d,b,f" s l=$lfs(str),ptr=0 while $listnext(tags,ptr,tag) { w:$lf(l,tag) tag,! }Result b c
go to post Vitaliy Serdtsev · Dec 18, 2018 Source code of class %Net.Remote.Utility is open, so you can use it to make your "RunCommandViaCPIPE" method and already use it. PS: it's just a wrapper around low-level commands, see Local Interprocess Communication.
go to post Vitaliy Serdtsev · Nov 2, 2018 No. If you beware to use %occLibrary, you may look into side %Regex.Matcher Here is another documented solution: #include %systemInclude n try{ #define TAB $c(9) s csv="""ABC,"_$c(10)_" Company,"",""123 Main St, Ste 102"",""Anytown, DC"",10001,234-567-8901,""Anytown"_$$$TAB_"DC""" d ##class(%DeepSee.TermList).%ParseCSVRecord(csv,.arr) w csv,!!,$$WriteCSVRecord(.arr,$$$TAB) }catch(ex){ w "Error ", ex.DisplayString(),! } WriteCSVRecord(&pRecord, pDelim=",", pEncode=$$$YES) { // made on the basis of the method %WriteCSVRecord Set r = "" Set k = $O(pRecord("")) While (k'="") { Set tValue = $G(pRecord(k)) Set:$G(pEncode) tValue = $ZCVT(tValue,"O","UTF8") Set r = r _ $S((tValue["""")||(tValue[",")||(tValue[pDelim):$$$quote(tValue),1:tValue) Set k = $O(pRecord(k)) Set:k'="" r = r _ pDelim } Quit r }Result: USER>d ^dc "ABC, Company,","123 Main St, Ste 102","Anytown, DC",10001,234-567-8901,"Anytown DC" "ABC, Company," "123 Main St, Ste 102" "Anytown, DC" 10001 234-567-8901 "Anytown DC"
go to post Vitaliy Serdtsev · Nov 1, 2018 #include %systemInclude s csv="ABC Company,""123 Main St, Ste 102"",""Anytown, DC"",10001,234-567-8901" s list=$$CSVtoList^%occLibrary(csv) f i=1:1:$ll(list) s:$li(list,i)["," $li(list,i)=$$$quote($li(list,i)) w csv,!,$lts(list,$c(9))Result: USER>d ^test ABC Company,"123 Main St, Ste 102","Anytown, DC",10001,234-567-8901 ABC Company "123 Main St, Ste 102" "Anytown, DC" 10001 234-567-8901
go to post Vitaliy Serdtsev · Nov 1, 2018 Maybe the name of the topic to specify a CSV-string instead of string ? After clarification, the question became more clear.
go to post Vitaliy Serdtsev · Nov 1, 2018 I was looking at the generated INT code for &sql(select lpad('1',4,'0') n) Unfortunately, for COS at the moment I have not found an analogue LPADSQL. Can you offer a documented LPADCOS ?
go to post Vitaliy Serdtsev · Oct 30, 2018 Once upon a time promised to make Server-Side JavaScript alongside with Caché ObjectScript and Caché Basic: JavaScript: Not Just a Client-side Language Tuesday, 10:15 AM Technical level: Advanced Mobile and browser-based applications frequently use JavaScript for their user interfaces. We are working towards implementing JavaScript as one of our server-side scripting languages, thereby allowing developers to use it throughout their applications. In this session we will demonstrate our progress to date. Keywords: Mastering Mobile, Caché, Ensemble, concurrent Server-Side JavaScript Monday, 4:00 PM – 4:45 PM, FLW Ballroom H Wednesday, 11:00 AM – 11:45 AM, FLW Ballroom H Presenter: Steve LeBlanc Task: Use JavaScript to define business logic for applications based on InterSystems’ technology Approach: Leverage InterSystems’ new support for server-side JavaScript Tags: JavaScript I found a JS Runtime Shell that uses Node.JS & esprima: SAMPLES>d ##class(%CPT.JS.Runtime.Shell).Run() JRS> ? .L CLASS - load javascript methods from CLASS into JS global namespace .LV var,.. - load the given COS public vars into JS global namespace .S FUNC - list the source of the method which implements function FUNC - FUNC must be in the global namespace - the whole implementing method is shown, even for an inner function - this will also work for non-javascript methods .M - list MAC code from latest compilation .I - list INT code from latest compilation .T - show latest tree .G - list global symbols .N CODE - execute JS on node.js .N - execute the last-entered line of JS on node.js .CONFIG ... - passed to %CPT.CalloutShell 'CONFIG' command .SET ... - passed to %CPT.CalloutShell 'SET' command .CLEAR ... - passed to %CPT.CalloutShell 'CLEAR' command .SHOW ... - passed to %CPT.CalloutShell 'SHOW' command !COS - execute a line of COS Anything else is interpreted as JS. :- * if preceded by "=" it must be a single function definition * otherwise it can be either a single expression or a sequence of statements separated by ";"s Either way it will be compiled into a function body and :- * if preceded by "==" it is stored as a JS global with the new function's name * otherwise it will just be executed \n can be used to represent a newline. You can also take input from a file :- <FILE - read JS from FILE and compile+execute it <=FILE - read JS from FILE and compile+store it The result of the execution is shown and also stored in global variable '_'. For a global variable, set it without using 'var' (this will be fixed) JRS> .N var obj = { name: "John", age: 30, city: "New York" }; JSON.stringify(obj); {result: "{""name"":""John"",""age"":30,""city"":""New York""}"} JRS> .N Math.random() {result: .5670654247514904} JRS> .N var fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.sort(); {result: ["Apple", "Banana", "Mango", "Orange", 1: "Apple", 2: "Banana", 3: "Mango", 4: "Orange"]} JRS> q SAMPLES>
go to post Vitaliy Serdtsev · Oct 30, 2018 If you do universal LPAD, it is best $$lpad^%qarfunc, because for certain arguments may produce an incorrect result, for example: #define lpad(%s,%len,%pad) $tr($j(%s,%len)," ",%pad) s s="a b",len=8,pad="0" w $$$lpad(s,len,pad),! ,$$lpad^%qarfunc(s,len,pad),! ,$$$lpad(s,len,s),! ,$$lpad^%qarfunc(s,len,s),!Result: USER>d ^test 00000a0b 00000a b aaaaaaab a ba a b
go to post Vitaliy Serdtsev · Oct 29, 2018 Also LPADSQL USER>d $system.SQL.Shell() SQL Command Line Shell ---------------------------------------------------- The command prefix is currently set to: >. Enter q to quit, ? for help. USER>>select lpad('1',4,'0') n 1. select lpad('1',4,'0') n n 0001 1 Rows(s) Affected
go to post Vitaliy Serdtsev · Oct 29, 2018 The functions from %qarfunc are actively used in system classes, so I don't think ^%qarfunc will be removed in the near future, otherwise everything will stop working.
go to post Vitaliy Serdtsev · Oct 29, 2018 See: Implied Namespace Mapping What Is Accessible in Your Namespaces
go to post Vitaliy Serdtsev · Oct 19, 2018 Try ClientMethod changeParams() [ Language = javascript ] { var query = zen('categorieBeneficiaire'); var param1 = zen('catBParam1'); var param2 = zen('catBParam2'); param1.value='OS'; param2.value='NSAL'; query.refreshContents(); } /// This client event, if present, is fired when the page is loaded. ClientMethod onloadHandler() [ Language = javascript ] { zenPage.changeParams(); }
go to post Vitaliy Serdtsev · Oct 9, 2018 You don't need anything else to work with globals directly: Using the Globals API. See the code examples in <install-dir>\dev\dotnet\samples\globals