go to post Timothy Leavitt · Jul 20, 2016 If you're running on Caché 2016.1, the new JSON/Dynamic Object capabilities might help - see: https://community.intersystems.com/post/introducing-new-json-capabilitie...
go to post Timothy Leavitt · Jul 14, 2016 Another option might be "View Other":If ClassA generates ClassB and sets GeneratedBy = ClassA.CLS, then ClassB will show up under "View Other" for ClassA. (Studio works the same way.)
go to post Timothy Leavitt · Jul 10, 2016 This is a good use case for HAVING. Using Sample.Person as an example, the following queries are equivalent: SELECT a.Age,A.Name FROM Sample.Person a LEFT JOIN Sample.Person b on a.home_state = b.home_state and a.DOB < b.DOB WHERE b.ID is null Implemented with HAVING: SELECT Age,Name FROM Sample.Person GROUP BY Home_State HAVING Age = MIN(Age) The second is much more intuitive, and runs significantly faster too. I suspect your query would be expressed as: SELECT * FROM client_address GROUP BY client_id HAVING date_updated = MIN(date_updated)
go to post Timothy Leavitt · Jun 27, 2016 $get does what you're looking for. Note that it's 0-based, like JavaScript: USER>set arr = [1,2,3] USER>w arr.$get(0) 1 USER>w arr.$get(2) 3
go to post Timothy Leavitt · Jun 24, 2016 Yes: USER>set objFromJSON = {}.$fromJSON("{""a"":""1""}") USER>w objFromJSON.a 1
go to post Timothy Leavitt · Jun 17, 2016 The business operation's "Archive I/O" setting might do what you want, depending on what messages you're passing around. This will add some extra things to the message trace showing what the input to services or the output from operations is.You can enable I/O archiving in the business operation's settings on the production configuration page, at the end of the "Development and Debugging" section.
go to post Timothy Leavitt · Jun 16, 2016 Methods in Zen classes declared with "Method" or "ClassMethod" are all server-side. These may also have the ZenMethod keyword, which allows them to be called from javascript (e.g., zenPage.MethodName().)If you want to have a JavaScript method in a Zen class, the method should be declared as a ClientMethod with [Language = javascript].A useful convention you'll see in %ZEN is that server-side, non-ZenMethods have names starting with %, ZenMethods (Methods or ClassMethods with the ZenMethod keyword) start with capital letters, and ClientMethods start with lower case letters. It's useful to follow the same convention when you build your own Zen pages.
go to post Timothy Leavitt · Jun 16, 2016 Your last example is really close - probably just the typo in the component ID that's the problem. Class DC.ZenRadioOnLoad Extends %ZEN.Component.page { /// This XML block defines the contents of this page. XData Contents [ XMLNamespace = "http://www.intersystems.com/zen" ] { <page xmlns="http://www.intersystems.com/zen" title=""> <radioSet id="appRadio" name="appRadio" displayList="App One,App Two,App Three" valueList="One,Two,Three" /> </page> } /// This callback is called after the server-side page /// object and all of its children are created.<br/> /// Subclasses can override this to add, remove, or modify /// items within the page object model, or to provide values /// for controls. Method %OnAfterCreatePage() As %Status { Set ..%GetComponentById("appRadio").value = "Three" Quit $$$OK } }
go to post Timothy Leavitt · Jun 14, 2016 You could always use process private globals instead of local variable names if you want to avoid collisions in local variable names. ClassMethod GetVariables() As %List { Set ^||VariableNameList = "" Set ^||VariableName = "" Set ^||VariableName = $Order(@^||VariableName) While (^||VariableName '= "") { Set ^||VariableNameList = ^||VariableNameList_$ListBuild(^||VariableName) Set ^||VariableName = $Order(@^||VariableName) } Quit ^||VariableNameList } This might do some things you don't expect depending on variable scope, though - possibly relevant depending on the use case you have in mind. Class Demo.Variables { ClassMethod OuterMethod() { Set x = 5 Do ..InnerMethod() } ClassMethod InnerMethod() [ PublicList = y ] { Set y = 10 Write $ListToString(..GetVariables()) } ClassMethod NoPublicListMethod() { Set y = 10 Write $ListToString(..GetVariables()) } ClassMethod GetVariables() As %List { Set ^||VariableNameList = "" Set ^||VariableName = "" Set ^||VariableName = $Order(@^||VariableName) While (^||VariableName '= "") { Set ^||VariableNameList = ^||VariableNameList_$ListBuild(^||VariableName) Set ^||VariableName = $Order(@^||VariableName) } Quit ^||VariableNameList } } Results: SAMPLES>kill set z = 0 d ##class(Demo.Variables).OuterMethod() y,z SAMPLES>kill set z = 0 d ##class(Demo.Variables).NoPublicListMethod() z
go to post Timothy Leavitt · Jun 9, 2016 If you specified credentials during installation and don't remember them, you can use this process to get to the terminal prompt: http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=... After starting in emergency access mode, you can run the command: Do ^SECURITY And navigate through the prompts to see what users there are and change the password of one so you can log in.
go to post Timothy Leavitt · Jun 8, 2016 That's odd - something may have gone wrong with your build. (This is an internal issue.)You can remove/change the "Source Control" class for the namespace in Management Portal:Go to System Administration > Configuration > Additional Settings > Source Control, select the proper namespace, select "None," and click "Save."
go to post Timothy Leavitt · Jun 7, 2016 The class you listed fails for me too, but it's because there's no package name, not because of the bracket mismatch. In Atelier, the class name gets an error marker: If I change it to: class somepackage.myclass { //if someVar { } Then the file will happily sync and compile. If adding the package doesn't fix things, it would be helpful to know what Atelier and Caché versions you're using.
go to post Timothy Leavitt · Jun 2, 2016 Export with File > Export > General > Preferences; check "Keys Preferences" (which only appears if you've customized any preferences)Import with File > Import > General > Preferences; select file then check "Keys Preferences"See: http://stackoverflow.com/questions/481073/eclipse-keybindings-settingsIt seems that the CSV export from Window > Preferences, General > Keys, Export CSV ... doesn't have a corresponding import feature.
go to post Timothy Leavitt · Jun 2, 2016 I think you're probably looking for the maxRows attribute of jsonSQLProvider, which defaults to 100 (hence 5 pages with page size 20, in the example) - try something like: <jsonSQLProvider id="json" OnSubmitContent="SubmitContent" targetClass="%ZEN.proxyObject" sql="select ID,Name,DOB,SSN from sample.person order by name" maxRows="1000" />
go to post Timothy Leavitt · Jun 1, 2016 Ensemble has a nice utility for this - see the class reference for Ens.Util.HTML.Parser.
go to post Timothy Leavitt · Jun 1, 2016 Ah - yes, a number of things log to ^%ISCLOG. It's very important to set ^%ISCLOG = 0 at the end to keep it from continuing to record. The command I mentioned previously is an easy way to make sure that you're only logging for a brief period of time - paste the command into Terminal and hit enter to start logging, then load the page, then hit enter in Terminal to stop logging. Still, there could be lots of other stuff in there even from having it enabled briefly depending on how busy the server is.It might make sense for you to contact InterSystems' outstanding Support department - someone could work through this with you directly and help you find a solution more quickly.
go to post Timothy Leavitt · May 31, 2016 The port isn't part of the debug target - that's configured as part of the remote/local server definition in the cube (in the system tray).Since the page works with ?CSPDEBUG removed, it'd be interesting to see ^%ISCLOG or if there are any interesting events (e.g., <PROTECT>) recorded in the audit database.
go to post Timothy Leavitt · May 31, 2016 A few questions: If you open the same URL without the CSPDEBUG URL parameter, what happens?Does /namehere/package.home.cls work as a debug target?Is the webserver port correct for IIS, or are you using a private webserver that isn't enabled? (The webserver port Studio uses can be changed in the Cube under Preferred Server > Add/Edit...)Does the audit database show anything odd? For troubleshooting CSP issues (although more often on InterSystems' side than in application code), ISCLOG can be helpful. For example, run the following line in terminal: kill ^%ISCLOG set ^%ISCLOG = 3 read x set ^%ISCLOG = 0 Then make whatever HTTP request is causing an error, then hit enter in terminal (to stop logging), then: zwrite ^%ISCLOG There might be a lot of noise in there, but also possibly a smoking gun - a stack trace from a low-level CSP error, an error %Status from something security-related, etc.
go to post Timothy Leavitt · May 31, 2016 In Studio, choose Debug > Debug Target... and enter the URL you want to debug, including CSP application - e,g,, /csp/samples/ZENDemo.MethodTest.cls. Put a breakpoint in the method you want to debug. Click Debug > Go. That should do it.See: http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=GSTD_Debugger#GSTD_C180276