How to get the new Item after new event was added by ManagementServer.UserDefinedEventFolder.AddUserDefinedEvent()

I have a MC plugin and am going to add more features into it.

https://developer.milestonesys.com/s/question/0D53X00005uTvCKSA0/i-need-to-create-a-batch-of-events-that-will-appear-in-userdefined-events-in-order-to-assign-them-in-my-plugin-used-in-xprotect-management-client-but-i-cannot-find-any-code-in-mip-sdk-sampler-or-documentation-on-how-to-do-that

According to the previous link, I have succeed adding new user-defined event.

It can be listed via ConfigApiClient immediately after adding.

E.g. _configApiClient.GetChildItems(“/UserDefinedEventFolder”);

But, the Item of event cannot be retrieved, unless press F5 in MC to refresh all, or reopen MC.

My code (failed):

Configuration.Instance.RefreshConfiguration(Kind.TriggerEvent);

Configuration.Instance.GetItemsByKind(Kind.TriggerEvent, ItemHierarchy.SystemDefined);

How can I get the Item immediately after adding without press F5 manually?

Thanks.

I tested the code on my Admin plugin (basically, this is what you had written on the post), and it works fine. Please see below, we used the following code. Our VMS is 2022 R2 XPCO.

    private void button1_Click(object sender, EventArgs e)
    {
        var ms = new ManagementServer(EnvironmentManager.Instance.MasterSite.ServerId);
        ms.UserDefinedEventFolder.AddUserDefinedEvent(textBoxName.Text);
        Configuration.Instance.RefreshConfiguration(Kind.TriggerEvent);
        var itemGet = Configuration.Instance.GetItemsByKind(Kind.TriggerEvent, ItemHierarchy.SystemDefined);
    }

​GetItemsByKind() returned a list of Item. But it does not contains the new user-defined event.

​Test 1.

There were two events named ‘e1’ and ‘e2’.

After added another event named ‘e3’. And, dump the list of Items, as below.

10/13 16:48:18.3974261 [    Info]    DESKTOP-I08N4D0 <TraceItemTree>
10/13 16:48:18.3984263 [    Info]      User-Defined Events <TraceItemTree>
10/13 16:48:18.3994246 [    Info]        e1 <TraceItemTree>
10/13 16:48:18.4004242 [    Info]        e2 <TraceItemTree>
10/13 16:48:18.4014226 [    Info]      DESKTOP-I08N4D0 <TraceItemTree>

internal static Item AddUserDefinedEvent(string eventName)
{
    var ms = new ManagementServer(EnvironmentManager.Instance.MasterSite.ServerId);
    ms.UserDefinedEventFolder.AddUserDefinedEvent(eventName);
    Configuration.Instance.RefreshConfiguration(Kind.TriggerEvent);
    List<Item> itemGet = Configuration.Instance.GetItemsByKind(Kind.TriggerEvent, ItemHierarchy.SystemDefined);
 
    void TraceItemTree(Item item, string prefix)
    {
        LogWriter.Instance.Write(prefix + " " + item.ToString(), LogWriter.Severity.Info);
        if (item.HasChildren == HasChildren.No)
            return;
 
        List<Item> children = item.GetChildren();
        if (children == null)
            return;
 
        foreach (Item child in children)
        {
            TraceItemTree(child, prefix + "  ");
        }
    }
 
    foreach (Item item in itemGet)
    {
        TraceItemTree(item, "  ");
    }
 
    return null;
}

Hi Rie,

I know why your test is ok.

If add another GetItemsByKind( ) before adding user-defined event, the test will fail.

It seems that Configuration instance cached the items and RefreshConfiguration( ) does not work.

private void button1_Click(object sender, EventArgs e)
{
    var itemFirstGet = Configuration.Instance.GetItemsByKind(Kind.TriggerEvent, ItemHierarchy.SystemDefined);
    var ms = new ManagementServer(EnvironmentManager.Instance.MasterSite.ServerId);
    ms.UserDefinedEventFolder.AddUserDefinedEvent(textBoxName.Text);
    Configuration.Instance.RefreshConfiguration(Kind.TriggerEvent);
    var itemGet = Configuration.Instance.GetItemsByKind(Kind.TriggerEvent, ItemHierarchy.SystemDefined);
}

We could reproduce the issue. Milestone Development will start an investigation. Let us get back to you when I get a news from them.

We got a news from Milestone Development. Unfortunately, what you want to do is not possible through APIs. Please see below explanation from Milestone Development.

-----

RefreshConfiguration only works for plugin configurations, so basically Items defined by plugins.

Any build-in item configuration is maintained by the environment (Management Client in this cache) and thus cannot be refreshed through MIP. We will update the documentation to state this for next release.

-----