Compare commits

...

7 Commits

Author SHA1 Message Date
Samuele Locatelli 4b04feedff Merge branch 'release/UpgradeMapoCoreAll' 2022-07-07 18:58:34 +02:00
Samuele Locatelli e99def8664 Update LAND x refresh pagina 2022-07-07 18:57:34 +02:00
Samuele Locatelli a8744cfc56 Refresh STATS
- page reload
- Nuget upgrade
2022-07-07 18:52:53 +02:00
Samuele Locatelli 03761b81ec Merge tag 'UpgradeMapoMon' into develop
Update mapo MON x verificare reboot da Jetco
2022-07-07 18:49:28 +02:00
Samuele Locatelli dd4f403b7a Merge branch 'release/UpgradeMapoMon' 2022-07-07 18:49:16 +02:00
Samuele Locatelli c7d1ca046c Update/refresh MON:
- cambio logica reload blazor x MON
- update nuget vari
- rimozione warnings
2022-07-07 18:48:33 +02:00
Samuele Locatelli 2c3494f9f0 Merge tag 'UpdateAboutColorCheck' into develop
Update comportamento colori x About page e check licenze
2022-07-06 13:31:10 +02:00
25 changed files with 279 additions and 182 deletions
+6 -6
View File
@@ -9,18 +9,18 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="5.0.10" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.10">
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.6" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.6">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="5.0.10" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.10" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.10">
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.6" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.6" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.6">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="NLog" Version="4.7.11" />
<PackageReference Include="NLog" Version="5.0.1" />
</ItemGroup>
<ItemGroup>
+6 -6
View File
@@ -12,14 +12,14 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.4" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.4">
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.6" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.6" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.6" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.6">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="6.0.4" />
<PackageReference Include="NLog" Version="4.7.15" />
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="6.0.6" />
<PackageReference Include="NLog" Version="5.0.1" />
</ItemGroup>
</Project>
+5 -5
View File
@@ -3,7 +3,7 @@
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<RootNamespace>MP.Land</RootNamespace>
<Version>6.15.2207.0613</Version>
<Version>6.15.2207.0718</Version>
</PropertyGroup>
<ItemGroup>
@@ -45,14 +45,14 @@
<ItemGroup>
<PackageReference Include="DiffMatchPatch" Version="1.0.3" />
<PackageReference Include="Majorsoft.Blazor.Components.Debounce" Version="1.5.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.10">
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.6">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="5.0.0" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="5.0.2" />
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="6.0.6" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="6.0.6" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="NLog.Web.AspNetCore" Version="4.14.0" />
<PackageReference Include="NLog.Web.AspNetCore" Version="5.0.0" />
<PackageReference Include="RestSharp" Version="107.1.2" />
</ItemGroup>
+23 -4
View File
@@ -36,11 +36,30 @@
<a class="dismiss">🗙</a>
</div>
@* Riconnessione server app: https://www.syncfusion.com/faq/how-do-i-reconnect-blazor-server-side-automatically *@
@*Gestione autoriconnessione: https://github.com/dotnet/aspnetcore/issues/38305 (vedere anche https://docs.microsoft.com/it-it/aspnet/core/blazor/fundamentals/signalr?view=aspnetcore-6.0#modify-the-reconnection-handler-blazor-server)*@
<script>
Blazor.defaultReconnectionHandler._reconnectCallback = function (d) {
document.location.reload();
}
//Blazor.start().then(() => {
// Blazor.defaultReconnectionHandler._reconnectionDisplay = {
// show: () => { },
// update: (d) => { },
// rejected: (d) => document.location.reload()
// };
//});
Blazor.start().then(() => {
Object.defineProperty(Blazor.defaultReconnectionHandler, '_reconnectionDisplay', {
get() {
return this.__reconnectionDisplay;
},
set(value) {
this.__reconnectionDisplay = {
show: () => value.show(),
update: (d) => value.update(d),
rejected: (d) => document.location.reload()
}
}
});
});
</script>
<!-- inside of body section and after the div/app tag -->
+1 -1
View File
@@ -1,6 +1,6 @@
<body>
<i>Modulo gestione Programmi MAPO</i>
<h4>Versione: 6.15.2207.0613</h4>
<h4>Versione: 6.15.2207.0718</h4>
<br />
Note di rilascio:
<ul>
+1 -1
View File
@@ -1 +1 @@
6.15.2207.0613
6.15.2207.0718
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<item>
<version>6.15.2207.0613</version>
<version>6.15.2207.0718</version>
<url>https://nexus.steamware.net/repository/SWS/MP-LAND/stable/LAST/MP.Land.zip</url>
<changelog>https://nexus.steamware.net/repository/SWS/MP-LAND/stable/LAST/ChangeLog.html</changelog>
<mandatory>false</mandatory>
-38
View File
@@ -7,41 +7,3 @@
</div>
</div>
@code {
Version version = typeof(Program).Assembly.GetName().Version;
protected override async Task OnInitializedAsync()
{
StartTimer();
}
public void Dispose()
{
aTimer.Stop();
aTimer.Dispose();
}
private static System.Timers.Timer aTimer;
public void StartTimer()
{
int tOutPeriod = 1000;
//int.TryParse(Configuration["ReloadStatusTimer"], out tOutPeriod);
aTimer = new System.Timers.Timer(tOutPeriod);
aTimer.Elapsed += ElapsedTimer;
aTimer.Enabled = true;
aTimer.Start();
}
public void ElapsedTimer(Object source, System.Timers.ElapsedEventArgs e)
{
var pUpd = Task.Run(async () =>
{
//await ReloadData();
await Task.Delay(1);
await InvokeAsync(StateHasChanged);
});
pUpd.Wait();
}
}
+55
View File
@@ -0,0 +1,55 @@
namespace MP.Mon.Components
{
public partial class CmpFooter
{
#region Public Methods
public void Dispose()
{
aTimer.Stop();
aTimer.Dispose();
}
public void ElapsedTimer(object? source, System.Timers.ElapsedEventArgs e)
{
var pUpd = Task.Run(async () =>
{
//await ReloadData();
await Task.Delay(1);
await InvokeAsync(StateHasChanged);
});
pUpd.Wait();
}
public void StartTimer()
{
int tOutPeriod = 1000;
//int.TryParse(Configuration["ReloadStatusTimer"], out tOutPeriod);
aTimer = new System.Timers.Timer(tOutPeriod);
aTimer.Elapsed += ElapsedTimer;
aTimer.Enabled = true;
aTimer.Start();
}
#endregion Public Methods
#region Protected Methods
protected override async Task OnInitializedAsync()
{
var currAssembly = typeof(Program).Assembly.GetName();
version = currAssembly.Version != null ? currAssembly.Version : new Version();
StartTimer();
await Task.Delay(1);
}
#endregion Protected Methods
#region Private Fields
private static System.Timers.Timer aTimer = null!;
private Version version = null!;
#endregion Private Fields
}
}
+1 -1
View File
@@ -54,7 +54,7 @@
{
<div class="d-flex justify-content-between pt-0 pb-2 px-1 fontSmall">
<div class="px-1 text-uppercase"><b>@CurrRecord.DescrizioneStato</b></div>
<div class="px-1 ps-0">@getMinSec((decimal)CurrRecord.Durata)</div>
<div class="px-1 ps-0">@getMinSec(getDecimal(@CurrRecord.Durata))</div>
</div>
}
@if (hasRow(3))
+14 -3
View File
@@ -140,7 +140,7 @@ namespace MP.Mon.Components
aTimer.Dispose();
}
public void ElapsedTimer(Object source, System.Timers.ElapsedEventArgs e)
public void ElapsedTimer(object? source, System.Timers.ElapsedEventArgs e)
{
var pUpd = Task.Run(async () =>
{
@@ -168,7 +168,7 @@ namespace MP.Mon.Components
{
StartTimer();
Random rnd = new Random();
//await Task.Delay(rnd.Next(500));
await Task.Delay(rnd.Next(5));
dataLoaded = true;
setupConf();
}
@@ -219,13 +219,24 @@ namespace MP.Mon.Components
return answ;
}
private decimal getDecimal(object? rawData)
{
decimal answ = 0;
if (rawData != null)
{
decimal.TryParse($"{rawData}", out answ);
}
return answ;
}
private string getMinSec(decimal? currTimeMin)
{
string answ = "nd";
TimeSpan tSpan = new TimeSpan(0);
try
{
tSpan = TimeSpan.FromMinutes((double)currTimeMin);
double cTimeMin = currTimeMin != null ? (double)currTimeMin : 0;
tSpan = TimeSpan.FromMinutes(cTimeMin);
answ = $"{tSpan:mm}:{tSpan:ss}";
}
catch
+1 -86
View File
@@ -1,90 +1,5 @@
{
"IobSetup": {
"***": [
{
"ColNum": 1,
"RowNum": 5,
"TagCss": "fontSmall",
"TagName": "Feed Over",
"TagLocation": "MoonPro:SQL2016DEV:MoonPro:FLOG:***:FEED_OVER"
},
{
"ColNum": 2,
"RowNum": 5,
"TagCss": "fontSmall",
"TagName": "Rapid Over",
"TagLocation": "MoonPro:SQL2016DEV:MoonPro:FLOG:***:RAPID_OVER"
}
],
"SIMUL_01": [
{
"ColNum": 1,
"RowNum": 6,
"TagCss": "fontSmall",
"TagName": "Power",
"TagLocation": "MoonPro:SQL2016DEV:MoonPro:FLOG:SIMUL_01:POWER_01"
}
],
"SIMUL_02": [
{
"ColNum": 1,
"RowNum": 6,
"TagCss": "fontSmall",
"TagName": "Power",
"TagLocation": "MoonPro:SQL2016DEV:MoonPro:FLOG:SIMUL_02:POWER_01"
}
],
"GIACO_ICOEL_001": [
{
"ColNum": 1,
"RowNum": 1,
"TagName": "Vel",
"TagLocation": "FluxData:TonnOra"
},
{
"ColNum": 2,
"RowNum": 1,
"TagName": "Vel",
"TagLocation": "FluxData:PezziMin"
},
{
"ColNum": 1,
"RowNum": 2,
"TagName": "Batch SX",
"TagLocation": "FluxData:BatchL1"
},
{
"ColNum": 2,
"RowNum": 2,
"TagName": "Batch DX",
"TagLocation": "FluxData:BatchL2"
}
],
"GIACO_ICOEL_002": [
{
"ColNum": 1,
"RowNum": 1,
"TagName": "Vel",
"TagLocation": "FluxData:TonnOra"
},
{
"ColNum": 2,
"RowNum": 1,
"TagName": "Vel",
"TagLocation": "FluxData:PezziMin"
},
{
"ColNum": 1,
"RowNum": 2,
"TagName": "Batch SX",
"TagLocation": "FluxData:BatchL1"
},
{
"ColNum": 2,
"RowNum": 2,
"TagName": "Batch DX",
"TagLocation": "FluxData:BatchL2"
}
]
"***": []
}
}
+90
View File
@@ -0,0 +1,90 @@
{
"IobSetup": {
"***": [
{
"ColNum": 1,
"RowNum": 5,
"TagCss": "fontSmall",
"TagName": "Feed Over",
"TagLocation": "MoonPro:SQL2016DEV:MoonPro:FLOG:***:FEED_OVER"
},
{
"ColNum": 2,
"RowNum": 5,
"TagCss": "fontSmall",
"TagName": "Rapid Over",
"TagLocation": "MoonPro:SQL2016DEV:MoonPro:FLOG:***:RAPID_OVER"
}
],
"SIMUL_01": [
{
"ColNum": 1,
"RowNum": 6,
"TagCss": "fontSmall",
"TagName": "Power",
"TagLocation": "MoonPro:SQL2016DEV:MoonPro:FLOG:SIMUL_01:POWER_01"
}
],
"SIMUL_02": [
{
"ColNum": 1,
"RowNum": 6,
"TagCss": "fontSmall",
"TagName": "Power",
"TagLocation": "MoonPro:SQL2016DEV:MoonPro:FLOG:SIMUL_02:POWER_01"
}
],
"GIACO_ICOEL_001": [
{
"ColNum": 1,
"RowNum": 1,
"TagName": "Vel",
"TagLocation": "FluxData:TonnOra"
},
{
"ColNum": 2,
"RowNum": 1,
"TagName": "Vel",
"TagLocation": "FluxData:PezziMin"
},
{
"ColNum": 1,
"RowNum": 2,
"TagName": "Batch SX",
"TagLocation": "FluxData:BatchL1"
},
{
"ColNum": 2,
"RowNum": 2,
"TagName": "Batch DX",
"TagLocation": "FluxData:BatchL2"
}
],
"GIACO_ICOEL_002": [
{
"ColNum": 1,
"RowNum": 1,
"TagName": "Vel",
"TagLocation": "FluxData:TonnOra"
},
{
"ColNum": 2,
"RowNum": 1,
"TagName": "Vel",
"TagLocation": "FluxData:PezziMin"
},
{
"ColNum": 1,
"RowNum": 2,
"TagName": "Batch SX",
"TagLocation": "FluxData:BatchL1"
},
{
"ColNum": 2,
"RowNum": 2,
"TagName": "Batch DX",
"TagLocation": "FluxData:BatchL2"
}
]
}
}
+5 -5
View File
@@ -11,14 +11,14 @@ namespace MP.Mon.Data
{
#region Public Fields
public static MP.Data.Controllers.MpMonController dbController;
public static MP.Data.Controllers.MpMonController dbController { get; set; } = null!;
#endregion Public Fields
#region Private Fields
private static IConfiguration _configuration;
private static ILogger<MpDataService> _logger;
private static IConfiguration _configuration = null!;
private static ILogger<MpDataService> _logger = null!;
private static NLog.Logger Log = LogManager.GetCurrentClassLogger();
@@ -100,10 +100,10 @@ namespace MP.Mon.Data
{
string outVal = "";
// cerco in REDIS la conf x l'IOB
string rawData = redisDb.StringGet(redKey);
var rawData = redisDb.StringGet(redKey);
if (!string.IsNullOrEmpty(rawData))
{
outVal = rawData;
outVal = $"{rawData}";
}
return outVal;
}
+9 -3
View File
@@ -4,7 +4,7 @@
<TargetFramework>net6.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<Version>6.15.2206.616</Version>
<Version>6.15.2207.718</Version>
</PropertyGroup>
<ItemGroup>
@@ -30,14 +30,20 @@
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="NLog" Version="4.7.15" />
<PackageReference Include="StackExchange.Redis" Version="2.5.61" />
<PackageReference Include="NLog" Version="5.0.1" />
<PackageReference Include="StackExchange.Redis" Version="2.6.48" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\MP.Data\MP.Data.csproj" />
</ItemGroup>
<ItemGroup>
<Content Update="Conf\iobTagsConf.office.json">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</Content>
</ItemGroup>
<ItemGroup>
<None Update="logs\.placeholder">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
+3 -2
View File
@@ -59,7 +59,7 @@ namespace MP.Mon.Pages
slowTimer.Dispose();
}
public void ElapsedFastTimer(Object source, System.Timers.ElapsedEventArgs e)
public void ElapsedFastTimer(object? source, System.Timers.ElapsedEventArgs e)
{
var pUpd = Task.Run(async () =>
{
@@ -70,9 +70,10 @@ namespace MP.Mon.Pages
pUpd.Wait();
}
public async void ElapsedSlowTimer(Object source, System.Timers.ElapsedEventArgs e)
public async void ElapsedSlowTimer(object? source, System.Timers.ElapsedEventArgs e)
{
ListMSE = null;
await Task.Delay(1);
NavManager.NavigateTo(NavManager.Uri);
}
+23 -4
View File
@@ -28,11 +28,30 @@
<a class="dismiss">🗙</a>
</div>
@* Riconnessione server app: https://www.syncfusion.com/faq/how-do-i-reconnect-blazor-server-side-automatically *@
@*Gestione autoriconnessione: https://github.com/dotnet/aspnetcore/issues/38305 (vedere anche https://docs.microsoft.com/it-it/aspnet/core/blazor/fundamentals/signalr?view=aspnetcore-6.0#modify-the-reconnection-handler-blazor-server)*@
<script>
Blazor.defaultReconnectionHandler._reconnectCallback = function (d) {
document.location.reload();
}
//Blazor.start().then(() => {
// Blazor.defaultReconnectionHandler._reconnectionDisplay = {
// show: () => { },
// update: (d) => { },
// rejected: (d) => document.location.reload()
// };
//});
Blazor.start().then(() => {
Object.defineProperty(Blazor.defaultReconnectionHandler, '_reconnectionDisplay', {
get() {
return this.__reconnectionDisplay;
},
set(value) {
this.__reconnectionDisplay = {
show: () => value.show(),
update: (d) => value.update(d),
rejected: (d) => document.location.reload()
}
}
});
});
</script>
<script src="_framework/blazor.server.js"></script>
+1 -1
View File
@@ -1,6 +1,6 @@
<body>
<i>Modulo MON MAPO</i>
<h4>Versione: 6.15.2206.616</h4>
<h4>Versione: 6.15.2207.718</h4>
<br /> Note di rilascio:
<ul>
<li>
+1 -1
View File
@@ -1 +1 @@
6.15.2206.616
6.15.2207.718
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<item>
<version>6.15.2206.616</version>
<version>6.15.2207.718</version>
<url>https://nexus.steamware.net/repository/SWS/MP-MON/stable/LAST/MP.Mon.zip</url>
<changelog>https://nexus.steamware.net/repository/SWS/MP-MON/stable/LAST/ChangeLog.html</changelog>
<mandatory>false</mandatory>
+6 -6
View File
@@ -4,7 +4,7 @@
<TargetFramework>net6.0</TargetFramework>
<RootNamespace>MP.Stats</RootNamespace>
<UserSecretsId>826e877c-ba70-4253-84cb-d0b1cafd4440</UserSecretsId>
<Version>6.15.2207.0510</Version>
<Version>6.15.2207.0718</Version>
</PropertyGroup>
<ItemGroup>
@@ -185,12 +185,12 @@
</ItemGroup>
<ItemGroup>
<PackageReference Include="ElmahCore" Version="2.1.1" />
<PackageReference Include="ElmahCore.Common" Version="2.1.1" />
<PackageReference Include="ElmahCore.Sql" Version="2.1.1" />
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="6.0.4" />
<PackageReference Include="ElmahCore" Version="2.1.2" />
<PackageReference Include="ElmahCore.Common" Version="2.1.2" />
<PackageReference Include="ElmahCore.Sql" Version="2.1.2" />
<PackageReference Include="Microsoft.Extensions.Caching.StackExchangeRedis" Version="6.0.6" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="NLog.Web.AspNetCore" Version="4.14.0" />
<PackageReference Include="NLog.Web.AspNetCore" Version="5.0.0" />
</ItemGroup>
<ItemGroup>
+23 -4
View File
@@ -33,11 +33,30 @@
<a class="dismiss">🗙</a>
</div>
@* Riconnessione server app: https://www.syncfusion.com/faq/how-do-i-reconnect-blazor-server-side-automatically *@
@*Gestione autoriconnessione: https://github.com/dotnet/aspnetcore/issues/38305 (vedere anche https://docs.microsoft.com/it-it/aspnet/core/blazor/fundamentals/signalr?view=aspnetcore-6.0#modify-the-reconnection-handler-blazor-server)*@
<script>
Blazor.defaultReconnectionHandler._reconnectCallback = function (d) {
document.location.reload();
}
//Blazor.start().then(() => {
// Blazor.defaultReconnectionHandler._reconnectionDisplay = {
// show: () => { },
// update: (d) => { },
// rejected: (d) => document.location.reload()
// };
//});
Blazor.start().then(() => {
Object.defineProperty(Blazor.defaultReconnectionHandler, '_reconnectionDisplay', {
get() {
return this.__reconnectionDisplay;
},
set(value) {
this.__reconnectionDisplay = {
show: () => value.show(),
update: (d) => value.update(d),
rejected: (d) => document.location.reload()
}
}
});
});
</script>
<script src="_framework/blazor.server.js"></script>
+1 -1
View File
@@ -1,6 +1,6 @@
<body>
<i>Modulo statistiche MAPO</i>
<h4>Versione: 6.15.2207.0510</h4>
<h4>Versione: 6.15.2207.0718</h4>
<br />
Note di rilascio:
<ul>
+1 -1
View File
@@ -1 +1 @@
6.15.2207.0510
6.15.2207.0718
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<item>
<version>6.15.2207.0510</version>
<version>6.15.2207.0718</version>
<url>https://nexus.steamware.net/repository/SWS/MP-STATS/stable/LAST/MP.Stats.zip</url>
<changelog>https://nexus.steamware.net/repository/SWS/MP-STATS/stable/LAST/ChangeLog.html</changelog>
<mandatory>false</mandatory>