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

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?

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. 

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:

  1. 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.
  2. From Command Palette choose Preferences: Configure Runtime Arguments.
  3. 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"]

  1. Exit VS Code and relaunch it.
  2. 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.

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 

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 

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

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