go to post Eduard Lebedyuk · Jun 1, 2019 Why do you want to do that?Can you describe what do you want to achieve?
go to post Eduard Lebedyuk · Jun 1, 2019 It should be started automatically, but you can configure one explicitly at: SMP - System Administration - Configuration - Zen Reports - Excel Servers.Set log file and try to start it from the same page. I think it would show the root problem.
go to post Eduard Lebedyuk · Jun 1, 2019 Have you checked that Java is in or not in path for cache service account?
go to post Eduard Lebedyuk · May 31, 2019 Please post:Your REST brokerExample of request and response from browser
go to post Eduard Lebedyuk · May 30, 2019 Added a dummy BS to production with OnInit: Class test.InitService Extends Ens.BusinessService { Parameter ADAPTER = "Ens.InboundAdapter"; Property Adapter As Ens.InboundAdapter; Method OnProcessInput(pInput As %RegisteredObject, Output pOutput As %RegisteredObject) As %Status [ CodeMode = expression ] { $$$OK } /// This user callback method is called via initConfig() from %OnNew() or in the case of SOAP Services from OnPreSOAP() Method OnInit() As %Status { $$$TRACE("INIT") set sc = ..SendRequestAsync(...) quit sc }
go to post Eduard Lebedyuk · May 27, 2019 What's the use case? I think it's better to keep independent tasks separate.Anyway:1. Create your own task class by extending %SYS.Task.Definition.2. Program your taskSpecify TaskName parameter to provide readable task nameAdd class properties if needed - they are task argumentsOverride OnTask method to program your logic3. Create a new task, choosing your task class (by TaskName).
go to post Eduard Lebedyuk · May 24, 2019 1. Execute this query: SELECT ID FROM %SYS.ProcessQuery WHERE LastGlobalReference [ '1119102928' 2. Iterate over result set. ID is process ID. 3. Kill process by id: do $system.Process.Terminate(processId)
go to post Eduard Lebedyuk · May 21, 2019 It's better to not create lists, especially lists which you need to filter later.Write a SQL query, iterate over it results and do stuff you need to do right there.SQL Query can be a separate class element for readability purposes.
go to post Eduard Lebedyuk · May 21, 2019 1. I'd like to add to @Nicole Aaron answer, that moving code is done in two separate steps:On developer machine the code is created, written to files and commited into source control systemCI/CD server (in your case TFS) is triggered on repository push and executes CI script - which is OS-level commands in our particular case and would be the same between GitLab or TFS.
go to post Eduard Lebedyuk · May 21, 2019 Interesting questions.There are several ways to achieve clean and pseudo-clean builds:Containers. Clean builds every time. Next articles in the series explore how containers can be used for CI/CD.Hooks. Curently I implemented one-time and every-time hooks before and after build. They can be used to do deletion, configuration, etc.Recreate. Add action to delete before build:DBsNamespacesRolesWebAppsAnything else you createdI agree with @Ben Spead here. System default settings are the way to go. If you're working outside of Ensemble architecture, you can create a small settings class which gets the data from global/table and use that. Example.
go to post Eduard Lebedyuk · May 21, 2019 Thank you, ended up extracting this method: ClassMethod GetPrivateProp(oref, propName) As %String { Set value = "" Set cd=$system.CLS.DumpContext(oref,0) Set inst=$piece(cd,"^",8) For j=1:1:inst { Set pd=$system.CLS.Property(j,oref,0) Set ivar=$piece(pd,"^") CONTINUE:ivar'=propName Set slot=$piece(pd,"^",2) Set value = $zobjval(oref,slot,0,3,slot) Quit } Quit value } UPD: Simplified code, thanks to @Dmitry Maslennikov suggestion: ClassMethod GetPrivateProp(oref, propName) As %String { Set pd=$system.CLS.Property(propName,oref,0) Set slot=$piece(pd,"^",2) Set value = $zobjval(oref,slot,0,3,slot) Quit value }
go to post Eduard Lebedyuk · May 20, 2019 1. I definitely recommend using CLS and not XML for general readability and also sane blame/diff output.2. There should not be any differences to usual Git development (as described in the series of articles you mention). One of our customers is using TFS for Ensemble development. Are you using Studio or Atelier? VSCode? If Studio, you'll need a source control hook, Atelier works as is and you'll need a plugin for VS Code.3.Check this article for info on CI/CD on TFS.
go to post Eduard Lebedyuk · May 20, 2019 First create a REST API. After that override AccessCheck method in your REST broker to check for bearer token.
go to post Eduard Lebedyuk · May 20, 2019 Exception still can contain some useful info, so: #dim tSC As %Status = $$$OK ... try { set tJSON = {}.%FromJSON(pInput) } Catch ex { do ex.Log() set tempSC = $$$ERROR($$$GeneralError,"Badly formed JSON") set tSC = $$$ADDSC(tempSC, ex.AsStatus()) } quit tSC
go to post Eduard Lebedyuk · May 19, 2019 I'd also recommend to remove or change this line:if ($$$ISERR(tStatus)) quitbecause your method signature has a promise to return a %Status:Method OnProcessInput(pInput As %FileCharacterStream, pOutput As %RegisteredObject) As %Statuhowever above mentioned line quits nothing.You can rewrite it like this (to return status): if $$$ISERR(tStatus) quit tStatus or my personal preference like this using postconditionals: quit:$$$ISERR(tStatus) tStatus Well in this exact case you need to remove the line altogether because you no longer get status for ReadLine, but it's just some food for thought.
go to post Eduard Lebedyuk · May 17, 2019 Do you want to auth using Bearer aginst external REST API?If so, you don't need web app config, just the code by @Pravin Barton