diff --git a/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/Configuration/AxoDataExchangeConfigurationService.cs b/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/Configuration/AxoDataExchangeConfigurationService.cs index 48298c93f..cfc3d4d25 100644 --- a/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/Configuration/AxoDataExchangeConfigurationService.cs +++ b/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/Configuration/AxoDataExchangeConfigurationService.cs @@ -1,33 +1,42 @@ -namespace AXOpen.Data +using Microsoft.AspNetCore.Cors; + +namespace AXOpen.Data { public class AxoDataExchangeConfigurationService : IAxoDataExchangeConfigurationService { protected Dictionary _Configurations = new(); + protected AxoDataExchangeConfiguration _DefaultConfiguration = new(); + public Dictionary Configurations { get { return _Configurations; } } + + public AxoDataExchangeConfiguration DefaultConfiguration + { + get { return _DefaultConfiguration; } + } - public AxoDataExchangeConfiguration GetConfigution(DataExchangeViewModel dataExchangeViewModel) + public AxoDataExchangeConfiguration GetConfigution(DataExchangeViewModel dataExchangeViewModel, bool defautIfNotExist = true) { if (dataExchangeViewModel == null) return new AxoDataExchangeConfiguration(); var exchange = (dataExchangeViewModel.Model) as IAxoDataExchange; - return GetConfigution(exchange); + return GetConfigution(exchange, defautIfNotExist); } - public AxoDataExchangeConfiguration GetConfigution(IAxoDataExchange exchange) + public AxoDataExchangeConfiguration GetConfigution(IAxoDataExchange exchange, bool defautIfNotExist = true) { if (exchange == null) return new AxoDataExchangeConfiguration(); // Retrieve the full name of the POCO type representing the data entity. - return GetConfigution(exchange.GetPlainTypes().First().FullName); + return GetConfigution(exchange.GetPlainTypes().First().FullName, defautIfNotExist); } - public AxoDataExchangeConfiguration GetConfigution(string fullPlainDataTypeNameWithSuffix) + public AxoDataExchangeConfiguration GetConfigution(string fullPlainDataTypeNameWithSuffix, bool defautIfNotExist = true) { if (string.IsNullOrEmpty(fullPlainDataTypeNameWithSuffix)) return null; @@ -38,6 +47,10 @@ public AxoDataExchangeConfiguration GetConfigution(string fullPlainDataTypeNameW } else { + if (defautIfNotExist) + { + return _DefaultConfiguration; + } return null; } } @@ -65,5 +78,10 @@ public void AddManagerConfiguration(string fullPlainDataTypeNameWithSuffix, AxoD Configurations.Add(typeName, config); } } + + public void SetDefaultConfiguration(AxoDataExchangeConfiguration config) + { + this._DefaultConfiguration = config; + } } } \ No newline at end of file diff --git a/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/Configuration/IAxoDataExchangeConfigurationService.cs b/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/Configuration/IAxoDataExchangeConfigurationService.cs index 714b7f774..7c609e6fd 100644 --- a/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/Configuration/IAxoDataExchangeConfigurationService.cs +++ b/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/Configuration/IAxoDataExchangeConfigurationService.cs @@ -4,11 +4,12 @@ public interface IAxoDataExchangeConfigurationService { void AddManagerConfiguration(string fullDataEntityNameWithSuffix, AxoDataExchangeConfiguration config); + void SetDefaultConfiguration( AxoDataExchangeConfiguration config); - AxoDataExchangeConfiguration GetConfigution(IAxoDataExchange dataManager); + AxoDataExchangeConfiguration GetConfigution(IAxoDataExchange dataManager, bool defautIfNotExist = true); - AxoDataExchangeConfiguration GetConfigution(string fullDataEntityTypeName); + AxoDataExchangeConfiguration GetConfigution(string fullDataEntityTypeName, bool defautIfNotExist = true); - AxoDataExchangeConfiguration GetConfigution(DataExchangeViewModel dataExchangeViewModel); + AxoDataExchangeConfiguration GetConfigution(DataExchangeViewModel dataExchangeViewModel, bool defautIfNotExist = true); } } \ No newline at end of file diff --git a/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeView.razor b/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeView.razor index dade4823d..3af4cd3b2 100644 --- a/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeView.razor +++ b/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeView.razor @@ -22,17 +22,30 @@ else
@if (Presentation.Equals("Command")) { - - - - - - - - - - - + @if (EnableCreate) + { + + + + + + } + + @if (EnableCreateNewFromPlc) + { + + + + + + } + @if (EnableExport) { @@ -55,7 +68,7 @@ else @if (!AdvanceFilterConfig) { - @if (EnableSorting || true) + @if (EnableSorting) {
@@ -73,7 +86,6 @@ else } -
- - - + + + + }
@@ -262,17 +275,19 @@ else @if (Presentation.Equals("Command")) { - - - - - - + @if (EnableCopy) + { + + + + + + } - - + @if (EnableUpdateFromPlc) + { + + + + + + } + + @if (EnableSendToPlc) + { + + + + + + } + + @if (EnableDelete) + { + + + + + + } } @@ -371,12 +414,14 @@ else {
- - - - - - + @if (EnableCopy) + { + + + + + + } @@ -384,18 +429,23 @@ else + @if (EnableSendToPlc) + { + + + + + + } - - - - - - - - - - - + @if (EnableDelete) + { + + + + + + }
} @@ -407,26 +457,39 @@ else } - @if (Create.Equals("Create")) + + @if (Vm.GlobalActions != null) + { + @if (ButtonOperationName.Equals("Create")) + { + + } + else if (ButtonOperationName.Equals("Copy")) + { + + } + else if (ButtonOperationName.Equals("LoadFromPlc")) + { + + } + else if (ButtonOperationName.Equals("UpdateFromPlc")) + { + + } + } + + + @if (ButtonOperationName.Equals("Create")) + { + + } + else if (ButtonOperationName.Equals("Copy")) { - + } - else if (Create.Equals("Copy")) + else if (ButtonOperationName.Equals("LoadFromPlc")) { - + } - else if (Create.Equals("LoadFromPLC")) + else if (ButtonOperationName.Equals("UpdateFromPlc")) { - + } @@ -488,7 +625,7 @@ else - + @@ -643,7 +780,31 @@ else } - + + @if (Vm.GlobalActions != null) + { + + } + + + @@ -659,7 +820,25 @@ else diff --git a/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeView.razor.cs b/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeView.razor.cs index 6eac4bf4b..a7e5667f8 100644 --- a/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeView.razor.cs +++ b/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeView.razor.cs @@ -47,10 +47,18 @@ public partial class DataExchangeView : ComponentBase, IDisposable [Parameter] public bool ModalDataView { get; set; } = true; - [Parameter] public bool EnableExport { get; set; } = false; // EnableExport - + [Parameter] public bool EnableCreate { get; set; } = false; + [Parameter] public bool EnableCopy { get; set; } = false; + [Parameter] public bool EnableDelete { get; set; } = false; + [Parameter] public bool EnableSendToPlc { get; set; } = false; + [Parameter] public bool EnableCreateNewFromPlc { get; set; } = false; + + [Parameter] public bool EnableFiltering { get; set; } = false; + [Parameter] public bool EnableExport { get; set; } = false; [Parameter] public bool EnableSorting { get; set; } = false; + [Parameter] public bool EnableUpdateFromPlc { get; set; } = false; + [Parameter] public RenderFragment ChildContent { get; set; } [Parameter] public List SortElements { get; set; } = new(); @@ -117,7 +125,7 @@ public string ExportDownloadUrl } } - private string Create { get; set; } = ""; + private string ButtonOperationName { get; set; } = ""; private int MaxPage => (int)(Vm.FilteredCount % Vm.Limit == 0 ? Vm.FilteredCount / Vm.Limit - 1 : Vm.FilteredCount / Vm.Limit); @@ -186,9 +194,6 @@ private async Task setPageAsync(int page) protected override async Task OnInitializedAsync() { - EnableSorting = true; - EnableExport = true; - Vm.InjectedPredicateContainer = ExternalPredicates; await Vm.Filter(); diff --git a/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeViewModel.cs b/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeViewModel.cs index a608df020..9cf981572 100644 --- a/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeViewModel.cs +++ b/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/DataExchangeViewModel.cs @@ -22,6 +22,7 @@ using System.Security.Claims; using AXOpen.Data.Query; using AXOpen.Base.Data.Query; +using static Microsoft.EntityFrameworkCore.DbLoggerCategory; namespace AXOpen.Data { @@ -188,6 +189,8 @@ public List PlainBuilders internal List EntityIdsIntersected = new(); public bool ReadAllEntityIdsForConcatQuery { set; get; } + public IDataExchangeGlobalActions? GlobalActions { internal set; get; } + internal void Locked() { if (IsLockedByMeOrNull()) @@ -447,6 +450,44 @@ public async Task LoadFromPlc() } } + public async Task UpdateFromPlc() + { + try + { + var identifier = SelectedRecord.DataEntityId; + + var refdata = DataExchange.CloneDataObject(); + + var DataEntityId = (refdata as IAxoDataEntity).DataEntityId; + + List batchRedElements = new(); + + batchRedElements.Add(DataEntityId); + + await refdata.GetConnector().ReadBatchAsync(batchRedElements); + + if (DataEntityId.Cyclic != identifier) + { + AlertDialogService?.AddAlertDialog(eAlertType.Warning, "Update error", $"Online record has different ID that requested to update: {DataEntityId.Cyclic}/{identifier}!", 14); + return; + } + + await DataExchange.RemoteUpdate(identifier); + AlertDialogService?.AddAlertDialog(eAlertType.Success, "Update from PLC!", "Item was successfully updated from PLC!", 10); + AxoApplication.Current.Logger.Information($"Updated from Plc {identifier} into {DataExchange.PresentableInstanceName} by user action.", AuthenticationProvider.GetAuthenticationStateAsync().Result.User.Identity); + } + catch (Exception e) + { + AlertDialogService?.AddAlertDialog(eAlertType.Danger, "Failed to update a record from the controller", e.Message, 10); + } + finally + { + await FillObservableRecordsAsync(); + CreateItemId = null; + } + } + + public Task ExportDataAsync(string path) { exportStatus = eOperationStatus.Busy; @@ -534,6 +575,7 @@ public void ChangeCustomExportDataValue(ChangeEventArgs __e, string fragmentKey, public Action StateHasChangedDelegate { get; set; } + public bool GetCustomExportDataValue(string fragmentKey) { var result = new Dictionary(); diff --git a/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/IDataExchangeGlobalActions.cs b/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/IDataExchangeGlobalActions.cs new file mode 100644 index 000000000..72bd52b60 --- /dev/null +++ b/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/IDataExchangeGlobalActions.cs @@ -0,0 +1,14 @@ + +namespace AXOpen.Data.Interfaces +{ + public interface IDataExchangeGlobalActions + { + public Task Delete( string identifier); + public Task Copy(string identifier, string newIdentifier); + public Task Create(string identifier); + public Task CreateNewFromPlc(string identifier); + public Task UpdateFromPlc(string identifier); + public Task SendToPlc(string identifier); + } + +} \ No newline at end of file diff --git a/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/IDataExchangeViewModel.cs b/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/IDataExchangeViewModel.cs index 642203bc0..f8bc9e24c 100644 --- a/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/IDataExchangeViewModel.cs +++ b/src/data/src/AXOpen.Data.Blazor/AxoDataExchange/IDataExchangeViewModel.cs @@ -32,6 +32,8 @@ public interface IDataExchangeViewModel Task LoadFromPlc(); + IDataExchangeGlobalActions? GlobalActions { get; } + public void InvokeStateHasChanged(); } } \ No newline at end of file diff --git a/src/data/src/AXOpen.Data.Blazor/Distributed/DistributedDataSelectorView.razor b/src/data/src/AXOpen.Data.Blazor/Distributed/DistributedDataSelectorView.razor index 1db34e5e9..0814e815f 100644 --- a/src/data/src/AXOpen.Data.Blazor/Distributed/DistributedDataSelectorView.razor +++ b/src/data/src/AXOpen.Data.Blazor/Distributed/DistributedDataSelectorView.razor @@ -260,7 +260,8 @@ else @onclick="async () => { await DistributedVM.SendToPlc(SelectedEntity.DataEntityId); await DistributedVM.ReadAllCurrentEntityIds(); - EndBtnOperation();}"> + EndBtnOperation(); + OnDataSend?.Invoke(SelectedEntity.DataEntityId);}">
@Localizer["Send to the PLC"]: "@SelectedEntity.DataEntityId" diff --git a/src/data/src/AXOpen.Data.Blazor/Distributed/DistributedDataSelectorView.razor.cs b/src/data/src/AXOpen.Data.Blazor/Distributed/DistributedDataSelectorView.razor.cs index 1a7d760d7..4031d7941 100644 --- a/src/data/src/AXOpen.Data.Blazor/Distributed/DistributedDataSelectorView.razor.cs +++ b/src/data/src/AXOpen.Data.Blazor/Distributed/DistributedDataSelectorView.razor.cs @@ -20,7 +20,11 @@ public partial class DistributedDataSelectorView public string ConfigSuffix { get; set; } = ""; [Parameter] - public PredicateContainer InjectedPredicateContainer { set; get; } + public PredicateContainer? InjectedPredicateContainer { set; get; } + + [Parameter] + public Action? OnDataSend { get; set; } + [Inject] public IJSRuntime JSRuntime { set; get; } diff --git a/src/data/src/AXOpen.Data.Blazor/Distributed/DistributedDataSelectorViewModel.cs b/src/data/src/AXOpen.Data.Blazor/Distributed/DistributedDataSelectorViewModel.cs index c5f86a0b1..154d88006 100644 --- a/src/data/src/AXOpen.Data.Blazor/Distributed/DistributedDataSelectorViewModel.cs +++ b/src/data/src/AXOpen.Data.Blazor/Distributed/DistributedDataSelectorViewModel.cs @@ -255,6 +255,9 @@ public async Task ReadAllCurrentEntityIds() List toRead = new(); Connector connector = ExsOnConnector.First().DataExchangeTwinObject.GetConnector(); + if (connector is DummyConnector) // can block ui thredd if is not work + return; + foreach (var exchange in ExsOnConnector) { toRead.Add((exchange.DataExchangeTwinObject as IAxoDataEntity).DataEntityId); diff --git a/src/data/src/AXOpen.Data.Blazor/Distributed/DistributedDataView.razor b/src/data/src/AXOpen.Data.Blazor/Distributed/DistributedDataView.razor index 834817833..72d650993 100644 --- a/src/data/src/AXOpen.Data.Blazor/Distributed/DistributedDataView.razor +++ b/src/data/src/AXOpen.Data.Blazor/Distributed/DistributedDataView.razor @@ -14,27 +14,31 @@
@Localizer["Global Actions:"]
- - + @if (EnableFiltering) + { + + + + + + + } - - - } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @* @if (EnableExport) { @@ -155,581 +104,7 @@ @if (IsAnyActiveOperation()) { -
- - @if (this.BtnOperation == "Create") - { -
-
- - -
- - -
- - -
- @if (!string.IsNullOrEmpty(OperationRecordName)) - { - - } - - -
- -
-
- } - - @if (this.BtnOperation == "Create-Ack") - { -
-
-
- -
- -
- -
- -
- -
- -
- -
-
-
- } - - - @if (this.BtnOperation == "Copy") - { -
- -
- - -
- - -
- - @if (!string.IsNullOrEmpty(SelectedEntityId)) - { - -
- - -
- - } - -
- - @if (!string.IsNullOrEmpty(OperationRecordName)) - { - - - } - - - -
- -
- -
- - - } - - @if (this.BtnOperation == "Copy-Ack") - { -
-
-
- -
- -
- -
- -
- -
- -
- -
-
-
- } - - - @if (this.BtnOperation == "SendToPlc") - { -
-
- - -
- - -
- - -
- - @if (!string.IsNullOrEmpty(SelectedEntityId)) - { - - } - - - -
- -
-
- } - - @if (this.BtnOperation == "SendToPlc-Ack") - { -
-
-
- -
- -
- -
- -
- -
- -
-
-
-
- } - - - - @if (this.BtnOperation == "CreateNewFromPlc") - { -
-
- - -
- - -
- - -
- - @if (!string.IsNullOrEmpty(OperationRecordName)) - { - - } - - - -
- -
-
- } - - @if (this.BtnOperation == "CreateNewFromPlc-Ack") - { -
-
-
- -
- -
- -
- -
- -
- -
- -
-
-
- } - - - @if (this.BtnOperation == "UpdateFromPlc") - { -
-
- - -
- -
- - -
- - @if (!string.IsNullOrEmpty(SelectedEntityId)) - { - - } - - - -
- -
-
- - - } - - @if (this.BtnOperation == "UpdateFromPlc-Ack") - { -
-
-
- -
- -
- -
- -
- -
- -
- -
-
-
- } - - - @if (this.BtnOperation == "Delete") - { -
-
- - -
- - -
- - -
- - @if (!string.IsNullOrEmpty(SelectedEntityId)) - { - - } - - - -
-
-
- - - } - - @if (this.BtnOperation == "Delete-Ack") - { -
-
-
- -
- -
- -
- -
- -
- -
- -
-
-
- } - - - - @* - @if (this.BtnOperation == "Export") - { -
- - -
- } - - @if (this.BtnOperation == "Import") - { -
- - -
- } - *@ - -
} else { @@ -754,9 +129,12 @@ else { } @@ -766,9 +144,19 @@ else
+ Presentation="@this.Presentation" + EnableCreate="@this.EnableCreate" + EnableCopy="@this.EnableCopy" + EnableDelete="@this.EnableDelete" + + EnableCreateNewFromPlc="@this.EnableCreateNewFromPlc" + EnableSendToPlc="@this.EnableSendToPlc" + EnableUpdateFromPlc="@this.EnableUpdateFromPlc" + + EnableFiltering="@this.EnableFiltering" + EnableSorting="@this.EnableSorting" + EnableExport="@this.EnableExport" +> @foreach (var column in DistributedVM.ExchangeConfig.Collumns) { diff --git a/src/data/src/AXOpen.Data.Blazor/Distributed/DistributedDataView.razor.cs b/src/data/src/AXOpen.Data.Blazor/Distributed/DistributedDataView.razor.cs index 1756aca9c..ca9ab8719 100644 --- a/src/data/src/AXOpen.Data.Blazor/Distributed/DistributedDataView.razor.cs +++ b/src/data/src/AXOpen.Data.Blazor/Distributed/DistributedDataView.razor.cs @@ -20,14 +20,18 @@ public partial class DistributedDataView [Parameter, EditorRequired] public string GroupName { get; set; } - [Parameter] - public string ConfigSuffix { get; set; } = ""; - - [Parameter] - public bool EnableExport { get; set; } = true; - - [Parameter] - public bool EnableSorting { get; set; } = true; + [Parameter] public string ConfigSuffix { get; set; } = ""; + + [Parameter] public bool EnableCreate { get; set; } = false; + [Parameter] public bool EnableCopy { get; set; } = false; + [Parameter] public bool EnableDelete { get; set; } = false; + [Parameter] public bool EnableSendToPlc { get; set; } = false; + [Parameter] public bool EnableCreateNewFromPlc { get; set; } = false; + [Parameter] public bool EnableUpdateFromPlc { get; set; } = false; + + [Parameter] public bool EnableFiltering { get; set; } = false; + [Parameter] public bool EnableExport { get; set; } = false; + [Parameter] public bool EnableSorting { get; set; } = false; [Inject] public IJSRuntime JSRuntime { set; get; } diff --git a/src/data/src/AXOpen.Data.Blazor/Distributed/DistributedDataViewModel.cs b/src/data/src/AXOpen.Data.Blazor/Distributed/DistributedDataViewModel.cs index 1a33bb43e..1f032f78b 100644 --- a/src/data/src/AXOpen.Data.Blazor/Distributed/DistributedDataViewModel.cs +++ b/src/data/src/AXOpen.Data.Blazor/Distributed/DistributedDataViewModel.cs @@ -1,6 +1,7 @@ using AXOpen.Base.Data; using AXOpen.Base.Data.Query; using AXOpen.Base.Dialogs; +using AXOpen.Data.Interfaces; using AXOpen.Data.Query; using AXSharp.Connector; using AXSharp.Presentation; @@ -15,11 +16,10 @@ namespace AXOpen.Data { - public partial class DistributedDataViewModel : IDataExchangeQueryViewModel + public partial class DistributedDataViewModel : IDataExchangeQueryViewModel, IDataExchangeGlobalActions { protected volatile object _fragmentEntityIdsLock = new object(); - protected readonly IAlertService AlertService; protected readonly AuthenticationStateProvider Authentication; @@ -71,7 +71,6 @@ public IEnumerable GetPlainTypes() public Task FillObservableRecordsAsync(PredicateContainer? predicates = null) { - if (predicates == null) { if (this.SelectedManagerVm != null) @@ -146,7 +145,9 @@ public void InvokeStateHasChanged() public AxoDataExchangeConfiguration ExchangeConfig { get; set; } = new(); - public async Task CreateNew(string identifier) + #region IDataExchangeGlogalActions + + public async Task Create(string identifier) { if (string.IsNullOrEmpty(identifier)) { @@ -263,7 +264,6 @@ public async Task UpdateFromPlc(string identifier) await exchange.RemoteCreate(identifier); created.Add(exchange.ManagerDataTypeName); } - } if (updated.Count > 0) @@ -296,16 +296,15 @@ public async Task SendToPlc(string identifier) List sentToPlc = new List(); List notExistInDb = new List(); - foreach (var exchangeGroup in DataFragments.GroupBy( p => p.GetPlainTypes().First().FullName)) + foreach (var exchangeGroup in DataFragments.GroupBy(p => p.GetPlainTypes().First().FullName)) { - if (!exchangeGroup.First().Repository.Exists(identifier)) { foreach (var exchange in exchangeGroup) { notExistInDb.Add(exchange.DataExchangeTwinObject.Symbol); } - continue; // record not exist, continue + continue; // record not exist, continue } foreach (var exchange in exchangeGroup) @@ -313,7 +312,6 @@ public async Task SendToPlc(string identifier) await exchange.RemoteRead(identifier); sentToPlc.Add(exchange.DataExchangeTwinObject.Symbol); } - } if (sentToPlc.Count > 0) @@ -329,8 +327,7 @@ public async Task SendToPlc(string identifier) } } - - public async Task CopyRecord(string identifier, string newIdentifier) + public async Task Copy(string identifier, string newIdentifier) { if (string.IsNullOrEmpty(identifier)) { @@ -388,7 +385,7 @@ public async Task CopyRecord(string identifier, string newIdentifier) } } - public async Task DeleteRecord(string identifier) + public async Task Delete(string identifier) { if (string.IsNullOrEmpty(identifier)) { @@ -424,6 +421,8 @@ public async Task DeleteRecord(string identifier) } } + #endregion IDataExchangeGlogalActions + public async Task SelectManager(IAxoDataExchange exchange) { this.TransmitedEntities.Clear(); @@ -471,6 +470,8 @@ protected void InitializeViewModel(IAxoDataExchange exchange) SelectedManagerVm.Model = exchange; SelectedManagerVm.SetInjectedEntityIds(MergeInjectedEntities()); + SelectedManagerVm.GlobalActions = this; // set global actions + SelectCongiguration(exchange); } @@ -610,5 +611,6 @@ public IEnumerable GetFromFirstExchageExistingIds() List Entities = DataFragments.First().GetEntityIds(new PredicateContainer()).ToList(); return Entities; } + } } \ No newline at end of file diff --git a/src/data/src/AXOpen.Data/DataExchange/AxoDataExchange.cs b/src/data/src/AXOpen.Data/DataExchange/AxoDataExchange.cs index ec9abdf9e..0ed58d5f6 100644 --- a/src/data/src/AXOpen.Data/DataExchange/AxoDataExchange.cs +++ b/src/data/src/AXOpen.Data/DataExchange/AxoDataExchange.cs @@ -33,8 +33,11 @@ public partial class AxoDataExchange where TOnline : IAxoDataEn where TPlain : Pocos.AXOpen.Data.IAxoDataEntity, new() { - public string ManagerDataTypeName { get=> GetPlainTypes().FirstOrDefault().FullName; } + public string ManagerDataTypeName { get => GetPlainTypes().FirstOrDefault().FullName; } + // presentable name in distributed data management + public string PresentableInstanceName { get => this.DataExchangeTwinObject?.AttributeName; } + /// public ITwinObject? DataExchangeTwinObject => DataEntity as ITwinObject; diff --git a/src/data/src/AXOpen.Data/DataExchange/IAxoDataExchange.cs b/src/data/src/AXOpen.Data/DataExchange/IAxoDataExchange.cs index d50285f96..bc8942187 100644 --- a/src/data/src/AXOpen.Data/DataExchange/IAxoDataExchange.cs +++ b/src/data/src/AXOpen.Data/DataExchange/IAxoDataExchange.cs @@ -18,6 +18,10 @@ public partial interface IAxoDataExchange string ManagerDataTypeName { get; } + /// + /// Exchange name dispalyed in Distributed data View + /// + string PresentableInstanceName { get; } #endregion diff --git a/src/data/src/AXOpen.Data/DataFragmentExchange/AxoDataFragmentExchange.cs b/src/data/src/AXOpen.Data/DataFragmentExchange/AxoDataFragmentExchange.cs index 1676dfd97..30c5c5b81 100644 --- a/src/data/src/AXOpen.Data/DataFragmentExchange/AxoDataFragmentExchange.cs +++ b/src/data/src/AXOpen.Data/DataFragmentExchange/AxoDataFragmentExchange.cs @@ -22,7 +22,7 @@ namespace AXOpen.Data; public partial class AxoDataFragmentExchange { public string ManagerDataTypeName { get => GetPlainTypes().FirstOrDefault().FullName; } - + public string PresentableInstanceName { get => DataExchangeTwinObject.AttributeName; } /// public ITwinObject? DataExchangeTwinObject { get; private set; } diff --git a/src/data/src/AXOpen.Data/LocalStorage/AxoLocalStorage.cs b/src/data/src/AXOpen.Data/LocalStorage/AxoLocalStorage.cs index 61a64473d..de73b1738 100644 --- a/src/data/src/AXOpen.Data/LocalStorage/AxoLocalStorage.cs +++ b/src/data/src/AXOpen.Data/LocalStorage/AxoLocalStorage.cs @@ -15,6 +15,8 @@ public partial class AxoDataLocalExchange { public string ManagerDataTypeName { get => GetPlainTypes().FirstOrDefault().FullName; } + public string PresentableInstanceName { get => DataExchangeTwinObject.AttributeName; } + public ITwinObject CloneDataObject() { throw new NotSupportedException();