Compare commits

..

34 Commits

Author SHA1 Message Date
Meik
7392454a63 aktueller stand 2026-02-10 16:53:06 +01:00
Meik
f89e2de60d fixed fallabschluss höhe 2026-02-10 11:29:57 +01:00
Meik
764a8cffb8 generic hierarchical control 2026-02-09 21:07:39 +01:00
Meik
e8584c1453 kategorie fix highlight current value 2026-02-09 20:43:47 +01:00
Meik
deb8d43911 maximized close case dialog 2026-02-09 20:28:24 +01:00
Meik
bf9d37d7af maximized close case dialog 2026-02-09 20:18:31 +01:00
Meik
9e5a7f7946 added transparent click through region 2026-02-09 20:00:30 +01:00
Meik
ca584d3929 fix dropdown scroll fokus 2026-02-09 19:55:29 +01:00
Meik
820a6ad3f3 fix aktions scroll fokus 2026-02-09 19:48:11 +01:00
Meik
fe49708c2e aktueller Stand 2026-02-09 19:44:23 +01:00
Meik
d6cbbe1ef1 aktueller Stand 2026-02-09 19:36:39 +01:00
Meik
825ddf05d4 aktueller Stand 2026-02-05 13:49:54 +01:00
Meik
7ba20b3aa6 aktueller Stand 2026-02-05 11:21:36 +01:00
Meik
aafd1f12de aktueller Stand 2026-02-05 10:04:19 +01:00
Meik
3d055ac2ba aktueller Stand 2026-02-04 21:39:44 +01:00
Meik
101572d35f aktueller Stand 2026-02-04 21:05:52 +01:00
Meik
a1506f36c9 aktueller Stand 2026-02-04 19:01:24 +01:00
Meik
5a9e58dcfb aktueller Stand 2026-02-04 17:52:39 +01:00
Meik
c1f600bc0d aktueller Stand 2026-02-04 13:27:03 +01:00
Meik
195d5c9188 aktueller Stand 2026-02-04 11:22:55 +01:00
Meik
2670751754 aktueller Stand 2026-02-04 10:11:35 +01:00
Meik
696629b5a8 aktueller Stand 2026-02-03 16:46:49 +01:00
Meik
7192319e1e aktueller Stand 2026-02-03 15:54:56 +01:00
Meik
ee1f54675e aktueller Stand 2026-01-28 12:08:39 +01:00
Meik
1283750829 category added 2025-11-14 15:20:16 +01:00
Meik
4475997a59 refactoring 2025-11-13 19:04:07 +01:00
Meik
7fca608a78 aktueller stand 2025-11-13 18:38:30 +01:00
Meik
8c74bc667d aktueller stand 2025-11-13 18:35:45 +01:00
Meik
ed80f72e81 aktueller stand 2025-11-13 18:00:31 +01:00
Meik
567584faf0 aktueller stand 2025-11-13 17:35:09 +01:00
Meik
5856ff4df8 hover effekt angeglichen 2025-11-13 16:09:24 +01:00
Meik
27425f5dde required fields reworked 2025-11-13 15:59:31 +01:00
Meik
7f14de43ce rote rahmen für req im fallabschluss 2025-11-13 15:03:35 +01:00
Meik
7653b92eb6 rote rahmen für req im fallabschluss 2025-11-13 15:03:17 +01:00
165 changed files with 90673 additions and 82286 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

BIN
2025-11-13 17_31_36-.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
2025-11-13 17_31_55-.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

BIN
2026-01-28 10_49_55-.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

View File

@@ -67,7 +67,7 @@
<HintPath>.\Interop.CLMgr.dll</HintPath> <HintPath>.\Interop.CLMgr.dll</HintPath>
</Reference> </Reference>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <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>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net472" /> <package id="Newtonsoft.Json" version="13.0.4" targetFramework="net472" />
</packages> </packages>

View File

@@ -1,4 +1,5 @@
using C4IT.FASD.Base; using C4IT.FASD.Base;
using FasdDesktopUi.Basics.CustomEvents;
using FasdDesktopUi.Basics.Services.RelationService; using FasdDesktopUi.Basics.Services.RelationService;
using FasdDesktopUi.Basics.Services.SupportCase; using FasdDesktopUi.Basics.Services.SupportCase;
using NSubstitute; using NSubstitute;
@@ -62,4 +63,90 @@ public class SupportCaseTest
Assert.Equal(_supportCase, raisedEvent.Sender); Assert.Equal(_supportCase, raisedEvent.Sender);
Assert.Equal(relations, raisedEvent.Arguments.Relations); Assert.Equal(relations, raisedEvent.Arguments.Relations);
} }
[Fact]
public void UpdateSupportCaseDataCache_Raise_SupportCaseDataCacheHasChanged()
{
cF4sdApiSearchResultRelation relation = new()
{
Type = enumF4sdSearchResultClass.Computer,
Name = "My computer",
Identities =
[
new() { Id = Guid.NewGuid(), Class = enumFasdInformationClass.Computer }
]
};
List<cF4SDHealthCardRawData.cHealthCardTable> tables =
[
new() { Name = "TestTable1", Columns = [], TableType = eDataHistoryTableType.History },
];
var raisedEvent = Assert.Raises<SupportCaseDataEventArgs>(
h => _supportCase.SupportCaseDataCacheHasChanged += h,
h => _supportCase.SupportCaseDataCacheHasChanged -= h,
() => _supportCase.UpdateSupportCaseDataCache(relation, tables));
Assert.NotNull(raisedEvent);
Assert.Equal(_supportCase, raisedEvent.Sender);
Assert.Equal(relation, raisedEvent.Arguments.Relation);
Assert.Equal(tables, raisedEvent.Arguments.DataTables);
}
[Fact]
public void GetSupportCaseData_Contains_UpdateSupportCaseDataCacheData()
{
// Arrange
const string columnValue = "Hello world";
const string tableName = "TestTable1";
const string columnName = "TestColumn1";
List<object> expected = [columnValue];
cF4sdApiSearchResultRelation relation = new()
{
Type = enumF4sdSearchResultClass.Computer,
Name = "My computer",
Identities =
[
new() { Id = Guid.NewGuid(), Class = enumFasdInformationClass.Computer }
]
};
cF4SDHealthCardRawData.cHealthCardTable dataTable = new()
{
Name = tableName,
TableType = eDataHistoryTableType.History
};
dataTable.Columns = new()
{
[columnName] = new(dataTable) { Values = expected }
};
// Act
_supportCase.UpdateSupportCaseDataCache(relation, [dataTable]);
// Assert
var actual = _supportCase.GetSupportCaseHealthcardData(relation, new cValueAddress() { ValueTable = tableName, ValueColumn = columnName });
Assert.Equal(expected, actual);
}
[Fact]
public void GetSupportCaseData_ReturnsNull_When_NoDataExists()
{
// Arrange
cF4sdApiSearchResultRelation relation = new()
{
Type = enumF4sdSearchResultClass.Computer,
Name = "My computer",
Identities =
[
new() { Id = Guid.NewGuid(), Class = enumFasdInformationClass.Computer }
]
};
// Act
var actual = _supportCase.GetSupportCaseHealthcardData(relation, new cValueAddress() { ValueTable = "NonExistentTable", ValueColumn = "NonExistentColumn" });
// Assert
Assert.Null(actual);
}
} }

View File

@@ -5,7 +5,7 @@
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<OutputType>Exe</OutputType> <OutputType>Exe</OutputType>
<RootNamespace>F4SD.Cockpit.Client.Test</RootNamespace> <RootNamespace>F4SD.Cockpit.Client.Test</RootNamespace>
<TargetFramework>net9.0</TargetFramework> <TargetFramework>net10.0</TargetFramework>
<!-- <!--
To enable the Microsoft Testing Platform 'dotnet test' experience, add property: To enable the Microsoft Testing Platform 'dotnet test' experience, add property:
<TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport> <TestingPlatformDotnetTestSupport>true</TestingPlatformDotnetTestSupport>
@@ -27,9 +27,9 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.0.0" /> <PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.0.1" />
<PackageReference Include="NSubstitute" Version="5.3.0" /> <PackageReference Include="NSubstitute" Version="5.3.0" />
<PackageReference Include="xunit.v3" Version="3.1.0" /> <PackageReference Include="xunit.v3" Version="3.2.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.5"> <PackageReference Include="xunit.runner.visualstudio" Version="3.1.5">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>

View File

@@ -53,15 +53,49 @@
<ErrorReport>prompt</ErrorReport> <ErrorReport>prompt</ErrorReport>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="C4IT.F4SD.DisplayFormatting, Version=1.0.9509.21303, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\C4IT.F4SD.DisplayFormatting.1.0.0\lib\netstandard2.0\C4IT.F4SD.DisplayFormatting.dll</HintPath>
</Reference>
<Reference Include="C4IT.F4SD.SupportCaseProtocoll, Version=1.0.9516.21165, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\C4IT.F4SD.SupportCaseProtocoll.1.0.0\lib\netstandard2.0\C4IT.F4SD.SupportCaseProtocoll.dll</HintPath>
</Reference>
<Reference Include="MaterialIcons, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="MaterialIcons, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\MaterialIcons.1.0.3\lib\MaterialIcons.dll</HintPath> <HintPath>..\packages\MaterialIcons.1.0.3\lib\MaterialIcons.dll</HintPath>
</Reference> </Reference>
<Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=10.0.0.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Bcl.AsyncInterfaces.10.0.2\lib\net462\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Extensions.DependencyInjection.Abstractions, Version=10.0.0.2, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.10.0.2\lib\net462\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Extensions.Logging.Abstractions, Version=10.0.0.2, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Extensions.Logging.Abstractions.10.0.2\lib\net462\Microsoft.Extensions.Logging.Abstractions.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <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>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Buffers, Version=4.0.5.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Buffers.4.6.1\lib\net462\System.Buffers.dll</HintPath>
</Reference>
<Reference Include="System.Core" /> <Reference Include="System.Core" />
<Reference Include="System.Diagnostics.DiagnosticSource, Version=10.0.0.2, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Diagnostics.DiagnosticSource.10.0.2\lib\net462\System.Diagnostics.DiagnosticSource.dll</HintPath>
</Reference>
<Reference Include="System.Drawing" /> <Reference Include="System.Drawing" />
<Reference Include="System.Memory, Version=4.0.5.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Memory.4.6.3\lib\net462\System.Memory.dll</HintPath>
</Reference>
<Reference Include="System.Numerics" />
<Reference Include="System.Numerics.Vectors, Version=4.1.6.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Numerics.Vectors.4.6.1\lib\net462\System.Numerics.Vectors.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=6.0.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.6.1.2\lib\net462\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
</Reference>
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.4.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.6.3\lib\net462\System.Threading.Tasks.Extensions.dll</HintPath>
</Reference>
<Reference Include="System.Xml.Linq" /> <Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" /> <Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" /> <Reference Include="Microsoft.CSharp" />
@@ -131,6 +165,7 @@
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="app.config" />
<None Include="packages.config" /> <None Include="packages.config" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

View File

@@ -65,7 +65,13 @@ namespace C4IT.FASD.Cockpit.Communication
public abstract Task<cF4sdStagedSearchResultRelations> GetStagedRelations(Guid id, CancellationToken token); public abstract Task<cF4sdStagedSearchResultRelations> GetStagedRelations(Guid id, CancellationToken token);
public abstract Task<List<cF4sdApiSearchResultRelation>> GetSearchResultRelations(enumF4sdSearchResultClass resultType, List<cFasdApiSearchResultEntry> searchResults); public abstract Task<List<cF4sdApiSearchResultRelation>> GetSearchResultRelations(enumF4sdSearchResultClass resultType, List<cFasdApiSearchResultEntry> searchResults);
#region Ticketübersicht
public abstract Task<List<cF4sdApiSearchResultRelation>> GetTicketOverviewRelations(string key, bool useRoleScope, int count); public abstract Task<List<cF4sdApiSearchResultRelation>> GetTicketOverviewRelations(string key, bool useRoleScope, int count);
public abstract Task<Dictionary<string, int>> GetTicketOverviewCounts(IEnumerable<string> keys, bool useRoleScope);
#endregion
public abstract Task<cF4SDHealthCardRawData> GetHealthCardData(cF4sdHealthCardRawDataRequest requestData); public abstract Task<cF4SDHealthCardRawData> GetHealthCardData(cF4sdHealthCardRawDataRequest requestData);

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Extensions.Logging.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-10.0.0.2" newVersion="10.0.0.2" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

View File

@@ -1,5 +1,16 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="C4IT.F4SD.DisplayFormatting" version="1.0.0" targetFramework="net472" />
<package id="C4IT.F4SD.SupportCaseProtocoll" version="1.0.0" targetFramework="net472" />
<package id="MaterialIcons" version="1.0.3" targetFramework="net472" /> <package id="MaterialIcons" version="1.0.3" targetFramework="net472" />
<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net472" /> <package id="Microsoft.Bcl.AsyncInterfaces" version="10.0.2" targetFramework="net472" />
<package id="Microsoft.Extensions.DependencyInjection.Abstractions" version="10.0.2" targetFramework="net472" />
<package id="Microsoft.Extensions.Logging.Abstractions" version="10.0.2" targetFramework="net472" />
<package id="Newtonsoft.Json" version="13.0.4" targetFramework="net472" />
<package id="System.Buffers" version="4.6.1" targetFramework="net472" />
<package id="System.Diagnostics.DiagnosticSource" version="10.0.2" targetFramework="net472" />
<package id="System.Memory" version="4.6.3" targetFramework="net472" />
<package id="System.Numerics.Vectors" version="4.6.1" targetFramework="net472" />
<package id="System.Runtime.CompilerServices.Unsafe" version="6.1.2" targetFramework="net472" />
<package id="System.Threading.Tasks.Extensions" version="4.6.3" targetFramework="net472" />
</packages> </packages>

View File

@@ -56,7 +56,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <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>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />
@@ -98,6 +98,7 @@
<Compile Include="F4sdCockpitCommunicationM42Web.cs" /> <Compile Include="F4sdCockpitCommunicationM42Web.cs" />
<Compile Include="FasdCockpitCommunicationWeb.cs" /> <Compile Include="FasdCockpitCommunicationWeb.cs" />
<Compile Include="FasdCockpitMachineConfiguration.cs" /> <Compile Include="FasdCockpitMachineConfiguration.cs" />
<Compile Include="TicketOverview\TicketOverviewCountsResponse.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
@@ -115,6 +116,7 @@
</ProjectReference> </ProjectReference>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="app.config" />
<None Include="packages.config" /> <None Include="packages.config" />
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

View File

@@ -18,6 +18,7 @@ using C4IT.FASD.Communication.Agent;
using FasdCockpitBase.Models; using FasdCockpitBase.Models;
using FasdCockpitCommunication; using FasdCockpitCommunication;
using FasdCockpitCommunication.TicketOverview;
using Newtonsoft.Json; using Newtonsoft.Json;
using Newtonsoft.Json.Linq; using Newtonsoft.Json.Linq;
@@ -1095,10 +1096,125 @@ namespace C4IT.FASD.Cockpit.Communication
return output; return output;
} }
public override Task<List<cF4sdApiSearchResultRelation>> GetTicketOverviewRelations(string key, bool useRoleScope, int count)
#region Ticketübersicht
public override async Task<Dictionary<string, int>> GetTicketOverviewCounts(IEnumerable<string> keys, bool useRoleScope)
{ {
return Task.FromResult(new List<cF4sdApiSearchResultRelation>()); var CM = MethodBase.GetCurrentMethod();
LogMethodBegin(CM);
var apiError = 0;
var timeStart = DateTime.UtcNow;
try
{
var normalizedKeys = (keys ?? Enumerable.Empty<string>())
.Where(k => !string.IsNullOrWhiteSpace(k))
.Distinct(StringComparer.OrdinalIgnoreCase)
.ToList();
var http = GetHttpHelper(true);
var scope = useRoleScope ? "role" : "personal";
var urlBuilder = new StringBuilder($"api/TicketOverview/GetCounts?scope={scope}");
if (normalizedKeys.Count > 0)
{
var joinedKeys = HttpUtility.UrlEncode(string.Join(",", normalizedKeys));
urlBuilder.Append($"&keys={joinedKeys}");
} }
var url = urlBuilder.ToString();
var result = await http.GetHttpJson(url, 15000, CancellationToken.None);
if (!result.IsOk)
{
apiError = (int)result.Status;
if (CheckConnectionStatus != null)
await CheckConnectionStatus.Invoke();
LogEntry($"Error on requesting ticket overview counts ({scope}). Status: {result.Status}", LogLevels.Warning);
return new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);
}
if (Debug_apiValues) SaveApiResultValueJson("TicketOverview.GetCounts", result.Result, url);
var response = JsonConvert.DeserializeObject<TicketOverviewCountsResponse>(result.Result);
return response?.ToDictionary(normalizedKeys) ?? new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);
}
catch (Exception E)
{
apiError = E.HResult;
if (CheckConnectionStatus != null)
await CheckConnectionStatus.Invoke();
LogException(E);
}
finally
{
if (Debug_apiTiming) SaveApiTimingEntry("TicketOverview.GetCounts", timeStart, apiError);
LogMethodEnd(CM);
}
return new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);
}
public override async Task<List<cF4sdApiSearchResultRelation>> GetTicketOverviewRelations(string key, bool useRoleScope, int count)
{
var CM = MethodBase.GetCurrentMethod();
LogMethodBegin(CM);
var apiError = 0;
var timeStart = DateTime.UtcNow;
var output = new List<cF4sdApiSearchResultRelation>();
try
{
if (string.IsNullOrWhiteSpace(key))
return output;
var http = GetHttpHelper(true);
var scope = useRoleScope ? "role" : "personal";
var safeKey = HttpUtility.UrlEncode(key);
var url = $"api/TicketOverview/GetRelations?key={safeKey}&scope={scope}&count={Math.Max(0, count)}";
var result = await http.GetHttpJson(url, 20000, CancellationToken.None);
if (!result.IsOk)
{
apiError = (int)result.Status;
if (CheckConnectionStatus != null)
await CheckConnectionStatus.Invoke();
LogEntry($"Error on requesting ticket overview relations for '{key}' ({scope}). Status: {result.Status}", LogLevels.Warning);
return output;
}
if (Debug_apiValues) SaveApiResultValueJson("TicketOverview.GetRelations", result.Result, url);
var relations = JsonConvert.DeserializeObject<List<cF4sdApiSearchResultRelation>>(result.Result);
if (relations != null)
output = relations;
}
catch (Exception E)
{
apiError = E.HResult;
if (CheckConnectionStatus != null)
await CheckConnectionStatus.Invoke();
LogException(E);
}
finally
{
if (Debug_apiTiming) SaveApiTimingEntry("TicketOverview.GetRelations", timeStart, apiError);
LogMethodEnd(CM);
}
return output;
}
#endregion
public override async Task<cF4SDHealthCardRawData> GetHealthCardData(cF4sdHealthCardRawDataRequest requestData) public override async Task<cF4SDHealthCardRawData> GetHealthCardData(cF4sdHealthCardRawDataRequest requestData)
{ {
var CM = MethodBase.GetCurrentMethod(); var CM = MethodBase.GetCurrentMethod();

View File

@@ -0,0 +1,48 @@
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
namespace FasdCockpitCommunication.TicketOverview
{
internal sealed class TicketOverviewCountsResponse
{
[JsonProperty("counts")]
public Dictionary<string, int> Counts { get; set; } = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);
public Dictionary<string, int> ToDictionary(IEnumerable<string> expectedKeys)
{
var comparer = StringComparer.OrdinalIgnoreCase;
var output = new Dictionary<string, int>(comparer);
if (expectedKeys != null)
{
foreach (var key in expectedKeys)
{
if (string.IsNullOrWhiteSpace(key))
continue;
if (Counts != null && Counts.TryGetValue(key, out var count))
output[key] = count;
else
output[key] = 0;
}
return output;
}
if (Counts != null)
{
foreach (var kvp in Counts)
{
if (string.IsNullOrWhiteSpace(kvp.Key))
continue;
output[kvp.Key] = kvp.Value;
}
}
return output;
}
}
}

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Extensions.Logging.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-10.0.0.2" newVersion="10.0.0.2" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net472" /> <package id="Newtonsoft.Json" version="13.0.4" targetFramework="net472" />
</packages> </packages>

View File

@@ -1,59 +1,69 @@
<?xml version="1.0" encoding="utf-8" ?> <?xml version="1.0" encoding="utf-8" ?>
<F4SD-CopyTemplate-Configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="F4SD-CopyTemplate-Configuration.xsd"> <F4SD-CopyTemplate-Configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="F4SD-CopyTemplate-Configuration.xsd">
<CopyTemplates Default="Ticket Information" > <CopyTemplates Default="Ticket-Information-Computer">
<CopyTemplate Name="Ticket Information"> <CopyTemplate Name="Ticket-Information-Computer">
<Name Lang="DE">Ticket Information</Name> <Name Lang="DE">Ticket-Information-Computer</Name>
<Description Lang="EN">Transfers the relevant information for ticket creation to the clipboard.</Description> <Description Lang="EN">Transfers the relevant information for ticket creation to the clipboard.</Description>
<Description Lang="DE">Überträgt die relevanten Informationen für eine Ticket Erstellung in den Zwischenspeicher.</Description> <Description Lang="DE">Überträgt die relevanten Informationen für eine Ticket Erstellung in den Zwischenspeicher.</Description>
<Icon Name="misc_ticket" IconType="intern"/> <Icon Name="misc_ticket" IconType="intern"/>
<CopyContent Format="UNICODE">%DeviceName.Label% %DeviceName.Value% <CopyContent Format="UNICODE">
%DeviceName.Label% %DeviceName.Value%
%UserFullName.Label% %UserFullName.Value% %UserFullName.Label% %UserFullName.Value%
%UserAccount.Label% %UserAccount.Value% %UserAccount.Label% %UserAccount.Value%
%DeviceModel.Label% %DeviceModel.Value% %DeviceModel.Label% %DeviceModel.Value%
%OsInfo.Label% %OsInfo.Value% %OsInfo.Label% %OsInfo.Value%
%IpAddress.Label% %IpAddress.Value% %IpAddress.Label% %IpAddress.Value%
%LastSeenCalc.Label% %LastSeenCalc.Value%</CopyContent> %LastBoot.Label% %LastBoot.Value%
<CopyContent Format="HTML">&lt;table border=&quot;1&quot; cellpadding=&quot;5,1,5,1&quot;&gt;&lt;tbody&gt; %LastSeen.Label% %LastSeen.Value%
</CopyContent>
<CopyContent Format="HTML">
&lt;table border=&quot;1&quot; cellpadding=&quot;5,1,5,1&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;em&gt;%DeviceName.Label%&lt;/em&gt;&lt;/td&gt;&lt;td style=&quot;color: #0000ff;&quot;&gt;%DeviceName.Value%&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;em&gt;%DeviceName.Label%&lt;/em&gt;&lt;/td&gt;&lt;td style=&quot;color: #0000ff;&quot;&gt;%DeviceName.Value%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;em&gt;%UserFullName.Label%&lt;/em&gt;&lt;/td&gt;&lt;td&gt;%UserFullName.Value%&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;em&gt;%UserFullName.Label%&lt;/em&gt;&lt;/td&gt;&lt;td&gt;%UserFullName.Value%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;em&gt;%UserAccount.Label%&lt;/em&gt;&lt;/td&gt;&lt;td&gt;%UserAccount.Value%&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;em&gt;%UserAccount.Label%&lt;/em&gt;&lt;/td&gt;&lt;td&gt;%UserAccount.Value%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;em&gt;%OsInfo.Label%&lt;/em&gt;&lt;/td&gt;&lt;td&gt;%OsInfo.Value%&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;em&gt;%OsInfo.Label%&lt;/em&gt;&lt;/td&gt;&lt;td&gt;%OsInfo.Value%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;em&gt;%IpAddress.Label%&lt;/em&gt;&lt;/td&gt;&lt;td&gt;%IpAddress.Value%&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;em&gt;%IpAddress.Label%&lt;/em&gt;&lt;/td&gt;&lt;td&gt;%IpAddress.Value%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;em&gt;%LastSeenCalc.Label%&lt;/em&gt;&lt;/td&gt;&lt;td&gt;%LastSeenCalc.Value%&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;em&gt;%LastBoot.Label%&lt;/em&gt;&lt;/td&gt;&lt;td&gt;%LastBoot.Value%&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;</CopyContent> &lt;tr&gt;&lt;td&gt;&lt;em&gt;%LastSeen.Label%&lt;/em&gt;&lt;/td&gt;&lt;td&gt;%LastSeen.Value%&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
</CopyContent>
</CopyTemplate>
<CopyTemplate Name="Ticket Information-VM">
<Name Lang="DE">Ticket Information-VM</Name>
<Description Lang="EN">Transfers the relevant information for ticket creation to the clipboard.</Description>
<Description Lang="DE">Überträgt die relevanten Informationen für eine Ticket Erstellung in den Zwischenspeicher.</Description>
<Icon Name="misc_ticket" IconType="intern"/>
<CopyContent Format="UNICODE">
%VirtualSessionName.Label% %VirtualSessionName.Value%
%DNSName.Label% %DNSName.Value%
%DomainName.Label% %DomainName.Value%
%HostedMachine.Label% %HostedMachine.Value%
</CopyContent>
<CopyContent Format="HTML">
&lt;table border=&quot;1&quot; cellpadding=&quot;5,1,5,1&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;em&gt;%VirtualSessionName.Label%&lt;/em&gt;&lt;/td&gt;&lt;td style=&quot;color: #0000ff;&quot;&gt;%VirtualSessionName.Value%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;em&gt;%DNSName.Label%&lt;/em&gt;&lt;/td&gt;&lt;td&gt;%DNSName.Value%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;em&gt;%DomainName.Label%&lt;/em&gt;&lt;/td&gt;&lt;td&gt;%DomainName.Value%&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td&gt;&lt;em&gt;%HostedMachine.Label%&lt;/em&gt;&lt;/td&gt;&lt;td&gt;%HostedMachine.Value%&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
</CopyContent>
</CopyTemplate> </CopyTemplate>
<CopyTemplate Name="Computer name"> <CopyTemplate Name="Computer name">
<Name Lang="DE">Computer Name</Name> <Name Lang="DE">Computer Name</Name>
<Section>DemoActions</Section> <Section>DemoActions</Section>
<Icon Name="misc_computer" IconType="intern"/> <Icon Name="misc_computer" IconType="intern"/>
<CopyContent Format="UNICODE">%DeviceName.Value%</CopyContent> <CopyContent Format="UNICODE">%DeviceName.Label% %DeviceName.Value%</CopyContent>
</CopyTemplate> </CopyTemplate>
<CopyTemplate Name="User name"> <CopyTemplate Name="User name">
<Name Lang="DE">Anwendername</Name> <Name Lang="DE">Anwendername</Name>
<Icon Name="misc_user" IconType="intern"/> <Icon Name="misc_user" IconType="intern"/>
<CopyContent Format="UNICODE">%UserFullName.Value%</CopyContent> <CopyContent Format="UNICODE">%UserFullName.Label% %UserFullName.Value%</CopyContent>
</CopyTemplate> </CopyTemplate>
<CopyTemplate Name="User account"> <CopyTemplate Name="User account">
<Name Lang="DE">Anwender Account</Name> <Name Lang="DE">Anwender Account</Name>
<Icon Name="misc_user" IconType="intern"/> <Icon Name="misc_user" IconType="intern"/>
<CopyContent Format="UNICODE">%UserAccount.Value%</CopyContent> <CopyContent Format="UNICODE">%UserAccount.Label% %UserAccount.Value%</CopyContent>
</CopyTemplate> </CopyTemplate>
<CopyTemplate Name="Copy last Quick Action">
<Name Lang="DE">Letzte Quick Action kopieren</Name>
<Section>Ticket</Section>
<Icon Name="misc_functionBolt" IconType="intern"/>
<CopyContent Format="UNICODE">%F4SD_QuickActionProtocolLast.Value%</CopyContent>
<CopyContent Format="HTML">%F4SD_QuickActionProtocolLast.Value%</CopyContent>
</CopyTemplate>
<CopyTemplate Name="Copy Quick Action history" HiddenInTicketDialog="true">
<Name Lang="DE">Quick Action Historie kopieren</Name>
<Section>Ticket</Section>
<Icon Name="misc_copy_bolt" IconType="intern"/>
<CopyContent Format="UNICODE">%F4SD_QuickActionProtocol.Value%</CopyContent>
<CopyContent Format="HTML">%F4SD_QuickActionProtocol.Value%</CopyContent>
</CopyTemplate>
</CopyTemplates> </CopyTemplates>
</F4SD-CopyTemplate-Configuration> </F4SD-CopyTemplate-Configuration>

View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<F4SD-Global-Configuration>
<ShouldSkipSlimView Policy="Default" Value="true" />
<SmallViewAlignment Policy="Default" Value="Right" />
<FavouriteBarAlignment Policy="Default" Value="Right" />
<InformationClassSearchPriority Policy="Hidden">
<InformationClass Type="User" />
<InformationClass Type="Computer" />
<InformationClass Type="VirtualSession" />
<InformationClass Type="Ticket" />
</InformationClassSearchPriority>
<TicketConfiguration>
<DisableAutomaticTimeTracking Policy="Mandatory" Value="true" />
<CompletitionPolicy Policy="Mandatory" Value="IfRequired" />
<NotesMandatory Policy="Mandatory" Value="true" />
<ShowOverview Policy="Mandatory" Value="true" />
<OpenActivitiesExternally Policy="Mandatory" Value="false">
<OpenActivityOverride ActivityType="SPSActivityTypeTicket" Value="false" />
<OpenActivityOverride ActivityType="SPSActivityTypeServiceRequest" Value="true" />
</OpenActivitiesExternally>
<OverviewPollingPersonal Policy="Mandatory" Value="10" />
<OverviewPollingRole Policy="Mandatory" Value="5" />
</TicketConfiguration>
</F4SD-Global-Configuration>

View File

@@ -205,9 +205,6 @@
<NamedParameter ParameterName="ad-dn-User" Name="Distinguished name user" Display="STRING" ValueTable="ad-user" ValueColumn="distinguishedName"> <NamedParameter ParameterName="ad-dn-User" Name="Distinguished name user" Display="STRING" ValueTable="ad-user" ValueColumn="distinguishedName">
<Name Lang="DE">Distinguished Name User</Name> <Name Lang="DE">Distinguished Name User</Name>
</NamedParameter> </NamedParameter>
<NamedParameter ParameterName="ad-dn-computer" Name="Distinguished name computer" Display="STRING" ValueTable="ad-computer" ValueColumn="distinguishedName">
<Name Lang="DE">Distinguished Name computer</Name>
</NamedParameter>
<NamedParameter ParameterName="IpAddress" Name="IP address" Display="STRING" ValueTable="agnt-computer-event-string-latest" ValueColumn="NetworkIPLast"> <NamedParameter ParameterName="IpAddress" Name="IP address" Display="STRING" ValueTable="agnt-computer-event-string-latest" ValueColumn="NetworkIPLast">
<Name Lang="DE">IP Adresse</Name> <Name Lang="DE">IP Adresse</Name>
</NamedParameter> </NamedParameter>
@@ -282,8 +279,8 @@
<Computation-Switch-Case ValueId="1">IBM</Computation-Switch-Case> <Computation-Switch-Case ValueId="1">IBM</Computation-Switch-Case>
</Computation-Switch> </Computation-Switch>
<Computation-Format Name="FullDeviceModelName" Format="{0} {1}" ValueTable0="agnt-computer" ValueColumn0="SystemManufacturer" ValueTable1="Computation_DeviceModel" ValueColumn1="default" RemoveDuplicateWords="true" /> <Computation-Format Name="FullDeviceModelName" Format="{0} {1}" ValueTable0="agnt-computer" ValueColumn0="SystemManufacturer" ValueTable1="Computation_DeviceModel" ValueColumn1="default" RemoveDuplicateWords="true" />
<Computation-LinearAddition Name="IntuneMobileDeviceCount" a="1" b="1" c="0" ValueTable0="intune-userDeviceCount" ValueColumn0="iOS" ValueTable1="intune-userDeviceCount" ValueColumn1="android" /> <!--<Computation-LinearAddition Name="IntuneMobileDeviceCount" a="1" b="1" c="0" ValueTable0="intune-userDeviceCount" ValueColumn0="iOS" ValueTable1="intune-userDeviceCount" ValueColumn1="android" />
<Computation-LinearAddition Name="IntuneOtherDeviceCount" a="1" b="1" c="0" ValueTable0="intune-userDeviceCount" ValueColumn0="macOs" ValueTable1="intune-userDeviceCount" ValueColumn1="linux" /> <Computation-LinearAddition Name="IntuneOtherDeviceCount" a="1" b="1" c="0" ValueTable0="intune-userDeviceCount" ValueColumn0="macOs" ValueTable1="intune-userDeviceCount" ValueColumn1="linux" />-->
</Computations> </Computations>
<Translations> <Translations>
<Translator Name="true_good"> <Translator Name="true_good">
@@ -470,7 +467,7 @@
<State-Aggregation RefName="Ram_Details_Aggregation" Name="RAM Details"> <State-Aggregation RefName="Ram_Details_Aggregation" Name="RAM Details">
<State-Link Reference="RAM_Relative" /> <State-Link Reference="RAM_Relative" />
<State-Level Name="Free Memory" ValueTable="agnt-computer-event" ValueColumn="MemoryFree" Warning="4294967296" Error="2147483648" Direction="down"> <State-Level Name="Free Memory" ValueTable="agnt-computer-event-numerical" ValueColumn="MemoryFree" Warning="4294967296" Error="2147483648" Direction="down">
<Name Lang="DE">Freier Speicher</Name> <Name Lang="DE">Freier Speicher</Name>
</State-Level> </State-Level>
</State-Aggregation> </State-Aggregation>
@@ -570,7 +567,7 @@
<State-Info Name="Primary user" ValueTable="intune-deviceInfo" ValueColumn="userDisplayName"> <State-Info Name="Primary user" ValueTable="intune-deviceInfo" ValueColumn="userDisplayName">
<Name Lang="DE">Hauptbenutzer</Name> <Name Lang="DE">Hauptbenutzer</Name>
</State-Info> </State-Info>
<State-Info Name="Last Sync Date" ValueTable="intune-deviceInfo" ValueColumn="lastSyncDateTime"> <State-Info Name="Last Sync Date" ValueTable="intune-deviceInfo" ValueColumn="lastSyncDateTime" Display="DATETIME">
<Name Lang="DE">Letzte Synchronisation</Name> <Name Lang="DE">Letzte Synchronisation</Name>
</State-Info> </State-Info>
@@ -1065,9 +1062,6 @@
<NamedParameter ParameterName="ad-dn-User" Name="Distinguished name user" Display="STRING" ValueTable="ad-user" ValueColumn="distinguishedName"> <NamedParameter ParameterName="ad-dn-User" Name="Distinguished name user" Display="STRING" ValueTable="ad-user" ValueColumn="distinguishedName">
<Name Lang="DE">Distinguished Name User</Name> <Name Lang="DE">Distinguished Name User</Name>
</NamedParameter> </NamedParameter>
<NamedParameter ParameterName="ad-dn-computer" Name="Distinguished name computer" Display="STRING" ValueTable="ad-computer" ValueColumn="distinguishedName">
<Name Lang="DE">Distinguished Name computer</Name>
</NamedParameter>
<NamedParameter ParameterName="UserFullName" Name="User name" Display="STRING" ValueTable="ad-user" ValueColumn="name"> <NamedParameter ParameterName="UserFullName" Name="User name" Display="STRING" ValueTable="ad-user" ValueColumn="name">
<Name Lang="DE">Anwender</Name> <Name Lang="DE">Anwender</Name>
@@ -1295,10 +1289,10 @@
<State-Info Name="Session name" ParameterName="VirtualSessionName"> <State-Info Name="Session name" ParameterName="VirtualSessionName">
<Name Lang="DE">Sessionname</Name> <Name Lang="DE">Sessionname</Name>
</State-Info> </State-Info>
<State-Info Name="Start Date" ValueTable="citrix-session" ValueColumn="StartDate"> <State-Info Name="Start Date" ValueTable="citrix-session" ValueColumn="StartDate" Display="DATETIME">
<Name Lang="DE">Startdatum</Name> <Name Lang="DE">Startdatum</Name>
</State-Info> </State-Info>
<State-Info Name="End Date" ValueTable="citrix-session" ValueColumn="EndDate"> <State-Info Name="End Date" ValueTable="citrix-session" ValueColumn="EndDate" Display="DATETIME">
<Name Lang="DE">Enddatum</Name> <Name Lang="DE">Enddatum</Name>
</State-Info> </State-Info>
<State-Translation Name="Connection State" ValueTable="citrix-session" ValueColumn="ConnectionState" Translation ="citrix_connectionState" DefaultState="Ok" > <State-Translation Name="Connection State" ValueTable="citrix-session" ValueColumn="ConnectionState" Translation ="citrix_connectionState" DefaultState="Ok" >

View File

@@ -32,7 +32,6 @@
<xs:enumeration value="PERCENT" /> <xs:enumeration value="PERCENT" />
<xs:enumeration value="PERCENT100" /> <xs:enumeration value="PERCENT100" />
<xs:enumeration value="PERCENT1000" /> <xs:enumeration value="PERCENT1000" />
<xs:enumeration value="PERCENT10000" />
<xs:enumeration value="TIME" /> <xs:enumeration value="TIME" />
<xs:enumeration value="DATE" /> <xs:enumeration value="DATE" />
<xs:enumeration value="DATE_CALC" /> <xs:enumeration value="DATE_CALC" />
@@ -103,6 +102,13 @@
</xs:restriction> </xs:restriction>
</xs:simpleType> </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:attributeGroup name="ValuePointer">
<xs:attribute name="Name" type="xs:string" use="optional" /> <xs:attribute name="Name" type="xs:string" use="optional" />
<xs:attribute name="ParameterName" type="xs:NCName" use="optional" /> <xs:attribute name="ParameterName" type="xs:NCName" use="optional" />
@@ -544,7 +550,8 @@
<xs:complexType> <xs:complexType>
<xs:complexContent> <xs:complexContent>
<xs:extension base="State-Details-Base"> <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="ColSeparator" type="xs:string" use="optional"/>
<xs:attribute name="StringDecorator" type="Separator" use="optional"/> <xs:attribute name="StringDecorator" type="Separator" use="optional"/>
</xs:extension> </xs:extension>

View File

@@ -54,7 +54,7 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="Newtonsoft.Json, Version=13.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <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>
<Reference Include="System" /> <Reference Include="System" />
<Reference Include="System.Core" /> <Reference Include="System.Core" />
@@ -119,9 +119,13 @@
<Content Include="Config\F4SD-MenuSection-Configuration.xml"> <Content Include="Config\F4SD-MenuSection-Configuration.xml">
<CopyToOutputDirectory>Always</CopyToOutputDirectory> <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content> </Content>
<Content Include="Config\F4SD-Global-Configuration.xml">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="Config\F4SD-QuickAction-Configuration.xml"> <Content Include="Config\F4SD-QuickAction-Configuration.xml">
<CopyToOutputDirectory>Always</CopyToOutputDirectory> <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content> </Content>
<None Include="app.config" />
<None Include="Config\F4SD-CopyTemplate-Configuration.xsd"> <None Include="Config\F4SD-CopyTemplate-Configuration.xsd">
<SubType>Designer</SubType> <SubType>Designer</SubType>
</None> </None>
@@ -251,6 +255,9 @@
<None Include="MockupPickup\M42Wpm-Ticket-QuickCalls.json"> <None Include="MockupPickup\M42Wpm-Ticket-QuickCalls.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory> <CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None> </None>
<None Include="MockupPickup\M42Wpm-Ticket-Categories.json">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="packages.config" /> <None Include="packages.config" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -486,7 +486,7 @@
{ {
"ColumnName": "id", "ColumnName": "id",
"Values": [ "Values": [
2.0, 2,
null, null,
null, null,
null, null,
@@ -639,7 +639,7 @@
{ {
"ColumnName": "BootLast", "ColumnName": "BootLast",
"Values": [ "Values": [
5.0, 5,
null, null,
null, null,
null, null,
@@ -705,7 +705,7 @@
{ {
"ColumnName": "DiskTotal", "ColumnName": "DiskTotal",
"Values": [ "Values": [
511101108224.0, 511101108224,
null, null,
null, null,
null, null,
@@ -738,7 +738,7 @@
{ {
"ColumnName": "DiskFree", "ColumnName": "DiskFree",
"Values": [ "Values": [
3435973836.0, 3435973836,
null, null,
null, null,
null, null,
@@ -771,7 +771,7 @@
{ {
"ColumnName": "SystemDiskTotal", "ColumnName": "SystemDiskTotal",
"Values": [ "Values": [
274877906944.0, 274877906944,
null, null,
null, null,
null, null,
@@ -804,7 +804,7 @@
{ {
"ColumnName": "SystemDiskFree", "ColumnName": "SystemDiskFree",
"Values": [ "Values": [
8589934592.0, 8589934592,
null, null,
null, null,
null, null,
@@ -837,7 +837,7 @@
{ {
"ColumnName": "MemoryTotal", "ColumnName": "MemoryTotal",
"Values": [ "Values": [
34037615820.0, 34037615820,
null, null,
null, null,
null, null,
@@ -1056,21 +1056,21 @@
{ {
"ColumnName": "BootLast", "ColumnName": "BootLast",
"Values": [ "Values": [
5.0, 5,
4.0, 4,
3.0, 3,
2.0, 2,
1.0, 1,
0.0, 0,
0.0, 0,
0.0, 0,
0.0, 0,
2.0, 2,
1.0, 1,
0.0, 0,
0.0, 0,
0.0, 0,
0.0, 0,
null, null,
null, null,
null, null,
@@ -1094,16 +1094,16 @@
null, null,
null, null,
null, null,
2.0, 2,
1.0, 1,
1.0, 1,
1.0, 1,
null, null,
null, null,
2.0, 2,
1.0, 1,
1.0, 1,
1.0, 1,
null, null,
null, null,
null, null,
@@ -1122,14 +1122,14 @@
{ {
"ColumnName": "NetworkWifiSignal", "ColumnName": "NetworkWifiSignal",
"Values": [ "Values": [
60.0, 60,
45.0, 45,
87.0, 87,
null, null,
null, null,
null, null,
92.0, 92,
87.0, 87,
null, null,
null, null,
null, null,
@@ -1155,21 +1155,21 @@
{ {
"ColumnName": "DiskTotal", "ColumnName": "DiskTotal",
"Values": [ "Values": [
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
null, null,
null, null,
null, null,
@@ -1188,21 +1188,21 @@
{ {
"ColumnName": "DiskFree", "ColumnName": "DiskFree",
"Values": [ "Values": [
3435973836.0, 3435973836,
26843545600.0, 26843545600,
84359738368.0, 84359738368,
105784247808.0, 105784247808,
105884247808.0, 105884247808,
105785247808.0, 105785247808,
105818914474.0, 105818914474,
105819414474.0, 105819414474,
105819914474.0, 105819914474,
105820414474.0, 105820414474,
105820914474.0, 105820914474,
105821414474.0, 105821414474,
105821914474.0, 105821914474,
105822414474.0, 105822414474,
105822914474.0, 105822914474,
null, null,
null, null,
null, null,
@@ -1221,21 +1221,21 @@
{ {
"ColumnName": "SystemDiskTotal", "ColumnName": "SystemDiskTotal",
"Values": [ "Values": [
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
null, null,
null, null,
null, null,
@@ -1254,21 +1254,21 @@
{ {
"ColumnName": "SystemDiskFree", "ColumnName": "SystemDiskFree",
"Values": [ "Values": [
8589934592.0, 8589934592,
28600000000.0, 28600000000,
71203283968.0, 71203283968,
77893283968.0, 77893283968,
71232283968.0, 71232283968,
81203283968.0, 81203283968,
81217783968.0, 81217783968,
83551683968.0, 83551683968,
85885583968.0, 85885583968,
88219483968.0, 88219483968,
90553383968.0, 90553383968,
92887283968.0, 92887283968,
95221183968.0, 95221183968,
97555083968.0, 97555083968,
99888983968.0, 99888983968,
null, null,
null, null,
null, null,
@@ -1287,21 +1287,21 @@
{ {
"ColumnName": "MemoryTotal", "ColumnName": "MemoryTotal",
"Values": [ "Values": [
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
null, null,
null, null,
null, null,
@@ -1320,21 +1320,21 @@
{ {
"ColumnName": "MemoryFree", "ColumnName": "MemoryFree",
"Values": [ "Values": [
21260088115.0, 21260088115,
21277781150.0, 21277781150,
24837781150.0, 24837781150,
18837781150.0, 18837781150,
26837781150.0, 26837781150,
26377781150.0, 26377781150,
14837781150.0, 14837781150,
24839981150.0, 24839981150,
24837781150.0, 24837781150,
24008141150.0, 24008141150,
24364329720.0, 24364329720,
24720518290.0, 24720518290,
25076706860.0, 25076706860,
25432895430.0, 25432895430,
25789084000.0, 25789084000,
null, null,
null, null,
null, null,
@@ -1353,21 +1353,21 @@
{ {
"ColumnName": "ProcessorUsage", "ColumnName": "ProcessorUsage",
"Values": [ "Values": [
12.0, 12,
20.0, 20,
18.0, 18,
15.0, 15,
18.0, 18,
19.0, 19,
20.0, 20,
26.0, 26,
17.0, 17,
11.0, 11,
18.0, 18,
16.0, 16,
16.0, 16,
14.0, 14,
15.0, 15,
null, null,
null, null,
null, null,
@@ -1457,16 +1457,16 @@
null, null,
null, null,
null, null,
88000.0, 88000,
14000.0, 14000,
16000.0, 16000,
17000.0, 17000,
null, null,
null, null,
14000.0, 14000,
13000.0, 13000,
17000.0, 17000,
16000.0, 16000,
null, null,
null, null,
null, null,
@@ -1485,21 +1485,21 @@
{ {
"ColumnName": "NetworkRecievedTraffic", "ColumnName": "NetworkRecievedTraffic",
"Values": [ "Values": [
107374182.0, 107374182,
6120328396.0, 6120328396,
53687091.0, 53687091,
193273528.0, 193273528,
193273528.0, 193273528,
193273528.0, 193273528,
612032839.0, 612032839,
193273528.0, 193273528,
193273528.0, 193273528,
612032839.0, 612032839,
612032839.0, 612032839,
193273528.0, 193273528,
193273528.0, 193273528,
612032839.0, 612032839,
193273528.0, 193273528,
null, null,
null, null,
null, null,
@@ -1518,21 +1518,21 @@
{ {
"ColumnName": "NetworkSentTraffic", "ColumnName": "NetworkSentTraffic",
"Values": [ "Values": [
5368709.0, 5368709,
5368709.0, 5368709,
5368709.0, 5368709,
189273528.0, 189273528,
189298528.0, 189298528,
82298528.0, 82298528,
191530456.0, 191530456,
223540266.0, 223540266,
255550077.0, 255550077,
287559887.0, 287559887,
319569698.0, 319569698,
351579509.0, 351579509,
383589319.0, 383589319,
415599130.0, 415599130,
447608941.0, 447608941,
null, null,
null, null,
null, null,
@@ -1704,7 +1704,7 @@
{ {
"ColumnName": "Logon", "ColumnName": "Logon",
"Values": [ "Values": [
0.0, 0,
null, null,
null, null,
null, null,
@@ -1923,21 +1923,21 @@
{ {
"ColumnName": "Logon", "ColumnName": "Logon",
"Values": [ "Values": [
0.0, 0,
0.0, 0,
1.0, 1,
2.0, 2,
1.0, 1,
0.0, 0,
0.0, 0,
0.0, 0,
0.0, 0,
2.0, 2,
1.0, 1,
0.0, 0,
0.0, 0,
0.0, 0,
0.0, 0,
null, null,
null, null,
null, null,
@@ -1956,21 +1956,21 @@
{ {
"ColumnName": "LogonCount", "ColumnName": "LogonCount",
"Values": [ "Values": [
2.0, 2,
1.0, 1,
null, null,
null, null,
null, null,
2.0, 2,
1.0, 1,
1.0, 1,
1.0, 1,
null, null,
null, null,
2.0, 2,
1.0, 1,
1.0, 1,
1.0, 1,
null, null,
null, null,
null, null,
@@ -2060,7 +2060,7 @@
null, null,
null, null,
null, null,
1.0, 1,
null, null,
null, null,
null, null,
@@ -2093,7 +2093,7 @@
null, null,
null, null,
null, null,
1.0, 1,
null, null,
null, null,
null, null,
@@ -2122,7 +2122,7 @@
"ColumnName": "ApplicationHang", "ColumnName": "ApplicationHang",
"Values": [ "Values": [
null, null,
3.0, 3,
null, null,
null, null,
null, null,
@@ -2154,7 +2154,7 @@
{ {
"ColumnName": "ApplicationCrash", "ColumnName": "ApplicationCrash",
"Values": [ "Values": [
2.0, 2,
null, null,
null, null,
null, null,
@@ -2387,57 +2387,57 @@
"5": [ "5": [
[ [
"2022-05-24T10:53:57.78", "2022-05-24T10:53:57.78",
160000.0 160000
], ],
[ [
"2022-05-24T11:22:45.78", "2022-05-24T11:22:45.78",
16000.0 16000
] ]
], ],
"6": [ "6": [
[ [
"2022-05-23T11:22:45.78", "2022-05-23T11:22:45.78",
14000.0 14000
] ]
], ],
"7": [ "7": [
[ [
"2022-05-22T11:22:45.78", "2022-05-22T11:22:45.78",
16000.0 16000
] ]
], ],
"8": [ "8": [
[ [
"2022-05-21T11:22:45.78", "2022-05-21T11:22:45.78",
17000.0 17000
] ]
], ],
"11": [ "11": [
[ [
"2022-05-18T11:08:21.78", "2022-05-18T11:08:21.78",
14000.0 14000
], ],
[ [
"2022-05-18T13:32:21.78", "2022-05-18T13:32:21.78",
14000.0 14000
] ]
], ],
"12": [ "12": [
[ [
"2022-05-18T15:56:21.78", "2022-05-18T15:56:21.78",
13000.0 13000
] ]
], ],
"13": [ "13": [
[ [
"2022-05-16T13:17:57.78", "2022-05-16T13:17:57.78",
17000.0 17000
] ]
], ],
"14": [ "14": [
[ [
"2022-05-15T13:32:21.78", "2022-05-15T13:32:21.78",
16000.0 16000
] ]
] ]
} }

File diff suppressed because it is too large Load Diff

View File

@@ -1089,7 +1089,7 @@
{ {
"ColumnName": "DiskTotal", "ColumnName": "DiskTotal",
"Values": [ "Values": [
511101108224.0, 511101108224,
null, null,
null, null,
null, null,
@@ -1122,7 +1122,7 @@
{ {
"ColumnName": "DiskFree", "ColumnName": "DiskFree",
"Values": [ "Values": [
3435973836.0, 3435973836,
null, null,
null, null,
null, null,
@@ -1155,7 +1155,7 @@
{ {
"ColumnName": "SystemDiskTotal", "ColumnName": "SystemDiskTotal",
"Values": [ "Values": [
274877906944.0, 274877906944,
null, null,
null, null,
null, null,
@@ -1188,7 +1188,7 @@
{ {
"ColumnName": "SystemDiskFree", "ColumnName": "SystemDiskFree",
"Values": [ "Values": [
8589934592.0, 8589934592,
null, null,
null, null,
null, null,
@@ -1221,7 +1221,7 @@
{ {
"ColumnName": "MemoryTotal", "ColumnName": "MemoryTotal",
"Values": [ "Values": [
34037615820.0, 34037615820,
null, null,
null, null,
null, null,
@@ -1478,16 +1478,16 @@
null, null,
null, null,
null, null,
2.0, 2,
1.0, 1,
1.0, 1,
1.0, 1,
null, null,
null, null,
2.0, 2,
1.0, 1,
1.0, 1,
1.0, 1,
null, null,
null, null,
null, null,
@@ -1539,21 +1539,21 @@
{ {
"ColumnName": "DiskTotal", "ColumnName": "DiskTotal",
"Values": [ "Values": [
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
null, null,
null, null,
null, null,
@@ -1572,21 +1572,21 @@
{ {
"ColumnName": "DiskFree", "ColumnName": "DiskFree",
"Values": [ "Values": [
3435973836.0, 3435973836,
26843545600.0, 26843545600,
84359738368.0, 84359738368,
105784247808.0, 105784247808,
105884247808.0, 105884247808,
105785247808.0, 105785247808,
105818914474.0, 105818914474,
105819414474.0, 105819414474,
105819914474.0, 105819914474,
105820414474.0, 105820414474,
105820914474.0, 105820914474,
105821414474.0, 105821414474,
105821914474.0, 105821914474,
105822414474.0, 105822414474,
105822914474.0, 105822914474,
null, null,
null, null,
null, null,
@@ -1605,21 +1605,21 @@
{ {
"ColumnName": "SystemDiskTotal", "ColumnName": "SystemDiskTotal",
"Values": [ "Values": [
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
null, null,
null, null,
null, null,
@@ -1638,21 +1638,21 @@
{ {
"ColumnName": "SystemDiskFree", "ColumnName": "SystemDiskFree",
"Values": [ "Values": [
8589934592.0, 8589934592,
28600000000.0, 28600000000,
71203283968.0, 71203283968,
77893283968.0, 77893283968,
71232283968.0, 71232283968,
81203283968.0, 81203283968,
81217783968.0, 81217783968,
83551683968.0, 83551683968,
85885583968.0, 85885583968,
88219483968.0, 88219483968,
90553383968.0, 90553383968,
92887283968.0, 92887283968,
95221183968.0, 95221183968,
97555083968.0, 97555083968,
99888983968.0, 99888983968,
null, null,
null, null,
null, null,
@@ -1671,21 +1671,21 @@
{ {
"ColumnName": "MemoryTotal", "ColumnName": "MemoryTotal",
"Values": [ "Values": [
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
null, null,
null, null,
null, null,
@@ -1704,21 +1704,21 @@
{ {
"ColumnName": "MemoryFree", "ColumnName": "MemoryFree",
"Values": [ "Values": [
21260088115.0, 21260088115,
21277781150.0, 21277781150,
24837781150.0, 24837781150,
18837781150.0, 18837781150,
26837781150.0, 26837781150,
26377781150.0, 26377781150,
14837781150.0, 14837781150,
24839981150.0, 24839981150,
24837781150.0, 24837781150,
24008141150.0, 24008141150,
24364329720.0, 24364329720,
24720518290.0, 24720518290,
25076706860.0, 25076706860,
25432895430.0, 25432895430,
25789084000.0, 25789084000,
null, null,
null, null,
null, null,
@@ -1737,21 +1737,21 @@
{ {
"ColumnName": "ProcessorUsage", "ColumnName": "ProcessorUsage",
"Values": [ "Values": [
12.0, 12,
20.0, 20,
18.0, 18,
15.0, 15,
18.0, 18,
19.0, 19,
20.0, 20,
26.0, 26,
17.0, 17,
11.0, 11,
18.0, 18,
16.0, 16,
16.0, 16,
14.0, 14,
15.0, 15,
null, null,
null, null,
null, null,
@@ -1841,16 +1841,16 @@
null, null,
null, null,
null, null,
16000.0, 16000,
14000.0, 14000,
16000.0, 16000,
17000.0, 17000,
null, null,
null, null,
14000.0, 14000,
13000.0, 13000,
17000.0, 17000,
16000.0, 16000,
null, null,
null, null,
null, null,
@@ -1869,21 +1869,21 @@
{ {
"ColumnName": "NetworkRecievedTraffic", "ColumnName": "NetworkRecievedTraffic",
"Values": [ "Values": [
107374182.0, 107374182,
6120328396.0, 6120328396,
53687091.0, 53687091,
193273528.0, 193273528,
193273528.0, 193273528,
193273528.0, 193273528,
612032839.0, 612032839,
193273528.0, 193273528,
193273528.0, 193273528,
612032839.0, 612032839,
612032839.0, 612032839,
193273528.0, 193273528,
193273528.0, 193273528,
612032839.0, 612032839,
193273528.0, 193273528,
null, null,
null, null,
null, null,
@@ -1902,21 +1902,21 @@
{ {
"ColumnName": "NetworkSentTraffic", "ColumnName": "NetworkSentTraffic",
"Values": [ "Values": [
5368709.0, 5368709,
5368709.0, 5368709,
5368709.0, 5368709,
189273528.0, 189273528,
189298528.0, 189298528,
82298528.0, 82298528,
191530456.0, 191530456,
223540266.0, 223540266,
255550077.0, 255550077,
287559887.0, 287559887,
319569698.0, 319569698,
351579509.0, 351579509,
383589319.0, 383589319,
415599130.0, 415599130,
447608941.0, 447608941,
null, null,
null, null,
null, null,
@@ -2340,21 +2340,21 @@
{ {
"ColumnName": "LogonCount", "ColumnName": "LogonCount",
"Values": [ "Values": [
2.0, 2,
1.0, 1,
null, null,
null, null,
null, null,
2.0, 2,
1.0, 1,
1.0, 1,
1.0, 1,
null, null,
null, null,
2.0, 2,
1.0, 1,
1.0, 1,
1.0, 1,
null, null,
null, null,
null, null,
@@ -2440,7 +2440,7 @@
"ColumnName": "HardReset", "ColumnName": "HardReset",
"Values": [ "Values": [
null, null,
1.0, 1,
null, null,
null, null,
null, null,
@@ -2474,7 +2474,7 @@
"Values": [ "Values": [
null, null,
null, null,
1.0, 1,
null, null,
null, null,
null, null,
@@ -2506,7 +2506,7 @@
"ColumnName": "ApplicationHang", "ColumnName": "ApplicationHang",
"Values": [ "Values": [
null, null,
3.0, 3,
null, null,
null, null,
null, null,
@@ -2538,7 +2538,7 @@
{ {
"ColumnName": "ApplicationCrash", "ColumnName": "ApplicationCrash",
"Values": [ "Values": [
2.0, 2,
null, null,
null, null,
null, null,
@@ -2771,57 +2771,57 @@
"5": [ "5": [
[ [
"2022-05-14T00:55:15.34", "2022-05-14T00:55:15.34",
16000.0 16000
], ],
[ [
"2022-05-14T01:24:03.34", "2022-05-14T01:24:03.34",
16000.0 16000
] ]
], ],
"6": [ "6": [
[ [
"2022-05-13T01:24:03.34", "2022-05-13T01:24:03.34",
14000.0 14000
] ]
], ],
"7": [ "7": [
[ [
"2022-05-12T01:24:03.34", "2022-05-12T01:24:03.34",
16000.0 16000
] ]
], ],
"8": [ "8": [
[ [
"2022-05-11T01:24:03.34", "2022-05-11T01:24:03.34",
17000.0 17000
] ]
], ],
"11": [ "11": [
[ [
"2022-05-08T01:09:39.34", "2022-05-08T01:09:39.34",
14000.0 14000
], ],
[ [
"2022-05-08T03:33:39.34", "2022-05-08T03:33:39.34",
14000.0 14000
] ]
], ],
"12": [ "12": [
[ [
"2022-05-08T05:57:39.34", "2022-05-08T05:57:39.34",
13000.0 13000
] ]
], ],
"13": [ "13": [
[ [
"2022-05-06T03:19:15.34", "2022-05-06T03:19:15.34",
17000.0 17000
] ]
], ],
"14": [ "14": [
[ [
"2022-05-05T03:33:39.34", "2022-05-05T03:33:39.34",
16000.0 16000
] ]
] ]
} }
@@ -2856,5 +2856,49 @@
] ]
} }
} }
],
"Tickets": [
{
"AffectedUser": "Kiefer, Maximilian",
"Asset": "C4-NB00015",
"CreationDaysSinceNow": 0,
"CreationDate": "2025-06-20T14:32:52.5790686+02:00",
"ClosingDaysSinceNow": null,
"ClosingDate": null,
"CreationSource": 1,
"Description": "WLAN im Lager faellt minutenweise aus",
"DescriptionHtml": "<p>WLAN im Lager faellt minutenweise aus</p>",
"Priority": 2,
"Category": "2c6fca4b-a1a0-ed11-5a81-000c299eb325",
"Solution": null,
"SolutionHtml": null,
"DirectLinks": {},
"JournalItems": [],
"Id": "9b7710d4-72da-4b2a-9d0c-be02575d2c52",
"Name": "TCK00410",
"Summary": "WLAN im Lager faellt minutenweise aus",
"Status": 2
},
{
"AffectedUser": "Kiefer, Maximilian",
"Asset": "C4-NB00015",
"CreationDaysSinceNow": 0,
"CreationDate": "2025-06-20T14:32:52.5790686+02:00",
"ClosingDaysSinceNow": null,
"ClosingDate": null,
"CreationSource": 1,
"Description": "Windows Rollout haengt auf mehreren Clients",
"DescriptionHtml": "<p>Windows Rollout haengt auf mehreren Clients</p>",
"Priority": 2,
"Category": "14a23183-337e-e811-b382-000d3a24f586",
"Solution": null,
"SolutionHtml": null,
"DirectLinks": {},
"JournalItems": [],
"Id": "7e852bb9-420b-4caa-b79a-9178d793fc06",
"Name": "INC00405",
"Summary": "Windows Rollout haengt auf mehreren Clients",
"Status": 2
}
] ]
} }

File diff suppressed because it is too large Load Diff

View File

@@ -936,7 +936,7 @@
{ {
"ColumnName": "id", "ColumnName": "id",
"Values": [ "Values": [
1.0, 1,
null, null,
null, null,
null, null,
@@ -1089,7 +1089,7 @@
{ {
"ColumnName": "BootLast", "ColumnName": "BootLast",
"Values": [ "Values": [
0.0, 0,
null, null,
null, null,
null, null,
@@ -1155,7 +1155,7 @@
{ {
"ColumnName": "DiskTotal", "ColumnName": "DiskTotal",
"Values": [ "Values": [
511101108224.0, 511101108224,
null, null,
null, null,
null, null,
@@ -1188,7 +1188,7 @@
{ {
"ColumnName": "DiskFree", "ColumnName": "DiskFree",
"Values": [ "Values": [
193435973836.0, 193435973836,
null, null,
null, null,
null, null,
@@ -1221,7 +1221,7 @@
{ {
"ColumnName": "SystemDiskTotal", "ColumnName": "SystemDiskTotal",
"Values": [ "Values": [
274877906944.0, 274877906944,
null, null,
null, null,
null, null,
@@ -1254,7 +1254,7 @@
{ {
"ColumnName": "SystemDiskFree", "ColumnName": "SystemDiskFree",
"Values": [ "Values": [
158993459200.0, 158993459200,
null, null,
null, null,
null, null,
@@ -1287,7 +1287,7 @@
{ {
"ColumnName": "MemoryTotal", "ColumnName": "MemoryTotal",
"Values": [ "Values": [
34037615820.0, 34037615820,
null, null,
null, null,
null, null,
@@ -1506,21 +1506,21 @@
{ {
"ColumnName": "BootLast", "ColumnName": "BootLast",
"Values": [ "Values": [
0.0, 0,
4.0, 4,
3.0, 3,
2.0, 2,
1.0, 1,
0.0, 0,
0.0, 0,
0.0, 0,
0.0, 0,
2.0, 2,
1.0, 1,
0.0, 0,
0.0, 0,
0.0, 0,
0.0, 0,
null, null,
null, null,
null, null,
@@ -1540,20 +1540,20 @@
"ColumnName": "BootCount", "ColumnName": "BootCount",
"Values": [ "Values": [
null, null,
1.0, 1,
null, null,
null, null,
null, null,
2.0, 2,
1.0, 1,
1.0, 1,
1.0, 1,
null, null,
null, null,
2.0, 2,
1.0, 1,
1.0, 1,
1.0, 1,
null, null,
null, null,
null, null,
@@ -1572,14 +1572,14 @@
{ {
"ColumnName": "NetworkWifiSignal", "ColumnName": "NetworkWifiSignal",
"Values": [ "Values": [
85.0, 85,
90.0, 90,
87.0, 87,
null, null,
null, null,
null, null,
92.0, 92,
87.0, 87,
null, null,
null, null,
null, null,
@@ -1605,21 +1605,21 @@
{ {
"ColumnName": "DiskTotal", "ColumnName": "DiskTotal",
"Values": [ "Values": [
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
null, null,
null, null,
null, null,
@@ -1638,21 +1638,21 @@
{ {
"ColumnName": "DiskFree", "ColumnName": "DiskFree",
"Values": [ "Values": [
193435973836.0, 193435973836,
126843545600.0, 126843545600,
184359738368.0, 184359738368,
105784247808.0, 105784247808,
105884247808.0, 105884247808,
105785247808.0, 105785247808,
105818914474.0, 105818914474,
110581941447.0, 110581941447,
110581991447.0, 110581991447,
110582041447.0, 110582041447,
110582091447.0, 110582091447,
110582141447.0, 110582141447,
110582191447.0, 110582191447,
110582241447.0, 110582241447,
110582291447.0, 110582291447,
null, null,
null, null,
null, null,
@@ -1671,21 +1671,21 @@
{ {
"ColumnName": "SystemDiskTotal", "ColumnName": "SystemDiskTotal",
"Values": [ "Values": [
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
null, null,
null, null,
null, null,
@@ -1704,21 +1704,21 @@
{ {
"ColumnName": "SystemDiskFree", "ColumnName": "SystemDiskFree",
"Values": [ "Values": [
158993459200.0, 158993459200,
260000000000.0, 260000000000,
171203283968.0, 171203283968,
177893283968.0, 177893283968,
171232283968.0, 171232283968,
181203283968.0, 181203283968,
181217783968.0, 181217783968,
183551683968.0, 183551683968,
185885583968.0, 185885583968,
188219483968.0, 188219483968,
190553383968.0, 190553383968,
192887283968.0, 192887283968,
195221183968.0, 195221183968,
197555083968.0, 197555083968,
199888983968.0, 199888983968,
null, null,
null, null,
null, null,
@@ -1737,21 +1737,21 @@
{ {
"ColumnName": "MemoryTotal", "ColumnName": "MemoryTotal",
"Values": [ "Values": [
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
null, null,
null, null,
null, null,
@@ -1770,21 +1770,21 @@
{ {
"ColumnName": "MemoryFree", "ColumnName": "MemoryFree",
"Values": [ "Values": [
21260088115.0, 21260088115,
21277781150.0, 21277781150,
24837781150.0, 24837781150,
18837781150.0, 18837781150,
26837781150.0, 26837781150,
26377781150.0, 26377781150,
14837781150.0, 14837781150,
24839981150.0, 24839981150,
24837781150.0, 24837781150,
24008141150.0, 24008141150,
24364329720.0, 24364329720,
24720518290.0, 24720518290,
25076706860.0, 25076706860,
25432895430.0, 25432895430,
25789084000.0, 25789084000,
null, null,
null, null,
null, null,
@@ -1803,21 +1803,21 @@
{ {
"ColumnName": "ProcessorUsage", "ColumnName": "ProcessorUsage",
"Values": [ "Values": [
12.0, 12,
14.0, 14,
18.0, 18,
15.0, 15,
18.0, 18,
19.0, 19,
20.0, 20,
26.0, 26,
17.0, 17,
11.0, 11,
18.0, 18,
16.0, 16,
16.0, 16,
14.0, 14,
15.0, 15,
null, null,
null, null,
null, null,
@@ -1903,20 +1903,20 @@
"ColumnName": "BootDuration", "ColumnName": "BootDuration",
"Values": [ "Values": [
null, null,
15000.0, 15000,
null, null,
null, null,
null, null,
16000.0, 16000,
14000.0, 14000,
16000.0, 16000,
17000.0, 17000,
null, null,
null, null,
14000.0, 14000,
13000.0, 13000,
17000.0, 17000,
16000.0, 16000,
null, null,
null, null,
null, null,
@@ -1935,21 +1935,21 @@
{ {
"ColumnName": "NetworkRecievedTraffic", "ColumnName": "NetworkRecievedTraffic",
"Values": [ "Values": [
107374182.0, 107374182,
120328396.0, 120328396,
53687091.0, 53687091,
193273528.0, 193273528,
193273528.0, 193273528,
193273528.0, 193273528,
612032839.0, 612032839,
193273528.0, 193273528,
193273528.0, 193273528,
612032839.0, 612032839,
612032839.0, 612032839,
193273528.0, 193273528,
193273528.0, 193273528,
612032839.0, 612032839,
193273528.0, 193273528,
null, null,
null, null,
null, null,
@@ -1968,21 +1968,21 @@
{ {
"ColumnName": "NetworkSentTraffic", "ColumnName": "NetworkSentTraffic",
"Values": [ "Values": [
38654705664.0, 38654705664,
5368709.0, 5368709,
5368709.0, 5368709,
189273528.0, 189273528,
189298528.0, 189298528,
82298528.0, 82298528,
191530456.0, 191530456,
223540266.0, 223540266,
255550077.0, 255550077,
287559887.0, 287559887,
319569698.0, 319569698,
351579509.0, 351579509,
383589319.0, 383589319,
415599130.0, 415599130,
447608941.0, 447608941,
null, null,
null, null,
null, null,
@@ -2154,7 +2154,7 @@
{ {
"ColumnName": "Logon", "ColumnName": "Logon",
"Values": [ "Values": [
0.0, 0,
null, null,
null, null,
null, null,
@@ -2373,21 +2373,21 @@
{ {
"ColumnName": "Logon", "ColumnName": "Logon",
"Values": [ "Values": [
0.0, 0,
0.0, 0,
1.0, 1,
0.0, 0,
1.0, 1,
0.0, 0,
0.0, 0,
0.0, 0,
0.0, 0,
2.0, 2,
1.0, 1,
0.0, 0,
0.0, 0,
0.0, 0,
0.0, 0,
null, null,
null, null,
null, null,
@@ -2406,21 +2406,21 @@
{ {
"ColumnName": "LogonCount", "ColumnName": "LogonCount",
"Values": [ "Values": [
2.0, 2,
1.0, 1,
null, null,
null, null,
null, null,
2.0, 2,
1.0, 1,
1.0, 1,
1.0, 1,
null, null,
null, null,
2.0, 2,
1.0, 1,
1.0, 1,
1.0, 1,
null, null,
null, null,
null, null,
@@ -2572,7 +2572,7 @@
"ColumnName": "ApplicationHang", "ColumnName": "ApplicationHang",
"Values": [ "Values": [
null, null,
2.0, 2,
null, null,
null, null,
null, null,
@@ -2604,7 +2604,7 @@
{ {
"ColumnName": "ApplicationCrash", "ColumnName": "ApplicationCrash",
"Values": [ "Values": [
2.0, 2,
null, null,
null, null,
null, null,
@@ -2823,7 +2823,7 @@
{ {
"ColumnName": "id", "ColumnName": "id",
"Values": [ "Values": [
1.0, 1,
null, null,
null, null,
null, null,
@@ -2985,63 +2985,63 @@
"1": [ "1": [
[ [
"2022-05-28T17:23:27.93", "2022-05-28T17:23:27.93",
15000.0 15000
] ]
], ],
"5": [ "5": [
[ [
"2022-05-24T10:54:39.93", "2022-05-24T10:54:39.93",
16000.0 16000
], ],
[ [
"2022-05-24T11:23:27.93", "2022-05-24T11:23:27.93",
16000.0 16000
] ]
], ],
"6": [ "6": [
[ [
"2022-05-23T11:23:27.93", "2022-05-23T11:23:27.93",
14000.0 14000
] ]
], ],
"7": [ "7": [
[ [
"2022-05-22T11:23:27.93", "2022-05-22T11:23:27.93",
16000.0 16000
] ]
], ],
"8": [ "8": [
[ [
"2022-05-21T11:23:27.93", "2022-05-21T11:23:27.93",
17000.0 17000
] ]
], ],
"11": [ "11": [
[ [
"2022-05-18T11:09:03.93", "2022-05-18T11:09:03.93",
14000.0 14000
], ],
[ [
"2022-05-18T13:33:03.93", "2022-05-18T13:33:03.93",
14000.0 14000
] ]
], ],
"12": [ "12": [
[ [
"2022-05-18T15:57:03.93", "2022-05-18T15:57:03.93",
13000.0 13000
] ]
], ],
"13": [ "13": [
[ [
"2022-05-16T13:18:39.93", "2022-05-16T13:18:39.93",
17000.0 17000
] ]
], ],
"14": [ "14": [
[ [
"2022-05-15T13:33:03.93", "2022-05-15T13:33:03.93",
16000.0 16000
] ]
] ]
} }

File diff suppressed because it is too large Load Diff

View File

@@ -540,7 +540,7 @@
{ {
"ColumnName": "id", "ColumnName": "id",
"Values": [ "Values": [
2.0, 2,
null, null,
null, null,
null, null,
@@ -707,57 +707,57 @@
"5": [ "5": [
[ [
"2023-02-18T07:11:30.48", "2023-02-18T07:11:30.48",
160000.0 160000
], ],
[ [
"2023-02-18T07:40:18.48", "2023-02-18T07:40:18.48",
16000.0 16000
] ]
], ],
"6": [ "6": [
[ [
"2023-02-17T07:40:18.48", "2023-02-17T07:40:18.48",
14000.0 14000
] ]
], ],
"7": [ "7": [
[ [
"2023-02-16T07:40:18.48", "2023-02-16T07:40:18.48",
16000.0 16000
] ]
], ],
"8": [ "8": [
[ [
"2023-02-15T07:40:18.48", "2023-02-15T07:40:18.48",
17000.0 17000
] ]
], ],
"11": [ "11": [
[ [
"2023-02-12T07:25:54.48", "2023-02-12T07:25:54.48",
14000.0 14000
], ],
[ [
"2023-02-12T09:49:54.48", "2023-02-12T09:49:54.48",
14000.0 14000
] ]
], ],
"12": [ "12": [
[ [
"2023-02-12T12:13:54.48", "2023-02-12T12:13:54.48",
13000.0 13000
] ]
], ],
"13": [ "13": [
[ [
"2023-02-10T09:35:30.48", "2023-02-10T09:35:30.48",
17000.0 17000
] ]
], ],
"14": [ "14": [
[ [
"2023-02-09T09:49:54.48", "2023-02-09T09:49:54.48",
16000.0 16000
] ]
] ]
} }

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1089,7 +1089,7 @@
{ {
"ColumnName": "DiskTotal", "ColumnName": "DiskTotal",
"Values": [ "Values": [
511101108224.0, 511101108224,
null, null,
null, null,
null, null,
@@ -1122,7 +1122,7 @@
{ {
"ColumnName": "DiskFree", "ColumnName": "DiskFree",
"Values": [ "Values": [
3435973836.0, 3435973836,
null, null,
null, null,
null, null,
@@ -1155,7 +1155,7 @@
{ {
"ColumnName": "SystemDiskTotal", "ColumnName": "SystemDiskTotal",
"Values": [ "Values": [
274877906944.0, 274877906944,
null, null,
null, null,
null, null,
@@ -1188,7 +1188,7 @@
{ {
"ColumnName": "SystemDiskFree", "ColumnName": "SystemDiskFree",
"Values": [ "Values": [
8589934592.0, 8589934592,
null, null,
null, null,
null, null,
@@ -1221,7 +1221,7 @@
{ {
"ColumnName": "MemoryTotal", "ColumnName": "MemoryTotal",
"Values": [ "Values": [
34037615820.0, 34037615820,
null, null,
null, null,
null, null,
@@ -1478,16 +1478,16 @@
null, null,
null, null,
null, null,
2.0, 2,
1.0, 1,
1.0, 1,
1.0, 1,
null, null,
null, null,
2.0, 2,
1.0, 1,
1.0, 1,
1.0, 1,
null, null,
null, null,
null, null,
@@ -1539,21 +1539,21 @@
{ {
"ColumnName": "DiskTotal", "ColumnName": "DiskTotal",
"Values": [ "Values": [
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
null, null,
null, null,
null, null,
@@ -1572,21 +1572,21 @@
{ {
"ColumnName": "DiskFree", "ColumnName": "DiskFree",
"Values": [ "Values": [
3435973836.0, 3435973836,
26843545600.0, 26843545600,
84359738368.0, 84359738368,
105784247808.0, 105784247808,
105884247808.0, 105884247808,
105785247808.0, 105785247808,
105818914474.0, 105818914474,
105819414474.0, 105819414474,
105819914474.0, 105819914474,
105820414474.0, 105820414474,
105820914474.0, 105820914474,
105821414474.0, 105821414474,
105821914474.0, 105821914474,
105822414474.0, 105822414474,
105822914474.0, 105822914474,
null, null,
null, null,
null, null,
@@ -1605,21 +1605,21 @@
{ {
"ColumnName": "SystemDiskTotal", "ColumnName": "SystemDiskTotal",
"Values": [ "Values": [
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
null, null,
null, null,
null, null,
@@ -1638,21 +1638,21 @@
{ {
"ColumnName": "SystemDiskFree", "ColumnName": "SystemDiskFree",
"Values": [ "Values": [
8589934592.0, 8589934592,
28600000000.0, 28600000000,
71203283968.0, 71203283968,
77893283968.0, 77893283968,
71232283968.0, 71232283968,
81203283968.0, 81203283968,
81217783968.0, 81217783968,
83551683968.0, 83551683968,
85885583968.0, 85885583968,
88219483968.0, 88219483968,
90553383968.0, 90553383968,
92887283968.0, 92887283968,
95221183968.0, 95221183968,
97555083968.0, 97555083968,
99888983968.0, 99888983968,
null, null,
null, null,
null, null,
@@ -1671,21 +1671,21 @@
{ {
"ColumnName": "MemoryTotal", "ColumnName": "MemoryTotal",
"Values": [ "Values": [
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
null, null,
null, null,
null, null,
@@ -1704,21 +1704,21 @@
{ {
"ColumnName": "MemoryFree", "ColumnName": "MemoryFree",
"Values": [ "Values": [
21260088115.0, 21260088115,
21277781150.0, 21277781150,
24837781150.0, 24837781150,
18837781150.0, 18837781150,
26837781150.0, 26837781150,
26377781150.0, 26377781150,
14837781150.0, 14837781150,
24839981150.0, 24839981150,
24837781150.0, 24837781150,
24008141150.0, 24008141150,
24364329720.0, 24364329720,
24720518290.0, 24720518290,
25076706860.0, 25076706860,
25432895430.0, 25432895430,
25789084000.0, 25789084000,
null, null,
null, null,
null, null,
@@ -1737,21 +1737,21 @@
{ {
"ColumnName": "ProcessorUsage", "ColumnName": "ProcessorUsage",
"Values": [ "Values": [
12.0, 12,
20.0, 20,
18.0, 18,
15.0, 15,
18.0, 18,
19.0, 19,
20.0, 20,
26.0, 26,
17.0, 17,
11.0, 11,
18.0, 18,
16.0, 16,
16.0, 16,
14.0, 14,
15.0, 15,
null, null,
null, null,
null, null,
@@ -1841,16 +1841,16 @@
null, null,
null, null,
null, null,
16000.0, 16000,
14000.0, 14000,
16000.0, 16000,
17000.0, 17000,
null, null,
null, null,
14000.0, 14000,
13000.0, 13000,
17000.0, 17000,
16000.0, 16000,
null, null,
null, null,
null, null,
@@ -1869,21 +1869,21 @@
{ {
"ColumnName": "NetworkRecievedTraffic", "ColumnName": "NetworkRecievedTraffic",
"Values": [ "Values": [
107374182.0, 107374182,
6120328396.0, 6120328396,
53687091.0, 53687091,
193273528.0, 193273528,
193273528.0, 193273528,
193273528.0, 193273528,
612032839.0, 612032839,
193273528.0, 193273528,
193273528.0, 193273528,
612032839.0, 612032839,
612032839.0, 612032839,
193273528.0, 193273528,
193273528.0, 193273528,
612032839.0, 612032839,
193273528.0, 193273528,
null, null,
null, null,
null, null,
@@ -1902,21 +1902,21 @@
{ {
"ColumnName": "NetworkSentTraffic", "ColumnName": "NetworkSentTraffic",
"Values": [ "Values": [
5368709.0, 5368709,
5368709.0, 5368709,
5368709.0, 5368709,
189273528.0, 189273528,
189298528.0, 189298528,
82298528.0, 82298528,
191530456.0, 191530456,
223540266.0, 223540266,
255550077.0, 255550077,
287559887.0, 287559887,
319569698.0, 319569698,
351579509.0, 351579509,
383589319.0, 383589319,
415599130.0, 415599130,
447608941.0, 447608941,
null, null,
null, null,
null, null,
@@ -2340,21 +2340,21 @@
{ {
"ColumnName": "LogonCount", "ColumnName": "LogonCount",
"Values": [ "Values": [
2.0, 2,
1.0, 1,
null, null,
null, null,
null, null,
2.0, 2,
1.0, 1,
1.0, 1,
1.0, 1,
null, null,
null, null,
2.0, 2,
1.0, 1,
1.0, 1,
1.0, 1,
null, null,
null, null,
null, null,
@@ -2440,7 +2440,7 @@
"ColumnName": "HardReset", "ColumnName": "HardReset",
"Values": [ "Values": [
null, null,
1.0, 1,
null, null,
null, null,
null, null,
@@ -2474,7 +2474,7 @@
"Values": [ "Values": [
null, null,
null, null,
1.0, 1,
null, null,
null, null,
null, null,
@@ -2506,7 +2506,7 @@
"ColumnName": "ApplicationHang", "ColumnName": "ApplicationHang",
"Values": [ "Values": [
null, null,
3.0, 3,
null, null,
null, null,
null, null,
@@ -2538,7 +2538,7 @@
{ {
"ColumnName": "ApplicationCrash", "ColumnName": "ApplicationCrash",
"Values": [ "Values": [
2.0, 2,
null, null,
null, null,
null, null,
@@ -2771,57 +2771,57 @@
"5": [ "5": [
[ [
"2022-05-14T00:55:01.18", "2022-05-14T00:55:01.18",
16000.0 16000
], ],
[ [
"2022-05-14T01:23:49.18", "2022-05-14T01:23:49.18",
16000.0 16000
] ]
], ],
"6": [ "6": [
[ [
"2022-05-13T01:23:49.18", "2022-05-13T01:23:49.18",
14000.0 14000
] ]
], ],
"7": [ "7": [
[ [
"2022-05-12T01:23:49.18", "2022-05-12T01:23:49.18",
16000.0 16000
] ]
], ],
"8": [ "8": [
[ [
"2022-05-11T01:23:49.18", "2022-05-11T01:23:49.18",
17000.0 17000
] ]
], ],
"11": [ "11": [
[ [
"2022-05-08T01:09:25.18", "2022-05-08T01:09:25.18",
14000.0 14000
], ],
[ [
"2022-05-08T03:33:25.18", "2022-05-08T03:33:25.18",
14000.0 14000
] ]
], ],
"12": [ "12": [
[ [
"2022-05-08T05:57:25.18", "2022-05-08T05:57:25.18",
13000.0 13000
] ]
], ],
"13": [ "13": [
[ [
"2022-05-06T03:19:01.18", "2022-05-06T03:19:01.18",
17000.0 17000
] ]
], ],
"14": [ "14": [
[ [
"2022-05-05T03:33:25.18", "2022-05-05T03:33:25.18",
16000.0 16000
] ]
] ]
} }

View File

@@ -540,7 +540,7 @@
{ {
"ColumnName": "id", "ColumnName": "id",
"Values": [ "Values": [
2.0, 2,
null, null,
null, null,
null, null,
@@ -707,57 +707,57 @@
"5": [ "5": [
[ [
"2023-02-17T06:19:38", "2023-02-17T06:19:38",
160000.0 160000
], ],
[ [
"2023-02-17T06:48:26", "2023-02-17T06:48:26",
16000.0 16000
] ]
], ],
"6": [ "6": [
[ [
"2023-02-16T06:48:26", "2023-02-16T06:48:26",
14000.0 14000
] ]
], ],
"7": [ "7": [
[ [
"2023-02-15T06:48:26", "2023-02-15T06:48:26",
16000.0 16000
] ]
], ],
"8": [ "8": [
[ [
"2023-02-14T06:48:26", "2023-02-14T06:48:26",
17000.0 17000
] ]
], ],
"11": [ "11": [
[ [
"2023-02-11T06:34:02", "2023-02-11T06:34:02",
14000.0 14000
], ],
[ [
"2023-02-11T08:58:02", "2023-02-11T08:58:02",
14000.0 14000
] ]
], ],
"12": [ "12": [
[ [
"2023-02-11T11:22:02", "2023-02-11T11:22:02",
13000.0 13000
] ]
], ],
"13": [ "13": [
[ [
"2023-02-09T08:43:38", "2023-02-09T08:43:38",
17000.0 17000
] ]
], ],
"14": [ "14": [
[ [
"2023-02-08T08:58:02", "2023-02-08T08:58:02",
16000.0 16000
] ]
] ]
} }
@@ -793,5 +793,111 @@
} }
} }
], ],
"Tickets": [] "Tickets": [
{
"AffectedUser": "Seifert, Dominik",
"Asset": "C4-NB00015",
"CreationDaysSinceNow": 0,
"CreationDate": "2025-06-20T14:32:52.5790686+02:00",
"ClosingDaysSinceNow": null,
"ClosingDate": null,
"CreationSource": 1,
"Description": "VPN Konzentrator in Aussenstelle offline",
"DescriptionHtml": "<p>VPN Konzentrator in Aussenstelle offline</p>",
"Priority": 2,
"Category": "33b82336-21fb-47bd-b219-9903ed15efc2",
"Solution": null,
"SolutionHtml": null,
"DirectLinks": {},
"JournalItems": [],
"Id": "1507691c-6d47-4ae3-83b3-ef483d84a246",
"Name": "TCK00408",
"Summary": "VPN Konzentrator in Aussenstelle offline",
"Status": 2
},
{
"AffectedUser": "Seifert, Dominik",
"Asset": "C4-NB00015",
"CreationDaysSinceNow": 0,
"CreationDate": "2025-06-20T14:32:52.5790686+02:00",
"ClosingDaysSinceNow": null,
"ClosingDate": null,
"CreationSource": 1,
"Description": "Wartungsfenster fuer Firewall verschieben",
"DescriptionHtml": "<p>Wartungsfenster fuer Firewall verschieben</p>",
"Priority": 2,
"Category": "d8d05c5c-63fa-4718-9e06-9228a1afafe9",
"Solution": null,
"SolutionHtml": null,
"DirectLinks": {},
"JournalItems": [],
"Id": "b207822d-7e1c-42a7-b8c9-4246f711dd18",
"Name": "TCK00413",
"Summary": "Wartungsfenster fuer Firewall verschieben",
"Status": 3
},
{
"AffectedUser": "Seifert, Dominik",
"Asset": "C4-NB00015",
"CreationDaysSinceNow": 0,
"CreationDate": "2025-06-20T14:32:52.5790686+02:00",
"ClosingDaysSinceNow": null,
"ClosingDate": null,
"CreationSource": 1,
"Description": "Firewall Cluster meldet Sync Fehler",
"DescriptionHtml": "<p>Firewall Cluster meldet Sync Fehler</p>",
"Priority": 2,
"Category": "ece302ae-c844-4336-8718-859a10de6b54",
"Solution": null,
"SolutionHtml": null,
"DirectLinks": {},
"JournalItems": [],
"Id": "fe15284f-f553-4434-8b59-7d8b9f481bf7",
"Name": "INC00403",
"Summary": "Firewall Cluster meldet Sync Fehler",
"Status": 1
},
{
"AffectedUser": "Seifert, Dominik",
"Asset": "C4-NB00015",
"CreationDaysSinceNow": 0,
"CreationDate": "2025-06-20T14:32:52.5790686+02:00",
"ClosingDaysSinceNow": null,
"ClosingDate": null,
"CreationSource": 1,
"Description": "Firewall Cluster meldet weiterhin Sync Fehler",
"DescriptionHtml": "<p>Firewall Cluster meldet weiterhin Sync Fehler</p>",
"Priority": 2,
"Category": "d08ff475-e7c4-4dd5-8399-a751f27cc62f",
"Solution": null,
"SolutionHtml": null,
"DirectLinks": {},
"JournalItems": [],
"Id": "486df93d-15b6-41d4-b902-2c1e1838c74b",
"Name": "INC00407",
"Summary": "Firewall Cluster meldet weiterhin Sync Fehler",
"Status": 2
},
{
"AffectedUser": "Seifert, Dominik",
"Asset": "C4-NB00015",
"CreationDaysSinceNow": 0,
"CreationDate": "2025-06-20T14:32:52.5790686+02:00",
"ClosingDaysSinceNow": null,
"ClosingDate": null,
"CreationSource": 1,
"Description": "Kuehlung im Rechenzentrum U3 ausgefallen",
"DescriptionHtml": "<p>Kuehlung im Rechenzentrum U3 ausgefallen</p>",
"Priority": 2,
"Category": "d1656ef7-dda6-4227-b8bb-1da5f35eed32",
"Solution": null,
"SolutionHtml": null,
"DirectLinks": {},
"JournalItems": [],
"Id": "9aae7eca-39d7-441e-8b33-5fc6f34765c8",
"Name": "INC00410",
"Summary": "Kuehlung im Rechenzentrum U3 ausgefallen",
"Status": 2
}
]
} }

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1089,7 +1089,7 @@
{ {
"ColumnName": "DiskTotal", "ColumnName": "DiskTotal",
"Values": [ "Values": [
511101108224.0, 511101108224,
null, null,
null, null,
null, null,
@@ -1122,7 +1122,7 @@
{ {
"ColumnName": "DiskFree", "ColumnName": "DiskFree",
"Values": [ "Values": [
3435973836.0, 3435973836,
null, null,
null, null,
null, null,
@@ -1155,7 +1155,7 @@
{ {
"ColumnName": "SystemDiskTotal", "ColumnName": "SystemDiskTotal",
"Values": [ "Values": [
274877906944.0, 274877906944,
null, null,
null, null,
null, null,
@@ -1188,7 +1188,7 @@
{ {
"ColumnName": "SystemDiskFree", "ColumnName": "SystemDiskFree",
"Values": [ "Values": [
8589934592.0, 8589934592,
null, null,
null, null,
null, null,
@@ -1221,7 +1221,7 @@
{ {
"ColumnName": "MemoryTotal", "ColumnName": "MemoryTotal",
"Values": [ "Values": [
34037615820.0, 34037615820,
null, null,
null, null,
null, null,
@@ -1478,16 +1478,16 @@
null, null,
null, null,
null, null,
2.0, 2,
1.0, 1,
1.0, 1,
1.0, 1,
null, null,
null, null,
2.0, 2,
1.0, 1,
1.0, 1,
1.0, 1,
null, null,
null, null,
null, null,
@@ -1539,21 +1539,21 @@
{ {
"ColumnName": "DiskTotal", "ColumnName": "DiskTotal",
"Values": [ "Values": [
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
511101108224.0, 511101108224,
null, null,
null, null,
null, null,
@@ -1572,21 +1572,21 @@
{ {
"ColumnName": "DiskFree", "ColumnName": "DiskFree",
"Values": [ "Values": [
3435973836.0, 3435973836,
26843545600.0, 26843545600,
84359738368.0, 84359738368,
105784247808.0, 105784247808,
105884247808.0, 105884247808,
105785247808.0, 105785247808,
105818914474.0, 105818914474,
105819414474.0, 105819414474,
105819914474.0, 105819914474,
105820414474.0, 105820414474,
105820914474.0, 105820914474,
105821414474.0, 105821414474,
105821914474.0, 105821914474,
105822414474.0, 105822414474,
105822914474.0, 105822914474,
null, null,
null, null,
null, null,
@@ -1605,21 +1605,21 @@
{ {
"ColumnName": "SystemDiskTotal", "ColumnName": "SystemDiskTotal",
"Values": [ "Values": [
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
274877906944.0, 274877906944,
null, null,
null, null,
null, null,
@@ -1638,21 +1638,21 @@
{ {
"ColumnName": "SystemDiskFree", "ColumnName": "SystemDiskFree",
"Values": [ "Values": [
8589934592.0, 8589934592,
28600000000.0, 28600000000,
71203283968.0, 71203283968,
77893283968.0, 77893283968,
71232283968.0, 71232283968,
81203283968.0, 81203283968,
81217783968.0, 81217783968,
83551683968.0, 83551683968,
85885583968.0, 85885583968,
88219483968.0, 88219483968,
90553383968.0, 90553383968,
92887283968.0, 92887283968,
95221183968.0, 95221183968,
97555083968.0, 97555083968,
99888983968.0, 99888983968,
null, null,
null, null,
null, null,
@@ -1671,21 +1671,21 @@
{ {
"ColumnName": "MemoryTotal", "ColumnName": "MemoryTotal",
"Values": [ "Values": [
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
34037615820.0, 34037615820,
null, null,
null, null,
null, null,
@@ -1704,21 +1704,21 @@
{ {
"ColumnName": "MemoryFree", "ColumnName": "MemoryFree",
"Values": [ "Values": [
21260088115.0, 21260088115,
21277781150.0, 21277781150,
24837781150.0, 24837781150,
18837781150.0, 18837781150,
26837781150.0, 26837781150,
26377781150.0, 26377781150,
14837781150.0, 14837781150,
24839981150.0, 24839981150,
24837781150.0, 24837781150,
24008141150.0, 24008141150,
24364329720.0, 24364329720,
24720518290.0, 24720518290,
25076706860.0, 25076706860,
25432895430.0, 25432895430,
25789084000.0, 25789084000,
null, null,
null, null,
null, null,
@@ -1737,21 +1737,21 @@
{ {
"ColumnName": "ProcessorUsage", "ColumnName": "ProcessorUsage",
"Values": [ "Values": [
12.0, 12,
20.0, 20,
18.0, 18,
15.0, 15,
18.0, 18,
19.0, 19,
20.0, 20,
26.0, 26,
17.0, 17,
11.0, 11,
18.0, 18,
16.0, 16,
16.0, 16,
14.0, 14,
15.0, 15,
null, null,
null, null,
null, null,
@@ -1841,16 +1841,16 @@
null, null,
null, null,
null, null,
16000.0, 16000,
14000.0, 14000,
16000.0, 16000,
17000.0, 17000,
null, null,
null, null,
14000.0, 14000,
13000.0, 13000,
17000.0, 17000,
16000.0, 16000,
null, null,
null, null,
null, null,
@@ -1869,21 +1869,21 @@
{ {
"ColumnName": "NetworkRecievedTraffic", "ColumnName": "NetworkRecievedTraffic",
"Values": [ "Values": [
107374182.0, 107374182,
6120328396.0, 6120328396,
53687091.0, 53687091,
193273528.0, 193273528,
193273528.0, 193273528,
193273528.0, 193273528,
612032839.0, 612032839,
193273528.0, 193273528,
193273528.0, 193273528,
612032839.0, 612032839,
612032839.0, 612032839,
193273528.0, 193273528,
193273528.0, 193273528,
612032839.0, 612032839,
193273528.0, 193273528,
null, null,
null, null,
null, null,
@@ -1902,21 +1902,21 @@
{ {
"ColumnName": "NetworkSentTraffic", "ColumnName": "NetworkSentTraffic",
"Values": [ "Values": [
5368709.0, 5368709,
5368709.0, 5368709,
5368709.0, 5368709,
189273528.0, 189273528,
189298528.0, 189298528,
82298528.0, 82298528,
191530456.0, 191530456,
223540266.0, 223540266,
255550077.0, 255550077,
287559887.0, 287559887,
319569698.0, 319569698,
351579509.0, 351579509,
383589319.0, 383589319,
415599130.0, 415599130,
447608941.0, 447608941,
null, null,
null, null,
null, null,
@@ -2340,21 +2340,21 @@
{ {
"ColumnName": "LogonCount", "ColumnName": "LogonCount",
"Values": [ "Values": [
2.0, 2,
1.0, 1,
null, null,
null, null,
null, null,
2.0, 2,
1.0, 1,
1.0, 1,
1.0, 1,
null, null,
null, null,
2.0, 2,
1.0, 1,
1.0, 1,
1.0, 1,
null, null,
null, null,
null, null,
@@ -2440,7 +2440,7 @@
"ColumnName": "HardReset", "ColumnName": "HardReset",
"Values": [ "Values": [
null, null,
1.0, 1,
null, null,
null, null,
null, null,
@@ -2474,7 +2474,7 @@
"Values": [ "Values": [
null, null,
null, null,
1.0, 1,
null, null,
null, null,
null, null,
@@ -2506,7 +2506,7 @@
"ColumnName": "ApplicationHang", "ColumnName": "ApplicationHang",
"Values": [ "Values": [
null, null,
3.0, 3,
null, null,
null, null,
null, null,
@@ -2538,7 +2538,7 @@
{ {
"ColumnName": "ApplicationCrash", "ColumnName": "ApplicationCrash",
"Values": [ "Values": [
2.0, 2,
null, null,
null, null,
null, null,
@@ -2771,57 +2771,57 @@
"5": [ "5": [
[ [
"2022-05-14T00:56:05.48", "2022-05-14T00:56:05.48",
16000.0 16000
], ],
[ [
"2022-05-14T01:24:53.48", "2022-05-14T01:24:53.48",
16000.0 16000
] ]
], ],
"6": [ "6": [
[ [
"2022-05-13T01:24:53.48", "2022-05-13T01:24:53.48",
14000.0 14000
] ]
], ],
"7": [ "7": [
[ [
"2022-05-12T01:24:53.48", "2022-05-12T01:24:53.48",
16000.0 16000
] ]
], ],
"8": [ "8": [
[ [
"2022-05-11T01:24:53.48", "2022-05-11T01:24:53.48",
17000.0 17000
] ]
], ],
"11": [ "11": [
[ [
"2022-05-08T01:10:29.48", "2022-05-08T01:10:29.48",
14000.0 14000
], ],
[ [
"2022-05-08T03:34:29.48", "2022-05-08T03:34:29.48",
14000.0 14000
] ]
], ],
"12": [ "12": [
[ [
"2022-05-08T05:58:29.48", "2022-05-08T05:58:29.48",
13000.0 13000
] ]
], ],
"13": [ "13": [
[ [
"2022-05-06T03:20:05.48", "2022-05-06T03:20:05.48",
17000.0 17000
] ]
], ],
"14": [ "14": [
[ [
"2022-05-05T03:34:29.48", "2022-05-05T03:34:29.48",
16000.0 16000
] ]
] ]
} }
@@ -2856,5 +2856,133 @@
] ]
} }
} }
],
"Tickets": [
{
"AffectedUser": "Busch, Andrea",
"Asset": "C4-NB00015",
"CreationDaysSinceNow": 0,
"CreationDate": "2025-06-20T14:32:52.5790686+02:00",
"ClosingDaysSinceNow": null,
"ClosingDate": null,
"CreationSource": 1,
"Description": "Neuer Monitor fuer Hotline Arbeitsplatz",
"DescriptionHtml": "<p>Neuer Monitor fuer Hotline Arbeitsplatz</p>",
"Priority": 2,
"Category": "a76f2ae1-4830-ee11-e785-000d3abff293",
"Solution": null,
"SolutionHtml": null,
"DirectLinks": {},
"JournalItems": [],
"Id": "f7771fde-33ba-421a-8d9b-cdf468e7541c",
"Name": "TCK00403",
"Summary": "Neuer Monitor fuer Hotline Arbeitsplatz",
"Status": 1
},
{
"AffectedUser": "Boss, Bernd",
"Asset": "C4-NB00015",
"CreationDaysSinceNow": 0,
"CreationDate": "2025-06-20T14:32:52.5790686+02:00",
"ClosingDaysSinceNow": null,
"ClosingDate": null,
"CreationSource": 1,
"Description": "SAP Produktionsauftrag bricht ab",
"DescriptionHtml": "<p>SAP Produktionsauftrag bricht ab</p>",
"Priority": 2,
"Category": "52811274-7b0e-4cdb-a18a-0843fd663f0c",
"Solution": null,
"SolutionHtml": null,
"DirectLinks": {},
"JournalItems": [],
"Id": "5c6d981e-9e67-4fde-b249-8c6288d325a7",
"Name": "TCK00409",
"Summary": "SAP Produktionsauftrag bricht ab",
"Status": 2
},
{
"AffectedUser": "Busch, Andrea",
"Asset": "C4-NB00015",
"CreationDaysSinceNow": 0,
"CreationDate": "2025-06-20T14:32:52.5790686+02:00",
"ClosingDaysSinceNow": null,
"ClosingDate": null,
"CreationSource": 1,
"Description": "Remotedesktop Sitzung trennt nach wenigen Minuten",
"DescriptionHtml": "<p>Remotedesktop Sitzung trennt nach wenigen Minuten</p>",
"Priority": 2,
"Category": "3838d26f-bc49-4065-a29f-b8965b199946",
"Solution": null,
"SolutionHtml": null,
"DirectLinks": {},
"JournalItems": [],
"Id": "3c3c70cf-5c60-4ecc-9313-b5f9c1968fc7",
"Name": "INC00406",
"Summary": "Remotedesktop Sitzung trennt nach wenigen Minuten",
"Status": 2
},
{
"AffectedUser": "Zufall, Rainer",
"Asset": "C4-NB00015",
"CreationDaysSinceNow": 0,
"CreationDate": "2025-06-20T14:32:52.5790686+02:00",
"ClosingDaysSinceNow": null,
"ClosingDate": null,
"CreationSource": 1,
"Description": "Produktionslinie meldet keine Sensordaten",
"DescriptionHtml": "<p>Produktionslinie meldet keine Sensordaten</p>",
"Priority": 2,
"Category": "653792bf-ee60-4c57-9d72-4f1fb51c27d0",
"Solution": null,
"SolutionHtml": null,
"DirectLinks": {},
"JournalItems": [],
"Id": "86da28b0-013b-4542-bcff-175044d5bb02",
"Name": "INC00408",
"Summary": "Produktionslinie meldet keine Sensordaten",
"Status": 2
},
{
"AffectedUser": "Busch, Andrea",
"Asset": "C4-NB00015",
"CreationDaysSinceNow": 0,
"CreationDate": "2025-06-20T14:32:52.5790686+02:00",
"ClosingDaysSinceNow": null,
"ClosingDate": null,
"CreationSource": 1,
"Description": "Backup Team hat Rueckfrage zur Sicherung",
"DescriptionHtml": "<p>Backup Team hat Rueckfrage zur Sicherung</p>",
"Priority": 2,
"Category": "b05a28a4-a1ae-4cb8-a30d-08fe6873b467",
"Solution": null,
"SolutionHtml": null,
"DirectLinks": {},
"JournalItems": [],
"Id": "d1a2c544-4f59-4f2b-875f-3621a23d4228",
"Name": "INC00413",
"Summary": "Backup Team hat Rueckfrage zur Sicherung",
"Status": 3
},
{
"AffectedUser": "Zufall, Rainer",
"Asset": "C4-NB00015",
"CreationDaysSinceNow": 0,
"CreationDate": "2025-06-20T14:32:52.5790686+02:00",
"ClosingDaysSinceNow": null,
"ClosingDate": null,
"CreationSource": 1,
"Description": "Fernwartung benoetigt Zugangsdaten zur SPS",
"DescriptionHtml": "<p>Fernwartung benoetigt Zugangsdaten zur SPS</p>",
"Priority": 2,
"Category": "b0c38014-e147-e511-0681-0050562f9516",
"Solution": null,
"SolutionHtml": null,
"DirectLinks": {},
"JournalItems": [],
"Id": "1372b3cf-5d87-4099-ab83-ec0cccf7194e",
"Name": "INC00416",
"Summary": "Fernwartung benoetigt Zugangsdaten zur SPS",
"Status": 3
}
] ]
} }

View File

@@ -0,0 +1,714 @@
{
"AlternateStaticTable": null,
"Name": "M42Wpm-Ticket-Categories",
"StartingIndex": 0,
"IsIncomplete": false,
"IsStatic": false,
"TableType": 5,
"TimeFrames": null,
"InformationClass": 3,
"Columns": {
"id": {
"ColumnName": "id",
"Values": [
"9282a500-caea-49bb-944f-9d0274fcc80a",
"8ba5e53d-3b6b-425a-baba-34438845f00d",
"cbbec585-0184-4ae3-ab68-7caeb3d0e5b2",
"fd4ca144-2aca-48c4-b8b9-ce75b07ca3cb",
"70d3cb04-11ab-43cb-a769-368517ba4879",
"9d468c5c-c543-4ee5-9a23-4f9975e5c145",
"b05a28a4-a1ae-4cb8-a30d-08fe6873b467",
"f42521f8-748f-4a24-8084-27867c8ac5d0",
"4e7bafad-c49b-432a-b88e-f4bced36e5ed",
"2c6fca4b-a1a0-ed11-5a81-000c299eb325",
"d457c1f4-e4bd-4753-9e02-c8e645d5e342",
"facc2d0f-3216-4ccd-9c81-57cb29150e9e",
"5f385abf-a574-468b-a4ba-feed4fc0c76d",
"ced65ab8-d526-4518-be11-caf68b31d959",
"f5f3e9d2-2e63-4fc4-a00c-0e8d12750a70",
"2ed6c1ac-70ee-4f3d-911a-f4508cdf085c",
"a84abed8-7384-4fd1-8ed1-6f2bd7398e7c",
"c92984c5-6c88-452f-b5eb-17c73cf2f406",
"5ccae795-9ba5-ea11-2ca6-2c6fc9364e44",
"4d51cfdd-ccaa-49a0-89cf-b16666f38de5",
"2533dacc-5a9f-ea11-b083-000d3a24f586",
"3f00c4b0-9ba5-ea11-2ca6-2c6fc9364e44",
"bfbfaff9-30b9-4bab-9472-8203d9c638e7",
"da6a307f-f4ed-ea11-e683-000d3a24f586",
"d4eceb45-34ef-4ffc-905c-7ef91a8ab1a6",
"54779070-3b79-4bef-abfa-901e35fe6d64",
"8d757427-f2ed-ea11-e683-000d3a24f586",
"9b129a5b-18b2-4489-a889-8496eb975b38",
"dd47d5d9-9fa5-ea11-2ca6-2c6fc9364e44",
"3ee839fa-05cc-ea11-fba7-0c9d921bfedc",
"3838d26f-bc49-4065-a29f-b8965b199946",
"14a23183-337e-e811-b382-000d3a24f586",
"b0c38014-e147-e511-0681-0050562f9516",
"d08ff475-e7c4-4dd5-8399-a751f27cc62f",
"5bd861fd-1dcf-4e48-ac1b-f439295fae88",
"fe30d3d8-32c0-40f2-8205-3519c4b52ddd",
"50e4a6d3-37f9-ec11-3185-000d3abff293",
"3d75c99d-b3e3-eb11-5684-000d3aad24a5",
"d0fe2578-d7e2-4bbf-ad59-58e297fac109",
"b457c1f4-e4bd-4753-9e02-c8e645d5e342",
"5310b2a1-92b9-4627-8478-2a687232e5f3",
"44e88873-4960-41e0-b7eb-3334ec76102c",
"30f73af3-abb7-4d68-876d-9202b24ca3f1",
"bb1fd7f2-0d95-469d-ac83-a2d391eb111b",
"2964fa66-368e-4d92-b322-df51ff25182c",
"3d1f7ff5-f9c5-4f84-8783-e649382666d7",
"ab49d197-b3e3-eb11-5684-000d3aad24a5",
"a198b490-337e-e811-b382-000d3a24f586",
"809dceed-3d2d-ee11-e685-000d3abff293",
"a76f2ae1-4830-ee11-e785-000d3abff293",
"02c7a5f8-6133-4be3-9d63-2687b96a1e72",
"d1656ef7-dda6-4227-b8bb-1da5f35eed32",
"85623dea-dad3-4102-a45a-00f9379fde26",
"0f9f345f-ef08-44a5-bcbf-d7d1087295a3",
"c1e4f87f-a8ab-4acc-a7e8-3e9a78c8f3f9",
"ece302ae-c844-4336-8718-859a10de6b54",
"6870c5ce-464d-41b3-8799-b97b0768f884",
"139d9c55-b636-4feb-a798-39f4cf9e1726",
"4e708c19-5355-41d9-8fd7-45cba87ccf27",
"c08cc910-304b-44c9-8ea8-a12bada124f5",
"e7600b86-4c38-4e66-b1b1-fb2fd7ebf73c",
"5861e772-9c19-e111-4789-005056c00008",
"17ee0029-939b-e211-0084-8c89a56499ca",
"a7e3ba44-f047-ee11-f785-000d3abff293",
"5b76bcda-9566-4131-9fa0-0f579de9c812",
"26661087-5ca8-4721-9cae-3d2ce5f06e4c",
"ee89d782-94c0-46fa-b712-b65503759cfb",
"5c092a0d-e55a-4674-8dab-785f0f2af6a3",
"85f4d1ff-6933-4121-b196-a9e463dedf32",
"4e9cce05-cafb-4724-9bd9-5b5c903d3fb8",
"f0ea9b3d-3f5e-eb11-2081-00505690226c",
"d8d05c5c-63fa-4718-9e06-9228a1afafe9",
"1d33330f-e4e1-4737-8716-c47ab5161266",
"394b1e74-5d60-e511-2681-0050562f9516",
"c3d6a2b1-021a-409a-bd74-9ddf79f84363",
"46240b02-93a5-ea11-2ca6-2c6fc9364e44",
"8fe597cd-9fbf-4552-a061-ca15defb1291",
"d0f04f85-458f-40bd-aeb0-e97b08b933b5",
"1d1608c0-c32e-44ec-85af-6d4846752877",
"52811274-7b0e-4cdb-a18a-0843fd663f0c",
"7c67d904-139b-476e-9844-40aea66bf09a",
"653792bf-ee60-4c57-9d72-4f1fb51c27d0",
"958195f1-8717-458f-95e2-ab6656f68069",
"05327149-f029-40be-80cd-b99a1094e6b8",
"b025b1b3-b3b8-44ca-9404-0ab586578451",
"7a74937d-5e48-4430-8936-1b5f501cf305",
"82c0a3f1-1f37-47e6-9d95-2d807750cbbc",
"b2996b4d-86e8-4df2-9e8e-8d3c6fc92ab2",
"303636d7-cfad-4911-be1e-cd9ff2c98542",
"f671cdfd-80ad-4d71-afbb-a70fbda242ff",
"ae9447c6-0901-4cdf-9c39-52576a027406",
"fe57e004-243a-4a9f-bc5b-64794d57cd2b",
"3556a4a5-1419-4edd-8412-86630a5530e7",
"9b6f7c35-076b-475b-abd2-a990ebe7345f",
"f122e1bd-a5d7-4f18-8f65-dbfe65a4360c",
"42b49002-fed3-4c9b-9532-cf351df038cf",
"54f6d721-d0a4-e611-e881-0050562f9516",
"0e0e5d31-ae18-477f-9514-23d23e3009b8",
"7ef2fce4-96a5-ea11-2ca6-2c6fc9364e44",
"82b5d230-9c71-4276-b712-80c33149f5c6",
"f4a559ba-e3a3-4489-8434-a5ebe38d8f7e",
"f40a9704-eba2-4d4a-b93b-29eab11fb1b0",
"6de22308-4704-4c94-89f2-484a5cec8aa0",
"8021fb31-1a36-47cd-b869-62effa8b71ae",
"ded1c666-cb2a-45a7-8554-96f1244e3b32",
"3fcab71f-db57-4d2f-aec1-e76b850b2372",
"74f41b6f-e21b-4df4-8663-11366be2f3e9",
"27988b9a-56b7-4135-b6cd-32b685cd248d",
"2a749ac4-a143-4ed6-9553-ad185525dbef",
"33b82336-21fb-47bd-b219-9903ed15efc2"
],
"IsIncomplete": false,
"IsWritable": false
},
"SysObjectId": {
"ColumnName": "SysObjectId",
"Values": [
"95f1fe4d-e86e-4f9f-85cc-89747d44273f",
"4fc190b5-8d9b-455e-ad61-8183f1c18a86",
"bcdc65fa-1466-4dd4-9ee4-00dff432f503",
"9ec89038-51ef-4e85-a43b-28c54cb803de",
"ac0d2834-e731-44c1-b8fd-7e88e8689427",
"9e86523e-8107-430e-a225-e4334d0db3b9",
"f471ecfd-e89f-4de6-b706-207aeb951ccf",
"99fe9328-4b5c-4520-935d-5004f31ac396",
"68151e08-959e-4215-a9cd-02cf0738451c",
"4029889e-64ce-cd35-c695-08db02c51bfe",
"a825e856-b789-4030-bd1a-a11cecd7bbbe",
"f1e57c0f-d7da-4fd6-b1ea-781baa12f0b5",
"460d1320-7bdc-4283-8631-bf0a0e51633f",
"d0c53f6d-54b0-413d-8c7a-dae6d4735c83",
"77fd9d09-b8fe-4fcb-a420-61edcc6dee7b",
"54827c82-da2f-45c1-86af-0f8b3c3f3588",
"c63cb394-090b-4708-8faa-91a0562164b9",
"474bae50-e464-450d-a933-5e361f19a1c4",
"24615680-3dc1-cecf-e622-08d807bf677d",
"994aad52-24a2-4cbe-82af-a228c5a7d108",
"8a02482e-6ee4-c1dd-9d42-08d8017e9781",
"84e19468-8d24-ce62-b2c7-08d807bf8e4c",
"3322155e-5992-4f87-a6ff-2d2fa598c7fc",
"6fa18a91-73f0-c88b-6460-08d85017907e",
"2d0209de-1aa7-4d9c-be9d-0260e61f47ed",
"71001502-5eb3-4f17-a82e-87c6486ffe13",
"282c788d-3678-c24a-90d2-08d850160393",
"83e78848-2e09-49f7-8620-541ec2d7f81c",
"7f7d71cc-c6f4-c4ef-665f-08d807bfa037",
"f1f99037-b978-c502-8871-08d82e284a96",
"bff0be05-411d-4f34-a763-5a085842bfba",
"f593ac72-becf-c147-8512-08d5e0576230",
"aac38014-e147-e511-0681-0050562f9516",
"aa1e2465-4b33-4c08-90f3-4ad0398ee6d5",
"9da03209-520c-4645-80fb-d92e7667b629",
"ac794830-0a29-4440-9929-3be9de13857f",
"57a76791-fa99-c94e-5cab-08da5b5bb033",
"f827d84c-364d-c603-91aa-08d945d7822a",
"2b92c49c-fba2-4935-9e56-7464f165f538",
"b825e856-b789-4030-bd1a-a11cecd7bbbe",
"4fa1b861-fbbe-4ba0-aa07-79f8231e137b",
"8c5213ed-cc2c-44db-8e94-261ac6889d16",
"9b8b8713-b67e-46ee-8824-3ae9bb7b5661",
"85004e7d-cc1b-4466-9efa-94c47dda3e2b",
"93612578-4e1f-4b9c-862a-11faf216b2a3",
"80fef6bf-8af7-4312-9ccf-0bac3b6f22bd",
"3d4082b9-1655-c951-cfd4-08d945d77629",
"db86fc24-5529-ce77-4178-08d5e0576ac3",
"5a8abb2f-5520-cccf-598a-08db8f61b225",
"770d895f-cf26-c0bc-35c0-08db926cb92d",
"31606439-93e2-41a2-b348-e2107950801e",
"b4ed335d-9c1d-4cf7-afe8-69a99f8b5804",
"0258ca0c-7749-4746-9877-c979c817fcfd",
"3719b13a-f578-4b74-addf-ecbc219cadb8",
"b8dde1d8-37f6-4950-b3fa-f5c73d89890a",
"3cb2fd90-1f64-47b1-9736-fe5ee44f89c1",
"c808a2ac-b3bf-47a9-8795-25a3d1bb1a3d",
"3cc9d00f-9780-4757-b797-4f64f1ae98c0",
"2e7077c0-3d21-4f08-a562-d49e2efc08cc",
"8e977585-cf06-4b1f-aae3-502a4ea75726",
"27cc9771-dc56-48ad-bc39-02df5939b3f4",
"5261e772-9c19-e111-4789-005056c00008",
"11ee0029-939b-e211-0084-8c89a56499ca",
"3c0f33fa-ac65-c402-d8f4-08dbaa1400f7",
"4be9b8d7-4dc2-4957-b777-6471c1a0c750",
"d45c883f-513b-4373-bb84-719e96d61578",
"33837d5f-7a85-411e-8a01-9ff47d301b00",
"83a43358-2879-4925-b674-04d697c488d0",
"472d4ddc-c761-413e-bebf-491ebdbe9641",
"7077baa4-dfae-4d3a-aaa4-253c7a5f4bff",
"e20c43e9-8da2-c67f-4744-08d8c0631f96",
"9af6450f-3741-4697-bd46-3038db8cb21a",
"46a96916-1e80-4850-8407-b1c872b0ca30",
"334b1e74-5d60-e511-2681-0050562f9516",
"fd9f0cee-b410-4ff1-8b2b-873341f4fe1c",
"c3a3c4b6-c98b-cfb6-b5cb-08d807b4a882",
"24c76522-8edb-4300-8cf4-7cf082ded2bf",
"605449d5-7302-40d5-9607-60032bad49f2",
"b87c4094-6aff-4a42-94bc-a6221d09d942",
"f4419dc7-bd11-4e86-bd3e-4ff6ccdedb09",
"4f005c1b-19de-4373-aad2-aef650c7ea97",
"cb6b8159-c971-47f6-8bdf-7e1a09835dce",
"64dc84b3-ebe4-4bee-85d3-8f9eea5a217a",
"d2c5ed0e-154e-445e-a573-d754c03c5212",
"cb28c887-46e6-40b9-a471-83b0acfe96f6",
"c2335069-0b6f-4823-bfb2-9401bdafa581",
"d4360c64-04ed-4354-a58d-fce0c0dcaaaa",
"f8f00236-c8b1-4121-847a-7dd233438274",
"a7b21eb7-57b9-4931-95b9-32de27d8c42f",
"0e567893-8d4f-422d-92d1-99fa5aeb6008",
"4bf3458d-1dc0-4e67-84e7-3d06330216d6",
"46d853b2-6cb3-45a4-b439-8c031822198d",
"ec635c81-5ba9-426b-9c33-0b6f4736e3b4",
"964419fa-3840-43d9-afa4-151d0d8972e8",
"d6102937-a051-4e2c-8c29-ea91b38caeb7",
"9ff59754-32be-4b12-9aff-d1771d1b66dc",
"4ef6d721-d0a4-e611-e881-0050562f9516",
"69a3f348-f159-440a-980e-0675d035f2c0",
"ef91cb83-867f-c95b-3795-08d807b8d450",
"91544dfb-5afe-4435-97e6-8c1f24e6bdab",
"91a6b9d9-7f51-49b9-a309-e9d4f047e7dd",
"05d1e707-80fc-4f5c-a3cb-d35a7d69ec27",
"0b8c25ee-d951-4be4-a4a1-6c95754e26d0",
"e5d7e59f-fd42-49c9-bee2-a92bdb4fadf9",
"f7d51b56-c3f5-4259-a7ad-2c0fac6cc653",
"dbbad401-7602-4732-ba2b-05a328a4e059",
"6b903456-94b2-48d3-8795-8f6620b48d82",
"e905c92e-e42a-4de8-ae1e-624bc2103d65",
"8a058953-ed70-41cc-aa85-dd6e37a67caa",
"56b2c18c-e2c3-4900-a4c3-312235a97ad2"
],
"IsIncomplete": false,
"IsWritable": false
},
"SysName": {
"ColumnName": "SysName",
"Values": [
"ACT00063",
"ACT00053",
"ACT00055",
"ACT00007",
"ACT00085",
"ACT00083",
"ACT00097",
"ACT00012",
"ACT00058",
"ACT00112",
"ACT00028",
"ACT00047",
"ACT00030",
"ACT00045",
"ACT00080",
"ACT00086",
"ACT00092",
"ACT00049",
"ACT00080",
"ACT00041",
"ACT00095",
"ACT00081",
"ACT00091",
"ACT00102",
"ACT00038",
"ACT00022",
"ACT00101",
"ACT00097",
"ACT00082",
"ACT00078",
"ACT00040",
"ACT00093",
"ACT00078",
"ACT00088",
"ACT00034",
"ACT00044",
"ACT00107",
"ACT00105",
"ACT00019",
"ACT00092",
"ACT00065",
"ACT00069",
"ACT00090",
"ACT00085",
"ACT00073",
"ACT00002",
"ACT00104",
"ACT00094",
"ACT00109",
"ACT00110",
"ACT00078",
"ACT00077",
"ACT00094",
"ACT00093",
"ACT00039",
"ACT00056",
"ACT00059",
"ACT00062",
"ACT00052",
"ACT00013",
"ACT00064",
"ACT00099",
"ACT00077",
"ACT00111",
"ACT00042",
"ACT00018",
"ACT00054",
"ACT00089",
"ACT00050",
"ACT00048",
"ACT00078",
"ACT00060",
"ACT00046",
"ACT00079",
"ACT00096",
"ACT00078",
"ACT00020",
"ACT00015",
"ACT00087",
"ACT00067",
"ACT00083",
"ACT00088",
"ACT00075",
"ACT00071",
"ACT00068",
"ACT00091",
"ACT00072",
"ACT00076",
"ACT00086",
"ACT00079",
"ACT00070",
"ACT00066",
"ACT00074",
"ACT00084",
"ACT00089",
"ACT00033",
"ACT00081",
"ACT00082",
"ACT00079",
"ACT00090",
"ACT00081",
"ACT00087",
"ACT00061",
"ACT00057",
"ACT00008",
"ACT00043",
"ACT00082",
"ACT00095",
"ACT00084",
"ACT00051"
],
"IsIncomplete": false,
"IsWritable": false
},
"Name": {
"ColumnName": "Name",
"Values": [
"Ablage",
"Abschluss",
"Abschluss",
"Active Directory",
"Aktualisierte Software Vorlage",
"Aktualisiertes Lizenzmodell",
"Altiris Client-Installation",
"\u00c4nderungen",
"Angebot",
"Assetleihe",
"Asset-Verwaltung",
"Audit",
"Aufgaben",
"Ausschreibung",
"Bedarfe",
"Bereitstellung",
"Best\u00e4tigung",
"Bestellung",
"Client Lifecycle Management",
"Controlling",
"CRM",
"Data Protection",
"Duplikate",
"EDR",
"Einkauf",
"Empirum Client Installationen",
"Endger\u00e4te",
"Enteo [Centennial] Client Installation",
"Enterprise Mobility Management",
"Enterprise Queue",
"Erf\u00fcllung",
"Facility Management",
"Facility Management",
"Fehlbestand",
"Fehlbestand",
"Finanzbuchhaltung",
"Fleet Management",
"FM",
"Genehmigungen",
"Gesch\u00e4ftsbeziehungen",
"Hardware",
"Hardware",
"Hardware",
"Hardware",
"Hardware",
"Hardwareauslieferung",
"HR",
"Human Resources",
"Human Resources",
"Human Resources",
"Installationen",
"Inventarisierung",
"Katalog Artikelabweichung",
"Katalog Mehrfacheintrag",
"Konformit\u00e4t",
"Korrespondenz",
"Kostenplanung",
"K\u00fcndigung",
"Lieferung",
"Lizenzmanagement",
"Mahnwesen",
"MDM Ger\u00e4teanmeldung",
"Mobile Applikationen",
"Office",
"Organisation",
"Probleme",
"Prognose",
"Pr\u00fcfung",
"Rechnungsstellung",
"Rechtspr\u00fcfung",
"Release Management",
"Revision",
"ROI Pr\u00fcfung",
"SAP",
"SCCM Client Installationen",
"Secure Unified Endpoint Management",
"Service Catalog",
"Service Desk",
"Serviceanfragen",
"Sicherheit",
"Sicherheit",
"Sicherheit",
"Sicherheit",
"Sicherheit",
"Software",
"Software",
"Software",
"Software",
"Software",
"Softwareprodukte",
"Sonstige",
"Sonstige",
"Sonstige",
"Sonstige",
"Sonstige",
"St\u00f6rungen",
"Telefonie",
"Tickets",
"Unified Endpoint Management",
"Validierung",
"Validierung",
"Verf\u00fcgbare Software Vorlage",
"Verhandlung",
"Verl\u00e4ngerung",
"Vertragsverwaltung",
"Vertrieb",
"Wartung",
"Wegfall Lizenzmodell",
"Wegfall Software Vorlage",
"Zahlung"
],
"IsIncomplete": false,
"IsWritable": false
},
"parentValue": {
"ColumnName": "parentValue",
"Values": [
"5b76bcda-9566-4131-9fa0-0f579de9c812",
"d4eceb45-34ef-4ffc-905c-7ef91a8ab1a6",
"3fcab71f-db57-4d2f-aec1-e76b850b2372",
"8fe597cd-9fbf-4552-a061-ca15defb1291",
"f671cdfd-80ad-4d71-afbb-a70fbda242ff",
"f671cdfd-80ad-4d71-afbb-a70fbda242ff",
"8fe597cd-9fbf-4552-a061-ca15defb1291",
"d0f04f85-458f-40bd-aeb0-e97b08b933b5",
"3fcab71f-db57-4d2f-aec1-e76b850b2372",
"d457c1f4-e4bd-4753-9e02-c8e645d5e342",
null,
"c1e4f87f-a8ab-4acc-a7e8-3e9a78c8f3f9",
"d0f04f85-458f-40bd-aeb0-e97b08b933b5",
"d4eceb45-34ef-4ffc-905c-7ef91a8ab1a6",
"c08cc910-304b-44c9-8ea8-a12bada124f5",
"d1656ef7-dda6-4227-b8bb-1da5f35eed32",
"f5f3e9d2-2e63-4fc4-a00c-0e8d12750a70",
"d4eceb45-34ef-4ffc-905c-7ef91a8ab1a6",
"7ef2fce4-96a5-ea11-2ca6-2c6fc9364e44",
"ded1c666-cb2a-45a7-8554-96f1244e3b32",
"82c0a3f1-1f37-47e6-9d95-2d807750cbbc",
"46240b02-93a5-ea11-2ca6-2c6fc9364e44",
"f671cdfd-80ad-4d71-afbb-a70fbda242ff",
"05327149-f029-40be-80cd-b99a1094e6b8",
"ded1c666-cb2a-45a7-8554-96f1244e3b32",
"8fe597cd-9fbf-4552-a061-ca15defb1291",
"05327149-f029-40be-80cd-b99a1094e6b8",
"8fe597cd-9fbf-4552-a061-ca15defb1291",
"7ef2fce4-96a5-ea11-2ca6-2c6fc9364e44",
null,
"ded1c666-cb2a-45a7-8554-96f1244e3b32",
"8fe597cd-9fbf-4552-a061-ca15defb1291",
"42b49002-fed3-4c9b-9532-cf351df038cf",
"d1656ef7-dda6-4227-b8bb-1da5f35eed32",
"d457c1f4-e4bd-4753-9e02-c8e645d5e342",
"4d51cfdd-ccaa-49a0-89cf-b16666f38de5",
"42b49002-fed3-4c9b-9532-cf351df038cf",
"3ee839fa-05cc-ea11-fba7-0c9d921bfedc",
"8fe597cd-9fbf-4552-a061-ca15defb1291",
"ded1c666-cb2a-45a7-8554-96f1244e3b32",
"f42521f8-748f-4a24-8084-27867c8ac5d0",
"42b49002-fed3-4c9b-9532-cf351df038cf",
"1d1608c0-c32e-44ec-85af-6d4846752877",
"0e0e5d31-ae18-477f-9514-23d23e3009b8",
"26661087-5ca8-4721-9cae-3d2ce5f06e4c",
"8fe597cd-9fbf-4552-a061-ca15defb1291",
"3ee839fa-05cc-ea11-fba7-0c9d921bfedc",
"8fe597cd-9fbf-4552-a061-ca15defb1291",
"42b49002-fed3-4c9b-9532-cf351df038cf",
"1d1608c0-c32e-44ec-85af-6d4846752877",
"c08cc910-304b-44c9-8ea8-a12bada124f5",
"c08cc910-304b-44c9-8ea8-a12bada124f5",
"d1656ef7-dda6-4227-b8bb-1da5f35eed32",
"d1656ef7-dda6-4227-b8bb-1da5f35eed32",
"ded1c666-cb2a-45a7-8554-96f1244e3b32",
"5b76bcda-9566-4131-9fa0-0f579de9c812",
"4d51cfdd-ccaa-49a0-89cf-b16666f38de5",
"3838d26f-bc49-4065-a29f-b8965b199946",
"3838d26f-bc49-4065-a29f-b8965b199946",
null,
"3fcab71f-db57-4d2f-aec1-e76b850b2372",
"8fe597cd-9fbf-4552-a061-ca15defb1291",
null,
"82c0a3f1-1f37-47e6-9d95-2d807750cbbc",
"ded1c666-cb2a-45a7-8554-96f1244e3b32",
"d0f04f85-458f-40bd-aeb0-e97b08b933b5",
"4d51cfdd-ccaa-49a0-89cf-b16666f38de5",
"f5f3e9d2-2e63-4fc4-a00c-0e8d12750a70",
"3fcab71f-db57-4d2f-aec1-e76b850b2372",
"d4eceb45-34ef-4ffc-905c-7ef91a8ab1a6",
null,
"c1e4f87f-a8ab-4acc-a7e8-3e9a78c8f3f9",
"4d51cfdd-ccaa-49a0-89cf-b16666f38de5",
"82c0a3f1-1f37-47e6-9d95-2d807750cbbc",
"8fe597cd-9fbf-4552-a061-ca15defb1291",
null,
null,
null,
"d0f04f85-458f-40bd-aeb0-e97b08b933b5",
"f42521f8-748f-4a24-8084-27867c8ac5d0",
"0e0e5d31-ae18-477f-9514-23d23e3009b8",
"1d1608c0-c32e-44ec-85af-6d4846752877",
"26661087-5ca8-4721-9cae-3d2ce5f06e4c",
"42b49002-fed3-4c9b-9532-cf351df038cf",
"f42521f8-748f-4a24-8084-27867c8ac5d0",
"1d1608c0-c32e-44ec-85af-6d4846752877",
"42b49002-fed3-4c9b-9532-cf351df038cf",
"26661087-5ca8-4721-9cae-3d2ce5f06e4c",
"0e0e5d31-ae18-477f-9514-23d23e3009b8",
"c08cc910-304b-44c9-8ea8-a12bada124f5",
"42b49002-fed3-4c9b-9532-cf351df038cf",
"f42521f8-748f-4a24-8084-27867c8ac5d0",
"26661087-5ca8-4721-9cae-3d2ce5f06e4c",
"0e0e5d31-ae18-477f-9514-23d23e3009b8",
"1d1608c0-c32e-44ec-85af-6d4846752877",
"d0f04f85-458f-40bd-aeb0-e97b08b933b5",
"42b49002-fed3-4c9b-9532-cf351df038cf",
"d0f04f85-458f-40bd-aeb0-e97b08b933b5",
"46240b02-93a5-ea11-2ca6-2c6fc9364e44",
"d1656ef7-dda6-4227-b8bb-1da5f35eed32",
"d457c1f4-e4bd-4753-9e02-c8e645d5e342",
"f671cdfd-80ad-4d71-afbb-a70fbda242ff",
"d4eceb45-34ef-4ffc-905c-7ef91a8ab1a6",
"3838d26f-bc49-4065-a29f-b8965b199946",
null,
"ded1c666-cb2a-45a7-8554-96f1244e3b32",
"d1656ef7-dda6-4227-b8bb-1da5f35eed32",
"f671cdfd-80ad-4d71-afbb-a70fbda242ff",
"f671cdfd-80ad-4d71-afbb-a70fbda242ff",
"3838d26f-bc49-4065-a29f-b8965b199946"
],
"IsIncomplete": false,
"IsWritable": false
},
"parent": {
"ColumnName": "parent",
"Values": [
"Organisation",
"Einkauf",
"Vertrieb",
"Service Catalog",
"Softwareprodukte",
"Softwareprodukte",
"Service Catalog",
"Service Desk",
"Vertrieb",
"Asset-Verwaltung",
null,
"Konformit\u00e4t",
"Service Desk",
"Einkauf",
"Lizenzmanagement",
"Inventarisierung",
"Bedarfe",
"Einkauf",
"Unified Endpoint Management",
"Vertragsverwaltung",
"Software",
"Secure Unified Endpoint Management",
"Softwareprodukte",
"Sicherheit",
"Vertragsverwaltung",
"Service Catalog",
"Sicherheit",
"Service Catalog",
"Unified Endpoint Management",
null,
"Vertragsverwaltung",
"Service Catalog",
"St\u00f6rungen",
"Inventarisierung",
"Asset-Verwaltung",
"Controlling",
"St\u00f6rungen",
"Enterprise Queue",
"Service Catalog",
"Vertragsverwaltung",
"\u00c4nderungen",
"St\u00f6rungen",
"Serviceanfragen",
"Tickets",
"Probleme",
"Service Catalog",
"Enterprise Queue",
"Service Catalog",
"St\u00f6rungen",
"Serviceanfragen",
"Lizenzmanagement",
"Lizenzmanagement",
"Inventarisierung",
"Inventarisierung",
"Vertragsverwaltung",
"Organisation",
"Controlling",
"Erf\u00fcllung",
"Erf\u00fcllung",
null,
"Vertrieb",
"Service Catalog",
null,
"Software",
"Vertragsverwaltung",
"Service Desk",
"Controlling",
"Bedarfe",
"Vertrieb",
"Einkauf",
null,
"Konformit\u00e4t",
"Controlling",
"Software",
"Service Catalog",
null,
null,
null,
"Service Desk",
"\u00c4nderungen",
"Tickets",
"Serviceanfragen",
"Probleme",
"St\u00f6rungen",
"\u00c4nderungen",
"Serviceanfragen",
"St\u00f6rungen",
"Probleme",
"Tickets",
"Lizenzmanagement",
"St\u00f6rungen",
"\u00c4nderungen",
"Probleme",
"Tickets",
"Serviceanfragen",
"Service Desk",
"St\u00f6rungen",
"Service Desk",
"Secure Unified Endpoint Management",
"Inventarisierung",
"Asset-Verwaltung",
"Softwareprodukte",
"Einkauf",
"Erf\u00fcllung",
null,
"Vertragsverwaltung",
"Inventarisierung",
"Softwareprodukte",
"Softwareprodukte",
"Erf\u00fcllung"
],
"IsIncomplete": false,
"IsWritable": false
}
}
}

View File

@@ -77,21 +77,21 @@
"Name": { "Name": {
"ColumnName": "Name", "ColumnName": "Name",
"Values": [ "Values": [
"Anmeldung nicht möglich", "Anmeldung nicht m\u00f6glich",
"Bildschirm bleibt schwarz", "Bildschirm bleibt schwarz",
"CRM Störung", "CRM St\u00f6rung",
"Dateityp kann nicht gelesen werden", "Dateityp kann nicht gelesen werden",
"Druckerstörung", "Druckerst\u00f6rung",
"E-Mail-Versand nicht mehr möglich", "E-Mail-Versand nicht mehr m\u00f6glich",
"F4SD Störung", "F4SD St\u00f6rung",
"Internetverbindung gestört", "Internetverbindung gest\u00f6rt",
"Jalousiensteuerung defekt", "Jalousiensteuerung defekt",
"Klimatisierungsstörung - Raumtemperatur zu hoch", "Klimatisierungsst\u00f6rung - Raumtemperatur zu hoch",
"Lampe ist defekt", "Lampe ist defekt",
"Netzwerklaufwerk nicht erreichbar", "Netzwerklaufwerk nicht erreichbar",
"Passcode vergessen, Mobilgerät ist gesperrt", "Passcode vergessen, Mobilger\u00e4t ist gesperrt",
"Software-Service arbeitet nicht mehr korrekt", "Software-Service arbeitet nicht mehr korrekt",
"Telefonstörung" "Telefonst\u00f6rung"
], ],
"IsIncomplete": false, "IsIncomplete": false,
"IsWritable": false "IsWritable": false
@@ -101,19 +101,19 @@
"Values": [ "Values": [
"Der Anwender kann sich nicht mehr anmelden", "Der Anwender kann sich nicht mehr anmelden",
"Der Bildschirm bleibt schwarz, Computer startet nicht mehr", "Der Bildschirm bleibt schwarz, Computer startet nicht mehr",
"CRM Störung", "CRM St\u00f6rung",
"Ein bestimmter Dateityp kann nicht verarbeitet werden", "Ein bestimmter Dateityp kann nicht verarbeitet werden",
"Ein Drucker arbeitet nicht mehr zufriedenstellend oder ist kaputt", "Ein Drucker arbeitet nicht mehr zufriedenstellend oder ist kaputt",
"Der Versand von E-Mails ist nicht mehr möglich", "Der Versand von E-Mails ist nicht mehr m\u00f6glich",
"F4SD Störung", "F4SD St\u00f6rung",
"Der Anwender kommt nicht mehr ins Internet", "Der Anwender kommt nicht mehr ins Internet",
"Die automatischen Sonnenschutzvorrichtungen funktionieren nicht mehr", "Die automatischen Sonnenschutzvorrichtungen funktionieren nicht mehr",
"Die Raumklimatisierung funktioniert nicht mehr korrekt", "Die Raumklimatisierung funktioniert nicht mehr korrekt",
"Lampe ausgefallen oder schwach", "Lampe ausgefallen oder schwach",
"Ein Netzwerklaufwerk kann vom Anwender nicht mehr erreicht werden", "Ein Netzwerklaufwerk kann vom Anwender nicht mehr erreicht werden",
"Das mobile Endgerät des Anwenders ist gesperrt, der Passcode vergessen", "Das mobile Endger\u00e4t des Anwenders ist gesperrt, der Passcode vergessen",
"Ein Software-Service funktioniert nicht mehr richtig", "Ein Software-Service funktioniert nicht mehr richtig",
"Das Telefon des Anwenders ist gestört" "Das Telefon des Anwenders ist gest\u00f6rt"
], ],
"IsIncomplete": false, "IsIncomplete": false,
"IsWritable": false "IsWritable": false
@@ -184,24 +184,24 @@
"IsIncomplete": false, "IsIncomplete": false,
"IsWritable": false "IsWritable": false
}, },
"Classification": { "Category": {
"ColumnName": "Classification", "ColumnName": "Category",
"Values": [ "Values": [
0, "9282a500-caea-49bb-944f-9d0274fcc80a",
0, "8ba5e53d-3b6b-425a-baba-34438845f00d",
0, "cbbec585-0184-4ae3-ab68-7caeb3d0e5b2",
0, "fd4ca144-2aca-48c4-b8b9-ce75b07ca3cb",
0, "70d3cb04-11ab-43cb-a769-368517ba4879",
0, "9d468c5c-c543-4ee5-9a23-4f9975e5c145",
0, "42b49002-fed3-4c9b-9532-cf351df038cf",
0, "f42521f8-748f-4a24-8084-27867c8ac5d0",
0, "4e7bafad-c49b-432a-b88e-f4bced36e5ed",
0, "2c6fca4b-a1a0-ed11-5a81-000c299eb325",
0, "d457c1f4-e4bd-4753-9e02-c8e645d5e342",
0, "facc2d0f-3216-4ccd-9c81-57cb29150e9e",
0, "5f385abf-a574-468b-a4ba-feed4fc0c76d",
0, "ced65ab8-d526-4518-be11-caf68b31d959",
0 "f5f3e9d2-2e63-4fc4-a00c-0e8d12750a70"
], ],
"IsIncomplete": false, "IsIncomplete": false,
"IsWritable": false "IsWritable": false

View File

@@ -3,6 +3,7 @@
{ {
"TileKey": "TicketsNew", "TileKey": "TicketsNew",
"UseRoleScope": false, "UseRoleScope": false,
"ActivityType": "SPSActivityTypeTicket",
"UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a", "UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a",
"DisplayNamePrefix": "TCK", "DisplayNamePrefix": "TCK",
"Summary": "Neue Störung: VPN trennt nach wenigen Minuten", "Summary": "Neue Störung: VPN trennt nach wenigen Minuten",
@@ -13,8 +14,7 @@
"Detail": { "Detail": {
"AffectedUser": "Ticket, Timo", "AffectedUser": "Ticket, Timo",
"Asset": "C4-NB00015", "Asset": "C4-NB00015",
"Category": "Demo / Ticketsystem", "Category": "9282a500-caea-49bb-944f-9d0274fcc80a",
"Classification": "Incident",
"Description": "Der Benutzer meldet, dass die VPN-Verbindung spätestens nach zwei Minuten getrennt wird. Eine stabile Remote-Arbeit ist aktuell nicht möglich.", "Description": "Der Benutzer meldet, dass die VPN-Verbindung spätestens nach zwei Minuten getrennt wird. Eine stabile Remote-Arbeit ist aktuell nicht möglich.",
"DescriptionHtml": "<p>Der Benutzer meldet, dass die VPN-Verbindung spätestens nach zwei Minuten getrennt wird. Eine stabile Remote-Arbeit ist aktuell nicht möglich.</p>", "DescriptionHtml": "<p>Der Benutzer meldet, dass die VPN-Verbindung spätestens nach zwei Minuten getrennt wird. Eine stabile Remote-Arbeit ist aktuell nicht möglich.</p>",
"Priority": 2, "Priority": 2,
@@ -31,6 +31,7 @@
{ {
"TileKey": "TicketsNew", "TileKey": "TicketsNew",
"UseRoleScope": false, "UseRoleScope": false,
"ActivityType": "SPSActivityTypeTicket",
"UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a", "UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a",
"DisplayNamePrefix": "TCK", "DisplayNamePrefix": "TCK",
"Summary": "Teams-Meldungen kommen verzögert an", "Summary": "Teams-Meldungen kommen verzögert an",
@@ -41,8 +42,7 @@
"Detail": { "Detail": {
"AffectedUser": "Ticket, Timo", "AffectedUser": "Ticket, Timo",
"Asset": "C4-NB00015", "Asset": "C4-NB00015",
"Category": "Demo / Kommunikation", "Category": "8ba5e53d-3b6b-425a-baba-34438845f00d",
"Classification": "Incident",
"Description": "Teams-Nachrichten und Meetings starten mit deutlicher Verzögerung. Laut Rückmeldung wirkt der Client zeitweise eingefroren.", "Description": "Teams-Nachrichten und Meetings starten mit deutlicher Verzögerung. Laut Rückmeldung wirkt der Client zeitweise eingefroren.",
"DescriptionHtml": "<p>Teams-Nachrichten und Meetings starten mit deutlicher Verzögerung. Laut Rückmeldung wirkt der Client zeitweise eingefroren.</p>", "DescriptionHtml": "<p>Teams-Nachrichten und Meetings starten mit deutlicher Verzögerung. Laut Rückmeldung wirkt der Client zeitweise eingefroren.</p>",
"Priority": 2, "Priority": 2,
@@ -59,6 +59,7 @@
{ {
"TileKey": "TicketsNew", "TileKey": "TicketsNew",
"UseRoleScope": false, "UseRoleScope": false,
"ActivityType": "SPSActivityTypeTicket",
"UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a", "UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a",
"DisplayNamePrefix": "TCK", "DisplayNamePrefix": "TCK",
"Summary": "Anfrage: Gerät startet nicht zuverlässig", "Summary": "Anfrage: Gerät startet nicht zuverlässig",
@@ -69,8 +70,7 @@
"Detail": { "Detail": {
"AffectedUser": "Ticket, Timo", "AffectedUser": "Ticket, Timo",
"Asset": "C4-NB00015", "Asset": "C4-NB00015",
"Category": "Demo / Hardware", "Category": "cbbec585-0184-4ae3-ab68-7caeb3d0e5b2",
"Classification": "Request",
"Description": "Das bereitgestellte Notebook startet nur unregelmäßig. An manchen Tagen benötigt es mehrere Versuche bis zur Anmeldung.", "Description": "Das bereitgestellte Notebook startet nur unregelmäßig. An manchen Tagen benötigt es mehrere Versuche bis zur Anmeldung.",
"DescriptionHtml": "<p>Das bereitgestellte Notebook startet nur unregelmäßig. An manchen Tagen benötigt es mehrere Versuche bis zur Anmeldung.</p>", "DescriptionHtml": "<p>Das bereitgestellte Notebook startet nur unregelmäßig. An manchen Tagen benötigt es mehrere Versuche bis zur Anmeldung.</p>",
"Priority": 3, "Priority": 3,
@@ -87,6 +87,7 @@
{ {
"TileKey": "TicketsNew", "TileKey": "TicketsNew",
"UseRoleScope": false, "UseRoleScope": false,
"ActivityType": "SPSActivityTypeTicket",
"UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a", "UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a",
"DisplayNamePrefix": "TCK", "DisplayNamePrefix": "TCK",
"Summary": "Bitte um Rückmeldung: Ticketsystem reagiert langsam", "Summary": "Bitte um Rückmeldung: Ticketsystem reagiert langsam",
@@ -97,8 +98,7 @@
"Detail": { "Detail": {
"AffectedUser": "Ticket, Timo", "AffectedUser": "Ticket, Timo",
"Asset": "C4-NB00015", "Asset": "C4-NB00015",
"Category": "Demo / Service", "Category": "fd4ca144-2aca-48c4-b8b9-ce75b07ca3cb",
"Classification": "Incident",
"Description": "Das Ticketsystem reagiert auffallend träge. Ansichten benötigen bis zu 30 Sekunden zum Laden.", "Description": "Das Ticketsystem reagiert auffallend träge. Ansichten benötigen bis zu 30 Sekunden zum Laden.",
"DescriptionHtml": "<p>Das Ticketsystem reagiert auffallend träge. Ansichten benötigen bis zu 30 Sekunden zum Laden.</p>", "DescriptionHtml": "<p>Das Ticketsystem reagiert auffallend träge. Ansichten benötigen bis zu 30 Sekunden zum Laden.</p>",
"Priority": 1, "Priority": 1,
@@ -112,12 +112,10 @@
] ]
} }
}, },
/* --- Ab hier: 5 neue Klassiker --- */
{ {
"TileKey": "TicketsNew", "TileKey": "TicketsNew",
"UseRoleScope": false, "UseRoleScope": false,
"ActivityType": "SPSActivityTypeTicket",
"UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a", "UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a",
"DisplayNamePrefix": "TCK", "DisplayNamePrefix": "TCK",
"Summary": "Passwort-Reset für AD-Benutzer erforderlich", "Summary": "Passwort-Reset für AD-Benutzer erforderlich",
@@ -128,8 +126,7 @@
"Detail": { "Detail": {
"AffectedUser": "Ticket, Timo", "AffectedUser": "Ticket, Timo",
"Asset": "C4-NB00015", "Asset": "C4-NB00015",
"Category": "Demo / Account", "Category": "70d3cb04-11ab-43cb-a769-368517ba4879",
"Classification": "Request",
"Description": "Der Benutzer hat sein Passwort vergessen und benötigt einen Reset sowie die Aktualisierung am Diensthandy (Outlook/Teams).", "Description": "Der Benutzer hat sein Passwort vergessen und benötigt einen Reset sowie die Aktualisierung am Diensthandy (Outlook/Teams).",
"DescriptionHtml": "<p>Der Benutzer hat sein Passwort vergessen und benötigt einen Reset sowie die Aktualisierung am Diensthandy (Outlook/Teams).</p>", "DescriptionHtml": "<p>Der Benutzer hat sein Passwort vergessen und benötigt einen Reset sowie die Aktualisierung am Diensthandy (Outlook/Teams).</p>",
"Priority": 3, "Priority": 3,
@@ -146,6 +143,7 @@
{ {
"TileKey": "TicketsNew", "TileKey": "TicketsNew",
"UseRoleScope": false, "UseRoleScope": false,
"ActivityType": "SPSActivityTypeTicket",
"UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a", "UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a",
"DisplayNamePrefix": "TCK", "DisplayNamePrefix": "TCK",
"Summary": "Netzwerkdrucker druckt nur leere Seiten", "Summary": "Netzwerkdrucker druckt nur leere Seiten",
@@ -156,8 +154,7 @@
"Detail": { "Detail": {
"AffectedUser": "Ticket, Timo", "AffectedUser": "Ticket, Timo",
"Asset": "PRN-3OG-HP-LJ", "Asset": "PRN-3OG-HP-LJ",
"Category": "Demo / Drucker", "Category": "9d468c5c-c543-4ee5-9a23-4f9975e5c145",
"Classification": "Incident",
"Description": "Beim Druck auf den HP-LaserJet im 3. OG kommen nur leere Seiten heraus. Testseite aus Windows zeigt dasselbe Verhalten.", "Description": "Beim Druck auf den HP-LaserJet im 3. OG kommen nur leere Seiten heraus. Testseite aus Windows zeigt dasselbe Verhalten.",
"DescriptionHtml": "<p>Beim Druck auf den HP-LaserJet im 3. OG kommen nur leere Seiten heraus. Testseite aus Windows zeigt dasselbe Verhalten.</p>", "DescriptionHtml": "<p>Beim Druck auf den HP-LaserJet im 3. OG kommen nur leere Seiten heraus. Testseite aus Windows zeigt dasselbe Verhalten.</p>",
"Priority": 2, "Priority": 2,
@@ -174,6 +171,7 @@
{ {
"TileKey": "TicketsNew", "TileKey": "TicketsNew",
"UseRoleScope": false, "UseRoleScope": false,
"ActivityType": "SPSActivityTypeTicket",
"UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a", "UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a",
"DisplayNamePrefix": "TCK", "DisplayNamePrefix": "TCK",
"Summary": "Outlook: Speicherlimit erreicht Postfach voll", "Summary": "Outlook: Speicherlimit erreicht Postfach voll",
@@ -184,8 +182,7 @@
"Detail": { "Detail": {
"AffectedUser": "Ticket, Timo", "AffectedUser": "Ticket, Timo",
"Asset": "C4-NB00015", "Asset": "C4-NB00015",
"Category": "Demo / Mail", "Category": "b05a28a4-a1ae-4cb8-a30d-08fe6873b467",
"Classification": "Incident",
"Description": "Der Benutzer kann keine E-Mails mehr senden oder empfangen. Outlook meldet, dass das Postfachkontingent überschritten ist.", "Description": "Der Benutzer kann keine E-Mails mehr senden oder empfangen. Outlook meldet, dass das Postfachkontingent überschritten ist.",
"DescriptionHtml": "<p>Der Benutzer kann keine E-Mails mehr senden oder empfangen. Outlook meldet, dass das Postfachkontingent überschritten ist.</p>", "DescriptionHtml": "<p>Der Benutzer kann keine E-Mails mehr senden oder empfangen. Outlook meldet, dass das Postfachkontingent überschritten ist.</p>",
"Priority": 2, "Priority": 2,
@@ -202,6 +199,7 @@
{ {
"TileKey": "TicketsNew", "TileKey": "TicketsNew",
"UseRoleScope": false, "UseRoleScope": false,
"ActivityType": "SPSActivityTypeTicket",
"UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a", "UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a",
"DisplayNamePrefix": "TCK", "DisplayNamePrefix": "TCK",
"Summary": "Softwareanfrage: Microsoft Visio Standard", "Summary": "Softwareanfrage: Microsoft Visio Standard",
@@ -212,8 +210,7 @@
"Detail": { "Detail": {
"AffectedUser": "Ticket, Timo", "AffectedUser": "Ticket, Timo",
"Asset": "C4-NB00016", "Asset": "C4-NB00016",
"Category": "Demo / Software", "Category": "f42521f8-748f-4a24-8084-27867c8ac5d0",
"Classification": "Request",
"Description": "Benötigt Visio Standard für Prozessdiagramme. Bitte Installation via Softwareverteilung und Lizenzzuweisung im M365 Admin Center.", "Description": "Benötigt Visio Standard für Prozessdiagramme. Bitte Installation via Softwareverteilung und Lizenzzuweisung im M365 Admin Center.",
"DescriptionHtml": "<p>Benötigt Visio Standard für Prozessdiagramme. Bitte Installation via Softwareverteilung und Lizenzzuweisung im M365 Admin Center.</p>", "DescriptionHtml": "<p>Benötigt Visio Standard für Prozessdiagramme. Bitte Installation via Softwareverteilung und Lizenzzuweisung im M365 Admin Center.</p>",
"Priority": 3, "Priority": 3,
@@ -230,6 +227,7 @@
{ {
"TileKey": "TicketsNew", "TileKey": "TicketsNew",
"UseRoleScope": false, "UseRoleScope": false,
"ActivityType": "SPSActivityTypeTicket",
"UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a", "UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a",
"DisplayNamePrefix": "TCK", "DisplayNamePrefix": "TCK",
"Summary": "Konto gesperrt nach mehrfachen Fehlversuchen", "Summary": "Konto gesperrt nach mehrfachen Fehlversuchen",
@@ -240,8 +238,7 @@
"Detail": { "Detail": {
"AffectedUser": "Ticket, Timo", "AffectedUser": "Ticket, Timo",
"Asset": "C4-NB00016", "Asset": "C4-NB00016",
"Category": "Demo / Account", "Category": "4e7bafad-c49b-432a-b88e-f4bced36e5ed",
"Classification": "Incident",
"Description": "Nach mehreren falschen Passworteingaben ist das AD-Konto gesperrt. Benutzer kann sich weder am Notebook noch an M365 anmelden.", "Description": "Nach mehreren falschen Passworteingaben ist das AD-Konto gesperrt. Benutzer kann sich weder am Notebook noch an M365 anmelden.",
"DescriptionHtml": "<p>Nach mehreren falschen Passworteingaben ist das AD-Konto gesperrt. Benutzer kann sich weder am Notebook noch an M365 anmelden.</p>", "DescriptionHtml": "<p>Nach mehreren falschen Passworteingaben ist das AD-Konto gesperrt. Benutzer kann sich weder am Notebook noch an M365 anmelden.</p>",
"Priority": 1, "Priority": 1,
@@ -256,5 +253,122 @@
} }
} }
], ],
"Tickets": [] "Tickets": [
{
"TicketId": "e2e49f85-1a81-47e8-935b-d76898c155f6",
"UserId": "916db36b-fb6e-4212-81c1-e72acdab77d2",
"TileKey": "UnassignedTickets",
"UseRoleScope": false,
"ActivityType": "SPSActivityTypeTicket",
"DisplayName": "TCK00414",
"Summary": "Pool Notebook fuer Schulungsteilnehmer fehlt",
"StatusId": "New",
"UserDisplayName": "Virtual, Vera",
"UserAccount": "VV004",
"UserDomain": "CONTOSO",
"Detail": {
"AffectedUser": "Virtual, Vera",
"Asset": "C4-NB02014",
"Category": "42b49002-fed3-4c9b-9532-cf351df038cf",
"Description": "Ein Pool-Notebook fuer die morgige Schulung ist nicht auffindbar. Das Ticket wurde noch keinem Bearbeiter zugewiesen.",
"DescriptionHtml": "<p>Ein Pool-Notebook fuer die morgige Schulung ist nicht auffindbar. Das Ticket wurde noch keinem Bearbeiter zugewiesen.</p>",
"Priority": 2,
"Journal": [
{
"Header": "Ticket erstellt",
"Description": "Demodatensatz fuer Ticketuebersicht (Eingang).",
"DescriptionHtml": "<p>Demodatensatz fuer Ticketuebersicht (Eingang).</p>",
"IsVisibleForUser": true
}
]
}
},
{
"TicketId": "ebe8818e-b197-411e-b56e-40b77b623ae2",
"UserId": "436e8d67-1b9b-4b1a-83e9-0b1e8fa0173b",
"TileKey": "UnassignedTickets",
"UseRoleScope": false,
"ActivityType": "SPSActivityTypeTicket",
"DisplayName": "TCK00415",
"Summary": "Etikettendrucker im Lager meldet Papierstau",
"StatusId": "New",
"UserDisplayName": "Anwender, Peter",
"UserAccount": "PA010",
"UserDomain": "CONTOSO",
"Detail": {
"AffectedUser": "Anwender, Peter",
"Asset": "PRN-LAGER-03",
"Category": "42b49002-fed3-4c9b-9532-cf351df038cf",
"Description": "Der Etikettendrucker im Lager zeigt permanent Papierstau, obwohl kein Papier klemmt. Ticket ist neu und noch unzugewiesen.",
"DescriptionHtml": "<p>Der Etikettendrucker im Lager zeigt permanent Papierstau, obwohl kein Papier klemmt. Ticket ist neu und noch unzugewiesen.</p>",
"Priority": 2,
"Journal": [
{
"Header": "Ticket erstellt",
"Description": "Demodatensatz fuer Ticketuebersicht (Eingang).",
"DescriptionHtml": "<p>Demodatensatz fuer Ticketuebersicht (Eingang).</p>",
"IsVisibleForUser": true
}
]
}
},
{
"TicketId": "9e1d5d1b-5a22-430e-99ea-59840257caab",
"UserId": "deece196-d8b6-4a9c-a2b9-3c2ae9c6d4ec",
"TileKey": "UnassignedTicketsCritical",
"UseRoleScope": false,
"ActivityType": "SPSActivityTypeTicket",
"DisplayName": "TCK00416",
"Summary": "WLAN Controller im Werk startet zyklisch neu",
"StatusId": "InProgress",
"UserDisplayName": "Seifert, Dominik",
"UserAccount": "DS014",
"UserDomain": "CONTOSO",
"Detail": {
"AffectedUser": "Seifert, Dominik",
"Asset": "NET-WLC-01",
"Category": "42b49002-fed3-4c9b-9532-cf351df038cf",
"Description": "Der WLAN-Controller im Werk rebootet im 5-Minuten-Takt. Das Ticket ist kritisch markiert und noch nicht personell zugewiesen.",
"DescriptionHtml": "<p>Der WLAN-Controller im Werk rebootet im 5-Minuten-Takt. Das Ticket ist kritisch markiert und noch nicht personell zugewiesen.</p>",
"Priority": 1,
"Journal": [
{
"Header": "Stoerung eingegangen",
"Description": "Demodatensatz fuer Ticketuebersicht (Eingang Kritisch).",
"DescriptionHtml": "<p>Demodatensatz fuer Ticketuebersicht (Eingang Kritisch).</p>",
"IsVisibleForUser": true
}
]
}
},
{
"TicketId": "d427dc61-9842-4464-b37a-612878d3de0f",
"UserId": "a2164ecd-791f-482c-bea3-f089f14bec8a",
"TileKey": "UnassignedTicketsCritical",
"UseRoleScope": false,
"ActivityType": "SPSActivityTypeTicket",
"DisplayName": "TCK00417",
"Summary": "SAP Buchungsjob bricht nachts wiederholt ab",
"StatusId": "InProgress",
"UserDisplayName": "Boss, Bernd",
"UserAccount": "BB003",
"UserDomain": "CONTOSO",
"Detail": {
"AffectedUser": "Boss, Bernd",
"Asset": "SAP-PRD-APP02",
"Category": "42b49002-fed3-4c9b-9532-cf351df038cf",
"Description": "Naechtlicher Buchungsjob endet mit Fehlercode. Ticket ist kritisch und liegt im Eingang zur Erstzuweisung.",
"DescriptionHtml": "<p>Naechtlicher Buchungsjob endet mit Fehlercode. Ticket ist kritisch und liegt im Eingang zur Erstzuweisung.</p>",
"Priority": 1,
"Journal": [
{
"Header": "Stoerung eingegangen",
"Description": "Demodatensatz fuer Ticketuebersicht (Eingang Kritisch).",
"DescriptionHtml": "<p>Demodatensatz fuer Ticketuebersicht (Eingang Kritisch).</p>",
"IsVisibleForUser": true
}
]
}
}
]
} }

View File

@@ -5,6 +5,7 @@
"TicketId": "2e9cb83d-ecb7-c93b-e8e4-08daaa97265f", "TicketId": "2e9cb83d-ecb7-c93b-e8e4-08daaa97265f",
"UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a", "UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a",
"DisplayName": "TCK00186", "DisplayName": "TCK00186",
"ActivityType": "SPSActivityTypeTicket",
"Summary": "Mein OneDrive synchronisiert nicht mehr", "Summary": "Mein OneDrive synchronisiert nicht mehr",
"UserDisplayName": "Ticket, Timo", "UserDisplayName": "Ticket, Timo",
"UserAccount": "TT007", "UserAccount": "TT007",
@@ -17,6 +18,7 @@
"TicketId": "bb2e4a9d-2c1e-4b32-8f75-6e7c9f99f2d4", "TicketId": "bb2e4a9d-2c1e-4b32-8f75-6e7c9f99f2d4",
"UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a", "UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a",
"DisplayName": "TCK00761", "DisplayName": "TCK00761",
"ActivityType": "SPSActivityTypeTicket",
"Summary": "VPN-Verbindung bricht nach wenigen Minuten ab", "Summary": "VPN-Verbindung bricht nach wenigen Minuten ab",
"UserDisplayName": "Ticket, Timo", "UserDisplayName": "Ticket, Timo",
"UserAccount": "TT007", "UserAccount": "TT007",
@@ -27,6 +29,7 @@
"TicketId": "d63e5ea1-0785-4998-82ad-9a9e5a0f8c37", "TicketId": "d63e5ea1-0785-4998-82ad-9a9e5a0f8c37",
"UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a", "UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a",
"DisplayName": "TCK00765", "DisplayName": "TCK00765",
"ActivityType": "SPSActivityTypeTicket",
"Summary": "Teams-Benachrichtigungen kommen verzögert an", "Summary": "Teams-Benachrichtigungen kommen verzögert an",
"UserDisplayName": "Ticket, Timo", "UserDisplayName": "Ticket, Timo",
"UserAccount": "TT007", "UserAccount": "TT007",
@@ -37,6 +40,7 @@
"TicketId": "f7771fde-33ba-421a-8d9b-cdf468e7541c", "TicketId": "f7771fde-33ba-421a-8d9b-cdf468e7541c",
"UserId": "a2164ecd-791f-482c-bea3-f089f14bec8a", "UserId": "a2164ecd-791f-482c-bea3-f089f14bec8a",
"DisplayName": "TCK00403", "DisplayName": "TCK00403",
"ActivityType": "SPSActivityTypeTicket",
"Summary": "Neuer Monitor fuer Hotline Arbeitsplatz", "Summary": "Neuer Monitor fuer Hotline Arbeitsplatz",
"UserDisplayName": "Busch, Andrea", "UserDisplayName": "Busch, Andrea",
"UserAccount": "AB014", "UserAccount": "AB014",
@@ -47,6 +51,7 @@
"TicketId": "6294eec7-fb80-42f3-8ce8-7f7982ae200c", "TicketId": "6294eec7-fb80-42f3-8ce8-7f7982ae200c",
"UserId": "436e8d67-1b9b-4b1a-83e9-0b1e8fa0173b", "UserId": "436e8d67-1b9b-4b1a-83e9-0b1e8fa0173b",
"DisplayName": "TCK00404", "DisplayName": "TCK00404",
"ActivityType": "SPSActivityTypeTicket",
"Summary": "Monitor flackert seit Firmware Update", "Summary": "Monitor flackert seit Firmware Update",
"UserDisplayName": "Anwender, Peter", "UserDisplayName": "Anwender, Peter",
"UserAccount": "PA010", "UserAccount": "PA010",
@@ -61,6 +66,7 @@
"TicketId": "75e08a29-4103-41d6-962c-009c3342bc46", "TicketId": "75e08a29-4103-41d6-962c-009c3342bc46",
"UserId": "6180aa17-ba2d-455a-bf2f-ec4a075c2d64", "UserId": "6180aa17-ba2d-455a-bf2f-ec4a075c2d64",
"DisplayName": "TCK00406", "DisplayName": "TCK00406",
"ActivityType": "SPSActivityTypeTicket",
"Summary": "CAD Software startet nach Update nicht mehr", "Summary": "CAD Software startet nach Update nicht mehr",
"UserDisplayName": "Kohl, Carlos", "UserDisplayName": "Kohl, Carlos",
"UserAccount": "CK102", "UserAccount": "CK102",
@@ -73,7 +79,8 @@
"TicketId": "2e9cb83d-ecb7-c93b-e8e4-08daaa97265f", "TicketId": "2e9cb83d-ecb7-c93b-e8e4-08daaa97265f",
"UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a", "UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a",
"DisplayName": "TCK00405", "DisplayName": "TCK00405",
"Summary": "OneDrive Synchronisation bleibt haengen", "ActivityType": "SPSActivityTypeTicket",
"Summary": "Mein OneDrive synchronisiert nicht mehr",
"UserDisplayName": "Ticket, Timo", "UserDisplayName": "Ticket, Timo",
"UserAccount": "TT007", "UserAccount": "TT007",
"UserDomain": "CONTOSO", "UserDomain": "CONTOSO",
@@ -83,6 +90,7 @@
"TicketId": "ff62a3e2-5004-4a8c-b71c-7ebb1877d1a4", "TicketId": "ff62a3e2-5004-4a8c-b71c-7ebb1877d1a4",
"UserId": "0fad5e21-5a29-44c6-b532-46f862ea8694", "UserId": "0fad5e21-5a29-44c6-b532-46f862ea8694",
"DisplayName": "TCK00407", "DisplayName": "TCK00407",
"ActivityType": "SPSActivityTypeTicket",
"Summary": "Netzlaufwerk Projekt X nicht erreichbar", "Summary": "Netzlaufwerk Projekt X nicht erreichbar",
"UserDisplayName": "Hanova, Hans", "UserDisplayName": "Hanova, Hans",
"UserAccount": "HH101", "UserAccount": "HH101",
@@ -97,6 +105,7 @@
"TicketId": "1507691c-6d47-4ae3-83b3-ef483d84a246", "TicketId": "1507691c-6d47-4ae3-83b3-ef483d84a246",
"UserId": "deece196-d8b6-4a9c-a2b9-3c2ae9c6d4ec", "UserId": "deece196-d8b6-4a9c-a2b9-3c2ae9c6d4ec",
"DisplayName": "TCK00408", "DisplayName": "TCK00408",
"ActivityType": "SPSActivityTypeTicket",
"Summary": "VPN Konzentrator in Aussenstelle offline", "Summary": "VPN Konzentrator in Aussenstelle offline",
"UserDisplayName": "Seifert, Dominik", "UserDisplayName": "Seifert, Dominik",
"UserAccount": "DS014", "UserAccount": "DS014",
@@ -107,6 +116,7 @@
"TicketId": "5c6d981e-9e67-4fde-b249-8c6288d325a7", "TicketId": "5c6d981e-9e67-4fde-b249-8c6288d325a7",
"UserId": "a2164ecd-791f-482c-bea3-f089f14bec8a", "UserId": "a2164ecd-791f-482c-bea3-f089f14bec8a",
"DisplayName": "TCK00409", "DisplayName": "TCK00409",
"ActivityType": "SPSActivityTypeTicket",
"Summary": "SAP Produktionsauftrag bricht ab", "Summary": "SAP Produktionsauftrag bricht ab",
"UserDisplayName": "Boss, Bernd", "UserDisplayName": "Boss, Bernd",
"UserAccount": "BB003", "UserAccount": "BB003",
@@ -119,6 +129,7 @@
"TicketId": "1507691c-6d47-4ae3-83b3-ef483d84a246", "TicketId": "1507691c-6d47-4ae3-83b3-ef483d84a246",
"UserId": "deece196-d8b6-4a9c-a2b9-3c2ae9c6d4ec", "UserId": "deece196-d8b6-4a9c-a2b9-3c2ae9c6d4ec",
"DisplayName": "TCK00408", "DisplayName": "TCK00408",
"ActivityType": "SPSActivityTypeTicket",
"Summary": "VPN Konzentrator in Aussenstelle offline", "Summary": "VPN Konzentrator in Aussenstelle offline",
"UserDisplayName": "Seifert, Dominik", "UserDisplayName": "Seifert, Dominik",
"UserAccount": "DS014", "UserAccount": "DS014",
@@ -129,6 +140,7 @@
"TicketId": "9b7710d4-72da-4b2a-9d0c-be02575d2c52", "TicketId": "9b7710d4-72da-4b2a-9d0c-be02575d2c52",
"UserId": "a2c35ad1-7cc7-4b2b-9aa5-d03fdaecd155", "UserId": "a2c35ad1-7cc7-4b2b-9aa5-d03fdaecd155",
"DisplayName": "TCK00410", "DisplayName": "TCK00410",
"ActivityType": "SPSActivityTypeTicket",
"Summary": "WLAN im Lager faellt minutenweise aus", "Summary": "WLAN im Lager faellt minutenweise aus",
"UserDisplayName": "Kiefer, Maximilian", "UserDisplayName": "Kiefer, Maximilian",
"UserAccount": "MK009", "UserAccount": "MK009",
@@ -139,6 +151,7 @@
"TicketId": "5c6d981e-9e67-4fde-b249-8c6288d325a7", "TicketId": "5c6d981e-9e67-4fde-b249-8c6288d325a7",
"UserId": "a2164ecd-791f-482c-bea3-f089f14bec8a", "UserId": "a2164ecd-791f-482c-bea3-f089f14bec8a",
"DisplayName": "TCK00409", "DisplayName": "TCK00409",
"ActivityType": "SPSActivityTypeTicket",
"Summary": "SAP Produktionsauftrag bricht ab", "Summary": "SAP Produktionsauftrag bricht ab",
"UserDisplayName": "Boss, Bernd", "UserDisplayName": "Boss, Bernd",
"UserAccount": "BB003", "UserAccount": "BB003",
@@ -153,7 +166,8 @@
"TicketId": "de403992-98cb-4476-9e04-d645ab22e6de", "TicketId": "de403992-98cb-4476-9e04-d645ab22e6de",
"UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a", "UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a",
"DisplayName": "TCK00411", "DisplayName": "TCK00411",
"Summary": "Rueckfrage zur Passwort Ruecksetzung beantworten", "ActivityType": "SPSActivityTypeTicket",
"Summary": "Passwort muss zur\u00fcckgesetzt werden",
"UserDisplayName": "Ticket, Timo", "UserDisplayName": "Ticket, Timo",
"UserAccount": "TT007", "UserAccount": "TT007",
"UserDomain": "CONTOSO", "UserDomain": "CONTOSO",
@@ -163,6 +177,7 @@
"TicketId": "7c29dd33-1247-453c-9db6-f7a59107d276", "TicketId": "7c29dd33-1247-453c-9db6-f7a59107d276",
"UserId": "436e8d67-1b9b-4b1a-83e9-0b1e8fa0173b", "UserId": "436e8d67-1b9b-4b1a-83e9-0b1e8fa0173b",
"DisplayName": "TCK00412", "DisplayName": "TCK00412",
"ActivityType": "SPSActivityTypeTicket",
"Summary": "Techniker bittet um Rueckmeldung zum Notebook", "Summary": "Techniker bittet um Rueckmeldung zum Notebook",
"UserDisplayName": "Anwender, Peter", "UserDisplayName": "Anwender, Peter",
"UserAccount": "PA010", "UserAccount": "PA010",
@@ -175,7 +190,8 @@
"TicketId": "de403992-98cb-4476-9e04-d645ab22e6de", "TicketId": "de403992-98cb-4476-9e04-d645ab22e6de",
"UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a", "UserId": "42c760d6-90e8-469f-b2fe-ac7d4cc6cb0a",
"DisplayName": "TCK00411", "DisplayName": "TCK00411",
"Summary": "Rueckfrage zur Passwort Ruecksetzung beantworten", "ActivityType": "SPSActivityTypeTicket",
"Summary": "Passwort muss zur\u00fcckgesetzt werden",
"UserDisplayName": "Ticket, Timo", "UserDisplayName": "Ticket, Timo",
"UserAccount": "TT007", "UserAccount": "TT007",
"UserDomain": "CONTOSO", "UserDomain": "CONTOSO",
@@ -185,6 +201,7 @@
"TicketId": "b207822d-7e1c-42a7-b8c9-4246f711dd18", "TicketId": "b207822d-7e1c-42a7-b8c9-4246f711dd18",
"UserId": "deece196-d8b6-4a9c-a2b9-3c2ae9c6d4ec", "UserId": "deece196-d8b6-4a9c-a2b9-3c2ae9c6d4ec",
"DisplayName": "TCK00413", "DisplayName": "TCK00413",
"ActivityType": "SPSActivityTypeTicket",
"Summary": "Wartungsfenster fuer Firewall verschieben", "Summary": "Wartungsfenster fuer Firewall verschieben",
"UserDisplayName": "Seifert, Dominik", "UserDisplayName": "Seifert, Dominik",
"UserAccount": "DS014", "UserAccount": "DS014",
@@ -199,6 +216,7 @@
"TicketId": "e0ba7c81-f9b1-4e99-a4d6-efecc5e4312e", "TicketId": "e0ba7c81-f9b1-4e99-a4d6-efecc5e4312e",
"UserId": "f69dd1a9-591f-4004-b950-264238663bf0", "UserId": "f69dd1a9-591f-4004-b950-264238663bf0",
"DisplayName": "INC00401", "DisplayName": "INC00401",
"ActivityType": "SPSActivityTypeIncident",
"Summary": "Teams Telefonie ist fuer Standort Sued offline", "Summary": "Teams Telefonie ist fuer Standort Sued offline",
"UserDisplayName": "Ottmann, Thomas", "UserDisplayName": "Ottmann, Thomas",
"UserAccount": "TO011", "UserAccount": "TO011",
@@ -207,8 +225,9 @@
}, },
{ {
"TicketId": "a8deb50d-9f15-4371-9ebc-a28791f27d5c", "TicketId": "a8deb50d-9f15-4371-9ebc-a28791f27d5c",
"UserId": "76f86d28-862c-4fa2-9062-8367be7fbd92", "UserId": "916db36b-fb6e-4212-81c1-e72acdab77d2",
"DisplayName": "INC00402", "DisplayName": "INC00402",
"ActivityType": "SPSActivityTypeIncident",
"Summary": "SharePoint Bereich Vertrieb laedt extrem langsam", "Summary": "SharePoint Bereich Vertrieb laedt extrem langsam",
"UserDisplayName": "Virtual, Vera", "UserDisplayName": "Virtual, Vera",
"UserAccount": "VV004", "UserAccount": "VV004",
@@ -221,6 +240,7 @@
"TicketId": "fe15284f-f553-4434-8b59-7d8b9f481bf7", "TicketId": "fe15284f-f553-4434-8b59-7d8b9f481bf7",
"UserId": "deece196-d8b6-4a9c-a2b9-3c2ae9c6d4ec", "UserId": "deece196-d8b6-4a9c-a2b9-3c2ae9c6d4ec",
"DisplayName": "INC00403", "DisplayName": "INC00403",
"ActivityType": "SPSActivityTypeIncident",
"Summary": "Firewall Cluster meldet Sync Fehler", "Summary": "Firewall Cluster meldet Sync Fehler",
"UserDisplayName": "Seifert, Dominik", "UserDisplayName": "Seifert, Dominik",
"UserAccount": "DS014", "UserAccount": "DS014",
@@ -231,6 +251,7 @@
"TicketId": "9cdddacf-9395-476b-811a-09c5f1491d4b", "TicketId": "9cdddacf-9395-476b-811a-09c5f1491d4b",
"UserId": "436e8d67-1b9b-4b1a-83e9-0b1e8fa0173b", "UserId": "436e8d67-1b9b-4b1a-83e9-0b1e8fa0173b",
"DisplayName": "INC00404", "DisplayName": "INC00404",
"ActivityType": "SPSActivityTypeIncident",
"Summary": "CRM Anmeldung liefert Timeout fuer Kundencenter", "Summary": "CRM Anmeldung liefert Timeout fuer Kundencenter",
"UserDisplayName": "Anwender, Peter", "UserDisplayName": "Anwender, Peter",
"UserAccount": "PA010", "UserAccount": "PA010",
@@ -245,6 +266,7 @@
"TicketId": "7e852bb9-420b-4caa-b79a-9178d793fc06", "TicketId": "7e852bb9-420b-4caa-b79a-9178d793fc06",
"UserId": "a2c35ad1-7cc7-4b2b-9aa5-d03fdaecd155", "UserId": "a2c35ad1-7cc7-4b2b-9aa5-d03fdaecd155",
"DisplayName": "INC00405", "DisplayName": "INC00405",
"ActivityType": "SPSActivityTypeIncident",
"Summary": "Windows Rollout haengt auf mehreren Clients", "Summary": "Windows Rollout haengt auf mehreren Clients",
"UserDisplayName": "Kiefer, Maximilian", "UserDisplayName": "Kiefer, Maximilian",
"UserAccount": "MK009", "UserAccount": "MK009",
@@ -255,6 +277,7 @@
"TicketId": "3c3c70cf-5c60-4ecc-9313-b5f9c1968fc7", "TicketId": "3c3c70cf-5c60-4ecc-9313-b5f9c1968fc7",
"UserId": "a2164ecd-791f-482c-bea3-f089f14bec8a", "UserId": "a2164ecd-791f-482c-bea3-f089f14bec8a",
"DisplayName": "INC00406", "DisplayName": "INC00406",
"ActivityType": "SPSActivityTypeIncident",
"Summary": "Remotedesktop Sitzung trennt nach wenigen Minuten", "Summary": "Remotedesktop Sitzung trennt nach wenigen Minuten",
"UserDisplayName": "Busch, Andrea", "UserDisplayName": "Busch, Andrea",
"UserAccount": "AB014", "UserAccount": "AB014",
@@ -267,6 +290,7 @@
"TicketId": "486df93d-15b6-41d4-b902-2c1e1838c74b", "TicketId": "486df93d-15b6-41d4-b902-2c1e1838c74b",
"UserId": "deece196-d8b6-4a9c-a2b9-3c2ae9c6d4ec", "UserId": "deece196-d8b6-4a9c-a2b9-3c2ae9c6d4ec",
"DisplayName": "INC00407", "DisplayName": "INC00407",
"ActivityType": "SPSActivityTypeIncident",
"Summary": "Firewall Cluster meldet weiterhin Sync Fehler", "Summary": "Firewall Cluster meldet weiterhin Sync Fehler",
"UserDisplayName": "Seifert, Dominik", "UserDisplayName": "Seifert, Dominik",
"UserAccount": "DS014", "UserAccount": "DS014",
@@ -277,6 +301,7 @@
"TicketId": "86da28b0-013b-4542-bcff-175044d5bb02", "TicketId": "86da28b0-013b-4542-bcff-175044d5bb02",
"UserId": "a2164ecd-791f-482c-bea3-f089f14bec8a", "UserId": "a2164ecd-791f-482c-bea3-f089f14bec8a",
"DisplayName": "INC00408", "DisplayName": "INC00408",
"ActivityType": "SPSActivityTypeIncident",
"Summary": "Produktionslinie meldet keine Sensordaten", "Summary": "Produktionslinie meldet keine Sensordaten",
"UserDisplayName": "Zufall, Rainer", "UserDisplayName": "Zufall, Rainer",
"UserAccount": "RZ011", "UserAccount": "RZ011",
@@ -287,6 +312,7 @@
"TicketId": "a1cf6635-a5c4-4401-b4f0-60b9c65b4d75", "TicketId": "a1cf6635-a5c4-4401-b4f0-60b9c65b4d75",
"UserId": "0fad5e21-5a29-44c6-b532-46f862ea8694", "UserId": "0fad5e21-5a29-44c6-b532-46f862ea8694",
"DisplayName": "INC00409", "DisplayName": "INC00409",
"ActivityType": "SPSActivityTypeIncident",
"Summary": "Exchange Transportdienst setzt Mails in Warteschlange", "Summary": "Exchange Transportdienst setzt Mails in Warteschlange",
"UserDisplayName": "Hanova, Hans", "UserDisplayName": "Hanova, Hans",
"UserAccount": "HH101", "UserAccount": "HH101",
@@ -301,6 +327,7 @@
"TicketId": "9aae7eca-39d7-441e-8b33-5fc6f34765c8", "TicketId": "9aae7eca-39d7-441e-8b33-5fc6f34765c8",
"UserId": "deece196-d8b6-4a9c-a2b9-3c2ae9c6d4ec", "UserId": "deece196-d8b6-4a9c-a2b9-3c2ae9c6d4ec",
"DisplayName": "INC00410", "DisplayName": "INC00410",
"ActivityType": "SPSActivityTypeIncident",
"Summary": "Kuehlung im Rechenzentrum U3 ausgefallen", "Summary": "Kuehlung im Rechenzentrum U3 ausgefallen",
"UserDisplayName": "Seifert, Dominik", "UserDisplayName": "Seifert, Dominik",
"UserAccount": "DS014", "UserAccount": "DS014",
@@ -313,6 +340,7 @@
"TicketId": "9aae7eca-39d7-441e-8b33-5fc6f34765c8", "TicketId": "9aae7eca-39d7-441e-8b33-5fc6f34765c8",
"UserId": "deece196-d8b6-4a9c-a2b9-3c2ae9c6d4ec", "UserId": "deece196-d8b6-4a9c-a2b9-3c2ae9c6d4ec",
"DisplayName": "INC00410", "DisplayName": "INC00410",
"ActivityType": "SPSActivityTypeIncident",
"Summary": "Kuehlung im Rechenzentrum U3 ausgefallen", "Summary": "Kuehlung im Rechenzentrum U3 ausgefallen",
"UserDisplayName": "Seifert, Dominik", "UserDisplayName": "Seifert, Dominik",
"UserAccount": "DS014", "UserAccount": "DS014",
@@ -323,6 +351,7 @@
"TicketId": "130ec52f-dac3-427d-803e-e7cf67e4a744", "TicketId": "130ec52f-dac3-427d-803e-e7cf67e4a744",
"UserId": "f69dd1a9-591f-4004-b950-264238663bf0", "UserId": "f69dd1a9-591f-4004-b950-264238663bf0",
"DisplayName": "INC00411", "DisplayName": "INC00411",
"ActivityType": "SPSActivityTypeIncident",
"Summary": "Kartenzahlung in den Filialen nicht moeglich", "Summary": "Kartenzahlung in den Filialen nicht moeglich",
"UserDisplayName": "Ottmann, Thomas", "UserDisplayName": "Ottmann, Thomas",
"UserAccount": "TO011", "UserAccount": "TO011",
@@ -333,6 +362,7 @@
"TicketId": "b7d22b65-c11e-459c-ac31-5b1c08e4118d", "TicketId": "b7d22b65-c11e-459c-ac31-5b1c08e4118d",
"UserId": "8c3ca0fb-f18c-4893-ad83-290e6e02f352", "UserId": "8c3ca0fb-f18c-4893-ad83-290e6e02f352",
"DisplayName": "INC00412", "DisplayName": "INC00412",
"ActivityType": "SPSActivityTypeIncident",
"Summary": "Datenbank Cluster benoetigt manuellen Failover", "Summary": "Datenbank Cluster benoetigt manuellen Failover",
"UserDisplayName": "Perschmann, Paul", "UserDisplayName": "Perschmann, Paul",
"UserAccount": "PP201", "UserAccount": "PP201",
@@ -347,6 +377,7 @@
"TicketId": "d1a2c544-4f59-4f2b-875f-3621a23d4228", "TicketId": "d1a2c544-4f59-4f2b-875f-3621a23d4228",
"UserId": "a2164ecd-791f-482c-bea3-f089f14bec8a", "UserId": "a2164ecd-791f-482c-bea3-f089f14bec8a",
"DisplayName": "INC00413", "DisplayName": "INC00413",
"ActivityType": "SPSActivityTypeIncident",
"Summary": "Backup Team hat Rueckfrage zur Sicherung", "Summary": "Backup Team hat Rueckfrage zur Sicherung",
"UserDisplayName": "Busch, Andrea", "UserDisplayName": "Busch, Andrea",
"UserAccount": "AB014", "UserAccount": "AB014",
@@ -359,6 +390,7 @@
"TicketId": "74846c1b-9a97-420f-8bf2-91e88aa0516a", "TicketId": "74846c1b-9a97-420f-8bf2-91e88aa0516a",
"UserId": "436e8d67-1b9b-4b1a-83e9-0b1e8fa0173b", "UserId": "436e8d67-1b9b-4b1a-83e9-0b1e8fa0173b",
"DisplayName": "INC00415", "DisplayName": "INC00415",
"ActivityType": "SPSActivityTypeIncident",
"Summary": "Lieferant bittet um Rueckmeldung zu Offsite Backup", "Summary": "Lieferant bittet um Rueckmeldung zu Offsite Backup",
"UserDisplayName": "Anwender, Peter", "UserDisplayName": "Anwender, Peter",
"UserAccount": "PA010", "UserAccount": "PA010",
@@ -369,6 +401,7 @@
"TicketId": "1372b3cf-5d87-4099-ab83-ec0cccf7194e", "TicketId": "1372b3cf-5d87-4099-ab83-ec0cccf7194e",
"UserId": "a2164ecd-791f-482c-bea3-f089f14bec8a", "UserId": "a2164ecd-791f-482c-bea3-f089f14bec8a",
"DisplayName": "INC00416", "DisplayName": "INC00416",
"ActivityType": "SPSActivityTypeIncident",
"Summary": "Fernwartung benoetigt Zugangsdaten zur SPS", "Summary": "Fernwartung benoetigt Zugangsdaten zur SPS",
"UserDisplayName": "Zufall, Rainer", "UserDisplayName": "Zufall, Rainer",
"UserAccount": "RZ011", "UserAccount": "RZ011",
@@ -381,8 +414,9 @@
"Personal": [ "Personal": [
{ {
"TicketId": "e2e49f85-1a81-47e8-935b-d76898c155f6", "TicketId": "e2e49f85-1a81-47e8-935b-d76898c155f6",
"UserId": "76f86d28-862c-4fa2-9062-8367be7fbd92", "UserId": "916db36b-fb6e-4212-81c1-e72acdab77d2",
"DisplayName": "TCK00414", "DisplayName": "TCK00414",
"ActivityType": "SPSActivityTypeTicket",
"Summary": "Pool Notebook fuer Schulungsteilnehmer fehlt", "Summary": "Pool Notebook fuer Schulungsteilnehmer fehlt",
"UserDisplayName": "Virtual, Vera", "UserDisplayName": "Virtual, Vera",
"UserAccount": "VV004", "UserAccount": "VV004",
@@ -393,6 +427,7 @@
"TicketId": "ebe8818e-b197-411e-b56e-40b77b623ae2", "TicketId": "ebe8818e-b197-411e-b56e-40b77b623ae2",
"UserId": "436e8d67-1b9b-4b1a-83e9-0b1e8fa0173b", "UserId": "436e8d67-1b9b-4b1a-83e9-0b1e8fa0173b",
"DisplayName": "TCK00415", "DisplayName": "TCK00415",
"ActivityType": "SPSActivityTypeTicket",
"Summary": "Etikettendrucker im Lager meldet Papierstau", "Summary": "Etikettendrucker im Lager meldet Papierstau",
"UserDisplayName": "Anwender, Peter", "UserDisplayName": "Anwender, Peter",
"UserAccount": "PA010", "UserAccount": "PA010",
@@ -403,8 +438,9 @@
"Role": [ "Role": [
{ {
"TicketId": "e2e49f85-1a81-47e8-935b-d76898c155f6", "TicketId": "e2e49f85-1a81-47e8-935b-d76898c155f6",
"UserId": "76f86d28-862c-4fa2-9062-8367be7fbd92", "UserId": "916db36b-fb6e-4212-81c1-e72acdab77d2",
"DisplayName": "TCK00414", "DisplayName": "TCK00414",
"ActivityType": "SPSActivityTypeTicket",
"Summary": "Pool Notebook fuer Schulungsteilnehmer fehlt", "Summary": "Pool Notebook fuer Schulungsteilnehmer fehlt",
"UserDisplayName": "Virtual, Vera", "UserDisplayName": "Virtual, Vera",
"UserAccount": "VV004", "UserAccount": "VV004",
@@ -415,6 +451,7 @@
"TicketId": "ebe8818e-b197-411e-b56e-40b77b623ae2", "TicketId": "ebe8818e-b197-411e-b56e-40b77b623ae2",
"UserId": "436e8d67-1b9b-4b1a-83e9-0b1e8fa0173b", "UserId": "436e8d67-1b9b-4b1a-83e9-0b1e8fa0173b",
"DisplayName": "TCK00415", "DisplayName": "TCK00415",
"ActivityType": "SPSActivityTypeTicket",
"Summary": "Etikettendrucker im Lager meldet Papierstau", "Summary": "Etikettendrucker im Lager meldet Papierstau",
"UserDisplayName": "Anwender, Peter", "UserDisplayName": "Anwender, Peter",
"UserAccount": "PA010", "UserAccount": "PA010",
@@ -425,7 +462,8 @@
"TicketId": "9e1d5d1b-5a22-430e-99ea-59840257caab", "TicketId": "9e1d5d1b-5a22-430e-99ea-59840257caab",
"UserId": "deece196-d8b6-4a9c-a2b9-3c2ae9c6d4ec", "UserId": "deece196-d8b6-4a9c-a2b9-3c2ae9c6d4ec",
"DisplayName": "TCK00416", "DisplayName": "TCK00416",
"Summary": "Ueberwachung meldet sporadische Alarme", "ActivityType": "SPSActivityTypeTicket",
"Summary": "WLAN Controller im Werk startet zyklisch neu",
"UserDisplayName": "Seifert, Dominik", "UserDisplayName": "Seifert, Dominik",
"UserAccount": "DS014", "UserAccount": "DS014",
"UserDomain": "CONTOSO", "UserDomain": "CONTOSO",
@@ -439,7 +477,8 @@
"TicketId": "9e1d5d1b-5a22-430e-99ea-59840257caab", "TicketId": "9e1d5d1b-5a22-430e-99ea-59840257caab",
"UserId": "deece196-d8b6-4a9c-a2b9-3c2ae9c6d4ec", "UserId": "deece196-d8b6-4a9c-a2b9-3c2ae9c6d4ec",
"DisplayName": "TCK00416", "DisplayName": "TCK00416",
"Summary": "Ueberwachung meldet sporadische Alarme", "ActivityType": "SPSActivityTypeTicket",
"Summary": "WLAN Controller im Werk startet zyklisch neu",
"UserDisplayName": "Seifert, Dominik", "UserDisplayName": "Seifert, Dominik",
"UserAccount": "DS014", "UserAccount": "DS014",
"UserDomain": "CONTOSO", "UserDomain": "CONTOSO",
@@ -451,7 +490,8 @@
"TicketId": "9e1d5d1b-5a22-430e-99ea-59840257caab", "TicketId": "9e1d5d1b-5a22-430e-99ea-59840257caab",
"UserId": "deece196-d8b6-4a9c-a2b9-3c2ae9c6d4ec", "UserId": "deece196-d8b6-4a9c-a2b9-3c2ae9c6d4ec",
"DisplayName": "TCK00416", "DisplayName": "TCK00416",
"Summary": "Ueberwachung meldet sporadische Alarme", "ActivityType": "SPSActivityTypeTicket",
"Summary": "WLAN Controller im Werk startet zyklisch neu",
"UserDisplayName": "Seifert, Dominik", "UserDisplayName": "Seifert, Dominik",
"UserAccount": "DS014", "UserAccount": "DS014",
"UserDomain": "CONTOSO", "UserDomain": "CONTOSO",
@@ -461,7 +501,8 @@
"TicketId": "d427dc61-9842-4464-b37a-612878d3de0f", "TicketId": "d427dc61-9842-4464-b37a-612878d3de0f",
"UserId": "a2164ecd-791f-482c-bea3-f089f14bec8a", "UserId": "a2164ecd-791f-482c-bea3-f089f14bec8a",
"DisplayName": "TCK00417", "DisplayName": "TCK00417",
"Summary": "Produktionsroboter steht nach Not Aus", "ActivityType": "SPSActivityTypeTicket",
"Summary": "SAP Buchungsjob bricht nachts wiederholt ab",
"UserDisplayName": "Boss, Bernd", "UserDisplayName": "Boss, Bernd",
"UserAccount": "BB003", "UserAccount": "BB003",
"UserDomain": "CONTOSO", "UserDomain": "CONTOSO",

View File

@@ -48,7 +48,6 @@ namespace FasdCockpitCommunicationDemo
public string Description { get; set; } public string Description { get; set; }
public string DescriptionHtml { get; set; } public string DescriptionHtml { get; set; }
public int Priority { get; set; } public int Priority { get; set; }
public string Classification { get; set; } //todo: replace with enum
public string Category { get; set; } //todo: replace with tree structure public string Category { get; set; } //todo: replace with tree structure
public string Solution { get; set; } public string Solution { get; set; }
public string SolutionHtml { get; set; } public string SolutionHtml { get; set; }

View File

@@ -21,7 +21,6 @@ namespace FasdCockpitCommunicationDemo
public string AffectedUser { get; set; } public string AffectedUser { get; set; }
public string Asset { get; set; } public string Asset { get; set; }
public string Category { get; set; } public string Category { get; set; }
public string Classification { get; set; }
public string Description { get; set; } public string Description { get; set; }
public string DescriptionHtml { get; set; } public string DescriptionHtml { get; set; }
public int? Priority { get; set; } public int? Priority { get; set; }
@@ -35,6 +34,7 @@ namespace FasdCockpitCommunicationDemo
public string TileKey { get; set; } = "TicketsNew"; public string TileKey { get; set; } = "TicketsNew";
public bool UseRoleScope { get; set; } public bool UseRoleScope { get; set; }
public Guid? UserId { get; set; } public Guid? UserId { get; set; }
public string ActivityType { get; set; }
public string DisplayNamePrefix { get; set; } = "TCK"; public string DisplayNamePrefix { get; set; } = "TCK";
public string Summary { get; set; } public string Summary { get; set; }
public string StatusId { get; set; } = "New"; public string StatusId { get; set; } = "New";
@@ -50,6 +50,7 @@ namespace FasdCockpitCommunicationDemo
public Guid UserId { get; set; } public Guid UserId { get; set; }
public string TileKey { get; set; } public string TileKey { get; set; }
public bool UseRoleScope { get; set; } public bool UseRoleScope { get; set; }
public string ActivityType { get; set; }
public string DisplayName { get; set; } public string DisplayName { get; set; }
public string Summary { get; set; } public string Summary { get; set; }
public string StatusId { get; set; } public string StatusId { get; set; }
@@ -149,7 +150,6 @@ namespace FasdCockpitCommunicationDemo
AffectedUser = source.AffectedUser, AffectedUser = source.AffectedUser,
Asset = source.Asset, Asset = source.Asset,
Category = source.Category, Category = source.Category,
Classification = source.Classification,
Description = source.Description, Description = source.Description,
DescriptionHtml = source.DescriptionHtml, DescriptionHtml = source.DescriptionHtml,
Priority = source.Priority, Priority = source.Priority,
@@ -169,6 +169,7 @@ namespace FasdCockpitCommunicationDemo
TileKey = source.TileKey, TileKey = source.TileKey,
UseRoleScope = source.UseRoleScope, UseRoleScope = source.UseRoleScope,
UserId = source.UserId, UserId = source.UserId,
ActivityType = source.ActivityType,
DisplayNamePrefix = source.DisplayNamePrefix, DisplayNamePrefix = source.DisplayNamePrefix,
Summary = source.Summary, Summary = source.Summary,
StatusId = source.StatusId, StatusId = source.StatusId,
@@ -190,6 +191,7 @@ namespace FasdCockpitCommunicationDemo
UserId = source.UserId, UserId = source.UserId,
TileKey = source.TileKey, TileKey = source.TileKey,
UseRoleScope = source.UseRoleScope, UseRoleScope = source.UseRoleScope,
ActivityType = source.ActivityType,
DisplayName = source.DisplayName, DisplayName = source.DisplayName,
Summary = source.Summary, Summary = source.Summary,
StatusId = source.StatusId, StatusId = source.StatusId,

View File

@@ -7,6 +7,7 @@ namespace FasdCockpitCommunicationDemo
public Guid TicketId { get; set; } public Guid TicketId { get; set; }
public Guid UserId { get; set; } public Guid UserId { get; set; }
public string DisplayName { get; set; } public string DisplayName { get; set; }
public string ActivityType { get; set; }
public string Summary { get; set; } public string Summary { get; set; }
public string StatusId { get; set; } public string StatusId { get; set; }
public string UserDisplayName { get; set; } public string UserDisplayName { get; set; }

View File

@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.Extensions.Logging.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-10.0.0.2" newVersion="10.0.0.2" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>

View File

@@ -43,25 +43,26 @@ namespace C4IT.FASD.Base
if (output.Tables.ContainsKey(table.Name)) if (output.Tables.ContainsKey(table.Name))
continue; continue;
var tableColumns = new Dictionary<string, cF4SDHealthCardRawData.cHealthCardTableColumn>(); var outputTable = new cF4SDHealthCardRawData.cHealthCardTable()
foreach (var column in table.Columns)
{
if (tableColumns.ContainsKey(column.ColumnName))
continue;
var values = new List<object>();
values.AddRange(column.Values);
tableColumns.Add(column.ColumnName, new cF4SDHealthCardRawData.cHealthCardTableColumn() { ColumnName = column.ColumnName, Values = values });
}
output.Tables.Add(table.Name, new cF4SDHealthCardRawData.cHealthCardTable()
{ {
Name = table.Name, Name = table.Name,
IsStatic = table.IsStatic, IsStatic = table.IsStatic,
TimeFrames = table.TimeFrames, TimeFrames = table.TimeFrames,
Columns = tableColumns };
});
outputTable.Columns = new Dictionary<string, cF4SDHealthCardRawData.cHealthCardTableColumn>();
foreach (var column in table.Columns)
{
if (outputTable.Columns.ContainsKey(column.ColumnName))
continue;
var values = new List<object>();
values.AddRange(column.Values);
outputTable.Columns.Add(column.ColumnName, new cF4SDHealthCardRawData.cHealthCardTableColumn(outputTable) { ColumnName = column.ColumnName, Values = values });
}
output.Tables.Add(table.Name, outputTable);
} }
} }
catch (Exception E) catch (Exception E)

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<packages> <packages>
<package id="Newtonsoft.Json" version="13.0.3" targetFramework="net472" /> <package id="Newtonsoft.Json" version="13.0.4" targetFramework="net472" />
</packages> </packages>

View File

@@ -25,7 +25,11 @@
</dependentAssembly> </dependentAssembly>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="Microsoft.Bcl.AsyncInterfaces" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> <assemblyIdentity name="Microsoft.Bcl.AsyncInterfaces" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-9.0.0.0" newVersion="9.0.0.0" /> <bindingRedirect oldVersion="0.0.0.0-10.0.1.0" newVersion="10.0.1.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Extensions.Logging.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-10.0.0.2" newVersion="10.0.0.2" />
</dependentAssembly> </dependentAssembly>
</assemblyBinding> </assemblyBinding>
</runtime> </runtime>

View File

@@ -7,6 +7,7 @@ using C4IT.MultiLanguage;
using FasdDesktopUi.Basics; using FasdDesktopUi.Basics;
using FasdDesktopUi.Basics.Helper; using FasdDesktopUi.Basics.Helper;
using FasdDesktopUi.Basics.Models; using FasdDesktopUi.Basics.Models;
using FasdDesktopUi.Basics.Services.Models;
using FasdDesktopUi.Pages.CustomMessageBox; using FasdDesktopUi.Pages.CustomMessageBox;
using FasdDesktopUi.Pages.PhoneSettingsPage; using FasdDesktopUi.Pages.PhoneSettingsPage;
using FasdDesktopUi.Pages.SearchPage; using FasdDesktopUi.Pages.SearchPage;
@@ -38,7 +39,12 @@ namespace FasdDesktopUi
public System.Windows.Forms.NotifyIcon notifyIcon = new System.Windows.Forms.NotifyIcon() { Text = $"First Aid Service Desk" }; public System.Windows.Forms.NotifyIcon notifyIcon = new System.Windows.Forms.NotifyIcon() { Text = $"First Aid Service Desk" };
public bool UseOsLanguage = string.IsNullOrEmpty(cFasdCockpitConfig.Instance.SelectedLanguage); public bool UseOsLanguage = string.IsNullOrEmpty(cFasdCockpitConfig.Instance.SelectedLanguage);
#region Ticketübersicht
private TrayTicketNotificationManager _ticketTrayNotification; private TrayTicketNotificationManager _ticketTrayNotification;
private TileScope? _pendingTicketOverviewScope;
#endregion
private async void Application_Startup(object sender, StartupEventArgs e) private async void Application_Startup(object sender, StartupEventArgs e)
{ {
@@ -179,10 +185,11 @@ namespace FasdDesktopUi
if (searchView == null) if (searchView == null)
return; return;
#if isDemo if (TryHandleTicketOverviewNotificationClick(searchView))
var hasNotification = HasPendingTicketOverviewNotification(); return;
if (searchView.IsVisible && !hasNotification) #if isDemo
if (searchView.IsVisible)
{ {
searchView.Hide(); searchView.Hide();
return; return;
@@ -194,9 +201,6 @@ namespace FasdDesktopUi
searchView.BringToFrontPreserveState(); searchView.BringToFrontPreserveState();
searchView.ShowTicketOverviewPane(); searchView.ShowTicketOverviewPane();
if (hasNotification)
ClearTicketOverviewTrayNotification();
#else #else
if (SearchPageView.Instance.IsVisible) if (SearchPageView.Instance.IsVisible)
SearchPageView.Instance.Hide(); SearchPageView.Instance.Hide();
@@ -271,12 +275,32 @@ namespace FasdDesktopUi
} }
} }
#region Ticketübersicht
private bool TryHandleTicketOverviewNotificationClick(SearchPageView searchView)
{
if (searchView == null)
return false;
if (!HasPendingTicketOverviewNotification())
return false;
if (!searchView.IsVisible)
searchView.ActivateSearchView();
else
searchView.BringToFrontPreserveState();
searchView.ShowTicketOverviewPaneForScope(PendingTicketOverviewScope);
ClearTicketOverviewTrayNotification();
return true;
}
private void NotifyIcon_BalloonTipClicked(object sender, EventArgs e) private void NotifyIcon_BalloonTipClicked(object sender, EventArgs e)
{ {
try try
{ {
SearchPageView.Instance?.BringToFrontPreserveState(); SearchPageView.Instance?.BringToFrontPreserveState();
SearchPageView.Instance?.ShowTicketOverviewPane(); SearchPageView.Instance?.ShowTicketOverviewPaneForScope(PendingTicketOverviewScope);
ClearTicketOverviewTrayNotification(); ClearTicketOverviewTrayNotification();
} }
catch (Exception E) catch (Exception E)
@@ -306,6 +330,7 @@ namespace FasdDesktopUi
{ {
try try
{ {
_pendingTicketOverviewScope = null;
_ticketTrayNotification?.Clear(); _ticketTrayNotification?.Clear();
} }
catch (Exception ex) catch (Exception ex)
@@ -314,6 +339,15 @@ namespace FasdDesktopUi
} }
} }
public void SetTicketOverviewNotificationScope(TileScope? scope)
{
_pendingTicketOverviewScope = scope;
}
public TileScope? PendingTicketOverviewScope => _pendingTicketOverviewScope;
#endregion
private System.Windows.Forms.ToolStripItem SetUpNotifyIconLanguageOption() private System.Windows.Forms.ToolStripItem SetUpNotifyIconLanguageOption()
{ {
try try
@@ -461,9 +495,18 @@ namespace FasdDesktopUi
private async void Application_Exit(object sender, ExitEventArgs e) private async void Application_Exit(object sender, ExitEventArgs e)
{ {
var closeUserSessionTask = cFasdCockpitCommunicationBase.Instance?.CloseUserSession(cFasdCockpitConfig.SessionId).ConfigureAwait(false); cF4sdUserInfo userInfo = null;
ConfiguredTaskAwaitable? closeUserSessionTask = null;
lock (cFasdCockpitCommunicationBase.CockpitUserInfoLock)
{
userInfo = cFasdCockpitCommunicationBase.CockpitUserInfo;
}
if (userInfo?.Id.Equals(Guid.Empty) is false)
{
closeUserSessionTask = cFasdCockpitCommunicationBase.Instance?.CloseUserSession(cFasdCockpitConfig.SessionId).ConfigureAwait(false);
}
await cFasdCockpitCommunicationBase.Instance.TerminateAsync(); await cFasdCockpitCommunicationBase.Instance?.TerminateAsync();
if (notifyIcon != null) if (notifyIcon != null)
{ {

View File

@@ -0,0 +1,16 @@
using FasdDesktopUi.Basics.Models;
using System;
using System.Collections.Generic;
namespace FasdDesktopUi.Basics.CustomEvents
{
public class HeadingDataEventArgs : EventArgs
{
public IEnumerable<cHeadingDataModel> NewValue { get; }
public HeadingDataEventArgs(IEnumerable<cHeadingDataModel> headingData) : base()
{
NewValue = headingData;
}
}
}

View File

@@ -1,11 +1,8 @@
using C4IT.FASD.Base; using C4IT.FASD.Base;
using System; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FasdDesktopUi.Basics.Services.RelationService namespace FasdDesktopUi.Basics.CustomEvents
{ {
public class RelationEventArgs : EventArgs public class RelationEventArgs : EventArgs
{ {

View File

@@ -0,0 +1,12 @@
using C4IT.FASD.Base;
using System;
using System.Collections.Generic;
namespace FasdDesktopUi.Basics.CustomEvents
{
public class SupportCaseDataEventArgs : EventArgs
{
public cF4sdApiSearchResultRelation Relation { get; set; }
public IEnumerable<cF4SDHealthCardRawData.cHealthCardTable> DataTables { get; set; }
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -125,7 +125,7 @@ namespace FasdDesktopUi.Basics.Helper
private bool HasRequiredInformationClasses(List<enumFasdInformationClass> required) private bool HasRequiredInformationClasses(List<enumFasdInformationClass> required)
{ {
return !(required.Any(informationClass => _dataProvider.Identities.Any(identity => identity.Class == informationClass) == false)); return !(required.Any(informationClass => _dataProvider?.Identities?.Any(identity => identity.Class == informationClass) == false));
} }

View File

@@ -0,0 +1,142 @@
using System;
using System.Collections.Generic;
using C4IT.FASD.Base;
using C4IT.Logging;
using FasdDesktopUi.Basics;
using static C4IT.Logging.cLogManager;
namespace FasdDesktopUi.Basics.Helper
{
internal static class TicketDeepLinkHelper
{
internal static bool TryOpenTicketRelationExternally(cF4sdApiSearchResultRelation relation)
{
try
{
if (relation == null || relation.Type != enumF4sdSearchResultClass.Ticket)
return false;
var ticketConfig = cFasdCockpitConfig.Instance?.Global?.TicketConfiguration;
if (ticketConfig == null)
return false;
var activityType = GetActivityType(relation);
var openExternally = ShouldOpenExternally(ticketConfig, activityType);
if (!openExternally)
return false;
var url = BuildTicketDeepLink(relation.id, activityType);
if (string.IsNullOrWhiteSpace(url))
return false;
new cBrowsers().Start("default", url);
return true;
}
catch (Exception ex)
{
LogException(ex);
}
return false;
}
private static string GetActivityType(cF4sdApiSearchResultRelation relation)
{
if (relation?.Infos != null && relation.Infos.TryGetValue("ActivityType", out var activityTypeValue))
return activityTypeValue;
return null;
}
private static bool ShouldOpenExternally(cF4sdTicketConfig ticketConfig, string activityType)
{
if (ticketConfig == null)
return false;
if (TryGetOverride(ticketConfig.OpenActivitiesExternallyOverrides, activityType, out var overrideValue))
return overrideValue;
return ticketConfig.OpenActivitiesExternally;
}
private static bool TryGetOverride(IEnumerable<string> overrides, string activityType, out bool value)
{
value = false;
if (string.IsNullOrWhiteSpace(activityType) || overrides == null)
return false;
foreach (var entry in overrides)
{
if (string.IsNullOrWhiteSpace(entry))
continue;
var parts = entry.Split(new[] { '=' }, 2, StringSplitOptions.RemoveEmptyEntries);
if (parts.Length != 2)
continue;
var typeName = parts[0].Trim();
if (!string.Equals(typeName, activityType, StringComparison.OrdinalIgnoreCase))
continue;
if (!TryParseBool(parts[1], out value))
return false;
return true;
}
return false;
}
private static bool TryParseBool(string value, out bool result)
{
result = false;
if (string.IsNullOrWhiteSpace(value))
return false;
switch (value.Trim().ToLowerInvariant())
{
case "true":
case "1":
case "yes":
result = true;
return true;
case "false":
case "0":
case "no":
result = false;
return true;
default:
return bool.TryParse(value, out result);
}
}
internal static string BuildTicketDeepLink(Guid ticketId, string activityType)
{
if (ticketId == Guid.Empty)
return null;
var server = cCockpitConfiguration.Instance?.m42ServerConfiguration?.Server;
if (string.IsNullOrWhiteSpace(server))
return null;
var baseUrl = server.TrimEnd('/');
if (!baseUrl.StartsWith("http://", StringComparison.OrdinalIgnoreCase) &&
!baseUrl.StartsWith("https://", StringComparison.OrdinalIgnoreCase))
{
baseUrl = "https://" + baseUrl;
}
if (!baseUrl.EndsWith("/wm", StringComparison.OrdinalIgnoreCase))
baseUrl += "/wm";
if (string.IsNullOrWhiteSpace(activityType))
return null;
var viewOptionsJson = $"{{\"embedded\":false,\"objectId\":\"{ticketId}\",\"type\":\"{activityType}\",\"viewType\":\"preview\",\"archived\":0}}";
var viewOptionsEncoded = Uri.EscapeDataString(viewOptionsJson);
return $"{baseUrl}/app-ServiceDesk/?view-options={viewOptionsEncoded}";
}
}
}

View File

@@ -230,6 +230,9 @@ namespace FasdDesktopUi.Basics.Models
Dispatcher.CurrentDispatcher.Invoke(() => splashScreen?.SetStatusText(cMultiLanguageSupport.GetItem("StartUp.SplashScreen.AuthenticateUser"))); Dispatcher.CurrentDispatcher.Invoke(() => splashScreen?.SetStatusText(cMultiLanguageSupport.GetItem("StartUp.SplashScreen.AuthenticateUser")));
ApiConnectionStatus = enumOnlineStatus.unauthorized; ApiConnectionStatus = enumOnlineStatus.unauthorized;
const string cockpitUserRole = "Cockpit.User"; const string cockpitUserRole = "Cockpit.User";
#if isNewFeature
const string cockpitTicketAgentRole = "Cockpit.TicketAgent";
#endif
userInfo = await cFasdCockpitCommunicationBase.Instance.WinLogon(); userInfo = await cFasdCockpitCommunicationBase.Instance.WinLogon();
lock (cFasdCockpitCommunicationBase.CockpitUserInfoLock) lock (cFasdCockpitCommunicationBase.CockpitUserInfoLock)
{ {
@@ -244,6 +247,10 @@ namespace FasdDesktopUi.Basics.Models
{ {
await Task.Run(async () => await cFasdCockpitConfig.Instance.InstantiateAnalyticsAsync(cFasdCockpitConfig.SessionId)); await Task.Run(async () => await cFasdCockpitConfig.Instance.InstantiateAnalyticsAsync(cFasdCockpitConfig.SessionId));
ApiConnectionStatus = enumOnlineStatus.online; ApiConnectionStatus = enumOnlineStatus.online;
#if isNewFeature
if (userInfo.Roles.Contains(cockpitTicketAgentRole))
cCockpitConfiguration.Instance.ticketSupport.EditTicket = true;
#endif
} }
} }
} }
@@ -273,7 +280,10 @@ namespace FasdDesktopUi.Basics.Models
} }
if (App.M42OptionMenuItem != null) if (App.M42OptionMenuItem != null)
App.Current.MainWindow.Dispatcher.Invoke(() =>
{
App.M42OptionMenuItem.Enabled = userInfo != null; App.M42OptionMenuItem.Enabled = userInfo != null;
});
// check, if the are logons needed // check, if the are logons needed
bool m42Valid = await CheckAndRefreshM42LogonAsync(); bool m42Valid = await CheckAndRefreshM42LogonAsync();

View File

@@ -22,6 +22,9 @@ namespace FasdDesktopUi.Basics.Models
[JsonConverter(typeof(StringEnumConverter))] [JsonConverter(typeof(StringEnumConverter))]
public enumHighlightColor? HighlightColor { get; set; } public enumHighlightColor? HighlightColor { get; set; }
[JsonIgnore]
public enumHistoryTitleType? PresentationStyle { get; set; } = enumHistoryTitleType.none;
[JsonIgnore] [JsonIgnore]
public cUiActionBase UiAction { get; set; } public cUiActionBase UiAction { get; set; }

View File

@@ -9,6 +9,7 @@ namespace FasdDesktopUi.Basics.Models
public enumFasdInformationClass InformationClass { get; set; } public enumFasdInformationClass InformationClass { get; set; }
public bool IsOnline { get; set; } public bool IsOnline { get; set; }
public cF4sdIdentityList Identities { get; set; } public cF4sdIdentityList Identities { get; set; }
public cF4sdApiSearchResultRelation Realtion { get; set; }
} }
public class cSwapCaseInfo public class cSwapCaseInfo

View File

@@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Windows; using System.Windows;
using C4IT.F4SD.DisplayFormatting; using C4IT.F4SD.DisplayFormatting;
using C4IT.F4SD.SupportCaseProtocoll.Models;
using C4IT.FASD.Base; using C4IT.FASD.Base;
using FasdCockpitBase; using FasdCockpitBase;
@@ -49,6 +50,7 @@ namespace FasdDesktopUi.Basics.Models
try try
{ {
cUtility.RawValueFormatter.SetDefaultCulture(new System.Globalization.CultureInfo(cFasdCockpitConfig.Instance.SelectedLanguage)); cUtility.RawValueFormatter.SetDefaultCulture(new System.Globalization.CultureInfo(cFasdCockpitConfig.Instance.SelectedLanguage));
cUtility.RawValueFormatter.SetDefaultTimeZone(TimeZoneInfo.Local);
var outputTable = dataProvider.HealthCardDataHelper.HealthCardRawData.GetTableByName(valueAdress.ValueTable, true); var outputTable = dataProvider.HealthCardDataHelper.HealthCardRawData.GetTableByName(valueAdress.ValueTable, true);
if (outputTable != null) if (outputTable != null)

View File

@@ -75,6 +75,7 @@ namespace FasdDesktopUi.Basics.Models
get => _unassignedTicketsCriticalSelected; get => _unassignedTicketsCriticalSelected;
set { if (_unassignedTicketsCriticalSelected != value) { _unassignedTicketsCriticalSelected = value; OnPropertyChanged(nameof(UnassignedTicketsCriticalSelected)); } } set { if (_unassignedTicketsCriticalSelected != value) { _unassignedTicketsCriticalSelected = value; OnPropertyChanged(nameof(UnassignedTicketsCriticalSelected)); } }
} }
#endregion #endregion
#region Highlight-Properties #region Highlight-Properties
@@ -107,6 +108,7 @@ namespace FasdDesktopUi.Basics.Models
private bool _unassignedTicketsCriticalHighlighted; private bool _unassignedTicketsCriticalHighlighted;
public bool UnassignedTicketsCriticalHighlighted { get => _unassignedTicketsCriticalHighlighted; set { if (_unassignedTicketsCriticalHighlighted != value) { _unassignedTicketsCriticalHighlighted = value; OnPropertyChanged(nameof(UnassignedTicketsCriticalHighlighted)); } } } public bool UnassignedTicketsCriticalHighlighted { get => _unassignedTicketsCriticalHighlighted; set { if (_unassignedTicketsCriticalHighlighted != value) { _unassignedTicketsCriticalHighlighted = value; OnPropertyChanged(nameof(UnassignedTicketsCriticalHighlighted)); } } }
#endregion #endregion
#region Change Hint Properties #region Change Hint Properties
@@ -139,6 +141,7 @@ namespace FasdDesktopUi.Basics.Models
private string _unassignedTicketsCriticalChangeHint; private string _unassignedTicketsCriticalChangeHint;
public string UnassignedTicketsCriticalChangeHint { get => _unassignedTicketsCriticalChangeHint; set { if (_unassignedTicketsCriticalChangeHint != value) { _unassignedTicketsCriticalChangeHint = value; OnPropertyChanged(nameof(UnassignedTicketsCriticalChangeHint)); } } } public string UnassignedTicketsCriticalChangeHint { get => _unassignedTicketsCriticalChangeHint; set { if (_unassignedTicketsCriticalChangeHint != value) { _unassignedTicketsCriticalChangeHint = value; OnPropertyChanged(nameof(UnassignedTicketsCriticalChangeHint)); } } }
#endregion #endregion
#region Ticket & Incident-Properties #region Ticket & Incident-Properties
@@ -176,7 +179,6 @@ namespace FasdDesktopUi.Basics.Models
private int _unassignedTicketsCritical; private int _unassignedTicketsCritical;
public int UnassignedTicketsCritical { get => _unassignedTicketsCritical; set { _unassignedTicketsCritical = value; OnPropertyChanged(nameof(UnassignedTicketsCritical)); } } public int UnassignedTicketsCritical { get => _unassignedTicketsCritical; set { _unassignedTicketsCritical = value; OnPropertyChanged(nameof(UnassignedTicketsCritical)); } }
public event PropertyChangedEventHandler PropertyChanged; public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName) => protected void OnPropertyChanged(string propertyName) =>
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
@@ -198,6 +200,7 @@ namespace FasdDesktopUi.Basics.Models
UnassignedTicketsSelected = false; UnassignedTicketsSelected = false;
UnassignedTicketsCriticalSelected = false; UnassignedTicketsCriticalSelected = false;
} }
public void ResetHighlights() public void ResetHighlights()
@@ -227,7 +230,14 @@ namespace FasdDesktopUi.Basics.Models
UnassignedTicketsChangeHint = null; UnassignedTicketsChangeHint = null;
UnassignedTicketsCriticalChangeHint = null; UnassignedTicketsCriticalChangeHint = null;
} }
#endregion #endregion
public TicketOverviewModel()
{
} }
} }
}

View File

@@ -242,7 +242,7 @@ namespace FasdDesktopUi.Basics
if (addRelation) if (addRelation)
foreach (var _caseRelation in CaseRelations) foreach (var _caseRelation in CaseRelations)
{ {
if (_caseRelation.isEqual(CaseRelation)) if (_caseRelation.Equals(CaseRelation))
{ {
addRelation = false; addRelation = false;
break; break;

View File

@@ -5,15 +5,18 @@ namespace FasdDesktopUi.Basics.Services.Models
{ {
public sealed class TicketOverviewCountsChangedEventArgs : EventArgs public sealed class TicketOverviewCountsChangedEventArgs : EventArgs
{ {
public TicketOverviewCountsChangedEventArgs(IReadOnlyList<TileCountChange> changes, IReadOnlyDictionary<string, TileCounts> currentCounts) public TicketOverviewCountsChangedEventArgs(IReadOnlyList<TileCountChange> changes, IReadOnlyDictionary<string, TileCounts> currentCounts, TileScope? initializedScope = null)
{ {
Changes = changes; Changes = changes ?? Array.Empty<TileCountChange>();
CurrentCounts = currentCounts; CurrentCounts = currentCounts;
InitializedScope = initializedScope;
} }
public IReadOnlyList<TileCountChange> Changes { get; } public IReadOnlyList<TileCountChange> Changes { get; }
public IReadOnlyDictionary<string, TileCounts> CurrentCounts { get; } public IReadOnlyDictionary<string, TileCounts> CurrentCounts { get; }
public TileScope? InitializedScope { get; }
} }
public readonly struct TileCountChange public readonly struct TileCountChange

View File

@@ -1,4 +1,5 @@
using System; using C4IT.F4SD.SupportCaseProtocoll.Models;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Windows; using System.Windows;
@@ -8,14 +9,14 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService
{ {
internal class F4SDProtocoll internal class F4SDProtocoll
{ {
private readonly ICollection<IProtocollEntry> _protocollEntries = new List<IProtocollEntry>(); private readonly ICollection<ProtocollEntryBase> _protocollEntries = new List<ProtocollEntryBase>();
public static F4SDProtocoll Instance { get; private set; } = new F4SDProtocoll(); public static F4SDProtocoll Instance { get; private set; } = new F4SDProtocoll();
private F4SDProtocoll() { } private F4SDProtocoll() { }
internal void Add(IProtocollEntry entry) => _protocollEntries.Add(entry); internal void Add(ProtocollEntryBase entry) => _protocollEntries.Add(entry);
internal void Add(IEnumerable<IProtocollEntry> entries) internal void Add(IEnumerable<ProtocollEntryBase> entries)
{ {
foreach (var entry in entries) foreach (var entry in entries)
{ {
@@ -25,34 +26,34 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService
internal void Clear() => _protocollEntries.Clear(); internal void Clear() => _protocollEntries.Clear();
internal T GetLatestOfType<T>() where T : IProtocollEntry => _protocollEntries.OfType<T>().LastOrDefault(); internal T GetLatestOfType<T>() where T : ProtocollEntryBase => _protocollEntries.OfType<T>().LastOrDefault();
internal IEnumerable<T> GetOfType<T>(int? count = null) where T : IProtocollEntry internal IEnumerable<T> GetOfType<T>(int? count = null) where T : ProtocollEntryBase
{ {
if(count.HasValue) if(count.HasValue)
return _protocollEntries.OfType<T>().Reverse().Take(count.Value).Reverse(); return _protocollEntries.OfType<T>().Reverse().Take(count.Value).Reverse();
return _protocollEntries.OfType<T>(); return _protocollEntries.OfType<T>();
} }
internal IEnumerable<IProtocollEntry> GetAll() => _protocollEntries; internal IEnumerable<ProtocollEntryBase> GetAll() => _protocollEntries;
internal DataObject GetLatestOfTypeAsDataObject<T>(bool skipHtmlFrame) where T : IProtocollEntry internal DataObject GetLatestOfTypeAsDataObject<T>(bool skipHtmlFrame) where T : ProtocollEntryBase
{ {
IProtocollEntry entry = _protocollEntries.OfType<T>().LastOrDefault(); ProtocollEntryBase entry = _protocollEntries.OfType<T>().LastOrDefault();
if (entry is null) if (entry is null)
return new DataObject(); return new DataObject();
return GetDataObjectOf(new IProtocollEntry[] { entry }, skipHtmlFrame); return GetDataObjectOf(new ProtocollEntryBase[] { entry }, skipHtmlFrame);
} }
internal DataObject GetOfTypeAsDataObject<T>(bool skipHtmlFrame, int? count = null) where T : IProtocollEntry internal DataObject GetOfTypeAsDataObject<T>(bool skipHtmlFrame, int? count = null) where T : ProtocollEntryBase
=> GetDataObjectOf(GetOfType<T>(count).Cast<IProtocollEntry>(), skipHtmlFrame); => GetDataObjectOf(GetOfType<T>(count).Cast<ProtocollEntryBase>(), skipHtmlFrame);
internal DataObject GetAllAsDataObject(bool skipHtmlFrame) internal DataObject GetAllAsDataObject(bool skipHtmlFrame)
=> GetDataObjectOf(_protocollEntries, skipHtmlFrame); => GetDataObjectOf(_protocollEntries, skipHtmlFrame);
private DataObject GetDataObjectOf(IEnumerable<IProtocollEntry> entries, bool skipHtmlFrame, int? count = null) private DataObject GetDataObjectOf(IEnumerable<ProtocollEntryBase> entries, bool skipHtmlFrame, int? count = null)
{ {
DataObject dataObject = new DataObject(); DataObject dataObject = new DataObject();
@@ -67,16 +68,16 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService
if (count.HasValue) if (count.HasValue)
entries = entries.Reverse().Take(count.Value).Reverse(); entries = entries.Reverse().Take(count.Value).Reverse();
foreach (IProtocollEntry entry in entries) foreach (ProtocollEntryBase entry in entries)
{ {
string entryAscii = entry.GetAscii(); string entryAscii = entry.AsciiContent;
if (!string.IsNullOrEmpty(entryAscii)) if (!string.IsNullOrEmpty(entryAscii))
{ {
ascii += entryAscii; ascii += entryAscii;
ascii += asciiSeparator; ascii += asciiSeparator;
} }
string entryHtml = entry.GetHtml(); string entryHtml = entry.HtmlContent;
if (!string.IsNullOrEmpty(entryHtml)) if (!string.IsNullOrEmpty(entryHtml))
{ {
html += entryHtml; html += entryHtml;

View File

@@ -1,15 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
namespace FasdDesktopUi.Basics.Services.ProtocollService
{
internal interface IProtocollEntry
{
string GetAscii();
string GetHtml();
}
}

View File

@@ -1,27 +1,38 @@
using C4IT.F4SD.DisplayFormatting; using C4IT.F4SD.SupportCaseProtocoll.Models;
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using C4IT.F4SD.DisplayFormatting;
using C4IT.FASD.Base; using C4IT.FASD.Base;
using C4IT.MultiLanguage; using C4IT.MultiLanguage;
using FasdDesktopUi.Basics.Models; using FasdDesktopUi.Basics.Models;
using FasdDesktopUi.Basics.UserControls; using FasdDesktopUi.Basics.UserControls;
using System;
using System.Collections.Generic;
using System.Globalization;
using static C4IT.Logging.cLogManager; using static C4IT.Logging.cLogManager;
using static FasdDesktopUi.Basics.UserControls.QuickActionStatusMonitor; using static FasdDesktopUi.Basics.UserControls.QuickActionStatusMonitor;
namespace FasdDesktopUi.Basics.Services.ProtocollService namespace FasdDesktopUi.Basics.Services.ProtocollService
{ {
internal class QuickActionProtocollEntry : IProtocollEntry internal static class QuickActionProtocollEntryOutput
{ {
private readonly cFasdQuickAction _quickActionDefinition;
private readonly cQuickActionCopyData _quickActionCopyData;
const string AsciiSeperator = "\n\n"; const string AsciiSeperator = "\n\n";
public QuickActionProtocollEntry(cFasdQuickAction quickActionDefinition, cQuickActionCopyData quickActionCopyData) public static QuickActionProtocollEntry GetQuickActionProtocollEntry(cFasdQuickAction quickActionDefinition, cQuickActionCopyData quickActionCopyData)
{ {
_quickActionDefinition = quickActionDefinition; string ascii = GetAscii(quickActionDefinition, quickActionCopyData);
_quickActionCopyData = quickActionCopyData; string html = GetHtml(quickActionDefinition, quickActionCopyData);
return new QuickActionProtocollEntry(ascii, html)
{
Id = quickActionDefinition.Id,
Name = quickActionDefinition.Name,
ExecutionTypeId = (int)quickActionDefinition.ExecutionType,
WasRunningOnAffectedDevice = quickActionCopyData.WasRunningOnAffectedDevice,
AffectedDeviceName = quickActionCopyData.AffectedDeviceName,
ResultCode = (int?)quickActionCopyData.QuickActionOutput?.ResultCode,
ErrorMessage = quickActionCopyData.QuickActionOutput?.ErrorDescription,
MeasureValues = GetQuickActionHtmlValueComparison(quickActionCopyData.MeasureValues)
};
} }
internal static cQuickActionCopyData GetCopyData(cFasdQuickAction quickActionDefinition, cSupportCaseDataProvider dataProvider, bool wasRunningOnAffectedDevice, cQuickActionOutput quickActionOutput, List<cQuickActionMeasureValue> measureValues) internal static cQuickActionCopyData GetCopyData(cFasdQuickAction quickActionDefinition, cSupportCaseDataProvider dataProvider, bool wasRunningOnAffectedDevice, cQuickActionOutput quickActionOutput, List<cQuickActionMeasureValue> measureValues)
@@ -34,9 +45,8 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService
quickActionCopyData.Name = quickActionDefinition.Names.GetValue(); quickActionCopyData.Name = quickActionDefinition.Names.GetValue();
quickActionCopyData.ExecutionTime = DateTime.UtcNow; quickActionCopyData.ExecutionTime = DateTime.UtcNow;
var infoClass = dataProvider.HealthCardDataHelper.SelectedHealthCard.InformationClasses.FirstOrDefault();
if (dataProvider.HealthCardDataHelper.HeadingData.TryGetValue(enumFasdInformationClass.Computer, out var computerHeadingData)) quickActionCopyData.AffectedDeviceName = dataProvider.HealthCardDataHelper.GetInformationObjectHeadingName(infoClass);
quickActionCopyData.AffectedDeviceName = computerHeadingData.HeadingText;
quickActionCopyData.WasRunningOnAffectedDevice = wasRunningOnAffectedDevice; quickActionCopyData.WasRunningOnAffectedDevice = wasRunningOnAffectedDevice;
quickActionCopyData.QuickActionOutput = quickActionOutput; quickActionCopyData.QuickActionOutput = quickActionOutput;
@@ -52,38 +62,21 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService
return quickActionCopyData; return quickActionCopyData;
} }
internal cQuickActionResult GetResult() private static string GetAscii(cFasdQuickAction quickActionDefinition, cQuickActionCopyData quickActionCopyData) => GetQuickActionAscii(quickActionDefinition, quickActionCopyData);
{
return new cQuickActionResult()
{
QuickActionId = _quickActionDefinition.Id,
QuickActionName = _quickActionDefinition.Name,
QuickActionExecutionType = (int)_quickActionDefinition.ExecutionType,
wasRunningOnAffectedDevice = _quickActionCopyData.WasRunningOnAffectedDevice,
AffectedDeviceName = _quickActionCopyData.AffectedDeviceName,
ExecutionTime = DateTime.UtcNow,
ResultCode = (int?)(_quickActionCopyData.QuickActionOutput?.ResultCode),
ErrorMessage = _quickActionCopyData.QuickActionOutput?.ErrorDescription,
Output = GetQuickActionHtmlOutput(_quickActionCopyData.QuickActionOutput),
MeasureValues = GetQuickActionHtmlValueComparison(_quickActionCopyData.MeasureValues)
};
}
public string GetAscii() => GetQuickActionAscii(_quickActionCopyData); private static string GetHtml(cFasdQuickAction quickActionDefinition, cQuickActionCopyData quickActionCopyData) => GetQuickActionHtml(quickActionDefinition, quickActionCopyData);
public string GetHtml() => GetQuickActionHtml(_quickActionCopyData); private static bool ShouldHideQuickActionOutput(cFasdQuickAction quickActionDefinition, string outputValueKey)
private bool ShouldHideQuickActionOutput(string outputValueKey)
{ {
try try
{ {
if (_quickActionDefinition.ColumnOutputFormattings is null) if (quickActionDefinition.ColumnOutputFormattings is null)
return false; return false;
if (!_quickActionDefinition.ShowAllOutputContent && !_quickActionDefinition.ColumnOutputFormattings.ContainsKey(outputValueKey)) if (!quickActionDefinition.ShowAllOutputContent && !quickActionDefinition.ColumnOutputFormattings.ContainsKey(outputValueKey))
return true; return true;
if (_quickActionDefinition.ColumnOutputFormattings.TryGetValue(outputValueKey, out var columnFormatting)) if (quickActionDefinition.ColumnOutputFormattings.TryGetValue(outputValueKey, out var columnFormatting))
return columnFormatting.Hidden; return columnFormatting.Hidden;
} }
catch (Exception ex) catch (Exception ex)
@@ -96,19 +89,19 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService
#region Ascii #region Ascii
private string GetQuickActionAscii(cQuickActionCopyData copyData) private static string GetQuickActionAscii(cFasdQuickAction quickActionDefinition, cQuickActionCopyData copyData)
{ {
string ascii = string.Empty; string ascii = string.Empty;
ascii += GetQuickActionAsciiDescription(copyData.Name, copyData.AffectedDeviceName, copyData.WasRunningOnAffectedDevice, copyData.ExecutionTime, copyData.QuickActionOutput?.ResultCode); ascii += GetQuickActionAsciiDescription(quickActionDefinition,copyData.Name, copyData.AffectedDeviceName, copyData.WasRunningOnAffectedDevice, copyData.ExecutionTime, copyData.QuickActionOutput?.ResultCode);
ascii += GetQuickActionAsciiError(copyData.QuickActionOutput?.ErrorDescription); ascii += GetQuickActionAsciiError(copyData.QuickActionOutput?.ErrorDescription);
ascii += GetQuickActionAsciiOutput(copyData.QuickActionOutput); ascii += GetQuickActionAsciiOutput(quickActionDefinition, copyData.QuickActionOutput);
ascii += GetQuickActionAsciiValueComparisonString(copyData.MeasureValues); ascii += GetQuickActionAsciiValueComparisonString(copyData.MeasureValues);
return ascii; return ascii;
} }
private string GetQuickActionAsciiDescription(string quickActionName, string deviceName, bool wasRunningOnAffectedDevice, DateTime executionTime, enumQuickActionSuccess? quickActionStatus) private static string GetQuickActionAsciiDescription(cFasdQuickAction quickActionDefinition,string quickActionName, string deviceName, bool wasRunningOnAffectedDevice, DateTime executionTime, enumQuickActionSuccess? quickActionStatus)
{ {
string asciiDescription = string.Empty; string asciiDescription = string.Empty;
try try
@@ -127,6 +120,12 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService
} }
var rawDescription = wasRunningOnAffectedDevice ? cMultiLanguageSupport.GetItem("QuickAction.Remote.Copy.Description") : cMultiLanguageSupport.GetItem("QuickAction.Local.Copy.Description"); var rawDescription = wasRunningOnAffectedDevice ? cMultiLanguageSupport.GetItem("QuickAction.Remote.Copy.Description") : cMultiLanguageSupport.GetItem("QuickAction.Local.Copy.Description");
if (quickActionDefinition.Section == enumDataHistoryOrigin.Citrix.ToString())
{
rawDescription = cMultiLanguageSupport.GetItem("QuickAction.RemoteSession.Copy.Description");
}
asciiDescription = string.Format(rawDescription, quickActionName, deviceName, executionTime.ToString("g", new CultureInfo(cFasdCockpitConfig.Instance.SelectedLanguage)), quickActionStatusString); asciiDescription = string.Format(rawDescription, quickActionName, deviceName, executionTime.ToString("g", new CultureInfo(cFasdCockpitConfig.Instance.SelectedLanguage)), quickActionStatusString);
} }
catch (Exception E) catch (Exception E)
@@ -137,7 +136,7 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService
return asciiDescription; return asciiDescription;
} }
private string GetQuickActionAsciiError(string errorMessage) private static string GetQuickActionAsciiError(string errorMessage)
{ {
if (!string.IsNullOrEmpty(errorMessage)) if (!string.IsNullOrEmpty(errorMessage))
errorMessage.Insert(0, AsciiSeperator); errorMessage.Insert(0, AsciiSeperator);
@@ -145,7 +144,7 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService
return errorMessage; return errorMessage;
} }
private string GetQuickActionAsciiOutput(QuickActionStatusMonitor.cQuickActionOutput quickActionOutput) private static string GetQuickActionAsciiOutput(cFasdQuickAction quickActionDefinition, QuickActionStatusMonitor.cQuickActionOutput quickActionOutput)
{ {
string output = string.Empty; string output = string.Empty;
@@ -163,7 +162,7 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService
output += AsciiSeperator; output += AsciiSeperator;
output += cMultiLanguageSupport.GetItem("QuickAction.Copy.Output") + " "; output += cMultiLanguageSupport.GetItem("QuickAction.Copy.Output") + " ";
output += singleOutput.GetDisplayValue(_quickActionDefinition.ColumnOutputFormattings); output += singleOutput.GetDisplayValue(quickActionDefinition.ColumnOutputFormattings);
break; break;
} }
@@ -175,10 +174,10 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService
foreach (var value in listOutput.Values[0]) foreach (var value in listOutput.Values[0])
{ {
if (ShouldHideQuickActionOutput(value.Key)) if (ShouldHideQuickActionOutput(quickActionDefinition, value.Key))
continue; continue;
if (_quickActionDefinition.ColumnOutputFormattings?.TryGetValue(value.Key, out var outputFormatting) ?? false) if (quickActionDefinition.ColumnOutputFormattings?.TryGetValue(value.Key, out var outputFormatting) ?? false)
output += outputFormatting.Names.GetValue(); output += outputFormatting.Names.GetValue();
else else
output += value.Key; output += value.Key;
@@ -194,10 +193,10 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService
{ {
string valueKey = listOutput.Values[0][j].Key; string valueKey = listOutput.Values[0][j].Key;
if (ShouldHideQuickActionOutput(valueKey)) if (ShouldHideQuickActionOutput(quickActionDefinition, valueKey))
continue; continue;
string displayValue = listOutput.GetDisplayValue(i, j, _quickActionDefinition.ColumnOutputFormattings); string displayValue = listOutput.GetDisplayValue(i, j, quickActionDefinition.ColumnOutputFormattings);
if (string.IsNullOrWhiteSpace(displayValue)) if (string.IsNullOrWhiteSpace(displayValue))
continue; continue;
@@ -218,12 +217,12 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService
{ {
var value = objectOutput.Values[i]; var value = objectOutput.Values[i];
if (ShouldHideQuickActionOutput(value.Key)) if (ShouldHideQuickActionOutput(quickActionDefinition, value.Key))
continue; continue;
string columnTitle = string.Empty; string columnTitle = string.Empty;
if (_quickActionDefinition.ColumnOutputFormattings?.TryGetValue(value.Key, out var outputFormatting) ?? false) if (quickActionDefinition.ColumnOutputFormattings?.TryGetValue(value.Key, out var outputFormatting) ?? false)
columnTitle = outputFormatting.Names.GetValue(); columnTitle = outputFormatting.Names.GetValue();
else else
columnTitle = value.Key; columnTitle = value.Key;
@@ -231,7 +230,7 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService
if (!string.IsNullOrEmpty(columnTitle)) if (!string.IsNullOrEmpty(columnTitle))
output += $"{columnTitle}: "; output += $"{columnTitle}: ";
string displayValue = objectOutput.GetDisplayValue(i, _quickActionDefinition.ColumnOutputFormattings); string displayValue = objectOutput.GetDisplayValue(i, quickActionDefinition.ColumnOutputFormattings);
output += !string.IsNullOrWhiteSpace(displayValue) ? displayValue : null; output += !string.IsNullOrWhiteSpace(displayValue) ? displayValue : null;
output += "\n"; output += "\n";
@@ -249,7 +248,7 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService
return output; return output;
} }
private string GetQuickActionAsciiValueComparisonString(List<QuickActionStatusMonitor.cQuickActionMeasureValue> measureValues) private static string GetQuickActionAsciiValueComparisonString(List<QuickActionStatusMonitor.cQuickActionMeasureValue> measureValues)
{ {
string output = string.Empty; string output = string.Empty;
@@ -261,6 +260,7 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService
output += AsciiSeperator + cMultiLanguageSupport.GetItem("QuickAction.Copy.Measure"); output += AsciiSeperator + cMultiLanguageSupport.GetItem("QuickAction.Copy.Measure");
cUtility.RawValueFormatter.SetDefaultCulture(new System.Globalization.CultureInfo(cFasdCockpitConfig.Instance.SelectedLanguage)); cUtility.RawValueFormatter.SetDefaultCulture(new System.Globalization.CultureInfo(cFasdCockpitConfig.Instance.SelectedLanguage));
cUtility.RawValueFormatter.SetDefaultTimeZone(TimeZoneInfo.Local);
foreach (var measureValue in measureValues) foreach (var measureValue in measureValues)
{ {
@@ -293,15 +293,15 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService
#region Html #region Html
private string GetQuickActionHtml(cQuickActionCopyData copyData) private static string GetQuickActionHtml(cFasdQuickAction quickActionDefinition, cQuickActionCopyData copyData)
{ {
string output = string.Empty; string output = string.Empty;
try try
{ {
output += GetQuickActionHtmlDescription(copyData.Name, copyData.AffectedDeviceName, copyData.WasRunningOnAffectedDevice, copyData.ExecutionTime, copyData.QuickActionOutput?.ResultCode); output += GetQuickActionHtmlDescription(quickActionDefinition,copyData.Name, copyData.AffectedDeviceName, copyData.WasRunningOnAffectedDevice, copyData.ExecutionTime, copyData.QuickActionOutput?.ResultCode);
output += GetQuickActionHtmlError(copyData.QuickActionOutput?.ErrorDescription); output += GetQuickActionHtmlError(copyData.QuickActionOutput?.ErrorDescription);
output += GetQuickActionHtmlOutput(copyData.QuickActionOutput); output += GetQuickActionHtmlOutput(quickActionDefinition, copyData.QuickActionOutput);
output += GetQuickActionHtmlValueComparison(copyData.MeasureValues); output += GetQuickActionHtmlValueComparison(copyData.MeasureValues);
} }
catch (Exception E) catch (Exception E)
@@ -312,7 +312,7 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService
return output; return output;
} }
private string GetQuickActionHtmlDescription(string quickActionName, string deviceName, bool wasRunningOnAffectedDevice, DateTime executionTime, enumQuickActionSuccess? quickActionStatus) private static string GetQuickActionHtmlDescription(cFasdQuickAction quickActionDefinition, string quickActionName, string deviceName, bool wasRunningOnAffectedDevice, DateTime executionTime, enumQuickActionSuccess? quickActionStatus)
{ {
string output = string.Empty; string output = string.Empty;
try try
@@ -331,6 +331,11 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService
} }
var rawDescription = wasRunningOnAffectedDevice ? cMultiLanguageSupport.GetItem("QuickAction.Remote.Copy.Description.Html") : cMultiLanguageSupport.GetItem("QuickAction.Local.Copy.Description.Html"); var rawDescription = wasRunningOnAffectedDevice ? cMultiLanguageSupport.GetItem("QuickAction.Remote.Copy.Description.Html") : cMultiLanguageSupport.GetItem("QuickAction.Local.Copy.Description.Html");
if(quickActionDefinition.Section == enumDataHistoryOrigin.Citrix.ToString())
{
rawDescription = cMultiLanguageSupport.GetItem("QuickAction.RemoteSession.Copy.Description.Html");
}
output = string.Format(rawDescription, quickActionName, deviceName, executionTime.ToString("g", new CultureInfo(cFasdCockpitConfig.Instance.SelectedLanguage)), quickActionStatusString); output = string.Format(rawDescription, quickActionName, deviceName, executionTime.ToString("g", new CultureInfo(cFasdCockpitConfig.Instance.SelectedLanguage)), quickActionStatusString);
} }
catch (Exception E) catch (Exception E)
@@ -349,7 +354,7 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService
return errorMessage; return errorMessage;
} }
private string GetQuickActionHtmlOutput(QuickActionStatusMonitor.cQuickActionOutput quickActionOutput) private static string GetQuickActionHtmlOutput(cFasdQuickAction quickActionDefinition, QuickActionStatusMonitor.cQuickActionOutput quickActionOutput)
{ {
string output = string.Empty; string output = string.Empty;
@@ -367,7 +372,7 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService
if (singleOutput.Value is null) if (singleOutput.Value is null)
return output; return output;
var displayValue = singleOutput.GetDisplayValue(_quickActionDefinition?.ColumnOutputFormattings); var displayValue = singleOutput.GetDisplayValue(quickActionDefinition?.ColumnOutputFormattings);
output += "<p>" + cMultiLanguageSupport.GetItem("QuickAction.Copy.Output.Html") + " " + displayValue + "</p>"; output += "<p>" + cMultiLanguageSupport.GetItem("QuickAction.Copy.Output.Html") + " " + displayValue + "</p>";
break; break;
} }
@@ -380,11 +385,11 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService
foreach (var value in listOutput.Values[0]) foreach (var value in listOutput.Values[0])
{ {
if (ShouldHideQuickActionOutput(value.Key)) if (ShouldHideQuickActionOutput(quickActionDefinition, value.Key))
continue; continue;
string headingValue = value.Key; string headingValue = value.Key;
if (_quickActionDefinition.ColumnOutputFormattings?.TryGetValue(value.Key, out var outputFormatting) ?? false) if (quickActionDefinition.ColumnOutputFormattings?.TryGetValue(value.Key, out var outputFormatting) ?? false)
headingValue = outputFormatting.Names.GetValue(); headingValue = outputFormatting.Names.GetValue();
output += "<th align=\"left\">"; output += "<th align=\"left\">";
@@ -401,10 +406,10 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService
for (int j = 0; j < listOutput.Values[i].Count; j++) for (int j = 0; j < listOutput.Values[i].Count; j++)
{ {
string valueKey = listOutput.Values[0][j].Key; string valueKey = listOutput.Values[0][j].Key;
if (ShouldHideQuickActionOutput(valueKey)) if (ShouldHideQuickActionOutput(quickActionDefinition, valueKey))
continue; continue;
string displayValue = listOutput.GetDisplayValue(i, j, _quickActionDefinition.ColumnOutputFormattings); string displayValue = listOutput.GetDisplayValue(i, j, quickActionDefinition.ColumnOutputFormattings);
if (string.IsNullOrWhiteSpace(displayValue)) if (string.IsNullOrWhiteSpace(displayValue))
continue; continue;
@@ -430,11 +435,11 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService
{ {
var value = objectOutput.Values[i]; var value = objectOutput.Values[i];
if (ShouldHideQuickActionOutput(value.Key)) if (ShouldHideQuickActionOutput(quickActionDefinition, value.Key))
continue; continue;
string headingValue = value.Key; string headingValue = value.Key;
if (_quickActionDefinition.ColumnOutputFormattings?.TryGetValue(value.Key, out var outputFormatting) ?? false) if (quickActionDefinition.ColumnOutputFormattings?.TryGetValue(value.Key, out var outputFormatting) ?? false)
headingValue = outputFormatting.Names.GetValue(); headingValue = outputFormatting.Names.GetValue();
output += "<tr>"; output += "<tr>";
@@ -443,7 +448,7 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService
output += "</td>"; output += "</td>";
output += "<td>"; output += "<td>";
string displayValue = objectOutput.GetDisplayValue(i, _quickActionDefinition.ColumnOutputFormattings); string displayValue = objectOutput.GetDisplayValue(i, quickActionDefinition.ColumnOutputFormattings);
output += !string.IsNullOrWhiteSpace(displayValue) ? displayValue : null; output += !string.IsNullOrWhiteSpace(displayValue) ? displayValue : null;
output += "</td>"; output += "</td>";
@@ -463,7 +468,7 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService
return output; return output;
} }
private string GetQuickActionHtmlValueComparison(List<QuickActionStatusMonitor.cQuickActionMeasureValue> measureValues) private static string GetQuickActionHtmlValueComparison(List<QuickActionStatusMonitor.cQuickActionMeasureValue> measureValues)
{ {
string output = string.Empty; string output = string.Empty;
@@ -475,6 +480,7 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService
output += "<p>" + cMultiLanguageSupport.GetItem("QuickAction.Copy.Measure.Html") + "</p>"; output += "<p>" + cMultiLanguageSupport.GetItem("QuickAction.Copy.Measure.Html") + "</p>";
cUtility.RawValueFormatter.SetDefaultCulture(new System.Globalization.CultureInfo(cFasdCockpitConfig.Instance.SelectedLanguage)); cUtility.RawValueFormatter.SetDefaultCulture(new System.Globalization.CultureInfo(cFasdCockpitConfig.Instance.SelectedLanguage));
cUtility.RawValueFormatter.SetDefaultTimeZone(TimeZoneInfo.Local);
foreach (var measureValue in measureValues) foreach (var measureValue in measureValues)
{ {

View File

@@ -1,27 +1,30 @@
using C4IT.FASD.Base; using C4IT.F4SD.SupportCaseProtocoll.Models;
using C4IT.FASD.Base;
using C4IT.MultiLanguage; using C4IT.MultiLanguage;
namespace FasdDesktopUi.Basics.Services.ProtocollService namespace FasdDesktopUi.Basics.Services.ProtocollService
{ {
internal class QuickTipStepProtocollEntry : IProtocollEntry internal static class QuickTipStepProtocollEntryOutput
{ {
private readonly cQuickTipElement _quickTipElementDefinition; public static QuickTipStepProtocollEntry GetQuickTipStepProtocollEntry(cQuickTipElement quickTipElementDefinition, bool wasSuccessfull)
private readonly bool _wasSuccessfull;
public QuickTipStepProtocollEntry(cQuickTipElement quickTipElementDefinition, bool wasSuccessfull)
{ {
_quickTipElementDefinition = quickTipElementDefinition; string ascii = GetAsciiOutput(quickTipElementDefinition, wasSuccessfull);
_wasSuccessfull = wasSuccessfull; string html = GetHtmlOutput(quickTipElementDefinition, wasSuccessfull);
return new QuickTipStepProtocollEntry(ascii, html)
{
Name = quickTipElementDefinition.Name,
WasSuccessfull = wasSuccessfull
};
} }
public string GetAscii() private static string GetAsciiOutput(cQuickTipElement quickTipElementDefinition, bool wasSuccessfull)
{ {
string currentLanguage = cMultiLanguageSupport.CurrentLanguage; string currentLanguage = cMultiLanguageSupport.CurrentLanguage;
try try
{ {
cMultiLanguageSupport.CurrentLanguage = cF4SDCockpitXmlConfig.Instance.HealthCardConfig.ProtocollLanguage ?? currentLanguage; cMultiLanguageSupport.CurrentLanguage = cF4SDCockpitXmlConfig.Instance.HealthCardConfig.ProtocollLanguage ?? currentLanguage;
string ascii = _wasSuccessfull ? cMultiLanguageSupport.GetItem("QuickTips.Copy.ManualStep.Successfull") : cMultiLanguageSupport.GetItem("QuickTips.Copy.ManualStep.Unsuccessfull"); string ascii = wasSuccessfull ? cMultiLanguageSupport.GetItem("QuickTips.Copy.ManualStep.Successfull") : cMultiLanguageSupport.GetItem("QuickTips.Copy.ManualStep.Unsuccessfull");
return string.Format(ascii, _quickTipElementDefinition?.Names?.GetValue()); return string.Format(ascii, quickTipElementDefinition?.Names?.GetValue());
} }
finally finally
{ {
@@ -29,7 +32,7 @@ namespace FasdDesktopUi.Basics.Services.ProtocollService
} }
} }
public string GetHtml() private static string GetHtmlOutput(cQuickTipElement quickTipElementDefinition, bool wasSuccessfull)
=> GetAscii(); => GetAsciiOutput(quickTipElementDefinition, wasSuccessfull);
} }
} }

View File

@@ -1,18 +0,0 @@
namespace FasdDesktopUi.Basics.Services.ProtocollService
{
internal class TextualProtocollEntry : IProtocollEntry
{
private readonly string _asciiText;
private readonly string _htmlText;
public TextualProtocollEntry(string asciiText, string htmlText)
{
_asciiText = asciiText;
_htmlText = htmlText;
}
public string GetAscii() => _asciiText;
public string GetHtml() => _htmlText;
}
}

View File

@@ -4,10 +4,8 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows.Forms;
using static C4IT.Logging.cLogManager; using static C4IT.Logging.cLogManager;
[assembly: InternalsVisibleTo("F4SD.Cockpit.Client.Test")] [assembly: InternalsVisibleTo("F4SD.Cockpit.Client.Test")]
@@ -29,7 +27,7 @@ namespace FasdDesktopUi.Basics.Services.RelationService
{ {
try try
{ {
_relations = new List<cF4sdApiSearchResultRelation>(); _relations = relatedTo?.Select(searchResult => new cF4sdApiSearchResultRelation(searchResult)).ToList() ?? new List<cF4sdApiSearchResultRelation>();
cF4sdStagedSearchResultRelationTaskId gatherRelationTask = await cFasdCockpitCommunicationBase.Instance.StartGatheringRelations(relatedTo, token); cF4sdStagedSearchResultRelationTaskId gatherRelationTask = await cFasdCockpitCommunicationBase.Instance.StartGatheringRelations(relatedTo, token);
_ = Task.Run(async () => _ = Task.Run(async () =>

View File

@@ -0,0 +1,262 @@
using C4IT.FASD.Base;
using C4IT.FASD.Cockpit.Communication;
using FasdDesktopUi.Basics.CustomEvents;
using FasdDesktopUi.Basics.Models;
using FasdDesktopUi.Pages.DetailsPage.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using static C4IT.Logging.cLogManager;
namespace FasdDesktopUi.Basics.Services.SupportCase.Controllers
{
/// <summary>
/// Used to manage the <see cref="ISupportCase"/> for the UI via the <see cref="SupportCaseProcessor"/>"
/// </summary>
public class SupportCaseController
{
private SupportCaseProcessor _supportCaseProcessor;
private cF4sdApiSearchResultRelation _focusedRelation;
private readonly Dictionary<enumFasdInformationClass, cF4sdApiSearchResultRelation> _selectedRelations = new Dictionary<enumFasdInformationClass, cF4sdApiSearchResultRelation>();
private cHealthCard _selectedHealthcard = null;
private bool _hasDirectionConnection = false;
public cSupportCaseDataProvider SupportCaseDataProviderArtifact { get => _supportCaseProcessor?.SupportCaseDataProviderArtifact; }
internal void SetSupportCaseProcessor(SupportCaseProcessor supportCaseProcessor, IEnumerable<cF4sdIdentityEntry> preselectedIdentities)
{
IEnumerable<cF4sdApiSearchResultRelation> preselectedRelations = GetPreselectedRelations(supportCaseProcessor.GetCaseRelations(), preselectedIdentities);
ResetSelectedRelations(preselectedRelations);
_hasDirectionConnection = false;
if (_supportCaseProcessor != null)
{
_supportCaseProcessor.AvailableCaseRelationsAdded -= HandleAvailableCaseRelationsAdded;
_supportCaseProcessor.CaseDataChanged -= HandleCaseDataChanged;
_supportCaseProcessor.SupportCaseDataProviderArtifact.DirectConnectionHelper.DirectConnectionChanged -= HandleDirectConnectionChanged;
}
_supportCaseProcessor = supportCaseProcessor;
_supportCaseProcessor.AvailableCaseRelationsAdded += HandleAvailableCaseRelationsAdded;
_supportCaseProcessor.CaseDataChanged += HandleCaseDataChanged;
_supportCaseProcessor.SupportCaseDataProviderArtifact.DirectConnectionHelper.DirectConnectionChanged += HandleDirectConnectionChanged;
}
private IEnumerable<cF4sdApiSearchResultRelation> GetPreselectedRelations
(ILookup<enumFasdInformationClass, cF4sdApiSearchResultRelation> loadedRelations, IEnumerable<cF4sdIdentityEntry> preselectedIdentities)
{
List<cF4sdApiSearchResultRelation> preselectedRelations = new List<cF4sdApiSearchResultRelation>();
foreach (var relationType in loadedRelations)
{
foreach (var relation in relationType)
{
if (relation.Identities.All(ri => preselectedIdentities.Any(i => i.Id == ri.Id)))
preselectedRelations.Add(relation);
}
}
return preselectedRelations;
}
private void ResetSelectedRelations(IEnumerable<cF4sdApiSearchResultRelation> preselectedRelations)
{
try
{
_selectedRelations.Clear();
if (preselectedRelations is null)
return;
foreach (var relation in preselectedRelations)
{
_selectedRelations[cF4sdIdentityEntry.GetFromSearchResult(relation.Type)] = relation;
}
}
catch (Exception ex)
{
LogException(ex);
}
}
private void HandleAvailableCaseRelationsAdded(object sender, RelationEventArgs e)
=> AvailableCaseRelationsAdded?.Invoke(this, e);
private void HandleCaseDataChanged(object sender, SupportCaseDataEventArgs e)
{
CaseDataChanged?.Invoke(this, e);
_ = Task.Run(async () =>
{
await UpdateStatusOfSelectedRelations();
if (!_hasDirectionConnection)
await SupportCaseDataProviderArtifact.DirectConnectionHelper.DirectConnectionStartAsync();
});
}
private void HandleDirectConnectionChanged(object sender, EventArgs e)
{
_hasDirectionConnection = SupportCaseDataProviderArtifact.DirectConnectionHelper.IsDirectConnectionActive;
}
/// <summary>
/// Updates the currently for a support case relevant and shown relation.
/// </summary>
/// <remarks>Raises <see cref="FocusedRelationsChanged"/></remarks>
internal void UpdateFocusedCaseRelation(cF4sdApiSearchResultRelation relation)
{
try
{
_selectedHealthcard = _supportCaseProcessor.GetHealthcardFor(relation);
HashSet<string> requiredTables = cHealthCard.GetRequiredTables(_selectedHealthcard);
_ = Task.Run(async () => await _supportCaseProcessor.LoadSupportCaseDataAsync(relation, requiredTables));
List<enumFasdInformationClass> requiredInformationClasses = relation.Identities
.Where(i => i.Class != enumFasdInformationClass.User)
.Select(i => i.Class)
.ToList();
if (relation.Type == enumF4sdSearchResultClass.User)
requiredInformationClasses = new List<enumFasdInformationClass>() { enumFasdInformationClass.User };
if (requiredInformationClasses.Count == 0)
requiredInformationClasses.Add(enumFasdInformationClass.User);
SupportCaseDataProviderArtifact.HealthCardDataHelper.TrySetSelectedHealthcard(requiredInformationClasses);
_focusedRelation = relation;
if (!_selectedRelations.Values.Contains(relation))
_hasDirectionConnection = false;
_selectedRelations[cF4sdIdentityEntry.GetFromSearchResult(relation.Type)] = relation;
_ = Task.Run(async () => await UpdateStatusOfSelectedRelations());
var focusedRelations = new cF4sdApiSearchResultRelation[1] { _focusedRelation };
FocusedRelationsChanged?.Invoke(this, new RelationEventArgs()
{
Relations = focusedRelations.ToLookup(r => cF4sdIdentityEntry.GetFromSearchResult(r.Type), r => r)
});
}
catch (Exception ex)
{
LogException(ex);
}
}
private async Task UpdateStatusOfSelectedRelations()
{
const string StatusString = "Status";
try
{
int? agentUserId = null;
int? agentDeviceId = null;
// todo these values should not be recieved from the NamedParameters, instead from the relation it self
if (SupportCaseDataProviderArtifact.NamedParameterEntries.TryGetValue("AgentUserId", out var userNamedParameter))
{
var value = userNamedParameter.GetValue();
if (!string.IsNullOrWhiteSpace(value))
agentUserId = int.Parse(value);
}
// todo these values should not be recieved from the NamedParameters, instead from the relation it self
if (SupportCaseDataProviderArtifact.NamedParameterEntries.TryGetValue("AgentDeviceId", out var deviceNamedParameter))
{
var value = deviceNamedParameter.GetValue();
if (!string.IsNullOrWhiteSpace(value))
agentDeviceId = int.Parse(deviceNamedParameter.GetValue());
}
foreach (var relationEntry in _selectedRelations)
{
if (relationEntry.Value is null)
continue;
string statusValue = "Unknown";
switch (relationEntry.Key)
{
case enumFasdInformationClass.Computer:
if (!agentDeviceId.HasValue)
continue;
bool isDeviceOnline = await cFasdCockpitCommunicationBase.Instance.GetAgentOnlineStatus(agentDeviceId.Value);
statusValue = isDeviceOnline ? "Online" : "Offline";
break;
case enumFasdInformationClass.User:
if (!agentDeviceId.HasValue || !agentUserId.HasValue)
continue;
bool isUserOnline = await cFasdCockpitCommunicationBase.Instance.GetAgentOnlineStatus(agentDeviceId.Value, agentUserId.Value);
statusValue = isUserOnline ? "Online" : "Offline";
break;
case enumFasdInformationClass.Ticket:
if (relationEntry.Value.Infos != null && relationEntry.Value.Infos.TryGetValue("StatusId", out var statusIdValue))
if (Enum.TryParse<enumTicketStatus>(statusIdValue, out var ticketStatus))
statusValue = ticketStatus.ToString();
break;
case enumFasdInformationClass.VirtualSession:
case enumFasdInformationClass.MobileDevice:
default:
continue;
}
if (relationEntry.Value.Infos is null)
relationEntry.Value.Infos = new Dictionary<string, string>();
relationEntry.Value.Infos[StatusString] = statusValue;
}
IEnumerable<cHeadingDataModel> newHeadingData = SupportCaseHeadingController.GetHeadingData(_selectedRelations);
HeadingDataChanged?.Invoke(this, new HeadingDataEventArgs(newHeadingData));
}
catch (Exception ex)
{
LogException(ex);
}
}
public async Task RefreshDataForCurrentlyFocusedRelationAsync()
{
SupportCaseDataProviderArtifact.HealthCardDataHelper.LoadingHelper.LastDataRequest = DateTime.Now;
await _supportCaseProcessor.UpdateLatestCaseDataFor(_focusedRelation);
}
public List<List<cWidgetValueModel>> GetWidgetData()
=> _supportCaseProcessor.GetWidgetData(_focusedRelation);
public cDetailsPageDataHistoryDataModel GetHistoryData()
=> _supportCaseProcessor.GetHistoryData(_focusedRelation);
public List<cContainerCollectionData> GetContainerData()
=> _supportCaseProcessor.GetContainerData(_focusedRelation);
public List<cMenuDataBase> GetMenuBarData()
=> _supportCaseProcessor.GetMenuBarData(_focusedRelation);
/// <summary>
/// Raised when the currently for a support case relevant and shown relations have been updated.
/// </summary>
public event EventHandler<RelationEventArgs> FocusedRelationsChanged;
/// <summary>
/// Raised when newly available relations for a support case were added.
/// </summary>
public event EventHandler<RelationEventArgs> AvailableCaseRelationsAdded;
/// <summary>
/// Raised when the data set of a support case has changed.
/// </summary>
public event EventHandler<SupportCaseDataEventArgs> CaseDataChanged;
public event EventHandler<HeadingDataEventArgs> HeadingDataChanged;
}
}

View File

@@ -0,0 +1,93 @@
using C4IT.FASD.Base;
using C4IT.MultiLanguage;
using FasdDesktopUi.Basics.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using static C4IT.Logging.cLogManager;
namespace FasdDesktopUi.Basics.Services.SupportCase.Controllers
{
internal class SupportCaseHeadingController
{
internal static IEnumerable<cHeadingDataModel> GetHeadingData(Dictionary<enumFasdInformationClass, cF4sdApiSearchResultRelation> relations)
{
try
{
return Enum.GetValues(typeof(enumFasdInformationClass))
.Cast<enumFasdInformationClass>()
.Select(informationClass =>
{
if (relations.TryGetValue(informationClass, out var relation) && relation != null)
return GetHeadingDataFor(relation);
else
return GetEmptyHeadingDataFor(informationClass);
});
}
catch (Exception ex)
{
LogException(ex);
}
return Enumerable.Empty<cHeadingDataModel>();
}
private static cHeadingDataModel GetEmptyHeadingDataFor(enumFasdInformationClass informationClass)
{
string headingText = string.Empty;
switch (informationClass)
{
case enumFasdInformationClass.Computer:
headingText = cMultiLanguageSupport.GetItem("Header.Select.Computer");
break;
case enumFasdInformationClass.Ticket:
headingText = cMultiLanguageSupport.GetItem("Header.Select.Ticket");
break;
case enumFasdInformationClass.VirtualSession:
headingText = cMultiLanguageSupport.GetItem("Header.Select.VirtualSession");
break;
case enumFasdInformationClass.MobileDevice:
headingText = cMultiLanguageSupport.GetItem("Header.Select.MobileDevice");
break;
}
return new cHeadingDataModel() { InformationClass = informationClass, HeadingText = headingText };
}
private static cHeadingDataModel GetHeadingDataFor(cF4sdApiSearchResultRelation relation)
{
const string StatusString = "Status";
bool isOnline = false;
string statusValue = "Unknown";
if (relation?.Infos?.TryGetValue(StatusString, out var statusValueFromDictionary) ?? false)
statusValue = statusValueFromDictionary;
switch (relation.Type)
{
case enumF4sdSearchResultClass.Computer:
case enumF4sdSearchResultClass.User:
isOnline = string.Equals(statusValue, "Online", StringComparison.InvariantCultureIgnoreCase);
break;
case enumF4sdSearchResultClass.Ticket:
isOnline = !string.Equals(statusValue, nameof(enumTicketStatus.Closed));
break;
case enumF4sdSearchResultClass.VirtualSession:
isOnline = string.Equals(statusValue, nameof(enumCitrixSessionStatus.Active));
break;
case enumF4sdSearchResultClass.MobileDevice:
break;
}
return new cHeadingDataModel()
{
HeadingText = string.IsNullOrEmpty(relation.Name) ? relation.DisplayName : relation.Name,
InformationClass = cF4sdIdentityEntry.GetFromSearchResult(relation.Type),
IsOnline = isOnline,
Identities = relation.Identities,
Realtion = relation
};
}
}
}

View File

@@ -1,8 +1,9 @@
using C4IT.FASD.Base; using C4IT.FASD.Base;
using FasdDesktopUi.Basics.Services.RelationService; using FasdDesktopUi.Basics.CustomEvents;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks;
namespace FasdDesktopUi.Basics.Services.SupportCase namespace FasdDesktopUi.Basics.Services.SupportCase
{ {
@@ -12,10 +13,13 @@ namespace FasdDesktopUi.Basics.Services.SupportCase
void Initialize(); void Initialize();
void AddCaseRelations(ILookup<enumFasdInformationClass, cF4sdApiSearchResultRelation> relations); void AddCaseRelations(ILookup<enumFasdInformationClass, cF4sdApiSearchResultRelation> relations);
ILookup<enumFasdInformationClass, cF4sdApiSearchResultRelation> GetCaseRelations(); ILookup<enumFasdInformationClass, cF4sdApiSearchResultRelation> GetCaseRelations();
IEnumerable<cF4SDHealthCardRawData.cHealthCardTable> GetSupportCaseHealthcardData(object identities, object valueAddress); Task LoadSupportCaseDataAsync(cF4sdApiSearchResultRelation relation, IEnumerable<string> tablesToLoad);
void UpdateSupportCaseDataCache(); IEnumerable<object> GetSupportCaseHealthcardData(cF4sdApiSearchResultRelation relation, cValueAddress valueAddress);
void UpdateSupportCaseDataCache(cF4sdApiSearchResultRelation relation, IEnumerable<cF4SDHealthCardRawData.cHealthCardTable> tables);
void InvalidateCaseDataCacheFor(cF4sdApiSearchResultRelation relation);
void InvalidateLatestCaseDataCacheFor(cF4sdApiSearchResultRelation relation, out ICollection<cF4SDHealthCardRawData.cHealthCardTable> invalidatedTables);
event EventHandler<RelationEventArgs> CaseRelationsAdded; event EventHandler<RelationEventArgs> CaseRelationsAdded;
event EventHandler<object> SupportCaseDataCacheHasChanged; event EventHandler<SupportCaseDataEventArgs> SupportCaseDataCacheHasChanged;
} }
} }

View File

@@ -1,10 +1,10 @@
using C4IT.FASD.Base; using C4IT.FASD.Base;
using C4IT.FASD.Cockpit.Communication;
using FasdDesktopUi.Basics.CustomEvents;
using FasdDesktopUi.Basics.Services.RelationService; using FasdDesktopUi.Basics.Services.RelationService;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using static C4IT.Logging.cLogManager; using static C4IT.Logging.cLogManager;
@@ -13,7 +13,8 @@ namespace FasdDesktopUi.Basics.Services.SupportCase
public class SupportCase : ISupportCase public class SupportCase : ISupportCase
{ {
private readonly Dictionary<enumFasdInformationClass, IList<cF4sdApiSearchResultRelation>> _caseRelations = new Dictionary<enumFasdInformationClass, IList<cF4sdApiSearchResultRelation>>(); private readonly Dictionary<enumFasdInformationClass, IList<cF4sdApiSearchResultRelation>> _caseRelations = new Dictionary<enumFasdInformationClass, IList<cF4sdApiSearchResultRelation>>();
//private readonly Lookup<IdentitySet, cF4SDHealthCardRawData.cHealthCardTable> _supportCaseDataCache; private readonly Dictionary<string, Dictionary<cF4sdApiSearchResultRelation, cF4SDHealthCardRawData.cHealthCardTable>> _supportCaseDataCache = new Dictionary<string, Dictionary<cF4sdApiSearchResultRelation, cF4SDHealthCardRawData.cHealthCardTable>>();
private readonly Dictionary<cF4sdApiSearchResultRelation, cF4SDHealthCardRawData> _rawDataCache = new Dictionary<cF4sdApiSearchResultRelation, cF4SDHealthCardRawData>(); // todo remove, currently only used for SupportCaseDataProviderArtifact
internal readonly Guid Id; internal readonly Guid Id;
private readonly IRelationService _relationService; private readonly IRelationService _relationService;
@@ -67,12 +68,12 @@ namespace FasdDesktopUi.Basics.Services.SupportCase
foreach (var relationType in relations) foreach (var relationType in relations)
{ {
if (_caseRelations.TryGetValue(relationType.Key, out var caseRelation)) if (_caseRelations.TryGetValue(relationType.Key, out var caseRelation))
caseRelation = caseRelation.Union(relationType, new SearchResultRelationEqualityComparer()).ToList(); caseRelation = caseRelation.Union(relationType).ToList();
else else
_caseRelations.Add(relationType.Key, relationType.ToList()); _caseRelations.Add(relationType.Key, relationType.ToList());
if (SupportCaseDataProviderArtifact?.CaseRelations?.TryGetValue(relationType.Key, out var caseRelations) ?? false) if (SupportCaseDataProviderArtifact?.CaseRelations?.TryGetValue(relationType.Key, out var caseRelations) ?? false)
caseRelations = caseRelations.Union(relationType, new SearchResultRelationEqualityComparer()).ToList(); caseRelations = caseRelations.Union(relationType).ToList();
else else
SupportCaseDataProviderArtifact?.CaseRelations?.Add(relationType.Key, relationType.ToList()); SupportCaseDataProviderArtifact?.CaseRelations?.Add(relationType.Key, relationType.ToList());
} }
@@ -85,14 +86,207 @@ namespace FasdDesktopUi.Basics.Services.SupportCase
} }
} }
public void UpdateSupportCaseDataCache() public async Task LoadSupportCaseDataAsync(cF4sdApiSearchResultRelation relation, IEnumerable<string> tablesToLoad)
{ {
throw new NotImplementedException(); try
{
cF4SDHealthCardRawData rawData = null;
// todo this is only a temporary fix. Currently the tablesToLoad contain also detail tables
// and tables won't be loaded e.g. the QuickActionHistory
bool isDataComplete = IsRawDataCacheComplete() && IsSupportCaseDataCacheComplete();
if (isDataComplete)
{
await SupportCaseDataProviderArtifact.HealthCardDataHelper.LoadingHelper.SetHealthCardRawData(_rawDataCache[relation], relation.Identities);
return;
} }
public IEnumerable<cF4SDHealthCardRawData.cHealthCardTable> GetSupportCaseHealthcardData(object identities, object valueAddress) var rawDataRequest = new cF4sdHealthCardRawDataRequest()
{ {
throw new NotImplementedException(); Identities = relation.Identities,
Tables = tablesToLoad.ToList(),
MaxAge = cF4SDCockpitXmlConfig.Instance?.HealthCardConfig?.SearchResultAge ?? 14
};
while (!isDataComplete)
{
if (rawData is null)
{
rawData = await cFasdCockpitCommunicationBase.Instance.GetHealthCardData(rawDataRequest);
_rawDataCache[relation] = rawData;
await SupportCaseDataProviderArtifact.HealthCardDataHelper.LoadingHelper.SetHealthCardRawData(rawData, rawDataRequest.Identities);
}
else
{
rawData = await cFasdCockpitCommunicationBase.Instance.GetHealthCardData(rawData.Id);
_rawDataCache[relation] = _rawDataCache[relation].Combine(rawData);
await SupportCaseDataProviderArtifact.HealthCardDataHelper.LoadingHelper.UpdateHealthcardRawData(rawData);
}
UpdateSupportCaseDataCache(relation, rawData?.Tables?.Values);
isDataComplete = rawData?.Tables?
.Where(table => table.Key.StartsWith("Computation_") == false)
.All(table => !table.Value.IsIncomplete && !table.Value.Columns.Values.Any(c => c.IsIncomplete)) ?? false;
}
}
catch (Exception ex)
{
LogException(ex);
}
bool IsRawDataCacheComplete()
{
return tablesToLoad.All(t =>
_rawDataCache.TryGetValue(relation, out var cachedRawData)
&& (cachedRawData?.Tables?.TryGetValue(t, out var cachedTable) ?? false)
&& cachedTable != null && !cachedTable.IsIncomplete && !cachedTable.Columns.Values.Any(c => c.IsIncomplete)
);
}
bool IsSupportCaseDataCacheComplete()
{
return tablesToLoad.Any(t =>
_supportCaseDataCache.TryGetValue(t, out var cachedTables)
&& cachedTables.TryGetValue(relation, out var table)
&& !table.IsIncomplete && !table.Columns.Values.Any(c => c.IsIncomplete)
);
}
}
public void UpdateSupportCaseDataCache(cF4sdApiSearchResultRelation relation, IEnumerable<cF4SDHealthCardRawData.cHealthCardTable> tables)
{
try
{
if (tables is null)
return;
List<cF4SDHealthCardRawData.cHealthCardTable> dataTables = tables?.ToList();
foreach (var table in dataTables)
{
if (string.IsNullOrEmpty(table.Name))
continue;
if (!_supportCaseDataCache.ContainsKey(table.Name))
_supportCaseDataCache.Add(table.Name, new Dictionary<cF4sdApiSearchResultRelation, cF4SDHealthCardRawData.cHealthCardTable>());
if (!_supportCaseDataCache[table.Name].ContainsKey(relation))
_supportCaseDataCache[table.Name][relation] = table;
else if (_supportCaseDataCache[table.Name][relation].IsIncomplete)
MergeTable(_supportCaseDataCache[table.Name][relation], table);
}
SupportCaseDataCacheHasChanged?.Invoke(this, new SupportCaseDataEventArgs() { Relation = relation, DataTables = dataTables });
}
catch (Exception ex)
{
LogException(ex);
}
void MergeTable(cF4SDHealthCardRawData.cHealthCardTable existingTable, cF4SDHealthCardRawData.cHealthCardTable newTable)
{
try
{
existingTable.IsIncomplete = newTable.IsIncomplete;
foreach (var newColumn in newTable.Columns)
{
existingTable.Columns[newColumn.Key] = newColumn.Value;
}
}
catch (Exception ex)
{
LogException(ex);
}
}
}
public void InvalidateCaseDataCacheFor(cF4sdApiSearchResultRelation relation)
{
try
{
_rawDataCache.Remove(relation);
foreach (var tableCache in _supportCaseDataCache.Values)
{
tableCache.Remove(relation);
}
// todo: invoke SupportCaseDataChache with empty tables
// SupportCaseDataCacheHasChanged?.Invoke(this, new SupportCaseDataEventArgs() { Relation = relation });
}
catch (Exception ex)
{
LogException(ex);
}
}
public void InvalidateLatestCaseDataCacheFor(cF4sdApiSearchResultRelation relation, out ICollection<cF4SDHealthCardRawData.cHealthCardTable> invalidatedTables)
{
invalidatedTables = new HashSet<cF4SDHealthCardRawData.cHealthCardTable>();
try
{
foreach (var tableCache in _supportCaseDataCache.Values)
{
if (!tableCache.TryGetValue(relation, out cF4SDHealthCardRawData.cHealthCardTable table))
continue;
table.IsIncomplete = true;
foreach (var column in table.Columns.Values)
{
if (column.Values != null && column.Values.Count > 0)
column.Values[0] = null;
column.IsIncomplete = true;
}
invalidatedTables.Add(table);
}
if (!_rawDataCache.TryGetValue(relation, out var cachedRawData) || cachedRawData?.Tables is null)
return;
foreach (var table in cachedRawData.Tables.Values)
{
table.IsIncomplete = true;
foreach (var column in table.Columns.Values)
{
if (column.Values != null && column.Values.Count > 0)
column.Values[0] = null;
column.IsIncomplete = true;
}
}
}
catch (Exception ex)
{
LogException(ex);
}
}
public IEnumerable<object> GetSupportCaseHealthcardData(cF4sdApiSearchResultRelation relation, cValueAddress valueAddress)
{
try
{
if (!_supportCaseDataCache.TryGetValue(valueAddress.ValueTable, out var tables))
return null;
if (!tables.TryGetValue(relation, out var table))
return null;
if (!table.Columns.TryGetValue(valueAddress.ValueColumn, out var column))
return null;
return column.Values;
}
catch (Exception ex)
{
LogException(ex);
}
return null;
} }
private void HandleRelationsFound(object sender, StagedSearchResultRelationsEventArgs e) private void HandleRelationsFound(object sender, StagedSearchResultRelationsEventArgs e)
@@ -107,19 +301,6 @@ namespace FasdDesktopUi.Basics.Services.SupportCase
=> AddCaseRelations(relations?.ToLookup(r => cF4sdIdentityEntry.GetFromSearchResult(r.Type), r => r)); => AddCaseRelations(relations?.ToLookup(r => cF4sdIdentityEntry.GetFromSearchResult(r.Type), r => r));
public event EventHandler<RelationEventArgs> CaseRelationsAdded; public event EventHandler<RelationEventArgs> CaseRelationsAdded;
public event EventHandler<object> SupportCaseDataCacheHasChanged; // Lookup for IdentitySet and tables which has been updated public event EventHandler<SupportCaseDataEventArgs> SupportCaseDataCacheHasChanged;
private class SearchResultRelationEqualityComparer : IEqualityComparer<cF4sdApiSearchResultRelation>
{
public bool Equals(cF4sdApiSearchResultRelation x, cF4sdApiSearchResultRelation y)
{
return x.isEqual(y);
}
public int GetHashCode(cF4sdApiSearchResultRelation obj)
{
return obj.GetHashCode();
}
}
} }
} }

View File

@@ -23,9 +23,6 @@ namespace FasdDesktopUi.Basics.Services.SupportCase
if (primaryIdentity is null) if (primaryIdentity is null)
throw new InvalidEnumArgumentException($"{nameof(primaryIdentity)} must not be null."); throw new InvalidEnumArgumentException($"{nameof(primaryIdentity)} must not be null.");
if (primaryIdentity.Class != enumFasdInformationClass.User)
throw new InvalidEnumArgumentException($"{nameof(primaryIdentity)} must be of class {nameof(enumFasdInformationClass.User)}.");
if (_supportCases.TryGetValue(primaryIdentity.Id, out var supportCase)) if (_supportCases.TryGetValue(primaryIdentity.Id, out var supportCase))
{ {
supportCase.Initialize(); supportCase.Initialize();

View File

@@ -0,0 +1,278 @@
using C4IT.FASD.Base;
using C4IT.FASD.Cockpit.Communication;
using C4IT.Logging;
using FasdDesktopUi.Basics.CustomEvents;
using FasdDesktopUi.Basics.Models;
using FasdDesktopUi.Pages.DetailsPage.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using static C4IT.Logging.cLogManager;
namespace FasdDesktopUi.Basics.Services.SupportCase
{
/// <summary>
/// Used for processing raw data of a <see cref="ISupportCase"/> for the UI in a certain way.
/// </summary>
internal class SupportCaseProcessor
{
private ISupportCase _supportCase;
public cSupportCaseDataProvider SupportCaseDataProviderArtifact { get => _supportCase?.SupportCaseDataProviderArtifact; }
private readonly Dictionary<cF4sdApiSearchResultRelation, cDetailsPageData> _detailsPageDataCache = new Dictionary<cF4sdApiSearchResultRelation, cDetailsPageData>();
private readonly Dictionary<cF4sdApiSearchResultRelation, Dictionary<string, object>> _namedParameterCache = new Dictionary<cF4sdApiSearchResultRelation, Dictionary<string, object>>();
internal void SetSupportCase(ISupportCase supportCase)
{
if (_supportCase != null)
{
_supportCase.CaseRelationsAdded -= HandleSupportCaseRelationsAdded;
_supportCase.SupportCaseDataCacheHasChanged -= HandleSupportCaseDataCacheHasChanged;
}
_supportCase = supportCase;
_supportCase.CaseRelationsAdded += HandleSupportCaseRelationsAdded;
_supportCase.SupportCaseDataCacheHasChanged += HandleSupportCaseDataCacheHasChanged;
}
private void HandleSupportCaseRelationsAdded(object sender, RelationEventArgs e)
=> AvailableCaseRelationsAdded?.Invoke(this, e);
private async void HandleSupportCaseDataCacheHasChanged(object sender, SupportCaseDataEventArgs e)
{
bool isArtifactShowingCorrectHealthCard
= SupportCaseDataProviderArtifact.HealthCardDataHelper.SelectedHealthCard == GetHealthcardFor(e.Relation);
if (!isArtifactShowingCorrectHealthCard)
{
// todo this can probably be removed, as soon as the last dependency of the SupportCaseDataProviderArtifact is gone.
// till then the detailspageData gets overriden with the detailspageData of the new relation.
// However, the removal shouldn't be much of a problem, due to the fact the Artifact also stores the raw data
_detailsPageDataCache.Remove(e.Relation);
return;
}
if (_detailsPageDataCache.TryGetValue(e.Relation, out var cachedData))
{
cDetailsPageData detailData = _supportCase.SupportCaseDataProviderArtifact.HealthCardDataHelper.DetailPage.GetDataWithoutHeading();
cachedData.WidgetData = detailData.WidgetData;
cachedData.DataHistoryList = detailData.DataHistoryList;
cachedData.MenuBarData = detailData.MenuBarData;
cachedData.DataContainerCollectionList = detailData.DataContainerCollectionList;
}
else
{
_detailsPageDataCache[e.Relation] = await _supportCase.SupportCaseDataProviderArtifact.HealthCardDataHelper.DetailPage.GetDataAsync();
}
UpdateNamedParameters(e.Relation, e.DataTables);
CaseDataChanged?.Invoke(this, e);
}
private void UpdateNamedParameters(cF4sdApiSearchResultRelation relation, IEnumerable<cF4SDHealthCardRawData.cHealthCardTable> dataTables)
{
try
{
if (!_namedParameterCache.ContainsKey(relation))
_namedParameterCache.Add(relation, new Dictionary<string, object>());
var healthcard = GetHealthcardFor(relation);
foreach (var namedParameter in cHealthCardPrerequisites.GetNamedParameters(healthcard).Values)
{
var table = dataTables.FirstOrDefault(t => t.Name == namedParameter.DatabaseInfo.ValueTable);
if (table is null)
continue;
if (!table.Columns.TryGetValue(namedParameter.DatabaseInfo.ValueColumn, out var column))
continue;
string value = cUtility.RawValueFormatter.GetDisplayValue(column.Values.FirstOrDefault(), namedParameter.Display);
_namedParameterCache[relation][namedParameter.ParameterName] = value;
}
}
catch (Exception ex)
{
LogException(ex);
}
}
public async Task LoadSupportCaseDataAsync(cF4sdApiSearchResultRelation relation, IEnumerable<string> tablesToLoad)
{
_ = Task.Run(async () => await _supportCase.LoadSupportCaseDataAsync(relation, tablesToLoad.Where(t => !t.Contains("-details-"))));
if (!_detailsPageDataCache.TryGetValue(relation, out var detailsData))
{
detailsData = await _supportCase.SupportCaseDataProviderArtifact.HealthCardDataHelper.DetailPage.GetDataAsync();
_detailsPageDataCache.Add(relation, detailsData);
}
else
{
_supportCase.SupportCaseDataProviderArtifact.HealthCardDataHelper.UpdateNamedParameterEntries();
}
CaseDataChanged?.Invoke(this, new SupportCaseDataEventArgs());
}
public async Task UpdateLatestCaseDataFor(cF4sdApiSearchResultRelation relation)
{
try
{
int? agentUserId = relation.Identities.FirstOrDefault(i => i.Class == enumFasdInformationClass.User)?.agentId;
int? agentDeviceId = relation.Identities.FirstOrDefault(i => i.Class == enumFasdInformationClass.Computer)?.agentId;
await ActualizeDataAsync(agentUserId, agentDeviceId);
_supportCase.InvalidateLatestCaseDataCacheFor(relation, out var invalidatedTables);
_detailsPageDataCache.Remove(relation);
await _supportCase.LoadSupportCaseDataAsync(relation, invalidatedTables.Where(t => !t.Name.StartsWith("Computation_")).Select(t => t.Name));
}
catch (Exception ex)
{
LogException(ex);
}
}
private async Task<enumActualizeStatus> ActualizeDataAsync(int? agentUserId, int? agentDeviceId)
{
var status = enumActualizeStatus.unknown;
try
{
TimeSpan refreshDelay = TimeSpan.FromMilliseconds(500);
const int maxPollCount = 20;
if (!agentDeviceId.HasValue)
{
LogEntry("Coudldn't acutalize data. There was no valid AgentDeviceId found.", LogLevels.Error);
return status;
}
var taskId = await cFasdCockpitCommunicationBase.Instance.ActualizeAgentData(agentDeviceId.Value, agentUserId);
if (taskId == Guid.Empty)
return enumActualizeStatus.failed;
enumFasdInformationClass informationClass = agentUserId != null ? enumFasdInformationClass.User : enumFasdInformationClass.Computer;
int pollCount = 0;
do
{
status = await cFasdCockpitCommunicationBase.Instance.GetActualizeAgentDataStatus(taskId, informationClass);
if (status == enumActualizeStatus.unknown)
{
pollCount++;
if (pollCount >= maxPollCount)
return status;
await Task.Delay(refreshDelay);
}
} while (status == enumActualizeStatus.unknown);
}
catch (Exception E)
{
LogException(E);
}
return status;
}
internal ILookup<enumFasdInformationClass, cF4sdApiSearchResultRelation> GetCaseRelations()
=> _supportCase.GetCaseRelations();
internal cHealthCard GetHealthcardFor(cF4sdApiSearchResultRelation relation)
{
var availableHealthCards = cF4SDCockpitXmlConfig.Instance?.HealthCardConfig?.HealthCards?.Values;
if (availableHealthCards is null || availableHealthCards.Count == 0)
return null;
return availableHealthCards
.FirstOrDefault(hc =>
hc.InformationClasses.All(i => i == cF4sdIdentityEntry.GetFromSearchResult(relation.Type))
&& HasCockpitUserRequiredRoles(hc.RequiredRoles));
}
private static bool HasCockpitUserRequiredRoles(List<string> requiredRoles)
{
try
{
if (requiredRoles is null || requiredRoles.Count == 0)
return true;
List<string> roles = null;
lock (cFasdCockpitCommunicationBase.CockpitUserInfoLock)
{
roles = cFasdCockpitCommunicationBase.CockpitUserInfo?.Roles;
}
if (roles is null || roles.Count == 0)
return false;
foreach (var requiredRole in requiredRoles)
{
if (roles.Contains(requiredRole, StringComparer.InvariantCultureIgnoreCase))
return true;
}
}
catch (Exception E)
{
LogException(E);
}
return false;
}
public List<List<cWidgetValueModel>> GetWidgetData(cF4sdApiSearchResultRelation relation)
{
List<List<cWidgetValueModel>> widgetData = null;
if (_detailsPageDataCache.TryGetValue(relation, out var detailsData))
widgetData = detailsData?.WidgetData;
return widgetData ?? new List<List<cWidgetValueModel>>();
}
public cDetailsPageDataHistoryDataModel GetHistoryData(cF4sdApiSearchResultRelation relation)
{
cDetailsPageDataHistoryDataModel historyData = null;
if (_detailsPageDataCache.TryGetValue(relation, out var detailsData))
historyData = detailsData?.DataHistoryList;
return historyData ?? new cDetailsPageDataHistoryDataModel();
}
public List<cContainerCollectionData> GetContainerData(cF4sdApiSearchResultRelation relation)
{
List<cContainerCollectionData> containerData = null;
if (_detailsPageDataCache.TryGetValue(relation, out var detailsData))
containerData = detailsData?.DataContainerCollectionList;
return containerData ?? new List<cContainerCollectionData>();
}
public List<cMenuDataBase> GetMenuBarData(cF4sdApiSearchResultRelation relation)
{
List<cMenuDataBase> menuData = null;
if (_detailsPageDataCache.TryGetValue(relation, out var detailsData))
menuData = detailsData?.MenuBarData;
return menuData ?? new List<cMenuDataBase>();
}
/// <summary>
/// Raised when newly available relations for a support case were added.
/// </summary>
public event EventHandler<RelationEventArgs> AvailableCaseRelationsAdded;
/// <summary>
/// Raised when the data set of a support case has changed.
/// </summary>
public event EventHandler<SupportCaseDataEventArgs> CaseDataChanged;
}
}

View File

@@ -0,0 +1,18 @@
using System;
using System.Collections.Generic;
namespace FasdDesktopUi.Basics.Services.SupportCase
{
internal class SupportCaseProcessorFactory
{
private readonly static Dictionary<Guid, SupportCaseProcessor> _supportCaseProccesors = new Dictionary<Guid, SupportCaseProcessor>();
internal static SupportCaseProcessor Get(Guid id)
{
if (!_supportCaseProccesors.ContainsKey(id))
_supportCaseProccesors.Add(id, new SupportCaseProcessor());
return _supportCaseProccesors[id];
}
}
}

View File

@@ -7,6 +7,7 @@ using System.Windows.Threading;
using C4IT.FASD.Base; using C4IT.FASD.Base;
using C4IT.FASD.Cockpit.Communication; using C4IT.FASD.Cockpit.Communication;
using FasdDesktopUi;
using FasdDesktopUi.Basics.Models; using FasdDesktopUi.Basics.Models;
using FasdDesktopUi.Basics.Services.Models; using FasdDesktopUi.Basics.Services.Models;
#if isDemo #if isDemo
@@ -19,7 +20,6 @@ namespace FasdDesktopUi.Basics.Services
{ {
public sealed class TicketOverviewUpdateService public sealed class TicketOverviewUpdateService
{ {
private static readonly TimeSpan RefreshInterval = TimeSpan.FromMinutes(5);
private static readonly string[] OverviewKeys = new[] private static readonly string[] OverviewKeys = new[]
{ {
"TicketsNew", "TicketsNew",
@@ -33,15 +33,20 @@ namespace FasdDesktopUi.Basics.Services
"UnassignedTickets", "UnassignedTickets",
"UnassignedTicketsCritical" "UnassignedTicketsCritical"
}; };
private const string DemoTicketDetailsKey = "Demo.HasTicketDetails";
private readonly Dispatcher _dispatcher; private readonly Dispatcher _dispatcher;
private readonly Dictionary<string, TileCounts> _currentCounts = new Dictionary<string, TileCounts>(StringComparer.OrdinalIgnoreCase); private readonly Dictionary<string, TileCounts> _currentCounts = new Dictionary<string, TileCounts>(StringComparer.OrdinalIgnoreCase);
private readonly Dictionary<(string Key, bool UseRoleScope), List<cF4sdApiSearchResultRelation>> _demoRelations = new Dictionary<(string, bool), List<cF4sdApiSearchResultRelation>>(); private readonly Dictionary<(string Key, bool UseRoleScope), List<cF4sdApiSearchResultRelation>> _demoRelations = new Dictionary<(string, bool), List<cF4sdApiSearchResultRelation>>();
private DispatcherTimer _timer; private readonly HashSet<TileScope> _pendingScopes = new HashSet<TileScope>();
private bool _isFetching; private readonly HashSet<TileScope> _initializedScopes = new HashSet<TileScope>();
private bool _fetchRetryPending; private readonly object _fetchLock = new object();
private readonly HashSet<TileScope> _retryScopes = new HashSet<TileScope>();
private DispatcherTimer _personalTimer;
private DispatcherTimer _roleTimer;
private Task _fetchWorker;
private bool _retryScheduled;
private bool _isDemo; private bool _isDemo;
private bool _initialized; private bool _initialized;
private bool _isEnabled;
private readonly Random _random = new Random(); private readonly Random _random = new Random();
#if isDemo #if isDemo
private readonly List<DemoTicketRecord> _persistedDemoTickets = new List<DemoTicketRecord>(); private readonly List<DemoTicketRecord> _persistedDemoTickets = new List<DemoTicketRecord>();
@@ -69,18 +74,69 @@ namespace FasdDesktopUi.Basics.Services
static TicketOverviewUpdateService() static TicketOverviewUpdateService()
{ {
#if isDemo
Instance = new TicketOverviewUpdateService(); Instance = new TicketOverviewUpdateService();
#endif
} }
public static TicketOverviewUpdateService Instance { get; } = null; public static TicketOverviewUpdateService Instance { get; }
public event EventHandler<TicketOverviewCountsChangedEventArgs> OverviewCountsChanged; public event EventHandler<TicketOverviewCountsChangedEventArgs> OverviewCountsChanged;
public IReadOnlyDictionary<string, TileCounts> CurrentCounts => _currentCounts; public IReadOnlyDictionary<string, TileCounts> CurrentCounts => _currentCounts;
public bool IsScopeInitialized(TileScope scope)
{
lock (_fetchLock)
{
return _initializedScopes.Contains(scope);
}
}
public bool AreAllScopesInitialized
{
get
{
lock (_fetchLock)
{
return _initializedScopes.Contains(TileScope.Personal)
&& _initializedScopes.Contains(TileScope.Role);
}
}
}
public void Start() public void Start()
{
UpdateAvailability(true);
}
public void Stop()
{
UpdateAvailability(false);
}
public void UpdateAvailability(bool isEnabled)
{
if (isEnabled)
{
if (!_isEnabled)
{
_isEnabled = true;
StartInternal();
}
else
{
RefreshTimerIntervals();
}
}
else
{
if (_isEnabled)
StopInternal();
_isEnabled = false;
}
}
private void StartInternal()
{ {
if (_initialized) if (_initialized)
return; return;
@@ -93,110 +149,247 @@ namespace FasdDesktopUi.Basics.Services
_isDemo = cFasdCockpitCommunicationBase.Instance?.IsDemo() == true; _isDemo = cFasdCockpitCommunicationBase.Instance?.IsDemo() == true;
#endif #endif
if (!_isDemo) InitializeTimers();
{
_timer = new DispatcherTimer(RefreshInterval, DispatcherPriority.Background, async (s, e) => await FetchAsync().ConfigureAwait(false), _dispatcher);
_timer.Start();
_ = FetchAsync(); _ = FetchAsync();
} }
private void StopInternal()
{
if (!_initialized)
return;
_initialized = false;
lock (_fetchLock)
{
_pendingScopes.Clear();
_initializedScopes.Clear();
}
lock (_retryScopes)
{
_retryScheduled = false;
_retryScopes.Clear();
}
_dispatcher.InvokeAsync(() =>
{
_personalTimer?.Stop();
_roleTimer?.Stop();
_personalTimer = null;
_roleTimer = null;
foreach (var key in OverviewKeys)
{
_currentCounts[key] = TileCounts.Empty;
}
});
}
private void InitializeTimers()
{
_personalTimer = CreateScopeTimer(TileScope.Personal);
_roleTimer = CreateScopeTimer(TileScope.Role);
_personalTimer?.Start();
_roleTimer?.Start();
}
private DispatcherTimer CreateScopeTimer(TileScope scope)
{
var interval = GetPollingInterval(scope);
var timer = new DispatcherTimer(interval, DispatcherPriority.Background, async (s, e) => await FetchAsync(scope).ConfigureAwait(false), _dispatcher)
{
IsEnabled = false
};
return timer;
}
private TimeSpan GetPollingInterval(TileScope scope)
{
var ticketConfig = cFasdCockpitConfig.Instance?.Global?.TicketConfiguration;
int minutes = scope == TileScope.Role
? cF4sdTicketConfig.DefaultOverviewPollingRole
: cF4sdTicketConfig.DefaultOverviewPollingPersonal;
if (ticketConfig != null)
{
minutes = scope == TileScope.Role
? ticketConfig.OverviewPollingRole
: ticketConfig.OverviewPollingPersonal;
}
if (minutes < 1)
minutes = 1;
return TimeSpan.FromMinutes(minutes);
}
public Task FetchAsync()
{
if (!_isEnabled)
return Task.CompletedTask;
return QueueFetchAsync(new[] { TileScope.Personal, TileScope.Role });
}
public Task FetchAsync(TileScope scope)
{
if (!_isEnabled)
return Task.CompletedTask;
return QueueFetchAsync(new[] { scope });
}
private Task QueueFetchAsync(IEnumerable<TileScope> scopes)
{
if (!_isEnabled)
return Task.CompletedTask;
if (scopes == null)
return Task.CompletedTask;
lock (_fetchLock)
{
foreach (var scope in scopes)
{
_pendingScopes.Add(scope);
}
if (_fetchWorker == null || _fetchWorker.IsCompleted)
{
_fetchWorker = Task.Run(ProcessFetchQueueAsync);
}
return _fetchWorker;
}
}
private async Task ProcessFetchQueueAsync()
{
while (true)
{
TileScope scope;
lock (_fetchLock)
{
if (_pendingScopes.Count == 0)
{
_fetchWorker = null;
return;
}
scope = _pendingScopes.First();
_pendingScopes.Remove(scope);
}
await FetchScopeAsync(scope).ConfigureAwait(false);
}
}
private async Task FetchScopeAsync(TileScope scope)
{
if (!_isEnabled)
return;
var communication = cFasdCockpitCommunicationBase.Instance;
if (communication == null)
{
ScheduleFetchRetry(scope);
return;
}
try
{
_isDemo = communication.IsDemo();
var rawCounts = await communication.GetTicketOverviewCounts(OverviewKeys, scope == TileScope.Role).ConfigureAwait(false);
var counts = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);
if (rawCounts != null)
{
foreach (var kvp in rawCounts)
{
if (string.IsNullOrWhiteSpace(kvp.Key))
continue;
counts[kvp.Key] = Math.Max(0, kvp.Value);
}
}
if (!_isEnabled)
return;
await _dispatcher.InvokeAsync(() => ProcessScopeCounts(scope, counts));
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine($"[TicketOverview] Fetch {scope} failed: {ex}");
ScheduleFetchRetry(scope);
}
}
private void RefreshTimerIntervals()
{
_dispatcher.InvokeAsync(() =>
{
if (_personalTimer != null)
_personalTimer.Interval = GetPollingInterval(TileScope.Personal);
if (_roleTimer != null)
_roleTimer.Interval = GetPollingInterval(TileScope.Role);
});
}
private void ProcessScopeCounts(TileScope scope, IDictionary<string, int> newCounts)
{
if (newCounts == null)
return;
var hasInitializedScope = _initializedScopes.Contains(scope);
var changes = new List<TileCountChange>();
foreach (var key in OverviewKeys)
{
var previous = _currentCounts.TryGetValue(key, out var counts) ? counts : TileCounts.Empty;
var incoming = newCounts.TryGetValue(key, out var value) ? value : 0;
TileCounts updated;
int oldValue;
if (scope == TileScope.Role)
{
updated = new TileCounts(previous.Personal, incoming);
oldValue = previous.Role;
}
else else
{ {
_ = FetchAsync(); updated = new TileCounts(incoming, previous.Role);
oldValue = previous.Personal;
}
_currentCounts[key] = updated;
if (hasInitializedScope && oldValue != incoming)
{
changes.Add(new TileCountChange(key, scope, oldValue, incoming));
} }
} }
public async Task FetchAsync() if (!hasInitializedScope)
{ {
if (_isFetching) _initializedScopes.Add(scope);
return; var initArgs = new TicketOverviewCountsChangedEventArgs(
Array.Empty<TileCountChange>(),
var communication = cFasdCockpitCommunicationBase.Instance; new Dictionary<string, TileCounts>(_currentCounts, StringComparer.OrdinalIgnoreCase),
if (communication == null) scope);
{ OverviewCountsChanged?.Invoke(this, initArgs);
ScheduleFetchRetry();
return; return;
} }
_isFetching = true;
try
{
_isDemo = communication?.IsDemo() == true;
if (_isDemo && _timer != null)
{
_timer.Stop();
_timer = null;
}
var counts = await Task.Run(() => RetrieveCountsAsync()).ConfigureAwait(false);
if (counts != null)
{
await _dispatcher.InvokeAsync(() => ProcessCounts(counts));
}
}
finally
{
_isFetching = false;
}
}
private Dictionary<string, TileCounts> RetrieveCountsAsync()
{
var communication = cFasdCockpitCommunicationBase.Instance;
if (communication == null)
return null;
var result = new Dictionary<string, TileCounts>(StringComparer.OrdinalIgnoreCase);
foreach (var key in OverviewKeys)
{
var personalTask = communication.GetTicketOverviewRelations(key, useRoleScope: false, count: 0);
var roleTask = communication.GetTicketOverviewRelations(key, useRoleScope: true, count: 0);
Task.WaitAll(personalTask, roleTask);
int personalCount = personalTask.Result?.Count ?? 0;
int roleCount = roleTask.Result?.Count ?? 0;
if (_isDemo)
{
personalCount += GetDemoRelationCount(key, useRoleScope: false);
roleCount += GetDemoRelationCount(key, useRoleScope: true);
}
result[key] = new TileCounts(personalCount, roleCount);
}
return result;
}
private void ProcessCounts(Dictionary<string, TileCounts> newCounts)
{
var changes = new List<TileCountChange>();
bool hasPrevious = _currentCounts.Values.Any(tc => tc.Personal > 0 || tc.Role > 0);
foreach (var key in OverviewKeys)
{
var previous = _currentCounts[key];
var current = newCounts.TryGetValue(key, out var value) ? value : TileCounts.Empty;
if (previous.Personal != current.Personal)
{
changes.Add(new TileCountChange(key, TileScope.Personal, previous.Personal, current.Personal));
}
if (previous.Role != current.Role)
{
changes.Add(new TileCountChange(key, TileScope.Role, previous.Role, current.Role));
}
_currentCounts[key] = current;
}
if (!hasPrevious)
return;
if (changes.Count == 0) if (changes.Count == 0)
return; return;
var args = new TicketOverviewCountsChangedEventArgs(changes, new Dictionary<string, TileCounts>(_currentCounts)); var args = new TicketOverviewCountsChangedEventArgs(changes, new Dictionary<string, TileCounts>(_currentCounts, StringComparer.OrdinalIgnoreCase));
OverviewCountsChanged?.Invoke(this, args); OverviewCountsChanged?.Invoke(this, args);
} }
@@ -347,6 +540,7 @@ namespace FasdDesktopUi.Basics.Services
private cF4sdApiSearchResultRelation CreateRelationFromRecord(DemoTicketRecord record) private cF4sdApiSearchResultRelation CreateRelationFromRecord(DemoTicketRecord record)
{ {
var activityType = ResolveDemoActivityType(record?.ActivityType);
var relation = new cF4sdApiSearchResultRelation var relation = new cF4sdApiSearchResultRelation
{ {
Type = enumF4sdSearchResultClass.Ticket, Type = enumF4sdSearchResultClass.Ticket,
@@ -361,7 +555,7 @@ namespace FasdDesktopUi.Basics.Services
["UserDisplayName"] = record.UserDisplayName ?? string.Empty, ["UserDisplayName"] = record.UserDisplayName ?? string.Empty,
["UserAccount"] = record.UserAccount ?? string.Empty, ["UserAccount"] = record.UserAccount ?? string.Empty,
["UserDomain"] = record.UserDomain ?? string.Empty, ["UserDomain"] = record.UserDomain ?? string.Empty,
[DemoTicketDetailsKey] = bool.TrueString ["ActivityType"] = activityType
}, },
Identities = new cF4sdIdentityList Identities = new cF4sdIdentityList
{ {
@@ -373,6 +567,13 @@ namespace FasdDesktopUi.Basics.Services
return relation; return relation;
} }
private static string ResolveDemoActivityType(string configuredActivityType)
{
return string.IsNullOrWhiteSpace(configuredActivityType)
? null
: configuredActivityType.Trim();
}
private DemoTicketDetail CloneDetail(DemoTicketDetail source) private DemoTicketDetail CloneDetail(DemoTicketDetail source)
{ {
if (source == null) if (source == null)
@@ -383,7 +584,6 @@ namespace FasdDesktopUi.Basics.Services
AffectedUser = source.AffectedUser, AffectedUser = source.AffectedUser,
Asset = source.Asset, Asset = source.Asset,
Category = source.Category, Category = source.Category,
Classification = source.Classification,
Description = source.Description, Description = source.Description,
DescriptionHtml = source.DescriptionHtml, DescriptionHtml = source.DescriptionHtml,
Priority = source.Priority, Priority = source.Priority,
@@ -548,6 +748,7 @@ namespace FasdDesktopUi.Basics.Services
TicketId = relationId, TicketId = relationId,
TileKey = string.IsNullOrWhiteSpace(template.TileKey) ? "TicketsNew" : template.TileKey, TileKey = string.IsNullOrWhiteSpace(template.TileKey) ? "TicketsNew" : template.TileKey,
UseRoleScope = template.UseRoleScope, UseRoleScope = template.UseRoleScope,
ActivityType = ResolveDemoActivityType(template.ActivityType),
DisplayName = displayName, DisplayName = displayName,
Summary = summary, Summary = summary,
StatusId = string.IsNullOrWhiteSpace(template.StatusId) ? "New" : template.StatusId, StatusId = string.IsNullOrWhiteSpace(template.StatusId) ? "New" : template.StatusId,
@@ -577,22 +778,41 @@ namespace FasdDesktopUi.Basics.Services
return 0; return 0;
} }
private void ScheduleFetchRetry() private void ScheduleFetchRetry(TileScope scope)
{ {
if (_fetchRetryPending) if (!_isEnabled)
return; return;
_fetchRetryPending = true; lock (_retryScopes)
{
_retryScopes.Add(scope);
if (_retryScheduled)
return;
_retryScheduled = true;
}
_ = _dispatcher.InvokeAsync(async () => _ = _dispatcher.InvokeAsync(async () =>
{ {
try try
{ {
await Task.Delay(250).ConfigureAwait(false); await Task.Delay(TimeSpan.FromSeconds(5)).ConfigureAwait(false);
await FetchAsync().ConfigureAwait(false); TileScope[] scopes;
} lock (_retryScopes)
finally
{ {
_fetchRetryPending = false; scopes = _retryScopes.ToArray();
_retryScopes.Clear();
_retryScheduled = false;
}
foreach (var pendingScope in scopes)
{
await FetchAsync(pendingScope).ConfigureAwait(false);
}
}
catch (Exception ex)
{
System.Diagnostics.Debug.WriteLine($"[TicketOverview] Retry scheduling failed: {ex}");
} }
}, DispatcherPriority.Background); }, DispatcherPriority.Background);
} }

View File

@@ -7,6 +7,7 @@ using System.Windows.Documents;
using System.Linq; using System.Linq;
using System.Windows.Input; using System.Windows.Input;
using System.Diagnostics; using System.Diagnostics;
using System.Windows.Threading;
using C4IT.FASD.Base; using C4IT.FASD.Base;
using C4IT.Logging; using C4IT.Logging;
@@ -26,6 +27,8 @@ using Newtonsoft.Json;
using FasdDesktopUi.Basics.Services.ProtocollService; using FasdDesktopUi.Basics.Services.ProtocollService;
using FasdDesktopUi.Basics.Services.SupportCase; using FasdDesktopUi.Basics.Services.SupportCase;
using FasdDesktopUi.Basics.Services.RelationService; using FasdDesktopUi.Basics.Services.RelationService;
using FasdDesktopUi.Basics.Services.SupportCase.Controllers;
using C4IT.F4SD.SupportCaseProtocoll.Models;
namespace FasdDesktopUi.Basics namespace FasdDesktopUi.Basics
@@ -100,7 +103,7 @@ namespace FasdDesktopUi.Basics
QuickActionProtocollHelper = new cQuickActionProtocollHelper(this); QuickActionProtocollHelper = new cQuickActionProtocollHelper(this);
} }
public static async Task<cSupportCaseDataProvider> GetDataProviderForAsync(List<cF4sdApiSearchResultRelation> storedRelations, cF4sdApiSearchResultRelation selectedRelation, IRelationService relationService) public static async Task<cSupportCaseDataProvider> GetDataProviderForAsync(cF4sdApiSearchResultRelation selectedRelation, IRelationService relationService)
{ {
try try
{ {
@@ -111,6 +114,8 @@ namespace FasdDesktopUi.Basics
return null; return null;
} }
await EnsureUserIdentityForTicketAsync(selectedRelation);
// get the identities of the selected relation // get the identities of the selected relation
var Identities = selectedRelation.Identities.Clone(); var Identities = selectedRelation.Identities.Clone();
@@ -153,37 +158,62 @@ namespace FasdDesktopUi.Basics
DataProviders.Add(MainIdentity.Id, _result); DataProviders.Add(MainIdentity.Id, _result);
} }
await EnsureSupportCasePagesAsync();
_result.NamedParameterEntries = new cNamedParameterList(_result); _result.NamedParameterEntries = new cNamedParameterList(_result);
_result.StartCase(MainIdentity.Id); _result.StartCase(MainIdentity.Id);
var supportCase = SupportCaseFactory.Get(MainIdentity, relationService, _result); var supportCase = SupportCaseFactory.Get(MainIdentity, relationService, _result);
cSupportCaseDataProvider.detailsPage.SetSupportCase(supportCase); var supportCaseProcessor = SupportCaseProcessorFactory.Get(MainIdentity.Id);
cSupportCaseDataProvider.slimPage.SetSupportCase(supportCase); var supportCaseController = new SupportCaseController();
supportCaseProcessor.SetSupportCase(supportCase);
supportCaseController.SetSupportCaseProcessor(supportCaseProcessor, Identities);
if (cSupportCaseDataProvider.detailsPage == null || cSupportCaseDataProvider.slimPage == null)
{
LogEntry("Support case pages are not initialized; aborting case start.", LogLevels.Error);
return null;
}
cSupportCaseDataProvider.detailsPage.SetSupportCaseController(supportCaseController);
cSupportCaseDataProvider.slimPage.SetSupportCaseController(supportCaseController);
var Status = await _result.SetViewDataAsync(requiredInformationClasses, Identities, true); var Status = await _result.SetViewDataAsync(requiredInformationClasses, Identities, true);
cF4sdApiSearchResultRelation relationToFocus = GetRelationToFocus(selectedRelation, relationService.GetLoadedRelations());
// relation to focus may not have all identities
supportCaseController.UpdateFocusedCaseRelation(relationToFocus);
if (!Status) if (!Status)
return null; return null;
var selectedHealthCard = _result.HealthCardDataHelper?.SelectedHealthCard;
if (selectedHealthCard != null)
_ = cHealthCard.GetRequiredTables(selectedHealthCard); // todo the healthcard is not selected at this point
if (detailsPage?.WidgetCollection != null)
detailsPage.WidgetCollection.WidgetDataList = supportCaseController.GetWidgetData();
if (detailsPage?.DataHistoryCollectionUserControl != null)
detailsPage.DataHistoryCollectionUserControl.HistoryDataList = supportCaseController.GetHistoryData();
if (detailsPage?.CustomizableSectionUc != null)
detailsPage.CustomizableSectionUc.ContainerCollections = supportCaseController.GetContainerData();
CurrentProvider = _result; CurrentProvider = _result;
// start the direct connection
if (_result.DirectConnectionHelper.IsDirectConnectionActive is false)
_ = Task.Run(async () =>
{
try
{
await _result.DirectConnectionHelper.DirectConnectionStartAsync();
}
catch { }
});
// start the slim or detaild page // start the slim or detaild page
bool shouldSkipSlimView = Identities.Any(identity => identity.Class is enumFasdInformationClass.Ticket) || cFasdCockpitConfig.Instance.Global.ShouldSkipSlimView; bool shouldSkipSlimView = (Identities?.Any(identity => identity.Class is enumFasdInformationClass.Ticket) ?? false)
|| (cFasdCockpitConfig.Instance?.Global?.ShouldSkipSlimView ?? false);
if (shouldSkipSlimView) if (shouldSkipSlimView)
{
cSupportCaseDataProvider.detailsPage?.Show(); cSupportCaseDataProvider.detailsPage?.Show();
cSupportCaseDataProvider.slimPage?.Hide();
}
else else
cSupportCaseDataProvider.slimPage.Show(); {
cSupportCaseDataProvider.slimPage?.Show();
cSupportCaseDataProvider.detailsPage?.Hide();
}
return _result; return _result;
} }
@@ -194,6 +224,30 @@ namespace FasdDesktopUi.Basics
return null; return null;
} }
private static cF4sdApiSearchResultRelation GetRelationToFocus(cF4sdApiSearchResultRelation selectedRelation, IEnumerable<cF4sdApiSearchResultRelation> loadedRelations)
{
try
{
if (selectedRelation.Type != enumF4sdSearchResultClass.User)
return selectedRelation;
cF4sdIdentityEntry alternativeIdentity = selectedRelation.Identities.FirstOrDefault(i => i.Class != enumFasdInformationClass.User);
cF4sdApiSearchResultRelation relationToFocus = loadedRelations.FirstOrDefault(r => r.id == alternativeIdentity?.Id && cF4sdIdentityEntry.GetFromSearchResult(r.Type) == alternativeIdentity.Class);
if (relationToFocus is null)
return selectedRelation;
relationToFocus.Identities = selectedRelation.Identities.Clone();
return relationToFocus;
}
catch (Exception ex)
{
LogException(ex);
}
return selectedRelation;
}
public void StartCase(Guid userId) public void StartCase(Guid userId)
{ {
var CM = MethodBase.GetCurrentMethod(); var CM = MethodBase.GetCurrentMethod();
@@ -244,6 +298,104 @@ namespace FasdDesktopUi.Basics
} }
} }
private static async Task EnsureSupportCasePagesAsync()
{
if (detailsPage != null && slimPage != null)
return;
if (Application.Current == null)
return;
await Application.Current.Dispatcher.InvokeAsync(() =>
{
if (slimPage == null)
slimPage = new Pages.SlimPage.SlimPageView();
if (detailsPage == null)
detailsPage = new Pages.DetailsPage.DetailsPageView();
}, DispatcherPriority.Normal);
}
private static async Task EnsureUserIdentityForTicketAsync(cF4sdApiSearchResultRelation relation)
{
if (relation == null || relation.Type != enumF4sdSearchResultClass.Ticket)
return;
if (relation.Identities == null)
relation.Identities = new cF4sdIdentityList();
var existingUsers = relation.Identities
.Where(identity => identity.Class == enumFasdInformationClass.User)
.ToList();
Guid userId = Guid.Empty;
if (relation.Infos != null)
{
if (relation.Infos.TryGetValue("Sids", out var sidsValue) ||
relation.Infos.TryGetValue("UserSid", out sidsValue))
{
var sids = sidsValue?.Split(',')
.Select(v => v.Trim())
.Where(v => !string.IsNullOrWhiteSpace(v))
.ToList();
if (sids != null && sids.Count > 0)
{
var communication = cFasdCockpitCommunicationBase.Instance;
if (communication != null)
{
relation.Infos.TryGetValue("UserDisplayName", out var userDisplayName);
var result = await communication.GetUserSearchResults(userDisplayName, sids);
var user = result?.Values?.FirstOrDefault()?.FirstOrDefault();
if (user != null)
userId = user.id;
}
}
}
if (userId == Guid.Empty && relation.Infos.TryGetValue("UserAccount", out var userAccount))
{
relation.Infos.TryGetValue("UserDomain", out var userDomain);
if (!string.IsNullOrWhiteSpace(userAccount))
{
var communication = cFasdCockpitCommunicationBase.Instance;
if (communication != null)
{
userId = await communication.GetUserIdByAccount(userAccount, userDomain ?? string.Empty);
}
}
}
if (userId == Guid.Empty)
{
if (relation.Infos.TryGetValue("UserId", out var userIdString) ||
relation.Infos.TryGetValue("UserGuid", out userIdString) ||
relation.Infos.TryGetValue("UserIdentityId", out userIdString))
{
Guid.TryParse(userIdString, out userId);
}
}
}
if (userId == Guid.Empty)
return;
if (existingUsers.Count == 0 || existingUsers.Any(identity => identity.Id != userId))
{
relation.Identities.RemoveAll(identity => identity.Class == enumFasdInformationClass.User);
relation.Identities.Add(new cF4sdIdentityEntry
{
Class = enumFasdInformationClass.User,
Id = userId
});
}
if (relation.Infos == null)
relation.Infos = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase);
relation.Infos["UserId"] = userId.ToString();
relation.Infos["UserGuid"] = userId.ToString();
}
public async Task CloseCaseAsync() public async Task CloseCaseAsync()
{ {
var CM = MethodBase.GetCurrentMethod(); var CM = MethodBase.GetCurrentMethod();
@@ -432,7 +584,7 @@ namespace FasdDesktopUi.Basics
{ {
try try
{ {
var couldGetHealthCard = HealthCardDataHelper.TryGetHealthcard(requiredInformationClasses); var couldGetHealthCard = HealthCardDataHelper.TrySetSelectedHealthcard(requiredInformationClasses);
if (!couldGetHealthCard) if (!couldGetHealthCard)
{ {
@@ -452,35 +604,12 @@ namespace FasdDesktopUi.Basics
} }
} }
var isOk = await HealthCardDataHelper.GetHealthCardRawDataAsync(new cF4sdHealthCardRawDataRequest()
{
Identities = Identities,
Tables = requiredTables.ToList(),
MaxAge = cF4SDCockpitXmlConfig.Instance?.HealthCardConfig?.SearchResultAge ?? 14
});
if (isNewCase) if (isNewCase)
HealthCardDataHelper.LastDataRequest = DateTime.Now; HealthCardDataHelper.LoadingHelper.LastDataRequest = DateTime.Now;
if (isOk == false)
{
string identityString = "";
foreach (var identity in Identities)
{
identityString += "\n" + identity.Id + " (Type: " + identity.Class + ")";
}
LogEntry($"Error trying to receive healthcard data for following identities: {identityString}", LogLevels.Error);
CustomMessageBox.Show($"Error trying to receive healthcard data for following identities: {identityString}", "Data Error", enumHealthCardStateLevel.Error);
return false;
}
var slimPageData = await HealthCardDataHelper.SlimCard.GetDataAsync(); var slimPageData = await HealthCardDataHelper.SlimCard.GetDataAsync();
var detailsPageData = await HealthCardDataHelper.DetailPage.GetDataAsync();
slimPage?.SetPropertyValues(slimPageData); slimPage?.SetPropertyValues(slimPageData);
detailsPage?.SetPropertyValues(detailsPageData);
return true; return true;
} }
@@ -543,12 +672,6 @@ namespace FasdDesktopUi.Basics
ComputerRemoved |= relationIdentity.Class == enumFasdInformationClass.Computer; ComputerRemoved |= relationIdentity.Class == enumFasdInformationClass.Computer;
ComputerAdded |= relationIdentity.Class == enumFasdInformationClass.Computer; ComputerAdded |= relationIdentity.Class == enumFasdInformationClass.Computer;
} }
relationIdentity.CopyTo(existingIdentity);
}
else
{
Identities.Add(relationIdentity.CreateCopy());
ComputerAdded |= relationIdentity.Class == enumFasdInformationClass.Computer;
} }
} }
@@ -561,16 +684,6 @@ namespace FasdDesktopUi.Basics
var searchResultInfoClass = cF4sdIdentityEntry.GetFromSearchResult(searchResultRelation.Type); var searchResultInfoClass = cF4sdIdentityEntry.GetFromSearchResult(searchResultRelation.Type);
await SetViewDataAsync(new List<enumFasdInformationClass>() { searchResultInfoClass }, Identities, false); await SetViewDataAsync(new List<enumFasdInformationClass>() { searchResultInfoClass }, Identities, false);
if (ComputerAdded)
_ = Task.Run(async () =>
{
try
{
await DirectConnectionHelper.DirectConnectionStartAsync();
}
catch { }
});
} }
catch (Exception E) catch (Exception E)
{ {

View File

@@ -1,24 +1,11 @@
using System; using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection; using System.Reflection;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows; using System.Windows;
using System.Windows.Input; using System.Windows.Input;
using C4IT.FASD.Base; using C4IT.FASD.Base;
using C4IT.FASD.Cockpit.Communication; using FasdDesktopUi.Basics.Services.SupportCase.Controllers;
using C4IT.Logging;
using C4IT.MultiLanguage;
using FasdDesktopUi.Basics.Models;
using FasdDesktopUi.Basics.UserControls;
using FasdDesktopUi.Pages.DetailsPage; using FasdDesktopUi.Pages.DetailsPage;
using FasdDesktopUi.Pages.DetailsPage.UserControls;
using static C4IT.Logging.cLogManager; using static C4IT.Logging.cLogManager;
@@ -26,11 +13,14 @@ namespace FasdDesktopUi.Basics.UiActions
{ {
public class cChangeHealthCardAction : cUiActionBase public class cChangeHealthCardAction : cUiActionBase
{ {
private readonly SupportCaseController _supportCaseController;
public cF4sdApiSearchResultRelation ResultRelation { get; private set; } = null; public cF4sdApiSearchResultRelation ResultRelation { get; private set; } = null;
public cChangeHealthCardAction(cF4sdApiSearchResultRelation resultRelation) public cChangeHealthCardAction(cF4sdApiSearchResultRelation resultRelation, SupportCaseController supportCaseController)
{ {
ResultRelation = resultRelation; ResultRelation = resultRelation;
_supportCaseController = supportCaseController;
} }
public override async Task<bool> RunUiActionAsync(object sender, UIElement UiLocation, bool isDetailedLayout, cSupportCaseDataProvider dataProvider) public override async Task<bool> RunUiActionAsync(object sender, UIElement UiLocation, bool isDetailedLayout, cSupportCaseDataProvider dataProvider)
@@ -52,6 +42,8 @@ namespace FasdDesktopUi.Basics.UiActions
detailsPage.NavigationHeadingUc.ResetSelectors(); detailsPage.NavigationHeadingUc.ResetSelectors();
await dataProvider.ExchangeCaseIdentitiesAsync(ResultRelation); await dataProvider.ExchangeCaseIdentitiesAsync(ResultRelation);
_supportCaseController.UpdateFocusedCaseRelation(ResultRelation);
detailsPage.UpdateHealthcardSectionVisibilities();
return true; return true;
} }

View File

@@ -39,7 +39,7 @@ namespace FasdDesktopUi.Basics.UiActions
return null; return null;
if (cF4SDCustomDialogConfig.Instance.CustomDialogContainers.TryGetValue(name, out var containerConfig)) if (cF4SDCustomDialogConfig.Instance.CustomDialogContainers.TryGetValue(name, out var containerConfig))
output = dataProvider.HealthCardDataHelper.GetContainerDataFromConfig(containerConfig); output = dataProvider.HealthCardDataHelper.CustomizableSectionHelper.GetContainerDataFromConfig(containerConfig);
} }
catch (Exception E) catch (Exception E)
{ {

View File

@@ -34,17 +34,17 @@ namespace FasdDesktopUi.Basics.UiActions
private string Recommendation { get; set; } private string Recommendation { get; set; }
private cHealthCardDetailsTable ValuedDetailsData = null; private readonly cHealthCardDetailsTable _valuedDetailsData = null;
public cShowDetailedDataAction(cHealthCardStateBase StateDefinition, int DayIndex = 0, cHealthCardDetailsTable ValuedDetailsData = null) public cShowDetailedDataAction(cHealthCardStateBase stateDefinition, int dayIndex = 0, cHealthCardDetailsTable valuedDetailsData = null)
{ {
this.StateDefinition = StateDefinition; StateDefinition = stateDefinition;
this.DayIndex = DayIndex; DayIndex = dayIndex;
this.DetailsTitle = StateDefinition.Names.GetValue(); DetailsTitle = stateDefinition.Names.GetValue();
this.Recommendation = StateDefinition.Descriptions.GetValue(); Recommendation = stateDefinition.Descriptions.GetValue();
if (this.Recommendation == String.Empty) if (Recommendation == string.Empty)
this.Recommendation = null; Recommendation = null;
this.ValuedDetailsData = ValuedDetailsData; _valuedDetailsData = valuedDetailsData;
} }
public override async Task<bool> RunUiActionAsync(object sender, UIElement UiLocation, bool isDetailedLayout, cSupportCaseDataProvider dataProvider) public override async Task<bool> RunUiActionAsync(object sender, UIElement UiLocation, bool isDetailedLayout, cSupportCaseDataProvider dataProvider)
@@ -55,13 +55,13 @@ namespace FasdDesktopUi.Basics.UiActions
return false; return false;
DataProvider = dataProvider; DataProvider = dataProvider;
DataProvider.HealthCardDataHelper.DataRefreshed += (s, e) => CachedDetails.Clear(); DataProvider.HealthCardDataHelper.LoadingHelper.DataRefreshed += (s, e) => CachedDetails.Clear();
Mouse.OverrideCursor = Cursors.Wait; Mouse.OverrideCursor = Cursors.Wait;
if (StateDefinition.Details is cHealthCardDetailsValued) if (StateDefinition.Details is cHealthCardDetailsValued)
{ {
if (ValuedDetailsData == null) if (_valuedDetailsData == null)
return false; return false;
} }
else else
@@ -240,26 +240,37 @@ namespace FasdDesktopUi.Basics.UiActions
private cDetailedDataModel GetValuedDataModel() private cDetailedDataModel GetValuedDataModel()
{ {
if (!(StateDefinition.Details is cHealthCardDetailsValued _details) || ValuedDetailsData == null) if (!(StateDefinition.Details is cHealthCardDetailsValued details) || _valuedDetailsData == null)
return null; return null;
if (ValuedDetailsData.Columns.Count > 1) var _colCount = details.Count;
if (_colCount == 0)
return null; return null;
var _rowHeadings = _details.Select(v => v.Names.GetValue() as object).ToList(); var rowHeadings = details.Select(v => (object)v.Names.GetValue()).ToList();
cDetailedDataModel output = new cDetailedDataModel() cDetailedDataModel output = new cDetailedDataModel()
{ {
Heading = StateDefinition.Names.GetValue(), Heading = StateDefinition.Names.GetValue(),
FullDetailedData = new List<object>(), FullDetailedData = new List<object>(),
HasColumnHeaders = _rowHeadings.Count > 1 HasColumnHeaders = _colCount > 1
}; };
if (_rowHeadings.Count > 1) if (rowHeadings.Count > 1)
output.FullDetailedData.Add(_rowHeadings); output.FullDetailedData.Add(rowHeadings);
var _data = ValuedDetailsData.Values[0]; var _data = _valuedDetailsData.Values[0];
foreach (var _row in _data) foreach (var _row in _data)
output.FullDetailedData.Add(new List<object>() { _row[0] }); {
var _rowValues = new List<object>();
for (int i = 0; i < _colCount; i++)
{
_rowValues.Add(_row[i]);
}
output.FullDetailedData.Add(_rowValues);
}
var _json = Newtonsoft.Json.JsonConvert.SerializeObject(output);
return output; return output;
} }
@@ -307,7 +318,7 @@ namespace FasdDesktopUi.Basics.UiActions
var valueProcessing = splitColumnName.Length > 1 ? splitColumnName[1] : null; var valueProcessing = splitColumnName.Length > 1 ? splitColumnName[1] : null;
rawColumnIndexes.Add(rawColumnIndex); rawColumnIndexes.Add(rawColumnIndex);
displayTypes.Add(cUtility.GetRawValueType(displayType)); displayTypes.Add(displayType);
valueProcessings.Add(valueProcessing); valueProcessings.Add(valueProcessing);
} }
@@ -326,7 +337,8 @@ namespace FasdDesktopUi.Basics.UiActions
shouldHideRow = true; shouldHideRow = true;
} }
cUtility.RawValueFormatter.SetDefaultCulture(new System.Globalization.CultureInfo(cFasdCockpitConfig.Instance.SelectedLanguage)); cUtility.RawValueFormatter.SetDefaultCulture(new CultureInfo(cFasdCockpitConfig.Instance.SelectedLanguage));
cUtility.RawValueFormatter.SetDefaultTimeZone(TimeZoneInfo.Local);
foreach (var index in rawColumnIndexes) foreach (var index in rawColumnIndexes)
{ {
@@ -366,6 +378,8 @@ namespace FasdDesktopUi.Basics.UiActions
output.FullDetailedData.Add(displayValuesOfRow); output.FullDetailedData.Add(displayValuesOfRow);
} }
var _json = Newtonsoft.Json.JsonConvert.SerializeObject(output);
return output; return output;
} }
catch (Exception E) catch (Exception E)

View File

@@ -5,6 +5,7 @@ using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using C4IT.F4SD.DisplayFormatting; using C4IT.F4SD.DisplayFormatting;
using C4IT.F4SD.SupportCaseProtocoll.Models;
using C4IT.FASD.Base; using C4IT.FASD.Base;
using C4IT.Logging; using C4IT.Logging;
using C4IT.MultiLanguage; using C4IT.MultiLanguage;
@@ -135,8 +136,10 @@ namespace FasdDesktopUi.Basics.UiActions
StatusMonitor.QuickActionOutputs.Add(_ref.Output); StatusMonitor.QuickActionOutputs.Add(_ref.Output);
quickActionOutput = QuickActionStatusMonitor.cQuickActionOutput.GetQuickActionOutput(_ref.Output, DataProvider); quickActionOutput = QuickActionStatusMonitor.cQuickActionOutput.GetQuickActionOutput(_ref.Output, DataProvider);
cQuickActionCopyData copyData = QuickActionProtocollEntry.GetCopyData(quickActionDemo, DataProvider, true, quickActionOutput, StatusMonitor.MeasureValues); cQuickActionCopyData copyData = QuickActionProtocollEntryOutput.GetCopyData(quickActionDemo, DataProvider, true, quickActionOutput, StatusMonitor.MeasureValues);
F4SDProtocoll.Instance.Add(new QuickActionProtocollEntry(quickActionDemo, copyData)); QuickActionProtocollEntry protocollEntry = QuickActionProtocollEntryOutput.GetQuickActionProtocollEntry(quickActionDemo, copyData);
F4SDProtocoll.Instance.Add(protocollEntry);
_msg = cMultiLanguageSupport.GetItem("QuickAction.Revision.Status.FinishedSuccessfull"); _msg = cMultiLanguageSupport.GetItem("QuickAction.Revision.Status.FinishedSuccessfull");
} }

View File

@@ -6,6 +6,7 @@ using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using C4IT.F4SD.DisplayFormatting; using C4IT.F4SD.DisplayFormatting;
using C4IT.F4SD.SupportCaseProtocoll.Models;
using C4IT.FASD.Base; using C4IT.FASD.Base;
using C4IT.FASD.Cockpit.Communication; using C4IT.FASD.Cockpit.Communication;
using C4IT.Logging; using C4IT.Logging;
@@ -154,9 +155,10 @@ namespace FasdDesktopUi.Basics.UiActions
cMultiLanguageSupport.CurrentLanguage = tempLang; cMultiLanguageSupport.CurrentLanguage = tempLang;
} }
cQuickActionCopyData copyData = QuickActionProtocollEntry.GetCopyData(LocalQuickAction, DataProvider, false, protocollOutput, StatusMonitor.MeasureValues); cQuickActionCopyData copyData = QuickActionProtocollEntryOutput.GetCopyData(LocalQuickAction, DataProvider, false, protocollOutput, StatusMonitor.MeasureValues);
F4SDProtocoll.Instance.Add(new QuickActionProtocollEntry(LocalQuickAction, copyData)); QuickActionProtocollEntry protocollEntry = QuickActionProtocollEntryOutput.GetQuickActionProtocollEntry(LocalQuickAction, copyData);
F4SDProtocoll.Instance.Add(protocollEntry);
string quickActionStatus; string quickActionStatus;
switch (ResultRevision.Status) switch (ResultRevision.Status)
@@ -193,8 +195,10 @@ namespace FasdDesktopUi.Basics.UiActions
cMultiLanguageSupport.CurrentLanguage = tempLang; cMultiLanguageSupport.CurrentLanguage = tempLang;
} }
cQuickActionCopyData copyData = QuickActionProtocollEntry.GetCopyData(LocalQuickAction, DataProvider, false, protocollOutput, StatusMonitor.MeasureValues); cQuickActionCopyData copyData = QuickActionProtocollEntryOutput.GetCopyData(LocalQuickAction, DataProvider, false, protocollOutput, StatusMonitor.MeasureValues);
F4SDProtocoll.Instance.Add(new QuickActionProtocollEntry(LocalQuickAction, copyData)); QuickActionProtocollEntry protocollEntry = QuickActionProtocollEntryOutput.GetQuickActionProtocollEntry(LocalQuickAction, copyData);
F4SDProtocoll.Instance.Add(protocollEntry);
output = new List<object>() { cMultiLanguageSupport.GetItem("QuickAction.Revision.Status.Canceled"), cUtility.RawValueFormatter.GetDisplayValue(DateTime.UtcNow, RawValueType.DATETIME) }; output = new List<object>() { cMultiLanguageSupport.GetItem("QuickAction.Revision.Status.Canceled"), cUtility.RawValueFormatter.GetDisplayValue(DateTime.UtcNow, RawValueType.DATETIME) };
} }

View File

@@ -1,4 +1,5 @@
using C4IT.F4SD.DisplayFormatting; using C4IT.F4SD.DisplayFormatting;
using C4IT.F4SD.SupportCaseProtocoll.Models;
using C4IT.FASD.Base; using C4IT.FASD.Base;
using C4IT.Logging; using C4IT.Logging;
using C4IT.MultiLanguage; using C4IT.MultiLanguage;
@@ -124,8 +125,10 @@ namespace FasdDesktopUi.Basics.UiActions
cMultiLanguageSupport.CurrentLanguage = tempLang; cMultiLanguageSupport.CurrentLanguage = tempLang;
} }
cQuickActionCopyData copyData = QuickActionProtocollEntry.GetCopyData(LocalQuickAction, DataProvider, false, protocollOutput, StatusMonitor.MeasureValues); cQuickActionCopyData copyData = QuickActionProtocollEntryOutput.GetCopyData(LocalQuickAction, DataProvider, false, protocollOutput, StatusMonitor.MeasureValues);
F4SDProtocoll.Instance.Add(new QuickActionProtocollEntry(LocalQuickAction, copyData)); QuickActionProtocollEntry protocollEntry = QuickActionProtocollEntryOutput.GetQuickActionProtocollEntry(LocalQuickAction, copyData);
F4SDProtocoll.Instance.Add(protocollEntry);
return new List<object>() { cMultiLanguageSupport.GetItem("QuickAction.Revision.Status.FinishedSuccessfull"), cUtility.RawValueFormatter.GetDisplayValue(DateTime.UtcNow, RawValueType.DATETIME) }; return new List<object>() { cMultiLanguageSupport.GetItem("QuickAction.Revision.Status.FinishedSuccessfull"), cUtility.RawValueFormatter.GetDisplayValue(DateTime.UtcNow, RawValueType.DATETIME) };
} }
@@ -141,8 +144,10 @@ namespace FasdDesktopUi.Basics.UiActions
cMultiLanguageSupport.CurrentLanguage = cF4SDCockpitXmlConfig.Instance.HealthCardConfig.ProtocollLanguage; cMultiLanguageSupport.CurrentLanguage = cF4SDCockpitXmlConfig.Instance.HealthCardConfig.ProtocollLanguage;
protocollOutput = new cQuickActionOutputSingle(new cF4sdQuickActionRevision.cOutput() { ResultCode = enumQuickActionSuccess.error, ErrorDescription = cMultiLanguageSupport.GetItem("QuickAction.Copy.Output.Cancel") }); protocollOutput = new cQuickActionOutputSingle(new cF4sdQuickActionRevision.cOutput() { ResultCode = enumQuickActionSuccess.error, ErrorDescription = cMultiLanguageSupport.GetItem("QuickAction.Copy.Output.Cancel") });
cQuickActionCopyData copyData = QuickActionProtocollEntry.GetCopyData(LocalQuickAction, DataProvider, false, protocollOutput, StatusMonitor.MeasureValues); cQuickActionCopyData copyData = QuickActionProtocollEntryOutput.GetCopyData(LocalQuickAction, DataProvider, false, protocollOutput, StatusMonitor.MeasureValues);
F4SDProtocoll.Instance.Add(new QuickActionProtocollEntry(LocalQuickAction, copyData)); QuickActionProtocollEntry protocollEntry = QuickActionProtocollEntryOutput.GetQuickActionProtocollEntry(LocalQuickAction, copyData);
F4SDProtocoll.Instance.Add(protocollEntry);
cMultiLanguageSupport.CurrentLanguage = tempLang; cMultiLanguageSupport.CurrentLanguage = tempLang;
return new List<object>() { cMultiLanguageSupport.GetItem("QuickAction.Revision.Status.Canceled"), cUtility.RawValueFormatter.GetDisplayValue(DateTime.UtcNow, RawValueType.DATETIME) }; return new List<object>() { cMultiLanguageSupport.GetItem("QuickAction.Revision.Status.Canceled"), cUtility.RawValueFormatter.GetDisplayValue(DateTime.UtcNow, RawValueType.DATETIME) };

View File

@@ -58,7 +58,7 @@ namespace FasdDesktopUi.Basics.UiActions
} }
} }
HistoryEntry.isSeen = true; HistoryEntry.isSeen = true;
dataProvider = await cSupportCaseDataProvider.GetDataProviderForAsync(RelationEntry.Relations, RelationEntry.SelectedRelation, relationService); dataProvider = await cSupportCaseDataProvider.GetDataProviderForAsync(RelationEntry.SelectedRelation, relationService);
if (dataProvider is null) if (dataProvider is null)
{ {
Debug.Assert(true, "Could not start a data provider for the selected criterias."); Debug.Assert(true, "Could not start a data provider for the selected criterias.");

View File

@@ -1,11 +1,13 @@
using C4IT.FASD.Base; using C4IT.FASD.Base;
using C4IT.Logging; using C4IT.Logging;
using C4IT.MultiLanguage; using C4IT.MultiLanguage;
using FasdDesktopUi.Basics.Helper;
using FasdDesktopUi.Basics.Services.RelationService; using FasdDesktopUi.Basics.Services.RelationService;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.Reflection; using System.Reflection;
using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using System.Windows; using System.Windows;
using static C4IT.Logging.cLogManager; using static C4IT.Logging.cLogManager;
@@ -23,7 +25,7 @@ namespace FasdDesktopUi.Basics.UiActions
public cUiProcessSearchRelationAction(cSearchHistorySearchResultEntry searchHistoryEntry, cF4sdApiSearchResultRelation selectedRelation, IRelationService relationService, ISearchUiProvider searchUiProvider) public cUiProcessSearchRelationAction(cSearchHistorySearchResultEntry searchHistoryEntry, cF4sdApiSearchResultRelation selectedRelation, IRelationService relationService, ISearchUiProvider searchUiProvider)
{ {
Name = $"{searchHistoryEntry.HeaderText} → {selectedRelation.DisplayName}"; Name = !string.IsNullOrWhiteSpace(selectedRelation.DisplayName) ? $"{searchHistoryEntry.HeaderText} → {selectedRelation.DisplayName}" : searchHistoryEntry.HeaderText;
_selectedSearchResult = searchHistoryEntry.SelectedSearchResult; _selectedSearchResult = searchHistoryEntry.SelectedSearchResult;
_relations = searchHistoryEntry.Relations; _relations = searchHistoryEntry.Relations;
_selectedRelation = selectedRelation; _selectedRelation = selectedRelation;
@@ -32,7 +34,7 @@ namespace FasdDesktopUi.Basics.UiActions
_searchHistoryEntry = searchHistoryEntry; _searchHistoryEntry = searchHistoryEntry;
} }
public cUiProcessSearchRelationAction(string name, List<cFasdApiSearchResultEntry> selectedSearchResult, List<cF4sdApiSearchResultRelation> relations, cF4sdApiSearchResultRelation selectedRelation, ISearchUiProvider searchUiProvider, cSearchHistoryEntryBase searchHistoryEntry) public cUiProcessSearchRelationAction(string name, List<cFasdApiSearchResultEntry> selectedSearchResult, List<cF4sdApiSearchResultRelation> relations, cF4sdApiSearchResultRelation selectedRelation, ISearchUiProvider searchUiProvider, cSearchHistoryEntryBase searchHistoryEntry, IRelationService relationService)
{ {
Name = name; Name = name;
_selectedSearchResult = selectedSearchResult; _selectedSearchResult = selectedSearchResult;
@@ -40,6 +42,7 @@ namespace FasdDesktopUi.Basics.UiActions
_selectedRelation = selectedRelation; _selectedRelation = selectedRelation;
_searchUiProvider = searchUiProvider; _searchUiProvider = searchUiProvider;
_searchHistoryEntry = searchHistoryEntry; _searchHistoryEntry = searchHistoryEntry;
_relationService = relationService;
} }
public override async Task<bool> RunUiActionAsync(object sender, UIElement UiLocation, bool isDetailedLayout, cSupportCaseDataProvider dataProvider) public override async Task<bool> RunUiActionAsync(object sender, UIElement UiLocation, bool isDetailedLayout, cSupportCaseDataProvider dataProvider)
@@ -65,6 +68,9 @@ namespace FasdDesktopUi.Basics.UiActions
return false; return false;
} }
if (TicketDeepLinkHelper.TryOpenTicketRelationExternally(_selectedRelation))
return false;
// check, if have an active support case // check, if have an active support case
var supportCaseActive = dataProvider?.IsActive ?? false; var supportCaseActive = dataProvider?.IsActive ?? false;
@@ -84,10 +90,15 @@ namespace FasdDesktopUi.Basics.UiActions
return false; return false;
} }
// set the new result menu properies for loading .... // set the new result menu properies for loading ....
_seachHistoryEntry.isSeen = true; _seachHistoryEntry.isSeen = true;
// get the new data provider for the support call informations (get it from the cache or create a new one) // get the new data provider for the support call informations (get it from the cache or create a new one)
dataProvider = await cSupportCaseDataProvider.GetDataProviderForAsync(_relations, _selectedRelation, _relationService); dataProvider = await cSupportCaseDataProvider.GetDataProviderForAsync(_selectedRelation, _relationService);
bool shouldLoadRelationsForSelectedRelation = _selectedRelation.Type == enumF4sdSearchResultClass.User;
if (shouldLoadRelationsForSelectedRelation)
StartLoadingRelationsFor(_selectedRelation);
if (dataProvider is null) if (dataProvider is null)
{ {
@@ -106,5 +117,26 @@ namespace FasdDesktopUi.Basics.UiActions
return false; return false;
} }
private void StartLoadingRelationsFor(cF4sdApiSearchResultRelation selectedRelation)
{
try
{
var relationsToReload = new List<cFasdApiSearchResultEntry>() { new cFasdApiSearchResultEntry()
{
DisplayName = selectedRelation.DisplayName,
id = selectedRelation.id,
Infos = selectedRelation.Infos,
Name = selectedRelation.Name,
Status = selectedRelation.Status,
Type = selectedRelation.Type
} };
_ = Task.Run(async () => _relationService.LoadRelationsAsync(relationsToReload), CancellationToken.None);
}
catch (Exception ex)
{
LogException(ex);
}
}
} }
} }

View File

@@ -24,6 +24,8 @@ namespace FasdDesktopUi.Basics.UiActions
private readonly List<cF4sdApiSearchResultRelation> _loadedRelations = new List<cF4sdApiSearchResultRelation>(); private readonly List<cF4sdApiSearchResultRelation> _loadedRelations = new List<cF4sdApiSearchResultRelation>();
private readonly TaskCompletionSource<bool> _isSearchUnambigous = new TaskCompletionSource<bool>(); private readonly TaskCompletionSource<bool> _isSearchUnambigous = new TaskCompletionSource<bool>();
private IRelationService _relationService = null;
public cF4sdApiSearchResultRelation PreSelectedSearchRelation { get; set; } = null; public cF4sdApiSearchResultRelation PreSelectedSearchRelation { get; set; } = null;
public cUiProcessSearchResultAction(string name, ISearchUiProvider searchUiProvider, List<cFasdApiSearchResultEntry> searchResults) public cUiProcessSearchResultAction(string name, ISearchUiProvider searchUiProvider, List<cFasdApiSearchResultEntry> searchResults)
@@ -89,12 +91,12 @@ namespace FasdDesktopUi.Basics.UiActions
Mouse.OverrideCursor = null; Mouse.OverrideCursor = null;
if (MatchPreselectedSearchRelation(_loadedRelations))
return await ProcessSearchResultRelationAsync(_searchResults.First().Name, _loadedRelations, PreSelectedSearchRelation);
if (await _isSearchUnambigous.Task) if (await _isSearchUnambigous.Task)
return await ProcessSearchResultRelationAsync(_searchResults.First().Name, _loadedRelations, _loadedRelations.FirstOrDefault()); return await ProcessSearchResultRelationAsync(_searchResults.First().Name, _loadedRelations, _loadedRelations.FirstOrDefault());
if (MatchPreselectedSearchRelation(_loadedRelations))
return await ProcessSearchResultRelationAsync(_searchResults.First().Name, _loadedRelations, PreSelectedSearchRelation);
return true; return true;
} }
catch (Exception ex) catch (Exception ex)
@@ -115,10 +117,10 @@ namespace FasdDesktopUi.Basics.UiActions
private async Task<bool> ProcessSearchResultRelationAsync(string name, List<cF4sdApiSearchResultRelation> caseRelations, cF4sdApiSearchResultRelation selectedRelation) private async Task<bool> ProcessSearchResultRelationAsync(string name, List<cF4sdApiSearchResultRelation> caseRelations, cF4sdApiSearchResultRelation selectedRelation)
{ {
var relationSearchResult = new cSearchHistorySearchResultEntry(_searchResults.FirstOrDefault().DisplayName, _searchResults.FirstOrDefault().DisplayName, _searchResults, caseRelations, _searchUiProvider); var relationSearchResult = new cSearchHistorySearchResultEntry(_searchResults.FirstOrDefault().DisplayName, _searchResults.FirstOrDefault().DisplayName, _searchResults, caseRelations, _searchUiProvider);
string displayName = selectedRelation != null ? $"{name} → {selectedRelation.Name}" : name; string displayName = !string.IsNullOrWhiteSpace(selectedRelation?.Name) ? $"{name} → {selectedRelation.Name}" : name;
cUiProcessSearchRelationAction action cUiProcessSearchRelationAction action
= new cUiProcessSearchRelationAction(displayName, _searchResults, caseRelations, caseRelations.FirstOrDefault(), _searchUiProvider, relationSearchResult) = new cUiProcessSearchRelationAction(displayName, _searchResults, caseRelations, selectedRelation, _searchUiProvider, relationSearchResult, _relationService)
{ {
DisplayType = enumActionDisplayType.enabled, DisplayType = enumActionDisplayType.enabled,
}; };
@@ -155,6 +157,7 @@ namespace FasdDesktopUi.Basics.UiActions
try try
{ {
_loadedRelations.AddRange(e.StagedResultRelations.Relations); _loadedRelations.AddRange(e.StagedResultRelations.Relations);
_relationService = e.RelationService;
if (!e.StagedResultRelations.IsComplete) if (!e.StagedResultRelations.IsComplete)
return; return;

View File

@@ -0,0 +1,34 @@
using System;
using System.Threading.Tasks;
using System.Windows;
using C4IT.FASD.Base;
using static C4IT.Logging.cLogManager;
namespace FasdDesktopUi.Basics.UiActions
{
public sealed class cUiProcessTicketOverviewRelationAction : cUiActionBase
{
private readonly Func<Task> _runAsync;
public cUiProcessTicketOverviewRelationAction(string name, Func<Task> runAsync)
{
Name = name;
_runAsync = runAsync;
}
public override async Task<bool> RunUiActionAsync(object sender, UIElement UiLocation, bool isDetailedLayout, cSupportCaseDataProvider dataProvider)
{
try
{
if (_runAsync != null)
await _runAsync();
}
catch (Exception ex)
{
LogException(ex);
}
return false;
}
}
}

View File

@@ -45,6 +45,7 @@ namespace FasdDesktopUi.Basics.UiActions
return; return;
cUtility.RawValueFormatter.SetDefaultCulture(new System.Globalization.CultureInfo(cFasdCockpitConfig.Instance.SelectedLanguage)); cUtility.RawValueFormatter.SetDefaultCulture(new System.Globalization.CultureInfo(cFasdCockpitConfig.Instance.SelectedLanguage));
cUtility.RawValueFormatter.SetDefaultTimeZone(TimeZoneInfo.Local);
shouldRunImmidiate = QuickActionConfig.RunImmediate; shouldRunImmidiate = QuickActionConfig.RunImmediate;
Description = QuickActionConfig.Descriptions?.GetValue(Default: null); Description = QuickActionConfig.Descriptions?.GetValue(Default: null);

View File

@@ -27,12 +27,12 @@ namespace FasdDesktopUi.Basics.UiActions
_quickTip = quickTip; _quickTip = quickTip;
} }
public override Task<bool> RunUiActionAsync(object sender, UIElement UiLocation, bool isDetailedLayout, cSupportCaseDataProvider dataProvider) public override async Task<bool> RunUiActionAsync(object sender, UIElement UiLocation, bool isDetailedLayout, cSupportCaseDataProvider dataProvider)
{ {
try try
{ {
if (!(UiLocation is QuickTipStatusMonitor quickTipStatusMonitor)) if (!(UiLocation is QuickTipStatusMonitor quickTipStatusMonitor))
return Task.FromResult(false); return false;
DataProvider = dataProvider; DataProvider = dataProvider;
@@ -49,13 +49,13 @@ namespace FasdDesktopUi.Basics.UiActions
quickTipStatusMonitor.Visibility = Visibility.Visible; quickTipStatusMonitor.Visibility = Visibility.Visible;
return Task.FromResult(true); return true;
} }
catch (Exception E) catch (Exception E)
{ {
LogException(E); LogException(E);
} }
return Task.FromResult(false); return false;
} }
private void CreateElementData() private void CreateElementData()

View File

@@ -1,4 +1,5 @@
using C4IT.F4SD.DisplayFormatting; using C4IT.F4SD.DisplayFormatting;
using C4IT.F4SD.SupportCaseProtocoll.Models;
using C4IT.FASD.Base; using C4IT.FASD.Base;
using C4IT.FASD.Cockpit.Communication; using C4IT.FASD.Cockpit.Communication;
using C4IT.Logging; using C4IT.Logging;
@@ -137,9 +138,10 @@ namespace FasdDesktopUi.Basics.UiActions
cQuickActionStatusMonitorModel.cQuickActionStep.SetQuickActionStepStatuses(StatusMonitor.QuickActionData.ActionSteps, RemoteQuickAction.Name, enumActionStepType.running, status); cQuickActionStatusMonitorModel.cQuickActionStep.SetQuickActionStepStatuses(StatusMonitor.QuickActionData.ActionSteps, RemoteQuickAction.Name, enumActionStepType.running, status);
cQuickActionStatusMonitorModel.cQuickActionStep.SetQuickActionStepStatuses(StatusMonitor.QuickActionData.ActionSteps, RemoteQuickAction.Name, enumActionStepType.main, status); cQuickActionStatusMonitorModel.cQuickActionStep.SetQuickActionStepStatuses(StatusMonitor.QuickActionData.ActionSteps, RemoteQuickAction.Name, enumActionStepType.main, status);
cQuickActionCopyData copyData = QuickActionProtocollEntry.GetCopyData(RemoteQuickAction, DataProvider, true, protocollOutput, StatusMonitor.MeasureValues); cQuickActionCopyData copyData = QuickActionProtocollEntryOutput.GetCopyData(RemoteQuickAction, DataProvider, true, protocollOutput, StatusMonitor.MeasureValues);
F4SDProtocoll.Instance.Add(new QuickActionProtocollEntry(RemoteQuickAction, copyData)); QuickActionProtocollEntry protocollEntry = QuickActionProtocollEntryOutput.GetQuickActionProtocollEntry(RemoteQuickAction, copyData);
F4SDProtocoll.Instance.Add(protocollEntry);
} }
else else
{ {
@@ -155,8 +157,11 @@ namespace FasdDesktopUi.Basics.UiActions
cMultiLanguageSupport.CurrentLanguage = tempLang; cMultiLanguageSupport.CurrentLanguage = tempLang;
} }
cQuickActionCopyData copyData = QuickActionProtocollEntry.GetCopyData(RemoteQuickAction, DataProvider, true, protocollOutput, StatusMonitor.MeasureValues); cQuickActionCopyData copyData = QuickActionProtocollEntryOutput.GetCopyData(RemoteQuickAction, DataProvider, true, protocollOutput, StatusMonitor.MeasureValues);
F4SDProtocoll.Instance.Add(new QuickActionProtocollEntry(RemoteQuickAction, copyData)); QuickActionProtocollEntry protocollEntry = QuickActionProtocollEntryOutput.GetQuickActionProtocollEntry(RemoteQuickAction, copyData);
F4SDProtocoll.Instance.Add(protocollEntry);
return new List<object>() { cMultiLanguageSupport.GetItem("QuickAction.Revision.Status.Canceled"), cUtility.RawValueFormatter.GetDisplayValue(DateTime.UtcNow, RawValueType.DATETIME) }; return new List<object>() { cMultiLanguageSupport.GetItem("QuickAction.Revision.Status.Canceled"), cUtility.RawValueFormatter.GetDisplayValue(DateTime.UtcNow, RawValueType.DATETIME) };
} }
@@ -241,7 +246,7 @@ namespace FasdDesktopUi.Basics.UiActions
{ {
Id = measure.Id, Id = measure.Id,
Names = measureDefinition.Names, Names = measureDefinition.Names,
Display = cUtility.GetRawValueType(measureDefinition.Display), Display = measureDefinition.Display,
Value = measure.Value, Value = measure.Value,
PostValue = measure.PostValue PostValue = measure.PostValue
}); });

View File

@@ -1,4 +1,5 @@
using C4IT.F4SD.DisplayFormatting; using C4IT.F4SD.DisplayFormatting;
using C4IT.F4SD.SupportCaseProtocoll.Models;
using C4IT.FASD.Base; using C4IT.FASD.Base;
using C4IT.FASD.Cockpit.Communication; using C4IT.FASD.Cockpit.Communication;
using C4IT.Logging; using C4IT.Logging;
@@ -170,8 +171,10 @@ namespace FasdDesktopUi.Basics.UiActions
cMultiLanguageSupport.CurrentLanguage = tempLang; cMultiLanguageSupport.CurrentLanguage = tempLang;
} }
cQuickActionCopyData copyData = QuickActionProtocollEntry.GetCopyData(ServerQuickAction, DataProvider, false, protocollOutput, StatusMonitor.MeasureValues); cQuickActionCopyData copyData = QuickActionProtocollEntryOutput.GetCopyData(ServerQuickAction, DataProvider, false, protocollOutput, StatusMonitor.MeasureValues);
F4SDProtocoll.Instance.Add(new QuickActionProtocollEntry(ServerQuickAction, copyData)); QuickActionProtocollEntry protocollEntry = QuickActionProtocollEntryOutput.GetQuickActionProtocollEntry(ServerQuickAction, copyData);
F4SDProtocoll.Instance.Add(protocollEntry);
string quickActionStatus; string quickActionStatus;
switch (ResultRevision.Status) switch (ResultRevision.Status)
@@ -208,8 +211,10 @@ namespace FasdDesktopUi.Basics.UiActions
cMultiLanguageSupport.CurrentLanguage = tempLang; cMultiLanguageSupport.CurrentLanguage = tempLang;
} }
cQuickActionCopyData copyData = QuickActionProtocollEntry.GetCopyData(ServerQuickAction, DataProvider, false, protocollOutput, StatusMonitor.MeasureValues); cQuickActionCopyData copyData = QuickActionProtocollEntryOutput.GetCopyData(ServerQuickAction, DataProvider, false, protocollOutput, StatusMonitor.MeasureValues);
F4SDProtocoll.Instance.Add(new QuickActionProtocollEntry(ServerQuickAction, copyData)); QuickActionProtocollEntry protocollEntry = QuickActionProtocollEntryOutput.GetQuickActionProtocollEntry(ServerQuickAction, copyData);
F4SDProtocoll.Instance.Add(protocollEntry);
output = new List<object>() { cMultiLanguageSupport.GetItem("QuickAction.Revision.Status.Canceled"), cUtility.RawValueFormatter.GetDisplayValue(DateTime.UtcNow, RawValueType.DATETIME) }; output = new List<object>() { cMultiLanguageSupport.GetItem("QuickAction.Revision.Status.Canceled"), cUtility.RawValueFormatter.GetDisplayValue(DateTime.UtcNow, RawValueType.DATETIME) };
} }

View File

@@ -0,0 +1,41 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using C4IT.Logging;
using FasdDesktopUi.Pages.RawHealthCardValuesPage;
using static C4IT.Logging.cLogManager;
namespace FasdDesktopUi.Basics.UiActions
{
public class UiShowRawHealthcardValues : cUiActionBase
{
public override async Task<bool> RunUiActionAsync(object sender, UIElement UiLocation, bool isDetailedLayout, cSupportCaseDataProvider dataProvider)
{
MethodBase CM = null; if (cLogManager.DefaultLogger.IsDebug) { CM = MethodBase.GetCurrentMethod(); LogMethodBegin(CM); }
try
{
var _rawValueWindow = new RawHealthCardValuesPage();
_rawValueWindow.Show();
return true;
}
catch (Exception E)
{
LogException(E);
}
finally
{
if (CM != null) LogMethodEnd(CM);
}
return false;
}
}
}

View File

@@ -0,0 +1,27 @@
<UserControl x:Class="FasdDesktopUi.Basics.UserControls.Badge"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:FasdDesktopUi.Basics.UserControls"
xmlns:ico="clr-namespace:FasdDesktopUi.Basics.UserControls.AdaptableIcon;assembly=F4SD-AdaptableIcon"
mc:Ignorable="d"
d:DesignHeight="20"
d:DesignWidth="40"
x:Name="BadgeControl">
<Border Background="{DynamicResource Color.F4SD}"
CornerRadius="5">
<StackPanel HorizontalAlignment="Center"
VerticalAlignment="Center"
Orientation="Horizontal"
Margin="7.5 2.5">
<TextBlock FontSize="12"
FontWeight="Bold"
Foreground="White"
Text="{Binding ElementName=BadgeControl, Path=Text}" />
</StackPanel>
</Border>
</UserControl>

View File

@@ -0,0 +1,27 @@
using F4SD_AdaptableIcon;
using FasdDesktopUi.Basics.Helper;
using System;
using System.Windows;
using System.Windows.Controls;
using static C4IT.Logging.cLogManager;
namespace FasdDesktopUi.Basics.UserControls
{
public partial class Badge : UserControl
{
public string Text
{
get { return (string)GetValue(TextProperty); }
set { SetValue(TextProperty, value); }
}
public static readonly DependencyProperty TextProperty =
DependencyProperty.Register(nameof(Text), typeof(string), typeof(Badge), new PropertyMetadata("Beta"));
public Badge()
{
InitializeComponent();
}
}
}

View File

@@ -204,6 +204,7 @@
DropDownClosed="ComboBoxControl_DropDownClosed" DropDownClosed="ComboBoxControl_DropDownClosed"
Background="{Binding ElementName=ComboBoxPagableUc, Path=ComboBoxBackground}" Background="{Binding ElementName=ComboBoxPagableUc, Path=ComboBoxBackground}"
BorderBrush="{Binding ElementName=ComboBoxPagableUc, Path=BorderBrush}" BorderBrush="{Binding ElementName=ComboBoxPagableUc, Path=BorderBrush}"
BorderThickness="{Binding ElementName=ComboBoxPagableUc, Path=BorderThickness}"
ItemsSource="{Binding ElementName=ComboBoxPagableUc, Path=ItemData}" ItemsSource="{Binding ElementName=ComboBoxPagableUc, Path=ItemData}"
SelectedItem="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:ComboBoxPageable}}, Path=SelectedItem, Mode=TwoWay}" SelectedItem="{Binding RelativeSource={RelativeSource AncestorType={x:Type local:ComboBoxPageable}}, Path=SelectedItem, Mode=TwoWay}"
DisplayMemberPath="Key" DisplayMemberPath="Key"

View File

@@ -1,5 +1,6 @@
using C4IT.FASD.Base; using C4IT.FASD.Base;
using C4IT.MultiLanguage; using C4IT.MultiLanguage;
using FasdDesktopUi.Basics.Helper;
using FasdDesktopUi.Basics.Models; using FasdDesktopUi.Basics.Models;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@@ -129,6 +130,19 @@ namespace FasdDesktopUi.Basics.UserControls
#endregion #endregion
#region RestoreParentScrollFocusOnDropDownClose
public bool RestoreParentScrollFocusOnDropDownClose
{
get { return (bool)GetValue(RestoreParentScrollFocusOnDropDownCloseProperty); }
set { SetValue(RestoreParentScrollFocusOnDropDownCloseProperty, value); }
}
public static readonly DependencyProperty RestoreParentScrollFocusOnDropDownCloseProperty =
DependencyProperty.Register("RestoreParentScrollFocusOnDropDownClose", typeof(bool), typeof(ComboBoxPageable), new PropertyMetadata(false));
#endregion
#region ItemData #region ItemData
public ObservableCollection<KeyValuePair<string, object>> ItemData public ObservableCollection<KeyValuePair<string, object>> ItemData
@@ -306,6 +320,28 @@ namespace FasdDesktopUi.Basics.UserControls
{ {
timer.Stop(); timer.Stop();
cFocusInvoker.InvokeLostFocus(this, e); cFocusInvoker.InvokeLostFocus(this, e);
if (RestoreParentScrollFocusOnDropDownClose)
{
_ = Dispatcher.BeginInvoke((Action)(() =>
{
try
{
var parentScrollViewer = cUiElementHelper.GetFirstParentOfType<ScrollViewer>(this);
Keyboard.ClearFocus();
if (parentScrollViewer != null)
{
parentScrollViewer.Focus();
Keyboard.Focus(parentScrollViewer);
}
}
catch (Exception exception)
{
LogException(exception);
}
}), System.Windows.Threading.DispatcherPriority.Input);
}
} }
private void ComboBoxControl_DropDownOpened(object sender, EventArgs e) private void ComboBoxControl_DropDownOpened(object sender, EventArgs e)

View File

@@ -169,6 +169,18 @@ namespace FasdDesktopUi.Basics.UserControls
{ {
SearchRelationGrid.Visibility = Visibility.Visible; SearchRelationGrid.Visibility = Visibility.Visible;
if (searchRelationMenuData.LastUsed == DateTime.MinValue)
{
LessThanTextBlock.Text= string.Empty;
LessThanTextBlock.Visibility = Visibility.Collapsed;
LastSeenTextBox.Visibility = Visibility.Collapsed;
ActivityIndicator.Width = 0;
ActivityIndicator.Visibility = Visibility.Collapsed;
ActivityTextBlock.Visibility = Visibility.Collapsed;
}
else
{
var lastUsedTimeSpan = DateTime.UtcNow - searchRelationMenuData.LastUsed; var lastUsedTimeSpan = DateTime.UtcNow - searchRelationMenuData.LastUsed;
LanguageDefinitionsConverter valueConverter = new LanguageDefinitionsConverter(); LanguageDefinitionsConverter valueConverter = new LanguageDefinitionsConverter();
string lastSeenText = null; string lastSeenText = null;
@@ -181,8 +193,14 @@ namespace FasdDesktopUi.Basics.UserControls
lastSeenText = valueConverter.Convert(Math.Ceiling(lastUsedTimeSpan.TotalMinutes), null, "Searchbar.LessThan.Min", null) as string; lastSeenText = valueConverter.Convert(Math.Ceiling(lastUsedTimeSpan.TotalMinutes), null, "Searchbar.LessThan.Min", null) as string;
LessThanTextBlock.Text = lastSeenText; LessThanTextBlock.Text = lastSeenText;
LessThanTextBlock.Visibility = Visibility.Visible;
LastSeenTextBox.Visibility = Visibility.Visible;
ActivityIndicator.Width = Math.Max(ActivityIndicator.Width * relationData.UsingLevel, ActivityIndicator.Width * 0.1); ActivityIndicator.Width = Math.Max(ActivityIndicator.Width * relationData.UsingLevel, ActivityIndicator.Width * 0.1);
ActivityIndicator.Visibility = Visibility.Visible;
ActivityTextBlock.Visibility = Visibility.Visible;
}
} }
} }

Some files were not shown because too many files have changed in this diff Show More