aktueller stand

This commit is contained in:
Meik
2026-01-28 12:24:39 +01:00
parent 8b7c4ce480
commit 82984f769b
48 changed files with 1122 additions and 495 deletions

View File

@@ -11,7 +11,7 @@
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Text.Encodings.Web" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-9.0.0.7" newVersion="9.0.0.7" />
<bindingRedirect oldVersion="0.0.0.0-10.0.0.2" newVersion="10.0.0.2" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.ValueTuple" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
@@ -23,7 +23,7 @@
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Bcl.AsyncInterfaces" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-9.0.0.7" newVersion="9.0.0.7" />
<bindingRedirect oldVersion="0.0.0.0-10.0.0.1" newVersion="10.0.0.1" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Buffers" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
@@ -35,7 +35,7 @@
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Text.Json" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-9.0.0.7" newVersion="9.0.0.7" />
<bindingRedirect oldVersion="0.0.0.0-10.0.0.2" newVersion="10.0.0.2" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Numerics.Vectors" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
@@ -43,15 +43,15 @@
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Bcl.TimeProvider" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-9.0.0.7" newVersion="9.0.0.7" />
<bindingRedirect oldVersion="0.0.0.0-10.0.0.2" newVersion="10.0.0.2" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-9.0.0.7" newVersion="9.0.0.7" />
<bindingRedirect oldVersion="0.0.0.0-10.0.0.2" newVersion="10.0.0.2" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Extensions.Logging.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-9.0.0.7" newVersion="9.0.0.7" />
<bindingRedirect oldVersion="0.0.0.0-10.0.0.2" newVersion="10.0.0.2" />
</dependentAssembly>
</assemblyBinding>
</runtime>

View File

@@ -762,6 +762,16 @@
<Table-Column Name="Description" Type="string" Cardinal="300" />
</Table-Columns>
</Table>
<Table Name="M42Wpm-Ticket-CloseCase-Categories" Type="Selection" Key="id">
<Matrix42-DataQueryItems-Template EntityClassName="SPSScCategoryClassBase" EntityTypeNames="SPSScCategoryType" OrderBy="" WhereExpression="Hidden = 0" />
<Table-Columns>
<Table-Column Name="id" SourceName="Id" Type="guid" />
<Table-Column Name="SysObjectId" SourceName="Sys-ObjectId" Type="guid" />
<Table-Column Name="SysName" SourceName="Sys-Name" Type="string" Cardinal="50" />
<Table-Column Name="Name" Type="string" Cardinal="300" />
<Table-Column Name="parent" SourceName="Parent_Value" Type="guid" />
</Table-Columns>
</Table>
<Table Name="M42Wpm-Ticket-Roles" Type="Selection" Key="id">
<Matrix42-DataQueryItems-Template EntityClassName="SPSScRoleClassBase" EntityTypeNames="SPSSecurityTypeRole" OrderBy="" WhereExpression="T(SPSSecurityClassRole).ShowInForwardAction = 1 AND T(SPSSecurityClassRole).Queue.ID IS NULL" />
<Table-Columns>

View File

@@ -16,7 +16,7 @@
<DisableAutomaticTimeTracking Policy="Mandatory" Value="true" />
<CompletitionPolicy Policy="Mandatory" Value="IfRequired" />
<NotesMandatory Policy="Mandatory" Value="true" />
<ShowOverview Policy="Mandatory" Value="true" />
<ShowOverview Policy="Mandatory" Value="false" />
<OverviewPollingPersonal Policy="Mandatory" Value="10" />
<OverviewPollingRole Policy="Mandatory" Value="5" />
</TicketConfiguration>

View File

@@ -948,7 +948,18 @@
</StateCategory>
<StateCategory Name="BshRegistryKeyExists" IsVisibleByParameter="BshRegistryKeyExists">
<State-Info Name="BshRegistryKeyExists" ValueTable="Computation_EmptyConstant" ValueColumn="default" />
</StateCategory>
<State-Info Name="Printers" ValueTable="agnt-computer-event-string" ValueColumn="BSH_Printers">
<Name Lang="DE">Drucker</Name>
<State-Details-Valued Format="json">
<State-Details-Column Name="Name" Description="Printer name" ValueColumn="Name" Display="STRING">
<Description Lang="DE">Druckername</Description>
</State-Details-Column>
<State-Details-Column Name="Is default" Description="Is selected default printer" ValueColumn="Default" Display="STRING">
<Description Lang="DE">Ist Standarddrucker</Description>
</State-Details-Column>
</State-Details-Valued>
</State-Info>
</StateCategory>
<StateCategory Name="BshRegistryKeyAbsent" IsVisibleByParameter="BshRegistryKeyAbsent">
<State-Info Name="BshRegistryKeyAbsent" ValueTable="Computation_EmptyConstant" ValueColumn="default" />
</StateCategory>
@@ -1051,7 +1062,7 @@
<State-Level Name="RAM/Memory free" Display="BYTES" ValueTable="agnt-computer-event-numerical" ValueColumn="MemoryFree" Warning="2147483648" Error="1073741824" Direction="down">
<Name Lang="DE">RAM/Arbeitsspeicher frei</Name>
</State-Level>
<State-Link Reference="RAM_Relative" Hidden="false" />
<State-Link Reference="RAM_Relative" />
</State-Aggregation>
<State-Aggregation Name="Hard disk storage">
<Name Lang="DE">Festplatten-Speicher</Name>

View File

@@ -102,6 +102,13 @@
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ValuedFormat">
<xs:restriction base="xs:NCName">
<xs:enumeration value="csv" />
<xs:enumeration value="json" />
</xs:restriction>
</xs:simpleType>
<xs:attributeGroup name="ValuePointer">
<xs:attribute name="Name" type="xs:string" use="optional" />
<xs:attribute name="ParameterName" type="xs:NCName" use="optional" />
@@ -543,7 +550,8 @@
<xs:complexType>
<xs:complexContent>
<xs:extension base="State-Details-Base">
<xs:attribute name="RowSeparator" type="xs:string" use="required"/>
<xs:attribute name="Format" type="ValuedFormat" use="optional"/>
<xs:attribute name="RowSeparator" type="xs:string" use="optional"/>
<xs:attribute name="ColSeparator" type="xs:string" use="optional"/>
<xs:attribute name="StringDecorator" type="Separator" use="optional"/>
</xs:extension>

View File

@@ -76,7 +76,9 @@
</AD-Scans>
</Active-Directory>
<Azure-AD>
<Azure-Tenant Domain="c4it365.onmicrosoft.com" TenantID="8f773186-362b-4432-a3e9-d3ad4685f3f1" Credential="AzureAccess" ScanIntuneDevices = "true" WithMobileDevices="true"/>
<Azure-Tenant Domain="c4it365.onmicrosoft.com" TenantID="8f773186-362b-4432-a3e9-d3ad4685f3f1" Credential="AzureAccess" ScanIntuneDevices = "true" WithMobileDevices="true">
<Azure-Scan-Filter UseConsistencyLevelEventual="true">onPremisesExtensionAttributes/extensionAttribute8 in (&apos;C4IT&apos;, &apos;TS4U&apos;) and userType eq &apos;member&apos; and accountEnabled eq true</Azure-Scan-Filter>
</Azure-Tenant>
<!--<Azure-Tenant Domain="sd0024.onmicrosoft.com" TenantID="07362148-410e-4636-a9cb-795fba1a5452" Credential="AzureAccess_Dieter"/>-->
</Azure-AD>
<Matrix42-WPM Server="srvwsm001.imagoverum.com" Credential="M42API-Demo" ClosedTicketHistory="9999" DisplayName="M42 Demo server (imagoverum)" ApiTokenLifetime ="30 days" ActivityQueueFilter="ticketsAndListedQueues">

View File

@@ -366,7 +366,8 @@
<xs:element name="Azure-Tenant">
<xs:complexType>
<xs:sequence>
</xs:sequence>
<xs:element ref="Azure-Scan-Filter" maxOccurs="1" minOccurs="0"/>
</xs:sequence>
<xs:attribute name="Domain" type="xs:string" use="required"/>
<xs:attribute name="TenantID" type="guid" use="required"/>
<xs:attribute name="Credential" type="xs:NCName" use="required"/>
@@ -379,7 +380,11 @@
</xs:keyref>
</xs:element>
<xs:element name="Citrix">
<xs:element name="Azure-Scan-Filter">
</xs:element>
<xs:element name="Citrix">
<xs:complexType>
<xs:sequence>
<xs:element ref="Scan-Timing" maxOccurs="1" minOccurs="0"/>

View File

@@ -189,6 +189,9 @@
IF NOT EXISTS (SELECT * FROM [main-scans] WHERE [Scan] = &apos;Default&apos;)
INSERT INTO [main-scans] ([Scan], [LastTime]) VALUES (&apos;Default&apos;,&apos;1970-01-01 00:00:00&apos;);
IF NOT EXISTS (SELECT * FROM [main-scans] WHERE [Scan] = &apos;AgentScan-all&apos;)
INSERT INTO [main-scans] ([Scan], [LastTime]) VALUES (&apos;AgentScan-all&apos;,&apos;1971-01-01 00:00:00&apos;);
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N&apos;[main-scan-history]&apos;) AND type in (N&apos;U&apos;))
BEGIN
PRINT N&apos;start creating table [main-scan-history]...&apos;;
@@ -372,6 +375,9 @@
IF NOT EXISTS (SELECT * FROM [main-scans] WHERE [Scan] = &apos;Default&apos;)
INSERT INTO [main-scans] ([Scan], [LastTime]) VALUES (&apos;Default&apos;,&apos;1970-01-01 00:00:00&apos;);
IF NOT EXISTS (SELECT * FROM [main-scans] WHERE [Scan] = &apos;AgentScan-all&apos;)
INSERT INTO [main-scans] ([Scan], [LastTime]) VALUES (&apos;AgentScan-all&apos;,&apos;1971-01-01 00:00:00&apos;);
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N&apos;[main-scan-history]&apos;) AND type in (N&apos;U&apos;))
BEGIN
PRINT N&apos;start creating table [main-scan-history]...&apos;;
@@ -2424,48 +2430,56 @@
</Query>
<Query Name="CloseUserSession">
UPDATE [UserSessions]
SET [Finish] = @SessionDate
WHERE SessionId = @SessionId;
IF EXISTS (SELECT TOP 1 * FROM UserSessions WHERE SessionId = @SessionId)
BEGIN
UPDATE [UserSessions]
SET [Finish] = @SessionDate
WHERE SessionId = @SessionId;
END
IF NOT EXISTS (SELECT TOP 1 * FROM UserSessions WHERE SessionId = @SessionId) AND EXISTS (SELECT TOP 1 * FROM dbo.Cases WHERE SessionId = @SessionId)
BEGIN
DECLARE @CurrentTimeStamp DATETIME = GETUTCDATE();
INSERT INTO UserSessions
( UserId, SessionId, [Start], [Finish] )
SELECT TOP 1 UserId,SessionId,[Start],@CurrentTimeStamp FROM Cases
WHERE SessionId = @SessionId ORDER BY [Start] ASC;
END
IF EXISTS (SELECT TOP 1 * FROm dbo.Cases WHERE SessionId = @SessionId)
BEGIN
IF EXISTS (SELECT TOP 1 * FROM dbo.Cases WHERE SessionId = @SessionId)
BEGIN
INSERT INTO [CaseTime]
( CaseId, StatusId, [TimeStamp] )
SELECT CaseId, 4, @SessionDate
FROM dbo.Cases
WHERE SessionId = @SessionId AND Finish IS NULL;
INSERT INTO [CaseTime]
( CaseId, StatusId, [TimeStamp] )
SELECT CaseId, 4, @SessionDate
FROM dbo.Cases
WHERE SessionId = @SessionId AND Finish IS NULL;
UPDATE [Cases]
SET [Finish] = @SessionDate
WHERE SessionId = @SessionId AND Finish IS NULL;
END
UPDATE [Cases]
SET [Finish] = @SessionDate
WHERE SessionId = @SessionId AND Finish IS NULL;
END
</Query>
</Query>
<Query Name="UpdateCases">
DECLARE @CurrentTimeStamp DATETIME = GETUTCDATE();
IF EXISTS (SELECT TOP 1 * FROM dbo.Cases JOIN dbo.CaseTime ON Cases.CaseId = CaseTime.CaseId WHERE Cases.CaseId = @CaseId AND CaseTime.StatusId = 4 )
BEGIN
UPDATE [CaseTime]
SET Statusid = 2
FROM dbo.Cases
JOIN dbo.CaseTime ON Cases.CaseId = CaseTime.CaseId
WHERE Cases.CaseId = @CaseId AND
CaseTime.StatusId = 4
UPDATE [CaseTime]
SET Statusid = 2
FROM dbo.Cases
JOIN dbo.CaseTime ON Cases.CaseId = CaseTime.CaseId
WHERE Cases.CaseId = @CaseId AND
CaseTime.StatusId = 4
INSERT INTO [CaseTime]
( CaseId, StatusId, [TimeStamp] )
SELECT @CaseId, 3, @CurrentTimeStamp;
UPDATE [Cases]
SET [Finish] = NULL
WHERE CaseId = @CaseId;
INSERT INTO [CaseTime]
( CaseId, StatusId, [TimeStamp] )
SELECT @CaseId, 3, @CurrentTimeStamp;
UPDATE [Cases]
SET [Finish] = NULL
WHERE CaseId = @CaseId;
END
</Query>
<Query Name="InsertTicket">

View File

@@ -98,7 +98,7 @@
</PropertyGroup>
<ItemGroup>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
<HintPath>..\packages\Newtonsoft.Json.13.0.4\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />

View File

@@ -1,12 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<C4IT-License-Info Product="First Aid Service Desk (F4SD)" Id="776D99A6-D341-4B70-BA4B-2CC55B76A079">
<License Id="FAE53860-0AE2-4A15-A5D5-7E56D4D29FDE" Revision="1.0" Type="PRODUCTIVE" Customer="Consulting4IT" CustomerId="A3A5E66E-6A91-44E2-9F3A-F04C67642BCB" StartDate="2024-12-01" EndDate="2025-12-31" Signature="SeNeSrKAq/rnvCVui7TMBHkTS4AnygizDBNdLe1w7EdMGaQ2xxTvOcsOrshwqznK/shgGvxofdux0YWV3XyxWeeGwfKqjPobWOnKhp5v3xfeVk+59dx29Yn3/4j+vcJrs8kBhOrZEAkeAHojFVZYsO/SbqWoOcqP5fDw673gjW8=">
<License Id="FAE53860-0AE2-4A15-A5D5-7E56D4D29FDE" Revision="1.0" Type="PRODUCTIVE" Customer="Consulting4IT" CustomerId="A3A5E66E-6A91-44E2-9F3A-F04C67642BCB" StartDate="2024-12-01" EndDate="2026-12-31" Signature="A3u3fZ5bU5p3CikLiOyCMdrsJCLtvQkdbUcIhPfo0gZruL4jvy/cXGeqwHgCNK4P+vVJi+7XtxfBvefTFVAs4QT2vSP+m7DPj1CB//zLOEhUHQVqim3KyQiIWtlMi/hruO+XKL6BAOYuNsSOR3eit95e9JPc60qNNL4gArdGe5I=">
<License-Metrics Type="ManagedUsers" Count="10000" />
<Modules>
<Module Name="F4SD client agent connector" Id="F8A3284C-E481-4D08-A921-949D2EBD4E0B" />
<Module Name="MS Active Directory connector" Id="B2D48023-56E8-44D5-AB77-BE1DCF4EA4EB" />
<Module Name="Matrix42 WPM conntector" Id="9CE1A6BE-6A0C-4A27-94A5-44AB997B8E62" />
<Module Name="Nexthink NXQL conntector" Id="51EA7764-3AD3-4F90-89DB-DEB0C60D655C" />
<Module Name="Nexthink NXQL conntector" Id="51EA7764-3AD3-4F90-89DB-DEB0C60D655C" />
</Modules>
</License>
</C4IT-License-Info>

View File

@@ -28,13 +28,59 @@
/// </summary>
private void InitializeComponent()
{
this.ctrlProtocolBox1 = new C4IT_DataHistoryProvider_Test.ctrlProtocolBox();
this.buttonCheckConnection = new System.Windows.Forms.Button();
this.btnGetUsers = new System.Windows.Forms.Button();
this.btnGetSessions = new System.Windows.Forms.Button();
this.btnScanUsers = new System.Windows.Forms.Button();
this.ctrlProtocolBox1 = new C4IT_DataHistoryProvider_Test.ctrlProtocolBox();
this.SuspendLayout();
//
// buttonCheckConnection
//
this.buttonCheckConnection.Location = new System.Drawing.Point(22, 38);
this.buttonCheckConnection.Margin = new System.Windows.Forms.Padding(5, 6, 5, 6);
this.buttonCheckConnection.Name = "buttonCheckConnection";
this.buttonCheckConnection.Size = new System.Drawing.Size(210, 46);
this.buttonCheckConnection.TabIndex = 14;
this.buttonCheckConnection.Text = "Check connection";
this.buttonCheckConnection.UseVisualStyleBackColor = true;
this.buttonCheckConnection.Click += new System.EventHandler(this.buttonCheckConnection_Click);
//
// btnGetUsers
//
this.btnGetUsers.Location = new System.Drawing.Point(462, 38);
this.btnGetUsers.Margin = new System.Windows.Forms.Padding(5, 6, 5, 6);
this.btnGetUsers.Name = "btnGetUsers";
this.btnGetUsers.Size = new System.Drawing.Size(210, 46);
this.btnGetUsers.TabIndex = 15;
this.btnGetUsers.Text = "Get users";
this.btnGetUsers.UseVisualStyleBackColor = true;
this.btnGetUsers.Visible = false;
this.btnGetUsers.Click += new System.EventHandler(this.btnGetUsers_Click);
//
// btnGetSessions
//
this.btnGetSessions.Location = new System.Drawing.Point(682, 38);
this.btnGetSessions.Margin = new System.Windows.Forms.Padding(5, 6, 5, 6);
this.btnGetSessions.Name = "btnGetSessions";
this.btnGetSessions.Size = new System.Drawing.Size(210, 46);
this.btnGetSessions.TabIndex = 16;
this.btnGetSessions.Text = "Get sessions";
this.btnGetSessions.UseVisualStyleBackColor = true;
this.btnGetSessions.Visible = false;
this.btnGetSessions.Click += new System.EventHandler(this.btnGetSessions_Click);
//
// btnScanUsers
//
this.btnScanUsers.Location = new System.Drawing.Point(242, 38);
this.btnScanUsers.Margin = new System.Windows.Forms.Padding(5, 6, 5, 6);
this.btnScanUsers.Name = "btnScanUsers";
this.btnScanUsers.Size = new System.Drawing.Size(210, 46);
this.btnScanUsers.TabIndex = 17;
this.btnScanUsers.Text = "Scan";
this.btnScanUsers.UseVisualStyleBackColor = true;
this.btnScanUsers.Click += new System.EventHandler(this.btnScanUsers_Click);
//
// ctrlProtocolBox1
//
this.ctrlProtocolBox1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
@@ -46,50 +92,6 @@
this.ctrlProtocolBox1.Size = new System.Drawing.Size(1057, 418);
this.ctrlProtocolBox1.TabIndex = 13;
//
// buttonCheckConnection
//
this.buttonCheckConnection.Location = new System.Drawing.Point(22, 38);
this.buttonCheckConnection.Margin = new System.Windows.Forms.Padding(5, 6, 5, 6);
this.buttonCheckConnection.Name = "buttonCheckConnection";
this.buttonCheckConnection.Size = new System.Drawing.Size(210, 46);
this.buttonCheckConnection.TabIndex = 14;
this.buttonCheckConnection.Text = "Check Citrix connection";
this.buttonCheckConnection.UseVisualStyleBackColor = true;
this.buttonCheckConnection.Click += new System.EventHandler(this.buttonCheckConnection_Click);
//
// btnGetUsers
//
this.btnGetUsers.Location = new System.Drawing.Point(242, 38);
this.btnGetUsers.Margin = new System.Windows.Forms.Padding(5, 6, 5, 6);
this.btnGetUsers.Name = "btnGetUsers";
this.btnGetUsers.Size = new System.Drawing.Size(210, 46);
this.btnGetUsers.TabIndex = 15;
this.btnGetUsers.Text = "Get users";
this.btnGetUsers.UseVisualStyleBackColor = true;
this.btnGetUsers.Click += new System.EventHandler(this.btnGetUsers_Click);
//
// btnGetSessions
//
this.btnGetSessions.Location = new System.Drawing.Point(462, 38);
this.btnGetSessions.Margin = new System.Windows.Forms.Padding(5, 6, 5, 6);
this.btnGetSessions.Name = "btnGetSessions";
this.btnGetSessions.Size = new System.Drawing.Size(210, 46);
this.btnGetSessions.TabIndex = 16;
this.btnGetSessions.Text = "Get sessions";
this.btnGetSessions.UseVisualStyleBackColor = true;
this.btnGetSessions.Click += new System.EventHandler(this.btnGetSessions_Click);
//
// btnScanUsers
//
this.btnScanUsers.Location = new System.Drawing.Point(682, 38);
this.btnScanUsers.Margin = new System.Windows.Forms.Padding(5, 6, 5, 6);
this.btnScanUsers.Name = "btnScanUsers";
this.btnScanUsers.Size = new System.Drawing.Size(210, 46);
this.btnScanUsers.TabIndex = 17;
this.btnScanUsers.Text = "Scan Users";
this.btnScanUsers.UseVisualStyleBackColor = true;
this.btnScanUsers.Click += new System.EventHandler(this.btnScanUsers_Click);
//
// ctrlCitrix
//
this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 16F);

View File

@@ -361,9 +361,6 @@ namespace C4IT_DataHistoryProvider_Test
}
}
}
}
else
@@ -397,6 +394,9 @@ namespace C4IT_DataHistoryProvider_Test
ctrlProtocolBox1.ProcessMessage("Values:");
foreach (var Entry in _Table.Columns.Values)
{
if (Entry.ColumnName == "Printers")
{
}
ctrlProtocolBox1.ProcessMessage($" [{Entry.ColumnName}]: {getValueString(Entry.Values)}");
}
}