go to post Steve Pisani · Mar 23, 2017 Hi Ryan,The message that you pass to your SOAP-based business operation should (as you indicated in your 3rd bullet point), contain both the extracted HL7 data, and the authorization key you retrieved from the previous step.I'm assuming your SOAP Business operation you are using in the last step has been automatically generated by the Studio wizards, so, you will have a Class Method for each web method of your SOAP service.You need to edit the default generated versions of these methods the wizard gives you, in order to add your SOAP Header.You can access ..Adapter.%Client in this business operation to get access to the private instance of the web service client class, so, using Do ..Adapter.%Client.HeadersOut.SetAt(...)You can set the headers for that particular message invocation.Sincerely - Steve
go to post Steve Pisani · Jan 22, 2017 I needed version 6 (not 7) of NodeJS and had to runnpm install -global --production windows-build-tools...From an elevated powershell or DOS prompt (running as administrator), to get the UI installed.Steve
go to post Steve Pisani · Jan 19, 2017 I too am having a problem installing this.I'm using the "source installation" instructions.Can someone verify please what are the true list of prequisites needed (other than Cache 2016.1) for this. Please make no assumptions that node.js, or, Python, of any version, is already installed on the target server..Thanks - Steve
go to post Steve Pisani · Jan 18, 2017 Hi,I'm wondering... Is it possible to have a single dashboard that represents metrics from multiple Cache instances - for example, if I have 3 Cache instances installed on separate servers , and I want to see on a single dashboard, then % license usage graphs from each instance, represented in separate widgets.Steve
go to post Steve Pisani · Oct 27, 2016 Hi MikeHave you tried setting up a Credentials record with username and password pair in Ensemble (Configure>Credentials) - then specifying the credentials name in Settings for the Ensemble u business operation ?This has worked for me before for Web services that require basic authentication.Steve
go to post Steve Pisani · Oct 27, 2016 Hi Mike. Have you already tried setting up a Credentials record (with username and password paid via Ensemble > Configure > Credentials), and then specifying the credentials record which will be a setting in the Ensemble business operation ?This has worked form me before with Web services that require basic authentication.RegardsSteve
go to post Steve Pisani · Oct 27, 2016 Hi Mike. Have you already tried setting up a Credentials record (with username and password paid via Ensemble > Configure > Credentials), and then specifying the credentials record which will be a setting in the Ensemble business operation ?This has worked form me before with Web services that require basic authentication.RegardsSteve
go to post Steve Pisani · Oct 5, 2016 Hi DavidDefining the SQL Gateway connection is only one part of the problem solved.Once you have ano SQL gateway defined, you can then create 'proxy' classes in Cache that know something about, and represent the tables in the remote database system.With these proxy classes on hand, you can then use them to query and update data as you would with any other persistant Cache vlass yout have.
go to post Steve Pisani · Sep 20, 2016 Hi Lutz - I'm assuming you have a small typo above and you intended to use "$ZF" not "$F"Steve
go to post Steve Pisani · Sep 2, 2016 Thanks Bernd,I see that onkeypress works- just as I expected it to firing onevent(). you're right.-But - I was trying to capture onkeyup - which does not get fired into the onevent().For onkeyup, and probably other events, we need to implement this manually. We would need to resolve the element id of the layout object, then, register an event listener for the event occurring on that element - which when fired, would invoke onevent() in the template class. (as per Steve Whitemen's next post)thanks -
go to post Steve Pisani · Aug 31, 2016 Thanks Bernd.My issue is actually managing to get the onevent() method in the template class to be fired at all. I'm currently trying to determine what code is required to register onKeyUp() events to be captured for specific layout objects - that would result in the onevent() in my template class gets invoked (with the evt, key, value and docViewId arguments passed).Have you use the onevent method callback in the template class ?Steve
go to post Steve Pisani · Aug 26, 2016 Hi Stefan,I guess that's not how it is described under 'Event Handling' here: http://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY=... which incorrectly implies that that Zen Mojo will call onevent for anything other than onselect or onchange. So: in my ZENPage, I've overridden onkeydownhandler(evt), and I intend to call the onevent() method in my template class, which will have all the logic for all the events other than onsearch and onclick.The zenPage onkeyuphandler gives me evt, which I can use to get the HTML DOM id of the component that raised the event. (id=evt.srcElement .id).How do I go about finding the layout object's key attribute, given the DOM id ?Steve
go to post Steve Pisani · Jul 1, 2016 Hi.I have made a correction to the post, and associated sample code, to indicate the correct way that long-handed versions of custom commands, functions and variables need to developed. Code that is implemented as a function with arguments needs to explicitly invoke the short-hand logic, or the functionality will not get invoked when using the long-handed command.ThanksSteve
go to post Steve Pisani · Jun 27, 2016 excellent - thanks !... But what about collections, say, a property 'b' that is a collection (with b1, and b2 keys) >set objFromJSON = {}.$fromJSON("{""a"":""1"",""b"":[{""b1"":""x""},{""b2"":""y""}]}") >write objFromJSON.a 1 >write objFromJSON.b 24@%Library.Array >set arr=objFromJSON.b I can only get to each item in 'b' by instantiating an iterator (using arr.$getIterator()), and looping through the list with the $getNext() method of the resulting iterator. I can remove, get the last, add to the end and set an item in the collection. I'm assuming there is no concept of getting the item #1 from the collection - using '1' as the key, indicating the first in the collection, or getting #2, indicating the second item - something like set bObject=arr[1] or set bObject=arr.GetAt(1) or bObject=arr.Get(1) ? Steve
go to post Steve Pisani · Jun 24, 2016 Hi,Using the new JSON support, is it possible to create a dynamic object from a JSON string, (eg objFromJSON) that will then allow for objFromJSON.<property> syntax on the dynamic object to access properties in the JSON string.Steve
go to post Steve Pisani · Jun 23, 2016 Hi,just starting to look at it. From a UI perspective - if you do not select an Instance, or Namespace filter in the display, the Name column fully qualifies the component by adding Instance:Namespace - which is great. This make the column wider, pushing "Avg Que Time" and "Queue Trend" columns outside of the display are and invisible. There is no horizontal scroll bar to bring them back in.Steve
go to post Steve Pisani · Jun 22, 2016 Hi Thanks Eduard for trying and for John's comments.Brendan - Actually... - I tried using the SaveToClass() method as you described before I posted my question to the community, but, it my initial tests showed it deleting the entire contents of my XDATA block. I was not confident that was the way to go - hence the question, thinking there might have been another API.However - spurred on again today by yourself coming to the same idea I already had, I decided to give it another look - and - I have solved the problem.For all - I want to re-iterate - this is how to set the Enabled configuration status of a business host by modifying the XML in the production class's XDATA block. For run-time enabling/disabling, use EnableConfigItem method of Ens.Director.If the enabled status changes you want to make are to the production's configuration, then - here is the solution: /// productionName = Package.Classname/// Items(ConfigItem)=startupStatus ////// ConfigItem = must contain the fully qualified reference of: ConfigName|ClassNameOfComponent/// due to config items, that can be defined as the same name multiple times in a production/// startupStatus = 1 or 0 (true or false respectively)/// ClassMethod UpdateClassEnabledStatuses(productionName As %String, ByRef Items As %String) As %Status{set tSC=$$$OK Try {set statProdRunning=##class(Ens.Director).IsProductionRunning(productionName)if statProdRunning=1 { // Stop Production set tSC=##class(Ens.Director).StopProduction() if $$$ISERR(tSC) { write !,"Unable to stop production. Exiting without changes." quit }}// take out an exclusive lock on the class to avoid being edited remotely.lock +^oddDEF(productionName)#"E":5if '$t { write !,"Unable to lock production class. Exiting without changes." quit }// iterate through items.set objProd=##class(Ens.Config.Production).%OpenId(productionName)if '$IsObject(objProd) { write !,"Production configuration for production: "_productionName_". couldn't be found. Existing without changes." quit}set ci=""for { set ci=$order(Items(ci)) quit:ci="" set fqConfigItem=productionName_"||"_ci // change the status in the class. set objConfigItem=objProd.FindItemByConfigName(fqConfigItem) set objConfigItem.Enabled=Items(ci) write !,"Updating item: "_$piece(ci,"|")_" ("_$piece(ci,"|",2)_")"_" to: "_$select(Items(ci):"True",1:"False") set err=objProd.SaveToClass(objConfigItem) if $$$ISERR(err) write " - Failed" continue set err=objProd.%Save() if $$$ISERR(err) write " - Failed" continue}// release exclusive lock the classlock -^oddDEF(productionName)#"E"// Reset the running status of the productionif statProdRunning=1 { do ##class(Ens.Director).StartProduction(productionName)}} catch exceptionvar { lock -^oddDEF(productionName)#"E" set tSC=exceptionvar.AsStatus()} quit tSC} Steve.
go to post Steve Pisani · Jun 22, 2016 Hi John,afaik, settings between DEV and PROD are different, and they are using System Defaults to succesfully apply different settings.See my solution belowSteve