go to post Eduard Lebedyuk · Oct 10, 2017 Not sure about delegated authentication (is it only delegated? Or with password? Details may vary depending on your exact setup), but for password authenticated web application SSO is possible by following these steps (originally written for CSP+REST web apps, but the idea is the same):All brokers effectively have Parameter UseSession = 1;REST web application and client web application allow only authenticated (i.e. password) access.REST web application and client web application have reasonable Session timeout (i.e. 900, 3600).REST web application and client web application have the same GroupById value.REST web application and client web application have the same cookie path.If all these conditions are met, user would only consume one license slot per session and perform only one login and audit database would store only one login event per session.
go to post Eduard Lebedyuk · Oct 10, 2017 XMLs are not identical. Second one has additional <Family> tag.
go to post Eduard Lebedyuk · Oct 9, 2017 Here's how you can import CSVs into Caché without writing any code yourself. I recommend this approach.In your example, replace: set adapter = ##class(%File).%New() set status = adapter.%Open("C:\In\in.csv") with: set adapter = ##class(%File).%New("C:\In\in.csv") set status = adapter.Open("R") Check out the documentation for %File class.
go to post Eduard Lebedyuk · Oct 9, 2017 CAPTION and COLLATION are default property parameters that you can add to any property.
go to post Eduard Lebedyuk · Oct 7, 2017 Compare what user entered to the specific value. If they mismatch - ask again. Also there are several utility methods in %Prompt class for number/yes-no/etc input: GetNumberGetStringGetYesNoGetArray - Prompt for a number or entry in a displayed menu. Returns the selected item.GetMenu - Prompt for a number in a displayed menu.GetMore - Prompt for More or Quit. For example: do ##class(%Prompt).GetYesNo("Enter Yes or No:", .result) User can input only Yes (Y) or No (N). result variable would hold 1 or 0. You can also check %Prompt code and write something based on that.
go to post Eduard Lebedyuk · Oct 7, 2017 This can be done with SQL procedure: Query SomeQuery() As %SQLQuery { SELECT ID || SomeClass.GetParam('SomeClass', 'SOMENAME') FROM Table } ClassMethod GetParam(class, param) As %String [ CodeMode = expression, SqlProc ] { $parameter(class, param) }
go to post Eduard Lebedyuk · Oct 5, 2017 Turns out Java Gateway can instantiate objects and call their methods. Here's a rewrite of the above code, but all connecting is done in constructor: package com.isc.rabbitmq; import com.rabbitmq.client.*; public class Wrapper { private final Channel _channel; private final String _queueName; public Wrapper(String hostName, String queueName) throws Exception { ConnectionFactory factory = new ConnectionFactory(); factory.setHost(hostName); Connection connection = factory.newConnection(); _channel = connection.createChannel(); _channel.queueDeclare(queueName, false, false, false, null); _queueName = queueName; } public void sendMsg(byte[] msg) throws Exception { _channel.basicPublish("", _queueName, null, msg); } public int readMsg(byte[] msg) throws Exception { boolean autoAck = true; GetResponse response = _channel.basicGet(_queueName, autoAck); int len = 0; if (response == null) { // No message retrieved. } else { AMQP.BasicProperties props = response.getProps(); len = response.getBody().length; System.arraycopy(response.getBody(),0,msg,0,len); } return len; } }
go to post Eduard Lebedyuk · Oct 5, 2017 Also note, that direct casting from regular objects and into dynamic was removed.
go to post Eduard Lebedyuk · Sep 30, 2017 If you know all possible arguments just create a wrapper method that accepts all arguments and job that.
go to post Eduard Lebedyuk · Sep 30, 2017 If you want to execute a class query and get a result set you can directly call <Query>Func method and get a new %SQL result set: set rs = ##class(Config.MapGlobals).ListFunc("ENSDEMO","*") while rs.%Next() { w rs.Name,! } The only case where you can't use that if you need to choose the query at runtime.
go to post Eduard Lebedyuk · Sep 29, 2017 Yes, there's no way to print multiple files from js with one dialogue.You can merge all PDFs on server and print that.I suppose you can also search for/develop browser extension to get around this particular feature of browser security model, but that's probably more work than merging.
go to post Eduard Lebedyuk · Sep 29, 2017 Specify ReplyCodeAction setting, you probably need E=S or E=F.
go to post Eduard Lebedyuk · Sep 29, 2017 You can use deprecated %Net.RemoteConnection: Set rc=##class(%Net.RemoteConnection).%New() Set Status=rc.Connect("127.0.0.1","SAMPLES",1972,"_SYSTEM","SYS") Write Status If you don't know login/pass just use _SYSTEM/SYS defaults - you'll get either Access Denied error upon successful connection or TCP error. Alternatively try to open TCP device to the target: ClassMethod Test(host = "localhost", port = 1972, timeout = 10) As %Boolean { set oldIO = $IO set io = "|TCP|1" _ port open io:(/Hostname=host:/Port=port):timeout set success = $Test use oldIO close io quit success }
go to post Eduard Lebedyuk · Sep 29, 2017 It's in the docs:The query may contain parameters represented by ? characters within the query. The values of any parameters are supplied via the Execute method.
go to post Eduard Lebedyuk · Sep 29, 2017 Prepare doesn't require arguments, only execute does.You can prepare query once and then execute it several times with different arguments.
go to post Eduard Lebedyuk · Sep 29, 2017 I don't think there's an option to export inc files from this dialog.If you often need to move production between environments writing your own deploy script can save you time on clicking through the UI.
go to post Eduard Lebedyuk · Sep 29, 2017 You can use pure javascript to do that: function PrintAll() { var files = ["file1.pdf", "file2.pdf", "file3.pdf"]; for (var i = 0; i < files.length; i++) { var newWindow = window.open(files[i], "print"); newWindow.print(); newWindow.close(); } }