go to post Ben Spead · Oct 28, 2020 In that case I can't see how a 1.4 sec query could trigger any sort of timeout from a CSPGateway perspective. I think you have something else going on - maybe an uncaught error in your code?
go to post Ben Spead · Oct 28, 2020 Phuc, Assuming the SQL is being run synchronously from within the CSP page, then the page will not be able to send it's response to the client while it waits for the SQL to complete. Are you saying that the average response time of the query is 1.4 minutes? If so then I think you need to see if you can speed up your query, call for the data asynchronously, or change your CSPGateway configuration so it has a longer timeout.
go to post Ben Spead · Oct 22, 2020 @ZengSheng Niu - do you have a Support contract? If you think you should have access and do not, I suggest you call Support to get your account enabled: https://www.intersystems.com/support-learning/support/
go to post Ben Spead · Oct 5, 2020 You can get a Community Edition of InterSystems IRIS as Evgeny suggested, or if you need a new developer license for your Caché instance you should work with your Account Manager to get one. If you are not sure who your account manager is, contact the WRC who should be able to help direct you.
go to post Ben Spead · Sep 21, 2020 I agree with both Tim and Evgeny. In addition, I will add that we also store our unit tests in a different location, which has a top level of /internal for all of our in-house applications. We store unit tests and test data in /internal so our integration scripts can explicitly ignore changes in those branches when we're porting things to our LIVE branch. This ensures that no testing code or testing data ever make it into production.
go to post Ben Spead · Sep 15, 2020 @Perla Escarcega - that is one of the ways to do a Refresh, yes. You need to first populate all files in your Source Workspace, and then the Refresh will walk the directory contents and load everything in. More details can be found on slides 43-45 of ICC520: ftp://ftp.intersystems.com/isc/customers/ccrtraining/ICC520(Presentation)%20CCR%20Tier%201%20-%20Baselining%20Source%20Code.pdf
go to post Ben Spead · Sep 14, 2020 @Perla Escarcega - taking a closer look at this, I think we had an issue with a historical file clean-up routine which was a little too overeager to reclaim space. All of your source is safe and available but you may need to create a fresh ItemSet to push this source. Note - you should always be making fresh ItemSets anyway because the head revision may be newer than what is in your historical ItemSet, and you don't want to get an older revision of something which breaks when interacting with a newer revision of other items. So simply create a new ItemSet for BASE and deploy it and you should be all set. P.S. This does raise the question of why you are initializing a new Secondary BASE environment from old ItemSets as opposed to just grabbing the head revision of the BASE source and running Refresh to pull it all into the Namespace? I am afraid your approach may be significantly more risky than the recommended approach.
go to post Ben Spead · Sep 14, 2020 Actually - I take back my statement now that I looked at the error more closely. It appears as though it's trying to fetch an ItemSet by ID that doesn't actually exist. What is the CCR in question?
go to post Ben Spead · Sep 14, 2020 @Perla Escarcega - the fact that it is already in LIVE should not have any bearing here. I am guessing that the newly created Namespace is part of a newly created instance? It looks like you may have an older version of the CCR Client Tools with a bug in it. Could you provide the results of "Do Version^%buildccr" so we can see what versions of the tools you are running?
go to post Ben Spead · Sep 11, 2020 I hope that someone else can chime in and confirm, but my understanding is that we don't release Caché on containers, only InterSystems IRIS containers (I just looked in the Distributions section of the WRC to confirm). However, you should be able to get a InterSystems IRIS container to play with so this shouldn't be a blocker for you - just grab an InterSystems IRIS container (available via the WRC Distributions page, or Docker Hub) and use that to try the demo. In terms of Caché on containers, I know that there are people in the community who have 'rolled their own', and you can find details on threads here, but I don't think you want to go in that direction if you're new with containers. HTH - good luck! Ben
go to post Ben Spead · Sep 11, 2020 I need to defer to @Sergei.Shutov for many of the answers but I can help with one of these:[quote] - General web application question for Cache/IRIS: once I create the web application for example at \csp\mxdtest, any subfolder there is treated as part of the app, yes? So i could create C:\InterSystems\Cache\CSP\mxdtest\images and the images folder are part of the web applcation \csp\mxdtest? [/quote] Yes, that is correct. Your subfolders under the root should be navigable via the CSP application. NOTE - I think this can be overridden by web server settings, but this is the default behavior and I leverage it frequently for my apps
go to post Ben Spead · Sep 11, 2020 I will admit - I was taken by how persuasive the tone was and was planning a rebuttal until I got to the last paragraph. Well done Igor :)
go to post Ben Spead · Sep 1, 2020 @sjbttt sjbttt - it sounds like you want to set up source control which controls this Readonly property on the server, is that correct? If that is the case, then you will need to use server-side source control hooks. https://cedocs.intersystems.com/latest/csp/docbook/Doc.View.cls?KEY=GSTD_Hooks would be a good place to start understanding how to manage this in general. For your specific question, the way we force classes to be read-only with our source control hooks is via the GetStatus() method which should be extended from the %Studio.SourceControl.Base subclass of your hooks (see https://cedocs.intersystems.com/latest/csp/documatic/%25CSP.Documatic.cls?APP=1&CLASSNAME=%25Studio.SourceControl.Base). This method returns an "Editable" property which your hooks control and which can be used to force the IDE (Studio, Atelier or VSCode) to treat the file as Readonly, thereby preventing users from changing it. In our development workflow, we will force the class to be Readonly in the following situations: The user does not have it checked out A different user has it checked out The entire namespace has source locked (e.g. for non-development environments) It is mapped from another namespace (we manage our source branches based on Namespace so we treat a read-only those things which are not in the current Namespace Hope this is helpful.
go to post Ben Spead · Jul 1, 2020 @Jeffrey Drumm - please see the article on how InterSystems IRIS will be released: https://community.intersystems.com/post/new-release-cadence-intersystems-irisThis may help to clear up some confusion.
go to post Ben Spead · Jun 24, 2020 That may be the cleanest you can get it, unless you know that the methods are always Classmethods of the class you are calling in which case you don't need to send $classname() every time. But sending it does allow for the generalized use-case of calling to different classes. I was playing around to programmatically figure out how many argument a method accepts using %Library.ClassDefinition, however I just realized that if $classmethod() can't accept variable argument quantities than this doesn't help at all and you'd still end up with the approach that you have above. It may be worth a note to the WRC to ask for an enhancement to $classmethod() (unless someone chimes in here to say that there is a way to pass a variable number of arguments to it)
go to post Ben Spead · Jun 24, 2020 I think you could generalize the sample I pasted about which uses $classmethod but passing in a collection of some sort with the Method name as the first item and the arguments for the method as additional items and then iterate through that. It could be a $LB of $LBs or a JSON object. It would be easier if there was a set number of arguments that were allowed. This approach is probably a little safer than the use of Exceute.
go to post Ben Spead · Jun 24, 2020 Not sure what you mean by occurring before and after. However, you could pass the name of the method and then execute it using $ClassMethod within MethodA() Something like: Do ..MethodA("Method1","var","Method2",0) MethodA {method1, arg1, method2, arg2) { Do $classmethod($classname(),method1,arg1) Do $classmethod($classname(),method2,arg2) } But again, I am not entirely sure what you want to accomplish here....
go to post Ben Spead · Jun 18, 2020 Thanks for taking a look at the post Julius. He tagged the post with "CCR" which means it is referring to the toolset used by InterSystems and partners for implementing HS and TrakCare systems: https://community.intersystems.com/tags/ccr