());
diff --git a/src/integrations/ctrl/src/Examples/AXOpen.AxoData/AxoDataFragmentExchangeDocu.st b/src/integrations/ctrl/src/Examples/AXOpen.AxoData/AxoDataFragmentExchangeDocu.st
new file mode 100644
index 000000000..4f899172b
--- /dev/null
+++ b/src/integrations/ctrl/src/Examples/AXOpen.AxoData/AxoDataFragmentExchangeDocu.st
@@ -0,0 +1,117 @@
+USING AXOpen.Core;
+USING AXOpen.Data;
+USING AXOpen.Probers;
+
+NAMESPACE AxoDataFramentsExchangeDocuExample
+
+ //
+ CLASS AxoDataFragmentExchangeContext EXTENDS AXOpen.Core.AxoContext
+ VAR PUBLIC
+ ProcessData : ProcessDataManager;
+ END_VAR
+
+ METHOD PROTECTED OVERRIDE Main
+ // This is required to run cyclically. Method provides handling of data exchange tasks.
+ ProcessData.Run(THIS);
+ END_METHOD
+ END_CLASS
+ //
+
+ //
+ CLASS ProcessDataManager EXTENDS AXOpen.Data.AxoDataFragmentExchange
+ VAR PUBLIC
+ {#ix-attr:[AXOpen.Data.AxoDataFragmentAttribute]}
+ SharedHeader : SharedDataHeaderManger;
+ {#ix-attr:[AXOpen.Data.AxoDataFragmentAttribute]}
+ Station_1 : Station_1_ProcessDataManger;
+ END_VAR
+ END_CLASS
+ //
+
+ //
+ CLASS UseManager
+ VAR
+ _create : BOOL;
+ _read : BOOL;
+ _update : BOOL;
+ _delete : BOOL;
+ _id : STRING;
+ END_VAR
+
+ METHOD Use
+ VAR_IN_OUT
+ DataFragmentManager : ProcessDataManager;
+ END_VAR
+ IF(_create) THEN
+ IF(DataFragmentManager.Create(_id).IsDone()) THEN
+ _create := FALSE;
+ END_IF;
+ END_IF;
+
+ IF(_read) THEN
+ IF(DataFragmentManager.Read(_id).IsDone()) THEN
+ _read := FALSE;
+ END_IF;
+ END_IF;
+
+ IF(_update) THEN
+ IF(DataFragmentManager.Update(_id).IsDone()) THEN
+ _update := FALSE;
+ END_IF;
+ END_IF;
+
+ IF(_delete) THEN
+ IF(DataFragmentManager.Delete(_id).IsDone()) THEN
+ _delete := FALSE;
+ END_IF;
+ END_IF;
+ END_METHOD
+ END_CLASS
+ //
+
+ CLASS SharedDataHeaderData EXTENDS AXOpen.Data.AxoDataEntity
+ VAR PUBLIC
+ {#ix-set:AttributeName = "Some string data"}
+ SomeData : STRING;
+ {#ix-set:AttributeName = "Some number"}
+ SomeNumber : INT;
+ {#ix-set:AttributeName = "Some boolean"}
+ SomeBool : BOOL;
+ END_VAR
+ END_CLASS
+
+ CLASS SharedDataHeaderManger EXTENDS AXOpen.Data.AxoDataExchange
+ VAR PUBLIC
+ {#ix-generic:TOnline}
+ {#ix-generic:TPlain as POCO}
+ {#ix-attr:[AXOpen.Data.AxoDataEntityAttribute]}
+ {#ix-attr:[Container(Layout.Stack)]}
+ {#ix-set:AttributeName = "Shared Header"}
+ Set : SharedDataHeaderData;
+ END_VAR
+ END_CLASS
+
+ CLASS Station_1_ProcessDataManger
+ EXTENDS AXOpen.Data.AxoDataExchange
+ VAR PUBLIC
+ {#ix-generic:TOnline}
+ {#ix-generic:TPlain as POCO}
+ {#ix-attr:[AXOpen.Data.AxoDataEntityAttribute]}
+ {#ix-attr:[Container(Layout.Stack)]}
+ {#ix-set:AttributeName = "Station 1"}
+ Set : Station_1_Data;
+ END_VAR
+ END_CLASS
+
+ CLASS Station_1_Data
+ EXTENDS AXOpen.Data.AxoDataEntity
+ VAR PUBLIC
+ {#ix-set:AttributeName = "Some string data"}
+ SomeData : STRING;
+ {#ix-set:AttributeName = "Some number"}
+ SomeNumber : INT;
+ {#ix-set:AttributeName = "Some boolean"}
+ SomeBool : BOOL;
+ END_VAR
+ END_CLASS
+END_NAMESPACE
\ No newline at end of file
diff --git a/src/integrations/ctrl/src/IntegrationTests/data/AxoDataFragmentExchange.st b/src/integrations/ctrl/src/IntegrationTests/data/AxoDataFragmentExchange.st
new file mode 100644
index 000000000..ef8b5e3a0
--- /dev/null
+++ b/src/integrations/ctrl/src/IntegrationTests/data/AxoDataFragmentExchange.st
@@ -0,0 +1,203 @@
+USING AXOpen.Core;
+USING AXOpen.Data;
+USING AXOpen.Probers;
+
+NAMESPACE IntegrationAxoDataFramentsExchange
+
+ CLASS AxoDataFragmentExchangeContext EXTENDS AXOpen.Core.AxoContext
+ VAR PUBLIC
+ PD : ProcessData;
+ CreateTest : DataCreateTest;
+ ReadTest : DataReadTest;
+ UpdateTest : DataUpdateTest;
+ DeleteTest : DataDeleteTest;
+ END_VAR
+
+
+ METHOD PROTECTED OVERRIDE Main
+
+ PD.Run(THIS);
+
+ CreateTest.InjectManger(PD);
+ CreateTest.Run(THIS);
+
+ ReadTest.InjectManger(PD);
+ ReadTest.Run(THIS);
+
+ DeleteTest.InjectManger(PD);
+ DeleteTest.Run(THIS);
+
+ UpdateTest.InjectManger(PD);
+ UpdateTest.Run(THIS);
+ END_METHOD
+
+ END_CLASS
+
+ CLASS ProcessData EXTENDS AXOpen.Data.AxoDataFragmentExchange
+ VAR PUBLIC
+ {#ix-attr:[AXOpen.Data.AxoDataFragmentAttribute]}
+ Set : SharedProductionDataManager;
+ {#ix-attr:[AXOpen.Data.AxoDataFragmentAttribute]}
+ Manip : FragmentProcessDataManger;
+ END_VAR
+ END_CLASS
+
+ CLASS SharedProductionData EXTENDS AXOpen.Data.AxoDataEntity
+ VAR PUBLIC
+ ComesFrom : INT;
+ GoesTo : INT;
+ END_VAR
+ END_CLASS
+
+ CLASS SharedProductionDataManager EXTENDS AXOpen.Data.AxoDataExchange
+ VAR PUBLIC
+ {#ix-generic:TOnline}
+ {#ix-generic:TPlain as POCO}
+ {#ix-attr:[AXOpen.Data.AxoDataEntityAttribute]}
+ {#ix-attr:[Container(Layout.Stack)]}
+ Set : SharedProductionData;
+ END_VAR
+ END_CLASS
+
+ CLASS FragmentProcessDataManger
+ EXTENDS AXOpen.Data.AxoDataExchange
+ VAR PUBLIC
+ {#ix-generic:TOnline}
+ {#ix-generic:TPlain as POCO}
+ {#ix-attr:[AXOpen.Data.AxoDataEntityAttribute]}
+ {#ix-attr:[Container(Layout.Stack)]}
+ Set : FragmentProcessData;
+ END_VAR
+ END_CLASS
+
+ CLASS FragmentProcessData
+ EXTENDS AXOpen.Data.AxoDataEntity
+ VAR PUBLIC
+ CounterDelay : ULINT;
+ END_VAR
+ END_CLASS
+
+ CLASS DataCreateTest EXTENDS AxoProberWithCompletedCondition
+ VAR PUBLIC
+ Manager : IAxoDataExchange;
+ Identifier : STRING[254];
+ END_VAR
+ METHOD PROTECTED OVERRIDE Test : BOOL
+ VAR
+ _taskState : IAxoTaskState;
+ END_VAR
+ IF(Manager <> NULL) THEN
+ _taskState := Manager.Create(Identifier);
+ THIS.ThrowWhen(_taskState.HasError(), _taskState.GetErrorDetails());
+ Test := _taskState.IsDone();
+ END_IF;
+ END_METHOD
+
+ METHOD OVERRIDE OnRestore
+ SUPER.OnRestore();
+ IF(Manager <> NULL) THEN
+ Manager.Restore();
+ END_IF;
+ END_METHOD
+
+ METHOD PUBLIC InjectManger
+ VAR_INPUT
+ Injectee : IAxoDataExchange;
+ END_VAR
+ Manager := Injectee;
+ END_METHOD
+ END_CLASS
+
+ CLASS DataReadTest EXTENDS AxoProberWithCompletedCondition
+ VAR PUBLIC
+ Manager : IAxoDataExchange;
+ Identifier : STRING[254];
+ END_VAR
+ METHOD PROTECTED OVERRIDE Test : BOOL
+ VAR
+ _taskState : IAxoTaskState;
+ END_VAR
+ IF(Manager <> NULL) THEN
+ _taskState := Manager.Read(Identifier);
+ THIS.ThrowWhen(_taskState.HasError(), _taskState.GetErrorDetails());
+ Test := _taskState.IsDone();
+ END_IF;
+ END_METHOD
+
+ METHOD OVERRIDE OnRestore
+ SUPER.OnRestore();
+ IF(Manager <> NULL) THEN
+ Manager.Restore();
+ END_IF;
+ END_METHOD
+
+ METHOD PUBLIC InjectManger
+ VAR_INPUT
+ Injectee : IAxoDataExchange;
+ END_VAR
+ Manager := Injectee;
+ END_METHOD
+ END_CLASS
+
+ CLASS DataUpdateTest EXTENDS AxoProberWithCompletedCondition
+ VAR PUBLIC
+ Manager : IAxoDataExchange;
+ Identifier : STRING[254];
+ END_VAR
+ METHOD PROTECTED OVERRIDE Test : BOOL
+ VAR
+ _taskState : IAxoTaskState;
+ END_VAR
+ IF(Manager <> NULL) THEN
+ _taskState := Manager.Update(Identifier);
+ THIS.ThrowWhen(_taskState.HasError(), _taskState.GetErrorDetails());
+ Test := _taskState.IsDone();
+ END_IF;
+ END_METHOD
+
+ METHOD OVERRIDE OnRestore
+ SUPER.OnRestore();
+ IF(Manager <> NULL) THEN
+ Manager.Restore();
+ END_IF;
+ END_METHOD
+
+ METHOD PUBLIC InjectManger
+ VAR_INPUT
+ Injectee : IAxoDataExchange;
+ END_VAR
+ Manager := Injectee;
+ END_METHOD
+ END_CLASS
+
+ CLASS DataDeleteTest EXTENDS AxoProberWithCompletedCondition
+ VAR PUBLIC
+ Manager : IAxoDataExchange;
+ Identifier : STRING[254];
+ END_VAR
+ METHOD PROTECTED OVERRIDE Test : BOOL
+ VAR
+ _taskState : IAxoTaskState;
+ END_VAR
+ IF(Manager <> NULL) THEN
+ _taskState := Manager.Delete(Identifier);
+ THIS.ThrowWhen(_taskState.HasError(), _taskState.GetErrorDetails());
+ Test := _taskState.IsDone();
+ END_IF;
+ END_METHOD
+
+ METHOD OVERRIDE OnRestore
+ SUPER.OnRestore();
+ IF(Manager <> NULL) THEN
+ Manager.Restore();
+ END_IF;
+ END_METHOD
+
+ METHOD PUBLIC InjectManger
+ VAR_INPUT
+ Injectee : IAxoDataExchange;
+ END_VAR
+ Manager := Injectee;
+ END_METHOD
+ END_CLASS
+END_NAMESPACE
\ No newline at end of file
diff --git a/src/integrations/ctrl/src/IntegrationTests/integrationtests.st b/src/integrations/ctrl/src/IntegrationTests/integrationtests.st
index 27eee9f0d..36d7b6351 100644
--- a/src/integrations/ctrl/src/IntegrationTests/integrationtests.st
+++ b/src/integrations/ctrl/src/IntegrationTests/integrationtests.st
@@ -3,6 +3,7 @@ NAMESPACE IntegrationTests
VAR PUBLIC
Probers : ProbersTestContext;
DataExchangeLightTestsContext : IntegrationLightDirect.DataExchangeLightTestsContext;
+ DataFragmentContext : IntegrationAxoDataFramentsExchange.AxoDataFragmentExchangeContext;
DM : IntegrationLightDirect.DataManager;
END_VAR
@@ -11,6 +12,7 @@ NAMESPACE IntegrationTests
DM.Run(DataExchangeLightTestsContext);
DataExchangeLightTestsContext.InjectDM(DM);
DataExchangeLightTestsContext.Run();
+ DataFragmentContext.Run();
END_METHOD
END_CLASS
END_NAMESPACE
\ No newline at end of file
diff --git a/src/integrations/ctrl/src/configuration.st b/src/integrations/ctrl/src/configuration.st
index c417446e5..1be2fdbd7 100644
--- a/src/integrations/ctrl/src/configuration.st
+++ b/src/integrations/ctrl/src/configuration.st
@@ -24,7 +24,7 @@ CONFIGURATION MyConfiguration
AxoMessengers : AxoStaticMessengerExample.Messengers;
AxoMessengersDocu : AxoStaticMessengerDocuExample.Messengers;
AxoRtc : AxoRtc.AxoS71500Rtc;
-
+ AxoDataFragmentExchangeContext : AxoDataFramentsExchangeDocuExample.AxoDataFragmentExchangeContext;
process_data_manager: AxoDataExamples.AxoProcessDataManager;
test_data_manager: AxoDataExamples.AxoTestDataManager;
diff --git a/src/integrations/ctrl/src/program.st b/src/integrations/ctrl/src/program.st
index 8e024564f..cb9f6950e 100644
--- a/src/integrations/ctrl/src/program.st
+++ b/src/integrations/ctrl/src/program.st
@@ -21,6 +21,8 @@ PROGRAM MyProgram
AxoMessengers : AxoStaticMessengerExample.Messengers;
AxoMessengersDocu : AxoStaticMessengerDocuExample.Messengers;
+ AxoDataFragmentExchangeContext : AxoDataFramentsExchangeDocuExample.AxoDataFragmentExchangeContext;
+
// Integration test
Integrations : IntegrationTests.Integrations;
AxoRtc : AxoRtc.AxoS71500Rtc;
@@ -45,7 +47,7 @@ PROGRAM MyProgram
AxoMessengers.InjectRtc(AxoRtc);
AxoMessengersDocu.Run();
AxoMessengersDocu.InjectRtc(AxoRtc);
-
+ AxoDataFragmentExchangeContext.Run();
// Integration tests
Integrations.Run();
diff --git a/src/integrations/src/AXOpen.Integrations.Blazor/Pages/AxoData/AxoDataFragmentsRemote.razor b/src/integrations/src/AXOpen.Integrations.Blazor/Pages/AxoData/AxoDataFragmentsRemote.razor
new file mode 100644
index 000000000..3ae12730a
--- /dev/null
+++ b/src/integrations/src/AXOpen.Integrations.Blazor/Pages/AxoData/AxoDataFragmentsRemote.razor
@@ -0,0 +1,28 @@
+@page "/AxoDataFragmentsRemote"
+@using AXOpen.Data
+AxoDataRemote
+
+@**@
+
+
+
+@code {
+ private DataExchangeViewModel _vm = new DataExchangeViewModel { Model = Entry.Plc.Integrations.DataFragmentContext.PD };
+}
diff --git a/src/integrations/src/AXOpen.Integrations.Blazor/Pages/DocuExamples/AxoDataFragmetsDocuExamples.razor b/src/integrations/src/AXOpen.Integrations.Blazor/Pages/DocuExamples/AxoDataFragmetsDocuExamples.razor
new file mode 100644
index 000000000..bdf93f5e4
--- /dev/null
+++ b/src/integrations/src/AXOpen.Integrations.Blazor/Pages/DocuExamples/AxoDataFragmetsDocuExamples.razor
@@ -0,0 +1,27 @@
+@page "/DocuExamples/AxoDataFragmetsDocuExamples"
+@using AXOpen.Data;
+
+
+Editable
+//
+
+//
+Readonly
+//
+
+//
+
+//
+
+
+
+
+
+//
+
+//
+@code {
+ protected DataExchangeViewModel VM { get; } = new() { Model = Entry.Plc.AxoDataFragmentExchangeContext.ProcessData };
+}
+
+//
diff --git a/src/integrations/src/AXOpen.Integrations.Blazor/Pages/DocuExamples/DocuExamples.razor b/src/integrations/src/AXOpen.Integrations.Blazor/Pages/DocuExamples/DocuExamples.razor
index 88dad4faf..8863c73ff 100644
--- a/src/integrations/src/AXOpen.Integrations.Blazor/Pages/DocuExamples/DocuExamples.razor
+++ b/src/integrations/src/AXOpen.Integrations.Blazor/Pages/DocuExamples/DocuExamples.razor
@@ -29,5 +29,10 @@
AxoMessagingStaticDocu
+
+
+ AxoDataFragmetsDocuExamples
+
+
diff --git a/src/integrations/src/AXOpen.Integrations.Blazor/Program.cs b/src/integrations/src/AXOpen.Integrations.Blazor/Program.cs
index 959d75e53..cf2ffc5bb 100644
--- a/src/integrations/src/AXOpen.Integrations.Blazor/Program.cs
+++ b/src/integrations/src/AXOpen.Integrations.Blazor/Program.cs
@@ -2,9 +2,11 @@
using axopen_integrations;
using AXSharp.Connector;
using AXOpen.Core.blazor.Toaster;
+using AXOpen.Data.Json;
using AXSharp.Presentation.Blazor.Services;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Web;
+using Pocos.IntegrationAxoDataFramentsExchange;
using static System.Formats.Asn1.AsnWriter;
namespace axopen_integrations_blazor
@@ -48,6 +50,15 @@ public static void Main(string[] args)
Repository.Factory
(new AXOpen.Data.Json.JsonRepositorySettings(Path.Combine(Environment.CurrentDirectory, "data", "processdata1"))));
+ var pdfBuilder =
+ Entry.Plc.Integrations.DataFragmentContext.PD.CreateBuilder();
+
+ pdfBuilder.Set.SetRepository(new JsonRepository(
+ new AXOpen.Data.Json.JsonRepositorySettings(Path.Combine(Environment.CurrentDirectory, "bin", "data-framents", "set"))));
+ pdfBuilder.Manip.SetRepository(
+ new JsonRepository( new AXOpen.Data.Json.JsonRepositorySettings(Path.Combine(Environment.CurrentDirectory, "bin", "data-framents", "fm"))));
+
+
//
var exampleRepositorySettings =
new AXOpen.Data.Json.JsonRepositorySettings(
@@ -59,6 +70,20 @@ public static void Main(string[] args)
Entry.Plc.AxoDataExamplesDocu.DataManager.InitializeRemoteDataExchange(exampleRepository);
//
+
+ //
+
+ var scatteredDataBuilder =
+ Entry.Plc.AxoDataFragmentExchangeContext.ProcessData.CreateBuilder();
+
+ // Setting up repositories
+ scatteredDataBuilder.SharedHeader.SetRepository(new JsonRepository(
+ new AXOpen.Data.Json.JsonRepositorySettings(Path.Combine(Environment.CurrentDirectory, "bin", "data-framents-docu", "set"))));
+ scatteredDataBuilder.Station_1.SetRepository(
+ new JsonRepository(
+ new AXOpen.Data.Json.JsonRepositorySettings(Path.Combine(Environment.CurrentDirectory, "bin", "data-framents", "fm"))));
+ //
+
var app = builder.Build();
// Configure the HTTP request pipeline.
diff --git a/src/integrations/src/AXOpen.Integrations.Blazor/Shared/NavMenu.razor b/src/integrations/src/AXOpen.Integrations.Blazor/Shared/NavMenu.razor
index 89ee2b396..bc8f94335 100644
--- a/src/integrations/src/AXOpen.Integrations.Blazor/Shared/NavMenu.razor
+++ b/src/integrations/src/AXOpen.Integrations.Blazor/Shared/NavMenu.razor
@@ -73,6 +73,12 @@
AxoDataRemote
+
+
+ AxoDataFragmentsRemote
+
+
+
AxoMessagingStatic
diff --git a/src/integrations/tests/AXOpen.Integration.Tests/axopen_integration_tests.csproj b/src/integrations/tests/AXOpen.Integration.Tests/axopen_integration_tests.csproj
index a3b129006..441902806 100644
--- a/src/integrations/tests/AXOpen.Integration.Tests/axopen_integration_tests.csproj
+++ b/src/integrations/tests/AXOpen.Integration.Tests/axopen_integration_tests.csproj
@@ -1,7 +1,7 @@
- net7.0
+ net7.0
enable
enable
diff --git a/src/integrations/tests/AXOpen.Integration.Tests/data/DataExchangeTestBase.cs b/src/integrations/tests/AXOpen.Integration.Tests/data/DataExchangeTestBase.cs
index 98e9a94bb..bb076ffc1 100644
--- a/src/integrations/tests/AXOpen.Integration.Tests/data/DataExchangeTestBase.cs
+++ b/src/integrations/tests/AXOpen.Integration.Tests/data/DataExchangeTestBase.cs
@@ -12,7 +12,7 @@
using Raven.Embedded;
-namespace integrations.data
+namespace integrations.data.single
{
using System;
diff --git a/src/integrations/tests/AXOpen.Integration.Tests/data/DataFramentExchangeTestBase.cs b/src/integrations/tests/AXOpen.Integration.Tests/data/DataFramentExchangeTestBase.cs
new file mode 100644
index 000000000..95fd3b77a
--- /dev/null
+++ b/src/integrations/tests/AXOpen.Integration.Tests/data/DataFramentExchangeTestBase.cs
@@ -0,0 +1,201 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using IntegrationTests;
+using axopen_integrations;
+using AXOpen.Base.Data;
+using AXSharp.Connector;
+using AXOpen.Data.InMemory;
+using AXOpen.Data.Json;
+using AXOpen.Data.MongoDb;
+using AXOpen.Data.RavenDb;
+using integrations.data.single;
+using Pocos.IntegrationLightDirect;
+using Raven.Embedded;
+
+
+namespace integrations.data.fragments
+{
+
+ using System;
+ using System.Reflection.Metadata;
+ using Xunit;
+
+ public abstract class DataExchangeTestBase
+ {
+ protected IntegrationAxoDataFramentsExchange.AxoDataFragmentExchangeContext testContext =
+ Entry.Plc.Integrations.DataFragmentContext;
+
+ protected IRepository SetRepository { get; set; }
+ protected IRepository ManipRepository { get; set; }
+
+ protected IRepository Repository { get; } =
+ new InMemoryRepository();
+
+ public DataExchangeTestBase()
+ {
+
+ }
+
+ [Fact]
+ public async Task CreateTest()
+ {
+ //--Arrange
+ var sut = testContext;
+ var identifier = "hello-id";
+ await sut.CreateTest.Identifier.SetAsync(identifier);
+
+ //-- Act
+ await sut.CreateTest.RunTest();
+
+ //-- Assert
+ Assert.NotNull(SetRepository.Queryable.FirstOrDefault(p => p.DataEntityId == identifier));
+ Assert.NotNull(ManipRepository.Queryable.FirstOrDefault(p => p.DataEntityId == identifier));
+ }
+
+ [Fact]
+ public async Task ReadTest()
+ {
+ //--Arrange
+ var sut = testContext;
+ var identifier1 = "hello-id-to-read-1";
+
+ SetRepository.Create(identifier1, new Pocos.IntegrationAxoDataFramentsExchange.SharedProductionData());
+ ManipRepository.Create(identifier1, new Pocos.IntegrationAxoDataFramentsExchange.FragmentProcessData());
+
+ await sut.ReadTest.Identifier.SetAsync(identifier1);
+ await sut.ReadTest.RunTest();
+
+ //-- Assert
+
+ //var record = Repository.Queryable.FirstOrDefault(p => p.DataEntityId == identifier1);
+
+ Assert.Equal("hello-id-to-read-1", testContext.PD.Set.Set.DataEntityId.GetAsync().Result);
+ Assert.Equal("hello-id-to-read-1", testContext.PD.Manip.Set.DataEntityId.GetAsync().Result);
+ }
+
+ [Fact]
+ public async Task UpdateTest()
+ {
+ //--Arrange
+ var sut = testContext;
+ var identifier = "hello-id-to-update";
+ await sut.UpdateTest.Identifier.SetAsync(identifier);
+ SetRepository.Create(identifier, new() { });
+ ManipRepository.Create(identifier, new() { });
+
+ //-- Act
+ await testContext.PD.Set.Set.GoesTo.SetAsync(500);
+ await testContext.PD.Manip.Set.CounterDelay.SetAsync(800ul);
+ await sut.UpdateTest.RunTest();
+
+ //-- Assert
+
+ var setRecord = SetRepository.Queryable.FirstOrDefault(p => p.DataEntityId == identifier);
+ var manipRecord = ManipRepository.Queryable.FirstOrDefault(p => p.DataEntityId == identifier);
+ Assert.Equal(500, setRecord.GoesTo);
+ Assert.Equal(800ul, manipRecord.CounterDelay);
+ }
+
+ [Fact]
+ public async Task DeleteTest()
+ {
+ //--Arrange
+ var sut = testContext;
+ var identifier1 = "hello-id-to-delete-1";
+ var identifier2 = "hello-id-to-delete-2";
+
+
+ SetRepository.Create(identifier1, new ());
+ ManipRepository.Create(identifier1, new());
+
+ await sut.DeleteTest.Identifier.SetAsync(identifier1);
+ await sut.DeleteTest.RunTest();
+
+ //-- Assert
+
+ var setRecord = SetRepository.Queryable.FirstOrDefault(p => p.DataEntityId == identifier1);
+ Assert.Null(setRecord);
+
+ var manipRecord = ManipRepository.Queryable.FirstOrDefault(p => p.DataEntityId == identifier1);
+ Assert.Null(manipRecord);
+ }
+ }
+
+ public class DataExchangeTestInMemory : DataExchangeTestBase
+ {
+ public DataExchangeTestInMemory() : base()
+ {
+ Remoting.KickOff();
+
+
+ this.SetRepository = new InMemoryRepository();
+ this.ManipRepository = new InMemoryRepository();
+
+ testContext.PD.CreateBuilder();
+
+ testContext.PD.Set.SetRepository(this.SetRepository);
+ testContext.PD.Manip.SetRepository(this.ManipRepository);
+
+ testContext.PD.DeInitializeRemoteDataExchange();
+ testContext.PD.InitializeRemoteDataExchange();
+ }
+ }
+
+ public class DataExchangeTestJson : DataExchangeTestBase
+ {
+ public DataExchangeTestJson() : base()
+ {
+ Remoting.KickOff();
+ var assemblyFile = new FileInfo(Assembly.GetExecutingAssembly().Location);
+ var outputFolder = Path.Combine(assemblyFile.Directory.FullName, "storage");
+
+ if (Directory.Exists(outputFolder))
+ {
+ Directory.Delete(outputFolder, true);
+ }
+
+ testContext.PD.CreateBuilder();
+
+ this.SetRepository = new JsonRepository(new(Path.Combine(assemblyFile.Directory.FullName, "storage", "set")));
+ this.ManipRepository = new JsonRepository(new(Path.Combine(assemblyFile.Directory.FullName, "storage", "manip")));
+
+ testContext.PD.Set.SetRepository(this.SetRepository);
+ testContext.PD.Manip.SetRepository(this.ManipRepository);
+
+ testContext.PD.DeInitializeRemoteDataExchange();
+ testContext.PD.InitializeRemoteDataExchange();
+ }
+ }
+
+ public class DataExchangeTestRaven : DataExchangeTestBase
+ {
+ public DataExchangeTestRaven() : base()
+ {
+ Remoting.KickOff();
+ this.SetRepository = new RavenDbRepository(new RavenDbRepositorySettings(new string[] { "http://localhost:8080" }, "TestDataBaseSet", "", "credentials"));
+ this.ManipRepository = new RavenDbRepository(new RavenDbRepositorySettings(new string[] { "http://localhost:8080" }, "TestDataBaseManip", "", "credentials"));
+
+ var setRecords = this.SetRepository.GetRecords().ToList();
+
+ for (int i = 0; i < setRecords.Count; i++)
+ {
+ this.SetRepository.Delete(setRecords[i].DataEntityId);
+ }
+
+ var manipRecords = this.ManipRepository.GetRecords().ToList();
+
+ for (int i = 0; i < manipRecords.Count; i++)
+ {
+ this.ManipRepository.Delete(manipRecords[i].DataEntityId);
+ }
+
+ testContext.PD.CreateBuilder();
+
+ testContext.PD.Set.SetRepository(this.SetRepository);
+ testContext.PD.Manip.SetRepository(this.ManipRepository);
+
+ testContext.PD.DeInitializeRemoteDataExchange();
+ testContext.PD.InitializeRemoteDataExchange();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/templates.simple/axosimple.app/Program.cs b/src/templates.simple/axosimple.app/Program.cs
index a2521efba..5c9e0f40a 100644
--- a/src/templates.simple/axosimple.app/Program.cs
+++ b/src/templates.simple/axosimple.app/Program.cs
@@ -35,12 +35,12 @@
var a = Entry.Plc.Context.PneumaticManipulator
.ProcessData
- .Builder();
+ .CreateBuilder();
a.DataManger.InitializeRemoteDataExchange(productionDataRepository);
a.Shared.InitializeRemoteDataExchange(headerDataRepository);
var b = Entry.Plc.Context.ProcessData
- .Builder();
+ .CreateBuilder();
b.Manip.InitializeRemoteDataExchange(productionDataRepository);
b.Set.InitializeRemoteDataExchange(headerDataRepository);
diff --git a/src/templates.simple/ctrl/src/Examples/PneumaticManipulator.st b/src/templates.simple/ctrl/src/Examples/PneumaticManipulator.st
index 79bfb8291..23e5e3ddb 100644
--- a/src/templates.simple/ctrl/src/Examples/PneumaticManipulator.st
+++ b/src/templates.simple/ctrl/src/Examples/PneumaticManipulator.st
@@ -58,18 +58,7 @@ NAMESPACE examples.PneumaticManipulator
Shared : SharedProductionDataManager;
{#ix-attr:[AXOpen.Data.AxoDataFragmentAttribute]}
DataManger : FragmentProcessDataManger;
- END_VAR
-
- METHOD PUBLIC Run
- VAR_INPUT
- Parent : IAxoObject;
- END_VAR
- THIS.Initialize(Parent);
- Operation.Initialize(THIS);
- Shared.Run(Parent);
- DataManger.Run(Parent);
- Operation.Execute();
- END_METHOD
+ END_VAR
END_CLASS
///