go to post James MacKeith · Jun 30, 2023 Echoing Chad's comments and adding screen shot of the "button somewhere in the new rules editor for switching back to the old one" :
go to post James MacKeith · Jun 21, 2023 Take a look at the WorkQueue Manager which also allows for coordination. workQueue =iris.cls("%SYSTEM.WorkMgr")._New() status = workQueue.Queue("..PythonClassMethodToBeJobbed") [Note routines require function [parentheses] not just a plain label - so for Alex's example below will need Test()]
go to post James MacKeith · May 11, 2023 my mistake the current non persist code does require Sync due to a missing check for no request header created in Ens.BusinessService::SendRequestAsync() [there is such a check in SendRequestSync()]. I'll correct that.
go to post James MacKeith · May 11, 2023 Apologies if too late but I tried the following based on the Non Persistence option used in the EnsLib.HTTP/REST/SOAP Generic classes (also see Accelerate Ensemble) 1. Custom TCP Service Extends EnsLib.HL7.Service.TCPService: Class Community.NonPersistService Extends EnsLib.HL7.Service.TCPService { Parameter SETTINGS = "PersistInProcData:Additional"; /// Persist data to operations with invocation InProc<br/> /// The default is On. <br/> /// This setting is only used if calling an operation with invocation InProc. <br/> /// If this setting is off then no message headers will be created and message bodies will not be saved.<br/> /// If this setting is off there will be no trace in the message viewer. <br/> /// If this setting is off there will be no retry attempts by the operation - only one attempt will be made. <br/> Property PersistInProcData As %Boolean [ InitialExpression = 1 ]; Method OnInit() As %Status { Set $$$EnsInProcPersist=..PersistInProcData Quit ##super() } } 2. Custom HL7 File Operation invoked InProc that is the target of the service Class Community.InProcOperation Extends EnsLib.HL7.Operation.FileOperation { Parameter INVOCATION = "InProc"; } Note the property description from EnsLib.HTTP.GenericService for PersistInProcData states for synchronous sends but this needs to be removed since not relevant for InProc. Sufficient that InProc target processed via OnMessage.
go to post James MacKeith · Jan 20, 2023 How about using Work Queue Manager framework in conjunction with a BS? Pick up a message but do not delete before we start processing since we are not going to record anywhere permanently that we are working on it.Check if message queued in current lifetime temp list.If already queued skip.If not already queued: mark as in progress for duration of this container lifetime queue up for Work Queue Manager to process. use callbacks to say finished and delete the message.perhaps also give back answer as well.We then also have auto scaling using the WQM framework if I am not mistaken.
go to post James MacKeith · Jan 19, 2023 It is possible for a BS to have more than one job - the issue becomes how to control the multi process access to the inbound feed in an orderly manner. Hence as you asked it is important to know how the BS is pulling data. Eduard, Is the rate at which one BS can process known or is it variable based on data unit to be processed? Similarly is the rate of arrival known or possible to detect? If possible to know these 2 rates they could be used to control BS count rather than CPU (a tight looping BS looking for work could skew CPU test comes to mind) Is the design to have all the processing of a data unit in the BS rather than pass to a BP/BO? James NB: there is a variation on pool size meaning for a BS using TCP based listening adapter where there can only be one listener but when Job Per Connection is true pool size setting is used as the maximum allowed number of concurrent connections created by the listener.
go to post James MacKeith · Jan 12, 2023 Perhaps also you can limit calling the Shouldxxx() based on update production timeout (for example) rather than checking every request in the collection. James
go to post James MacKeith · Jan 11, 2023 Greetings, When using the EnsLib.SOAP.InboundAdapter to provide the SOAP service on a dedicated TCP port one is bypassing the Web Gateway and hence %session is not available. (SOAP InboundAdapter docs)
go to post James MacKeith · Dec 1, 2021 Hope resolved by now but : One needs to double the quotes within the pattern since it needs to be a single string: Matches(tAlias, "1(.E1""SITE A"",.E1""SITE B"")") Matches(tAlias, "1(.E1""SITE A"",.E1""SITE B"")") James
go to post James MacKeith · May 15, 2019 Hi MurilloWhile no UI exists to create a deployment file to specify host items to remove it is possible to use the APIs to create such a deployment file - see the last example in the top section of the class documentation for Ens.Deployment.Utils. This is the same removal mechanism used when creating the rollback mechanism.HTHJameslink at https://irisdocs.intersystems.com/irislatest/csp/documatic/%25CSP.Documa...
go to post James MacKeith · Mar 6, 2019 Hi GraceI defer to those with experience in the field to offer comparative advice but concerning the Production Export functionality:For existing environments it is possible to use the Export for deployment from the Production configuration page for one or more items and not the whole production. This allows changing existing items or adding items to a production when deploying the export file. When changing an item the deployment code will disable the item first if it is enabled and then re-enable the item as necessary after the deployment has finished.It is possible to remove items using the deployment functionality but for this one needs to use Ens.Deployment.Util APIs and not the GUI to create the removal deployment package. Concerning settings - if you haven't seen perhaps System Default Settings might be appropriate (https://docs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls?KEY...).An alternative use of System Default Settings by some sites is to use for the same values without having to enter per item - hence the option in the Export for deployment dialog to export deployable System Default Settings.The Export from the Production configuration page attempts to identify what are linked items/code but might not be complete. This is the reason for being able to add Studio project contents to the export. In version 2017.2.0 we added detection of RecordMap classes to be included in the export. Best wishesJames
go to post James MacKeith · Jan 3, 2017 I am doing work with Caché LDAP support and am benefiting from using the Apache DS and Apache Directory Studio plug-in (http://directory.apache.org/studio/update) with Atelier.
go to post James MacKeith · Aug 11, 2016 See class method EnsLib.Testing.Service::SendTestRequest() that allows one to issue the test from terminal without having to add another component.classmethod SendTestRequest(pTarget As %String, pRequest As Ens.Request, ByRef pResponse As Ens.Response, Output pSessionId As %String, pGetReply As %Boolean = 0) as %Status Send a test request to the specified target host (BusinessProcess or BusinessOperation).
go to post James MacKeith · Apr 9, 2016 Hi AmirThis issue is addressed in 2016.1.0W x.GetValueAt("MSH.MSH~12.VID~1")2.5Best wishesJames
go to post James MacKeith · Jan 15, 2016 Thanks Scott, Our EnsLib.HL7.Service.FTPService uses the FilePath setting in the Source information which does not account for the sub directory searching option: OnProcessInput() line: Set tIOStream.Name=pFTPStream.Attributes("Filename")_$C(13,10)_"via FTP "_..Adapter.FTPServer_":"_..Adapter.FTPPort_" path '"_..Adapter.FilePath_"'" But the adapter is passing the actual path where the file was retrieved from in pFTPStream.Attributes("FTPDir") . I will make the change in EnsLib.HL7.Service.FTPService to use pFTPStream.Attributes("FTPDir") instead of ..Adapter.FilePath but I am afraid I cannot advise on which release this will be in. To verify from terminal using write ##class(EnsLib.HL7.Message).%OpenId(<id>).Source returns before the code change: somefile.hl7 via FTP 192.168.224.100:2121 path '/hl7' to somefile.hl7 via FTP 192.168.224.100:2121 path '/hl7/1/yellow/' Would this be sufficient for your needs or since you state the reasons are more complicated a more elegant solution in the Ensemble service is needed. Kind regards James