Compare commits
22 Commits
49d1259a84
...
release/m4
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4d939e9005 | ||
|
|
b8ad580ae5 | ||
|
|
e5122c677f | ||
|
|
5d5f113d89 | ||
|
|
7588f83965 | ||
|
|
ca2cf9581b | ||
|
|
8bfc3d497f | ||
|
|
edbd34de61 | ||
|
|
93d1fc20b4 | ||
|
|
a3a929e229 | ||
|
|
9521693e27 | ||
|
|
089c52fa99 | ||
|
|
10ef66ef25 | ||
|
|
28c2733e5b | ||
|
|
31d2ff8e64 | ||
|
|
a72bd5a012 | ||
|
|
a6230478d3 | ||
|
|
fc9b957591 | ||
|
|
4526b0ebe4 | ||
|
|
3124f6c97b | ||
|
|
ec9fc5fb47 | ||
|
|
7c32c816ec |
@@ -39,8 +39,8 @@ Global
|
|||||||
{EB95E1FB-7A9E-4894-BD28-2D0BE2715EBE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{EB95E1FB-7A9E-4894-BD28-2D0BE2715EBE}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{EB95E1FB-7A9E-4894-BD28-2D0BE2715EBE}.Release_and_copy|Any CPU.ActiveCfg = Release_and_copy|Any CPU
|
{EB95E1FB-7A9E-4894-BD28-2D0BE2715EBE}.Release_and_copy|Any CPU.ActiveCfg = Release_and_copy|Any CPU
|
||||||
{EB95E1FB-7A9E-4894-BD28-2D0BE2715EBE}.Release_and_copy|Any CPU.Build.0 = Release_and_copy|Any CPU
|
{EB95E1FB-7A9E-4894-BD28-2D0BE2715EBE}.Release_and_copy|Any CPU.Build.0 = Release_and_copy|Any CPU
|
||||||
{EB95E1FB-7A9E-4894-BD28-2D0BE2715EBE}.Release_signed|Any CPU.ActiveCfg = Release|Any CPU
|
{EB95E1FB-7A9E-4894-BD28-2D0BE2715EBE}.Release_signed|Any CPU.ActiveCfg = Release_signed|Any CPU
|
||||||
{EB95E1FB-7A9E-4894-BD28-2D0BE2715EBE}.Release_signed|Any CPU.Build.0 = Release|Any CPU
|
{EB95E1FB-7A9E-4894-BD28-2D0BE2715EBE}.Release_signed|Any CPU.Build.0 = Release_signed|Any CPU
|
||||||
{EB95E1FB-7A9E-4894-BD28-2D0BE2715EBE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{EB95E1FB-7A9E-4894-BD28-2D0BE2715EBE}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{EB95E1FB-7A9E-4894-BD28-2D0BE2715EBE}.Release|Any CPU.Build.0 = Release|Any CPU
|
{EB95E1FB-7A9E-4894-BD28-2D0BE2715EBE}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
|
|||||||
@@ -9,6 +9,11 @@
|
|||||||
<LangVersion>latestmajor</LangVersion>
|
<LangVersion>latestmajor</LangVersion>
|
||||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||||
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
|
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
|
||||||
|
<Configurations>Debug;Release;Debug_and_copy;Release_and_copy;Release_signed</Configurations>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<PropertyGroup Condition="'$(Configuration)' == 'Release_signed'">
|
||||||
|
<Optimize>true</Optimize>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
|
|||||||
@@ -1,2 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<configuration />
|
|
||||||
@@ -62,6 +62,25 @@ $packageJson = [regex]::Replace($packageJson, '"Version"\s*:\s*"[^"]+"', "`"Vers
|
|||||||
$packageJson = [regex]::Replace($packageJson, '"LastUpdatedDate"\s*:\s*"[^"]+"', "`"LastUpdatedDate`": `"$(Get-Date -Format 'yyyy-MM-ddTHH:mm:ss')`"")
|
$packageJson = [regex]::Replace($packageJson, '"LastUpdatedDate"\s*:\s*"[^"]+"', "`"LastUpdatedDate`": `"$(Get-Date -Format 'yyyy-MM-ddTHH:mm:ss')`"")
|
||||||
[System.IO.File]::WriteAllText($packageJsonPath, $packageJson, [System.Text.UTF8Encoding]::new($true))
|
[System.IO.File]::WriteAllText($packageJsonPath, $packageJson, [System.Text.UTF8Encoding]::new($true))
|
||||||
|
|
||||||
|
$configDataPath = Join-Path $packageDir 'install\1010_Config_Data\02-01-0080 C4IT_F4SDConfigurationType.dat'
|
||||||
|
if (-not (Test-Path -LiteralPath $configDataPath)) {
|
||||||
|
throw "Configuration data file not found: $configDataPath"
|
||||||
|
}
|
||||||
|
|
||||||
|
$configData = [System.IO.File]::ReadAllText($configDataPath)
|
||||||
|
$configData = [regex]::Replace(
|
||||||
|
$configData,
|
||||||
|
'(<C4IT_AddonConfigClassBase>[\s\S]*?<Version>)[^<]*(</Version>)',
|
||||||
|
"`${1}$PackageVersion`${2}",
|
||||||
|
[System.Text.RegularExpressions.RegexOptions]::Singleline
|
||||||
|
)
|
||||||
|
|
||||||
|
if ($configData -notmatch "<Version>$([regex]::Escape($PackageVersion))</Version>") {
|
||||||
|
throw "Could not update C4IT_F4SDConfigurationType Version to $PackageVersion in $configDataPath"
|
||||||
|
}
|
||||||
|
|
||||||
|
[System.IO.File]::WriteAllText($configDataPath, $configData, [System.Text.UTF8Encoding]::new($true))
|
||||||
|
|
||||||
$textFileExtensions = @('.json', '.xml', '.dat', '.type', '.class', '.config', '.host')
|
$textFileExtensions = @('.json', '.xml', '.dat', '.type', '.class', '.config', '.host')
|
||||||
Get-ChildItem -LiteralPath $packageDir -Recurse -File |
|
Get-ChildItem -LiteralPath $packageDir -Recurse -File |
|
||||||
Where-Object { $textFileExtensions -contains $_.Extension.ToLowerInvariant() } |
|
Where-Object { $textFileExtensions -contains $_.Extension.ToLowerInvariant() } |
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
<LangVersion>latestmajor</LangVersion>
|
<LangVersion>latestmajor</LangVersion>
|
||||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||||
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
|
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
|
||||||
|
<Configurations>Debug;Release;Debug_and_copy;Release_and_copy;Release_signed</Configurations>
|
||||||
<M42ExtensionId>6673a25d-33d6-4072-91d9-abed4be1a966</M42ExtensionId>
|
<M42ExtensionId>6673a25d-33d6-4072-91d9-abed4be1a966</M42ExtensionId>
|
||||||
<M42AssemblyPattern>C4ITF4SD*.*</M42AssemblyPattern>
|
<M42AssemblyPattern>C4ITF4SD*.*</M42AssemblyPattern>
|
||||||
<M42BuildPackage>true</M42BuildPackage>
|
<M42BuildPackage>true</M42BuildPackage>
|
||||||
|
|||||||
@@ -98,12 +98,16 @@ namespace C4IT.F4SD
|
|||||||
public async Task<F4SDHelperService.DirectLink> getDirectLinkCreateTicket([FromUri] string sid = "", [FromUri] string assetname = "")
|
public async Task<F4SDHelperService.DirectLink> getDirectLinkCreateTicket([FromUri] string sid = "", [FromUri] string assetname = "")
|
||||||
{
|
{
|
||||||
await Task.Delay(0);
|
await Task.Delay(0);
|
||||||
|
sid = QueryValue(sid, nameof(sid));
|
||||||
|
assetname = QueryValue(assetname, nameof(assetname));
|
||||||
return await _f4stHelperService.getDirectLinkCreateTicket(sid, assetname)
|
return await _f4stHelperService.getDirectLinkCreateTicket(sid, assetname)
|
||||||
?? new F4SDHelperService.DirectLink();
|
?? new F4SDHelperService.DirectLink();
|
||||||
}
|
}
|
||||||
[Route("getDirectLinkF4SD"), HttpGet]
|
[Route("getDirectLinkF4SD"), HttpGet]
|
||||||
public async Task<string> getDirectLinkF4SD([FromUri] Guid eoid, [FromUri] string type)
|
public async Task<string> getDirectLinkF4SD([FromUri] Guid eoid, [FromUri] string type)
|
||||||
{
|
{
|
||||||
|
eoid = QueryValue(eoid, nameof(eoid));
|
||||||
|
type = QueryValue(type, nameof(type));
|
||||||
return await _f4stHelperService.getDirectLinkF4SD(eoid, type) ?? string.Empty;
|
return await _f4stHelperService.getDirectLinkF4SD(eoid, type) ?? string.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -115,6 +119,10 @@ namespace C4IT.F4SD
|
|||||||
[FromUri] string queues = ""
|
[FromUri] string queues = ""
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
sid = QueryValue(sid, nameof(sid));
|
||||||
|
hours = QueryValue(hours, nameof(hours));
|
||||||
|
queueoption = QueryValue(queueoption, nameof(queueoption));
|
||||||
|
queues = QueryValue(queues, nameof(queues));
|
||||||
var decodedPairs = ParseQueues(queues);
|
var decodedPairs = ParseQueues(queues);
|
||||||
|
|
||||||
// Nun weiterreichen an Service
|
// Nun weiterreichen an Service
|
||||||
@@ -130,6 +138,7 @@ namespace C4IT.F4SD
|
|||||||
[Route("getTicketDetails"), HttpGet]
|
[Route("getTicketDetails"), HttpGet]
|
||||||
public async Task<cF4SDTicket> getTicketDetails([FromUri] Guid objectId)
|
public async Task<cF4SDTicket> getTicketDetails([FromUri] Guid objectId)
|
||||||
{
|
{
|
||||||
|
objectId = QueryValue(objectId, nameof(objectId));
|
||||||
var tickets = await _f4stHelperService.getTicketDetails(new List<Guid>() { objectId });
|
var tickets = await _f4stHelperService.getTicketDetails(new List<Guid>() { objectId });
|
||||||
if (tickets?.Count > 0)
|
if (tickets?.Count > 0)
|
||||||
return tickets[0];
|
return tickets[0];
|
||||||
@@ -140,6 +149,7 @@ namespace C4IT.F4SD
|
|||||||
[Route("getTicketHistory"), HttpGet]
|
[Route("getTicketHistory"), HttpGet]
|
||||||
public async Task<List<cTicketJournalItem>> getTicketHistory([FromUri] Guid objectId)
|
public async Task<List<cTicketJournalItem>> getTicketHistory([FromUri] Guid objectId)
|
||||||
{
|
{
|
||||||
|
objectId = QueryValue(objectId, nameof(objectId));
|
||||||
return await _f4stHelperService.GetJournalEntries(objectId) ?? new List<cTicketJournalItem>();
|
return await _f4stHelperService.GetJournalEntries(objectId) ?? new List<cTicketJournalItem>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -152,6 +162,11 @@ namespace C4IT.F4SD
|
|||||||
[FromUri] string queues = ""
|
[FromUri] string queues = ""
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
sid = QueryValue(sid, nameof(sid));
|
||||||
|
scope = QueryValue(scope, nameof(scope));
|
||||||
|
keys = QueryValue(keys, nameof(keys));
|
||||||
|
queueoption = QueryValue(queueoption, nameof(queueoption));
|
||||||
|
queues = QueryValue(queues, nameof(queues));
|
||||||
var parsedKeys = (keys ?? string.Empty)
|
var parsedKeys = (keys ?? string.Empty)
|
||||||
.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
|
.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries)
|
||||||
.Select(key => key.Trim())
|
.Select(key => key.Trim())
|
||||||
@@ -197,6 +212,12 @@ namespace C4IT.F4SD
|
|||||||
[FromUri] string queues = ""
|
[FromUri] string queues = ""
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
sid = QueryValue(sid, nameof(sid));
|
||||||
|
scope = QueryValue(scope, nameof(scope));
|
||||||
|
key = QueryValue(key, nameof(key));
|
||||||
|
count = QueryValue(count, nameof(count));
|
||||||
|
queueoption = QueryValue(queueoption, nameof(queueoption));
|
||||||
|
queues = QueryValue(queues, nameof(queues));
|
||||||
var decodedQueues = ParseQueues(queues);
|
var decodedQueues = ParseQueues(queues);
|
||||||
return await _f4stHelperService.getTicketOverviewRelations(sid, scope, key, count, queueoption, decodedQueues)
|
return await _f4stHelperService.getTicketOverviewRelations(sid, scope, key, count, queueoption, decodedQueues)
|
||||||
?? new List<F4SDHelperService.TicketOverviewRelationDto>();
|
?? new List<F4SDHelperService.TicketOverviewRelationDto>();
|
||||||
@@ -216,6 +237,9 @@ namespace C4IT.F4SD
|
|||||||
public async Task<EntityEnumeration> getPickup([FromUri] string name, [FromUri] EntityEnumerationVisibilityMode mode = EntityEnumerationVisibilityMode.None, [FromUri] Int32 group = -1)
|
public async Task<EntityEnumeration> getPickup([FromUri] string name, [FromUri] EntityEnumerationVisibilityMode mode = EntityEnumerationVisibilityMode.None, [FromUri] Int32 group = -1)
|
||||||
{
|
{
|
||||||
await Task.Delay(0);
|
await Task.Delay(0);
|
||||||
|
name = QueryValue(name, nameof(name));
|
||||||
|
mode = QueryValue(mode, nameof(mode));
|
||||||
|
group = QueryValue(group, nameof(group));
|
||||||
EntityEnumeration enumerationTemp = GetEnumeration(name, mode);
|
EntityEnumeration enumerationTemp = GetEnumeration(name, mode);
|
||||||
var vals = enumerationTemp.Values;
|
var vals = enumerationTemp.Values;
|
||||||
|
|
||||||
@@ -253,6 +277,9 @@ namespace C4IT.F4SD
|
|||||||
[Route("getRoleMemberships")]
|
[Route("getRoleMemberships")]
|
||||||
public async Task<object> getRoleMemberships([FromUri] string sid = "", [FromUri] string upn = "", [FromUri] Guid? id = null)
|
public async Task<object> getRoleMemberships([FromUri] string sid = "", [FromUri] string upn = "", [FromUri] Guid? id = null)
|
||||||
{
|
{
|
||||||
|
sid = QueryValue(sid, nameof(sid));
|
||||||
|
upn = QueryValue(upn, nameof(upn));
|
||||||
|
id = QueryValue(id, nameof(id));
|
||||||
var filter = "";
|
var filter = "";
|
||||||
|
|
||||||
if (id != null && id.Value != Guid.Empty)
|
if (id != null && id.Value != Guid.Empty)
|
||||||
@@ -374,6 +401,38 @@ namespace C4IT.F4SD
|
|||||||
?? Guid.Empty;
|
?? Guid.Empty;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private string GetQueryValue(string name)
|
||||||
|
{
|
||||||
|
return Request?.GetQueryNameValuePairs()
|
||||||
|
.FirstOrDefault(pair => string.Equals(pair.Key, name, StringComparison.OrdinalIgnoreCase))
|
||||||
|
.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
private string QueryValue(string value, string name)
|
||||||
|
{
|
||||||
|
return GetQueryValue(name) ?? value ?? string.Empty;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int QueryValue(int value, string name)
|
||||||
|
{
|
||||||
|
return int.TryParse(GetQueryValue(name), out var parsed) ? parsed : value;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Guid QueryValue(Guid value, string name)
|
||||||
|
{
|
||||||
|
return Guid.TryParse(GetQueryValue(name), out var parsed) ? parsed : value;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Guid? QueryValue(Guid? value, string name)
|
||||||
|
{
|
||||||
|
return Guid.TryParse(GetQueryValue(name), out var parsed) ? parsed : value;
|
||||||
|
}
|
||||||
|
|
||||||
|
private TEnum QueryValue<TEnum>(TEnum value, string name) where TEnum : struct
|
||||||
|
{
|
||||||
|
return Enum.TryParse<TEnum>(GetQueryValue(name), true, out var parsed) ? parsed : value;
|
||||||
|
}
|
||||||
|
|
||||||
private static List<cApiM42TicketQueueInfo> ParseQueues(string queues)
|
private static List<cApiM42TicketQueueInfo> ParseQueues(string queues)
|
||||||
{
|
{
|
||||||
return (queues ?? string.Empty)
|
return (queues ?? string.Empty)
|
||||||
@@ -398,7 +457,13 @@ namespace C4IT.F4SD
|
|||||||
[Route("isAlive"), HttpGet]
|
[Route("isAlive"), HttpGet]
|
||||||
public IHttpActionResult isAlive()
|
public IHttpActionResult isAlive()
|
||||||
{
|
{
|
||||||
return new StatusCodeResult(HttpStatusCode.NoContent);
|
var response = new HttpResponseMessage(HttpStatusCode.NoContent)
|
||||||
|
{
|
||||||
|
RequestMessage = Request
|
||||||
|
};
|
||||||
|
response.Headers.ConnectionClose = true;
|
||||||
|
|
||||||
|
return ResponseMessage(response);
|
||||||
}
|
}
|
||||||
|
|
||||||
[Route("loglevel"), HttpGet]
|
[Route("loglevel"), HttpGet]
|
||||||
@@ -409,6 +474,7 @@ namespace C4IT.F4SD
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
await Task.Delay(0);
|
await Task.Delay(0);
|
||||||
|
debug = QueryValue(debug, nameof(debug));
|
||||||
DefaultLogger.Manager.Level = debug == "1" || debug.Equals("true", StringComparison.OrdinalIgnoreCase) ? LogLevels.Debug : LogLevels.Info;
|
DefaultLogger.Manager.Level = debug == "1" || debug.Equals("true", StringComparison.OrdinalIgnoreCase) ? LogLevels.Debug : LogLevels.Info;
|
||||||
return DefaultLogger.Manager.Level.ToString();
|
return DefaultLogger.Manager.Level.ToString();
|
||||||
}
|
}
|
||||||
@@ -428,6 +494,9 @@ namespace C4IT.F4SD
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
download = QueryValue(download, nameof(download));
|
||||||
|
count = QueryValue(count, nameof(count));
|
||||||
|
filter = QueryValue(filter, nameof(filter));
|
||||||
var response = _f4stHelperService.privGetLog(download, count, Request, filter);
|
var response = _f4stHelperService.privGetLog(download, count, Request, filter);
|
||||||
if (response == null)
|
if (response == null)
|
||||||
return new StatusCodeResult(HttpStatusCode.NoContent);
|
return new StatusCodeResult(HttpStatusCode.NoContent);
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -97,8 +97,12 @@
|
|||||||
<Message Importance="High"
|
<Message Importance="High"
|
||||||
Text="Signing Matrix42 package assemblies with $(M42SignTool)." />
|
Text="Signing Matrix42 package assemblies with $(M42SignTool)." />
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<_M42AssembliesToSignArgs>@(_M42AssembliesToSign->'"%(FullPath)"', ' ')</_M42AssembliesToSignArgs>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
<Exec Condition="'@(_M42AssembliesToSign)' != ''"
|
<Exec Condition="'@(_M42AssembliesToSign)' != ''"
|
||||||
Command=""$(M42SignTool)" sign $(_M42SignCertificateArgs) /tr "$(M42SignTimestampUrl)" /td SHA256 /fd SHA256 /d "$(M42SignDescription)" "%(_M42AssembliesToSign.FullPath)"" />
|
Command=""$(M42SignTool)" sign $(_M42SignCertificateArgs) /tr "$(M42SignTimestampUrl)" /td SHA256 /fd SHA256 /d "$(M42SignDescription)" $(_M42AssembliesToSignArgs)" />
|
||||||
</Target>
|
</Target>
|
||||||
|
|
||||||
<Target Name="M42_BuildPackage"
|
<Target Name="M42_BuildPackage"
|
||||||
|
|||||||
@@ -1,9 +0,0 @@
|
|||||||
@echo off
|
|
||||||
setlocal
|
|
||||||
|
|
||||||
pushd "%~dp0.."
|
|
||||||
dotnet build "F4SDM42WebApi\F4SD - M42WebApi.csproj" -c Release /p:M42SignAssemblies=true %*
|
|
||||||
set EXITCODE=%ERRORLEVEL%
|
|
||||||
popd
|
|
||||||
|
|
||||||
exit /b %EXITCODE%
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
{
|
|
||||||
"Id": "6673a25d-33d6-4072-91d9-abed4be1a966",
|
|
||||||
"Vendor": "Consulting4IT GmbH",
|
|
||||||
"Name": "C4IT.F4SD.M42WebApi",
|
|
||||||
"Version": "1.3.0.0",
|
|
||||||
"Prerequisites": {
|
|
||||||
"MinimalRequiredProductVersion": "26.1.0",
|
|
||||||
"DependentPackages": []
|
|
||||||
},
|
|
||||||
"SetupDirectives": {
|
|
||||||
"MaintenanceMode": false,
|
|
||||||
"RecycleWebApplication": false,
|
|
||||||
"RestartM42WindowsServices": false
|
|
||||||
},
|
|
||||||
"Sandboxed": true
|
|
||||||
}
|
|
||||||
@@ -5,17 +5,20 @@
|
|||||||
<Script Major="2" Minor="1" Build="30" Type="dat" Name="0030_Navigation_C4IT_Addon_ServiceDesk.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\0000_Global\0030_Navigation_C4IT_Addon_ServiceDesk.dat" />
|
<Script Major="2" Minor="1" Build="30" Type="dat" Name="0030_Navigation_C4IT_Addon_ServiceDesk.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\0000_Global\0030_Navigation_C4IT_Addon_ServiceDesk.dat" />
|
||||||
<Script Major="2" Minor="1" Build="40" Type="dat" Name="0040_Navigation_C4IT_Addon_ServiceCatalog.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\0000_Global\0040_Navigation_C4IT_Addon_ServiceCatalog.dat" />
|
<Script Major="2" Minor="1" Build="40" Type="dat" Name="0040_Navigation_C4IT_Addon_ServiceCatalog.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\0000_Global\0040_Navigation_C4IT_Addon_ServiceCatalog.dat" />
|
||||||
<Script Major="2" Minor="1" Build="50" Type="dat" Name="02-01-0050 PLSLServiceTypeWebAPI.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\0001_WebAPIService\02-01-0050 PLSLServiceTypeWebAPI.dat" />
|
<Script Major="2" Minor="1" Build="50" Type="dat" Name="02-01-0050 PLSLServiceTypeWebAPI.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\0001_WebAPIService\02-01-0050 PLSLServiceTypeWebAPI.dat" />
|
||||||
<Script Major="2" Minor="1" Build="60" Type="dat" Name="02-01-0060 PLSLWebServiceOperationType.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\0002_WebServiceOperation\02-01-0060 PLSLWebServiceOperationType.dat" />
|
<Script Major="2" Minor="1" Build="60" Type="dat" Name="getdirectlinkcreateticket.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\0002_WebServiceOperation\getdirectlinkcreateticket.dat" />
|
||||||
<Script Major="2" Minor="1" Build="70" Type="dat" Name="02-01-0070 PLSLWebServiceOperationType.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\0002_WebServiceOperation\02-01-0070 PLSLWebServiceOperationType.dat" />
|
<Script Major="2" Minor="1" Build="70" Type="dat" Name="getdirectlinkf4sd.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\0002_WebServiceOperation\getdirectlinkf4sd.dat" />
|
||||||
<Script Major="2" Minor="1" Build="80" Type="dat" Name="02-01-0080 PLSLWebServiceOperationType.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\0002_WebServiceOperation\02-01-0080 PLSLWebServiceOperationType.dat" />
|
<Script Major="2" Minor="1" Build="80" Type="dat" Name="getlog.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\0002_WebServiceOperation\getlog.dat" />
|
||||||
<Script Major="2" Minor="1" Build="90" Type="dat" Name="02-01-0090 PLSLWebServiceOperationType.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\0002_WebServiceOperation\02-01-0090 PLSLWebServiceOperationType.dat" />
|
<Script Major="2" Minor="1" Build="90" Type="dat" Name="getticketdetails.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\0002_WebServiceOperation\getticketdetails.dat" />
|
||||||
<Script Major="2" Minor="1" Build="100" Type="dat" Name="02-01-0100 PLSLWebServiceOperationType.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\0002_WebServiceOperation\02-01-0100 PLSLWebServiceOperationType.dat" />
|
<Script Major="2" Minor="1" Build="100" Type="dat" Name="gettickethistory.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\0002_WebServiceOperation\gettickethistory.dat" />
|
||||||
<Script Major="2" Minor="1" Build="110" Type="dat" Name="02-01-0110 PLSLWebServiceOperationType.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\0002_WebServiceOperation\02-01-0110 PLSLWebServiceOperationType.dat" />
|
<Script Major="2" Minor="1" Build="110" Type="dat" Name="getticketlist.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\0002_WebServiceOperation\getticketlist.dat" />
|
||||||
<Script Major="2" Minor="1" Build="120" Type="dat" Name="02-01-0120 PLSLWebServiceOperationType.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\0002_WebServiceOperation\02-01-0120 PLSLWebServiceOperationType.dat" />
|
<Script Major="2" Minor="1" Build="120" Type="dat" Name="isalive.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\0002_WebServiceOperation\isalive.dat" />
|
||||||
<Script Major="2" Minor="1" Build="130" Type="dat" Name="02-01-0130 PLSLWebServiceOperationType.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\0002_WebServiceOperation\02-01-0130 PLSLWebServiceOperationType.dat" />
|
<Script Major="2" Minor="1" Build="130" Type="dat" Name="setdebugmode.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\0002_WebServiceOperation\setdebugmode.dat" />
|
||||||
<Script Major="2" Minor="1" Build="140" Type="dat" Name="getmyrolememberships.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\0002_WebServiceOperation\getmyrolememberships.dat" />
|
<Script Major="2" Minor="1" Build="140" Type="dat" Name="getmyrolememberships.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\0002_WebServiceOperation\getmyrolememberships.dat" />
|
||||||
<Script Major="2" Minor="1" Build="150" Type="dat" Name="getpickup.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\0002_WebServiceOperation\getpickup.dat" />
|
<Script Major="2" Minor="1" Build="150" Type="dat" Name="getpickup.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\0002_WebServiceOperation\getpickup.dat" />
|
||||||
<Script Major="2" Minor="1" Build="160" Type="dat" Name="getrolememberships.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\0002_WebServiceOperation\getrolememberships.dat" />
|
<Script Major="2" Minor="1" Build="160" Type="dat" Name="getrolememberships.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\0002_WebServiceOperation\getrolememberships.dat" />
|
||||||
|
<Script Major="2" Minor="1" Build="161" Type="dat" Name="getticketoverviewcounts.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\0002_WebServiceOperation\getticketoverviewcounts.dat" />
|
||||||
|
<Script Major="2" Minor="1" Build="162" Type="dat" Name="getticketoverviewcountsbyroles.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\0002_WebServiceOperation\getticketoverviewcountsbyroles.dat" />
|
||||||
|
<Script Major="2" Minor="1" Build="163" Type="dat" Name="getticketoverviewrelations.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\0002_WebServiceOperation\getticketoverviewrelations.dat" />
|
||||||
<Script Major="2" Minor="1" Build="170" Type="dat" Name="02-01-0150 PDRActionType.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\0003_UUXActions\02-01-0150 PDRActionType.dat" />
|
<Script Major="2" Minor="1" Build="170" Type="dat" Name="02-01-0150 PDRActionType.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\0003_UUXActions\02-01-0150 PDRActionType.dat" />
|
||||||
<Script Major="2" Minor="1" Build="180" Type="dat" Name="02-01-0160 PDRActionType.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\0003_UUXActions\02-01-0160 PDRActionType.dat" />
|
<Script Major="2" Minor="1" Build="180" Type="dat" Name="02-01-0160 PDRActionType.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\0003_UUXActions\02-01-0160 PDRActionType.dat" />
|
||||||
<Script Major="2" Minor="1" Build="190" Type="dat" Name="02-01-0170 PDRActionType.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\0003_UUXActions\02-01-0170 PDRActionType.dat" />
|
<Script Major="2" Minor="1" Build="190" Type="dat" Name="02-01-0170 PDRActionType.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\0003_UUXActions\02-01-0170 PDRActionType.dat" />
|
||||||
@@ -42,4 +45,4 @@
|
|||||||
<Script Major="2" Minor="1" Build="400" Type="dat" Name="Ticket.Transform_Audience.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\1090_Audience\Ticket.Transform_Audience.dat" />
|
<Script Major="2" Minor="1" Build="400" Type="dat" Name="Ticket.Transform_Audience.dat" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\1090_Audience\Ticket.Transform_Audience.dat" />
|
||||||
<Script Major="2" Minor="1" Build="410" Type="type" Name="02-01-0020 C4IT_F4SDConfigurationType_create-C4IT_F4SDConfigurationType.type" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\ZZZ_SchemaUpdates\02-01-0020 C4IT_F4SDConfigurationType_create-C4IT_F4SDConfigurationType.type" />
|
<Script Major="2" Minor="1" Build="410" Type="type" Name="02-01-0020 C4IT_F4SDConfigurationType_create-C4IT_F4SDConfigurationType.type" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\ZZZ_SchemaUpdates\02-01-0020 C4IT_F4SDConfigurationType_create-C4IT_F4SDConfigurationType.type" />
|
||||||
<Script Major="2" Minor="1" Build="420" Type="class" Name="C4IT_AddonConfigClassBase-C4IT_AddonConfigClassBase.class" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\ZZZ_SchemaUpdates\C4IT_AddonConfigClassBase-C4IT_AddonConfigClassBase.class" />
|
<Script Major="2" Minor="1" Build="420" Type="class" Name="C4IT_AddonConfigClassBase-C4IT_AddonConfigClassBase.class" PackageVersion="1.4" Mode="Merge" Register="false" FilePath="install\ZZZ_SchemaUpdates\C4IT_AddonConfigClassBase-C4IT_AddonConfigClassBase.class" />
|
||||||
</SchemaScripts>
|
</SchemaScripts>
|
||||||
|
|||||||
@@ -137,8 +137,9 @@
|
|||||||
</xs:schema>
|
</xs:schema>
|
||||||
<PLSLWebServiceOperation>
|
<PLSLWebServiceOperation>
|
||||||
<ID>b3193051-6fe6-cdd2-7d76-08da9bbec2b6</ID>
|
<ID>b3193051-6fe6-cdd2-7d76-08da9bbec2b6</ID>
|
||||||
<RequestContract>{"UsedTypes":{"RequestContract":{"Descriptor":{"sid":{"Type":"StringType"},"assetname":{"Type":"StringType"}}}},"ContractDescriptor":{"ReferenceTo":null,"ReferenceFilter":null,"Required":false,"Obsolete":false,"MaxLength":0,"ResourceKey":null,"Documentation":null,"Title":null,"Paths":null,"Type":"RequestContract"}}</RequestContract>
|
<ResponseContract>{"UsedTypes":{"C4IT_F4SD_F4SDHelperService+DirectLink":{"Descriptor":{"Link":{"Type":"StringType"},"SubjectParameter":{"Type":"StringType"},"DescriptionParameter":{"Type":"StringType"}}}},"ContractDescriptor":{"ReturnCountType":"NotProvided","Documentation":"Return value","Type":"C4IT_F4SD_F4SDHelperService+DirectLink"}}</ResponseContract>
|
||||||
<Name>getDirectLinkCreateTicket(sid, assetname)</Name>
|
<RequestContract>{"UsedTypes":{"RequestContract":{"Descriptor":{"sid":{"Type":"StringType","Source":0},"assetname":{"Type":"StringType","Source":0}}}},"ContractDescriptor":{"Type":"RequestContract"}}</RequestContract>
|
||||||
|
<Name>getDirectLinkCreateTicket(sid,assetname)</Name>
|
||||||
<RouteTemplate>getDirectLinkCreateTicket</RouteTemplate>
|
<RouteTemplate>getDirectLinkCreateTicket</RouteTemplate>
|
||||||
<Documentation />
|
<Documentation />
|
||||||
<TypeID>7660e907-769c-e711-a182-f079595b3ec7</TypeID>
|
<TypeID>7660e907-769c-e711-a182-f079595b3ec7</TypeID>
|
||||||
@@ -137,8 +137,9 @@
|
|||||||
</xs:schema>
|
</xs:schema>
|
||||||
<PLSLWebServiceOperation>
|
<PLSLWebServiceOperation>
|
||||||
<ID>04d0755f-27dd-c4ac-2785-08dac1666661</ID>
|
<ID>04d0755f-27dd-c4ac-2785-08dac1666661</ID>
|
||||||
<RequestContract>{"UsedTypes":{"RequestContract":{"Descriptor":{"eoid":{"Type":"StringType"},"type":{"Type":"StringType"}}}},"ContractDescriptor":{"ReferenceTo":null,"ReferenceFilter":null,"Required":false,"Obsolete":false,"MaxLength":0,"ResourceKey":null,"Documentation":null,"Title":null,"Paths":null,"Type":"RequestContract"}}</RequestContract>
|
<ResponseContract>{"UsedTypes":{},"ContractDescriptor":{"ReturnCountType":"NotProvided","Documentation":"Return value","Type":"StringType"}}</ResponseContract>
|
||||||
<Name>getDirectLinkF4SD(eoid, type)</Name>
|
<RequestContract>{"UsedTypes":{"RequestContract":{"Descriptor":{"eoid":{"Type":"GuidType","Source":0},"type":{"Type":"StringType","Source":0}}}},"ContractDescriptor":{"Type":"RequestContract"}}</RequestContract>
|
||||||
|
<Name>getDirectLinkF4SD(eoid,type)</Name>
|
||||||
<RouteTemplate>getDirectLinkF4SD</RouteTemplate>
|
<RouteTemplate>getDirectLinkF4SD</RouteTemplate>
|
||||||
<Documentation />
|
<Documentation />
|
||||||
<TypeID>7660e907-769c-e711-a182-f079595b3ec7</TypeID>
|
<TypeID>7660e907-769c-e711-a182-f079595b3ec7</TypeID>
|
||||||
@@ -137,8 +137,9 @@
|
|||||||
</xs:schema>
|
</xs:schema>
|
||||||
<PLSLWebServiceOperation>
|
<PLSLWebServiceOperation>
|
||||||
<ID>f977a1d8-f21c-c1bc-4ea0-08dac09d3c99</ID>
|
<ID>f977a1d8-f21c-c1bc-4ea0-08dac09d3c99</ID>
|
||||||
<RequestContract>{"UsedTypes":{"RequestContract":{"Descriptor":{"download":{"Type":"StringType"},"count":{"Type":"StringType"},"filter":{"Type":"StringType"}}}},"ContractDescriptor":{"ReferenceTo":null,"ReferenceFilter":null,"Required":false,"Obsolete":false,"MaxLength":0,"ResourceKey":null,"Documentation":null,"Title":null,"Paths":null,"Type":"RequestContract"}}</RequestContract>
|
<ResponseContract>{"UsedTypes":{},"ContractDescriptor":{"ReturnCountType":"NotProvided","Documentation":"Return value","Type":"Matrix42_WebApi_Contracts_IHttpActionResult"}}</ResponseContract>
|
||||||
<Name>getLog(download, count, filter)</Name>
|
<RequestContract>{"UsedTypes":{"RequestContract":{"Descriptor":{"download":{"Type":"StringType","Source":0},"count":{"Type":"IntType","Source":0},"filter":{"Type":"StringType","Source":0}}}},"ContractDescriptor":{"Type":"RequestContract"}}</RequestContract>
|
||||||
|
<Name>getLog(download,count,filter)</Name>
|
||||||
<RouteTemplate>log</RouteTemplate>
|
<RouteTemplate>log</RouteTemplate>
|
||||||
<Documentation />
|
<Documentation />
|
||||||
<TypeID>7660e907-769c-e711-a182-f079595b3ec7</TypeID>
|
<TypeID>7660e907-769c-e711-a182-f079595b3ec7</TypeID>
|
||||||
@@ -137,8 +137,9 @@
|
|||||||
</xs:schema>
|
</xs:schema>
|
||||||
<PLSLWebServiceOperation>
|
<PLSLWebServiceOperation>
|
||||||
<ID>6cec89ab-b843-cd6b-d6b5-08db99ad32ee</ID>
|
<ID>6cec89ab-b843-cd6b-d6b5-08db99ad32ee</ID>
|
||||||
<RequestContract>{"UsedTypes":{},"ContractDescriptor":{"ReferenceTo":null,"ReferenceFilter":null,"Required":false,"Obsolete":false,"MaxLength":0,"ResourceKey":null,"Documentation":null,"Title":null,"Paths":null,"Type":"RequestContract"}}</RequestContract>
|
<ResponseContract>{"UsedTypes":{},"ContractDescriptor":{"ReturnCountType":"NotProvided","Documentation":"Return value","Type":"System_Object"}}</ResponseContract>
|
||||||
<Name>getMyRoleMemberships</Name>
|
<RequestContract>{"UsedTypes":{},"ContractDescriptor":{"Type":"RequestContract"}}</RequestContract>
|
||||||
|
<Name>getMyRoleMemberships()</Name>
|
||||||
<RouteTemplate>getMyRoleMemberships</RouteTemplate>
|
<RouteTemplate>getMyRoleMemberships</RouteTemplate>
|
||||||
<Documentation />
|
<Documentation />
|
||||||
<TypeID>7660e907-769c-e711-a182-f079595b3ec7</TypeID>
|
<TypeID>7660e907-769c-e711-a182-f079595b3ec7</TypeID>
|
||||||
|
|||||||
@@ -137,8 +137,9 @@
|
|||||||
</xs:schema>
|
</xs:schema>
|
||||||
<PLSLWebServiceOperation>
|
<PLSLWebServiceOperation>
|
||||||
<ID>ef14b892-628c-c1c1-801f-08db99ad32e9</ID>
|
<ID>ef14b892-628c-c1c1-801f-08db99ad32e9</ID>
|
||||||
<RequestContract>{"UsedTypes":{"RequestContract":{"Descriptor":{"name":{"Type":"StringType"},"mode":{"Type":"StringType"},"group":{"Type":"StringType"}}}},"ContractDescriptor":{"ReferenceTo":null,"ReferenceFilter":null,"Required":false,"Obsolete":false,"MaxLength":0,"ResourceKey":null,"Documentation":null,"Title":null,"Paths":null,"Type":"RequestContract"}}</RequestContract>
|
<ResponseContract>{"UsedTypes":{"Matrix42_Pandora_Contracts_EntityEnumeration":{"Documentation":"Describes Entity Enumeration","Descriptor":{"Name":{"Documentation":"Technical name of the Enumeration","Type":"StringType"},"Values":{"Documentation":"Enumeration Values","Type":["Matrix42_Pandora_Contracts_EntityEnumerationValue"]}},"DisplayName":"Name"},"Matrix42_Pandora_Contracts_EntityEnumerationValue":{"Documentation":"Represents a single value in Entity Enumeration","Descriptor":{"Value":{"Documentation":"Gets or sets a value","Type":"IntType"},"DisplayString":{"Documentation":"Gets or sets the display string for Enumeration Value","Type":"StringType"},"Hidden":{"Documentation":"Gets or sets a Hidden attribute","Type":"BoolType"},"Extentions":{"Documentation":"Additional pickup value attributes","Type":["StringType"]}}}},"ContractDescriptor":{"ReturnCountType":"NotProvided","Documentation":"Return value","Type":"Matrix42_Pandora_Contracts_EntityEnumeration"}}</ResponseContract>
|
||||||
<Name>getPickup(name, mode, group)</Name>
|
<RequestContract>{"UsedTypes":{"RequestContract":{"Descriptor":{"name":{"Type":"StringType","Source":0},"mode":{"Type":"IntType","Source":0},"group":{"Type":"IntType","Source":0}}}},"ContractDescriptor":{"Type":"RequestContract"}}</RequestContract>
|
||||||
|
<Name>getPickup(name,mode,group)</Name>
|
||||||
<RouteTemplate>getPickup/{name}</RouteTemplate>
|
<RouteTemplate>getPickup/{name}</RouteTemplate>
|
||||||
<Documentation />
|
<Documentation />
|
||||||
<TypeID>7660e907-769c-e711-a182-f079595b3ec7</TypeID>
|
<TypeID>7660e907-769c-e711-a182-f079595b3ec7</TypeID>
|
||||||
|
|||||||
@@ -137,8 +137,9 @@
|
|||||||
</xs:schema>
|
</xs:schema>
|
||||||
<PLSLWebServiceOperation>
|
<PLSLWebServiceOperation>
|
||||||
<ID>06747fe1-8113-c51f-4969-08db99ad32f1</ID>
|
<ID>06747fe1-8113-c51f-4969-08db99ad32f1</ID>
|
||||||
<RequestContract>{"UsedTypes":{"RequestContract":{"Descriptor":{"sid":{"Type":"StringType"},"upn":{"Type":"StringType"},"id":{"Type":"StringType"}}}},"ContractDescriptor":{"ReferenceTo":null,"ReferenceFilter":null,"Required":false,"Obsolete":false,"MaxLength":0,"ResourceKey":null,"Documentation":null,"Title":null,"Paths":null,"Type":"RequestContract"}}</RequestContract>
|
<ResponseContract>{"UsedTypes":{},"ContractDescriptor":{"ReturnCountType":"NotProvided","Documentation":"Return value","Type":"System_Object"}}</ResponseContract>
|
||||||
<Name>getRoleMemberships(sid, upn, id)</Name>
|
<RequestContract>{"UsedTypes":{"RequestContract":{"Descriptor":{"sid":{"Type":"StringType","Source":0},"upn":{"Type":"StringType","Source":0},"id":{"Type":"GuidType","Source":0}}}},"ContractDescriptor":{"Type":"RequestContract"}}</RequestContract>
|
||||||
|
<Name>getRoleMemberships(sid,upn,id)</Name>
|
||||||
<RouteTemplate>getRoleMemberships</RouteTemplate>
|
<RouteTemplate>getRoleMemberships</RouteTemplate>
|
||||||
<Documentation />
|
<Documentation />
|
||||||
<TypeID>7660e907-769c-e711-a182-f079595b3ec7</TypeID>
|
<TypeID>7660e907-769c-e711-a182-f079595b3ec7</TypeID>
|
||||||
|
|||||||
@@ -0,0 +1,159 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<NewDataSet>
|
||||||
|
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:choice minOccurs="0" maxOccurs="unbounded">
|
||||||
|
<xs:element name="PLSLWebServiceOperation">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="ID" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" />
|
||||||
|
<xs:element name="ResponseContract" minOccurs="0">
|
||||||
|
<xs:simpleType>
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:maxLength value="2147483647" />
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="RequestContract" minOccurs="0">
|
||||||
|
<xs:simpleType>
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:maxLength value="2147483647" />
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="Name" minOccurs="0">
|
||||||
|
<xs:simpleType>
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:maxLength value="1000" />
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="RouteTemplate" minOccurs="0">
|
||||||
|
<xs:simpleType>
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:maxLength value="1000" />
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="Documentation" minOccurs="0">
|
||||||
|
<xs:simpleType>
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:maxLength value="2147483647" />
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="TypeID" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="Service" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" />
|
||||||
|
<xs:element name="SupportedOperation" type="xs:int" minOccurs="0" />
|
||||||
|
<xs:element name="Type" type="xs:int" minOccurs="0" />
|
||||||
|
<xs:element name="IsPublic" type="xs:unsignedByte" />
|
||||||
|
<xs:element name="DocumentationLink" minOccurs="0">
|
||||||
|
<xs:simpleType>
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:maxLength value="1000" />
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="PDRAudienceClass">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="ID" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" />
|
||||||
|
<xs:element name="UsedInTypePDRContentWidgetTypeDialog" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="UsedInTypePDRContentWidgetTypeObjectDetails" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="UsedInTypePDRDataQueryFilterType" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="Unrestricted" type="xs:unsignedByte" />
|
||||||
|
<xs:element name="Configured" type="xs:unsignedByte" />
|
||||||
|
<xs:element name="UsedInTypePDRActionType" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="UsedInTypePDRNavigationItemType" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="ConsiderRelated" type="xs:unsignedByte" />
|
||||||
|
<xs:element name="UsedInTypePLSLWebServiceOperationType" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="UsedInTypePLSLServiceTypeWebAPI" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="UsedInTypePDRContentWidgetTemplateViewType" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="UsedInTypeSVMEmailSignatureType" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="StrictAdminControl" type="xs:unsignedByte" />
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="SchemaRelation-PDRAudienceClass2PDRAudienceClass">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="ID" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="InheritedFrom" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="ApplyTo" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="SchemaRelation-PDRAudienceClass2SPSUserClassBase">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="ID" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="Users" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="Audiences" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="SchemaRelation-PDRAudienceClass2SPSSecurityClassRole">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="ID" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="Audiences" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="Roles" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="SchemaRelation-PDRAudienceClass2SPSOrgUnitClassBase">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="ID" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="Audiences" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="OUs" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="SchemaRelation-PDRAudienceClass2SPSLocationClassBase">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="ID" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="Audiences" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="Locations" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:choice>
|
||||||
|
</xs:complexType>
|
||||||
|
<xs:unique name="Constraint1" msdata:PrimaryKey="true">
|
||||||
|
<xs:selector xpath=".//PLSLWebServiceOperation" />
|
||||||
|
<xs:field xpath="ID" />
|
||||||
|
</xs:unique>
|
||||||
|
<xs:unique name="PDRAudienceClass_Constraint1" msdata:ConstraintName="Constraint1" msdata:PrimaryKey="true">
|
||||||
|
<xs:selector xpath=".//PDRAudienceClass" />
|
||||||
|
<xs:field xpath="ID" />
|
||||||
|
</xs:unique>
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
||||||
|
<PLSLWebServiceOperation>
|
||||||
|
<ID>750c8dc4-ada0-c1b0-c877-08da9bbec2e3</ID>
|
||||||
|
<ResponseContract>{"UsedTypes":{"C4IT_FASD_Base_cF4SDTicket":{"Descriptor":{"AffectedUserId":{"Type":"GuidType"},"AssetId":{"Type":"GuidType"},"CreationDate":{"Type":"DateType"},"ClosingDate":{"Type":"DateType"},"CreationSourceId":{"Type":"IntType"},"CreationSource":{"Type":"StringType"},"Description":{"Type":"StringType"},"DescriptionHtml":{"Type":"StringType"},"PriorityId":{"Type":"IntType"},"Priority":{"Type":"StringType"},"CategoryId":{"Type":"GuidType"},"Category":{"Type":"StringType"},"CategoryHierarchical":{"Type":"StringType"},"CIName":{"Type":"StringType"},"DirectLinkEdit":{"Type":"StringType"},"AssetCIId":{"Type":"GuidType"},"AssetSKUAssetGroupId":{"Type":"IntType"},"AssetSKUAssetGroup":{"Type":"StringType"},"AssetSKUTypeId":{"Type":"IntType"},"AssetSKUType":{"Type":"StringType"},"DirectLinkPreview":{"Type":"StringType"},"DirectLinkClose":{"Type":"StringType"},"AffectedUser":{"Type":"StringType"},"SolutionHtml":{"Type":"StringType"},"Solution":{"Type":"StringType"},"AssetDomain":{"Type":"StringType"},"TicketObjectId":{"Type":"GuidType"},"Name":{"Type":"StringType"},"ActivityType":{"Type":"StringType"},"Summary":{"Type":"StringType"},"Sid":{"Type":"StringType"},"Status":{"Type":"StringType"},"StatusId":{"Type":"IntType"},"Urgency":{"Type":"StringType"},"UrgencyId":{"Type":"IntType"},"Impact":{"Type":"StringType"},"ImpactId":{"Type":"IntType"},"AssetCIName":{"Type":"StringType"},"AssetName":{"Type":"StringType"},"ServiceName":{"Type":"StringType"},"ServiceId":{"Type":"GuidType"},"IsPrimaryAccount":{"Type":"BoolType"}},"DisplayName":"Name"}},"ContractDescriptor":{"ReturnCountType":"NotProvided","Documentation":"Return value","Type":"C4IT_FASD_Base_cF4SDTicket"}}</ResponseContract>
|
||||||
|
<RequestContract>{"UsedTypes":{"RequestContract":{"Descriptor":{"objectId":{"Type":"GuidType","Source":0}}}},"ContractDescriptor":{"Type":"RequestContract"}}</RequestContract>
|
||||||
|
<Name>getTicketDetails(objectId)</Name>
|
||||||
|
<RouteTemplate>getTicketDetails</RouteTemplate>
|
||||||
|
<Documentation />
|
||||||
|
<TypeID>7660e907-769c-e711-a182-f079595b3ec7</TypeID>
|
||||||
|
<Service>dcd66369-4933-ed11-1b9c-e3e293f5401c</Service>
|
||||||
|
<SupportedOperation>0</SupportedOperation>
|
||||||
|
<Type>1</Type>
|
||||||
|
<IsPublic>0</IsPublic>
|
||||||
|
</PLSLWebServiceOperation>
|
||||||
|
<PDRAudienceClass>
|
||||||
|
<ID>336febdb-9a39-ed11-209c-b0c4b3911a8e</ID>
|
||||||
|
<Unrestricted>1</Unrestricted>
|
||||||
|
<Configured>1</Configured>
|
||||||
|
<ConsiderRelated>0</ConsiderRelated>
|
||||||
|
<UsedInTypePLSLWebServiceOperationType>750c8dc4-ada0-c1b0-c877-08da9bbec2e3</UsedInTypePLSLWebServiceOperationType>
|
||||||
|
<StrictAdminControl>0</StrictAdminControl>
|
||||||
|
</PDRAudienceClass>
|
||||||
|
</NewDataSet>
|
||||||
@@ -137,7 +137,8 @@
|
|||||||
</xs:schema>
|
</xs:schema>
|
||||||
<PLSLWebServiceOperation>
|
<PLSLWebServiceOperation>
|
||||||
<ID>94d0317f-a8db-caf0-a353-08da9bbec2dc</ID>
|
<ID>94d0317f-a8db-caf0-a353-08da9bbec2dc</ID>
|
||||||
<RequestContract>{"UsedTypes":{"RequestContract":{"Descriptor":{"objectId":{"Type":"StringType"}}}},"ContractDescriptor":{"ReferenceTo":null,"ReferenceFilter":null,"Required":false,"Obsolete":false,"MaxLength":0,"ResourceKey":null,"Documentation":null,"Title":null,"Paths":null,"Type":"RequestContract"}}</RequestContract>
|
<ResponseContract>{"UsedTypes":{},"ContractDescriptor":{"ReturnCountType":"NotProvided","Documentation":"Return value","Type":"System_Collections_Generic_List`1[C4IT_FASD_Base_cF4SDTicket+cTicketJournalItem]"}}</ResponseContract>
|
||||||
|
<RequestContract>{"UsedTypes":{"RequestContract":{"Descriptor":{"objectId":{"Type":"GuidType","Source":0}}}},"ContractDescriptor":{"Type":"RequestContract"}}</RequestContract>
|
||||||
<Name>getTicketHistory(objectId)</Name>
|
<Name>getTicketHistory(objectId)</Name>
|
||||||
<RouteTemplate>getTicketHistory</RouteTemplate>
|
<RouteTemplate>getTicketHistory</RouteTemplate>
|
||||||
<Documentation />
|
<Documentation />
|
||||||
@@ -137,8 +137,9 @@
|
|||||||
</xs:schema>
|
</xs:schema>
|
||||||
<PLSLWebServiceOperation>
|
<PLSLWebServiceOperation>
|
||||||
<ID>163e04c2-8b5c-c0e6-0535-08da9bbec2df</ID>
|
<ID>163e04c2-8b5c-c0e6-0535-08da9bbec2df</ID>
|
||||||
<RequestContract>{"UsedTypes":{"RequestContract":{"Descriptor":{"sid":{"Type":"StringType"},"hours":{"Type":"StringType"},"queueoption":{"Type":"StringType"},"queues":{"Type":"StringType"}}}},"ContractDescriptor":{"ReferenceTo":null,"ReferenceFilter":null,"Required":false,"Obsolete":false,"MaxLength":0,"ResourceKey":null,"Documentation":null,"Title":null,"Paths":null,"Type":"RequestContract"}}</RequestContract>
|
<ResponseContract>{"UsedTypes":{},"ContractDescriptor":{"ReturnCountType":"NotProvided","Documentation":"Return value","Type":"System_Collections_Generic_List`1[C4IT_FASD_Base_cF4SDTicketSummary]"}}</ResponseContract>
|
||||||
<Name>getTicketList(sid, hours, queueoption, queues)</Name>
|
<RequestContract>{"UsedTypes":{"RequestContract":{"Descriptor":{"sid":{"Type":"StringType","Source":0},"hours":{"Type":"IntType","Source":0},"queueoption":{"Type":"IntType","Source":0},"queues":{"Type":"StringType","Source":0}}}},"ContractDescriptor":{"Type":"RequestContract"}}</RequestContract>
|
||||||
|
<Name>getTicketList(sid,hours,queueoption,queues)</Name>
|
||||||
<RouteTemplate>getTicketList</RouteTemplate>
|
<RouteTemplate>getTicketList</RouteTemplate>
|
||||||
<Documentation />
|
<Documentation />
|
||||||
<TypeID>7660e907-769c-e711-a182-f079595b3ec7</TypeID>
|
<TypeID>7660e907-769c-e711-a182-f079595b3ec7</TypeID>
|
||||||
@@ -0,0 +1,159 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<NewDataSet>
|
||||||
|
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:choice minOccurs="0" maxOccurs="unbounded">
|
||||||
|
<xs:element name="PLSLWebServiceOperation">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="ID" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" />
|
||||||
|
<xs:element name="ResponseContract" minOccurs="0">
|
||||||
|
<xs:simpleType>
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:maxLength value="2147483647" />
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="RequestContract" minOccurs="0">
|
||||||
|
<xs:simpleType>
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:maxLength value="2147483647" />
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="Name" minOccurs="0">
|
||||||
|
<xs:simpleType>
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:maxLength value="1000" />
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="RouteTemplate" minOccurs="0">
|
||||||
|
<xs:simpleType>
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:maxLength value="1000" />
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="Documentation" minOccurs="0">
|
||||||
|
<xs:simpleType>
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:maxLength value="2147483647" />
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="TypeID" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="Service" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" />
|
||||||
|
<xs:element name="SupportedOperation" type="xs:int" minOccurs="0" />
|
||||||
|
<xs:element name="Type" type="xs:int" minOccurs="0" />
|
||||||
|
<xs:element name="IsPublic" type="xs:unsignedByte" />
|
||||||
|
<xs:element name="DocumentationLink" minOccurs="0">
|
||||||
|
<xs:simpleType>
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:maxLength value="1000" />
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="PDRAudienceClass">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="ID" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" />
|
||||||
|
<xs:element name="UsedInTypePDRContentWidgetTypeDialog" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="UsedInTypePDRContentWidgetTypeObjectDetails" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="UsedInTypePDRDataQueryFilterType" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="Unrestricted" type="xs:unsignedByte" />
|
||||||
|
<xs:element name="Configured" type="xs:unsignedByte" />
|
||||||
|
<xs:element name="UsedInTypePDRActionType" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="UsedInTypePDRNavigationItemType" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="ConsiderRelated" type="xs:unsignedByte" />
|
||||||
|
<xs:element name="UsedInTypePLSLWebServiceOperationType" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="UsedInTypePLSLServiceTypeWebAPI" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="UsedInTypePDRContentWidgetTemplateViewType" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="UsedInTypeSVMEmailSignatureType" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="StrictAdminControl" type="xs:unsignedByte" />
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="SchemaRelation-PDRAudienceClass2PDRAudienceClass">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="ID" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="InheritedFrom" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="ApplyTo" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="SchemaRelation-PDRAudienceClass2SPSUserClassBase">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="ID" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="Users" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="Audiences" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="SchemaRelation-PDRAudienceClass2SPSSecurityClassRole">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="ID" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="Audiences" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="Roles" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="SchemaRelation-PDRAudienceClass2SPSOrgUnitClassBase">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="ID" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="Audiences" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="OUs" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="SchemaRelation-PDRAudienceClass2SPSLocationClassBase">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="ID" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="Audiences" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="Locations" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:choice>
|
||||||
|
</xs:complexType>
|
||||||
|
<xs:unique name="Constraint1" msdata:PrimaryKey="true">
|
||||||
|
<xs:selector xpath=".//PLSLWebServiceOperation" />
|
||||||
|
<xs:field xpath="ID" />
|
||||||
|
</xs:unique>
|
||||||
|
<xs:unique name="PDRAudienceClass_Constraint1" msdata:ConstraintName="Constraint1" msdata:PrimaryKey="true">
|
||||||
|
<xs:selector xpath=".//PDRAudienceClass" />
|
||||||
|
<xs:field xpath="ID" />
|
||||||
|
</xs:unique>
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
||||||
|
<PLSLWebServiceOperation>
|
||||||
|
<ID>99eef84e-a303-c248-36c5-08ded882fc6c</ID>
|
||||||
|
<ResponseContract>{"UsedTypes":{"C4IT_F4SD_F4SDHelperService+TicketOverviewCountsResult":{"Descriptor":{"Counts":{"Type":["StringType"]}}}},"ContractDescriptor":{"ReturnCountType":"NotProvided","Documentation":"Return value","Type":"C4IT_F4SD_F4SDHelperService+TicketOverviewCountsResult"}}</ResponseContract>
|
||||||
|
<RequestContract>{"UsedTypes":{"RequestContract":{"Descriptor":{"sid":{"Type":"StringType","Source":0},"scope":{"Type":"StringType","Source":0},"keys":{"Type":"StringType","Source":0},"queueoption":{"Type":"IntType","Source":0},"queues":{"Type":"StringType","Source":0}}}},"ContractDescriptor":{"Type":"RequestContract"}}</RequestContract>
|
||||||
|
<Name>getTicketOverviewCounts(sid,scope,keys,queueoption,queues)</Name>
|
||||||
|
<RouteTemplate>getTicketOverviewCounts</RouteTemplate>
|
||||||
|
<Documentation />
|
||||||
|
<TypeID>7660e907-769c-e711-a182-f079595b3ec7</TypeID>
|
||||||
|
<Service>dcd66369-4933-ed11-1b9c-e3e293f5401c</Service>
|
||||||
|
<SupportedOperation>0</SupportedOperation>
|
||||||
|
<Type>1</Type>
|
||||||
|
<IsPublic>0</IsPublic>
|
||||||
|
</PLSLWebServiceOperation>
|
||||||
|
<PDRAudienceClass>
|
||||||
|
<ID>82d8de08-6cfc-1483-6bfa-da4b9403a82d</ID>
|
||||||
|
<Unrestricted>1</Unrestricted>
|
||||||
|
<Configured>1</Configured>
|
||||||
|
<ConsiderRelated>0</ConsiderRelated>
|
||||||
|
<UsedInTypePLSLWebServiceOperationType>99eef84e-a303-c248-36c5-08ded882fc6c</UsedInTypePLSLWebServiceOperationType>
|
||||||
|
<StrictAdminControl>0</StrictAdminControl>
|
||||||
|
</PDRAudienceClass>
|
||||||
|
</NewDataSet>
|
||||||
@@ -0,0 +1,159 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<NewDataSet>
|
||||||
|
<xs:schema id="NewDataSet" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
||||||
|
<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:choice minOccurs="0" maxOccurs="unbounded">
|
||||||
|
<xs:element name="PLSLWebServiceOperation">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="ID" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" />
|
||||||
|
<xs:element name="ResponseContract" minOccurs="0">
|
||||||
|
<xs:simpleType>
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:maxLength value="2147483647" />
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="RequestContract" minOccurs="0">
|
||||||
|
<xs:simpleType>
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:maxLength value="2147483647" />
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="Name" minOccurs="0">
|
||||||
|
<xs:simpleType>
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:maxLength value="1000" />
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="RouteTemplate" minOccurs="0">
|
||||||
|
<xs:simpleType>
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:maxLength value="1000" />
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="Documentation" minOccurs="0">
|
||||||
|
<xs:simpleType>
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:maxLength value="2147483647" />
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="TypeID" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="Service" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" />
|
||||||
|
<xs:element name="SupportedOperation" type="xs:int" minOccurs="0" />
|
||||||
|
<xs:element name="Type" type="xs:int" minOccurs="0" />
|
||||||
|
<xs:element name="IsPublic" type="xs:unsignedByte" />
|
||||||
|
<xs:element name="DocumentationLink" minOccurs="0">
|
||||||
|
<xs:simpleType>
|
||||||
|
<xs:restriction base="xs:string">
|
||||||
|
<xs:maxLength value="1000" />
|
||||||
|
</xs:restriction>
|
||||||
|
</xs:simpleType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="PDRAudienceClass">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="ID" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" />
|
||||||
|
<xs:element name="UsedInTypePDRContentWidgetTypeDialog" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="UsedInTypePDRContentWidgetTypeObjectDetails" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="UsedInTypePDRDataQueryFilterType" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="Unrestricted" type="xs:unsignedByte" />
|
||||||
|
<xs:element name="Configured" type="xs:unsignedByte" />
|
||||||
|
<xs:element name="UsedInTypePDRActionType" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="UsedInTypePDRNavigationItemType" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="ConsiderRelated" type="xs:unsignedByte" />
|
||||||
|
<xs:element name="UsedInTypePLSLWebServiceOperationType" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="UsedInTypePLSLServiceTypeWebAPI" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="UsedInTypePDRContentWidgetTemplateViewType" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="UsedInTypeSVMEmailSignatureType" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="StrictAdminControl" type="xs:unsignedByte" />
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="SchemaRelation-PDRAudienceClass2PDRAudienceClass">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="ID" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="InheritedFrom" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="ApplyTo" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="SchemaRelation-PDRAudienceClass2SPSUserClassBase">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="ID" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="Users" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="Audiences" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="SchemaRelation-PDRAudienceClass2SPSSecurityClassRole">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="ID" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="Audiences" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="Roles" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="SchemaRelation-PDRAudienceClass2SPSOrgUnitClassBase">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="ID" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="Audiences" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="OUs" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
<xs:element name="SchemaRelation-PDRAudienceClass2SPSLocationClassBase">
|
||||||
|
<xs:complexType>
|
||||||
|
<xs:sequence>
|
||||||
|
<xs:element name="ID" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="Audiences" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
<xs:element name="Locations" msdata:DataType="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:string" minOccurs="0" />
|
||||||
|
</xs:sequence>
|
||||||
|
</xs:complexType>
|
||||||
|
</xs:element>
|
||||||
|
</xs:choice>
|
||||||
|
</xs:complexType>
|
||||||
|
<xs:unique name="Constraint1" msdata:PrimaryKey="true">
|
||||||
|
<xs:selector xpath=".//PLSLWebServiceOperation" />
|
||||||
|
<xs:field xpath="ID" />
|
||||||
|
</xs:unique>
|
||||||
|
<xs:unique name="PDRAudienceClass_Constraint1" msdata:ConstraintName="Constraint1" msdata:PrimaryKey="true">
|
||||||
|
<xs:selector xpath=".//PDRAudienceClass" />
|
||||||
|
<xs:field xpath="ID" />
|
||||||
|
</xs:unique>
|
||||||
|
</xs:element>
|
||||||
|
</xs:schema>
|
||||||
|
<PLSLWebServiceOperation>
|
||||||
|
<ID>290c8d51-b8d4-ce74-50c5-08ded882fc72</ID>
|
||||||
|
<ResponseContract>{"UsedTypes":{"C4IT_F4SD_F4SDHelperService+TicketOverviewCountsByRoleResult":{"Descriptor":{"GeneratedAtUtc":{"Type":"DateType"},"CountsByRole":{"Type":["StringType"]}}}},"ContractDescriptor":{"ReturnCountType":"NotProvided","Documentation":"Return value","Type":"C4IT_F4SD_F4SDHelperService+TicketOverviewCountsByRoleResult"}}</ResponseContract>
|
||||||
|
<RequestContract>{"UsedTypes":{"RequestContract":{"Descriptor":{"request":{"Type":"C4IT_F4SD_F4SDM42WebApiController+TicketOverviewCountsByRolesRequest","Source":1}}},"C4IT_F4SD_F4SDM42WebApiController+TicketOverviewCountsByRolesRequest":{"Descriptor":{"Sid":{"Type":"StringType"},"RoleGuids":{"Type":["GuidType"]},"Keys":{"Type":["StringType"]},"QueueOption":{"Type":"IntType"},"Queues":{"Type":"StringType"}}}},"ContractDescriptor":{"Type":"RequestContract"}}</RequestContract>
|
||||||
|
<Name>getTicketOverviewCountsByRoles(request)</Name>
|
||||||
|
<RouteTemplate>getTicketOverviewCountsByRoles</RouteTemplate>
|
||||||
|
<Documentation />
|
||||||
|
<TypeID>7660e907-769c-e711-a182-f079595b3ec7</TypeID>
|
||||||
|
<Service>dcd66369-4933-ed11-1b9c-e3e293f5401c</Service>
|
||||||
|
<SupportedOperation>16</SupportedOperation>
|
||||||
|
<Type>2</Type>
|
||||||
|
<IsPublic>0</IsPublic>
|
||||||
|
</PLSLWebServiceOperation>
|
||||||
|
<PDRAudienceClass>
|
||||||
|
<ID>82d8de08-72fc-4476-6bfa-da4b9403a848</ID>
|
||||||
|
<Unrestricted>1</Unrestricted>
|
||||||
|
<Configured>1</Configured>
|
||||||
|
<ConsiderRelated>0</ConsiderRelated>
|
||||||
|
<UsedInTypePLSLWebServiceOperationType>290c8d51-b8d4-ce74-50c5-08ded882fc72</UsedInTypePLSLWebServiceOperationType>
|
||||||
|
<StrictAdminControl>0</StrictAdminControl>
|
||||||
|
</PDRAudienceClass>
|
||||||
|
</NewDataSet>
|
||||||
@@ -136,10 +136,11 @@
|
|||||||
</xs:element>
|
</xs:element>
|
||||||
</xs:schema>
|
</xs:schema>
|
||||||
<PLSLWebServiceOperation>
|
<PLSLWebServiceOperation>
|
||||||
<ID>750c8dc4-ada0-c1b0-c877-08da9bbec2e3</ID>
|
<ID>c5dd653a-54d8-c430-c9df-08ded882fc79</ID>
|
||||||
<RequestContract>{"UsedTypes":{"RequestContract":{"Descriptor":{"objectId":{"Type":"StringType"}}}},"ContractDescriptor":{"ReferenceTo":null,"ReferenceFilter":null,"Required":false,"Obsolete":false,"MaxLength":0,"ResourceKey":null,"Documentation":null,"Title":null,"Paths":null,"Type":"RequestContract"}}</RequestContract>
|
<ResponseContract>{"UsedTypes":{},"ContractDescriptor":{"ReturnCountType":"NotProvided","Documentation":"Return value","Type":"System_Collections_Generic_List`1[C4IT_F4SD_F4SDHelperService+TicketOverviewRelationDto]"}}</ResponseContract>
|
||||||
<Name>getTicketDetails(objectId)</Name>
|
<RequestContract>{"UsedTypes":{"RequestContract":{"Descriptor":{"sid":{"Type":"StringType","Source":0},"scope":{"Type":"StringType","Source":0},"key":{"Type":"StringType","Source":0},"count":{"Type":"IntType","Source":0},"queueoption":{"Type":"IntType","Source":0},"queues":{"Type":"StringType","Source":0}}}},"ContractDescriptor":{"Type":"RequestContract"}}</RequestContract>
|
||||||
<RouteTemplate>getTicketDetails</RouteTemplate>
|
<Name>getTicketOverviewRelations(sid,scope,key,count,queueoption,queues)</Name>
|
||||||
|
<RouteTemplate>getTicketOverviewRelations</RouteTemplate>
|
||||||
<Documentation />
|
<Documentation />
|
||||||
<TypeID>7660e907-769c-e711-a182-f079595b3ec7</TypeID>
|
<TypeID>7660e907-769c-e711-a182-f079595b3ec7</TypeID>
|
||||||
<Service>dcd66369-4933-ed11-1b9c-e3e293f5401c</Service>
|
<Service>dcd66369-4933-ed11-1b9c-e3e293f5401c</Service>
|
||||||
@@ -148,11 +149,11 @@
|
|||||||
<IsPublic>0</IsPublic>
|
<IsPublic>0</IsPublic>
|
||||||
</PLSLWebServiceOperation>
|
</PLSLWebServiceOperation>
|
||||||
<PDRAudienceClass>
|
<PDRAudienceClass>
|
||||||
<ID>336febdb-9a39-ed11-209c-b0c4b3911a8e</ID>
|
<ID>82d8de08-7afc-f13f-6bfa-da4b9403a863</ID>
|
||||||
<Unrestricted>1</Unrestricted>
|
<Unrestricted>1</Unrestricted>
|
||||||
<Configured>1</Configured>
|
<Configured>1</Configured>
|
||||||
<ConsiderRelated>0</ConsiderRelated>
|
<ConsiderRelated>0</ConsiderRelated>
|
||||||
<UsedInTypePLSLWebServiceOperationType>750c8dc4-ada0-c1b0-c877-08da9bbec2e3</UsedInTypePLSLWebServiceOperationType>
|
<UsedInTypePLSLWebServiceOperationType>c5dd653a-54d8-c430-c9df-08ded882fc79</UsedInTypePLSLWebServiceOperationType>
|
||||||
<StrictAdminControl>0</StrictAdminControl>
|
<StrictAdminControl>0</StrictAdminControl>
|
||||||
</PDRAudienceClass>
|
</PDRAudienceClass>
|
||||||
</NewDataSet>
|
</NewDataSet>
|
||||||
@@ -137,8 +137,9 @@
|
|||||||
</xs:schema>
|
</xs:schema>
|
||||||
<PLSLWebServiceOperation>
|
<PLSLWebServiceOperation>
|
||||||
<ID>9df9d16f-1a00-cc19-1727-08dac09d3c08</ID>
|
<ID>9df9d16f-1a00-cc19-1727-08dac09d3c08</ID>
|
||||||
<RequestContract>{"UsedTypes":{},"ContractDescriptor":{"ReferenceTo":null,"ReferenceFilter":null,"Required":false,"Obsolete":false,"MaxLength":0,"ResourceKey":null,"Documentation":null,"Title":null,"Paths":null,"Type":"RequestContract"}}</RequestContract>
|
<ResponseContract>{"UsedTypes":{},"ContractDescriptor":{"ReturnCountType":"NotProvided","Documentation":"Return value","Type":"Matrix42_WebApi_Contracts_IHttpActionResult"}}</ResponseContract>
|
||||||
<Name>isAlive</Name>
|
<RequestContract>{"UsedTypes":{},"ContractDescriptor":{"Type":"RequestContract"}}</RequestContract>
|
||||||
|
<Name>isAlive()</Name>
|
||||||
<RouteTemplate>isAlive</RouteTemplate>
|
<RouteTemplate>isAlive</RouteTemplate>
|
||||||
<Documentation />
|
<Documentation />
|
||||||
<TypeID>7660e907-769c-e711-a182-f079595b3ec7</TypeID>
|
<TypeID>7660e907-769c-e711-a182-f079595b3ec7</TypeID>
|
||||||
@@ -137,7 +137,8 @@
|
|||||||
</xs:schema>
|
</xs:schema>
|
||||||
<PLSLWebServiceOperation>
|
<PLSLWebServiceOperation>
|
||||||
<ID>14366b3c-b79d-cfe3-ded3-08da9bbec2d7</ID>
|
<ID>14366b3c-b79d-cfe3-ded3-08da9bbec2d7</ID>
|
||||||
<RequestContract>{"UsedTypes":{"RequestContract":{"Descriptor":{"debug":{"Type":"StringType"}}}},"ContractDescriptor":{"ReferenceTo":null,"ReferenceFilter":null,"Required":false,"Obsolete":false,"MaxLength":0,"ResourceKey":null,"Documentation":null,"Title":null,"Paths":null,"Type":"RequestContract"}}</RequestContract>
|
<ResponseContract>{"UsedTypes":{},"ContractDescriptor":{"ReturnCountType":"NotProvided","Documentation":"Return value","Type":"StringType"}}</ResponseContract>
|
||||||
|
<RequestContract>{"UsedTypes":{"RequestContract":{"Descriptor":{"debug":{"Type":"StringType","Source":0}}}},"ContractDescriptor":{"Type":"RequestContract"}}</RequestContract>
|
||||||
<Name>setDebugMode(debug)</Name>
|
<Name>setDebugMode(debug)</Name>
|
||||||
<RouteTemplate>loglevel</RouteTemplate>
|
<RouteTemplate>loglevel</RouteTemplate>
|
||||||
<Documentation />
|
<Documentation />
|
||||||
@@ -12,7 +12,7 @@
|
|||||||
"SetupDirectives": {
|
"SetupDirectives": {
|
||||||
"MaintenanceMode": false,
|
"MaintenanceMode": false,
|
||||||
"RecycleWebApplication": false,
|
"RecycleWebApplication": false,
|
||||||
"RestartM42WindowsServices": false
|
"RestartM42WindowsServices": true
|
||||||
},
|
},
|
||||||
"Sandboxed": true
|
"Sandboxed": true
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,5 +5,5 @@
|
|||||||
[assembly: AssemblyCopyright("Copyright © 2026, Consulting4IT GmbH, Germany")]
|
[assembly: AssemblyCopyright("Copyright © 2026, Consulting4IT GmbH, Germany")]
|
||||||
[assembly: AssemblyTrademark("")]
|
[assembly: AssemblyTrademark("")]
|
||||||
|
|
||||||
[assembly: AssemblyVersion("1.4.0.0")]
|
[assembly: AssemblyVersion("1.4.0.1")]
|
||||||
[assembly: AssemblyInformationalVersion("1.4.0.0")]
|
[assembly: AssemblyInformationalVersion("1.4.0.1")]
|
||||||
|
|||||||
@@ -1,20 +1,28 @@
|
|||||||
# Matrix42 26.1 Extension/Webservice Migration
|
# Matrix42 26.1 Legacy Extension Migration
|
||||||
|
|
||||||
Diese Notizen dokumentieren die Learnings aus der Migration der alten F4SD Matrix42 Extension inklusive Custom Web Service auf die Matrix42 26.1 Sandboxed Extension Struktur.
|
Diese Notizen dokumentieren die bisherigen Learnings aus der Migration einer alten Matrix42 Extension inklusive Custom Web Service auf eine Matrix42 26.1 Sandboxed Extension.
|
||||||
|
|
||||||
Ausgangspunkt der eigentlichen 26.1-Migration war Commit `6c6ac272cd43` (`feat: support Matrix42 26.1 sandboxed web api`, 2026-06-26 11:44 +0200). Die Punkte hier sind bewusst als Checkliste fuer weitere Extensions formuliert.
|
Die Anleitung ist bewusst als wiederverwendbare Checkliste fuer weitere Legacy-Pakete formuliert. Sie trennt zwischen belastbaren Ergebnissen, verworfenen Zwischenansaetzen und Punkten, die bei jeder Extension erneut geprueft werden muessen.
|
||||||
|
|
||||||
## Zielbild
|
## Zielbild
|
||||||
|
|
||||||
- Extension als .NET 8 Library mit `Matrix42.WebApi.Contracts`.
|
- Extension als .NET 8 Library mit `Matrix42.WebApi.Contracts`.
|
||||||
- Webservice-Controller von `Matrix42.WebApi.Contracts.ApiController` ableiten.
|
- Webservice-Controller von `Matrix42.WebApi.Contracts.ApiController` ableiten.
|
||||||
- Controller ueber `Matrix42.Hosting.Contracts.IDependencyResolver` konstruieren.
|
- Controller ueber `Matrix42.Hosting.Contracts.IDependencyResolver` konstruieren.
|
||||||
- Matrix42-Fachservices nicht direkt im Controller-Konstruktor injizieren.
|
- Matrix42-Fachservices nur dort lazy aufloesen, wo sie wirklich gebraucht werden.
|
||||||
- Host-Konfig so klein wie moeglich halten.
|
- Host-Konfig mit minimalen Modulen starten und gezielt erweitern.
|
||||||
- Paketbau in den Visual-Studio-/MSBuild-Prozess integrieren.
|
- Paketbau in MSBuild/Visual Studio integrieren.
|
||||||
- Runtime zuerst mit minimalen Endpoints pruefen (`isAlive`, einfache Datenabfrage), dann erst komplexere Services aktivieren.
|
- Paketversion aus `AssemblyVersion` ableiten.
|
||||||
|
- Signing nur fuer eine eigene signed Build-Konfiguration aktivieren.
|
||||||
|
- Postman-Collection als Regressionstest fuer alte Client-URLs pflegen.
|
||||||
|
|
||||||
## Projektstruktur und Paketbau
|
## Ausgangspunkt
|
||||||
|
|
||||||
|
Bei einer Portierung eines alten Produktstands muss der Zielstand klar sein. Fuer diesen Branch war der relevante alte Stand `26eac54f94`, nicht der spaetere neue Codezweig.
|
||||||
|
|
||||||
|
Wichtiges Learning: Bei einem 26.1-Kompatibilitaetsport keine neuen fachlichen Methoden, Obsolete-Markierungen oder Verhaltensaenderungen aus einem anderen Codezweig uebernehmen. Erst die alte Funktionalitaet lauffaehig machen, dann separate fachliche Aenderungen behandeln.
|
||||||
|
|
||||||
|
## Basisprojekt
|
||||||
|
|
||||||
Bewaehrte Projekt-Eigenschaften:
|
Bewaehrte Projekt-Eigenschaften:
|
||||||
|
|
||||||
@@ -23,24 +31,56 @@ Bewaehrte Projekt-Eigenschaften:
|
|||||||
<OutputType>Library</OutputType>
|
<OutputType>Library</OutputType>
|
||||||
<RuntimeIdentifiers>win-x64;linux-x64</RuntimeIdentifiers>
|
<RuntimeIdentifiers>win-x64;linux-x64</RuntimeIdentifiers>
|
||||||
<AppendRuntimeIdentifierToOutputPath>true</AppendRuntimeIdentifierToOutputPath>
|
<AppendRuntimeIdentifierToOutputPath>true</AppendRuntimeIdentifierToOutputPath>
|
||||||
|
<Nullable>disable</Nullable>
|
||||||
|
<ImplicitUsings>disable</ImplicitUsings>
|
||||||
|
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||||
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
|
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
|
||||||
<M42ExtensionId>...</M42ExtensionId>
|
<M42ExtensionId>...</M42ExtensionId>
|
||||||
<M42AssemblyPattern>C4ITF4SD*.*</M42AssemblyPattern>
|
<M42AssemblyPattern>...</M42AssemblyPattern>
|
||||||
<M42BuildPackage>true</M42BuildPackage>
|
<M42BuildPackage>true</M42BuildPackage>
|
||||||
```
|
```
|
||||||
|
|
||||||
Das Package wird ueber `M42SandboxedExtension.targets` gebaut. Die Paketversion wird automatisch aus der `AssemblyVersion` der gebauten WebApi-Assembly gelesen. In diesem Repo wird diese zentral in `SharedAssemblyInfo.cs` gepflegt.
|
Referenzen auf Matrix42-DLLs sollen gegen die 26.1 Libraries zeigen und normalerweise `Private=false` haben, damit keine unnoetigen Matrix42-Plattform-DLLs ins Paket kopiert werden.
|
||||||
|
|
||||||
Ein erfolgreicher Release-Build erzeugt:
|
Die Host-Konfig muss exakt zum Assembly-Namen passen:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
artifacts/<Configuration>/<PackageName> v<Version>/
|
<AssemblyName>.dll.host.config
|
||||||
artifacts/<Configuration>/<PackageName> v<Version>.zip
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Builds signieren die DLLs nicht automatisch. Signieren ist optional und muss explizit aktiviert werden. Wenn `M42SignAssemblies=true` gesetzt ist, werden die DLLs im Package vor dem Package-Build per Authenticode signiert.
|
## Paketbau
|
||||||
|
|
||||||
Konfigurierbare MSBuild-Properties:
|
Das Paket wird ueber `M42SandboxedExtension.targets` gebaut.
|
||||||
|
|
||||||
|
Aktuelle Regeln in diesem Repo:
|
||||||
|
|
||||||
|
- `Debug` baut Debug-DLLs und ein Debug-Paket.
|
||||||
|
- `Release` baut ein unsigniertes Release-Paket.
|
||||||
|
- `Release_signed` baut ein Release-Paket und aktiviert `M42SignAssemblies=true`.
|
||||||
|
- Artefakte liegen getrennt nach Konfiguration unter `artifacts/<Configuration>/`.
|
||||||
|
- Die Package-Version wird aus der `AssemblyVersion` der gebauten WebApi-Assembly gelesen.
|
||||||
|
- `M42PackageVersion` wurde entfernt und soll nicht wieder eingefuehrt werden.
|
||||||
|
|
||||||
|
Die zentrale Version liegt in `SharedAssemblyInfo.cs`.
|
||||||
|
|
||||||
|
Beispiele:
|
||||||
|
|
||||||
|
```powershell
|
||||||
|
dotnet build "C:\Workspace\C4IT FASD\F4SD_M42WebApi\C4IT - F4SD - M42WebApi.sln" -c Debug
|
||||||
|
dotnet build "C:\Workspace\C4IT FASD\F4SD_M42WebApi\C4IT - F4SD - M42WebApi.sln" -c Release
|
||||||
|
dotnet build "C:\Workspace\C4IT FASD\F4SD_M42WebApi\C4IT - F4SD - M42WebApi.sln" -c Release_signed
|
||||||
|
```
|
||||||
|
|
||||||
|
Visual Studio:
|
||||||
|
|
||||||
|
- `Debug`: Debugging und Testpakete.
|
||||||
|
- `Release`: Release ohne Signierung.
|
||||||
|
- `Release_signed`: Release mit Signierung.
|
||||||
|
|
||||||
|
Bei `Release_signed` werden alle Paket-DLLs in einem einzigen `signtool sign`-Aufruf signiert.
|
||||||
|
Das vermeidet eine separate Passwortabfrage pro DLL, wenn das Zertifikat interaktiv entsperrt werden muss.
|
||||||
|
|
||||||
|
Signierbare MSBuild-Properties:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
/p:M42SignAssemblies=true
|
/p:M42SignAssemblies=true
|
||||||
@@ -52,29 +92,54 @@ Konfigurierbare MSBuild-Properties:
|
|||||||
/p:M42SignOptions="/a"
|
/p:M42SignOptions="/a"
|
||||||
```
|
```
|
||||||
|
|
||||||
Build-Befehl:
|
## Package-Struktur
|
||||||
|
|
||||||
|
Das neue Paket basiert auf einem `PackageTemplate` mit:
|
||||||
|
|
||||||
|
- `package.json`
|
||||||
|
- `install.xml`
|
||||||
|
- `install/...`
|
||||||
|
- `BasePackage/Assemblies` als Build-Ziel fuer Assemblies
|
||||||
|
|
||||||
|
Beim Portieren eines Legacy-Pakets:
|
||||||
|
|
||||||
|
1. Altes Paket entpacken.
|
||||||
|
2. WebAPI-Service (`PLSLServiceTypeWebAPI`) und Operationen (`PLSLWebServiceOperation`) identifizieren.
|
||||||
|
3. Extension-/Assembly-ID beibehalten, wenn ein Update statt einer Neuinstallation gewollt ist.
|
||||||
|
4. Operation-IDs nur dann aendern, wenn bewusst neue Operationen entstehen sollen.
|
||||||
|
5. Obsolete oder entfernte Schema-Attribute aus 26.1 entfernen.
|
||||||
|
6. Nach der ersten lauffaehigen Version die Webservice-Operationen in Matrix42 synchronisieren, exportieren und die synchronisierten Contracts in die Paketdateien mergen.
|
||||||
|
|
||||||
|
Wichtiges finales Learning zu Webservice-Operationen:
|
||||||
|
|
||||||
|
- Wenn ein Endpoint nur nach "Service synchronisieren" korrekt funktioniert, sind die `PLSLWebServiceOperation`-Contracts im Paket nicht mehr synchron zum Controller.
|
||||||
|
- Die synchronisierten Operationen exportieren und mit den bestehenden Paketdateien mergen.
|
||||||
|
- Bestehende `PLSLWebServiceOperation.ID`s nicht durch Export-IDs ersetzen, sonst entstehen auf Bestandssystemen doppelte Operationen.
|
||||||
|
- Bestehende `PDRAudienceClass.ID`s ebenfalls erhalten.
|
||||||
|
- Nur fachliche Operation-Felder uebernehmen: `ResponseContract`, `RequestContract`, `Name`, `RouteTemplate`, `SupportedOperation`, `Type`, `IsPublic`.
|
||||||
|
- Neue Operationen, die bisher nicht im Paket vorhanden waren, duerfen die exportierten IDs verwenden, wenn sie aus dem Zielsystem stammen, auf dem sie bereits synchronisiert wurden.
|
||||||
|
- Operation-Dateien nach Operation benennen, z. B. `getticketlist.dat`, `getpickup.dat`, `isalive.dat`. Das erleichtert Reviews und verhindert Verwechslungen mit generischen `02-01-xxxx PLSLWebServiceOperationType.dat`-Dateien.
|
||||||
|
- Jede Datei aus `PackageTemplate/install/0002_WebServiceOperation` muss in `PackageTemplate/install.xml` referenziert sein.
|
||||||
|
|
||||||
|
Validierung:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
dotnet build "C:\Workspace\C4IT FASD\F4SD_M42WebApi\C4IT - F4SD - M42WebApi.sln" -c Release
|
# XML parsebar?
|
||||||
|
python -c "import pathlib,xml.etree.ElementTree as ET; [ET.parse(p) for p in pathlib.Path('PackageTemplate/install/0002_WebServiceOperation').glob('*.dat')]"
|
||||||
|
|
||||||
|
# Debug-Paket bauen und pruefen, ob alle Operation-Dateien im Paket liegen
|
||||||
|
dotnet build "C:\Workspace\C4IT FASD\F4SD_M42WebApi\C4IT - F4SD - M42WebApi.sln" -c Debug
|
||||||
```
|
```
|
||||||
|
|
||||||
Signierter Release-Build:
|
Konkretes 26.1-Learning:
|
||||||
|
|
||||||
```powershell
|
- `UsedInTypeSPSActivityTypeAlert` gibt es in 26.1 nicht mehr und muss aus dem Paket entfernt werden.
|
||||||
dotnet build "C:\Workspace\C4IT FASD\F4SD_M42WebApi\C4IT - F4SD - M42WebApi.sln" -c Release_signed
|
|
||||||
```
|
|
||||||
|
|
||||||
In Visual Studio kann oben in der Konfiguration `Release` fuer einen unsignierten Build oder `Release_signed` fuer einen signierten Build gewaehlt werden.
|
## Host-Konfig und Module
|
||||||
|
|
||||||
## Host-Konfig
|
Mit so wenig Modulen wie moeglich starten. Jedes zusaetzliche Modul kann transitive Unity-Registrierungen erzwingen, die bereits beim Controller- oder Service-Aufbau scheitern.
|
||||||
|
|
||||||
Die Host-Konfig muss exakt zum Assembly-Namen passen:
|
Minimaler Startpunkt fuer einfache Endpoints:
|
||||||
|
|
||||||
```text
|
|
||||||
C4ITF4SDM42WebApi.dll.host.config
|
|
||||||
```
|
|
||||||
|
|
||||||
Final bewaehrte Minimal-Konfig:
|
|
||||||
|
|
||||||
```xml
|
```xml
|
||||||
<?xml version="1.0" encoding="utf-8" ?>
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
@@ -86,31 +151,35 @@ Final bewaehrte Minimal-Konfig:
|
|||||||
</host>
|
</host>
|
||||||
```
|
```
|
||||||
|
|
||||||
Wichtig: Module nicht auf Vorrat laden. Jedes zusaetzliche Modul kann transitive Unity-Registrierungen erzwingen, die fuer den konkreten Webservice gar nicht benoetigt werden.
|
Der aktuelle Stand dieser Extension benoetigt fuer alle Funktionen mehr Module, insbesondere wegen Journal, Storage, Pandora, Teams Notification, ServiceConnection, Auth und Aurora Search. Aktuelle Host-Konfig:
|
||||||
|
|
||||||
Module duerfen nicht auf Vorrat geladen werden. Fuer Endpunkte, die Matrix42-Services nutzen, muessen die transitiven Abhaengigkeiten aber vollstaendig als Host-Module registriert werden. Fuer den finalen `IJournalService`-Pfad wurden unter anderem folgende Module benoetigt:
|
```xml
|
||||||
|
<modules>
|
||||||
- `Matrix42.Pandora.Persistence`
|
<module assembly="C4ITF4SDM42WebApi" />
|
||||||
- `Matrix42.Pandora.ServiceStore`
|
<module assembly="Matrix42.DataLayer.Persistence" />
|
||||||
- `Matrix42.Pandora.BizLogic`
|
<module assembly="Matrix42.Services.WebApi" />
|
||||||
- `Matrix42.Pandora.Services`
|
<module assembly="Matrix42.ServiceRepository.BizLogic" />
|
||||||
- `Matrix42.MsTeamsNotification.BizLogic`
|
<module assembly="Matrix42.Pandora.ServiceStore" />
|
||||||
- `Matrix42.Integration.Aurora.General`
|
<module assembly="Matrix42.Pandora.Persistence" />
|
||||||
- `Matrix42.Integration.Aurora.Search.BizLogic`
|
<module assembly="Matrix42.Pandora.BizLogic" />
|
||||||
- `Matrix42.ServiceManager.BizLogic`
|
<module assembly="Matrix42.Pandora.Services" />
|
||||||
- eigenes Webservice-Assembly als Host-Modul
|
<module assembly="Matrix42.Distributed.Redis.Cache" />
|
||||||
|
<module assembly="Matrix42.StorageService.BizLogic" />
|
||||||
Waehrend der Migration zeigten fehlende Module oder fehlende Sandbox-Host-Registrierungen unter anderem folgende Fehler:
|
<module assembly="Matrix42.MsTeamsNotification.BizLogic" />
|
||||||
|
<module assembly="Matrix42.ServiceConnection.Persistence" />
|
||||||
```text
|
<module assembly="Matrix42.Auth.BizLogic" />
|
||||||
IEntityDataService is an interface and cannot be constructed
|
<module assembly="Matrix42.ServiceConnection.BizLogic" />
|
||||||
IUserProfileRepository is an interface and cannot be constructed
|
<module assembly="Matrix42.Integration.Aurora.General" />
|
||||||
IApiExplorer is an interface and cannot be constructed
|
<module assembly="Matrix42.Integration.Aurora.Search.BizLogic" />
|
||||||
IComplianceRuleManager is an interface and cannot be constructed
|
<module assembly="update4u.SPS.ComplianceRules.BizLogic" />
|
||||||
IRequestPropertiesProvider is an interface and cannot be constructed
|
<module assembly="update4u.SPS.Security" />
|
||||||
IExternalSearchService is an interface and cannot be constructed
|
<module assembly="Matrix42.BizLogic.Journal" />
|
||||||
|
<module assembly="Matrix42.ServiceManager.BizLogic" />
|
||||||
|
</modules>
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Regel: Wenn ein weiteres Interface nicht aufgeloest werden kann, nicht raten. In den Matrix42-DLLs nach dem Registrator/der Implementierung fuer genau dieses Interface suchen und nur das passende Modul laden.
|
||||||
|
|
||||||
## Controller-Konstruktion
|
## Controller-Konstruktion
|
||||||
|
|
||||||
Nicht so:
|
Nicht so:
|
||||||
@@ -119,16 +188,17 @@ Nicht so:
|
|||||||
public MyController(IEntityDataService entityDataService, IJournalService journalService, IPandoraUserProfile userProfile)
|
public MyController(IEntityDataService entityDataService, IJournalService journalService, IPandoraUserProfile userProfile)
|
||||||
```
|
```
|
||||||
|
|
||||||
Diese direkte Konstruktor-Injection zwingt Matrix42/Unity, alle Services schon beim Erzeugen des Controllers aufzuloesen. Dadurch kann bereits `isAlive` scheitern, obwohl der Endpoint selbst keinen dieser Services nutzt.
|
Das zwingt Unity, alle Services schon beim Erzeugen des Controllers aufzuloesen. Dadurch kann bereits `isAlive` scheitern, obwohl der Endpoint selbst keinen dieser Services braucht.
|
||||||
|
|
||||||
Besser:
|
Bewaehrt:
|
||||||
|
|
||||||
```csharp
|
```csharp
|
||||||
private readonly IDependencyResolver _resolver;
|
private readonly IDependencyResolver _resolver;
|
||||||
|
|
||||||
public MyController(IDependencyResolver resolver)
|
public MyController(IDependencyResolver resolver, IEnumerationProvider enumerationProvider)
|
||||||
{
|
{
|
||||||
_resolver = resolver ?? throw new ArgumentNullException(nameof(resolver));
|
_resolver = resolver ?? throw new ArgumentNullException(nameof(resolver));
|
||||||
|
_enumerationProvider = enumerationProvider ?? throw new ArgumentNullException(nameof(enumerationProvider));
|
||||||
}
|
}
|
||||||
|
|
||||||
private T GetRequiredService<T>() where T : class
|
private T GetRequiredService<T>() where T : class
|
||||||
@@ -141,16 +211,23 @@ private T GetRequiredService<T>() where T : class
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Fachservices dann nur im jeweiligen Endpoint oder Helper lazy aufloesen.
|
Fachservices im jeweiligen Endpoint oder Helper lazy aufloesen.
|
||||||
|
|
||||||
|
## Dependency-Registrator
|
||||||
|
|
||||||
|
Die Extension kann eigene Sandbox-Registrierungen bereitstellen, wenn der Matrix42-Sandbox-Host eine Plattform-Instanz nicht selbst registriert.
|
||||||
|
|
||||||
|
Konkretes Learning:
|
||||||
|
|
||||||
|
- Fuer den Journal-Pfad fehlte `System.Web.Http.Description.IApiExplorer`.
|
||||||
|
- Die Extension registriert eine konkrete `ApiExplorer`-Instanz ueber `IDependencyRegistrator`.
|
||||||
|
- Das eigene Assembly muss dafuer als Host-Modul geladen werden.
|
||||||
|
|
||||||
|
Das ist kein Workaround im fachlichen Code, sondern eine Host-Registrierung fuer eine fehlende Infrastruktur-Dependency.
|
||||||
|
|
||||||
## WebAPI-Rueckgaben
|
## WebAPI-Rueckgaben
|
||||||
|
|
||||||
Matrix42 serialisiert manche Rueckgabetypen anders als klassische ASP.NET Web API.
|
Matrix42 serialisiert `HttpResponseMessage` in dieser Runtime nicht wie klassische ASP.NET Web API, sondern als Nutzdatenobjekt.
|
||||||
|
|
||||||
Bewaehrt:
|
|
||||||
|
|
||||||
- Datenendpoints geben direkt Nutzdaten zurueck, z. B. `Task<EntityEnumeration>` oder `Task<object>`.
|
|
||||||
- `isAlive` gibt `IHttpActionResult` mit `StatusCodeResult(HttpStatusCode.NoContent)` zurueck.
|
|
||||||
|
|
||||||
Nicht fuer normale Datenendpoints verwenden:
|
Nicht fuer normale Datenendpoints verwenden:
|
||||||
|
|
||||||
@@ -159,56 +236,158 @@ Task<HttpResponseMessage>
|
|||||||
HttpResponseExtensions.CreateResponse(...)
|
HttpResponseExtensions.CreateResponse(...)
|
||||||
```
|
```
|
||||||
|
|
||||||
In dieser Runtime wurde ein `HttpResponseMessage` als JSON-Objekt serialisiert, z. B. mit `Version`, `Content`, `StatusCode`, `Headers`.
|
Symptom:
|
||||||
|
|
||||||
Nicht fuer `isAlive` verwenden:
|
|
||||||
|
|
||||||
```csharp
|
|
||||||
public void isAlive()
|
|
||||||
```
|
|
||||||
|
|
||||||
Das fuehrte zu:
|
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{"result":null,"parameters":{}}
|
{"Version":"1.1","Content":{...},"StatusCode":200}
|
||||||
```
|
```
|
||||||
|
|
||||||
Bewaehrter Healthcheck:
|
Bewaehrt:
|
||||||
|
|
||||||
|
- Datenendpoints geben direkte Nutzdaten zurueck, z. B. `Task<List<T>>`, `Task<object>` oder `Task<EntityEnumeration>`.
|
||||||
|
- Leere Listen duerfen nicht `null` sein.
|
||||||
|
- `isAlive` gibt `IHttpActionResult` mit einem expliziten HTTP-204-Response zurueck.
|
||||||
|
|
||||||
|
Healthcheck:
|
||||||
|
|
||||||
```csharp
|
```csharp
|
||||||
[Route("isAlive"), HttpGet]
|
[Route("isAlive"), HttpGet]
|
||||||
public IHttpActionResult isAlive()
|
public IHttpActionResult isAlive()
|
||||||
{
|
{
|
||||||
return new StatusCodeResult(HttpStatusCode.NoContent);
|
var response = new HttpResponseMessage(HttpStatusCode.NoContent)
|
||||||
|
{
|
||||||
|
RequestMessage = Request
|
||||||
|
};
|
||||||
|
response.Headers.ConnectionClose = true;
|
||||||
|
|
||||||
|
return ResponseMessage(response);
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Pickups/Enumerations
|
Nicht verwenden:
|
||||||
|
|
||||||
`IEntityDataService.GetEnumeration(...)` ist bequem, zieht aber die Pandora-Service-Schicht herein. Das war in der Sandbox zu schwer und verursachte transitive Dependency-Probleme.
|
```csharp
|
||||||
|
public void isAlive()
|
||||||
|
```
|
||||||
|
|
||||||
Bewaehrt ist:
|
Symptom:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{"result":null,"parameters":{}}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Null-Rueckgaben
|
||||||
|
|
||||||
|
Matrix42/Pandora behandelt `null` als fehlerhafte Operation-Response.
|
||||||
|
|
||||||
|
Symptom:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Method getTicketList returned null
|
||||||
|
```
|
||||||
|
|
||||||
|
Regel:
|
||||||
|
|
||||||
|
- Listenendpoints geben bei "nichts gefunden" `new List<T>()` zurueck.
|
||||||
|
- Objekte geben ein leeres DTO oder 204 zurueck, aber nicht unbewusst `null`.
|
||||||
|
- Strings koennen bei Bedarf `string.Empty` statt `null` liefern.
|
||||||
|
|
||||||
|
## Routen und Parameterbindung
|
||||||
|
|
||||||
|
Finales Learning: Fuer Legacy-Kompatibilitaet muessen Route, `PLSLWebServiceOperation.RouteTemplate`, `[FromUri]` und die alten Client-URLs zusammen betrachtet werden.
|
||||||
|
|
||||||
|
Bewaehrte Regeln:
|
||||||
|
|
||||||
|
- Die Route-Attribute aus der funktionierenden Legacy-Version uebernehmen.
|
||||||
|
- Query-basierte Legacy-Endpoints bleiben query-basiert, z. B. `[Route("getTicketList")]`.
|
||||||
|
- Path-basierte Legacy-Endpoints bleiben path-basiert, z. B. `[Route("getPickup/{name}")]`.
|
||||||
|
- GET-Parameter mit `[FromUri]` markieren.
|
||||||
|
- Zusaetzlich einen kleinen zentralen Query-Fallback verwenden, weil in 26.1 einzelne optionale Queryparameter trotz `[FromUri]` nicht immer in der Methode ankamen.
|
||||||
|
- Keine doppelten Controller-Methoden fuer alte und neue URL-Formen bauen.
|
||||||
|
- Die Postman-Collection testet bewusst die alten Client-URLs.
|
||||||
|
|
||||||
|
Beispiel Query-Route:
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
[Route("getDirectLinkCreateTicket"), HttpGet]
|
||||||
|
public async Task<DirectLink> getDirectLinkCreateTicket(
|
||||||
|
[FromUri] string sid = "",
|
||||||
|
[FromUri] string assetname = "")
|
||||||
|
{
|
||||||
|
sid = QueryValue(sid, nameof(sid));
|
||||||
|
assetname = QueryValue(assetname, nameof(assetname));
|
||||||
|
...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Beispiel Path-Route mit zusaetzlichen Queryparametern:
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
[Route("getPickup/{name}"), HttpGet]
|
||||||
|
public async Task<EntityEnumeration> getPickup(
|
||||||
|
[FromUri] string name,
|
||||||
|
[FromUri] EntityEnumerationVisibilityMode mode = EntityEnumerationVisibilityMode.None,
|
||||||
|
[FromUri] int group = -1)
|
||||||
|
{
|
||||||
|
name = QueryValue(name, nameof(name));
|
||||||
|
mode = QueryValue(mode, nameof(mode));
|
||||||
|
group = QueryValue(group, nameof(group));
|
||||||
|
...
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Der zentrale Query-Fallback ist bewusst klein und verwendet die strukturierte WebAPI-API statt eigenes URL-Parsen:
|
||||||
|
|
||||||
|
```csharp
|
||||||
|
private string GetQueryValue(string name)
|
||||||
|
{
|
||||||
|
return Request?.GetQueryNameValuePairs()
|
||||||
|
.FirstOrDefault(pair => string.Equals(pair.Key, name, StringComparison.OrdinalIgnoreCase))
|
||||||
|
.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
private string QueryValue(string value, string name)
|
||||||
|
{
|
||||||
|
return GetQueryValue(name) ?? value ?? string.Empty;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Betroffene alte Testformate:
|
||||||
|
|
||||||
|
```text
|
||||||
|
getTicketList?sid=...&hours=...&queueoption=...&queues=...
|
||||||
|
getDirectLinkCreateTicket?sid=...&assetname=...
|
||||||
|
getDirectLinkF4SD?eoid=...&type=...
|
||||||
|
getPickup/<name>?mode=...&group=...
|
||||||
|
```
|
||||||
|
|
||||||
|
## Pickups und Enumerations
|
||||||
|
|
||||||
|
`IEntityDataService.GetEnumeration(...)` ist bequem, zieht aber Pandora-Services herein. Das war fuer reine Pickups zu schwer.
|
||||||
|
|
||||||
|
Bewaehrt:
|
||||||
|
|
||||||
```csharp
|
```csharp
|
||||||
Matrix42.Persistence.Contracts.IEnumerationProvider
|
Matrix42.Persistence.Contracts.IEnumerationProvider
|
||||||
```
|
```
|
||||||
|
|
||||||
Dieser Service wird ueber `Matrix42.DataLayer.Persistence` bereitgestellt und liefert eine `DataTable`. Wenn der alte API-Vertrag `EntityEnumeration` bleiben soll, muss die `DataTable` selbst gemappt werden.
|
Dieser Service kommt ueber `Matrix42.DataLayer.Persistence` und liefert eine `DataTable`. Wenn der alte API-Vertrag `EntityEnumeration` bleiben soll, muss die `DataTable` selbst gemappt werden.
|
||||||
|
|
||||||
Gepruefte Alternativen:
|
Gepruefte Alternativen:
|
||||||
|
|
||||||
- `Matrix42.Pandora.Contracts.IEntityDataService`: liefert direkt `EntityEnumeration`, benoetigt aber Pandora-Module.
|
- `Matrix42.Pandora.Contracts.IEntityDataService`: liefert direkt `EntityEnumeration`, benoetigt aber Pandora-Module.
|
||||||
- `update4u.SPS.DataLayer.Contracts.IPickupDataService`: liefert ebenfalls nur `DataTable`, bringt gegenueber `IEnumerationProvider` keinen klaren Vorteil.
|
- `update4u.SPS.DataLayer.Contracts.IPickupDataService`: liefert ebenfalls `DataTable`, ohne klaren Vorteil gegenueber `IEnumerationProvider`.
|
||||||
|
|
||||||
Pragmatische Empfehlung:
|
Empfehlung:
|
||||||
|
|
||||||
- Fuer reine Pickup-Lesefunktionen `IEnumerationProvider` verwenden.
|
- Fuer reine Pickup-Lesefunktionen `IEnumerationProvider` verwenden.
|
||||||
- Nur dann Pandora-Services laden, wenn es keine schlanke Alternative gibt.
|
- Pandora nur laden, wenn ein Endpoint es wirklich benoetigt.
|
||||||
- Route-Parameter defensiv behandeln. In dieser Migration kam der Pickup-Name einmal leer an, obwohl die URL ihn enthielt. Ein Fallback auf das letzte URL-Segment hat das stabilisiert.
|
|
||||||
|
|
||||||
## Aktueller Benutzer
|
## Aktueller Benutzer
|
||||||
|
|
||||||
`IPandoraUserProfile` nicht im Controller injizieren. Fuer `getMyRoleMemberships` reicht der Matrix42 Principal:
|
`IPandoraUserProfile` nicht im Controller injizieren.
|
||||||
|
|
||||||
|
Fuer `getMyRoleMemberships` reicht der Matrix42 Principal:
|
||||||
|
|
||||||
```csharp
|
```csharp
|
||||||
var principal = Thread.CurrentPrincipal as IM42Principal;
|
var principal = Thread.CurrentPrincipal as IM42Principal;
|
||||||
@@ -219,52 +398,81 @@ var userId = principal?.InteractivePrincipal?.M42Identity?.UserFragmentID
|
|||||||
|
|
||||||
Danach kann der vorhandene ASQL-/Helper-Code mit der `Guid` weiterarbeiten.
|
Danach kann der vorhandene ASQL-/Helper-Code mit der `Guid` weiterarbeiten.
|
||||||
|
|
||||||
## Journal-Service
|
## Ticket-Historie und Journal
|
||||||
|
|
||||||
`IJournalService` ist der bevorzugte Pfad fuer die Ticket-Historie. In 26.1 haengt der konkrete `JournalService` transitiv an Teams Notification, Pandora Services und Aurora Search. Diese Abhaengigkeiten muessen im Host vollstaendig geladen werden.
|
Ziel: den Matrix42-Service nutzen, nicht eigene Journal-Logik nachbauen.
|
||||||
|
|
||||||
Status:
|
Finaler Ansatz:
|
||||||
|
|
||||||
- Ticket-Historie laeuft ueber `IJournalService`.
|
- `IJournalService` ueber den Matrix42-Resolver laden.
|
||||||
- Der Aufruf erfolgt per Reflection gegen die zur Laufzeit geladene `GetJournalList`-Signatur, damit 26.1 Patch-Level-Unterschiede keine direkte MethodRef brechen.
|
- Keine direkte Konstruktion von `JournalService`.
|
||||||
- Keine manuellen `JournalService`-Konstruktionen, Proxies, `JournalManager`-Fallbacks oder HTTP-Forwards verwenden.
|
- Keine eigenen DispatchProxy-/NoOp-Services.
|
||||||
- Wenn Unity ein weiteres Interface nicht aufloesen kann, zuerst in den Matrix42-DLLs nach einem `IDependencyRegistrator` fuer genau dieses Interface suchen und das zugehoerige BizLogic-/Services-Modul laden.
|
- Keine HTTP-Weiterleitung an interne Admin-APIs.
|
||||||
|
- Keine Storage-Fallback-Journal-Implementierung als finaler Pfad.
|
||||||
|
- `GetJournalList` per Reflection gegen die zur Laufzeit vorhandene Signatur aufrufen, weil sich die Signatur zwischen 26.1 Patch-Leveln unterscheiden kann.
|
||||||
|
|
||||||
## Typische Fehlersymptome und Ursache
|
Warum Reflection hier akzeptiert wurde:
|
||||||
|
|
||||||
```text
|
- Der alte direkte Compile-Time-MethodRef brach mit `MissingMethodException`.
|
||||||
Cannot create instance of <Controller>: The current type, <Interface>, is an interface and cannot be constructed.
|
- Die geladene Runtime-DLL hatte eine andere `IJournalService.GetJournalList`-Signatur.
|
||||||
```
|
- Die Reflection sucht kompatible Journal-Reader-Methoden und liefert klare Diagnose, wenn keine passende Signatur existiert.
|
||||||
|
|
||||||
Meistens direkte Konstruktor-Injection oder ein zu breit geladenes Host-Modul.
|
Typische Fehler auf dem Weg:
|
||||||
|
|
||||||
```text
|
|
||||||
Could not load type 'System.Web.Routing.RouteTable'
|
|
||||||
```
|
|
||||||
|
|
||||||
Ein ungeeignetes altes `System.Web`-/WebApi-Modul wurde in der Sandbox aktiviert. Ursache entfernen, statt weitere Abhaengigkeiten darum herum zu laden.
|
|
||||||
|
|
||||||
```text
|
```text
|
||||||
|
Method not found: IJournalService.GetJournalList(...)
|
||||||
|
IJournalService could not be resolved
|
||||||
|
IExternalAuthService is an interface and cannot be constructed
|
||||||
|
IOAuth2AuthorizeService is an interface and cannot be constructed
|
||||||
IApiExplorer is an interface and cannot be constructed
|
IApiExplorer is an interface and cannot be constructed
|
||||||
|
IRequestPropertiesProvider is an interface and cannot be constructed
|
||||||
|
IExternalSearchService is an interface and cannot be constructed
|
||||||
```
|
```
|
||||||
|
|
||||||
Der Matrix42-Sandbox-Host stellt nicht automatisch dieselbe WebApi-Explorer-Instanz wie der normale WebApi-Host bereit. Fuer den finalen Journal-Pfad registriert die Extension eine konkrete `System.Web.Http.Description.IApiExplorer`-Instanz per eigenem `IDependencyRegistrator`.
|
Learning: Bei diesen Fehlern nicht weiter im Endpoint herumprobieren, sondern die fehlende Host-Registrierung bzw. das passende Matrix42-Modul identifizieren.
|
||||||
|
|
||||||
```json
|
## Overview-Endpoints
|
||||||
{"Version":"1.1","Content":{...},"StatusCode":200}
|
|
||||||
|
`getTicketOverviewCounts` liefert Counts fuer mehrere Keys.
|
||||||
|
|
||||||
|
`getTicketOverviewRelations` nimmt genau einen `key` und ein `count`.
|
||||||
|
|
||||||
|
Postman-Learning:
|
||||||
|
|
||||||
|
- `getTicketOverviewCounts personal` und `getTicketOverviewCounts role` leiten `scope`, `overviewKey` und `overviewRelationExpectedCount` ab.
|
||||||
|
- `getTicketOverviewRelations` nutzt diese Variablen.
|
||||||
|
- Der Relations-Test erwartet, dass `response.length` dem vorher abgeleiteten Count entspricht.
|
||||||
|
- Im normalen Collection-Lauf ueberschreibt `role` die Werte von `personal`, weil `role` nach `personal` ausgefuehrt wird.
|
||||||
|
|
||||||
|
## Direct Link
|
||||||
|
|
||||||
|
Fuer F4SD Direct Links ist der Typ in der alten Integration nicht der Matrix42 ActivityType, sondern der F4SD-Typ.
|
||||||
|
|
||||||
|
Postman setzt deshalb nach `getTicketList`:
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
pm.collectionVariables.set("type", "ticket");
|
||||||
```
|
```
|
||||||
|
|
||||||
Ein `HttpResponseMessage` wurde als Nutzdatenobjekt serialisiert. Action-Signatur auf direkten Nutzdatentyp umstellen.
|
`objectType` bleibt separat auf `ticket.ActivityType`, falls der technische Matrix42-Typ fuer andere Tests gebraucht wird.
|
||||||
|
|
||||||
```json
|
## Postman-Collection
|
||||||
{"result":null,"parameters":{}}
|
|
||||||
```
|
|
||||||
|
|
||||||
Ein `void`-Endpoint wurde als Matrix42-Result ohne Nutzdaten serialisiert. Fuer echten NoContent `StatusCodeResult(HttpStatusCode.NoContent)` verwenden.
|
Die Collection ist Teil der Migration und Regression.
|
||||||
|
|
||||||
|
Regeln:
|
||||||
|
|
||||||
|
- Basic Auth ueber Variablen `basicUsername` und `basicPassword`.
|
||||||
|
- `baseUrl` enthaelt `/m42Services`.
|
||||||
|
- Legacy-Query-Routen testen, nicht nur neue path-basierte Formen.
|
||||||
|
- `getTicketList` zieht `eoid` und `ticketObjectId` aus `TicketObjectId`.
|
||||||
|
- `type` fuer Direct Link bleibt `ticket`.
|
||||||
|
- `isAlive` erwartet 204 und keinen Body.
|
||||||
|
- Allgemeiner Test erkennt versehentlich serialisierte `HttpResponseMessage`-Objekte.
|
||||||
|
|
||||||
## Smoke-Test-Reihenfolge
|
## Smoke-Test-Reihenfolge
|
||||||
|
|
||||||
Nach jeder Paketinstallation in Matrix42:
|
Nach jeder Paketinstallation:
|
||||||
|
|
||||||
1. `GET /m42Services/api/<prefix>/isalive`
|
1. `GET /m42Services/api/<prefix>/isalive`
|
||||||
Erwartung: HTTP 204 No Content.
|
Erwartung: HTTP 204 No Content.
|
||||||
@@ -272,26 +480,94 @@ Nach jeder Paketinstallation in Matrix42:
|
|||||||
Erwartung: JSON-Nutzdaten, keine `HttpResponseMessage`-Huelle.
|
Erwartung: JSON-Nutzdaten, keine `HttpResponseMessage`-Huelle.
|
||||||
3. `GET /m42Services/api/<prefix>/getMyRoleMemberships`
|
3. `GET /m42Services/api/<prefix>/getMyRoleMemberships`
|
||||||
Erwartung: aktueller Benutzer und Rollen, kein `IPandoraUserProfile`-Fehler.
|
Erwartung: aktueller Benutzer und Rollen, kein `IPandoraUserProfile`-Fehler.
|
||||||
4. Komplexere Ticket-/Overview-Endpoints.
|
4. `GET /m42Services/api/<prefix>/getTicketList?...`
|
||||||
5. Journal-/History-Endpoints separat pruefen, weil hier zusaetzliche Services benoetigt werden koennen.
|
Erwartung: leere Liste oder Tickets, aber kein `returned null`.
|
||||||
|
5. Direct Links mit Legacy-Query-Routen.
|
||||||
|
6. Overview Counts und Relations.
|
||||||
|
7. Journal-/History-Endpoints zuletzt, weil hier die meisten Matrix42-Services transitiv benoetigt werden.
|
||||||
|
|
||||||
|
## Typische Fehlersymptome
|
||||||
|
|
||||||
|
```text
|
||||||
|
Cannot create instance of <Controller>: The current type, <Interface>, is an interface and cannot be constructed.
|
||||||
|
```
|
||||||
|
|
||||||
|
Meist direkte Konstruktor-Injection oder fehlendes Host-Modul.
|
||||||
|
|
||||||
|
```text
|
||||||
|
Could not load type 'System.Web.Routing.RouteTable'
|
||||||
|
```
|
||||||
|
|
||||||
|
Ungeeignetes altes `System.Web`-/WebApi-Modul in der Sandbox. Ursache entfernen, nicht weitere Alt-Abhaengigkeiten nachladen.
|
||||||
|
|
||||||
|
```text
|
||||||
|
IApiExplorer is an interface and cannot be constructed
|
||||||
|
```
|
||||||
|
|
||||||
|
Sandbox-Host stellt diese WebApi-Explorer-Instanz nicht automatisch bereit. Ueber eigenen `IDependencyRegistrator` registrieren.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{"Version":"1.1","Content":{...},"StatusCode":200}
|
||||||
|
```
|
||||||
|
|
||||||
|
Ein `HttpResponseMessage` wurde als DTO serialisiert. Rueckgabe auf direkten Nutzdatentyp umstellen.
|
||||||
|
|
||||||
|
```json
|
||||||
|
{"result":null,"parameters":{}}
|
||||||
|
```
|
||||||
|
|
||||||
|
Void-Endpoint oder falsch behandelte leere Rueckgabe. Fuer NoContent einen `IHttpActionResult` mit HTTP 204 liefern.
|
||||||
|
|
||||||
|
```text
|
||||||
|
Method <name> returned null
|
||||||
|
```
|
||||||
|
|
||||||
|
Endpoint gibt `null` zurueck. Leeres DTO oder leere Liste zurueckgeben.
|
||||||
|
|
||||||
|
## Verworfene Zwischenansaetze
|
||||||
|
|
||||||
|
Diese Ansaetze haben nicht nachhaltig geholfen und sollen nicht erneut aufgebaut werden:
|
||||||
|
|
||||||
|
- Matrix42-Fachinterfaces direkt im Controller-Konstruktor injizieren.
|
||||||
|
- Immer mehr Module auf Vorrat laden, ohne die konkrete fehlende Registrierung zu kennen.
|
||||||
|
- `HttpResponseMessage` als Datenantwort verwenden.
|
||||||
|
- Query-Parameter per eigenem Helper aus `RequestUri` lesen.
|
||||||
|
- Doppelte Controller-Methoden fuer alte Query-URLs und neue Path-URLs bauen.
|
||||||
|
- `JournalService` direkt konstruieren.
|
||||||
|
- NoOp-/Proxy-Abhaengigkeiten fuer Journal-Services erzeugen.
|
||||||
|
- Journal-Historie aus unvollstaendigen Kommentarfeldern nachbauen.
|
||||||
|
- Interne Matrix42 Admin-Webservices als finalen Journal-Pfad weiterleiten.
|
||||||
|
|
||||||
## Migrationsablauf fuer weitere Extensions
|
## Migrationsablauf fuer weitere Extensions
|
||||||
|
|
||||||
1. Alten Package-Inhalt entpacken und Assembly-/Extension-ID identifizieren.
|
1. Ziel-Commit der Legacy-Funktionalitaet festlegen.
|
||||||
2. Neues 26.1-Projekt ueber Scaffolder/Beispielstruktur anlegen oder bestehendes Projekt angleichen.
|
2. Altes Paket entpacken und IDs dokumentieren.
|
||||||
3. `Matrix42.WebApi.Contracts` und `Matrix42.Hosting.Contracts` referenzieren.
|
3. Herstellerbeispiel/Scaffolder-Struktur als 26.1-Referenz verwenden.
|
||||||
4. Controller auf `IDependencyResolver` umstellen.
|
4. Projekt auf .NET 8 und `Matrix42.WebApi.Contracts.ApiController` umstellen.
|
||||||
5. Direkte Konstruktor-Injection von Matrix42-Fachinterfaces entfernen.
|
5. Controller-Konstruktor auf minimale Infrastruktur-Services reduzieren.
|
||||||
6. Host-Konfig mit minimalen Modulen starten.
|
6. Host-Konfig minimal starten.
|
||||||
7. Rueckgaben pruefen: direkte Nutzdaten statt `HttpResponseMessage`, `StatusCodeResult` fuer 204.
|
7. Package-Build in MSBuild integrieren.
|
||||||
8. Package-Build ueber MSBuild automatisieren.
|
8. AssemblyVersion als einzige Package-Versionsquelle verwenden.
|
||||||
9. Paket installieren und Smoke-Tests ausfuehren.
|
9. WebAPI-Rueckgaben auf direkte DTOs/Listen umstellen.
|
||||||
10. Fehlende Services einzeln und begruendet nachladen, nie ganze Pandora-/ServiceManager-Stacks auf Vorrat.
|
10. `isAlive` auf echten 204 umstellen.
|
||||||
|
11. Controller-Routen aus der funktionierenden Legacy-Version uebernehmen.
|
||||||
|
12. GET-Parameter mit `[FromUri]` versehen und fehlende Querywerte zentral ueber `Request.GetQueryNameValuePairs()` nachziehen.
|
||||||
|
13. Pickups zuerst ueber schlanke Services loesen.
|
||||||
|
14. Komplexe Matrix42-Services erst bei Bedarf laden.
|
||||||
|
15. Bei Unity-Fehlern konkrete Implementierung/Registrator suchen.
|
||||||
|
16. Webservice-Operationen nach erfolgreicher Installation in Matrix42 synchronisieren.
|
||||||
|
17. Synchronisierte Operationen exportieren und in die Paketdateien mergen, ohne bestehende IDs zu ersetzen.
|
||||||
|
18. Operation-Dateien sprechend nach Operation benennen und in `install.xml` referenzieren.
|
||||||
|
19. Postman-Collection fuer alte Client-Routen aufbauen.
|
||||||
|
20. Paket installieren, Service synchronisieren und Smoke-Tests ausfuehren.
|
||||||
|
21. Erst nach erfolgreicher Kompatibilitaet fachliche Weiterentwicklungen einbringen.
|
||||||
|
|
||||||
## Git-/Build-Hinweise in diesem Repo
|
## Git- und Datei-Hinweise
|
||||||
|
|
||||||
- Vor Aenderungen `git status` pruefen.
|
- Vor Aenderungen `git status` pruefen.
|
||||||
- Geaenderte Textdateien mit CRLF speichern.
|
- Unrelated/untracked Dateien nicht mitcommitten.
|
||||||
- Nach Aenderungen Release-Build ausfuehren.
|
- Textdateien in diesem Repo mit CRLF speichern.
|
||||||
- Danach committen und pushen.
|
- `.dat`-Dateien behalten ihren UTF-8-BOM.
|
||||||
|
- Controller-/JSON-Dateien ohne unnoetigen BOM lassen.
|
||||||
|
- Debug-Build fuer Debugging, Release/Release_signed fuer Auslieferung.
|
||||||
|
- Postman-Collection nach JSON-Aenderungen immer parsen/validieren.
|
||||||
|
|||||||
@@ -26,8 +26,8 @@
|
|||||||
"script": {
|
"script": {
|
||||||
"type": "text/javascript",
|
"type": "text/javascript",
|
||||||
"exec": [
|
"exec": [
|
||||||
"pm.test(\"No unhandled 5xx server error\", function () {",
|
"pm.test(\"Request returns a successful or redirect status\", function () {",
|
||||||
" pm.expect(pm.response.code).to.be.below(500);",
|
" pm.expect(pm.response.code).to.be.below(400);",
|
||||||
"});",
|
"});",
|
||||||
"",
|
"",
|
||||||
"if (pm.response.text()) {",
|
"if (pm.response.text()) {",
|
||||||
@@ -113,6 +113,10 @@
|
|||||||
"key": "overviewKey",
|
"key": "overviewKey",
|
||||||
"value": "open"
|
"value": "open"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"key": "overviewRelationExpectedCount",
|
||||||
|
"value": "0"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"key": "overviewKeys",
|
"key": "overviewKeys",
|
||||||
"value": "TicketsNew,TicketsActive,TicketsCritical,TicketsNewInfo,IncidentNew,IncidentActive,IncidentCritical,IncidentNewInfo,UnassignedTickets,UnassignedTicketsCritical"
|
"value": "TicketsNew,TicketsActive,TicketsCritical,TicketsNewInfo,IncidentNew,IncidentActive,IncidentCritical,IncidentNewInfo,UnassignedTickets,UnassignedTicketsCritical"
|
||||||
@@ -343,8 +347,8 @@
|
|||||||
" }",
|
" }",
|
||||||
" if (ticket.ActivityType) {",
|
" if (ticket.ActivityType) {",
|
||||||
" pm.collectionVariables.set(\"objectType\", ticket.ActivityType);",
|
" pm.collectionVariables.set(\"objectType\", ticket.ActivityType);",
|
||||||
" pm.collectionVariables.set(\"type\", ticket.ActivityType);",
|
|
||||||
" }",
|
" }",
|
||||||
|
" pm.collectionVariables.set(\"type\", \"ticket\");",
|
||||||
" pm.test(\"Captured ticket object id and type\", function () {",
|
" pm.test(\"Captured ticket object id and type\", function () {",
|
||||||
" pm.expect(pm.collectionVariables.get(\"eoid\")).to.match(/^[0-9a-fA-F-]{36}$/);",
|
" pm.expect(pm.collectionVariables.get(\"eoid\")).to.match(/^[0-9a-fA-F-]{36}$/);",
|
||||||
" pm.expect(pm.collectionVariables.get(\"type\")).to.be.a(\"string\").and.not.empty;",
|
" pm.expect(pm.collectionVariables.get(\"type\")).to.be.a(\"string\").and.not.empty;",
|
||||||
@@ -524,6 +528,39 @@
|
|||||||
"item": [
|
"item": [
|
||||||
{
|
{
|
||||||
"name": "getTicketOverviewCounts personal",
|
"name": "getTicketOverviewCounts personal",
|
||||||
|
"event": [
|
||||||
|
{
|
||||||
|
"listen": "test",
|
||||||
|
"script": {
|
||||||
|
"type": "text/javascript",
|
||||||
|
"exec": [
|
||||||
|
"const overviewCountsPersonalJson = pm.response.json();",
|
||||||
|
"const overviewCountsPersonal = overviewCountsPersonalJson.counts || overviewCountsPersonalJson.Counts || {};",
|
||||||
|
"const overviewPreferredKeysPersonal = (pm.collectionVariables.get(\"overviewKeys\") || \"\")",
|
||||||
|
" .split(\",\")",
|
||||||
|
" .map(key => key.trim())",
|
||||||
|
" .filter(Boolean);",
|
||||||
|
"const overviewRelationKeyPersonal = overviewPreferredKeysPersonal.find(key => Number(overviewCountsPersonal[key] || 0) > 0)",
|
||||||
|
" || Object.keys(overviewCountsPersonal).find(key => Number(overviewCountsPersonal[key] || 0) > 0)",
|
||||||
|
" || overviewPreferredKeysPersonal[0]",
|
||||||
|
" || Object.keys(overviewCountsPersonal)[0]",
|
||||||
|
" || \"\";",
|
||||||
|
"const overviewRelationCountPersonal = overviewRelationKeyPersonal ? Number(overviewCountsPersonal[overviewRelationKeyPersonal] || 0) : 0;",
|
||||||
|
"",
|
||||||
|
"pm.collectionVariables.set(\"scope\", \"personal\");",
|
||||||
|
"pm.collectionVariables.set(\"overviewKey\", overviewRelationKeyPersonal);",
|
||||||
|
"pm.collectionVariables.set(\"overviewRelationExpectedCount\", String(overviewRelationCountPersonal));",
|
||||||
|
"",
|
||||||
|
"pm.test(\"Captured personal overview relation parameters\", function () {",
|
||||||
|
" pm.expect(overviewCountsPersonal).to.be.an(\"object\");",
|
||||||
|
" pm.expect(pm.collectionVariables.get(\"scope\")).to.equal(\"personal\");",
|
||||||
|
" pm.expect(pm.collectionVariables.get(\"overviewKey\")).to.be.a(\"string\").and.not.empty;",
|
||||||
|
" pm.expect(Number(pm.collectionVariables.get(\"overviewRelationExpectedCount\"))).to.be.at.least(0);",
|
||||||
|
"});"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
"request": {
|
"request": {
|
||||||
"method": "GET",
|
"method": "GET",
|
||||||
"header": [
|
"header": [
|
||||||
@@ -569,6 +606,39 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "getTicketOverviewCounts role",
|
"name": "getTicketOverviewCounts role",
|
||||||
|
"event": [
|
||||||
|
{
|
||||||
|
"listen": "test",
|
||||||
|
"script": {
|
||||||
|
"type": "text/javascript",
|
||||||
|
"exec": [
|
||||||
|
"const overviewCountsRoleJson = pm.response.json();",
|
||||||
|
"const overviewCountsRole = overviewCountsRoleJson.counts || overviewCountsRoleJson.Counts || {};",
|
||||||
|
"const overviewPreferredKeysRole = (pm.collectionVariables.get(\"overviewKeys\") || \"\")",
|
||||||
|
" .split(\",\")",
|
||||||
|
" .map(key => key.trim())",
|
||||||
|
" .filter(Boolean);",
|
||||||
|
"const overviewRelationKeyRole = overviewPreferredKeysRole.find(key => Number(overviewCountsRole[key] || 0) > 0)",
|
||||||
|
" || Object.keys(overviewCountsRole).find(key => Number(overviewCountsRole[key] || 0) > 0)",
|
||||||
|
" || overviewPreferredKeysRole[0]",
|
||||||
|
" || Object.keys(overviewCountsRole)[0]",
|
||||||
|
" || \"\";",
|
||||||
|
"const overviewRelationCountRole = overviewRelationKeyRole ? Number(overviewCountsRole[overviewRelationKeyRole] || 0) : 0;",
|
||||||
|
"",
|
||||||
|
"pm.collectionVariables.set(\"scope\", \"role\");",
|
||||||
|
"pm.collectionVariables.set(\"overviewKey\", overviewRelationKeyRole);",
|
||||||
|
"pm.collectionVariables.set(\"overviewRelationExpectedCount\", String(overviewRelationCountRole));",
|
||||||
|
"",
|
||||||
|
"pm.test(\"Captured role overview relation parameters\", function () {",
|
||||||
|
" pm.expect(overviewCountsRole).to.be.an(\"object\");",
|
||||||
|
" pm.expect(pm.collectionVariables.get(\"scope\")).to.equal(\"role\");",
|
||||||
|
" pm.expect(pm.collectionVariables.get(\"overviewKey\")).to.be.a(\"string\").and.not.empty;",
|
||||||
|
" pm.expect(Number(pm.collectionVariables.get(\"overviewRelationExpectedCount\"))).to.be.at.least(0);",
|
||||||
|
"});"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
"request": {
|
"request": {
|
||||||
"method": "GET",
|
"method": "GET",
|
||||||
"header": [
|
"header": [
|
||||||
@@ -645,6 +715,23 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "getTicketOverviewRelations",
|
"name": "getTicketOverviewRelations",
|
||||||
|
"event": [
|
||||||
|
{
|
||||||
|
"listen": "test",
|
||||||
|
"script": {
|
||||||
|
"type": "text/javascript",
|
||||||
|
"exec": [
|
||||||
|
"const overviewRelations = pm.response.text() ? pm.response.json() : [];",
|
||||||
|
"const expectedOverviewRelationCount = Number(pm.collectionVariables.get(\"overviewRelationExpectedCount\") || 0);",
|
||||||
|
"",
|
||||||
|
"pm.test(\"Overview relations count matches captured overview count\", function () {",
|
||||||
|
" pm.expect(Array.isArray(overviewRelations)).to.equal(true);",
|
||||||
|
" pm.expect(overviewRelations.length).to.equal(expectedOverviewRelationCount);",
|
||||||
|
"});"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
"request": {
|
"request": {
|
||||||
"method": "GET",
|
"method": "GET",
|
||||||
"header": [
|
"header": [
|
||||||
@@ -654,7 +741,7 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"url": {
|
"url": {
|
||||||
"raw": "{{baseUrl}}/api/c4itf4sdwebapi/getTicketOverviewRelations?sid={{sid}}&scope={{scope}}&key={{overviewKey}}&count=25&queueoption={{queueOption}}&queues={{queues}}",
|
"raw": "{{baseUrl}}/api/c4itf4sdwebapi/getTicketOverviewRelations?sid={{sid}}&scope={{scope}}&key={{overviewKey}}&count={{overviewRelationExpectedCount}}&queueoption={{queueOption}}&queues={{queues}}",
|
||||||
"host": [
|
"host": [
|
||||||
"{{baseUrl}}"
|
"{{baseUrl}}"
|
||||||
],
|
],
|
||||||
@@ -678,7 +765,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "count",
|
"key": "count",
|
||||||
"value": "25"
|
"value": "{{overviewRelationExpectedCount}}"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"key": "queueoption",
|
"key": "queueoption",
|
||||||
@@ -842,111 +929,6 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "05 Logs OData",
|
|
||||||
"item": [
|
|
||||||
{
|
|
||||||
"name": "Logs list",
|
|
||||||
"request": {
|
|
||||||
"method": "GET",
|
|
||||||
"header": [
|
|
||||||
{
|
|
||||||
"key": "Accept",
|
|
||||||
"value": "application/json"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"url": {
|
|
||||||
"raw": "{{baseUrl}}/api/c4itf4sdwebapi/logs",
|
|
||||||
"host": [
|
|
||||||
"{{baseUrl}}"
|
|
||||||
],
|
|
||||||
"path": [
|
|
||||||
"api",
|
|
||||||
"c4itf4sdwebapi",
|
|
||||||
"logs"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Logs list filtered",
|
|
||||||
"request": {
|
|
||||||
"method": "GET",
|
|
||||||
"header": [
|
|
||||||
{
|
|
||||||
"key": "Accept",
|
|
||||||
"value": "application/json"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"url": {
|
|
||||||
"raw": "{{baseUrl}}/api/c4itf4sdwebapi/logs?$filter={{logFilter}}",
|
|
||||||
"host": [
|
|
||||||
"{{baseUrl}}"
|
|
||||||
],
|
|
||||||
"path": [
|
|
||||||
"api",
|
|
||||||
"c4itf4sdwebapi",
|
|
||||||
"logs"
|
|
||||||
],
|
|
||||||
"query": [
|
|
||||||
{
|
|
||||||
"key": "$filter",
|
|
||||||
"value": "{{logFilter}}"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Logs count",
|
|
||||||
"request": {
|
|
||||||
"method": "GET",
|
|
||||||
"header": [
|
|
||||||
{
|
|
||||||
"key": "Accept",
|
|
||||||
"value": "application/json"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"url": {
|
|
||||||
"raw": "{{baseUrl}}/api/c4itf4sdwebapi/logs/$count",
|
|
||||||
"host": [
|
|
||||||
"{{baseUrl}}"
|
|
||||||
],
|
|
||||||
"path": [
|
|
||||||
"api",
|
|
||||||
"c4itf4sdwebapi",
|
|
||||||
"logs",
|
|
||||||
"$count"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Logs get by id",
|
|
||||||
"request": {
|
|
||||||
"method": "GET",
|
|
||||||
"header": [
|
|
||||||
{
|
|
||||||
"key": "Accept",
|
|
||||||
"value": "application/json"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"url": {
|
|
||||||
"raw": "{{baseUrl}}/api/c4itf4sdwebapi/logs/{{logEntryId}}",
|
|
||||||
"host": [
|
|
||||||
"{{baseUrl}}"
|
|
||||||
],
|
|
||||||
"path": [
|
|
||||||
"api",
|
|
||||||
"c4itf4sdwebapi",
|
|
||||||
"logs",
|
|
||||||
"{{logEntryId}}"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user