go to post Alexander Koblov · Jun 2, 2017 I'm not aware of such global setting. If you want to prevent legacy Caché ObjectScript application with direct global access to see not-committed data, then you need to implement proper locking in that application. Starting READ COMMITTED transaction in that process will not help as this does not affect the code that modifies globals directly.
go to post Alexander Koblov · Jun 1, 2017 Hi P. Check for $d(^Vehicle(unitNumber)) in your sample is not right -- process in transaction can always read data that it has changed. Starting transaction in READ COMMITTED mode means that this transaction cannot read data modified by other transactions but not commited yet (provided other transaction properly locks the data). It does not restricted other processes from reading data changed by this transaction, unless a) Other process also starts transaction in READ COMMITED mode OR b) Other process acquires the lock for the global node that is modified by current process. So, if legacy Caché ObjectScript code does not use locks you cannot prevent it from reading your uncommited data. If legacy Caché ObjectScript uses locks then you need acquire these locks before inserting the rows into Vehicle.* tables. Transaction isolation in Caché is implemented using locks. When you modify data using SQL or Object-access Caché acquire locks for you, unless you explicitely say not to do this. Please see following documentation for more information on locking and concurrency in globals, Objects and SQL "Locking and Concurrency control" http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=... "Modifying the Database" http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=... Hope this explains things a little more, Alexander.
go to post Alexander Koblov · May 31, 2017 Oh. OK. (PUBLIC=1) in this case is related to %ListOfObjects return class, not the method itself. Although, it's the question of how developer interpret this parameter.
go to post Alexander Koblov · May 31, 2017 You can add extra parameters for all properties of particular class using PropertyClass keyword http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=... This does not apply to methods though...
go to post Alexander Koblov · May 31, 2017 Hi Sean. This looks interesting. Why do you prefer annotations style instead of standard Caché attribute style for properties? I mean /// @JSONNAME=BirthDate Property DateOfBirth As %Date; Instead of Property DateOfBirth As %Date(JSONNAME = "BirthDate"); Thank you, Alexander.
go to post Alexander Koblov · May 25, 2017 Process monitor is useful tool in these cases (https://technet.microsoft.com/en-us/sysinternals/processmonitor.aspx). Process monitor shows directories where zlib1.dll is searched for. So you can check if zlib1.dll is searched in <cache-dir>\bin.
go to post Alexander Koblov · May 25, 2017 You can use <csp:class includes='...'> ? http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=...
go to post Alexander Koblov · Apr 6, 2017 For debugging purposes? CSP Gateway trace is good. Also, there are different verbose levels of CSP Gateway log. Particularly, notice v9 level. http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=...
go to post Alexander Koblov · Mar 24, 2017 Hi Amir. Some of items you mentioned are already in Atelier Support for using Studio wizards of a specific sever connection. Go to File -> New -> Other. Then Atelier -> New File -> Custom File. Choose connection and pick Server-side template. Also you can go to Tools-> Add-Ins or Tools -> Templates and run good old Studio Add-Ins or Templates Support for seeing a CSP page (like when we click on the globe icon and the CSP page opens) Hm, there is already globe icon on Atelier toolbar that opens CSP page. The 6th in that list http://docs.intersystems.com/atelier/latest/topic/com.intersys.eclipse.h... Support for seeing the other The 5th in that list http://docs.intersystems.com/atelier/latest/topic/com.intersys.eclipse.h... GitHub and CRLF / LF As I understand this configuration should be done on EGit side, by setting core.autocrlf = true for Windows installations. http://mike.meessen.biz/blog/?p=368
go to post Alexander Koblov · Mar 23, 2017 Or TO_CHAR. Depending if you need convert string -> date (TO_DATE) or date -> string (TO_CHAR)
go to post Alexander Koblov · Mar 16, 2017 Cool! It would be great to show articles only for particular Author in Article dropdown list once the Author is chosen.
go to post Alexander Koblov · Mar 15, 2017 I think you can construct pKey as $ListBuild of different values and parse them back in LoadForm. I don't think it's possible to add other parameters to LoadForm callback
go to post Alexander Koblov · Mar 10, 2017 At least please notice that Caché ObjectScript does not have operator precedence. Instead of if (c >= 128 && c <= 255) { you should write if (c >= 128) && (c <= 255) { the same with s:(c >= 128 && c <= 255) retval=$lg(map,(c-128))
go to post Alexander Koblov · Feb 6, 2017 Java binding is deprecated. http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=...
go to post Alexander Koblov · Feb 3, 2017 ^%SYS.MONLBL is a great tool for profiling: http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=...
go to post Alexander Koblov · Jan 31, 2017 First of all, this is bad sample of GROUP BY query, in my opinion: SELECT c1, c2 FROM table2 GROUP BY c1 You are grouping by c1, but also selecting c2. GROUP BY collects all rows with the same c1 into one row. Each group of row with the same c1 might have different values of c2. What particular value of c2 you want to get? Generally, if you query contains GROUP BY, SELECT should contain either expressions from GROUP BY, or aggregate functions. For example, following query is OK: SELECT c1, max(c2) FROM table2 GROUP BY c1 Having said all that, you might try to concatenate column1 and columnn2 SELECT column1, column2, column 3 FROM table WHERE column1 || '===' || columnn2 IN (SELECT c1 || '===' || c2 FROM table2 GROUP BY c1) ORDER BY column1 provided that values in these columns do not contain '===' Another possibility is: SELECT column1, column2, column 3 FROM table T1 WHERE EXISTS (SELECT 1 FROM table2 T2 WHERE T2.c1 = T1.column1 AND T2.c2 = T1.column2) ORDER BY column1 I think GROUP BY is not necessary in second case.
go to post Alexander Koblov · Jan 26, 2017 Hi Token. As I understand XML you provided in the beginning is the response to the SOAP request you are doing. If that's correct, than this response is not validated with XML Schema from provided WSDL. You should check with developers who maintain this SOAP service if WSDL you have is correct. Also you might try to change Parameter NAMESPACE = "http://192.96.222.19/"; in Class Data.SOAP.CardData to Parameter NAMESPACE = "http://111.12.123.11/"; Even if this helps, this would be temporary solution for one particular request, other might fail if you have not-correct WSDL.
go to post Alexander Koblov · Jan 25, 2017 Hi Token. a) Please notice, WSDL that you provided is not correct. For example, try to validate it in https://www.wsdl-analyzer.com/. Or, download SOAP UI and try to create SOAP project based on this wsdl. You'll see errors. I've tried to import this WSDL into 2012.2.5 and got following error: ERROR #6294: Cannot find message part in schema: Classname not found for http://halykws/::GetContractsExt b) Version you have is almost 7 years old. Please consider upgrading. Cache for UNIX (Red Hat Enterprise Linux 5 for x86-64) 2010.1.2 (Build 600U) Mon May 10 2010 23:28:54 EDT c) If you need further help with this, please open WRC issue. In any case, first thing you need to do is to have valid WSDL.
go to post Alexander Koblov · Jan 24, 2017 Hi Token. Can you please attach complete wsdl and provide version of Caché that you use ('write $zversion'). Did you use SOAP Client Wizard to generate SOAP client classes from WSDL?
go to post Alexander Koblov · Jan 24, 2017 Hi Thomas. Supported platforms for 2017.1 (http://docs.intersystems.com/documentation/ISP/ISP-20171.pdf#ISP_platfor...) lists 'Ubuntu 16.04 LTS for x86-64*' as server platform, so maybe there should be separate kit for Ubuntu, not Suse one.