go to post Mark OReilly · Jan 10, 2024 Hi: We agree we loaded up the page and Ctrl + F did not work in Google Chrome on Windows. Due to this really as a key workflow we are having to revert back to the old viewer. Mixed views on the new layout, some people are big fans that it is more separated out and with it saying "if and then" rather than when and an action that wasn't as clearly broken up. There is too much whitespace around the if and then boxes i would say. The rule box fits very neatly but especially if you have an if expression 1 and only a simple send with a transform the boxes are just a little big with whitespace. One thing we discussed was the rule numbers. When you do a "test" or the rule logging it will at first return a rule number effected still but rule numbers are not on the rule editor. I understand i think the rationale as developers rule numbers themselves change so for internal development reference in notes they shouldn't be used but think in terms of UI the rule numbers should probably be included. How do you generally go about requesting bug fixes or just general improvements? In category on the production monitor a lower case a going below something starting with an upper case Z is still mildy frustating
go to post Mark OReilly · Sep 13, 2023 Hi: As responded below in the list yes you can use ^MONMGR in the terminal to email out to recipients whenever you have an error above a certain alert level. As alexander says and we do use an external service that also reads the cconsole/messages log and texts for high alerts
go to post Mark OReilly · Sep 13, 2023 Hi i'm not sure i understand what you are trying to achieve. Your current state of the mirror is Caught up in terms of journal restore. This means in the current environment your journals are currently up to date with the Primary server as per the documentation. What/Why are you trying to restore a journal as from the mirror monitoring and you are in a mirrored environment it does not look like you need to Journal restore at the moment?
go to post Mark OReilly · Sep 13, 2023 Do you have any html type formatting in the traces? I have noticed this can cause issues within a visual trace before
go to post Mark OReilly · Aug 18, 2023 One of the things missing from the guide is if you have OAUTH config this does not copy over. If used it can be a bit of a gotcha. You can export and import these easily from globals
go to post Mark OReilly · Jul 21, 2023 In addition to Luis's documentation i would look here. Ensemble Orphaned Messages | InterSystems Developer Community | Best Again following the other answers it will be for you to determine if the growth of your .dat file is as expected. Have a think if you should be keeping a full time history logs of all your data. From your post it does sound like you just aren't getting rid of the transactional data and if you have most things set up correctly and no funny %save operations on your code or embedded xml object messages within messages then if you just start a task to start getting rid of any transactional data over x amount of days you should be fine, NOTE though if you are mirroring be careful setting to short a number of days ago, i.e. if youve had the system 3 months and you decide to keep only 1 month this may be a huge amount of data to delete which would hit your journal files hard and potentially fill it up, try perhaps configure so you only delete 1 days worth of data first (or a week ect) at first and then gradually reduce that number down to your agreed retention period.
go to post Mark OReilly · Jul 3, 2023 Thanks yes this is it, i thought i had tried this combination but think i had the sql on the wrong setting, thank you that's the speed i was looking for
go to post Mark OReilly · May 18, 2023 set streamContainer=..CreatePythonPDFStream() set streamContainer.OriginalFilename="test2.pdf" issue did not happen whenever finished this with python (more complex) and it coming from a classmethod so unsure what the problem was
go to post Mark OReilly · May 18, 2023 I think the setstream wipes out the originalFilename field but the other way around results in zero bytes
go to post Mark OReilly · May 16, 2023 Find in Files works with the Enable proposed APIs and valid version working. Was not aware of drag/drop for export/import. I find even though a lot of the discussions around source control are great and easier using vs code I still don't feel there is an easy jumping in point to really get started to use a control system.
go to post Mark OReilly · May 15, 2023 To see CSP files with server side editing if you hold shift before clicking the pencil icon it will load up a web files view
go to post Mark OReilly · May 15, 2023 Hi: This is possible . How to quickly open class in VS Code | InterSystems Developer Community |. The answer to this is here: if you are using the server-side editing paradigm, which matches what you're used to with Studio, make sure you follow the instructions in the "Enable Proposed APIs" section of the extension's README (also available here). you can then use Crtl+P to find the item you need. my setup instructions The additional features (and the APIs used) are: Server-side searching across files being accessed using isfs (TextSearchProvider) Quick Open of isfs files (FileSearchProvider). Download and install a beta version from GitHub. This is necessary because Marketplace does not allow publication of extensions that use proposed APIs. Go to https://github.com/intersystems-community/vscode-objectscript/releases Locate the beta immediately above the release you installed from Marketplace. For instance, if you installed 2.4.3, look for 2.4.4-beta.1. This will be functionally identical to the Marketplace version apart from being able to use proposed APIs. Download the VSIX file (for example vscode-objectscript-2.4.4-beta.1.vsix) and install it. One way to install a VSIX is to drag it from your download folder and drop it onto the list of extensions in the Extensions view of VS Code. From Command Palette choose Preferences: Configure Runtime Arguments. In the argv.json file that opens, add this line (required for both Stable and Insiders versions of VS Code): "enable-proposed-api": ["intersystems-community.vscode-objectscript"] Exit VS Code and relaunch it. Verify that the ObjectScript channel of the Output panel reports this: intersystems-community.vscode-objectscript version X.Y.Z-beta.1 activating with proposed APIs available. After a subsequent update of the extension from Marketplace you will only have to download and install the new vscode-objectscript-X.Y.Z-beta.1 VSIX. None of the other steps above are needed again.
go to post Mark OReilly · May 12, 2023 DBs not required. could either be removed or just made non read only
go to post Mark OReilly · Apr 6, 2023 Update has been made to to co-creator version of this project. githubFork . Containing certain Quality of life improvements. These are Banner with server status and key Last message date fixed on all services processes and operations You need to create a global called InterfaceMonitorNotes but if you use html gives you a handy place for notes for your team. N.B. if displayed publically the global edit link/user should only have access to this page queries, if required can post settings if anyone is looking to really use
go to post Mark OReilly · Apr 6, 2023 Class User.Utility.Tasks.PurgeCustomMessages Extends %SYS.Task.Definition { Parameter TaskName = "PurgeCustomMessages"; Property MaxDelete As %String [ InitialExpression = 1 ]; Property MinBodyID As %String [ InitialExpression = 1 ]; Method OnTask() As %Status { //Get The Types of message classes Set sc = $$$OK s tMessagesToOrpahan=0 //open up table of messages types to purge try{ Set rs = ##class(%SQL.Statement).%ExecDirect(,"select Keyname as MessageBodyClassName,Datavalue as ObjectSQLQryName from Ens_Util.LookupTable where tablename='OrpahnedMessagePurging'") } catch err { Set sc = err.AsStatus() //quit st } While rs.%Next() { set msgBodyName=rs.ObjectSQLQryName set className=rs.MessageBodyClassName if msgBodyName="Ens.MessageBody"{ set tMinMsgId=..MinBodyID }else{ set tMinMsgId=..GetMinimumIDForMessage(rs.MessageBodyClassName) } Set tSuccess=0 Set tFailed=0 set dt=$translate($zdatetime($horolog,8,1), " :", "") if tMinMsgId '=-1 { set msgQuery="SELECT top ? ID from "_msgBodyName_" where id <?" set tStatement = ##class(%SQL.Statement).%New() set qStatus = tStatement.%Prepare(.msgQuery) if qStatus '= 1 { s ^OrphanedMsgTask(dt,msgBodyName,"Error") ="Prepare Failed" s sc= $System.Status.DisplayError(qStatus) quit} set tResult = tStatement.%Execute(..MaxDelete,tMinMsgId) While tResult.%Next() { s tMessagesToOrpahan=1 try{ SET tSC1=$CLASSMETHOD(className,"%DeleteId",tResult.ID) if tSC1=$$$OK{ set tSuccess=tSuccess+1 } else{ set tFailed=tFailed+1 s ^OrphanedMsgTaskFailed(className,tResult.ID)=tSC1 } } catch { set tFailed=tFailed+1 set sc = $$$ERROR($$$GeneralError,"DeleteID Failure"_tResult.ID) s ^OrphanedMsgTask(dt,msgBodyName,"Error") ="DeleteID Failure" } } } else { s ^OrphanedMsgTask(dt,msgBodyName,"Status")="No messages in header table for "_msgBodyName } s ^OrphanedMsgTask(dt,msgBodyName,"Status")="Purged for "_msgBodyName _" "_tSuccess_" messages and failed to purge " _tFailed _ " messages" } quit sc } /// Method to return the minimum ID for the message type you are purging ClassMethod GetMinimumIDForMessage(pMessageType As %String) As %String { set MessageID=-1 set minIDQuery="SELECT TOP(1) MessageBodyID FROM Ens.MessageHeader where MessageBodyClassName=?" set tStatement = ##class(%SQL.Statement).%New() set qStatus = tStatement.%Prepare(.minIDQuery) if qStatus '= 1 {write "%Prepare failed:" do $System.Status.DisplayError(qStatus) quit} set tResult = tStatement.%Execute(pMessageType) While tResult.%Next() { set MessageID=tResult.MessageBodyID Write tResult.MessageBodyID, ! } w MessageID return MessageID } ClassMethod StreamPurge() As %Status { set i=1 while (i<200000){ k ^CacheStream(i) s i=i+1 } q $$$OK } ClassMethod Test() As %String { set msgQuery="SELECT top ? ID from EnsLib_HL7.Message where id <?" set tStatement = ##class(%SQL.Statement).%New() set qStatus = tStatement.%Prepare(.msgQuery) s ^OrphanedMsgTask = qStatus if qStatus '= 1 {write "%Prepare failed:" do $System.Status.DisplayError(qStatus) quit} s ^OrphanedMsgTask =tStatement set tResult = tStatement.%Execute(1,..GetMinimumIDForMessage("EnsLib.HL7.Message")) While tResult.%Next() { w tResult.ID } quit qStatus } /// Classmethod to create a list of the message types ClassMethod MessageTypes() As %ListOfDataTypes { Set sc = $$$OK Set rs = ##class(%SQL.Statement).%ExecDirect(,"SELECT DISTINCT (MessageBodyClassName) AS messageType FROM Ens.MessageHeader where MessageBodyClassName Like 'messages%'") set messageTypeList=##class(%ListOfDataTypes).%New() While rs.%Next() { do messageTypeList.Insert(rs.messageType) } w messageTypeList.Count() for i = 1:1:messageTypeList.Count() { write !, messageTypeList.GetAt(i)} } No idea how to upload a file so here is the class
go to post Mark OReilly · Mar 6, 2023 I will be updating this application this week or next and add our branch as have a few additional changes. These are *Improved key *Last Successful Messages added on each service queue and operation *Notes panel for "Known issues"
go to post Mark OReilly · Feb 28, 2023 Thank you, do we get a shiny badge for breakthrough on our profiles? Only just signed up for global masters
go to post Mark OReilly · Feb 20, 2023 Thanks I now understand. I was not looking at the .int Also was testing using SQL trigger delete i.e. from sql Delete from (field) where ID = id. This delete helper uses the objectscript deleteID which is perfectly good as this is what the main Ens.Util.Tasks.Purge will use. Great tool as this was for one message object with 10 embedded xml objects and 2 lists of xml objects, added some manually on before and it is the case this with using this plus doing a test on a single object first is a lot faster than the risks of manual typos for doing this manually. The SQL trigger on delete will not be required in my usecases
go to post Mark OReilly · Feb 17, 2023 I raised a different question but go no reply. I don't understand how you actually use this? Have a class like Class Messages.NonHL7.PMEP.Outbound.PathologyResult Extends (Ens.Request, SRFT.Utility.DeleteHelper.OnDeleteSuper) contains Property freeTextLine As list Of Messages.NonHL7.PMEP.Outbound.FreeTextLine; How do you actually get the ondelete to work or generate? What should you see? i added ClassMethod %OnDelete(oid As %ObjectIdentity) As %Status{ Do ##super()} but did not delete the id 2211269686 listed in the list. Can an implementation example be provided to this? The only step really to use this yourself is "add this class as another Super class for your class." but i don't grasp what we should see if we do this and if indeed this is correct Tried with just Class Messages.NonHL7.PMEP.Outbound.PathologyResult Extends (Ens.Request, SRFT.Utility.DeleteHelper.OnDeleteSuper) without defining an %onDelete as the guide would suggest but again have id 2211269800 which did not delete id 2211269834 of Messages.NonHL7.PMEP.Outbound.Location also did not delete