From 2cbb8674207a6757c04f71c5ab8fc1996c00aa5a Mon Sep 17 00:00:00 2001 From: KL <@> Date: Wed, 15 Apr 2020 16:21:27 +0300 Subject: [PATCH 01/40] Update readme --- ...PersistentObjects.cs => NonPersistentObjectBase.cs} | 1 - .../NonPersistentObjectsDemo.Module.csproj | 2 +- readme.md | 10 +++++----- 3 files changed, 6 insertions(+), 7 deletions(-) rename CS/NonPersistentObjectsDemo.Module/BusinessObjects/{NonPersistentObjects.cs => NonPersistentObjectBase.cs} (99%) diff --git a/CS/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjects.cs b/CS/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.cs similarity index 99% rename from CS/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjects.cs rename to CS/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.cs index b74c81c..857d636 100644 --- a/CS/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjects.cs +++ b/CS/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.cs @@ -10,7 +10,6 @@ namespace NonPersistentObjectsDemo.Module.BusinessObjects { - public abstract class NonPersistentObjectBase : INotifyPropertyChanged, IObjectSpaceLink { private IObjectSpace objectSpace; public IObjectSpace ObjectSpace { diff --git a/CS/NonPersistentObjectsDemo.Module/NonPersistentObjectsDemo.Module.csproj b/CS/NonPersistentObjectsDemo.Module/NonPersistentObjectsDemo.Module.csproj index 44fb8c2..ab012fa 100644 --- a/CS/NonPersistentObjectsDemo.Module/NonPersistentObjectsDemo.Module.csproj +++ b/CS/NonPersistentObjectsDemo.Module/NonPersistentObjectsDemo.Module.csproj @@ -130,7 +130,7 @@ - + Component diff --git a/readme.md b/readme.md index 645051c..d254ccc 100644 --- a/readme.md +++ b/readme.md @@ -16,17 +16,17 @@ When a [Non\-Persistent Object](https://docs.devexpress.com/eXpressAppFramework/ To enable filtering and sorting for [Non\-Persistent Objects](https://docs.devexpress.com/eXpressAppFramework/116516/concepts/business-model-design/non-persistent-objects), use the built-in **DynamicCollection** class or a custom **DynamicCollectionBase** descendant. -Create a **DynamicCollection** instance and pass it in the [NonPersistentObjectSpace\.ObjectsGetting](https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.NonPersistentObjectSpace.ObjectsGetting) event handler. Subscribe to the **DynamicCollection.ObjectsGetting** event and pass a new collection of non-persistnet objects every time the filtering or sorting parameters are changed. If you cannot filter the collection manually, set the **ShapeRawData** event parameter to *true*. Then, **DynamicCollection** will process data (filter, sort, trim) internally. +Here, we create a **DynamicCollection** instance and pass it in the [NonPersistentObjectSpace\.ObjectsGetting](https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.NonPersistentObjectSpace.ObjectsGetting) event handler. We subscribe to the **DynamicCollection.ObjectsGetting** event and pass a new collection of non-persistent objects every time filtering or sorting parameters are changed. If you cannot filter the collection manually, set the **ShapeRawData** event parameter to *true*. Then, **DynamicCollection** will process data (filter, sort, trim) internally. This example demonstrates two approaches to filter objects. -- The *Contact* objects are filtered at the storage level. The Criteria and Sorting values passed in event parameters are converted to the storage-specific format and used in arguments of the DataSet.Select method call. The DataSet returns filtered and sorted data that is then transformed into non-persistent objects. This approach can be useful if data for non-persistent objects is obtained from a remote service, a custom database query or a stored procedure. +- *Contact* objects are filtered at the storage level. Criteria and Sorting values passed in event parameters are converted into a storage-specific format and used in arguments of the *DataTable.Select* method call. DataSet returns filtered and sorted data that is then transformed into non-persistent objects. This approach can be useful if data for non-persistent objects is obtained from a remote service, a custom database query or a stored procedure. -- The *Artice* objects are filtered and sorted by the DynamicCollection internally. This functionality is enabled when the **ShapeRawData** parameter of the **DynamicCollection.ObjectsGetting** event is set to *true*. This approach is useful when all data is already available and no custom processing is required. +- *Article* objects are filtered and sorted by DynamicCollection internally. This functionality is enabled when the **ShapeRawData** parameter of the **DynamicCollection.ObjectsGetting** event is set to *true*. This approach is useful when all data is already available and no custom processing is required. -When **DynamicCollection** is used, the built-in [FullTextSearch Action](https://docs.devexpress.com/eXpressAppFramework/112997/concepts/filtering/full-text-search-action) is shown in corresonding non-persistent list views. +When **DynamicCollection** is used, the built-in [FullTextSearch Action](https://docs.devexpress.com/eXpressAppFramework/112997/concepts/filtering/full-text-search-action) is shown in corresponding non-persistent list views. -The *FindArticlesController* in this example shows a custom search form with a lookup editor that allows filtering non-perssitent objects in a lookup list view. +*FindArticlesController* in this example shows a custom search form with a lookup editor that allows filtering non-perssitent objects in a lookup list view. Filtering and sorting at the data source level is also supported in Reports. Use the [Criteria](https://docs.devexpress.com/eXpressAppFramework/DevExpress.Persistent.Base.ReportsV2.DataSourceBase.Criteria) and [Sorting](https://docs.devexpress.com/eXpressAppFramework/DevExpress.Persistent.Base.ReportsV2.DataSourceBase.Sorting) properties of [CollectionDataSource](https://docs.devexpress.com/eXpressAppFramework/DevExpress.Persistent.Base.ReportsV2.CollectionDataSource) to specify filter criteria and sorting parameters. From d60fbf4f726081a395f5a79a4985d3c9470a7b70 Mon Sep 17 00:00:00 2001 From: KL <@> Date: Mon, 20 Apr 2020 13:43:49 +0300 Subject: [PATCH 02/40] Update for VB --- .../BusinessObjects/Article.cs | 2 +- .../BusinessObjects/Contact.cs | 2 +- .../BusinessObjects/NonPersistentObjectBase.cs | 3 ++- CS/NonPersistentObjectsDemo.Win/XafSplashScreen.cs | 5 +---- 4 files changed, 5 insertions(+), 7 deletions(-) diff --git a/CS/NonPersistentObjectsDemo.Module/BusinessObjects/Article.cs b/CS/NonPersistentObjectsDemo.Module/BusinessObjects/Article.cs index df0c4d2..8340f95 100644 --- a/CS/NonPersistentObjectsDemo.Module/BusinessObjects/Article.cs +++ b/CS/NonPersistentObjectsDemo.Module/BusinessObjects/Article.cs @@ -11,7 +11,7 @@ namespace NonPersistentObjectsDemo.Module.BusinessObjects { [DefaultClassOptions] - [DefaultProperty(nameof(Title))] + [DefaultProperty(nameof(Article.Title))] [DevExpress.ExpressApp.ConditionalAppearance.Appearance("", Enabled = false, TargetItems = "*")] [DevExpress.ExpressApp.DC.DomainComponent] public class Article : NonPersistentObjectBase { diff --git a/CS/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.cs b/CS/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.cs index 4d0ce92..0dc2211 100644 --- a/CS/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.cs +++ b/CS/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.cs @@ -13,7 +13,7 @@ namespace NonPersistentObjectsDemo.Module.BusinessObjects { [DefaultClassOptions] - [DefaultProperty(nameof(FullName))] + [DefaultProperty(nameof(Contact.FullName))] [DevExpress.ExpressApp.ConditionalAppearance.Appearance("", Enabled = false, TargetItems = "*")] [DevExpress.ExpressApp.DC.DomainComponent] public class Contact : NonPersistentObjectBase { diff --git a/CS/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.cs b/CS/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.cs index 857d636..853afeb 100644 --- a/CS/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.cs +++ b/CS/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.cs @@ -12,7 +12,8 @@ namespace NonPersistentObjectsDemo.Module.BusinessObjects { public abstract class NonPersistentObjectBase : INotifyPropertyChanged, IObjectSpaceLink { private IObjectSpace objectSpace; - public IObjectSpace ObjectSpace { + protected IObjectSpace ObjectSpace { get { return objectSpace; } } + IObjectSpace IObjectSpaceLink.ObjectSpace { get { return objectSpace; } set { if(objectSpace != value) { diff --git a/CS/NonPersistentObjectsDemo.Win/XafSplashScreen.cs b/CS/NonPersistentObjectsDemo.Win/XafSplashScreen.cs index b5fe178..717f2b4 100644 --- a/CS/NonPersistentObjectsDemo.Win/XafSplashScreen.cs +++ b/CS/NonPersistentObjectsDemo.Win/XafSplashScreen.cs @@ -49,8 +49,5 @@ public override void ProcessCommand(Enum cmd, object arg) { } #endregion - - public enum SplashScreenCommand { - } } -} \ No newline at end of file +} From a37f6e01917069e6c7f7db8d0b5bc9a20e8a9ff4 Mon Sep 17 00:00:00 2001 From: KL <@> Date: Mon, 20 Apr 2020 23:53:16 +0300 Subject: [PATCH 03/40] Rename API --- .../BusinessObjects/Article.cs | 6 +++--- .../BusinessObjects/Contact.cs | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/CS/NonPersistentObjectsDemo.Module/BusinessObjects/Article.cs b/CS/NonPersistentObjectsDemo.Module/BusinessObjects/Article.cs index 8340f95..c2d0ae1 100644 --- a/CS/NonPersistentObjectsDemo.Module/BusinessObjects/Article.cs +++ b/CS/NonPersistentObjectsDemo.Module/BusinessObjects/Article.cs @@ -52,14 +52,14 @@ public ArticleAdapter(NonPersistentObjectSpace npos) { private void ObjectSpace_ObjectsGetting(object sender, ObjectsGettingEventArgs e) { if(e.ObjectType == typeof(Article)) { var collection = new DynamicCollection(objectSpace, e.ObjectType, e.Criteria, e.Sorting, e.InTransaction); - collection.ObjectsGetting += DynamicCollection_ObjectsGetting; + collection.ObjectsFetching += DynamicCollection_ObjectsFetching; e.Objects = collection; } } - private void DynamicCollection_ObjectsGetting(object sender, DynamicObjectsGettingEventArgs e) { + private void DynamicCollection_ObjectsFetching(object sender, DynamicObjectsFetchingEventArgs e) { if(e.ObjectType == typeof(Article)) { e.Objects = articles; - e.ShapeRawData = true; + e.ShapeData = true; } } diff --git a/CS/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.cs b/CS/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.cs index 0dc2211..4da2936 100644 --- a/CS/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.cs +++ b/CS/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.cs @@ -51,11 +51,11 @@ public ContactAdapter(NonPersistentObjectSpace npos) { private void ObjectSpace_ObjectsGetting(object sender, ObjectsGettingEventArgs e) { if(e.ObjectType == typeof(Contact)) { var collection = new DynamicCollection(objectSpace, e.ObjectType, e.Criteria, e.Sorting, e.InTransaction); - collection.ObjectsGetting += DynamicCollection_ObjectsGetting; + collection.ObjectsFetching += DynamicCollection_ObjectsFetching; e.Objects = collection; } } - private void DynamicCollection_ObjectsGetting(object sender, DynamicObjectsGettingEventArgs e) { + private void DynamicCollection_ObjectsFetching(object sender, DynamicObjectsFetchingEventArgs e) { if(e.ObjectType == typeof(Contact)) { var rows = contactsStorage.GetContactRows(e.Criteria, e.Sorting); e.Objects = rows.Select(row => GetContact(row)); From 2a5a0a38158fc20324a35a63f78ebf0dba0440b5 Mon Sep 17 00:00:00 2001 From: KL <@> Date: Tue, 21 Apr 2020 00:04:27 +0300 Subject: [PATCH 04/40] Update readme --- readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index d254ccc..52e2dc9 100644 --- a/readme.md +++ b/readme.md @@ -16,13 +16,13 @@ When a [Non\-Persistent Object](https://docs.devexpress.com/eXpressAppFramework/ To enable filtering and sorting for [Non\-Persistent Objects](https://docs.devexpress.com/eXpressAppFramework/116516/concepts/business-model-design/non-persistent-objects), use the built-in **DynamicCollection** class or a custom **DynamicCollectionBase** descendant. -Here, we create a **DynamicCollection** instance and pass it in the [NonPersistentObjectSpace\.ObjectsGetting](https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.NonPersistentObjectSpace.ObjectsGetting) event handler. We subscribe to the **DynamicCollection.ObjectsGetting** event and pass a new collection of non-persistent objects every time filtering or sorting parameters are changed. If you cannot filter the collection manually, set the **ShapeRawData** event parameter to *true*. Then, **DynamicCollection** will process data (filter, sort, trim) internally. +Here, we create a **DynamicCollection** instance and pass it in the [NonPersistentObjectSpace\.ObjectsGetting](https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.NonPersistentObjectSpace.ObjectsGetting) event handler. We subscribe to the **DynamicCollection.ObjectsFetching** event and pass a new collection of non-persistent objects every time filtering or sorting parameters are changed. If you cannot filter the collection manually, set the **ShapeData** event parameter to *true*. Then, **DynamicCollection** will process data (filter, sort, trim) internally. This example demonstrates two approaches to filter objects. - *Contact* objects are filtered at the storage level. Criteria and Sorting values passed in event parameters are converted into a storage-specific format and used in arguments of the *DataTable.Select* method call. DataSet returns filtered and sorted data that is then transformed into non-persistent objects. This approach can be useful if data for non-persistent objects is obtained from a remote service, a custom database query or a stored procedure. -- *Article* objects are filtered and sorted by DynamicCollection internally. This functionality is enabled when the **ShapeRawData** parameter of the **DynamicCollection.ObjectsGetting** event is set to *true*. This approach is useful when all data is already available and no custom processing is required. +- *Article* objects are filtered and sorted by DynamicCollection internally. This functionality is enabled when the **ShapeData** parameter of the **DynamicCollection.ObjectsFetching** event is set to *true*. This approach is useful when all data is already available and no custom processing is required. When **DynamicCollection** is used, the built-in [FullTextSearch Action](https://docs.devexpress.com/eXpressAppFramework/112997/concepts/filtering/full-text-search-action) is shown in corresponding non-persistent list views. From 7d152c6b060d35299a166c9e7c1572751158058b Mon Sep 17 00:00:00 2001 From: DevExpressExampleBot Date: Tue, 21 Apr 2020 10:27:32 +0300 Subject: [PATCH 05/40] Source auto update [skip ci] --- ...NonPersistentObjectsDemo.Module.Web.csproj | 19 +- ...NonPersistentObjectsDemo.Module.Win.csproj | 13 +- .../FunctionalTests/config.xml | 4 +- .../NonPersistentObjectsDemo.Module.csproj | 13 +- .../NonPersistentObjectsDemo.Web.csproj | 16 +- CS/NonPersistentObjectsDemo.Web/Web.config | 25 +- .../NonPersistentObjectsDemo.Win.csproj | 16 +- LICENSE | 3 + .../Controllers/ReadMe.txt | 19 + .../Editors/ReadMe.txt | 31 + .../Images/ReadMe.txt | 12 + .../Model.DesignedDiffs.xafml | 9 + .../My Project/AssemblyInfo.vb | 33 + ...NonPersistentObjectsDemo.Module.Web.vbproj | 243 +++++++ .../ReadMe.txt | 28 + .../WebModule.Designer.vb | 41 ++ .../WebModule.vb | 44 ++ .../Controllers/ReadMe.txt | 19 + .../Editors/ReadMe.txt | 33 + .../Images/ExpressAppLogo.png | Bin 0 -> 7486 bytes .../Images/ReadMe.txt | 12 + .../Model.DesignedDiffs.xafml | 2 + .../My Project/AssemblyInfo.vb | 33 + ...NonPersistentObjectsDemo.Module.Win.vbproj | 281 ++++++++ .../ReadMe.txt | 29 + .../WinModule.Designer.vb | 41 ++ .../WinModule.vb | 44 ++ .../BusinessObjects/Article.vb | 108 +++ .../BusinessObjects/Contact.vb | 146 ++++ .../NonPersistentObjectBase.vb | 59 ++ .../BusinessObjects/ReadMe.txt | 11 + .../Controllers/FindArticlesController.vb | 95 +++ .../Controllers/ReadMe.txt | 19 + .../DatabaseUpdate/ReadMe.txt | 17 + .../DatabaseUpdate/Updater.vb | 83 +++ .../FunctionalTests/ReadMe.txt | 10 + .../FunctionalTests/config.xml | 36 + .../FunctionalTests/sample.ets | 20 + .../Images/ReadMe.txt | 12 + .../Model.DesignedDiffs.xafml | 26 + .../Module.Designer.vb | 50 ++ VB/NonPersistentObjectsDemo.Module/Module.vb | 54 ++ .../My Project/AssemblyInfo.vb | 33 + .../NonPersistentObjectsDemo.Module.vbproj | 202 ++++++ VB/NonPersistentObjectsDemo.Module/ReadMe.txt | 28 + VB/NonPersistentObjectsDemo.Module/Util.vb | 102 +++ .../Welcome.html | 185 +++++ VB/NonPersistentObjectsDemo.Web/Default.aspx | 19 + .../Default.aspx.designer.vb | 40 ++ .../Default.aspx.vb | 20 + VB/NonPersistentObjectsDemo.Web/Error.aspx | 147 ++++ .../Error.aspx.designer.vb | 166 +++++ VB/NonPersistentObjectsDemo.Web/Error.aspx.vb | 77 +++ VB/NonPersistentObjectsDemo.Web/Global.asax | 1 + .../Global.asax.vb | 77 +++ .../Images/Logo.svg | 43 ++ .../Images/ReadMe.txt | 12 + VB/NonPersistentObjectsDemo.Web/Login.aspx | 24 + .../Login.aspx.designer.vb | 49 ++ VB/NonPersistentObjectsDemo.Web/Login.aspx.vb | 14 + .../Model.Desktop.xafml | 3 + .../Model.Tablet.xafml | 3 + VB/NonPersistentObjectsDemo.Web/Model.xafml | 3 + .../My Project/AssemblyInfo.vb | 33 + .../NonPersistentObjectsDemo.Web.vbproj | 396 +++++++++++ VB/NonPersistentObjectsDemo.Web/ReadMe.txt | 31 + VB/NonPersistentObjectsDemo.Web/Web.config | 185 +++++ .../WebApplication.vb | 172 +++++ VB/NonPersistentObjectsDemo.Win/App.config | 46 ++ .../ExpressApp.ico | Bin 0 -> 113407 bytes .../Images/Logo.svg | 18 + .../Images/ReadMe.txt | 12 + VB/NonPersistentObjectsDemo.Win/Model.xafml | 7 + .../My Project/AssemblyInfo.vb | 33 + .../NonPersistentObjectsDemo.Win.vbproj | 370 ++++++++++ VB/NonPersistentObjectsDemo.Win/Program.vb | 58 ++ VB/NonPersistentObjectsDemo.Win/ReadMe.txt | 31 + .../WinApplication.Designer.vb | 129 ++++ .../WinApplication.vb | 65 ++ .../XafSplashScreen.Designer.vb | 177 +++++ .../XafSplashScreen.resx | 638 ++++++++++++++++++ .../XafSplashScreen.vb | 56 ++ VB/NonPersistentObjectsFilteringDemo.sln | 59 ++ 83 files changed, 5549 insertions(+), 24 deletions(-) create mode 100644 LICENSE create mode 100644 VB/NonPersistentObjectsDemo.Module.Web/Controllers/ReadMe.txt create mode 100644 VB/NonPersistentObjectsDemo.Module.Web/Editors/ReadMe.txt create mode 100644 VB/NonPersistentObjectsDemo.Module.Web/Images/ReadMe.txt create mode 100644 VB/NonPersistentObjectsDemo.Module.Web/Model.DesignedDiffs.xafml create mode 100644 VB/NonPersistentObjectsDemo.Module.Web/My Project/AssemblyInfo.vb create mode 100644 VB/NonPersistentObjectsDemo.Module.Web/NonPersistentObjectsDemo.Module.Web.vbproj create mode 100644 VB/NonPersistentObjectsDemo.Module.Web/ReadMe.txt create mode 100644 VB/NonPersistentObjectsDemo.Module.Web/WebModule.Designer.vb create mode 100644 VB/NonPersistentObjectsDemo.Module.Web/WebModule.vb create mode 100644 VB/NonPersistentObjectsDemo.Module.Win/Controllers/ReadMe.txt create mode 100644 VB/NonPersistentObjectsDemo.Module.Win/Editors/ReadMe.txt create mode 100644 VB/NonPersistentObjectsDemo.Module.Win/Images/ExpressAppLogo.png create mode 100644 VB/NonPersistentObjectsDemo.Module.Win/Images/ReadMe.txt create mode 100644 VB/NonPersistentObjectsDemo.Module.Win/Model.DesignedDiffs.xafml create mode 100644 VB/NonPersistentObjectsDemo.Module.Win/My Project/AssemblyInfo.vb create mode 100644 VB/NonPersistentObjectsDemo.Module.Win/NonPersistentObjectsDemo.Module.Win.vbproj create mode 100644 VB/NonPersistentObjectsDemo.Module.Win/ReadMe.txt create mode 100644 VB/NonPersistentObjectsDemo.Module.Win/WinModule.Designer.vb create mode 100644 VB/NonPersistentObjectsDemo.Module.Win/WinModule.vb create mode 100644 VB/NonPersistentObjectsDemo.Module/BusinessObjects/Article.vb create mode 100644 VB/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.vb create mode 100644 VB/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.vb create mode 100644 VB/NonPersistentObjectsDemo.Module/BusinessObjects/ReadMe.txt create mode 100644 VB/NonPersistentObjectsDemo.Module/Controllers/FindArticlesController.vb create mode 100644 VB/NonPersistentObjectsDemo.Module/Controllers/ReadMe.txt create mode 100644 VB/NonPersistentObjectsDemo.Module/DatabaseUpdate/ReadMe.txt create mode 100644 VB/NonPersistentObjectsDemo.Module/DatabaseUpdate/Updater.vb create mode 100644 VB/NonPersistentObjectsDemo.Module/FunctionalTests/ReadMe.txt create mode 100644 VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml create mode 100644 VB/NonPersistentObjectsDemo.Module/FunctionalTests/sample.ets create mode 100644 VB/NonPersistentObjectsDemo.Module/Images/ReadMe.txt create mode 100644 VB/NonPersistentObjectsDemo.Module/Model.DesignedDiffs.xafml create mode 100644 VB/NonPersistentObjectsDemo.Module/Module.Designer.vb create mode 100644 VB/NonPersistentObjectsDemo.Module/Module.vb create mode 100644 VB/NonPersistentObjectsDemo.Module/My Project/AssemblyInfo.vb create mode 100644 VB/NonPersistentObjectsDemo.Module/NonPersistentObjectsDemo.Module.vbproj create mode 100644 VB/NonPersistentObjectsDemo.Module/ReadMe.txt create mode 100644 VB/NonPersistentObjectsDemo.Module/Util.vb create mode 100644 VB/NonPersistentObjectsDemo.Module/Welcome.html create mode 100644 VB/NonPersistentObjectsDemo.Web/Default.aspx create mode 100644 VB/NonPersistentObjectsDemo.Web/Default.aspx.designer.vb create mode 100644 VB/NonPersistentObjectsDemo.Web/Default.aspx.vb create mode 100644 VB/NonPersistentObjectsDemo.Web/Error.aspx create mode 100644 VB/NonPersistentObjectsDemo.Web/Error.aspx.designer.vb create mode 100644 VB/NonPersistentObjectsDemo.Web/Error.aspx.vb create mode 100644 VB/NonPersistentObjectsDemo.Web/Global.asax create mode 100644 VB/NonPersistentObjectsDemo.Web/Global.asax.vb create mode 100644 VB/NonPersistentObjectsDemo.Web/Images/Logo.svg create mode 100644 VB/NonPersistentObjectsDemo.Web/Images/ReadMe.txt create mode 100644 VB/NonPersistentObjectsDemo.Web/Login.aspx create mode 100644 VB/NonPersistentObjectsDemo.Web/Login.aspx.designer.vb create mode 100644 VB/NonPersistentObjectsDemo.Web/Login.aspx.vb create mode 100644 VB/NonPersistentObjectsDemo.Web/Model.Desktop.xafml create mode 100644 VB/NonPersistentObjectsDemo.Web/Model.Tablet.xafml create mode 100644 VB/NonPersistentObjectsDemo.Web/Model.xafml create mode 100644 VB/NonPersistentObjectsDemo.Web/My Project/AssemblyInfo.vb create mode 100644 VB/NonPersistentObjectsDemo.Web/NonPersistentObjectsDemo.Web.vbproj create mode 100644 VB/NonPersistentObjectsDemo.Web/ReadMe.txt create mode 100644 VB/NonPersistentObjectsDemo.Web/Web.config create mode 100644 VB/NonPersistentObjectsDemo.Web/WebApplication.vb create mode 100644 VB/NonPersistentObjectsDemo.Win/App.config create mode 100644 VB/NonPersistentObjectsDemo.Win/ExpressApp.ico create mode 100644 VB/NonPersistentObjectsDemo.Win/Images/Logo.svg create mode 100644 VB/NonPersistentObjectsDemo.Win/Images/ReadMe.txt create mode 100644 VB/NonPersistentObjectsDemo.Win/Model.xafml create mode 100644 VB/NonPersistentObjectsDemo.Win/My Project/AssemblyInfo.vb create mode 100644 VB/NonPersistentObjectsDemo.Win/NonPersistentObjectsDemo.Win.vbproj create mode 100644 VB/NonPersistentObjectsDemo.Win/Program.vb create mode 100644 VB/NonPersistentObjectsDemo.Win/ReadMe.txt create mode 100644 VB/NonPersistentObjectsDemo.Win/WinApplication.Designer.vb create mode 100644 VB/NonPersistentObjectsDemo.Win/WinApplication.vb create mode 100644 VB/NonPersistentObjectsDemo.Win/XafSplashScreen.Designer.vb create mode 100644 VB/NonPersistentObjectsDemo.Win/XafSplashScreen.resx create mode 100644 VB/NonPersistentObjectsDemo.Win/XafSplashScreen.vb create mode 100644 VB/NonPersistentObjectsFilteringDemo.sln diff --git a/CS/NonPersistentObjectsDemo.Module.Web/NonPersistentObjectsDemo.Module.Web.csproj b/CS/NonPersistentObjectsDemo.Module.Web/NonPersistentObjectsDemo.Module.Web.csproj index 6b461c3..ee44fba 100644 --- a/CS/NonPersistentObjectsDemo.Module.Web/NonPersistentObjectsDemo.Module.Web.csproj +++ b/CS/NonPersistentObjectsDemo.Module.Web/NonPersistentObjectsDemo.Module.Web.csproj @@ -1,4 +1,4 @@ - + @@ -119,12 +119,27 @@ False + + False + + + False + False False + + False + + + False + + + False + False @@ -205,4 +220,4 @@ --> - \ No newline at end of file + diff --git a/CS/NonPersistentObjectsDemo.Module.Win/NonPersistentObjectsDemo.Module.Win.csproj b/CS/NonPersistentObjectsDemo.Module.Win/NonPersistentObjectsDemo.Module.Win.csproj index 88b0e13..f17ccb1 100644 --- a/CS/NonPersistentObjectsDemo.Module.Win/NonPersistentObjectsDemo.Module.Win.csproj +++ b/CS/NonPersistentObjectsDemo.Module.Win/NonPersistentObjectsDemo.Module.Win.csproj @@ -1,4 +1,4 @@ - + @@ -143,6 +143,15 @@ False + + False + + + False + + + False + False @@ -248,4 +257,4 @@ --> - \ No newline at end of file + diff --git a/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml b/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml index 8fcf398..b19e270 100644 --- a/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml +++ b/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml @@ -28,8 +28,8 @@ - - + + diff --git a/CS/NonPersistentObjectsDemo.Module/NonPersistentObjectsDemo.Module.csproj b/CS/NonPersistentObjectsDemo.Module/NonPersistentObjectsDemo.Module.csproj index ab012fa..b11532d 100644 --- a/CS/NonPersistentObjectsDemo.Module/NonPersistentObjectsDemo.Module.csproj +++ b/CS/NonPersistentObjectsDemo.Module/NonPersistentObjectsDemo.Module.csproj @@ -1,4 +1,4 @@ - + @@ -92,6 +92,15 @@ False + + False + + + False + + + False + False @@ -170,4 +179,4 @@ --> - \ No newline at end of file + diff --git a/CS/NonPersistentObjectsDemo.Web/NonPersistentObjectsDemo.Web.csproj b/CS/NonPersistentObjectsDemo.Web/NonPersistentObjectsDemo.Web.csproj index 4961be1..641c53e 100644 --- a/CS/NonPersistentObjectsDemo.Web/NonPersistentObjectsDemo.Web.csproj +++ b/CS/NonPersistentObjectsDemo.Web/NonPersistentObjectsDemo.Web.csproj @@ -1,4 +1,4 @@ - + @@ -178,6 +178,18 @@ False True + + False + True + + + False + True + + + False + True + False True @@ -361,4 +373,4 @@ - \ No newline at end of file + diff --git a/CS/NonPersistentObjectsDemo.Web/Web.config b/CS/NonPersistentObjectsDemo.Web/Web.config index 5d1bace..f2b083e 100644 --- a/CS/NonPersistentObjectsDemo.Web/Web.config +++ b/CS/NonPersistentObjectsDemo.Web/Web.config @@ -1,4 +1,4 @@ - + - \ No newline at end of file + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..cd4c9a2 --- /dev/null +++ b/LICENSE @@ -0,0 +1,3 @@ +This code example is provided "as is" without warranty of any kind. Developer Express Inc ("DevExpress") disclaims all warranties, either express or implied, including the warranties of merchantability and fitness for a particular purpose. + +For licensing terms and conditions of DevExpress product(s) required for, or associated with the use of this code example, please refer to the applicable End-User License Agreement at https://www.devexpress.com/Support/licensingfaq.xml \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Module.Web/Controllers/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module.Web/Controllers/ReadMe.txt new file mode 100644 index 0000000..0ee4668 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module.Web/Controllers/ReadMe.txt @@ -0,0 +1,19 @@ +Folder Description + +The "Controllers" project folder is intended for storing ASP.NET-specific Controller classes +that can change the default XAF application flow and add new features. + + +Relevant Documentation + +Controllers and Actions +https://docs.devexpress.com/eXpressAppFramework/112623 + +Controller Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Controller + +ViewController Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ViewController + +WindowController Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.WindowController diff --git a/VB/NonPersistentObjectsDemo.Module.Web/Editors/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module.Web/Editors/ReadMe.txt new file mode 100644 index 0000000..461813c --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module.Web/Editors/ReadMe.txt @@ -0,0 +1,31 @@ +Folder Description + +This project folder is intended for storing custom ASP.NET List Editors, +Property Editors and View Items. + + +Relevant Documentation + +List Editors +https://docs.devexpress.com/eXpressAppFramework/113189 + +Implement Custom Property Editors +https://docs.devexpress.com/eXpressAppFramework/113097 + +View Items +https://docs.devexpress.com/eXpressAppFramework/112612 + +How to: Implement an ASP.NET Web List Editor Using a Custom Control +https://docs.devexpress.com/eXpressAppFramework/113126 + +How to: Implement a Property Editor (in ASP.NET Applications) +https://docs.devexpress.com/eXpressAppFramework/112678 + +How to: Implement a Property Editor for Specific Data Management (in ASP.NET Web Applications) +https://docs.devexpress.com/eXpressAppFramework/113116 + +How to: Customize a Built-in Web Property Editor +https://docs.devexpress.com/eXpressAppFramework/113114 + +How to: Implement a View Item +https://docs.devexpress.com/eXpressAppFramework/112641 \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Module.Web/Images/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module.Web/Images/ReadMe.txt new file mode 100644 index 0000000..230befc --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module.Web/Images/ReadMe.txt @@ -0,0 +1,12 @@ +Folder Description + +The "Images" project folder is intended for storing custom image files. + + +Relevant Documentation + +Add and Override Images +https://docs.devexpress.com/eXpressAppFramework/112792 + +Assign a Custom Image +https://docs.devexpress.com/eXpressAppFramework/112744 diff --git a/VB/NonPersistentObjectsDemo.Module.Web/Model.DesignedDiffs.xafml b/VB/NonPersistentObjectsDemo.Module.Web/Model.DesignedDiffs.xafml new file mode 100644 index 0000000..b3b40cf --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module.Web/Model.DesignedDiffs.xafml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/VB/NonPersistentObjectsDemo.Module.Web/My Project/AssemblyInfo.vb b/VB/NonPersistentObjectsDemo.Module.Web/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..cceadc5 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module.Web/My Project/AssemblyInfo.vb @@ -0,0 +1,33 @@ +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' + + diff --git a/VB/NonPersistentObjectsDemo.Module.Web/NonPersistentObjectsDemo.Module.Web.vbproj b/VB/NonPersistentObjectsDemo.Module.Web/NonPersistentObjectsDemo.Module.Web.vbproj new file mode 100644 index 0000000..ae3b5d5 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module.Web/NonPersistentObjectsDemo.Module.Web.vbproj @@ -0,0 +1,243 @@ + + + + + Debug + AnyCPU + {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B} + Library + + NonPersistentObjectsDemo.Module.Web + v4.5.2 + 512 + On + Binary + Off + On + + + true + full + false + bin\Debug\ + true + true + prompt + true + + + pdbonly + true + bin\Release\ + false + true + prompt + true + + + true + bin\EasyTest\ + true + true + EASYTEST=True + full + AnyCPU + prompt + true + + + + + + + + + + + + + + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + + + Component + + + + WebModule.vb + + + + + + + + + + + + + + + + + + {57ACDBDB-006E-43D3-9308-97857F2FF75D} + NonPersistentObjectsDemo.Module + True + + + + + diff --git a/VB/NonPersistentObjectsDemo.Module.Web/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module.Web/ReadMe.txt new file mode 100644 index 0000000..853a0d9 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module.Web/ReadMe.txt @@ -0,0 +1,28 @@ +Project Description + +This project implements an ASP.NET Module. Platform-specific application elements +can be implemented here (Controllers, Editors & View Items, etc.). The root project +folder contains the WebModule.cs(vb) file with the class that inherits ModuleBase. +This class can be designed with the Module Designer that allows you to view and +customize Module components: referenced modules, Controllers and business classes. +Additionally, the root folder contains Application Model difference files +(XAFML files) that keep application settings specific for the current Module. +Differences files can be designed with the Model Editor. + + +Relevant Documentation + +Application Solution Components +https://docs.devexpress.com/eXpressAppFramework/112569 + +ModuleBase Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase + +Module Designer +https://docs.devexpress.com/eXpressAppFramework/112828 + +Application Model +https://docs.devexpress.com/eXpressAppFramework/112579 + +Model Editor +https://docs.devexpress.com/eXpressAppFramework/112582 \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Module.Web/WebModule.Designer.vb b/VB/NonPersistentObjectsDemo.Module.Web/WebModule.Designer.vb new file mode 100644 index 0000000..daf910d --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module.Web/WebModule.Designer.vb @@ -0,0 +1,41 @@ +Namespace NonPersistentObjectsDemo.Module.Web + Partial Public Class NonPersistentObjectsDemoAspNetModule + ''' + ''' Required designer variable. + ''' + Private components As System.ComponentModel.IContainer = Nothing + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + #Region "Component Designer generated code" + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + ' + ' NonPersistentObjectsDemoAspNetModule + ' + Me.RequiredModuleTypes.Add(GetType(NonPersistentObjectsDemo.Module.NonPersistentObjectsDemoModule)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.Web.SystemModule.SystemAspNetModule)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.FileAttachments.Web.FileAttachmentsAspNetModule)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.ReportsV2.Web.ReportsAspNetModuleV2)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.Scheduler.Web.SchedulerAspNetModule)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.ScriptRecorder.Web.ScriptRecorderAspNetModule)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.TreeListEditors.Web.TreeListEditorsAspNetModule)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.Validation.Web.ValidationAspNetModule)) + End Sub + + #End Region + End Class +End Namespace \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Module.Web/WebModule.vb b/VB/NonPersistentObjectsDemo.Module.Web/WebModule.vb new file mode 100644 index 0000000..cd440ac --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module.Web/WebModule.vb @@ -0,0 +1,44 @@ +Imports System +Imports System.Linq +Imports System.Text +Imports System.ComponentModel +Imports DevExpress.ExpressApp +Imports DevExpress.ExpressApp.DC +Imports System.Collections.Generic +Imports DevExpress.ExpressApp.Model +Imports DevExpress.ExpressApp.Editors +Imports DevExpress.ExpressApp.Actions +Imports DevExpress.ExpressApp.Updating +Imports DevExpress.ExpressApp.Model.Core +Imports DevExpress.ExpressApp.Model.DomainLogics +Imports DevExpress.ExpressApp.Model.NodeGenerators +Imports DevExpress.Persistent.BaseImpl + +Namespace NonPersistentObjectsDemo.Module.Web + ' For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase. + + Public NotInheritable Partial Class NonPersistentObjectsDemoAspNetModule + Inherits ModuleBase + + 'private void Application_CreateCustomModelDifferenceStore(Object sender, CreateCustomModelDifferenceStoreEventArgs e) { + ' e.Store = new ModelDifferenceDbStore((XafApplication)sender, typeof(ModelDifference), true, "Web"); + ' e.Handled = true; + '} + Private Sub Application_CreateCustomUserModelDifferenceStore(ByVal sender As Object, ByVal e As CreateCustomModelDifferenceStoreEventArgs) + e.Store = New ModelDifferenceDbStore(DirectCast(sender, XafApplication), GetType(ModelDifference), False, "Web") + e.Handled = True + End Sub + Public Sub New() + InitializeComponent() + End Sub + Public Overrides Function GetModuleUpdaters(ByVal objectSpace As IObjectSpace, ByVal versionFromDB As Version) As IEnumerable(Of ModuleUpdater) + Return ModuleUpdater.EmptyModuleUpdaters + End Function + Public Overrides Sub Setup(ByVal application As XafApplication) + MyBase.Setup(application) + 'application.CreateCustomModelDifferenceStore += Application_CreateCustomModelDifferenceStore; + AddHandler application.CreateCustomUserModelDifferenceStore, AddressOf Application_CreateCustomUserModelDifferenceStore + ' Manage various aspects of the application UI and behavior at the module level. + End Sub + End Class +End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module.Win/Controllers/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module.Win/Controllers/ReadMe.txt new file mode 100644 index 0000000..b9c5dc3 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module.Win/Controllers/ReadMe.txt @@ -0,0 +1,19 @@ +Folder Description + +The "Controllers" project folder is intended for storing platform-agnostic Controller classes +that can change the default XAF application flow and add new features. + + +Relevant Documentation + +Controllers and Actions +https://docs.devexpress.com/eXpressAppFramework/112623 + +Controller Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Controller + +ViewController Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ViewController + +WindowController Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.WindowController diff --git a/VB/NonPersistentObjectsDemo.Module.Win/Editors/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module.Win/Editors/ReadMe.txt new file mode 100644 index 0000000..3d405d8 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module.Win/Editors/ReadMe.txt @@ -0,0 +1,33 @@ +Folder Description + +This project folder is intended for storing custom WinForms List Editors, +Property Editors and View Items. + +Relevant Documentation + +List Editors +https://docs.devexpress.com/eXpressAppFramework/113189 + +Implement Custom Property Editors +https://docs.devexpress.com/eXpressAppFramework/113097 + +View Items +https://docs.devexpress.com/eXpressAppFramework/112612 + +How to: Implement a Custom WinForms List Editor +https://docs.devexpress.com/eXpressAppFramework/112659 + +How to: Support a Context Menu for a Custom WinForms List Editor +https://docs.devexpress.com/eXpressAppFramework/112660 + +How to: Implement a Property Editor (in WinForms Applications) +https://docs.devexpress.com/eXpressAppFramework/112679 + +How to: Implement a Property Editor for Specific Data Management (in WinForms Applications) +https://docs.devexpress.com/eXpressAppFramework/113101 + +How to: Extend Built-in Property Editor's Functionality +https://docs.devexpress.com/eXpressAppFramework/113104 + +How to: Implement a View Item +https://docs.devexpress.com/eXpressAppFramework/112641 diff --git a/VB/NonPersistentObjectsDemo.Module.Win/Images/ExpressAppLogo.png b/VB/NonPersistentObjectsDemo.Module.Win/Images/ExpressAppLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..3a6eaada75b3745cfe120bd6c4a9b1fd9e3058fc GIT binary patch literal 7486 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%0D@};7Gcq+eA2G? zi@E+Z_^7szO`Ty%?~cuvn)cRFB}swI(S**v`R+V>EN?Cmd4)ZLCS_F}F%TXB9IeHZ{okZPkY}1QyaIL8z z@w?kH+*}DnnL7g(7=!zDN4C&Vn6qGs*<{J`l^8i76KKS|_0C+o`J4rx8w&Dp{^u@N z0R&oMrD62=)EP1n*IpiY=$U!5U&hK%aab9CG5NNfEU>6*;?So!qT z>*05-Zdabqx0Y<}%_N>nCxG5V>SSi^W~@6kp;?oL=*O6UJpS|yq#4=D8jeA>c*%^7 z#pZ`@82W;s6ErPYufmZl#z-}L6@s6FMZLayy}ry3h!P^Uu0t@$&!Iy*%mEnZ23<#rF(K*vSIuqsx$ zre)2CQ<;WJ@d;z3S8vXn-^x>lnUoxi`@A(OY*e8MlOO?DU{K71Xx6wPZWe{)9)=4sa)QitN zH1pm0=mChC7GV0oz6Q;Z!>LUg%vrb;ZBG|lc5Z8TDdexvuxXQqq%(Kn66OaPvVk^p ztiRFN#tk88!$^5$p7#+jCcJ+HVHSmt!Ztivrhtaru!R%9IMzOBqKbh0y+)4J>iDG` zH&5$@bT0tl$3TwkmQubGFXyL)y;}zM?M9;wLuA}Y9{=~-M%^~vPY%}H>`siCV=Vx? zVJ6KGLT<(MSKggI^&x468#=nV3zu35GxNO#T|2iU$ASWG8#n(v=i?=~XEq@Bhzz8h z+Bn6m5LbSy9(8ceEeo;&{B{mfh0LWwKtu3v7&@F&zybUY=JJ6V}RL@3E4LjrwGMbKOY5#SjfIHTX4v8)H& z`PVXb&0Dw(sq(0=b;g2X2T-p~rw*n19%F8_>6#oEb0sG99UM!*v6alZ;RY1x)epRVrCG((z{) zdMjYlPup)CJz+qfuKoLTYudO0r6MbEg*RjE57H#}@X?8rr(JP*OVsRgRok-W_vwbq zuW$c*fz7`K25Dj!1!#D{-V5C@^Z+clwE-bGa>bD3{6rU|3`aMj04SH_>mB|{I#z(N z&!!x!A7q6mL~>hEr@i3ii9fue?fKUB0GR0o$lNOgq6&@`639Cnu}$TGBpG>af0CE3 zNY5`QWB~I%S$6+D=nokZX5@7P=Go`>02bK-9F9^pCcXdx3`1)LQE=&(8MtB5k3D!d zkstYxvF=BEDYzxiUijF9_Ykl8_v!lf?1fT+3}v6Z^xD6f4R5?O#jqt!c-YI+95}6Rcrm+*e_YruB3r12DNEcybry z3Gu-S8DAa$S=*QH*!m7DEo9M&?%uD8#7in1NK_)P--Eo0nTi#&c`OxBLLo5Zhd1Dw zE+}UOaxCODM&ELs483x5kII5(&0hHEgLl&~>VHj_`JXIjzCc`h>iO5rDRFVJSO@7S z{N0~{AX^a_xu$tGoKEeiSq&;&Vhghif{VfHE_p@}E$F-GUXe+||=0Y|qQ`blj(U7i(*7h6m`J)VvF^kz8r ztDP#|(uLrLa%CFw#n-FR6~x6=!;w1e$qDbg|MBv#GJZ#l+O?WAuD^QS2AM*k7h&P2 zE6k;={eB}}P+MPS3>u`<+V3_VI(*cpL%6!rm6#8fg%LlMGHK#itOF@5`1A|P)^14Y zp|@hhu)b^7ZIIPNTb!|wjA~R0sbP!AQ^^z(u;yE~{VFwO^oaU}g+)H=xoh`6ED@|~6G7xin?uqeKH>#LCh5acr5797mKxrk zO7y}s^Gj7qM{JOkI0FdZ`q495{BEu?=`f1zI^2jNFtK-UW@?MdF37ZQ)%@>cZ<2$+ zj%#loN0c>puC>x>xM=eC=Mll-qYKe+A2;WP+LK>Dr5 zQ}WPm*k{-sp|=8a!#wQ@R57dr$=FhCFUhB`CuMm0Zn5Y2?gyVNShRxV6`#IM0;V8U zuq}2bJp9Cq=A45wjD*Evd8?e}C&E6hcdnn}Y5%y@s3ecYB>1BQ&Er{2qBoBU1?N|f zSRU^;uYhr{a^)L>uKDj1r}pi2HFBm&N_`r^$c?Ps**Lx4y!DrYf+7IGvyvy6xO4YD zpG7QOv;sBd7<%N1mt-Ji3Ypey-uml^q1T{hQteu}Ad4BU`EDcbPrn=t03o)*sNrWT zaDt9%xRDz2dFSrz1&hAKnvf2~lg~_l3w5ZHv~ZlYYahmYmU>cqNx@&Y$UL!1SSZnE z;b&jk{XF&3D=cifT z#?4a(RIsHq-?{DyZC?hj+fi>lR@7)_;RDV_oa#fOC##tTi2m;xN#WCeTUz9KEEZ|uKvX*Gf8;&!%y*A6DU9b zh5-;6(|W-K_i#Z6mbpr~hPHEwlM7GBDa@4La{Rp5zD!IIg4<@m_Mv?)UX)^=o&T=^&WtbMx0k4M{C8_0 z!^rwSD}Sj$=xowY~=vI48w5EbZQVRHRV7>Sm!FV_xUz^?oAYuBo=+z2-ZVxUxgD=lNu5Mus?w0 zw{8j=fb5)b8^XDo*3&DvOw3@SS~9qDER%cNA!nRvM}B3+`79=mNtEOpiM&!jU?dXi zfaEIur)hm;p)#{`1we$sFdP9`2=N}0g??F^T!bg>fvA<^E%dN@8{I3HxMF5?@Tp0# zr<*;fyW4}&IE_BW-Xh5Uiq+|W%ZV>*S7{+``iVO4ePu8kkyFp3{3o{fH zp#PA+vCxp8pMN+v_vDG+7!zQAl+iNc1)i2p$4pt1zmWgUL7M45FzIo`1vP5asZ%c@ zF_DEI3Mv+b0mH_z(BN^qi;IihrEZyPpqaa{dN(swq+y_(qN8J~RIM5n6~)321qCNS zNcKfVMedSPhtpXtwpxJjRlWw2 zqoSh0MmXEFo|5Eo;CYm7T2G?Y^^}&DAX}Kra5&&hprD;mM=J~&F+S+f3m9k)jT}KjLTsJn z8qv|taIDr@Q0jIc%sFxDRK9!^4TZ3VVG0T`^!k4Uw`%Un$9X~(lH=p6U0k;o^Eo3A z4>U*g-n|F&@?2Dg+g*~7kQjlt!+FNl7*7H46x?IRGGXzrXb7uZH3<3?DTyILpGq!sw`Il2aNc z8-m*fu0sJvyu9@o^fO}geU+-!QOL~7hO&^XG%haAqNbn_5pTkG0H9kTS#W^@6rK>w zn*#nvJS}Evnn`IgIhY0{>%vPF z&XGZZ{RM80DuPy$D*)iA!aT*5iaZ2o+-s|8vNGm|C@4hGd%!de@K1Ub`C_wQEW`-6cqGNpoP5@rv48AP^r7q?vVP?eELgB=T zQ*@+r4?aD~&J`5Y3YeswJ=p;=03#i1045CA;mcH&s7Ma24D)xjfVca z_24Jjp^aR#abVMT;=vjt>7~pOXbRz| zB81Mk+tBwE;UPoLn4uS=AVBk32jUNK2(BRt3gLfev1T|HnuG(BD_|Cgz&;V2#zrf} zLO1qK%@nx_gF>L0qEHgR{4QWX3FWXsK>_Z#XKFwt1qFrw2iHENzLX`&2mk;807*qo IM6N<$g0{$L^Z)<= literal 0 HcmV?d00001 diff --git a/VB/NonPersistentObjectsDemo.Module.Win/Images/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module.Win/Images/ReadMe.txt new file mode 100644 index 0000000..230befc --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module.Win/Images/ReadMe.txt @@ -0,0 +1,12 @@ +Folder Description + +The "Images" project folder is intended for storing custom image files. + + +Relevant Documentation + +Add and Override Images +https://docs.devexpress.com/eXpressAppFramework/112792 + +Assign a Custom Image +https://docs.devexpress.com/eXpressAppFramework/112744 diff --git a/VB/NonPersistentObjectsDemo.Module.Win/Model.DesignedDiffs.xafml b/VB/NonPersistentObjectsDemo.Module.Win/Model.DesignedDiffs.xafml new file mode 100644 index 0000000..d5e5a36 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module.Win/Model.DesignedDiffs.xafml @@ -0,0 +1,2 @@ + + diff --git a/VB/NonPersistentObjectsDemo.Module.Win/My Project/AssemblyInfo.vb b/VB/NonPersistentObjectsDemo.Module.Win/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..b38e166 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module.Win/My Project/AssemblyInfo.vb @@ -0,0 +1,33 @@ +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' + + diff --git a/VB/NonPersistentObjectsDemo.Module.Win/NonPersistentObjectsDemo.Module.Win.vbproj b/VB/NonPersistentObjectsDemo.Module.Win/NonPersistentObjectsDemo.Module.Win.vbproj new file mode 100644 index 0000000..a6a0475 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module.Win/NonPersistentObjectsDemo.Module.Win.vbproj @@ -0,0 +1,281 @@ + + + + + Debug + AnyCPU + {72D644CD-C193-4572-B2E3-CA82819A1627} + Library + + NonPersistentObjectsDemo.Module.Win + v4.5.2 + 512 + On + Binary + Off + On + + + true + full + false + bin\Debug\ + true + true + prompt + true + + + pdbonly + true + bin\Release\ + false + true + prompt + true + + + true + bin\EasyTest\ + true + true + EASYTEST=True + full + AnyCPU + prompt + true + + + + + + + + + + + + + + + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + System + False + + + False + + + System.Data + False + + + System.Drawing + False + + + System.Windows.Forms + False + + + System.XML + False + + + + + + Component + + + WinModule.vb + + + + + + + + + + + + + + + + + + + + + + + {57ACDBDB-006E-43D3-9308-97857F2FF75D} + NonPersistentObjectsDemo.Module + True + + + + + diff --git a/VB/NonPersistentObjectsDemo.Module.Win/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module.Win/ReadMe.txt new file mode 100644 index 0000000..17056ef --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module.Win/ReadMe.txt @@ -0,0 +1,29 @@ +Project Description + +This project implements a WinForms Module. Platform-specific application +elements can be implemented here (Controllers, Editors & View Items, etc.). +The root project folder contains the WinModule.cs(vb) file with the class that +inherits ModuleBase. This class can be designed with the Module Designer that +allows you to view and customize Module components: referenced modules, +Controllers and business classes. Additionally, the root folder contains +Application Model difference files (XAFML files) that keep application +settings specific for the current Module. Differences files can be designed +with the Model Editor. + + +Relevant Documentation + +Application Solution Components +https://docs.devexpress.com/eXpressAppFramework/112569 + +ModuleBase Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase + +Module Designer +https://docs.devexpress.com/eXpressAppFramework/112828 + +Application Model +https://docs.devexpress.com/eXpressAppFramework/112579 + +Model Editor +https://docs.devexpress.com/eXpressAppFramework/112582 diff --git a/VB/NonPersistentObjectsDemo.Module.Win/WinModule.Designer.vb b/VB/NonPersistentObjectsDemo.Module.Win/WinModule.Designer.vb new file mode 100644 index 0000000..5b61bab --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module.Win/WinModule.Designer.vb @@ -0,0 +1,41 @@ +Namespace NonPersistentObjectsDemo.Module.Win + Partial Public Class NonPersistentObjectsDemoWindowsFormsModule + ''' + ''' Required designer variable. + ''' + Private components As System.ComponentModel.IContainer = Nothing + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + #Region "Component Designer generated code" + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + ' + ' NonPersistentObjectsDemoWindowsFormsModule + ' + Me.RequiredModuleTypes.Add(GetType(NonPersistentObjectsDemo.Module.NonPersistentObjectsDemoModule)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.Win.SystemModule.SystemWindowsFormsModule)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.FileAttachments.Win.FileAttachmentsWindowsFormsModule)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.ReportsV2.Win.ReportsWindowsFormsModuleV2)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.Scheduler.Win.SchedulerWindowsFormsModule)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.ScriptRecorder.Win.ScriptRecorderWindowsFormsModule)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.TreeListEditors.Win.TreeListEditorsWindowsFormsModule)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.Validation.Win.ValidationWindowsFormsModule)) + End Sub + + #End Region + End Class +End Namespace \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Module.Win/WinModule.vb b/VB/NonPersistentObjectsDemo.Module.Win/WinModule.vb new file mode 100644 index 0000000..c53f375 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module.Win/WinModule.vb @@ -0,0 +1,44 @@ +Imports System +Imports System.Linq +Imports System.Text +Imports System.ComponentModel +Imports DevExpress.ExpressApp +Imports DevExpress.ExpressApp.DC +Imports System.Collections.Generic +Imports DevExpress.ExpressApp.Model +Imports DevExpress.ExpressApp.Editors +Imports DevExpress.ExpressApp.Actions +Imports DevExpress.ExpressApp.Updating +Imports DevExpress.ExpressApp.Model.Core +Imports DevExpress.ExpressApp.Model.DomainLogics +Imports DevExpress.ExpressApp.Model.NodeGenerators +Imports DevExpress.Persistent.BaseImpl + +Namespace NonPersistentObjectsDemo.Module.Win + ' For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase. + + Public NotInheritable Partial Class NonPersistentObjectsDemoWindowsFormsModule + Inherits ModuleBase + + 'private void Application_CreateCustomModelDifferenceStore(Object sender, CreateCustomModelDifferenceStoreEventArgs e) { + ' e.Store = new ModelDifferenceDbStore((XafApplication)sender, typeof(ModelDifference), true, "Win"); + ' e.Handled = true; + '} + Private Sub Application_CreateCustomUserModelDifferenceStore(ByVal sender As Object, ByVal e As CreateCustomModelDifferenceStoreEventArgs) + e.Store = New ModelDifferenceDbStore(DirectCast(sender, XafApplication), GetType(ModelDifference), False, "Win") + e.Handled = True + End Sub + Public Sub New() + InitializeComponent() + End Sub + Public Overrides Function GetModuleUpdaters(ByVal objectSpace As IObjectSpace, ByVal versionFromDB As Version) As IEnumerable(Of ModuleUpdater) + Return ModuleUpdater.EmptyModuleUpdaters + End Function + Public Overrides Sub Setup(ByVal application As XafApplication) + MyBase.Setup(application) + 'application.CreateCustomModelDifferenceStore += Application_CreateCustomModelDifferenceStore; + AddHandler application.CreateCustomUserModelDifferenceStore, AddressOf Application_CreateCustomUserModelDifferenceStore + ' Manage various aspects of the application UI and behavior at the module level. + End Sub + End Class +End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module/BusinessObjects/Article.vb b/VB/NonPersistentObjectsDemo.Module/BusinessObjects/Article.vb new file mode 100644 index 0000000..badaad6 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/BusinessObjects/Article.vb @@ -0,0 +1,108 @@ +Imports System +Imports System.Collections.Generic +Imports System.ComponentModel +Imports System.Linq +Imports System.Text +Imports System.Threading.Tasks +Imports DevExpress.ExpressApp +Imports DevExpress.ExpressApp.DC +Imports DevExpress.Persistent.Base + +Namespace NonPersistentObjectsDemo.Module.BusinessObjects + + + + + + Public Class Article + Inherits NonPersistentObjectBase + + Friend Sub New() + End Sub +'INSTANT VB NOTE: The field id was renamed since Visual Basic does not allow fields to have the same name as other class members: + Private id_Conflict As Integer + + + Public Property ID() As Integer + Get + Return id_Conflict + End Get + Set(ByVal value As Integer) + id_Conflict = value + End Set + End Property + Private _Author As Contact + Public Property Author() As Contact + Get + Return _Author + End Get + Set(ByVal value As Contact) + SetPropertyValue(NameOf(Author), _Author, value) + End Set + End Property + Private _Title As String + Public Property Title() As String + Get + Return _Title + End Get + Set(ByVal value As String) + SetPropertyValue(Of String)(NameOf(Title), _Title, value) + End Set + End Property + Private _Content As String + + Public Property Content() As String + Get + Return _Content + End Get + Set(ByVal value As String) + SetPropertyValue(Of String)(NameOf(Content), _Content, value) + End Set + End Property + End Class + + Friend Class ArticleAdapter + Private objectSpace As NonPersistentObjectSpace + Private Shared articles As List(Of Article) + + Public Sub New(ByVal npos As NonPersistentObjectSpace) + Me.objectSpace = npos + AddHandler objectSpace.ObjectsGetting, AddressOf ObjectSpace_ObjectsGetting + End Sub + Private Sub ObjectSpace_ObjectsGetting(ByVal sender As Object, ByVal e As ObjectsGettingEventArgs) + If e.ObjectType Is GetType(Article) Then + Dim collection = New DynamicCollection(objectSpace, e.ObjectType, e.Criteria, e.Sorting, e.InTransaction) + AddHandler collection.ObjectsGetting, AddressOf DynamicCollection_ObjectsGetting + e.Objects = collection + End If + End Sub + Private Sub DynamicCollection_ObjectsGetting(ByVal sender As Object, ByVal e As DynamicObjectsGettingEventArgs) + If e.ObjectType Is GetType(Article) Then + e.Objects = articles + e.ShapeRawData = True + End If + End Sub + + Shared Sub New() + articles = New List(Of Article)() + CreateDemoData() + End Sub + + #Region "DemoData" + Private Shared Sub CreateDemoData() + Dim gen = New GenHelper() + Dim contacts = ContactAdapter.GetAllContacts() + For i As Integer = 0 To 4999 + Dim id1 = gen.Next(contacts.Count) + Dim id2 = gen.Next(contacts.Count - 1) + articles.Add(New Article() With { + .ID = i, + .Title = GenHelper.ToTitle(gen.MakeBlah(gen.Next(7))), + .Content = gen.MakeBlahBlahBlah(5 + gen.Next(100), 7), + .Author = contacts(id1) + }) + Next i + End Sub + #End Region + End Class +End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.vb b/VB/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.vb new file mode 100644 index 0000000..c433ea9 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.vb @@ -0,0 +1,146 @@ +Imports System +Imports System.Collections.Generic +Imports System.ComponentModel +Imports System.Data +Imports System.Linq +Imports System.Text +Imports System.Threading.Tasks +Imports DevExpress.Data.Filtering +Imports DevExpress.ExpressApp +Imports DevExpress.Persistent.Base +Imports DevExpress.Xpo + +Namespace NonPersistentObjectsDemo.Module.BusinessObjects + + + + + + Public Class Contact + Inherits NonPersistentObjectBase + + Friend Sub New() + End Sub +'INSTANT VB NOTE: The field userName was renamed since Visual Basic does not allow fields to have the same name as other class members: + Private userName_Conflict As String + + Public Property UserName() As String + Get + Return userName_Conflict + End Get + Set(ByVal value As String) + userName_Conflict = value + End Set + End Property +'INSTANT VB NOTE: The field fullName was renamed since Visual Basic does not allow fields to have the same name as other class members: + Private fullName_Conflict As String + Public Property FullName() As String + Get + Return fullName_Conflict + End Get + Set(ByVal value As String) + SetPropertyValue(NameOf(FullName), fullName_Conflict, value) + End Set + End Property + Private _Age As Integer + Public Property Age() As Integer + Get + Return _Age + End Get + Set(ByVal value As Integer) + SetPropertyValue(Of Integer)(NameOf(Age), _Age, value) + End Set + End Property + Private _Rating As Single + Public Property Rating() As Single + Get + Return _Rating + End Get + Set(ByVal value As Single) + SetPropertyValue(Of Single)(NameOf(Rating), _Rating, value) + End Set + End Property + End Class + + Friend Class ContactAdapter + Private objectSpace As NonPersistentObjectSpace + + Public Sub New(ByVal npos As NonPersistentObjectSpace) + Me.objectSpace = npos + AddHandler objectSpace.ObjectsGetting, AddressOf ObjectSpace_ObjectsGetting + End Sub + Private Sub ObjectSpace_ObjectsGetting(ByVal sender As Object, ByVal e As ObjectsGettingEventArgs) + If e.ObjectType Is GetType(Contact) Then + Dim collection = New DynamicCollection(objectSpace, e.ObjectType, e.Criteria, e.Sorting, e.InTransaction) + AddHandler collection.ObjectsGetting, AddressOf DynamicCollection_ObjectsGetting + e.Objects = collection + End If + End Sub + Private Sub DynamicCollection_ObjectsGetting(ByVal sender As Object, ByVal e As DynamicObjectsGettingEventArgs) + If e.ObjectType Is GetType(Contact) Then + Dim rows = contactsStorage.GetContactRows(e.Criteria, e.Sorting) + e.Objects = rows.Select(Function(row) GetContact(row)) + End If + End Sub + Private Shared Function GetContact(ByVal row As DataRow) As Contact + Dim obj As Contact = Nothing + Dim key = TryCast(row("UserName"), String) + If Not contactsCache.TryGetValue(key, obj) Then + obj = New Contact() With { + .UserName = key, + .FullName = DirectCast(row("FullName"), String), + .Age = DirectCast(row("Age"), Integer), + .Rating = DirectCast(row("Rating"), Single) + } + contactsCache.Add(key, obj) + End If + Return obj + End Function + + Private Shared contactsStorage As ContactStorage + Private Shared contactsCache As Dictionary(Of String, Contact) + Friend Shared Function GetAllContacts() As IList(Of Contact) + Return contactsStorage.GetContactRows(Nothing, Nothing).Select(Function(row) GetContact(row)).ToList() + End Function + Shared Sub New() + contactsStorage = New ContactStorage() + contactsStorage.LoadDemoData() + contactsCache = New Dictionary(Of String, Contact)() + End Sub + End Class + + Friend Class ContactStorage + Private dataSet As DataSet + Public Function GetContactRows(ByVal criteria As CriteriaOperator, ByVal sorting As IList(Of SortProperty)) As IList(Of DataRow) + Dim filter = CriteriaToWhereClauseHelper.GetDataSetWhere(criteria) + Dim sort As String = Nothing + If sorting IsNot Nothing AndAlso sorting.Count = 1 AndAlso TypeOf sorting(0).Property Is OperandProperty Then + sort = String.Format("{0} {1}", sorting(0).PropertyName,If(sorting(0).Direction = DevExpress.Xpo.DB.SortingDirection.Ascending, "ASC", "DESC")) + End If + Return dataSet.Tables("Contacts").Select(filter, sort) + End Function + Public Sub New() + dataSet = New DataSet() + If True Then + Dim dt = dataSet.Tables.Add("Contacts") + Dim colID = dt.Columns.Add("UserName", GetType(String)) + dt.Columns.Add("FullName", GetType(String)) + dt.Columns.Add("Age", GetType(Integer)) + dt.Columns.Add("Rating", GetType(Single)) + dt.PrimaryKey = New DataColumn() { colID } + End If + LoadDemoData() + End Sub + Public Sub LoadDemoData() + Dim dt = dataSet.Tables("Contacts") + Dim gen = New GenHelper() + For i As Integer = 0 To 199 + Dim id = gen.MakeTosh(20) + Dim fullName = gen.GetFullName() + Dim age = 16 + gen.Next(80) + Dim rating = gen.Next(100) * gen.Next(100) * 0.001F + dt.LoadDataRow(New Object() { id, fullName, age, rating }, LoadOption.OverwriteChanges) + Next i + End Sub + End Class +End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.vb b/VB/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.vb new file mode 100644 index 0000000..c9fa554 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.vb @@ -0,0 +1,59 @@ +Imports System +Imports System.Collections.Generic +Imports System.ComponentModel +Imports System.Linq +Imports System.Text +Imports System.Threading.Tasks +Imports DevExpress.ExpressApp +Imports DevExpress.ExpressApp.DC +Imports DevExpress.Persistent.Base + +Namespace NonPersistentObjectsDemo.Module.BusinessObjects + + Public MustInherit Class NonPersistentObjectBase + Implements INotifyPropertyChanged, IObjectSpaceLink + +'INSTANT VB NOTE: The field objectSpace was renamed since Visual Basic does not allow fields to have the same name as other class members: + Private objectSpace_Conflict As IObjectSpace + Protected ReadOnly Property ObjectSpace() As IObjectSpace + Get + Return objectSpace_Conflict + End Get + End Property + Private Property IObjectSpaceLink_ObjectSpace() As IObjectSpace Implements IObjectSpaceLink.ObjectSpace + Get + Return objectSpace_Conflict + End Get + Set(ByVal value As IObjectSpace) + If objectSpace_Conflict IsNot value Then + OnObjectSpaceChanging() + objectSpace_Conflict = value + OnObjectSpaceChanged() + End If + End Set + End Property + Protected Overridable Sub OnObjectSpaceChanging() + End Sub + Protected Overridable Sub OnObjectSpaceChanged() + End Sub + Protected Function FindPersistentObjectSpace(ByVal type As Type) As IObjectSpace + Return DirectCast(ObjectSpace, NonPersistentObjectSpace).AdditionalObjectSpaces.FirstOrDefault(Function(os) os.IsKnownType(type)) + End Function + Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged + Protected Sub OnPropertyChanged(ByVal propertyName As String) + PropertyChangedEvent?.Invoke(Me, New PropertyChangedEventArgs(propertyName)) + End Sub + Protected Sub SetPropertyValue(Of T)(ByVal name As String, ByRef field As T, ByVal value As T) + If Not Equals(field, value) Then + field = value + OnPropertyChanged(name) + End If + End Sub + + Public ReadOnly Property This() As Object + Get + Return Me + End Get + End Property + End Class +End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module/BusinessObjects/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module/BusinessObjects/ReadMe.txt new file mode 100644 index 0000000..09595b9 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/BusinessObjects/ReadMe.txt @@ -0,0 +1,11 @@ +Folder Description + +The "BusinessObjects" project folder is intended for storing the business objects +code. In XAF, a business object can be implemented as a base persistent class +descendant and as Domain Component interfaces. + +Relevant Documentation + +Business Model Design +https://docs.devexpress.com/eXpressAppFramework/112600 + diff --git a/VB/NonPersistentObjectsDemo.Module/Controllers/FindArticlesController.vb b/VB/NonPersistentObjectsDemo.Module/Controllers/FindArticlesController.vb new file mode 100644 index 0000000..9431fe3 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/Controllers/FindArticlesController.vb @@ -0,0 +1,95 @@ +Imports System +Imports System.Collections.Generic +Imports System.ComponentModel +Imports System.Linq +Imports System.Text +Imports System.Threading.Tasks +Imports DevExpress.Data.Filtering +Imports DevExpress.ExpressApp +Imports DevExpress.ExpressApp.Actions +Imports DevExpress.ExpressApp.ConditionalAppearance +Imports DevExpress.ExpressApp.DC +Imports DevExpress.Persistent.Base +Imports NonPersistentObjectsDemo.Module.BusinessObjects + +Namespace NonPersistentObjectsDemo.Module.Controllers + + Public Class FindArticlesController + Inherits ViewController + + Private action As PopupWindowShowAction + Public Sub New() + action = New PopupWindowShowAction(Me, "FindArticles", PredefinedCategory.View) + AddHandler action.CustomizePopupWindowParams, AddressOf Action_CustomizePopupWindowParams + AddHandler action.Execute, AddressOf Action_Execute + End Sub + Private Sub Action_CustomizePopupWindowParams(ByVal sender As Object, ByVal e As CustomizePopupWindowParamsEventArgs) + Dim objectSpace = Application.CreateObjectSpace(GetType(FindArticlesDialog)) + Dim obj = New FindArticlesDialog() + Dim detailView = Application.CreateDetailView(objectSpace, obj) + detailView.ViewEditMode = DevExpress.ExpressApp.Editors.ViewEditMode.Edit + e.View = detailView + End Sub + Private Sub Action_Execute(ByVal sender As Object, ByVal e As PopupWindowShowActionExecuteEventArgs) + End Sub + End Class + + + Public Class FindArticlesDialog + Inherits NonPersistentObjectBase + + Private _Author As Contact + + Public Property Author() As Contact + Get + Return _Author + End Get + Set(ByVal value As Contact) + SetPropertyValue(Of Contact)(NameOf(Author), _Author, value) + End Set + End Property + Private _AuthorMinRating As Single + + Public Property AuthorMinRating() As Single + Get + Return _AuthorMinRating + End Get + Set(ByVal value As Single) + SetPropertyValue(Of Single)(NameOf(AuthorMinRating), _AuthorMinRating, value) + End Set + End Property + Private _Articles As BindingList(Of Article) + Public ReadOnly Property Articles() As BindingList(Of Article) + Get + If _Articles Is Nothing Then + _Articles = New BindingList(Of Article)() + End If + Return _Articles + End Get + End Property + Private Sub UpdateArticles() + If _Articles IsNot Nothing Then + Dim filter = GetCriteria() + _Articles.RaiseListChangedEvents = False + _Articles.Clear() + For Each obj In ObjectSpace.GetObjects(Of Article)(filter) + _Articles.Add(obj) + Next obj + _Articles.RaiseListChangedEvents = True + _Articles.ResetBindings() + OnPropertyChanged(NameOf(Articles)) + End If + End Sub + Private Function GetCriteria() As CriteriaOperator + If Author IsNot Nothing Then + Return New BinaryOperator("Author.UserName", Author.UserName) + Else + Return CriteriaOperator.Parse("Author.Rating >= ?", AuthorMinRating) + End If + End Function + + Public Sub Find() + UpdateArticles() + End Sub + End Class +End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module/Controllers/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module/Controllers/ReadMe.txt new file mode 100644 index 0000000..b9c5dc3 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/Controllers/ReadMe.txt @@ -0,0 +1,19 @@ +Folder Description + +The "Controllers" project folder is intended for storing platform-agnostic Controller classes +that can change the default XAF application flow and add new features. + + +Relevant Documentation + +Controllers and Actions +https://docs.devexpress.com/eXpressAppFramework/112623 + +Controller Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Controller + +ViewController Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ViewController + +WindowController Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.WindowController diff --git a/VB/NonPersistentObjectsDemo.Module/DatabaseUpdate/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module/DatabaseUpdate/ReadMe.txt new file mode 100644 index 0000000..31da2b7 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/DatabaseUpdate/ReadMe.txt @@ -0,0 +1,17 @@ +Folder Description + +The "DatabaseUpdate" project folder is intended for storing code that supplies +initial data (default User objects, etc) and handles a database update when the +application version changes. + + +Relevant Documentation + +Supply Initial Data +https://docs.devexpress.com/eXpressAppFramework/112788 + +How to: Update the Database Structure after the Persistent Class or Property Was Renamed or Removed +https://docs.devexpress.com/eXpressAppFramework/113254 + +ModuleUpdater Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Updating.ModuleUpdater diff --git a/VB/NonPersistentObjectsDemo.Module/DatabaseUpdate/Updater.vb b/VB/NonPersistentObjectsDemo.Module/DatabaseUpdate/Updater.vb new file mode 100644 index 0000000..c925266 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/DatabaseUpdate/Updater.vb @@ -0,0 +1,83 @@ +Imports System +Imports System.Linq +Imports DevExpress.ExpressApp +Imports DevExpress.Data.Filtering +Imports DevExpress.Persistent.Base +Imports DevExpress.ExpressApp.Updating +Imports DevExpress.ExpressApp.Security +Imports DevExpress.ExpressApp.SystemModule +Imports DevExpress.ExpressApp.Security.Strategy +Imports DevExpress.Xpo +Imports DevExpress.ExpressApp.Xpo +Imports DevExpress.Persistent.BaseImpl +Imports DevExpress.Persistent.BaseImpl.PermissionPolicy + +Namespace NonPersistentObjectsDemo.Module.DatabaseUpdate + ' For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Updating.ModuleUpdater + Public Class Updater + Inherits ModuleUpdater + + Public Sub New(ByVal objectSpace As IObjectSpace, ByVal currentDBVersion As Version) + MyBase.New(objectSpace, currentDBVersion) + End Sub + Public Overrides Sub UpdateDatabaseAfterUpdateSchema() + MyBase.UpdateDatabaseAfterUpdateSchema() + 'CreateSecurityObjects(); + End Sub + + #Region "Security" + Private Sub CreateSecurityObjects() + Dim sampleUser As PermissionPolicyUser = ObjectSpace.FindObject(Of PermissionPolicyUser)(New BinaryOperator("UserName", "User")) + If sampleUser Is Nothing Then + sampleUser = ObjectSpace.CreateObject(Of PermissionPolicyUser)() + sampleUser.UserName = "User" + sampleUser.SetPassword("") + End If + Dim defaultRole As PermissionPolicyRole = CreateDefaultRole() + sampleUser.Roles.Add(defaultRole) + + Dim userAdmin As PermissionPolicyUser = ObjectSpace.FindObject(Of PermissionPolicyUser)(New BinaryOperator("UserName", "Admin")) + If userAdmin Is Nothing Then + userAdmin = ObjectSpace.CreateObject(Of PermissionPolicyUser)() + userAdmin.UserName = "Admin" + ' Set a password if the standard authentication type is used + userAdmin.SetPassword("") + End If + ' If a role with the Administrators name doesn't exist in the database, create this role + Dim adminRole As PermissionPolicyRole = ObjectSpace.FindObject(Of PermissionPolicyRole)(New BinaryOperator("Name", "Administrators")) + If adminRole Is Nothing Then + adminRole = ObjectSpace.CreateObject(Of PermissionPolicyRole)() + adminRole.Name = "Administrators" + End If + adminRole.IsAdministrative = True + userAdmin.Roles.Add(adminRole) + ObjectSpace.CommitChanges() 'This line persists created object(s). + End Sub + #End Region + + Public Overrides Sub UpdateDatabaseBeforeUpdateSchema() + MyBase.UpdateDatabaseBeforeUpdateSchema() + 'if(CurrentDBVersion < new Version("1.1.0.0") && CurrentDBVersion > new Version("0.0.0.0")) { + ' RenameColumn("DomainObject1Table", "OldColumnName", "NewColumnName"); + '} + End Sub + Private Function CreateDefaultRole() As PermissionPolicyRole + Dim defaultRole As PermissionPolicyRole = ObjectSpace.FindObject(Of PermissionPolicyRole)(New BinaryOperator("Name", "Default")) + If defaultRole Is Nothing Then + defaultRole = ObjectSpace.CreateObject(Of PermissionPolicyRole)() + defaultRole.Name = "Default" + + defaultRole.AddObjectPermission(Of PermissionPolicyUser)(SecurityOperations.Read, "[Oid] = CurrentUserId()", SecurityPermissionState.Allow) + defaultRole.AddNavigationPermission("Application/NavigationItems/Items/Default/Items/MyDetails", SecurityPermissionState.Allow) + defaultRole.AddMemberPermission(Of PermissionPolicyUser)(SecurityOperations.Write, "ChangePasswordOnFirstLogon", "[Oid] = CurrentUserId()", SecurityPermissionState.Allow) + defaultRole.AddMemberPermission(Of PermissionPolicyUser)(SecurityOperations.Write, "StoredPassword", "[Oid] = CurrentUserId()", SecurityPermissionState.Allow) + defaultRole.AddTypePermissionsRecursively(Of PermissionPolicyRole)(SecurityOperations.Read, SecurityPermissionState.Deny) + defaultRole.AddTypePermissionsRecursively(Of ModelDifference)(SecurityOperations.ReadWriteAccess, SecurityPermissionState.Allow) + defaultRole.AddTypePermissionsRecursively(Of ModelDifferenceAspect)(SecurityOperations.ReadWriteAccess, SecurityPermissionState.Allow) + defaultRole.AddTypePermissionsRecursively(Of ModelDifference)(SecurityOperations.Create, SecurityPermissionState.Allow) + defaultRole.AddTypePermissionsRecursively(Of ModelDifferenceAspect)(SecurityOperations.Create, SecurityPermissionState.Allow) + End If + Return defaultRole + End Function + End Class +End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/ReadMe.txt new file mode 100644 index 0000000..fb0b599 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/ReadMe.txt @@ -0,0 +1,10 @@ +Folder Description + +The "FunctionalTests" project folder is intended for storing EasyTest +configuration file and scripts. + + +Relevant Documentation + +Functional Testing +https://docs.devexpress.com/eXpressAppFramework/113206 diff --git a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml new file mode 100644 index 0000000..b19e270 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/sample.ets b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/sample.ets new file mode 100644 index 0000000..ab78fc2 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/sample.ets @@ -0,0 +1,20 @@ +;#DropDB NonPersistentObjectsDemoEasyTest + +#Application NonPersistentObjectsDemoWin +#Application NonPersistentObjectsDemoWeb + +*FillForm + User Name = Admin +*Action Log In + +#IfDef NonPersistentObjectsDemoWin + +*Action About... + +*Action OK + +#EndIf + +#IfDef NonPersistentObjectsDemoWeb +*Action Navigation(My Details) +#EndIf diff --git a/VB/NonPersistentObjectsDemo.Module/Images/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module/Images/ReadMe.txt new file mode 100644 index 0000000..230befc --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/Images/ReadMe.txt @@ -0,0 +1,12 @@ +Folder Description + +The "Images" project folder is intended for storing custom image files. + + +Relevant Documentation + +Add and Override Images +https://docs.devexpress.com/eXpressAppFramework/112792 + +Assign a Custom Image +https://docs.devexpress.com/eXpressAppFramework/112744 diff --git a/VB/NonPersistentObjectsDemo.Module/Model.DesignedDiffs.xafml b/VB/NonPersistentObjectsDemo.Module/Model.DesignedDiffs.xafml new file mode 100644 index 0000000..fbd248d --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/Model.DesignedDiffs.xafml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/VB/NonPersistentObjectsDemo.Module/Module.Designer.vb b/VB/NonPersistentObjectsDemo.Module/Module.Designer.vb new file mode 100644 index 0000000..eb519e6 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/Module.Designer.vb @@ -0,0 +1,50 @@ +Namespace NonPersistentObjectsDemo.Module + Partial Public Class NonPersistentObjectsDemoModule + ''' + ''' Required designer variable. + ''' + Private components As System.ComponentModel.IContainer = Nothing + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + #Region "Component Designer generated code" + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + ' + ' NonPersistentObjectsDemoModule + ' + Me.AdditionalExportedTypes.Add(GetType(DevExpress.Persistent.BaseImpl.ModelDifference)) + Me.AdditionalExportedTypes.Add(GetType(DevExpress.Persistent.BaseImpl.ModelDifferenceAspect)) + Me.AdditionalExportedTypes.Add(GetType(DevExpress.Persistent.BaseImpl.BaseObject)) + 'this.AdditionalExportedTypes.Add(typeof(DevExpress.Persistent.BaseImpl.FileData)); + 'this.AdditionalExportedTypes.Add(typeof(DevExpress.Persistent.BaseImpl.FileAttachmentBase)); + 'this.AdditionalExportedTypes.Add(typeof(DevExpress.Persistent.BaseImpl.Event)); + 'this.AdditionalExportedTypes.Add(typeof(DevExpress.Persistent.BaseImpl.Resource)); + 'this.AdditionalExportedTypes.Add(typeof(DevExpress.Persistent.BaseImpl.HCategory)); + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.SystemModule.SystemModule)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.Objects.BusinessClassLibraryCustomizationModule)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.CloneObject.CloneObjectModule)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.ConditionalAppearance.ConditionalAppearanceModule)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.ReportsV2.ReportsModuleV2)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.Scheduler.SchedulerModuleBase)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.ScriptRecorder.ScriptRecorderModuleBase)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.TreeListEditors.TreeListEditorsModuleBase)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.Validation.ValidationModule)) + End Sub + + #End Region + End Class +End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module/Module.vb b/VB/NonPersistentObjectsDemo.Module/Module.vb new file mode 100644 index 0000000..6f57162 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/Module.vb @@ -0,0 +1,54 @@ +Imports System +Imports System.Text +Imports System.Linq +Imports DevExpress.ExpressApp +Imports System.ComponentModel +Imports DevExpress.ExpressApp.DC +Imports System.Collections.Generic +Imports DevExpress.Persistent.Base +Imports DevExpress.Persistent.BaseImpl +Imports DevExpress.Persistent.BaseImpl.PermissionPolicy +Imports DevExpress.ExpressApp.Model +Imports DevExpress.ExpressApp.Actions +Imports DevExpress.ExpressApp.Editors +Imports DevExpress.ExpressApp.Updating +Imports DevExpress.ExpressApp.Model.Core +Imports DevExpress.ExpressApp.Model.DomainLogics +Imports DevExpress.ExpressApp.Model.NodeGenerators +Imports DevExpress.ExpressApp.Xpo +Imports NonPersistentObjectsDemo.Module.BusinessObjects + +Namespace NonPersistentObjectsDemo.Module + ' For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase. + Public NotInheritable Partial Class NonPersistentObjectsDemoModule + Inherits ModuleBase + + Public Sub New() + InitializeComponent() + BaseObject.OidInitializationMode = OidInitializationMode.AfterConstruction + End Sub + Public Overrides Function GetModuleUpdaters(ByVal objectSpace As IObjectSpace, ByVal versionFromDB As Version) As IEnumerable(Of ModuleUpdater) + Dim updater As ModuleUpdater = New DatabaseUpdate.Updater(objectSpace, versionFromDB) + Return New ModuleUpdater() { updater } + End Function + Public Overrides Sub Setup(ByVal application As XafApplication) + MyBase.Setup(application) + ' Manage various aspects of the application UI and behavior at the module level. + AddHandler application.SetupComplete, AddressOf Application_SetupComplete + End Sub + Private Sub Application_SetupComplete(ByVal sender As Object, ByVal e As EventArgs) + AddHandler Application.ObjectSpaceCreated, AddressOf Application_ObjectSpaceCreated + End Sub + Private Sub Application_ObjectSpaceCreated(ByVal sender As Object, ByVal e As ObjectSpaceCreatedEventArgs) + Dim npos = TryCast(e.ObjectSpace, NonPersistentObjectSpace) + If npos IsNot Nothing Then + Dim tempVar As New ArticleAdapter(npos) + Dim tempVar2 As New ContactAdapter(npos) + End If + End Sub + Public Overrides Sub CustomizeTypesInfo(ByVal typesInfo As ITypesInfo) + MyBase.CustomizeTypesInfo(typesInfo) + CalculatedPersistentAliasHelper.CustomizeTypesInfo(typesInfo) + End Sub + End Class +End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module/My Project/AssemblyInfo.vb b/VB/NonPersistentObjectsDemo.Module/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..43eb069 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/My Project/AssemblyInfo.vb @@ -0,0 +1,33 @@ +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' + + diff --git a/VB/NonPersistentObjectsDemo.Module/NonPersistentObjectsDemo.Module.vbproj b/VB/NonPersistentObjectsDemo.Module/NonPersistentObjectsDemo.Module.vbproj new file mode 100644 index 0000000..d375615 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/NonPersistentObjectsDemo.Module.vbproj @@ -0,0 +1,202 @@ + + + + + Debug + AnyCPU + {57ACDBDB-006E-43D3-9308-97857F2FF75D} + Library + + NonPersistentObjectsDemo.Module + v4.5.2 + 512 + On + Binary + Off + On + + + true + full + false + bin\Debug\ + true + true + prompt + true + + + pdbonly + true + bin\Release\ + false + true + prompt + true + + + true + bin\EasyTest\ + true + true + EASYTEST=True + full + AnyCPU + prompt + true + + + + + + + + + + + + + + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + System + + + System.Data + + + + System.XML + + + + + + + + Component + + + + Component + + + Module.vb + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/VB/NonPersistentObjectsDemo.Module/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module/ReadMe.txt new file mode 100644 index 0000000..a96fb7a --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/ReadMe.txt @@ -0,0 +1,28 @@ +Project Description + +This project implements a platform-agnostic Module. UI-independent application +elements can be implemented here (Business Objects, Controllers, etc.). The root +project folder contains the Module.cs(vb) file with the class that inherits +ModuleBase. This class can be designed with the Module Designer that allows +you to view and customize Module components: referenced modules, Controllers +and business classes. Additionally, the root folder contains Application Model +difference files (XAFML files) that keep application settings specific for the +current Module. Differences files can be designed with the Model Editor. + + +Relevant Documentation + +Application Solution Components +https://docs.devexpress.com/eXpressAppFramework/112569 + +ModuleBase Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase + +Module Designer +https://docs.devexpress.com/eXpressAppFramework/112828 + +Application Model +https://docs.devexpress.com/eXpressAppFramework/112579 + +Model Editor +https://docs.devexpress.com/eXpressAppFramework/112582 diff --git a/VB/NonPersistentObjectsDemo.Module/Util.vb b/VB/NonPersistentObjectsDemo.Module/Util.vb new file mode 100644 index 0000000..039906c --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/Util.vb @@ -0,0 +1,102 @@ +Imports System +Imports System.Collections.Generic +Imports System.Linq +Imports System.Text +Imports System.Threading.Tasks + +Namespace NonPersistentObjectsDemo.Module + + Public Class GenHelper + Private Shared srnd As Random + Private Shared words As List(Of String) + Private Shared fnames As List(Of String) + Private Shared lnames As List(Of String) + Shared Sub New() + srnd = New Random() + words = CreateWords(12000) + fnames = CreateNames(200) + lnames = CreateNames(500) + End Sub + Private Shared Function CreateWords(ByVal number As Integer) As List(Of String) + Dim items = New HashSet(Of String)() + Do While number > 0 + If items.Add(CreateWord()) Then + number -= 1 + End If + Loop + Return items.ToList() + End Function + Private Shared Function MakeTosh(ByVal rnd As Random, ByVal length As Integer) As String + Dim chars = New Char(length - 1){} + For i As Integer = 0 To length - 1 + chars(i) = ChrW(AscW("a"c) + rnd.Next(26)) + Next i + Return New String(chars) + End Function + Private Shared Function CreateWord() As String + Return MakeTosh(srnd, 1 + srnd.Next(13)) + End Function + Private Shared Function CreateNames(ByVal number As Integer) As List(Of String) + Dim items = New HashSet(Of String)() + Do While number > 0 + If items.Add(ToTitle(CreateWord())) Then + number -= 1 + End If + Loop + Return items.ToList() + End Function + Public Shared Function ToTitle(ByVal s As String) As String + If String.IsNullOrEmpty(s) Then + Return s + End If + Return String.Concat(s.Substring(0, 1).ToUpper(), s.Substring(1)) + End Function + + Private rnd As Random + Public Sub New() + rnd = New Random() + End Sub + Public Sub New(ByVal seed As Integer) + rnd = New Random(seed) + End Sub + Public Function [Next](ByVal max As Integer) As Integer + Return rnd.Next(max) + End Function + Public Function MakeTosh(ByVal length As Integer) As String + Return MakeTosh(rnd, length) + End Function + Public Function MakeBlah(ByVal length As Integer) As String + Dim sb = New StringBuilder() + For i = 0 To length + If sb.Length > 0 Then + sb.Append(" ") + End If + sb.Append(GetWord()) + Next i + Return sb.ToString() + End Function + Public Function MakeBlahBlahBlah(ByVal length As Integer, ByVal plength As Integer) As String + Dim sb = New StringBuilder() + For i = 0 To length + If sb.Length > 0 Then + sb.Append(" ") + End If + Dim w = ToTitle(MakeBlah(3 + rnd.Next(plength))) & "." + sb.Append(w) + Next i + Return sb.ToString() + End Function + Public Function GetFullName() As String + Return String.Concat(GetFName(), " ", GetLName()) + End Function + Private Function GetFName() As String + Return fnames(rnd.Next(fnames.Count)) + End Function + Private Function GetLName() As String + Return lnames(rnd.Next(lnames.Count)) + End Function + Private Function GetWord() As String + Return words(rnd.Next(words.Count)) + End Function + End Class +End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module/Welcome.html b/VB/NonPersistentObjectsDemo.Module/Welcome.html new file mode 100644 index 0000000..d27bb12 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/Welcome.html @@ -0,0 +1,185 @@ + + + + + Your XAF application + + + + + + +
+ + + + + +
+
+

The XAF Solution Wizard has successfully generated the solution according to your settings.

+
    +
  • The NonPersistentObjectsDemo.Module project keeps your platform-agnostic code. + Add persistent objects code to the Business Objects folder of this project and XAF will automatically create a UI to create, read, update and delete these persistent objects.
  • +
  • The NonPersistentObjectsDemo.Win project is a startup project for the desktop application.
  • +
  • The NonPersistentObjectsDemo.Web project is a startup project for the web application.
  • +
  • To specify the database used by your application, modify the ConnectionString attribute in the configuration file located in the startup project.
  • +
  • To login, enter the "Admin" user name with empty password.
  • +
+
+
+ + + + + +
+
+ + + \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Web/Default.aspx b/VB/NonPersistentObjectsDemo.Web/Default.aspx new file mode 100644 index 0000000..918be8f --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/Default.aspx @@ -0,0 +1,19 @@ +<%@ Page Language="C#" AutoEventWireup="true" Inherits="Default" EnableViewState="false" + ValidateRequest="false" CodeBehind="Default.aspx.cs" %> +<%@ Register Assembly="DevExpress.ExpressApp.Web.v20.1" + Namespace="DevExpress.ExpressApp.Web.Templates" TagPrefix="cc3" %> +<%@ Register Assembly="DevExpress.ExpressApp.Web.v20.1" + Namespace="DevExpress.ExpressApp.Web.Controls" TagPrefix="cc4" %> + + + + Main Page + + + +
+ +
+ + + \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Web/Default.aspx.designer.vb b/VB/NonPersistentObjectsDemo.Web/Default.aspx.designer.vb new file mode 100644 index 0000000..c8e5ce6 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/Default.aspx.designer.vb @@ -0,0 +1,40 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + + +Partial Public Class [Default] + + ''' + ''' form2 control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected form2 As Global.System.Web.UI.HtmlControls.HtmlForm + + ''' + ''' ProgressControl control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected ProgressControl As Global.DevExpress.ExpressApp.Web.Controls.ASPxProgressControl + + ''' + ''' Content control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected Content As Global.System.Web.UI.HtmlControls.HtmlGenericControl +End Class diff --git a/VB/NonPersistentObjectsDemo.Web/Default.aspx.vb b/VB/NonPersistentObjectsDemo.Web/Default.aspx.vb new file mode 100644 index 0000000..90b1180 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/Default.aspx.vb @@ -0,0 +1,20 @@ +Imports System +Imports System.Collections.Generic +Imports System.Web.UI +Imports DevExpress.ExpressApp.Templates +Imports DevExpress.ExpressApp.Web +Imports DevExpress.ExpressApp.Web.Templates +Imports DevExpress.ExpressApp.Web.Templates.ActionContainers + +Partial Public Class [Default] + Inherits BaseXafPage + + Protected Overrides Function CreateContextActionsMenu() As ContextActionsMenu + Return New ContextActionsMenu(Me, "Edit", "RecordEdit", "ObjectsCreation", "ListView", "Reports") + End Function + Public Overrides ReadOnly Property InnerContentPlaceHolder() As Control + Get + Return Content + End Get + End Property +End Class \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Web/Error.aspx b/VB/NonPersistentObjectsDemo.Web/Error.aspx new file mode 100644 index 0000000..5cd4348 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/Error.aspx @@ -0,0 +1,147 @@ +<%@ Page Language="c#" AutoEventWireup="false" Inherits="ErrorPage" EnableViewState="false" + ValidateRequest="false" CodeBehind="Error.aspx.cs" %> + + + + Error + + + + +
+ + + + +
+
+
+ + + + + +
+

+ +

+
+ +
+ +
+ + + + +
+ + + +

+

+ +

+ + We are currently unable to serve your request.
+ You could go back and + try again or + restart the application. +
+

+ + + + Show Error details + + + + Report error
+
+

+ This error has been logged. If you have additional information that you believe + may have caused this error please report the problem.

+ + + + + + + +
+ +
+ +
+
+
+
+
+
+
+
+
+
+
+ +
+ + diff --git a/VB/NonPersistentObjectsDemo.Web/Error.aspx.designer.vb b/VB/NonPersistentObjectsDemo.Web/Error.aspx.designer.vb new file mode 100644 index 0000000..050a7f5 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/Error.aspx.designer.vb @@ -0,0 +1,166 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + + +Partial Public Class ErrorPage + + ''' + ''' Head1 control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected Head1 As Global.System.Web.UI.HtmlControls.HtmlHead + + ''' + ''' form1 control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected form1 As Global.System.Web.UI.HtmlControls.HtmlForm + + ''' + ''' ApplicationTitle control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected ApplicationTitle As Global.System.Web.UI.WebControls.Literal + + ''' + ''' InfoMessagesPanel control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected InfoMessagesPanel As Global.System.Web.UI.WebControls.Literal + + ''' + ''' Table1 control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected Table1 As Global.System.Web.UI.WebControls.Table + + ''' + ''' TableRow2 control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected TableRow2 As Global.System.Web.UI.WebControls.TableRow + + ''' + ''' ViewSite control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected ViewSite As Global.System.Web.UI.WebControls.TableCell + + ''' + ''' ErrorTitleLiteral control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected ErrorTitleLiteral As Global.System.Web.UI.WebControls.Literal + + ''' + ''' ErrorPanel control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected ErrorPanel As Global.System.Web.UI.WebControls.Panel + + ''' + ''' ApologizeMessage control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected ApologizeMessage As Global.System.Web.UI.WebControls.PlaceHolder + + ''' + ''' HyperLink1 control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected HyperLink1 As Global.System.Web.UI.WebControls.HyperLink + + ''' + ''' NavigateToStart control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected NavigateToStart As Global.System.Web.UI.WebControls.LinkButton + + ''' + ''' Details control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected Details As Global.System.Web.UI.WebControls.Panel + + ''' + ''' DetailsText control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected DetailsText As Global.System.Web.UI.WebControls.Literal + + ''' + ''' ReportForm control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected ReportForm As Global.System.Web.UI.WebControls.Panel + + ''' + ''' DescriptionTextBox control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected DescriptionTextBox As Global.System.Web.UI.WebControls.TextBox + + ''' + ''' ReportButton control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected ReportButton As Global.System.Web.UI.WebControls.Button +End Class diff --git a/VB/NonPersistentObjectsDemo.Web/Error.aspx.vb b/VB/NonPersistentObjectsDemo.Web/Error.aspx.vb new file mode 100644 index 0000000..053a4bf --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/Error.aspx.vb @@ -0,0 +1,77 @@ +Imports System +Imports System.Web.UI +Imports DevExpress.ExpressApp.Web +Imports DevExpress.ExpressApp.Web.SystemModule +Imports DevExpress.ExpressApp.Web.Templates +Imports DevExpress.ExpressApp.Web.TestScripts + +Partial Public Class ErrorPage + Inherits System.Web.UI.Page + + Protected Overrides Sub InitializeCulture() + If WebApplication.Instance IsNot Nothing Then + WebApplication.Instance.InitializeCulture() + End If + End Sub + Protected Overrides Sub OnPreInit(ByVal e As EventArgs) + MyBase.OnPreInit(e) + BaseXafPage.SetupCurrentTheme() + End Sub + Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + If TestScriptsManager.EasyTestEnabled Then + Dim testScriptsManager As New TestScriptsManager(Page) + testScriptsManager.RegisterControl(JSLabelTestControl.ClassName, "FormCaption", TestControlType.Field, "FormCaption") + testScriptsManager.RegisterControl(JSLabelTestControl.ClassName, "DescriptionTextBox", TestControlType.Field, "Description") + testScriptsManager.RegisterControl(JSDefaultTestControl.ClassName, "ReportButton", TestControlType.Action, "Report") + testScriptsManager.AllControlRegistered() + ClientScript.RegisterStartupScript(Me.GetType(), "EasyTest", testScriptsManager.GetScript(), True) + End If + If WebApplication.Instance IsNot Nothing Then + ApplicationTitle.Text = WebApplication.Instance.Title + Else + ApplicationTitle.Text = "No application" + End If + Header.Title = "Application Error - " & ApplicationTitle.Text + + Dim errorInfo As ErrorInfo = ErrorHandling.GetApplicationError() + If errorInfo IsNot Nothing Then + If ErrorHandling.CanShowDetailedInformation Then + DetailsText.Text = errorInfo.GetTextualPresentation(True) + Else + Details.Visible = False + End If + ReportForm.Visible = ErrorHandling.CanSendAlertToAdmin + Else + ErrorPanel.Visible = False + End If + End Sub + #Region "Web Form Designer generated code" + Protected Overrides Sub OnInit(ByVal e As EventArgs) + InitializeComponent() + MyBase.OnInit(e) + End Sub + + Private Sub InitializeComponent() +'INSTANT VB NOTE: The following InitializeComponent event wireup was converted to a 'Handles' clause: +'ORIGINAL LINE: this.Load += new System.EventHandler(this.Page_Load); +'INSTANT VB NOTE: The following InitializeComponent event wireup was converted to a 'Handles' clause: +'ORIGINAL LINE: this.PreRender += new EventHandler(ErrorPage_PreRender); + End Sub + + Private Sub ErrorPage_PreRender(ByVal sender As Object, ByVal e As EventArgs) Handles Me.PreRender + RegisterThemeAssemblyController.RegisterThemeResources(DirectCast(sender, Page)) + End Sub + + + #End Region + Protected Sub ReportButton_Click(ByVal sender As Object, ByVal e As EventArgs) + Dim errorInfo As ErrorInfo = ErrorHandling.GetApplicationError() + If errorInfo IsNot Nothing Then + ErrorHandling.SendAlertToAdmin(errorInfo.Id, DescriptionTextBox.Text, errorInfo.Exception.Message) + ClientScript.RegisterStartupScript(Me.GetType(), "alert", "alert('Your report has been sent. Thank you.');", True) + End If + End Sub + Protected Sub NavigateToStart_Click(ByVal sender As Object, ByVal e As EventArgs) + WebApplication.Instance.LogOff() + End Sub +End Class diff --git a/VB/NonPersistentObjectsDemo.Web/Global.asax b/VB/NonPersistentObjectsDemo.Web/Global.asax new file mode 100644 index 0000000..129093f --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/Global.asax @@ -0,0 +1 @@ +<%@ Application Language="C#" CodeBehind="Global.asax.cs" Inherits="NonPersistentObjectsDemo.Web.Global"%> diff --git a/VB/NonPersistentObjectsDemo.Web/Global.asax.vb b/VB/NonPersistentObjectsDemo.Web/Global.asax.vb new file mode 100644 index 0000000..68b4fae --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/Global.asax.vb @@ -0,0 +1,77 @@ +Imports System +Imports System.Configuration +Imports System.Web.Configuration +Imports System.Web +Imports System.Web.Routing + +Imports DevExpress.ExpressApp +Imports DevExpress.Persistent.Base +Imports DevExpress.Persistent.BaseImpl +Imports DevExpress.ExpressApp.Security +Imports DevExpress.ExpressApp.Web +Imports DevExpress.Web + +Namespace NonPersistentObjectsDemo.Web + Public Class [Global] + Inherits System.Web.HttpApplication + + Public Sub New() + InitializeComponent() + End Sub + Protected Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) + RouteTable.Routes.RegisterXafRoutes() + DevExpress.ExpressApp.BaseObjectSpace.ThrowExceptionForNotRegisteredEntityType = True + AddHandler ASPxWebControl.CallbackError, AddressOf Application_Error +#If EASYTEST Then + DevExpress.ExpressApp.Web.TestScripts.TestScriptsManager.EasyTestEnabled = True +#End If + End Sub + Protected Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs) + Tracing.Initialize() + WebApplication.SetInstance(Session, New NonPersistentObjectsDemoAspNetApplication()) + 'SecurityStrategy security = (SecurityStrategy)WebApplication.Instance.Security; + 'security.RegisterXPOAdapterProviders(); + DevExpress.ExpressApp.Web.Templates.DefaultVerticalTemplateContentNew.ClearSizeLimit() + WebApplication.Instance.SwitchToNewStyle() + If ConfigurationManager.ConnectionStrings("ConnectionString") IsNot Nothing Then + WebApplication.Instance.ConnectionString = ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString + End If +#If EASYTEST Then + If ConfigurationManager.ConnectionStrings("EasyTestConnectionString") IsNot Nothing Then + WebApplication.Instance.ConnectionString = ConfigurationManager.ConnectionStrings("EasyTestConnectionString").ConnectionString + End If +#End If + WebApplication.Instance.ConnectionString = DevExpress.ExpressApp.Xpo.InMemoryDataStoreProvider.ConnectionString +#If DEBUG Then + If System.Diagnostics.Debugger.IsAttached AndAlso WebApplication.Instance.CheckCompatibilityType = CheckCompatibilityType.DatabaseSchema Then + WebApplication.Instance.DatabaseUpdateMode = DatabaseUpdateMode.UpdateDatabaseAlways + End If +#End If + WebApplication.Instance.Setup() + WebApplication.Instance.Start() + End Sub + Protected Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs) + End Sub + Protected Sub Application_EndRequest(ByVal sender As Object, ByVal e As EventArgs) + End Sub + Protected Sub Application_AuthenticateRequest(ByVal sender As Object, ByVal e As EventArgs) + End Sub + Protected Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs) + ErrorHandling.Instance.ProcessApplicationError() + End Sub + Protected Sub Session_End(ByVal sender As Object, ByVal e As EventArgs) + WebApplication.LogOff(Session) + WebApplication.DisposeInstance(Session) + End Sub + Protected Sub Application_End(ByVal sender As Object, ByVal e As EventArgs) + End Sub + #Region "Web Form Designer generated code" + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + End Sub + #End Region + End Class +End Namespace diff --git a/VB/NonPersistentObjectsDemo.Web/Images/Logo.svg b/VB/NonPersistentObjectsDemo.Web/Images/Logo.svg new file mode 100644 index 0000000..d0aa175 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/Images/Logo.svg @@ -0,0 +1,43 @@ + + + + + + diff --git a/VB/NonPersistentObjectsDemo.Web/Images/ReadMe.txt b/VB/NonPersistentObjectsDemo.Web/Images/ReadMe.txt new file mode 100644 index 0000000..230befc --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/Images/ReadMe.txt @@ -0,0 +1,12 @@ +Folder Description + +The "Images" project folder is intended for storing custom image files. + + +Relevant Documentation + +Add and Override Images +https://docs.devexpress.com/eXpressAppFramework/112792 + +Assign a Custom Image +https://docs.devexpress.com/eXpressAppFramework/112744 diff --git a/VB/NonPersistentObjectsDemo.Web/Login.aspx b/VB/NonPersistentObjectsDemo.Web/Login.aspx new file mode 100644 index 0000000..b610ff1 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/Login.aspx @@ -0,0 +1,24 @@ +<%@ Page Language="C#" AutoEventWireup="true" Inherits="LoginPage" EnableViewState="false" + ValidateRequest="false" CodeBehind="Login.aspx.cs" %> +<%@ Register Assembly="DevExpress.ExpressApp.Web.v20.1" + Namespace="DevExpress.ExpressApp.Web.Templates.ActionContainers" TagPrefix="cc2" %> +<%@ Register Assembly="DevExpress.ExpressApp.Web.v20.1" + Namespace="DevExpress.ExpressApp.Web.Templates.Controls" TagPrefix="tc" %> +<%@ Register Assembly="DevExpress.ExpressApp.Web.v20.1" + Namespace="DevExpress.ExpressApp.Web.Controls" TagPrefix="cc4" %> +<%@ Register Assembly="DevExpress.ExpressApp.Web.v20.1" + Namespace="DevExpress.ExpressApp.Web.Templates" TagPrefix="cc3" %> + + + + Logon + + +
+
+ +
+ +
+ + diff --git a/VB/NonPersistentObjectsDemo.Web/Login.aspx.designer.vb b/VB/NonPersistentObjectsDemo.Web/Login.aspx.designer.vb new file mode 100644 index 0000000..b663b4f --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/Login.aspx.designer.vb @@ -0,0 +1,49 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + + +Partial Public Class LoginPage + + ''' + ''' Head1 control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected Head1 As Global.System.Web.UI.HtmlControls.HtmlHead + + ''' + ''' form1 control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected form1 As Global.System.Web.UI.HtmlControls.HtmlForm + + ''' + ''' ProgressControl control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected ProgressControl As Global.DevExpress.ExpressApp.Web.Controls.ASPxProgressControl + + ''' + ''' Content control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected Content As Global.System.Web.UI.HtmlControls.HtmlGenericControl +End Class diff --git a/VB/NonPersistentObjectsDemo.Web/Login.aspx.vb b/VB/NonPersistentObjectsDemo.Web/Login.aspx.vb new file mode 100644 index 0000000..8edd0a0 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/Login.aspx.vb @@ -0,0 +1,14 @@ +Imports System + +Imports DevExpress.ExpressApp.Web +Imports DevExpress.ExpressApp.Web.Templates + +Partial Public Class LoginPage + Inherits BaseXafPage + + Public Overrides ReadOnly Property InnerContentPlaceHolder() As System.Web.UI.Control + Get + Return Content + End Get + End Property +End Class diff --git a/VB/NonPersistentObjectsDemo.Web/Model.Desktop.xafml b/VB/NonPersistentObjectsDemo.Web/Model.Desktop.xafml new file mode 100644 index 0000000..ab80ccd --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/Model.Desktop.xafml @@ -0,0 +1,3 @@ + + + diff --git a/VB/NonPersistentObjectsDemo.Web/Model.Tablet.xafml b/VB/NonPersistentObjectsDemo.Web/Model.Tablet.xafml new file mode 100644 index 0000000..ab80ccd --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/Model.Tablet.xafml @@ -0,0 +1,3 @@ + + + diff --git a/VB/NonPersistentObjectsDemo.Web/Model.xafml b/VB/NonPersistentObjectsDemo.Web/Model.xafml new file mode 100644 index 0000000..ab80ccd --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/Model.xafml @@ -0,0 +1,3 @@ + + + diff --git a/VB/NonPersistentObjectsDemo.Web/My Project/AssemblyInfo.vb b/VB/NonPersistentObjectsDemo.Web/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..13e64bb --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/My Project/AssemblyInfo.vb @@ -0,0 +1,33 @@ +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' + + diff --git a/VB/NonPersistentObjectsDemo.Web/NonPersistentObjectsDemo.Web.vbproj b/VB/NonPersistentObjectsDemo.Web/NonPersistentObjectsDemo.Web.vbproj new file mode 100644 index 0000000..23f8676 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/NonPersistentObjectsDemo.Web.vbproj @@ -0,0 +1,396 @@ + + + + + Debug + AnyCPU + {8C3026D1-113C-4B88-9F91-236753790C60} + {349c5851-65df-11da-9384-00065b846f21};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + Library + + NonPersistentObjectsDemo.Web + v4.5.2 + 512 + false + 44300 + enabled + disabled + false + + + On + Binary + Off + On + + + true + full + false + bin\ + true + true + prompt + true + + + pdbonly + true + bin\ + false + true + prompt + true + + + true + bin\ + true + true + EASYTEST=True + full + AnyCPU + prompt + true + + + + + + + + + + + + + + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + False + + + False + False + + + False + False + + + False + False + + + False + False + + + False + False + + + False + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + + + + + + + + + + Default.aspx + + + Error.aspx + + + Global.asax + + + Login.aspx + + + Component + + + Default.aspx + ASPXCodeBehind + + + Error.aspx + ASPXCodeBehind + + + Login.aspx + ASPXCodeBehind + + + + + + Designer + + + + + + + + + + + {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B} + NonPersistentObjectsDemo.Module.Web + True + + + {57ACDBDB-006E-43D3-9308-97857F2FF75D} + NonPersistentObjectsDemo.Module + True + + + + 10.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + + + + + + + False + True + 2064 + / + + + False + False + + + False + + + + + diff --git a/VB/NonPersistentObjectsDemo.Web/ReadMe.txt b/VB/NonPersistentObjectsDemo.Web/ReadMe.txt new file mode 100644 index 0000000..db74671 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/ReadMe.txt @@ -0,0 +1,31 @@ +Project Description + +This project implements an ASP.NET application. The ApplicationCode project +folder contains the WebApplication.cs(vb) file with the class that inherits +WebApplication. This class can be designed with the Application Designer that +allows you to view and customize application components: referenced modules, +security settings, data connection. Additionally, the root folder contains +Application Model difference files (XAFML files) that keep application settings +specific for the current application. Differences files can be designed with +the Model Editor. + + +Relevant Documentation + +Application Solution Components +https://docs.devexpress.com/eXpressAppFramework/112569 + +WebApplication Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Web.WebApplication + +XafApplication Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.XafApplication + +Application Designer +https://docs.devexpress.com/eXpressAppFramework/112827 + +Application Model +https://docs.devexpress.com/eXpressAppFramework/112579 + +Model Editor +https://docs.devexpress.com/eXpressAppFramework/112582 diff --git a/VB/NonPersistentObjectsDemo.Web/Web.config b/VB/NonPersistentObjectsDemo.Web/Web.config new file mode 100644 index 0000000..f2b083e --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/Web.config @@ -0,0 +1,185 @@ + + + + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Web/WebApplication.vb b/VB/NonPersistentObjectsDemo.Web/WebApplication.vb new file mode 100644 index 0000000..0271483 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/WebApplication.vb @@ -0,0 +1,172 @@ +Imports System +Imports DevExpress.ExpressApp +Imports System.ComponentModel +Imports DevExpress.ExpressApp.Web +Imports System.Collections.Generic +Imports DevExpress.ExpressApp.Xpo +Imports DevExpress.ExpressApp.Security +Imports DevExpress.ExpressApp.Security.ClientServer + +Namespace NonPersistentObjectsDemo.Web + ' For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Web.WebApplication + Partial Public Class NonPersistentObjectsDemoAspNetApplication + Inherits WebApplication + + Private module1 As DevExpress.ExpressApp.SystemModule.SystemModule + Private module2 As DevExpress.ExpressApp.Web.SystemModule.SystemAspNetModule + Private module3 As NonPersistentObjectsDemo.Module.NonPersistentObjectsDemoModule + Private module4 As NonPersistentObjectsDemo.Module.Web.NonPersistentObjectsDemoAspNetModule + Private securityModule1 As DevExpress.ExpressApp.Security.SecurityModule + Private securityStrategyComplex1 As DevExpress.ExpressApp.Security.SecurityStrategyComplex + Private authenticationStandard1 As DevExpress.ExpressApp.Security.AuthenticationStandard + Private objectsModule As DevExpress.ExpressApp.Objects.BusinessClassLibraryCustomizationModule + Private cloneObjectModule As DevExpress.ExpressApp.CloneObject.CloneObjectModule + Private conditionalAppearanceModule As DevExpress.ExpressApp.ConditionalAppearance.ConditionalAppearanceModule + Private fileAttachmentsAspNetModule As DevExpress.ExpressApp.FileAttachments.Web.FileAttachmentsAspNetModule + Private reportsModuleV2 As DevExpress.ExpressApp.ReportsV2.ReportsModuleV2 + Private reportsAspNetModuleV2 As DevExpress.ExpressApp.ReportsV2.Web.ReportsAspNetModuleV2 + Private schedulerModuleBase As DevExpress.ExpressApp.Scheduler.SchedulerModuleBase + Private schedulerAspNetModule As DevExpress.ExpressApp.Scheduler.Web.SchedulerAspNetModule + Private scriptRecorderModuleBase As DevExpress.ExpressApp.ScriptRecorder.ScriptRecorderModuleBase + Private scriptRecorderAspNetModule As DevExpress.ExpressApp.ScriptRecorder.Web.ScriptRecorderAspNetModule + Private treeListEditorsModuleBase As DevExpress.ExpressApp.TreeListEditors.TreeListEditorsModuleBase + Private treeListEditorsAspNetModule As DevExpress.ExpressApp.TreeListEditors.Web.TreeListEditorsAspNetModule + Private validationModule As DevExpress.ExpressApp.Validation.ValidationModule + Private validationAspNetModule As DevExpress.ExpressApp.Validation.Web.ValidationAspNetModule + + #Region "Default XAF configuration options (https:" 'www.devexpress.com/kb=T501418) + Shared Sub New() + EnableMultipleBrowserTabsSupport = True + DevExpress.ExpressApp.Web.Editors.ASPx.ASPxGridListEditor.AllowFilterControlHierarchy = True + DevExpress.ExpressApp.Web.Editors.ASPx.ASPxGridListEditor.MaxFilterControlHierarchyDepth = 3 + DevExpress.ExpressApp.Web.Editors.ASPx.ASPxCriteriaPropertyEditor.AllowFilterControlHierarchyDefault = True + DevExpress.ExpressApp.Web.Editors.ASPx.ASPxCriteriaPropertyEditor.MaxHierarchyDepthDefault = 3 + DevExpress.Persistent.Base.PasswordCryptographer.EnableRfc2898 = True + DevExpress.Persistent.Base.PasswordCryptographer.SupportLegacySha512 = False + End Sub + Private Sub InitializeDefaults() + LinkNewObjectToParentImmediately = False + OptimizedControllersCreation = True + End Sub + #End Region + Public Sub New() + InitializeComponent() + InitializeDefaults() + End Sub + Protected Overrides Function CreateViewUrlManager() As IViewUrlManager + Return New ViewUrlManager() + End Function + Protected Overrides Sub CreateDefaultObjectSpaceProvider(ByVal args As CreateCustomObjectSpaceProviderEventArgs) + 'args.ObjectSpaceProvider = new SecuredObjectSpaceProvider((SecurityStrategyComplex)Security, GetDataStoreProvider(args.ConnectionString, args.Connection), true); + args.ObjectSpaceProvider = New XPObjectSpaceProvider(GetDataStoreProvider(args.ConnectionString, args.Connection), True) + args.ObjectSpaceProviders.Add(New NonPersistentObjectSpaceProvider(TypesInfo, Nothing)) + End Sub + Private Function GetDataStoreProvider(ByVal connectionString As String, ByVal connection As System.Data.IDbConnection) As IXpoDataStoreProvider + Dim application As System.Web.HttpApplicationState = If(System.Web.HttpContext.Current IsNot Nothing, System.Web.HttpContext.Current.Application, Nothing) + Dim dataStoreProvider As IXpoDataStoreProvider = Nothing + If application IsNot Nothing AndAlso application("DataStoreProvider") IsNot Nothing Then + dataStoreProvider = TryCast(application("DataStoreProvider"), IXpoDataStoreProvider) + Else + dataStoreProvider = XPObjectSpaceProvider.GetDataStoreProvider(connectionString, connection, True) + If application IsNot Nothing Then + application("DataStoreProvider") = dataStoreProvider + End If + End If + Return dataStoreProvider + End Function + Private Sub NonPersistentObjectsDemoAspNetApplication_DatabaseVersionMismatch(ByVal sender As Object, ByVal e As DevExpress.ExpressApp.DatabaseVersionMismatchEventArgs) Handles Me.DatabaseVersionMismatch +#If EASYTEST Then + e.Updater.Update() + e.Handled = True +#Else + If System.Diagnostics.Debugger.IsAttached Then + e.Updater.Update() + e.Handled = True + Else + Dim message As String = "The application cannot connect to the specified database, " & "because the database doesn't exist, its version is older " & "than that of the application or its schema does not match " & "the ORM data model structure. To avoid this error, use one " & "of the solutions from the https://www.devexpress.com/kb=T367835 KB Article." + + If e.CompatibilityError IsNot Nothing AndAlso e.CompatibilityError.Exception IsNot Nothing Then + message &= vbCrLf & vbCrLf & "Inner exception: " & e.CompatibilityError.Exception.Message + End If + Throw New InvalidOperationException(message) + End If +#End If + End Sub + Private Sub InitializeComponent() + Me.module1 = New DevExpress.ExpressApp.SystemModule.SystemModule() + Me.module2 = New DevExpress.ExpressApp.Web.SystemModule.SystemAspNetModule() + Me.module3 = New NonPersistentObjectsDemo.Module.NonPersistentObjectsDemoModule() + Me.module4 = New NonPersistentObjectsDemo.Module.Web.NonPersistentObjectsDemoAspNetModule() + Me.securityModule1 = New DevExpress.ExpressApp.Security.SecurityModule() + Me.securityStrategyComplex1 = New DevExpress.ExpressApp.Security.SecurityStrategyComplex() + Me.securityStrategyComplex1.SupportNavigationPermissionsForTypes = False + Me.authenticationStandard1 = New DevExpress.ExpressApp.Security.AuthenticationStandard() + Me.objectsModule = New DevExpress.ExpressApp.Objects.BusinessClassLibraryCustomizationModule() + Me.cloneObjectModule = New DevExpress.ExpressApp.CloneObject.CloneObjectModule() + Me.conditionalAppearanceModule = New DevExpress.ExpressApp.ConditionalAppearance.ConditionalAppearanceModule() + Me.fileAttachmentsAspNetModule = New DevExpress.ExpressApp.FileAttachments.Web.FileAttachmentsAspNetModule() + Me.reportsModuleV2 = New DevExpress.ExpressApp.ReportsV2.ReportsModuleV2() + Me.reportsAspNetModuleV2 = New DevExpress.ExpressApp.ReportsV2.Web.ReportsAspNetModuleV2() + Me.schedulerModuleBase = New DevExpress.ExpressApp.Scheduler.SchedulerModuleBase() + Me.schedulerAspNetModule = New DevExpress.ExpressApp.Scheduler.Web.SchedulerAspNetModule() + Me.scriptRecorderModuleBase = New DevExpress.ExpressApp.ScriptRecorder.ScriptRecorderModuleBase() + Me.scriptRecorderAspNetModule = New DevExpress.ExpressApp.ScriptRecorder.Web.ScriptRecorderAspNetModule() + Me.treeListEditorsModuleBase = New DevExpress.ExpressApp.TreeListEditors.TreeListEditorsModuleBase() + Me.treeListEditorsAspNetModule = New DevExpress.ExpressApp.TreeListEditors.Web.TreeListEditorsAspNetModule() + Me.validationModule = New DevExpress.ExpressApp.Validation.ValidationModule() + Me.validationAspNetModule = New DevExpress.ExpressApp.Validation.Web.ValidationAspNetModule() + DirectCast(Me, System.ComponentModel.ISupportInitialize).BeginInit() + ' + ' securityStrategyComplex1 + ' + Me.securityStrategyComplex1.Authentication = Me.authenticationStandard1 + Me.securityStrategyComplex1.RoleType = GetType(DevExpress.Persistent.BaseImpl.PermissionPolicy.PermissionPolicyRole) + Me.securityStrategyComplex1.UserType = GetType(DevExpress.Persistent.BaseImpl.PermissionPolicy.PermissionPolicyUser) + ' + ' securityModule1 + ' + Me.securityModule1.UserType = GetType(DevExpress.Persistent.BaseImpl.PermissionPolicy.PermissionPolicyUser) + ' + ' authenticationStandard1 + ' + Me.authenticationStandard1.LogonParametersType = GetType(DevExpress.ExpressApp.Security.AuthenticationStandardLogonParameters) + ' + ' reportsModuleV2 + ' + Me.reportsModuleV2.EnableInplaceReports = True + Me.reportsModuleV2.ReportDataType = GetType(DevExpress.Persistent.BaseImpl.ReportDataV2) + Me.reportsModuleV2.ShowAdditionalNavigation = False + Me.reportsAspNetModuleV2.ReportViewerType = DevExpress.ExpressApp.ReportsV2.Web.ReportViewerTypes.HTML5 + Me.reportsModuleV2.ReportStoreMode = DevExpress.ExpressApp.ReportsV2.ReportStoreModes.XML + ' + ' NonPersistentObjectsDemoAspNetApplication + ' + Me.ApplicationName = "NonPersistentObjectsDemo" + Me.CheckCompatibilityType = DevExpress.ExpressApp.CheckCompatibilityType.DatabaseSchema + Me.Modules.Add(Me.module1) + Me.Modules.Add(Me.module2) + Me.Modules.Add(Me.module3) + Me.Modules.Add(Me.module4) + Me.Modules.Add(Me.securityModule1) + 'this.Security = this.securityStrategyComplex1; + Me.Modules.Add(Me.objectsModule) + Me.Modules.Add(Me.cloneObjectModule) + Me.Modules.Add(Me.conditionalAppearanceModule) + Me.Modules.Add(Me.fileAttachmentsAspNetModule) + Me.Modules.Add(Me.reportsModuleV2) + Me.Modules.Add(Me.reportsAspNetModuleV2) + Me.Modules.Add(Me.schedulerModuleBase) + Me.Modules.Add(Me.schedulerAspNetModule) + Me.Modules.Add(Me.scriptRecorderModuleBase) + Me.Modules.Add(Me.scriptRecorderAspNetModule) + Me.Modules.Add(Me.treeListEditorsModuleBase) + Me.Modules.Add(Me.treeListEditorsAspNetModule) + Me.Modules.Add(Me.validationModule) + Me.Modules.Add(Me.validationAspNetModule) +'INSTANT VB NOTE: The following InitializeComponent event wireup was converted to a 'Handles' clause: +'ORIGINAL LINE: this.DatabaseVersionMismatch += new System.EventHandler(this.NonPersistentObjectsDemoAspNetApplication_DatabaseVersionMismatch); + DirectCast(Me, System.ComponentModel.ISupportInitialize).EndInit() + + End Sub + End Class +End Namespace diff --git a/VB/NonPersistentObjectsDemo.Win/App.config b/VB/NonPersistentObjectsDemo.Win/App.config new file mode 100644 index 0000000..7c38ed8 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Win/App.config @@ -0,0 +1,46 @@ + + + + +
+ + + + + + System + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/VB/NonPersistentObjectsDemo.Win/ExpressApp.ico b/VB/NonPersistentObjectsDemo.Win/ExpressApp.ico new file mode 100644 index 0000000000000000000000000000000000000000..e6810fc4f94dccd83ec54db6e9ef51a4950f6638 GIT binary patch literal 113407 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 literal 0 HcmV?d00001 diff --git a/VB/NonPersistentObjectsDemo.Win/Images/Logo.svg b/VB/NonPersistentObjectsDemo.Win/Images/Logo.svg new file mode 100644 index 0000000..68d56ca --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Win/Images/Logo.svg @@ -0,0 +1,18 @@ + + + + + + diff --git a/VB/NonPersistentObjectsDemo.Win/Images/ReadMe.txt b/VB/NonPersistentObjectsDemo.Win/Images/ReadMe.txt new file mode 100644 index 0000000..230befc --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Win/Images/ReadMe.txt @@ -0,0 +1,12 @@ +Folder Description + +The "Images" project folder is intended for storing custom image files. + + +Relevant Documentation + +Add and Override Images +https://docs.devexpress.com/eXpressAppFramework/112792 + +Assign a Custom Image +https://docs.devexpress.com/eXpressAppFramework/112744 diff --git a/VB/NonPersistentObjectsDemo.Win/Model.xafml b/VB/NonPersistentObjectsDemo.Win/Model.xafml new file mode 100644 index 0000000..d745362 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Win/Model.xafml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Win/My Project/AssemblyInfo.vb b/VB/NonPersistentObjectsDemo.Win/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..a936e9a --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Win/My Project/AssemblyInfo.vb @@ -0,0 +1,33 @@ +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' + + diff --git a/VB/NonPersistentObjectsDemo.Win/NonPersistentObjectsDemo.Win.vbproj b/VB/NonPersistentObjectsDemo.Win/NonPersistentObjectsDemo.Win.vbproj new file mode 100644 index 0000000..7aa1ad7 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Win/NonPersistentObjectsDemo.Win.vbproj @@ -0,0 +1,370 @@ + + + + + Debug + AnyCPU + {13E1ACF3-669C-4405-8260-E70BE603E197} + WinExe + + NonPersistentObjectsDemo.Win + v4.5.2 + ExpressApp.ico + 512 + On + Binary + Off + On + + + true + full + false + bin\Debug\ + true + true + prompt + true + + + pdbonly + true + bin\Release\ + false + true + prompt + true + + + true + bin\EasyTest\ + true + true + EASYTEST=True + full + AnyCPU + prompt + true + + + + + + + + + + + + + + + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + False + + + False + False + + + False + False + + + False + False + + + False + False + + + False + False + + + False + False + + + False + False + + + System + False + + + False + + + System.Data + False + + + System.Drawing + False + + + System.Windows.Forms + False + + + System.XML + False + + + + + + + + + + + + Always + + + + + + + Component + + + WinApplication.vb + + + Form + + + XafSplashScreen.vb + + + XafSplashScreen.vb + + + + + {72D644CD-C193-4572-B2E3-CA82819A1627} + NonPersistentObjectsDemo.Module.Win + True + + + {57ACDBDB-006E-43D3-9308-97857F2FF75D} + NonPersistentObjectsDemo.Module + True + + + + + diff --git a/VB/NonPersistentObjectsDemo.Win/Program.vb b/VB/NonPersistentObjectsDemo.Win/Program.vb new file mode 100644 index 0000000..220c1e2 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Win/Program.vb @@ -0,0 +1,58 @@ +Imports System +Imports System.Configuration +Imports System.Windows.Forms + +Imports DevExpress.ExpressApp +Imports DevExpress.ExpressApp.Security +Imports DevExpress.ExpressApp.Win +Imports DevExpress.Persistent.Base +Imports DevExpress.Persistent.BaseImpl +Imports DevExpress.XtraEditors + +Namespace NonPersistentObjectsDemo.Win + Friend Module Program + ''' + ''' The main entry point for the application. + ''' + + Sub Main() +#If EASYTEST Then + DevExpress.ExpressApp.Win.EasyTest.EasyTestRemotingRegistration.Register() +#End If + WindowsFormsSettings.LoadApplicationSettings() + Application.EnableVisualStyles() + Application.SetCompatibleTextRenderingDefault(False) + DevExpress.Utils.ToolTipController.DefaultController.ToolTipType = DevExpress.Utils.ToolTipType.SuperTip + DevExpress.ExpressApp.BaseObjectSpace.ThrowExceptionForNotRegisteredEntityType = True + EditModelPermission.AlwaysGranted = System.Diagnostics.Debugger.IsAttached + If Tracing.GetFileLocationFromSettings() = DevExpress.Persistent.Base.FileLocation.CurrentUserApplicationDataFolder Then + Tracing.LocalUserAppDataPath = Application.LocalUserAppDataPath + End If + Tracing.Initialize() + Dim winApplication As New NonPersistentObjectsDemoWindowsFormsApplication() + 'SecurityStrategy security = (SecurityStrategy)winApplication.Security; + 'security.RegisterXPOAdapterProviders(); + If ConfigurationManager.ConnectionStrings("ConnectionString") IsNot Nothing Then + winApplication.ConnectionString = ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString + End If +#If EASYTEST Then + If ConfigurationManager.ConnectionStrings("EasyTestConnectionString") IsNot Nothing Then + winApplication.ConnectionString = ConfigurationManager.ConnectionStrings("EasyTestConnectionString").ConnectionString + End If +#End If + winApplication.ConnectionString = DevExpress.ExpressApp.Xpo.InMemoryDataStoreProvider.ConnectionString +#If DEBUG Then + If System.Diagnostics.Debugger.IsAttached AndAlso winApplication.CheckCompatibilityType = CheckCompatibilityType.DatabaseSchema Then + winApplication.DatabaseUpdateMode = DatabaseUpdateMode.UpdateDatabaseAlways + End If +#End If + Try + winApplication.Setup() + winApplication.Start() + Catch e As Exception + winApplication.StopSplash() + winApplication.HandleException(e) + End Try + End Sub + End Module +End Namespace diff --git a/VB/NonPersistentObjectsDemo.Win/ReadMe.txt b/VB/NonPersistentObjectsDemo.Win/ReadMe.txt new file mode 100644 index 0000000..fd287a6 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Win/ReadMe.txt @@ -0,0 +1,31 @@ +Project Description + +This project implements a WinForms application. The root project folder +contains the WinApplication.cs(vb) file with the class that inherits +WinApplication. This class can be designed with the Application Designer that +allows you to view and customize application components: referenced modules, +security settings, data connection. Additionally, the root folder contains +Application Model difference files (XAFML files) that keep application settings +specific for the current application. Differences files can be designed with +the Model Editor. + + +Relevant Documentation + +Application Solution Components +https://docs.devexpress.com/eXpressAppFramework/112569 + +WinApplication Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Win.WinApplication + +XafApplication Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.XafApplication + +Application Designer +https://docs.devexpress.com/eXpressAppFramework/112827 + +Application Model +https://docs.devexpress.com/eXpressAppFramework/112579 + +Model Editor +https://docs.devexpress.com/eXpressAppFramework/112582 \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Win/WinApplication.Designer.vb b/VB/NonPersistentObjectsDemo.Win/WinApplication.Designer.vb new file mode 100644 index 0000000..1c81c20 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Win/WinApplication.Designer.vb @@ -0,0 +1,129 @@ +Namespace NonPersistentObjectsDemo.Win + Partial Public Class NonPersistentObjectsDemoWindowsFormsApplication + ''' + ''' Required designer variable. + ''' + Private components As System.ComponentModel.IContainer = Nothing + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + #Region "Component Designer generated code" + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + Me.module1 = New DevExpress.ExpressApp.SystemModule.SystemModule() + Me.module2 = New DevExpress.ExpressApp.Win.SystemModule.SystemWindowsFormsModule() + Me.module3 = New NonPersistentObjectsDemo.Module.NonPersistentObjectsDemoModule() + Me.module4 = New NonPersistentObjectsDemo.Module.Win.NonPersistentObjectsDemoWindowsFormsModule() + Me.securityModule1 = New DevExpress.ExpressApp.Security.SecurityModule() + Me.securityStrategyComplex1 = New DevExpress.ExpressApp.Security.SecurityStrategyComplex() + Me.securityStrategyComplex1.SupportNavigationPermissionsForTypes = False + Me.objectsModule = New DevExpress.ExpressApp.Objects.BusinessClassLibraryCustomizationModule() + Me.cloneObjectModule = New DevExpress.ExpressApp.CloneObject.CloneObjectModule() + Me.conditionalAppearanceModule = New DevExpress.ExpressApp.ConditionalAppearance.ConditionalAppearanceModule() + Me.fileAttachmentsWindowsFormsModule = New DevExpress.ExpressApp.FileAttachments.Win.FileAttachmentsWindowsFormsModule() + Me.reportsModuleV2 = New DevExpress.ExpressApp.ReportsV2.ReportsModuleV2() + Me.reportsWindowsFormsModuleV2 = New DevExpress.ExpressApp.ReportsV2.Win.ReportsWindowsFormsModuleV2() + Me.schedulerModuleBase = New DevExpress.ExpressApp.Scheduler.SchedulerModuleBase() + Me.schedulerWindowsFormsModule = New DevExpress.ExpressApp.Scheduler.Win.SchedulerWindowsFormsModule() + Me.scriptRecorderModuleBase = New DevExpress.ExpressApp.ScriptRecorder.ScriptRecorderModuleBase() + Me.scriptRecorderWindowsFormsModule = New DevExpress.ExpressApp.ScriptRecorder.Win.ScriptRecorderWindowsFormsModule() + Me.treeListEditorsModuleBase = New DevExpress.ExpressApp.TreeListEditors.TreeListEditorsModuleBase() + Me.treeListEditorsWindowsFormsModule = New DevExpress.ExpressApp.TreeListEditors.Win.TreeListEditorsWindowsFormsModule() + Me.validationModule = New DevExpress.ExpressApp.Validation.ValidationModule() + Me.validationWindowsFormsModule = New DevExpress.ExpressApp.Validation.Win.ValidationWindowsFormsModule() + Me.authenticationStandard1 = New DevExpress.ExpressApp.Security.AuthenticationStandard() + DirectCast(Me, System.ComponentModel.ISupportInitialize).BeginInit() + ' + ' securityStrategyComplex1 + ' + Me.securityStrategyComplex1.Authentication = Me.authenticationStandard1 + Me.securityStrategyComplex1.RoleType = GetType(DevExpress.Persistent.BaseImpl.PermissionPolicy.PermissionPolicyRole) + Me.securityStrategyComplex1.UserType = GetType(DevExpress.Persistent.BaseImpl.PermissionPolicy.PermissionPolicyUser) + ' + ' securityModule1 + ' + Me.securityModule1.UserType = GetType(DevExpress.Persistent.BaseImpl.PermissionPolicy.PermissionPolicyUser) + ' + ' authenticationStandard1 + ' + Me.authenticationStandard1.LogonParametersType = GetType(DevExpress.ExpressApp.Security.AuthenticationStandardLogonParameters) + ' + ' reportsModuleV2 + ' + Me.reportsModuleV2.EnableInplaceReports = True + Me.reportsModuleV2.ReportDataType = GetType(DevExpress.Persistent.BaseImpl.ReportDataV2) + Me.reportsModuleV2.ShowAdditionalNavigation = False + Me.reportsModuleV2.ReportStoreMode = DevExpress.ExpressApp.ReportsV2.ReportStoreModes.XML + ' + ' NonPersistentObjectsDemoWindowsFormsApplication + ' + Me.ApplicationName = "NonPersistentObjectsDemo" + Me.CheckCompatibilityType = DevExpress.ExpressApp.CheckCompatibilityType.DatabaseSchema + Me.Modules.Add(Me.module1) + Me.Modules.Add(Me.module2) + Me.Modules.Add(Me.module3) + Me.Modules.Add(Me.module4) + Me.Modules.Add(Me.securityModule1) + 'this.Security = this.securityStrategyComplex1; + Me.Modules.Add(Me.objectsModule) + Me.Modules.Add(Me.cloneObjectModule) + Me.Modules.Add(Me.conditionalAppearanceModule) + Me.Modules.Add(Me.fileAttachmentsWindowsFormsModule) + Me.Modules.Add(Me.reportsModuleV2) + Me.Modules.Add(Me.reportsWindowsFormsModuleV2) + Me.Modules.Add(Me.schedulerModuleBase) + Me.Modules.Add(Me.schedulerWindowsFormsModule) + Me.Modules.Add(Me.scriptRecorderModuleBase) + Me.Modules.Add(Me.scriptRecorderWindowsFormsModule) + Me.Modules.Add(Me.treeListEditorsModuleBase) + Me.Modules.Add(Me.treeListEditorsWindowsFormsModule) + Me.Modules.Add(Me.validationModule) + Me.Modules.Add(Me.validationWindowsFormsModule) + Me.UseOldTemplates = False +'INSTANT VB NOTE: The following InitializeComponent event wireup was converted to a 'Handles' clause: +'ORIGINAL LINE: this.DatabaseVersionMismatch += new System.EventHandler(this.NonPersistentObjectsDemoWindowsFormsApplication_DatabaseVersionMismatch); +'INSTANT VB NOTE: The following InitializeComponent event wireup was converted to a 'Handles' clause: +'ORIGINAL LINE: this.CustomizeLanguagesList += new System.EventHandler(this.NonPersistentObjectsDemoWindowsFormsApplication_CustomizeLanguagesList); + + DirectCast(Me, System.ComponentModel.ISupportInitialize).EndInit() + + End Sub + + #End Region + + Private module1 As DevExpress.ExpressApp.SystemModule.SystemModule + Private module2 As DevExpress.ExpressApp.Win.SystemModule.SystemWindowsFormsModule + Private module3 As NonPersistentObjectsDemo.Module.NonPersistentObjectsDemoModule + Private module4 As NonPersistentObjectsDemo.Module.Win.NonPersistentObjectsDemoWindowsFormsModule + Private securityModule1 As DevExpress.ExpressApp.Security.SecurityModule + Private securityStrategyComplex1 As DevExpress.ExpressApp.Security.SecurityStrategyComplex + Private authenticationStandard1 As DevExpress.ExpressApp.Security.AuthenticationStandard + Private objectsModule As DevExpress.ExpressApp.Objects.BusinessClassLibraryCustomizationModule + Private cloneObjectModule As DevExpress.ExpressApp.CloneObject.CloneObjectModule + Private conditionalAppearanceModule As DevExpress.ExpressApp.ConditionalAppearance.ConditionalAppearanceModule + Private fileAttachmentsWindowsFormsModule As DevExpress.ExpressApp.FileAttachments.Win.FileAttachmentsWindowsFormsModule + Private reportsModuleV2 As DevExpress.ExpressApp.ReportsV2.ReportsModuleV2 + Private reportsWindowsFormsModuleV2 As DevExpress.ExpressApp.ReportsV2.Win.ReportsWindowsFormsModuleV2 + Private schedulerModuleBase As DevExpress.ExpressApp.Scheduler.SchedulerModuleBase + Private schedulerWindowsFormsModule As DevExpress.ExpressApp.Scheduler.Win.SchedulerWindowsFormsModule + Private scriptRecorderModuleBase As DevExpress.ExpressApp.ScriptRecorder.ScriptRecorderModuleBase + Private scriptRecorderWindowsFormsModule As DevExpress.ExpressApp.ScriptRecorder.Win.ScriptRecorderWindowsFormsModule + Private treeListEditorsModuleBase As DevExpress.ExpressApp.TreeListEditors.TreeListEditorsModuleBase + Private treeListEditorsWindowsFormsModule As DevExpress.ExpressApp.TreeListEditors.Win.TreeListEditorsWindowsFormsModule + Private validationModule As DevExpress.ExpressApp.Validation.ValidationModule + Private validationWindowsFormsModule As DevExpress.ExpressApp.Validation.Win.ValidationWindowsFormsModule + End Class +End Namespace diff --git a/VB/NonPersistentObjectsDemo.Win/WinApplication.vb b/VB/NonPersistentObjectsDemo.Win/WinApplication.vb new file mode 100644 index 0000000..5e54d22 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Win/WinApplication.vb @@ -0,0 +1,65 @@ +Imports System +Imports System.ComponentModel +Imports DevExpress.ExpressApp +Imports DevExpress.ExpressApp.Win +Imports System.Collections.Generic +Imports DevExpress.ExpressApp.Updating +Imports DevExpress.ExpressApp.Win.Utils +Imports DevExpress.ExpressApp.Xpo +Imports DevExpress.ExpressApp.Security +Imports DevExpress.ExpressApp.Security.ClientServer + +Namespace NonPersistentObjectsDemo.Win + ' For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Win.WinApplication._members + Partial Public Class NonPersistentObjectsDemoWindowsFormsApplication + Inherits WinApplication + + #Region "Default XAF configuration options (https:" 'www.devexpress.com/kb=T501418) + Shared Sub New() + DevExpress.Persistent.Base.PasswordCryptographer.EnableRfc2898 = True + DevExpress.Persistent.Base.PasswordCryptographer.SupportLegacySha512 = False + DevExpress.ExpressApp.Utils.ImageLoader.Instance.UseSvgImages = True + End Sub + Private Sub InitializeDefaults() + LinkNewObjectToParentImmediately = False + OptimizedControllersCreation = True + UseLightStyle = True + SplashScreen = New DXSplashScreen(GetType(XafSplashScreen), New DefaultOverlayFormOptions()) + ExecuteStartupLogicBeforeClosingLogonWindow = True + End Sub + #End Region + Public Sub New() + InitializeComponent() + InitializeDefaults() + End Sub + Protected Overrides Sub CreateDefaultObjectSpaceProvider(ByVal args As CreateCustomObjectSpaceProviderEventArgs) + 'args.ObjectSpaceProviders.Add(new SecuredObjectSpaceProvider((SecurityStrategyComplex)Security, XPObjectSpaceProvider.GetDataStoreProvider(args.ConnectionString, args.Connection, true), false)); + args.ObjectSpaceProviders.Add(New XPObjectSpaceProvider(XPObjectSpaceProvider.GetDataStoreProvider(args.ConnectionString, args.Connection, True), False)) + args.ObjectSpaceProviders.Add(New NonPersistentObjectSpaceProvider(TypesInfo, Nothing)) + End Sub + Private Sub NonPersistentObjectsDemoWindowsFormsApplication_CustomizeLanguagesList(ByVal sender As Object, ByVal e As CustomizeLanguagesListEventArgs) Handles Me.CustomizeLanguagesList + Dim userLanguageName As String = System.Threading.Thread.CurrentThread.CurrentUICulture.Name + If userLanguageName <> "en-US" AndAlso e.Languages.IndexOf(userLanguageName) = -1 Then + e.Languages.Add(userLanguageName) + End If + End Sub + Private Sub NonPersistentObjectsDemoWindowsFormsApplication_DatabaseVersionMismatch(ByVal sender As Object, ByVal e As DevExpress.ExpressApp.DatabaseVersionMismatchEventArgs) Handles Me.DatabaseVersionMismatch +#If EASYTEST Then + e.Updater.Update() + e.Handled = True +#Else + If System.Diagnostics.Debugger.IsAttached Then + e.Updater.Update() + e.Handled = True + Else + Dim message As String = "The application cannot connect to the specified database, " & "because the database doesn't exist, its version is older " & "than that of the application or its schema does not match " & "the ORM data model structure. To avoid this error, use one " & "of the solutions from the https://www.devexpress.com/kb=T367835 KB Article." + + If e.CompatibilityError IsNot Nothing AndAlso e.CompatibilityError.Exception IsNot Nothing Then + message &= vbCrLf & vbCrLf & "Inner exception: " & e.CompatibilityError.Exception.Message + End If + Throw New InvalidOperationException(message) + End If +#End If + End Sub + End Class +End Namespace diff --git a/VB/NonPersistentObjectsDemo.Win/XafSplashScreen.Designer.vb b/VB/NonPersistentObjectsDemo.Win/XafSplashScreen.Designer.vb new file mode 100644 index 0000000..a1ded36 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Win/XafSplashScreen.Designer.vb @@ -0,0 +1,177 @@ +Namespace NonPersistentObjectsDemo.Win + Partial Public Class XafSplashScreen + ''' + ''' Required designer variable. + ''' + Private components As System.ComponentModel.IContainer = Nothing + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + #Region "Windows Form Designer generated code" + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + Dim resources As New System.ComponentModel.ComponentResourceManager(GetType(XafSplashScreen)) + Me.progressBarControl = New DevExpress.XtraEditors.MarqueeProgressBarControl() + Me.labelCopyright = New DevExpress.XtraEditors.LabelControl() + Me.labelStatus = New DevExpress.XtraEditors.LabelControl() + Me.peImage = New DevExpress.XtraEditors.PictureEdit() + Me.peLogo = New DevExpress.XtraEditors.PictureEdit() + Me.pcApplicationName = New DevExpress.XtraEditors.PanelControl() + Me.labelSubtitle = New DevExpress.XtraEditors.LabelControl() + Me.labelApplicationName = New DevExpress.XtraEditors.LabelControl() + CType(Me.progressBarControl.Properties, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.peImage.Properties, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.peLogo.Properties, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pcApplicationName, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pcApplicationName.SuspendLayout() + Me.SuspendLayout() + ' + ' progressBarControl + ' + Me.progressBarControl.EditValue = 0 + Me.progressBarControl.Location = New System.Drawing.Point(74, 271) + Me.progressBarControl.Name = "progressBarControl" + Me.progressBarControl.Properties.Appearance.BorderColor = System.Drawing.Color.FromArgb((CInt((CByte(195)))), (CInt((CByte(194)))), (CInt((CByte(194))))) + Me.progressBarControl.Properties.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.Simple + Me.progressBarControl.Properties.EndColor = System.Drawing.Color.FromArgb((CInt((CByte(255)))), (CInt((CByte(114)))), (CInt((CByte(0))))) + Me.progressBarControl.Properties.LookAndFeel.SkinName = "Visual Studio 2013 Blue" + Me.progressBarControl.Properties.LookAndFeel.Style = DevExpress.LookAndFeel.LookAndFeelStyle.UltraFlat + Me.progressBarControl.Properties.LookAndFeel.UseDefaultLookAndFeel = False + Me.progressBarControl.Properties.ProgressViewStyle = DevExpress.XtraEditors.Controls.ProgressViewStyle.Solid + Me.progressBarControl.Properties.StartColor = System.Drawing.Color.FromArgb((CInt((CByte(255)))), (CInt((CByte(144)))), (CInt((CByte(0))))) + Me.progressBarControl.Size = New System.Drawing.Size(350, 16) + Me.progressBarControl.TabIndex = 5 + ' + ' labelCopyright + ' + Me.labelCopyright.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder + Me.labelCopyright.Location = New System.Drawing.Point(24, 324) + Me.labelCopyright.Name = "labelCopyright" + Me.labelCopyright.Size = New System.Drawing.Size(47, 13) + Me.labelCopyright.TabIndex = 6 + Me.labelCopyright.Text = "Copyright" + ' + ' labelStatus + ' + Me.labelStatus.Location = New System.Drawing.Point(75, 253) + Me.labelStatus.Name = "labelStatus" + Me.labelStatus.Size = New System.Drawing.Size(50, 13) + Me.labelStatus.TabIndex = 7 + Me.labelStatus.Text = "Starting..." + ' + ' peImage + ' + Me.peImage.EditValue = (CObj(resources.GetObject("peImage.EditValue"))) + Me.peImage.Location = New System.Drawing.Point(12, 12) + Me.peImage.Name = "peImage" + Me.peImage.Properties.AllowFocused = False + Me.peImage.Properties.Appearance.BackColor = System.Drawing.Color.Transparent + Me.peImage.Properties.Appearance.Options.UseBackColor = True + Me.peImage.Properties.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder + Me.peImage.Properties.ShowMenu = False + Me.peImage.Size = New System.Drawing.Size(426, 180) + Me.peImage.TabIndex = 9 + Me.peImage.Visible = False + ' + ' peLogo + ' + Me.peLogo.EditValue = (CObj(resources.GetObject("peLogo.EditValue"))) + Me.peLogo.Location = New System.Drawing.Point(400, 328) + Me.peLogo.Name = "peLogo" + Me.peLogo.Properties.AllowFocused = False + Me.peLogo.Properties.Appearance.BackColor = System.Drawing.Color.Transparent + Me.peLogo.Properties.Appearance.Options.UseBackColor = True + Me.peLogo.Properties.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder + Me.peLogo.Properties.ShowMenu = False + Me.peLogo.Size = New System.Drawing.Size(70, 20) + Me.peLogo.TabIndex = 8 + ' + ' pcApplicationName + ' + Me.pcApplicationName.Appearance.BackColor = System.Drawing.Color.FromArgb((CInt((CByte(255)))), (CInt((CByte(114)))), (CInt((CByte(0))))) + Me.pcApplicationName.Appearance.Options.UseBackColor = True + Me.pcApplicationName.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder + Me.pcApplicationName.Controls.Add(Me.labelSubtitle) + Me.pcApplicationName.Controls.Add(Me.labelApplicationName) + Me.pcApplicationName.Dock = System.Windows.Forms.DockStyle.Top + Me.pcApplicationName.Location = New System.Drawing.Point(1, 1) + Me.pcApplicationName.LookAndFeel.UseDefaultLookAndFeel = False + Me.pcApplicationName.Name = "pcApplicationName" + Me.pcApplicationName.Size = New System.Drawing.Size(494, 220) + Me.pcApplicationName.TabIndex = 10 + ' + ' labelSubtitle + ' + Me.labelSubtitle.Appearance.Font = New System.Drawing.Font("Segoe UI", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (CByte(0))) + Me.labelSubtitle.Appearance.ForeColor = System.Drawing.Color.FromArgb((CInt((CByte(255)))), (CInt((CByte(216)))), (CInt((CByte(188))))) + Me.labelSubtitle.Appearance.Options.UseFont = True + Me.labelSubtitle.Appearance.Options.UseForeColor = True + Me.labelSubtitle.Location = New System.Drawing.Point(222, 131) + Me.labelSubtitle.Name = "labelSubtitle" + Me.labelSubtitle.Size = New System.Drawing.Size(64, 25) + Me.labelSubtitle.TabIndex = 1 + Me.labelSubtitle.Text = "Subtitle" + ' + ' labelApplicationName + ' + Me.labelApplicationName.Appearance.Font = New System.Drawing.Font("Segoe UI", 26.25F) + Me.labelApplicationName.Appearance.ForeColor = System.Drawing.SystemColors.Window + Me.labelApplicationName.Appearance.Options.UseFont = True + Me.labelApplicationName.Appearance.Options.UseForeColor = True + Me.labelApplicationName.Location = New System.Drawing.Point(123, 84) + Me.labelApplicationName.Name = "labelApplicationName" + Me.labelApplicationName.Size = New System.Drawing.Size(278, 47) + Me.labelApplicationName.TabIndex = 0 + Me.labelApplicationName.Text = "Application Name" + ' + ' XafSplashScreen + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6F, 13F) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(496, 370) + Me.Controls.Add(Me.pcApplicationName) + Me.Controls.Add(Me.peImage) + Me.Controls.Add(Me.peLogo) + Me.Controls.Add(Me.labelStatus) + Me.Controls.Add(Me.labelCopyright) + Me.Controls.Add(Me.progressBarControl) + Me.Name = "XafSplashScreen" + Me.Padding = New System.Windows.Forms.Padding(1) + Me.Text = "Form1" + CType(Me.progressBarControl.Properties, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.peImage.Properties, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.peLogo.Properties, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pcApplicationName, System.ComponentModel.ISupportInitialize).EndInit() + Me.pcApplicationName.ResumeLayout(False) + Me.pcApplicationName.PerformLayout() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + + #End Region + + Private progressBarControl As DevExpress.XtraEditors.MarqueeProgressBarControl + Private labelCopyright As DevExpress.XtraEditors.LabelControl + Private labelStatus As DevExpress.XtraEditors.LabelControl + Private peLogo As DevExpress.XtraEditors.PictureEdit + Private peImage As DevExpress.XtraEditors.PictureEdit + Private pcApplicationName As DevExpress.XtraEditors.PanelControl + Private labelSubtitle As DevExpress.XtraEditors.LabelControl + Private labelApplicationName As DevExpress.XtraEditors.LabelControl + End Class +End Namespace diff --git a/VB/NonPersistentObjectsDemo.Win/XafSplashScreen.resx b/VB/NonPersistentObjectsDemo.Win/XafSplashScreen.resx new file mode 100644 index 0000000..18fc5b4 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Win/XafSplashScreen.resx @@ -0,0 +1,638 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + YII= + + + \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Win/XafSplashScreen.vb b/VB/NonPersistentObjectsDemo.Win/XafSplashScreen.vb new file mode 100644 index 0000000..9938ca4 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Win/XafSplashScreen.vb @@ -0,0 +1,56 @@ +Imports System +Imports System.Drawing +Imports System.IO +Imports System.Reflection +Imports DevExpress.ExpressApp.Win.Utils +Imports DevExpress.Skins +Imports DevExpress.Utils.Drawing +Imports DevExpress.Utils.Svg +Imports DevExpress.XtraSplashScreen + +Namespace NonPersistentObjectsDemo.Win + Partial Public Class XafSplashScreen + Inherits SplashScreen + + Private Sub LoadBlankLogo() + Dim assembly As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly() + Dim blankLogoResourceName As String = assembly.GetName().Name & ".Images.Logo.svg" + Dim svgStream As Stream = assembly.GetManifestResourceStream(blankLogoResourceName) + If svgStream IsNot Nothing Then + svgStream.Position = 0 + peLogo.SvgImage = SvgImage.FromStream(svgStream) + End If + End Sub + Protected Overrides Sub DrawContent(ByVal graphicsCache As GraphicsCache, ByVal skin As Skin) + Dim bounds As Rectangle = ClientRectangle + bounds.Width -= 1 + bounds.Height -= 1 + graphicsCache.Graphics.DrawRectangle(graphicsCache.GetPen(Color.FromArgb(255, 87, 87, 87), 1), bounds) + End Sub + Protected Sub UpdateLabelsPosition() + labelApplicationName.CalcBestSize() + Dim newLeft As Integer = (Width - labelApplicationName.Width) \ 2 + labelApplicationName.Location = New Point(newLeft, labelApplicationName.Top) + labelSubtitle.CalcBestSize() + newLeft = (Width - labelSubtitle.Width) \ 2 + labelSubtitle.Location = New Point(newLeft, labelSubtitle.Top) + End Sub + Public Sub New() + InitializeComponent() + LoadBlankLogo() + Me.labelCopyright.Text = "Copyright © " & DateTime.Now.Year.ToString() & " Company Name" & Environment.NewLine & "All rights reserved." + UpdateLabelsPosition() + End Sub + + #Region "Overrides" + + Public Overrides Sub ProcessCommand(ByVal cmd As System.Enum, ByVal arg As Object) + MyBase.ProcessCommand(cmd, arg) + If CType(cmd, UpdateSplashCommand) = UpdateSplashCommand.Description Then + labelStatus.Text = DirectCast(arg, String) + End If + End Sub + + #End Region + End Class +End Namespace diff --git a/VB/NonPersistentObjectsFilteringDemo.sln b/VB/NonPersistentObjectsFilteringDemo.sln new file mode 100644 index 0000000..6dac80e --- /dev/null +++ b/VB/NonPersistentObjectsFilteringDemo.sln @@ -0,0 +1,59 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.28307.1000 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "NonPersistentObjectsDemo.Module", "NonPersistentObjectsDemo.Module\NonPersistentObjectsDemo.Module.vbproj", "{57ACDBDB-006E-43D3-9308-97857F2FF75D}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "NonPersistentObjectsDemo.Module.Web", "NonPersistentObjectsDemo.Module.Web\NonPersistentObjectsDemo.Module.Web.vbproj", "{EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "NonPersistentObjectsDemo.Web", "NonPersistentObjectsDemo.Web\NonPersistentObjectsDemo.Web.vbproj", "{8C3026D1-113C-4B88-9F91-236753790C60}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "NonPersistentObjectsDemo.Module.Win", "NonPersistentObjectsDemo.Module.Win\NonPersistentObjectsDemo.Module.Win.vbproj", "{72D644CD-C193-4572-B2E3-CA82819A1627}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "NonPersistentObjectsDemo.Win", "NonPersistentObjectsDemo.Win\NonPersistentObjectsDemo.Win.vbproj", "{13E1ACF3-669C-4405-8260-E70BE603E197}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + EasyTest|Any CPU = EasyTest|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {57ACDBDB-006E-43D3-9308-97857F2FF75D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {57ACDBDB-006E-43D3-9308-97857F2FF75D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {57ACDBDB-006E-43D3-9308-97857F2FF75D}.EasyTest|Any CPU.ActiveCfg = EasyTest|Any CPU + {57ACDBDB-006E-43D3-9308-97857F2FF75D}.EasyTest|Any CPU.Build.0 = EasyTest|Any CPU + {57ACDBDB-006E-43D3-9308-97857F2FF75D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {57ACDBDB-006E-43D3-9308-97857F2FF75D}.Release|Any CPU.Build.0 = Release|Any CPU + {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B}.EasyTest|Any CPU.ActiveCfg = EasyTest|Any CPU + {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B}.EasyTest|Any CPU.Build.0 = EasyTest|Any CPU + {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B}.Release|Any CPU.Build.0 = Release|Any CPU + {8C3026D1-113C-4B88-9F91-236753790C60}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8C3026D1-113C-4B88-9F91-236753790C60}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8C3026D1-113C-4B88-9F91-236753790C60}.EasyTest|Any CPU.ActiveCfg = EasyTest|Any CPU + {8C3026D1-113C-4B88-9F91-236753790C60}.EasyTest|Any CPU.Build.0 = EasyTest|Any CPU + {8C3026D1-113C-4B88-9F91-236753790C60}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8C3026D1-113C-4B88-9F91-236753790C60}.Release|Any CPU.Build.0 = Release|Any CPU + {72D644CD-C193-4572-B2E3-CA82819A1627}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {72D644CD-C193-4572-B2E3-CA82819A1627}.Debug|Any CPU.Build.0 = Debug|Any CPU + {72D644CD-C193-4572-B2E3-CA82819A1627}.EasyTest|Any CPU.ActiveCfg = EasyTest|Any CPU + {72D644CD-C193-4572-B2E3-CA82819A1627}.EasyTest|Any CPU.Build.0 = EasyTest|Any CPU + {72D644CD-C193-4572-B2E3-CA82819A1627}.Release|Any CPU.ActiveCfg = Release|Any CPU + {72D644CD-C193-4572-B2E3-CA82819A1627}.Release|Any CPU.Build.0 = Release|Any CPU + {13E1ACF3-669C-4405-8260-E70BE603E197}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {13E1ACF3-669C-4405-8260-E70BE603E197}.Debug|Any CPU.Build.0 = Debug|Any CPU + {13E1ACF3-669C-4405-8260-E70BE603E197}.EasyTest|Any CPU.ActiveCfg = EasyTest|Any CPU + {13E1ACF3-669C-4405-8260-E70BE603E197}.EasyTest|Any CPU.Build.0 = EasyTest|Any CPU + {13E1ACF3-669C-4405-8260-E70BE603E197}.Release|Any CPU.ActiveCfg = Release|Any CPU + {13E1ACF3-669C-4405-8260-E70BE603E197}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {BCF45AD8-3F2F-4887-832F-CBD5AE72BD68} + EndGlobalSection +EndGlobal From 39a516429a77e37867f4da4473aca591c04dbc6e Mon Sep 17 00:00:00 2001 From: KL <@> Date: Tue, 21 Apr 2020 18:15:37 +0300 Subject: [PATCH 06/40] Update --- .../BusinessObjects/Article.cs | 4 +- .../BusinessObjects/Contact.cs | 4 +- .../Controllers/ReadMe.txt | 19 - .../Editors/ReadMe.txt | 31 - .../Images/ReadMe.txt | 12 - .../Model.DesignedDiffs.xafml | 9 - .../My Project/AssemblyInfo.vb | 33 - ...NonPersistentObjectsDemo.Module.Web.vbproj | 243 ------- .../ReadMe.txt | 28 - .../WebModule.Designer.vb | 41 -- .../WebModule.vb | 44 -- .../Controllers/ReadMe.txt | 19 - .../Editors/ReadMe.txt | 33 - .../Images/ExpressAppLogo.png | Bin 7486 -> 0 bytes .../Images/ReadMe.txt | 12 - .../Model.DesignedDiffs.xafml | 2 - .../My Project/AssemblyInfo.vb | 33 - ...NonPersistentObjectsDemo.Module.Win.vbproj | 281 -------- .../ReadMe.txt | 29 - .../WinModule.Designer.vb | 41 -- .../WinModule.vb | 44 -- .../BusinessObjects/Article.vb | 108 --- .../BusinessObjects/Contact.vb | 146 ---- .../NonPersistentObjectBase.vb | 59 -- .../BusinessObjects/ReadMe.txt | 11 - .../Controllers/FindArticlesController.vb | 95 --- .../Controllers/ReadMe.txt | 19 - .../DatabaseUpdate/ReadMe.txt | 17 - .../DatabaseUpdate/Updater.vb | 83 --- .../FunctionalTests/ReadMe.txt | 10 - .../FunctionalTests/config.xml | 36 - .../FunctionalTests/sample.ets | 20 - .../Images/ReadMe.txt | 12 - .../Model.DesignedDiffs.xafml | 26 - .../Module.Designer.vb | 50 -- VB/NonPersistentObjectsDemo.Module/Module.vb | 54 -- .../My Project/AssemblyInfo.vb | 33 - .../NonPersistentObjectsDemo.Module.vbproj | 202 ------ VB/NonPersistentObjectsDemo.Module/ReadMe.txt | 28 - VB/NonPersistentObjectsDemo.Module/Util.vb | 102 --- .../Welcome.html | 185 ----- VB/NonPersistentObjectsDemo.Web/Default.aspx | 19 - .../Default.aspx.designer.vb | 40 -- .../Default.aspx.vb | 20 - VB/NonPersistentObjectsDemo.Web/Error.aspx | 147 ---- .../Error.aspx.designer.vb | 166 ----- VB/NonPersistentObjectsDemo.Web/Error.aspx.vb | 77 --- VB/NonPersistentObjectsDemo.Web/Global.asax | 1 - .../Global.asax.vb | 77 --- .../Images/Logo.svg | 43 -- .../Images/ReadMe.txt | 12 - VB/NonPersistentObjectsDemo.Web/Login.aspx | 24 - .../Login.aspx.designer.vb | 49 -- VB/NonPersistentObjectsDemo.Web/Login.aspx.vb | 14 - .../Model.Desktop.xafml | 3 - .../Model.Tablet.xafml | 3 - VB/NonPersistentObjectsDemo.Web/Model.xafml | 3 - .../My Project/AssemblyInfo.vb | 33 - .../NonPersistentObjectsDemo.Web.vbproj | 396 ----------- VB/NonPersistentObjectsDemo.Web/ReadMe.txt | 31 - VB/NonPersistentObjectsDemo.Web/Web.config | 185 ----- .../WebApplication.vb | 172 ----- VB/NonPersistentObjectsDemo.Win/App.config | 46 -- .../ExpressApp.ico | Bin 113407 -> 0 bytes .../Images/Logo.svg | 18 - .../Images/ReadMe.txt | 12 - VB/NonPersistentObjectsDemo.Win/Model.xafml | 7 - .../My Project/AssemblyInfo.vb | 33 - .../NonPersistentObjectsDemo.Win.vbproj | 370 ---------- VB/NonPersistentObjectsDemo.Win/Program.vb | 58 -- VB/NonPersistentObjectsDemo.Win/ReadMe.txt | 31 - .../WinApplication.Designer.vb | 129 ---- .../WinApplication.vb | 65 -- .../XafSplashScreen.Designer.vb | 177 ----- .../XafSplashScreen.resx | 638 ------------------ .../XafSplashScreen.vb | 56 -- VB/NonPersistentObjectsFilteringDemo.sln | 59 -- 77 files changed, 4 insertions(+), 5468 deletions(-) delete mode 100644 VB/NonPersistentObjectsDemo.Module.Web/Controllers/ReadMe.txt delete mode 100644 VB/NonPersistentObjectsDemo.Module.Web/Editors/ReadMe.txt delete mode 100644 VB/NonPersistentObjectsDemo.Module.Web/Images/ReadMe.txt delete mode 100644 VB/NonPersistentObjectsDemo.Module.Web/Model.DesignedDiffs.xafml delete mode 100644 VB/NonPersistentObjectsDemo.Module.Web/My Project/AssemblyInfo.vb delete mode 100644 VB/NonPersistentObjectsDemo.Module.Web/NonPersistentObjectsDemo.Module.Web.vbproj delete mode 100644 VB/NonPersistentObjectsDemo.Module.Web/ReadMe.txt delete mode 100644 VB/NonPersistentObjectsDemo.Module.Web/WebModule.Designer.vb delete mode 100644 VB/NonPersistentObjectsDemo.Module.Web/WebModule.vb delete mode 100644 VB/NonPersistentObjectsDemo.Module.Win/Controllers/ReadMe.txt delete mode 100644 VB/NonPersistentObjectsDemo.Module.Win/Editors/ReadMe.txt delete mode 100644 VB/NonPersistentObjectsDemo.Module.Win/Images/ExpressAppLogo.png delete mode 100644 VB/NonPersistentObjectsDemo.Module.Win/Images/ReadMe.txt delete mode 100644 VB/NonPersistentObjectsDemo.Module.Win/Model.DesignedDiffs.xafml delete mode 100644 VB/NonPersistentObjectsDemo.Module.Win/My Project/AssemblyInfo.vb delete mode 100644 VB/NonPersistentObjectsDemo.Module.Win/NonPersistentObjectsDemo.Module.Win.vbproj delete mode 100644 VB/NonPersistentObjectsDemo.Module.Win/ReadMe.txt delete mode 100644 VB/NonPersistentObjectsDemo.Module.Win/WinModule.Designer.vb delete mode 100644 VB/NonPersistentObjectsDemo.Module.Win/WinModule.vb delete mode 100644 VB/NonPersistentObjectsDemo.Module/BusinessObjects/Article.vb delete mode 100644 VB/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.vb delete mode 100644 VB/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.vb delete mode 100644 VB/NonPersistentObjectsDemo.Module/BusinessObjects/ReadMe.txt delete mode 100644 VB/NonPersistentObjectsDemo.Module/Controllers/FindArticlesController.vb delete mode 100644 VB/NonPersistentObjectsDemo.Module/Controllers/ReadMe.txt delete mode 100644 VB/NonPersistentObjectsDemo.Module/DatabaseUpdate/ReadMe.txt delete mode 100644 VB/NonPersistentObjectsDemo.Module/DatabaseUpdate/Updater.vb delete mode 100644 VB/NonPersistentObjectsDemo.Module/FunctionalTests/ReadMe.txt delete mode 100644 VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml delete mode 100644 VB/NonPersistentObjectsDemo.Module/FunctionalTests/sample.ets delete mode 100644 VB/NonPersistentObjectsDemo.Module/Images/ReadMe.txt delete mode 100644 VB/NonPersistentObjectsDemo.Module/Model.DesignedDiffs.xafml delete mode 100644 VB/NonPersistentObjectsDemo.Module/Module.Designer.vb delete mode 100644 VB/NonPersistentObjectsDemo.Module/Module.vb delete mode 100644 VB/NonPersistentObjectsDemo.Module/My Project/AssemblyInfo.vb delete mode 100644 VB/NonPersistentObjectsDemo.Module/NonPersistentObjectsDemo.Module.vbproj delete mode 100644 VB/NonPersistentObjectsDemo.Module/ReadMe.txt delete mode 100644 VB/NonPersistentObjectsDemo.Module/Util.vb delete mode 100644 VB/NonPersistentObjectsDemo.Module/Welcome.html delete mode 100644 VB/NonPersistentObjectsDemo.Web/Default.aspx delete mode 100644 VB/NonPersistentObjectsDemo.Web/Default.aspx.designer.vb delete mode 100644 VB/NonPersistentObjectsDemo.Web/Default.aspx.vb delete mode 100644 VB/NonPersistentObjectsDemo.Web/Error.aspx delete mode 100644 VB/NonPersistentObjectsDemo.Web/Error.aspx.designer.vb delete mode 100644 VB/NonPersistentObjectsDemo.Web/Error.aspx.vb delete mode 100644 VB/NonPersistentObjectsDemo.Web/Global.asax delete mode 100644 VB/NonPersistentObjectsDemo.Web/Global.asax.vb delete mode 100644 VB/NonPersistentObjectsDemo.Web/Images/Logo.svg delete mode 100644 VB/NonPersistentObjectsDemo.Web/Images/ReadMe.txt delete mode 100644 VB/NonPersistentObjectsDemo.Web/Login.aspx delete mode 100644 VB/NonPersistentObjectsDemo.Web/Login.aspx.designer.vb delete mode 100644 VB/NonPersistentObjectsDemo.Web/Login.aspx.vb delete mode 100644 VB/NonPersistentObjectsDemo.Web/Model.Desktop.xafml delete mode 100644 VB/NonPersistentObjectsDemo.Web/Model.Tablet.xafml delete mode 100644 VB/NonPersistentObjectsDemo.Web/Model.xafml delete mode 100644 VB/NonPersistentObjectsDemo.Web/My Project/AssemblyInfo.vb delete mode 100644 VB/NonPersistentObjectsDemo.Web/NonPersistentObjectsDemo.Web.vbproj delete mode 100644 VB/NonPersistentObjectsDemo.Web/ReadMe.txt delete mode 100644 VB/NonPersistentObjectsDemo.Web/Web.config delete mode 100644 VB/NonPersistentObjectsDemo.Web/WebApplication.vb delete mode 100644 VB/NonPersistentObjectsDemo.Win/App.config delete mode 100644 VB/NonPersistentObjectsDemo.Win/ExpressApp.ico delete mode 100644 VB/NonPersistentObjectsDemo.Win/Images/Logo.svg delete mode 100644 VB/NonPersistentObjectsDemo.Win/Images/ReadMe.txt delete mode 100644 VB/NonPersistentObjectsDemo.Win/Model.xafml delete mode 100644 VB/NonPersistentObjectsDemo.Win/My Project/AssemblyInfo.vb delete mode 100644 VB/NonPersistentObjectsDemo.Win/NonPersistentObjectsDemo.Win.vbproj delete mode 100644 VB/NonPersistentObjectsDemo.Win/Program.vb delete mode 100644 VB/NonPersistentObjectsDemo.Win/ReadMe.txt delete mode 100644 VB/NonPersistentObjectsDemo.Win/WinApplication.Designer.vb delete mode 100644 VB/NonPersistentObjectsDemo.Win/WinApplication.vb delete mode 100644 VB/NonPersistentObjectsDemo.Win/XafSplashScreen.Designer.vb delete mode 100644 VB/NonPersistentObjectsDemo.Win/XafSplashScreen.resx delete mode 100644 VB/NonPersistentObjectsDemo.Win/XafSplashScreen.vb delete mode 100644 VB/NonPersistentObjectsFilteringDemo.sln diff --git a/CS/NonPersistentObjectsDemo.Module/BusinessObjects/Article.cs b/CS/NonPersistentObjectsDemo.Module/BusinessObjects/Article.cs index c2d0ae1..4acb740 100644 --- a/CS/NonPersistentObjectsDemo.Module/BusinessObjects/Article.cs +++ b/CS/NonPersistentObjectsDemo.Module/BusinessObjects/Article.cs @@ -52,11 +52,11 @@ public ArticleAdapter(NonPersistentObjectSpace npos) { private void ObjectSpace_ObjectsGetting(object sender, ObjectsGettingEventArgs e) { if(e.ObjectType == typeof(Article)) { var collection = new DynamicCollection(objectSpace, e.ObjectType, e.Criteria, e.Sorting, e.InTransaction); - collection.ObjectsFetching += DynamicCollection_ObjectsFetching; + collection.FetchObjects += DynamicCollection_FetchObjects; e.Objects = collection; } } - private void DynamicCollection_ObjectsFetching(object sender, DynamicObjectsFetchingEventArgs e) { + private void DynamicCollection_FetchObjects(object sender, FetchObjectsEventArgs e) { if(e.ObjectType == typeof(Article)) { e.Objects = articles; e.ShapeData = true; diff --git a/CS/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.cs b/CS/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.cs index 4da2936..816d3b1 100644 --- a/CS/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.cs +++ b/CS/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.cs @@ -51,11 +51,11 @@ public ContactAdapter(NonPersistentObjectSpace npos) { private void ObjectSpace_ObjectsGetting(object sender, ObjectsGettingEventArgs e) { if(e.ObjectType == typeof(Contact)) { var collection = new DynamicCollection(objectSpace, e.ObjectType, e.Criteria, e.Sorting, e.InTransaction); - collection.ObjectsFetching += DynamicCollection_ObjectsFetching; + collection.FetchObjects += DynamicCollection_FetchObjects; e.Objects = collection; } } - private void DynamicCollection_ObjectsFetching(object sender, DynamicObjectsFetchingEventArgs e) { + private void DynamicCollection_FetchObjects(object sender, FetchObjectsEventArgs e) { if(e.ObjectType == typeof(Contact)) { var rows = contactsStorage.GetContactRows(e.Criteria, e.Sorting); e.Objects = rows.Select(row => GetContact(row)); diff --git a/VB/NonPersistentObjectsDemo.Module.Web/Controllers/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module.Web/Controllers/ReadMe.txt deleted file mode 100644 index 0ee4668..0000000 --- a/VB/NonPersistentObjectsDemo.Module.Web/Controllers/ReadMe.txt +++ /dev/null @@ -1,19 +0,0 @@ -Folder Description - -The "Controllers" project folder is intended for storing ASP.NET-specific Controller classes -that can change the default XAF application flow and add new features. - - -Relevant Documentation - -Controllers and Actions -https://docs.devexpress.com/eXpressAppFramework/112623 - -Controller Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Controller - -ViewController Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ViewController - -WindowController Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.WindowController diff --git a/VB/NonPersistentObjectsDemo.Module.Web/Editors/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module.Web/Editors/ReadMe.txt deleted file mode 100644 index 461813c..0000000 --- a/VB/NonPersistentObjectsDemo.Module.Web/Editors/ReadMe.txt +++ /dev/null @@ -1,31 +0,0 @@ -Folder Description - -This project folder is intended for storing custom ASP.NET List Editors, -Property Editors and View Items. - - -Relevant Documentation - -List Editors -https://docs.devexpress.com/eXpressAppFramework/113189 - -Implement Custom Property Editors -https://docs.devexpress.com/eXpressAppFramework/113097 - -View Items -https://docs.devexpress.com/eXpressAppFramework/112612 - -How to: Implement an ASP.NET Web List Editor Using a Custom Control -https://docs.devexpress.com/eXpressAppFramework/113126 - -How to: Implement a Property Editor (in ASP.NET Applications) -https://docs.devexpress.com/eXpressAppFramework/112678 - -How to: Implement a Property Editor for Specific Data Management (in ASP.NET Web Applications) -https://docs.devexpress.com/eXpressAppFramework/113116 - -How to: Customize a Built-in Web Property Editor -https://docs.devexpress.com/eXpressAppFramework/113114 - -How to: Implement a View Item -https://docs.devexpress.com/eXpressAppFramework/112641 \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Module.Web/Images/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module.Web/Images/ReadMe.txt deleted file mode 100644 index 230befc..0000000 --- a/VB/NonPersistentObjectsDemo.Module.Web/Images/ReadMe.txt +++ /dev/null @@ -1,12 +0,0 @@ -Folder Description - -The "Images" project folder is intended for storing custom image files. - - -Relevant Documentation - -Add and Override Images -https://docs.devexpress.com/eXpressAppFramework/112792 - -Assign a Custom Image -https://docs.devexpress.com/eXpressAppFramework/112744 diff --git a/VB/NonPersistentObjectsDemo.Module.Web/Model.DesignedDiffs.xafml b/VB/NonPersistentObjectsDemo.Module.Web/Model.DesignedDiffs.xafml deleted file mode 100644 index b3b40cf..0000000 --- a/VB/NonPersistentObjectsDemo.Module.Web/Model.DesignedDiffs.xafml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/VB/NonPersistentObjectsDemo.Module.Web/My Project/AssemblyInfo.vb b/VB/NonPersistentObjectsDemo.Module.Web/My Project/AssemblyInfo.vb deleted file mode 100644 index cceadc5..0000000 --- a/VB/NonPersistentObjectsDemo.Module.Web/My Project/AssemblyInfo.vb +++ /dev/null @@ -1,33 +0,0 @@ -Imports System.Reflection -Imports System.Runtime.CompilerServices -Imports System.Runtime.InteropServices - -' General Information about an assembly is controlled through the following -' set of attributes. Change these attribute values to modify the information -' associated with an assembly. - - - - - - - - - -' Setting ComVisible to false makes the types in this assembly not visible -' to COM components. If you need to access a type in this assembly from -' COM, set the ComVisible attribute to true on that type. - - -' The following GUID is for the ID of the typelib if this project is exposed to COM - - -' Version information for an assembly consists of the following four values: -' -' Major Version -' Minor Version -' Build Number -' Revision -' - - diff --git a/VB/NonPersistentObjectsDemo.Module.Web/NonPersistentObjectsDemo.Module.Web.vbproj b/VB/NonPersistentObjectsDemo.Module.Web/NonPersistentObjectsDemo.Module.Web.vbproj deleted file mode 100644 index ae3b5d5..0000000 --- a/VB/NonPersistentObjectsDemo.Module.Web/NonPersistentObjectsDemo.Module.Web.vbproj +++ /dev/null @@ -1,243 +0,0 @@ - - - - - Debug - AnyCPU - {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B} - Library - - NonPersistentObjectsDemo.Module.Web - v4.5.2 - 512 - On - Binary - Off - On - - - true - full - false - bin\Debug\ - true - true - prompt - true - - - pdbonly - true - bin\Release\ - false - true - prompt - true - - - true - bin\EasyTest\ - true - true - EASYTEST=True - full - AnyCPU - prompt - true - - - - - - - - - - - - - - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - - - Component - - - - WebModule.vb - - - - - - - - - - - - - - - - - - {57ACDBDB-006E-43D3-9308-97857F2FF75D} - NonPersistentObjectsDemo.Module - True - - - - - diff --git a/VB/NonPersistentObjectsDemo.Module.Web/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module.Web/ReadMe.txt deleted file mode 100644 index 853a0d9..0000000 --- a/VB/NonPersistentObjectsDemo.Module.Web/ReadMe.txt +++ /dev/null @@ -1,28 +0,0 @@ -Project Description - -This project implements an ASP.NET Module. Platform-specific application elements -can be implemented here (Controllers, Editors & View Items, etc.). The root project -folder contains the WebModule.cs(vb) file with the class that inherits ModuleBase. -This class can be designed with the Module Designer that allows you to view and -customize Module components: referenced modules, Controllers and business classes. -Additionally, the root folder contains Application Model difference files -(XAFML files) that keep application settings specific for the current Module. -Differences files can be designed with the Model Editor. - - -Relevant Documentation - -Application Solution Components -https://docs.devexpress.com/eXpressAppFramework/112569 - -ModuleBase Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase - -Module Designer -https://docs.devexpress.com/eXpressAppFramework/112828 - -Application Model -https://docs.devexpress.com/eXpressAppFramework/112579 - -Model Editor -https://docs.devexpress.com/eXpressAppFramework/112582 \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Module.Web/WebModule.Designer.vb b/VB/NonPersistentObjectsDemo.Module.Web/WebModule.Designer.vb deleted file mode 100644 index daf910d..0000000 --- a/VB/NonPersistentObjectsDemo.Module.Web/WebModule.Designer.vb +++ /dev/null @@ -1,41 +0,0 @@ -Namespace NonPersistentObjectsDemo.Module.Web - Partial Public Class NonPersistentObjectsDemoAspNetModule - ''' - ''' Required designer variable. - ''' - Private components As System.ComponentModel.IContainer = Nothing - - ''' - ''' Clean up any resources being used. - ''' - ''' true if managed resources should be disposed; otherwise, false. - Protected Overrides Sub Dispose(ByVal disposing As Boolean) - If disposing AndAlso (components IsNot Nothing) Then - components.Dispose() - End If - MyBase.Dispose(disposing) - End Sub - - #Region "Component Designer generated code" - - ''' - ''' Required method for Designer support - do not modify - ''' the contents of this method with the code editor. - ''' - Private Sub InitializeComponent() - ' - ' NonPersistentObjectsDemoAspNetModule - ' - Me.RequiredModuleTypes.Add(GetType(NonPersistentObjectsDemo.Module.NonPersistentObjectsDemoModule)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.Web.SystemModule.SystemAspNetModule)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.FileAttachments.Web.FileAttachmentsAspNetModule)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.ReportsV2.Web.ReportsAspNetModuleV2)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.Scheduler.Web.SchedulerAspNetModule)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.ScriptRecorder.Web.ScriptRecorderAspNetModule)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.TreeListEditors.Web.TreeListEditorsAspNetModule)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.Validation.Web.ValidationAspNetModule)) - End Sub - - #End Region - End Class -End Namespace \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Module.Web/WebModule.vb b/VB/NonPersistentObjectsDemo.Module.Web/WebModule.vb deleted file mode 100644 index cd440ac..0000000 --- a/VB/NonPersistentObjectsDemo.Module.Web/WebModule.vb +++ /dev/null @@ -1,44 +0,0 @@ -Imports System -Imports System.Linq -Imports System.Text -Imports System.ComponentModel -Imports DevExpress.ExpressApp -Imports DevExpress.ExpressApp.DC -Imports System.Collections.Generic -Imports DevExpress.ExpressApp.Model -Imports DevExpress.ExpressApp.Editors -Imports DevExpress.ExpressApp.Actions -Imports DevExpress.ExpressApp.Updating -Imports DevExpress.ExpressApp.Model.Core -Imports DevExpress.ExpressApp.Model.DomainLogics -Imports DevExpress.ExpressApp.Model.NodeGenerators -Imports DevExpress.Persistent.BaseImpl - -Namespace NonPersistentObjectsDemo.Module.Web - ' For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase. - - Public NotInheritable Partial Class NonPersistentObjectsDemoAspNetModule - Inherits ModuleBase - - 'private void Application_CreateCustomModelDifferenceStore(Object sender, CreateCustomModelDifferenceStoreEventArgs e) { - ' e.Store = new ModelDifferenceDbStore((XafApplication)sender, typeof(ModelDifference), true, "Web"); - ' e.Handled = true; - '} - Private Sub Application_CreateCustomUserModelDifferenceStore(ByVal sender As Object, ByVal e As CreateCustomModelDifferenceStoreEventArgs) - e.Store = New ModelDifferenceDbStore(DirectCast(sender, XafApplication), GetType(ModelDifference), False, "Web") - e.Handled = True - End Sub - Public Sub New() - InitializeComponent() - End Sub - Public Overrides Function GetModuleUpdaters(ByVal objectSpace As IObjectSpace, ByVal versionFromDB As Version) As IEnumerable(Of ModuleUpdater) - Return ModuleUpdater.EmptyModuleUpdaters - End Function - Public Overrides Sub Setup(ByVal application As XafApplication) - MyBase.Setup(application) - 'application.CreateCustomModelDifferenceStore += Application_CreateCustomModelDifferenceStore; - AddHandler application.CreateCustomUserModelDifferenceStore, AddressOf Application_CreateCustomUserModelDifferenceStore - ' Manage various aspects of the application UI and behavior at the module level. - End Sub - End Class -End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module.Win/Controllers/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module.Win/Controllers/ReadMe.txt deleted file mode 100644 index b9c5dc3..0000000 --- a/VB/NonPersistentObjectsDemo.Module.Win/Controllers/ReadMe.txt +++ /dev/null @@ -1,19 +0,0 @@ -Folder Description - -The "Controllers" project folder is intended for storing platform-agnostic Controller classes -that can change the default XAF application flow and add new features. - - -Relevant Documentation - -Controllers and Actions -https://docs.devexpress.com/eXpressAppFramework/112623 - -Controller Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Controller - -ViewController Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ViewController - -WindowController Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.WindowController diff --git a/VB/NonPersistentObjectsDemo.Module.Win/Editors/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module.Win/Editors/ReadMe.txt deleted file mode 100644 index 3d405d8..0000000 --- a/VB/NonPersistentObjectsDemo.Module.Win/Editors/ReadMe.txt +++ /dev/null @@ -1,33 +0,0 @@ -Folder Description - -This project folder is intended for storing custom WinForms List Editors, -Property Editors and View Items. - -Relevant Documentation - -List Editors -https://docs.devexpress.com/eXpressAppFramework/113189 - -Implement Custom Property Editors -https://docs.devexpress.com/eXpressAppFramework/113097 - -View Items -https://docs.devexpress.com/eXpressAppFramework/112612 - -How to: Implement a Custom WinForms List Editor -https://docs.devexpress.com/eXpressAppFramework/112659 - -How to: Support a Context Menu for a Custom WinForms List Editor -https://docs.devexpress.com/eXpressAppFramework/112660 - -How to: Implement a Property Editor (in WinForms Applications) -https://docs.devexpress.com/eXpressAppFramework/112679 - -How to: Implement a Property Editor for Specific Data Management (in WinForms Applications) -https://docs.devexpress.com/eXpressAppFramework/113101 - -How to: Extend Built-in Property Editor's Functionality -https://docs.devexpress.com/eXpressAppFramework/113104 - -How to: Implement a View Item -https://docs.devexpress.com/eXpressAppFramework/112641 diff --git a/VB/NonPersistentObjectsDemo.Module.Win/Images/ExpressAppLogo.png b/VB/NonPersistentObjectsDemo.Module.Win/Images/ExpressAppLogo.png deleted file mode 100644 index 3a6eaada75b3745cfe120bd6c4a9b1fd9e3058fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7486 zcmV-E9l_#>P)(yJo!*`A_^`W`9|ETCe+!V{HeN7RRfsv=Uv z1_?zUN)w(a2`!Wms*r5z?%eyG*^}IiGrMfqbzyznf95wibLX7f_WtLbduMhQlIyi+ z|I<(a#ze$dEb^<3ROt{ih;vHQa|i`E(=nhyU}z8qC@?rb zq5Vm_UyH~~ue#PNPabj5)EKJF2dS8?;A8-mp6LKnP|TJiN;g@W=b zW+*_AT%r^ID;Ed_xVS-Qrl6qkhfM1g6cjX2P*4cszDn>=P*Bf+sd=P=f-{otmOzk{ z3P0`Cr9fTMpnjt+=djBtn{b;bYJ}bb1?^lv?Z?h;$?9oH?Oe7%P3u8D6&0cFgtPJ} z3`FXXfj{u9rk-v8v$s>LjFxh`q1P~_Np}?$2ZV~-6`YY0ut3DK4BvA^23CmeZqdlDyQjd~2$z_>v!-x#%ps1+O zm7iBqQlh?yrKo%sdIK6a>%~Gqow^q{Y?RWr{bdbPE{TbWW>kPAh8))jPG=~|d(t=~ z+-}`fSmLDyH_nm<%H>oOhCOH8t3s(mjFEGlso7JGR>rxBcaWulD0jXGBz0@F?cAT;m#57L%cuNF;#KgFj->y1zFvsI@ zGX;gP1rAPNL84~Onr+&)!l?p{{yG<3aCys1VyngoA;Nw6{_Uh|@$&WCw(rKGjvxCi zH8u6b@e{gBQRNQ{9#t#Bp3=0%H7qDJZ+Yp+8;7DGgkCr4f~(R}&t^oUIilZwZ`szL zcL^?{W1`olXPnAA$-)K&1t$c#0!G1*PH|Q177Zv7ep?6Gud73?-- zb0Qr|6K+bZT2EXyMI;+Rv#V#3G;N zu%E-Ws{kx;*K@&jw@&Vb5sDA_4YWv>go$rNJgGob0*i0Sj{V0(694YSb%2a?50*_U zW*h+i)C`H_+ABaPD_{bt;?a#^T7Hb1pFqn>71A_=Za#uN3=_Un2p+C8VSsZUL_;Fs zdzPT0#W2Q`(6d{|XP=xPj~9LZ)zCq`Uw!la*&luS?eY&3;^T%~KjvW0;qX4#BDioH z@ee1S(BAG$#6^8X(}!7cuC{#=E7-|MJthgySp83xdU%$YAQGGN_On>EdfJBZu=is# zRZvHQmqmbr(_KmN2eO4>KQ5a02JTVL%XbYOITrW!L4M2s4ZC;DO(ehi)(7|*oS##a z&*r^Zw@z)6aqtZpd6)l+pS^hU;Gx6#q2LGf%Z^>&rhivA*{EULw9CFp|BgP{goOBm zhmM4I1&ni{dpvaeT++uf(?Fi^rVkkhRch;(zN}?F3&+-q8dr(B*V>1*XmmTySRm&s zk=%=?O*cX^Cis;vXk5UaPbg2z1coL{> zzdG~70$0IVq>5k+BBY?6-8$J*=*kiy00sa81>{V#rj3RU>V-^3N&_O?RN+FDmgrud za3&~;n*%D|^btEBSX4YYA5yb}ctVgGyxj|qT{fzaSE1~}b65_y>mCfkJiLq&!n^Tup(KY`Vc*Pv%r~^n55ti)r_(Dq;PZ_4E+|$5 z|A}yg;7h+o8jy^{Kzc}pAp?5J!{?^Ib>4oBA3K5Qfq1{19+*O%6KTkIxscB&{D6Cj zFnbl|aeL(R!{&7@O3=1G#9O~67lr-#5jeO4PW%MB=8Br_c-r$UuD-BnmF79p?_}IM zQ9i~R`T;}6Q(oJD z*@{aUENqzZ&quGk;!^M2z2MrL?#2D!0X-kQ|4vf4ZR|rhO4#{|rysk&dzTIu-M~`)Xyz_miJ|>AZUe%zhmbT=%$jfr2RK2e&@-g<+K_%`?`rtPmB_g{_RO{%~#m zL^!hEk#VQqdy$B*PdYfuhiofPBBv-#r&BSq~D5!9a*~p0Q1BgDBa)aTKCO-5~xL}Kd66C+*2#4I4n1K!!Q6^UpXu| z%c|AlI(BML-`aZa$y@Qib5%#nBU|F4&br;J_@|9y%~;s~m8jKD?=`0)apf4;|Bb;z zGhyyFyh^`;_t7_#fBEI73v1M1l>;(l;(d42NxsMjCFXyQ1JtM0%g;|jLlklj9r|KIh4Bvm$S`tQrrCdJ2DV|N@|_f4FNnN-s7s$L_5ZUrh2>fghz z{OD6JuUh>dd5AiwS^1vnc6Ixw9=(s`zC&-vwxl*mdFS-bTUA6Qxph1tL z1V<`<-lBJ@S)kVgU{X8aEp@|Ccz%0D@};7Gcq+eA2G? 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 IM6N<$g0{$L^Z)<= diff --git a/VB/NonPersistentObjectsDemo.Module.Win/Images/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module.Win/Images/ReadMe.txt deleted file mode 100644 index 230befc..0000000 --- a/VB/NonPersistentObjectsDemo.Module.Win/Images/ReadMe.txt +++ /dev/null @@ -1,12 +0,0 @@ -Folder Description - -The "Images" project folder is intended for storing custom image files. - - -Relevant Documentation - -Add and Override Images -https://docs.devexpress.com/eXpressAppFramework/112792 - -Assign a Custom Image -https://docs.devexpress.com/eXpressAppFramework/112744 diff --git a/VB/NonPersistentObjectsDemo.Module.Win/Model.DesignedDiffs.xafml b/VB/NonPersistentObjectsDemo.Module.Win/Model.DesignedDiffs.xafml deleted file mode 100644 index d5e5a36..0000000 --- a/VB/NonPersistentObjectsDemo.Module.Win/Model.DesignedDiffs.xafml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/VB/NonPersistentObjectsDemo.Module.Win/My Project/AssemblyInfo.vb b/VB/NonPersistentObjectsDemo.Module.Win/My Project/AssemblyInfo.vb deleted file mode 100644 index b38e166..0000000 --- a/VB/NonPersistentObjectsDemo.Module.Win/My Project/AssemblyInfo.vb +++ /dev/null @@ -1,33 +0,0 @@ -Imports System.Reflection -Imports System.Runtime.CompilerServices -Imports System.Runtime.InteropServices - -' General Information about an assembly is controlled through the following -' set of attributes. Change these attribute values to modify the information -' associated with an assembly. - - - - - - - - - -' Setting ComVisible to false makes the types in this assembly not visible -' to COM components. If you need to access a type in this assembly from -' COM, set the ComVisible attribute to true on that type. - - -' The following GUID is for the ID of the typelib if this project is exposed to COM - - -' Version information for an assembly consists of the following four values: -' -' Major Version -' Minor Version -' Build Number -' Revision -' - - diff --git a/VB/NonPersistentObjectsDemo.Module.Win/NonPersistentObjectsDemo.Module.Win.vbproj b/VB/NonPersistentObjectsDemo.Module.Win/NonPersistentObjectsDemo.Module.Win.vbproj deleted file mode 100644 index a6a0475..0000000 --- a/VB/NonPersistentObjectsDemo.Module.Win/NonPersistentObjectsDemo.Module.Win.vbproj +++ /dev/null @@ -1,281 +0,0 @@ - - - - - Debug - AnyCPU - {72D644CD-C193-4572-B2E3-CA82819A1627} - Library - - NonPersistentObjectsDemo.Module.Win - v4.5.2 - 512 - On - Binary - Off - On - - - true - full - false - bin\Debug\ - true - true - prompt - true - - - pdbonly - true - bin\Release\ - false - true - prompt - true - - - true - bin\EasyTest\ - true - true - EASYTEST=True - full - AnyCPU - prompt - true - - - - - - - - - - - - - - - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - System - False - - - False - - - System.Data - False - - - System.Drawing - False - - - System.Windows.Forms - False - - - System.XML - False - - - - - - Component - - - WinModule.vb - - - - - - - - - - - - - - - - - - - - - - - {57ACDBDB-006E-43D3-9308-97857F2FF75D} - NonPersistentObjectsDemo.Module - True - - - - - diff --git a/VB/NonPersistentObjectsDemo.Module.Win/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module.Win/ReadMe.txt deleted file mode 100644 index 17056ef..0000000 --- a/VB/NonPersistentObjectsDemo.Module.Win/ReadMe.txt +++ /dev/null @@ -1,29 +0,0 @@ -Project Description - -This project implements a WinForms Module. Platform-specific application -elements can be implemented here (Controllers, Editors & View Items, etc.). -The root project folder contains the WinModule.cs(vb) file with the class that -inherits ModuleBase. This class can be designed with the Module Designer that -allows you to view and customize Module components: referenced modules, -Controllers and business classes. Additionally, the root folder contains -Application Model difference files (XAFML files) that keep application -settings specific for the current Module. Differences files can be designed -with the Model Editor. - - -Relevant Documentation - -Application Solution Components -https://docs.devexpress.com/eXpressAppFramework/112569 - -ModuleBase Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase - -Module Designer -https://docs.devexpress.com/eXpressAppFramework/112828 - -Application Model -https://docs.devexpress.com/eXpressAppFramework/112579 - -Model Editor -https://docs.devexpress.com/eXpressAppFramework/112582 diff --git a/VB/NonPersistentObjectsDemo.Module.Win/WinModule.Designer.vb b/VB/NonPersistentObjectsDemo.Module.Win/WinModule.Designer.vb deleted file mode 100644 index 5b61bab..0000000 --- a/VB/NonPersistentObjectsDemo.Module.Win/WinModule.Designer.vb +++ /dev/null @@ -1,41 +0,0 @@ -Namespace NonPersistentObjectsDemo.Module.Win - Partial Public Class NonPersistentObjectsDemoWindowsFormsModule - ''' - ''' Required designer variable. - ''' - Private components As System.ComponentModel.IContainer = Nothing - - ''' - ''' Clean up any resources being used. - ''' - ''' true if managed resources should be disposed; otherwise, false. - Protected Overrides Sub Dispose(ByVal disposing As Boolean) - If disposing AndAlso (components IsNot Nothing) Then - components.Dispose() - End If - MyBase.Dispose(disposing) - End Sub - - #Region "Component Designer generated code" - - ''' - ''' Required method for Designer support - do not modify - ''' the contents of this method with the code editor. - ''' - Private Sub InitializeComponent() - ' - ' NonPersistentObjectsDemoWindowsFormsModule - ' - Me.RequiredModuleTypes.Add(GetType(NonPersistentObjectsDemo.Module.NonPersistentObjectsDemoModule)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.Win.SystemModule.SystemWindowsFormsModule)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.FileAttachments.Win.FileAttachmentsWindowsFormsModule)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.ReportsV2.Win.ReportsWindowsFormsModuleV2)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.Scheduler.Win.SchedulerWindowsFormsModule)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.ScriptRecorder.Win.ScriptRecorderWindowsFormsModule)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.TreeListEditors.Win.TreeListEditorsWindowsFormsModule)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.Validation.Win.ValidationWindowsFormsModule)) - End Sub - - #End Region - End Class -End Namespace \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Module.Win/WinModule.vb b/VB/NonPersistentObjectsDemo.Module.Win/WinModule.vb deleted file mode 100644 index c53f375..0000000 --- a/VB/NonPersistentObjectsDemo.Module.Win/WinModule.vb +++ /dev/null @@ -1,44 +0,0 @@ -Imports System -Imports System.Linq -Imports System.Text -Imports System.ComponentModel -Imports DevExpress.ExpressApp -Imports DevExpress.ExpressApp.DC -Imports System.Collections.Generic -Imports DevExpress.ExpressApp.Model -Imports DevExpress.ExpressApp.Editors -Imports DevExpress.ExpressApp.Actions -Imports DevExpress.ExpressApp.Updating -Imports DevExpress.ExpressApp.Model.Core -Imports DevExpress.ExpressApp.Model.DomainLogics -Imports DevExpress.ExpressApp.Model.NodeGenerators -Imports DevExpress.Persistent.BaseImpl - -Namespace NonPersistentObjectsDemo.Module.Win - ' For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase. - - Public NotInheritable Partial Class NonPersistentObjectsDemoWindowsFormsModule - Inherits ModuleBase - - 'private void Application_CreateCustomModelDifferenceStore(Object sender, CreateCustomModelDifferenceStoreEventArgs e) { - ' e.Store = new ModelDifferenceDbStore((XafApplication)sender, typeof(ModelDifference), true, "Win"); - ' e.Handled = true; - '} - Private Sub Application_CreateCustomUserModelDifferenceStore(ByVal sender As Object, ByVal e As CreateCustomModelDifferenceStoreEventArgs) - e.Store = New ModelDifferenceDbStore(DirectCast(sender, XafApplication), GetType(ModelDifference), False, "Win") - e.Handled = True - End Sub - Public Sub New() - InitializeComponent() - End Sub - Public Overrides Function GetModuleUpdaters(ByVal objectSpace As IObjectSpace, ByVal versionFromDB As Version) As IEnumerable(Of ModuleUpdater) - Return ModuleUpdater.EmptyModuleUpdaters - End Function - Public Overrides Sub Setup(ByVal application As XafApplication) - MyBase.Setup(application) - 'application.CreateCustomModelDifferenceStore += Application_CreateCustomModelDifferenceStore; - AddHandler application.CreateCustomUserModelDifferenceStore, AddressOf Application_CreateCustomUserModelDifferenceStore - ' Manage various aspects of the application UI and behavior at the module level. - End Sub - End Class -End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module/BusinessObjects/Article.vb b/VB/NonPersistentObjectsDemo.Module/BusinessObjects/Article.vb deleted file mode 100644 index badaad6..0000000 --- a/VB/NonPersistentObjectsDemo.Module/BusinessObjects/Article.vb +++ /dev/null @@ -1,108 +0,0 @@ -Imports System -Imports System.Collections.Generic -Imports System.ComponentModel -Imports System.Linq -Imports System.Text -Imports System.Threading.Tasks -Imports DevExpress.ExpressApp -Imports DevExpress.ExpressApp.DC -Imports DevExpress.Persistent.Base - -Namespace NonPersistentObjectsDemo.Module.BusinessObjects - - - - - - Public Class Article - Inherits NonPersistentObjectBase - - Friend Sub New() - End Sub -'INSTANT VB NOTE: The field id was renamed since Visual Basic does not allow fields to have the same name as other class members: - Private id_Conflict As Integer - - - Public Property ID() As Integer - Get - Return id_Conflict - End Get - Set(ByVal value As Integer) - id_Conflict = value - End Set - End Property - Private _Author As Contact - Public Property Author() As Contact - Get - Return _Author - End Get - Set(ByVal value As Contact) - SetPropertyValue(NameOf(Author), _Author, value) - End Set - End Property - Private _Title As String - Public Property Title() As String - Get - Return _Title - End Get - Set(ByVal value As String) - SetPropertyValue(Of String)(NameOf(Title), _Title, value) - End Set - End Property - Private _Content As String - - Public Property Content() As String - Get - Return _Content - End Get - Set(ByVal value As String) - SetPropertyValue(Of String)(NameOf(Content), _Content, value) - End Set - End Property - End Class - - Friend Class ArticleAdapter - Private objectSpace As NonPersistentObjectSpace - Private Shared articles As List(Of Article) - - Public Sub New(ByVal npos As NonPersistentObjectSpace) - Me.objectSpace = npos - AddHandler objectSpace.ObjectsGetting, AddressOf ObjectSpace_ObjectsGetting - End Sub - Private Sub ObjectSpace_ObjectsGetting(ByVal sender As Object, ByVal e As ObjectsGettingEventArgs) - If e.ObjectType Is GetType(Article) Then - Dim collection = New DynamicCollection(objectSpace, e.ObjectType, e.Criteria, e.Sorting, e.InTransaction) - AddHandler collection.ObjectsGetting, AddressOf DynamicCollection_ObjectsGetting - e.Objects = collection - End If - End Sub - Private Sub DynamicCollection_ObjectsGetting(ByVal sender As Object, ByVal e As DynamicObjectsGettingEventArgs) - If e.ObjectType Is GetType(Article) Then - e.Objects = articles - e.ShapeRawData = True - End If - End Sub - - Shared Sub New() - articles = New List(Of Article)() - CreateDemoData() - End Sub - - #Region "DemoData" - Private Shared Sub CreateDemoData() - Dim gen = New GenHelper() - Dim contacts = ContactAdapter.GetAllContacts() - For i As Integer = 0 To 4999 - Dim id1 = gen.Next(contacts.Count) - Dim id2 = gen.Next(contacts.Count - 1) - articles.Add(New Article() With { - .ID = i, - .Title = GenHelper.ToTitle(gen.MakeBlah(gen.Next(7))), - .Content = gen.MakeBlahBlahBlah(5 + gen.Next(100), 7), - .Author = contacts(id1) - }) - Next i - End Sub - #End Region - End Class -End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.vb b/VB/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.vb deleted file mode 100644 index c433ea9..0000000 --- a/VB/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.vb +++ /dev/null @@ -1,146 +0,0 @@ -Imports System -Imports System.Collections.Generic -Imports System.ComponentModel -Imports System.Data -Imports System.Linq -Imports System.Text -Imports System.Threading.Tasks -Imports DevExpress.Data.Filtering -Imports DevExpress.ExpressApp -Imports DevExpress.Persistent.Base -Imports DevExpress.Xpo - -Namespace NonPersistentObjectsDemo.Module.BusinessObjects - - - - - - Public Class Contact - Inherits NonPersistentObjectBase - - Friend Sub New() - End Sub -'INSTANT VB NOTE: The field userName was renamed since Visual Basic does not allow fields to have the same name as other class members: - Private userName_Conflict As String - - Public Property UserName() As String - Get - Return userName_Conflict - End Get - Set(ByVal value As String) - userName_Conflict = value - End Set - End Property -'INSTANT VB NOTE: The field fullName was renamed since Visual Basic does not allow fields to have the same name as other class members: - Private fullName_Conflict As String - Public Property FullName() As String - Get - Return fullName_Conflict - End Get - Set(ByVal value As String) - SetPropertyValue(NameOf(FullName), fullName_Conflict, value) - End Set - End Property - Private _Age As Integer - Public Property Age() As Integer - Get - Return _Age - End Get - Set(ByVal value As Integer) - SetPropertyValue(Of Integer)(NameOf(Age), _Age, value) - End Set - End Property - Private _Rating As Single - Public Property Rating() As Single - Get - Return _Rating - End Get - Set(ByVal value As Single) - SetPropertyValue(Of Single)(NameOf(Rating), _Rating, value) - End Set - End Property - End Class - - Friend Class ContactAdapter - Private objectSpace As NonPersistentObjectSpace - - Public Sub New(ByVal npos As NonPersistentObjectSpace) - Me.objectSpace = npos - AddHandler objectSpace.ObjectsGetting, AddressOf ObjectSpace_ObjectsGetting - End Sub - Private Sub ObjectSpace_ObjectsGetting(ByVal sender As Object, ByVal e As ObjectsGettingEventArgs) - If e.ObjectType Is GetType(Contact) Then - Dim collection = New DynamicCollection(objectSpace, e.ObjectType, e.Criteria, e.Sorting, e.InTransaction) - AddHandler collection.ObjectsGetting, AddressOf DynamicCollection_ObjectsGetting - e.Objects = collection - End If - End Sub - Private Sub DynamicCollection_ObjectsGetting(ByVal sender As Object, ByVal e As DynamicObjectsGettingEventArgs) - If e.ObjectType Is GetType(Contact) Then - Dim rows = contactsStorage.GetContactRows(e.Criteria, e.Sorting) - e.Objects = rows.Select(Function(row) GetContact(row)) - End If - End Sub - Private Shared Function GetContact(ByVal row As DataRow) As Contact - Dim obj As Contact = Nothing - Dim key = TryCast(row("UserName"), String) - If Not contactsCache.TryGetValue(key, obj) Then - obj = New Contact() With { - .UserName = key, - .FullName = DirectCast(row("FullName"), String), - .Age = DirectCast(row("Age"), Integer), - .Rating = DirectCast(row("Rating"), Single) - } - contactsCache.Add(key, obj) - End If - Return obj - End Function - - Private Shared contactsStorage As ContactStorage - Private Shared contactsCache As Dictionary(Of String, Contact) - Friend Shared Function GetAllContacts() As IList(Of Contact) - Return contactsStorage.GetContactRows(Nothing, Nothing).Select(Function(row) GetContact(row)).ToList() - End Function - Shared Sub New() - contactsStorage = New ContactStorage() - contactsStorage.LoadDemoData() - contactsCache = New Dictionary(Of String, Contact)() - End Sub - End Class - - Friend Class ContactStorage - Private dataSet As DataSet - Public Function GetContactRows(ByVal criteria As CriteriaOperator, ByVal sorting As IList(Of SortProperty)) As IList(Of DataRow) - Dim filter = CriteriaToWhereClauseHelper.GetDataSetWhere(criteria) - Dim sort As String = Nothing - If sorting IsNot Nothing AndAlso sorting.Count = 1 AndAlso TypeOf sorting(0).Property Is OperandProperty Then - sort = String.Format("{0} {1}", sorting(0).PropertyName,If(sorting(0).Direction = DevExpress.Xpo.DB.SortingDirection.Ascending, "ASC", "DESC")) - End If - Return dataSet.Tables("Contacts").Select(filter, sort) - End Function - Public Sub New() - dataSet = New DataSet() - If True Then - Dim dt = dataSet.Tables.Add("Contacts") - Dim colID = dt.Columns.Add("UserName", GetType(String)) - dt.Columns.Add("FullName", GetType(String)) - dt.Columns.Add("Age", GetType(Integer)) - dt.Columns.Add("Rating", GetType(Single)) - dt.PrimaryKey = New DataColumn() { colID } - End If - LoadDemoData() - End Sub - Public Sub LoadDemoData() - Dim dt = dataSet.Tables("Contacts") - Dim gen = New GenHelper() - For i As Integer = 0 To 199 - Dim id = gen.MakeTosh(20) - Dim fullName = gen.GetFullName() - Dim age = 16 + gen.Next(80) - Dim rating = gen.Next(100) * gen.Next(100) * 0.001F - dt.LoadDataRow(New Object() { id, fullName, age, rating }, LoadOption.OverwriteChanges) - Next i - End Sub - End Class -End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.vb b/VB/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.vb deleted file mode 100644 index c9fa554..0000000 --- a/VB/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.vb +++ /dev/null @@ -1,59 +0,0 @@ -Imports System -Imports System.Collections.Generic -Imports System.ComponentModel -Imports System.Linq -Imports System.Text -Imports System.Threading.Tasks -Imports DevExpress.ExpressApp -Imports DevExpress.ExpressApp.DC -Imports DevExpress.Persistent.Base - -Namespace NonPersistentObjectsDemo.Module.BusinessObjects - - Public MustInherit Class NonPersistentObjectBase - Implements INotifyPropertyChanged, IObjectSpaceLink - -'INSTANT VB NOTE: The field objectSpace was renamed since Visual Basic does not allow fields to have the same name as other class members: - Private objectSpace_Conflict As IObjectSpace - Protected ReadOnly Property ObjectSpace() As IObjectSpace - Get - Return objectSpace_Conflict - End Get - End Property - Private Property IObjectSpaceLink_ObjectSpace() As IObjectSpace Implements IObjectSpaceLink.ObjectSpace - Get - Return objectSpace_Conflict - End Get - Set(ByVal value As IObjectSpace) - If objectSpace_Conflict IsNot value Then - OnObjectSpaceChanging() - objectSpace_Conflict = value - OnObjectSpaceChanged() - End If - End Set - End Property - Protected Overridable Sub OnObjectSpaceChanging() - End Sub - Protected Overridable Sub OnObjectSpaceChanged() - End Sub - Protected Function FindPersistentObjectSpace(ByVal type As Type) As IObjectSpace - Return DirectCast(ObjectSpace, NonPersistentObjectSpace).AdditionalObjectSpaces.FirstOrDefault(Function(os) os.IsKnownType(type)) - End Function - Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged - Protected Sub OnPropertyChanged(ByVal propertyName As String) - PropertyChangedEvent?.Invoke(Me, New PropertyChangedEventArgs(propertyName)) - End Sub - Protected Sub SetPropertyValue(Of T)(ByVal name As String, ByRef field As T, ByVal value As T) - If Not Equals(field, value) Then - field = value - OnPropertyChanged(name) - End If - End Sub - - Public ReadOnly Property This() As Object - Get - Return Me - End Get - End Property - End Class -End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module/BusinessObjects/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module/BusinessObjects/ReadMe.txt deleted file mode 100644 index 09595b9..0000000 --- a/VB/NonPersistentObjectsDemo.Module/BusinessObjects/ReadMe.txt +++ /dev/null @@ -1,11 +0,0 @@ -Folder Description - -The "BusinessObjects" project folder is intended for storing the business objects -code. In XAF, a business object can be implemented as a base persistent class -descendant and as Domain Component interfaces. - -Relevant Documentation - -Business Model Design -https://docs.devexpress.com/eXpressAppFramework/112600 - diff --git a/VB/NonPersistentObjectsDemo.Module/Controllers/FindArticlesController.vb b/VB/NonPersistentObjectsDemo.Module/Controllers/FindArticlesController.vb deleted file mode 100644 index 9431fe3..0000000 --- a/VB/NonPersistentObjectsDemo.Module/Controllers/FindArticlesController.vb +++ /dev/null @@ -1,95 +0,0 @@ -Imports System -Imports System.Collections.Generic -Imports System.ComponentModel -Imports System.Linq -Imports System.Text -Imports System.Threading.Tasks -Imports DevExpress.Data.Filtering -Imports DevExpress.ExpressApp -Imports DevExpress.ExpressApp.Actions -Imports DevExpress.ExpressApp.ConditionalAppearance -Imports DevExpress.ExpressApp.DC -Imports DevExpress.Persistent.Base -Imports NonPersistentObjectsDemo.Module.BusinessObjects - -Namespace NonPersistentObjectsDemo.Module.Controllers - - Public Class FindArticlesController - Inherits ViewController - - Private action As PopupWindowShowAction - Public Sub New() - action = New PopupWindowShowAction(Me, "FindArticles", PredefinedCategory.View) - AddHandler action.CustomizePopupWindowParams, AddressOf Action_CustomizePopupWindowParams - AddHandler action.Execute, AddressOf Action_Execute - End Sub - Private Sub Action_CustomizePopupWindowParams(ByVal sender As Object, ByVal e As CustomizePopupWindowParamsEventArgs) - Dim objectSpace = Application.CreateObjectSpace(GetType(FindArticlesDialog)) - Dim obj = New FindArticlesDialog() - Dim detailView = Application.CreateDetailView(objectSpace, obj) - detailView.ViewEditMode = DevExpress.ExpressApp.Editors.ViewEditMode.Edit - e.View = detailView - End Sub - Private Sub Action_Execute(ByVal sender As Object, ByVal e As PopupWindowShowActionExecuteEventArgs) - End Sub - End Class - - - Public Class FindArticlesDialog - Inherits NonPersistentObjectBase - - Private _Author As Contact - - Public Property Author() As Contact - Get - Return _Author - End Get - Set(ByVal value As Contact) - SetPropertyValue(Of Contact)(NameOf(Author), _Author, value) - End Set - End Property - Private _AuthorMinRating As Single - - Public Property AuthorMinRating() As Single - Get - Return _AuthorMinRating - End Get - Set(ByVal value As Single) - SetPropertyValue(Of Single)(NameOf(AuthorMinRating), _AuthorMinRating, value) - End Set - End Property - Private _Articles As BindingList(Of Article) - Public ReadOnly Property Articles() As BindingList(Of Article) - Get - If _Articles Is Nothing Then - _Articles = New BindingList(Of Article)() - End If - Return _Articles - End Get - End Property - Private Sub UpdateArticles() - If _Articles IsNot Nothing Then - Dim filter = GetCriteria() - _Articles.RaiseListChangedEvents = False - _Articles.Clear() - For Each obj In ObjectSpace.GetObjects(Of Article)(filter) - _Articles.Add(obj) - Next obj - _Articles.RaiseListChangedEvents = True - _Articles.ResetBindings() - OnPropertyChanged(NameOf(Articles)) - End If - End Sub - Private Function GetCriteria() As CriteriaOperator - If Author IsNot Nothing Then - Return New BinaryOperator("Author.UserName", Author.UserName) - Else - Return CriteriaOperator.Parse("Author.Rating >= ?", AuthorMinRating) - End If - End Function - - Public Sub Find() - UpdateArticles() - End Sub - End Class -End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module/Controllers/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module/Controllers/ReadMe.txt deleted file mode 100644 index b9c5dc3..0000000 --- a/VB/NonPersistentObjectsDemo.Module/Controllers/ReadMe.txt +++ /dev/null @@ -1,19 +0,0 @@ -Folder Description - -The "Controllers" project folder is intended for storing platform-agnostic Controller classes -that can change the default XAF application flow and add new features. - - -Relevant Documentation - -Controllers and Actions -https://docs.devexpress.com/eXpressAppFramework/112623 - -Controller Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Controller - -ViewController Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ViewController - -WindowController Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.WindowController diff --git a/VB/NonPersistentObjectsDemo.Module/DatabaseUpdate/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module/DatabaseUpdate/ReadMe.txt deleted file mode 100644 index 31da2b7..0000000 --- a/VB/NonPersistentObjectsDemo.Module/DatabaseUpdate/ReadMe.txt +++ /dev/null @@ -1,17 +0,0 @@ -Folder Description - -The "DatabaseUpdate" project folder is intended for storing code that supplies -initial data (default User objects, etc) and handles a database update when the -application version changes. - - -Relevant Documentation - -Supply Initial Data -https://docs.devexpress.com/eXpressAppFramework/112788 - -How to: Update the Database Structure after the Persistent Class or Property Was Renamed or Removed -https://docs.devexpress.com/eXpressAppFramework/113254 - -ModuleUpdater Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Updating.ModuleUpdater diff --git a/VB/NonPersistentObjectsDemo.Module/DatabaseUpdate/Updater.vb b/VB/NonPersistentObjectsDemo.Module/DatabaseUpdate/Updater.vb deleted file mode 100644 index c925266..0000000 --- a/VB/NonPersistentObjectsDemo.Module/DatabaseUpdate/Updater.vb +++ /dev/null @@ -1,83 +0,0 @@ -Imports System -Imports System.Linq -Imports DevExpress.ExpressApp -Imports DevExpress.Data.Filtering -Imports DevExpress.Persistent.Base -Imports DevExpress.ExpressApp.Updating -Imports DevExpress.ExpressApp.Security -Imports DevExpress.ExpressApp.SystemModule -Imports DevExpress.ExpressApp.Security.Strategy -Imports DevExpress.Xpo -Imports DevExpress.ExpressApp.Xpo -Imports DevExpress.Persistent.BaseImpl -Imports DevExpress.Persistent.BaseImpl.PermissionPolicy - -Namespace NonPersistentObjectsDemo.Module.DatabaseUpdate - ' For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Updating.ModuleUpdater - Public Class Updater - Inherits ModuleUpdater - - Public Sub New(ByVal objectSpace As IObjectSpace, ByVal currentDBVersion As Version) - MyBase.New(objectSpace, currentDBVersion) - End Sub - Public Overrides Sub UpdateDatabaseAfterUpdateSchema() - MyBase.UpdateDatabaseAfterUpdateSchema() - 'CreateSecurityObjects(); - End Sub - - #Region "Security" - Private Sub CreateSecurityObjects() - Dim sampleUser As PermissionPolicyUser = ObjectSpace.FindObject(Of PermissionPolicyUser)(New BinaryOperator("UserName", "User")) - If sampleUser Is Nothing Then - sampleUser = ObjectSpace.CreateObject(Of PermissionPolicyUser)() - sampleUser.UserName = "User" - sampleUser.SetPassword("") - End If - Dim defaultRole As PermissionPolicyRole = CreateDefaultRole() - sampleUser.Roles.Add(defaultRole) - - Dim userAdmin As PermissionPolicyUser = ObjectSpace.FindObject(Of PermissionPolicyUser)(New BinaryOperator("UserName", "Admin")) - If userAdmin Is Nothing Then - userAdmin = ObjectSpace.CreateObject(Of PermissionPolicyUser)() - userAdmin.UserName = "Admin" - ' Set a password if the standard authentication type is used - userAdmin.SetPassword("") - End If - ' If a role with the Administrators name doesn't exist in the database, create this role - Dim adminRole As PermissionPolicyRole = ObjectSpace.FindObject(Of PermissionPolicyRole)(New BinaryOperator("Name", "Administrators")) - If adminRole Is Nothing Then - adminRole = ObjectSpace.CreateObject(Of PermissionPolicyRole)() - adminRole.Name = "Administrators" - End If - adminRole.IsAdministrative = True - userAdmin.Roles.Add(adminRole) - ObjectSpace.CommitChanges() 'This line persists created object(s). - End Sub - #End Region - - Public Overrides Sub UpdateDatabaseBeforeUpdateSchema() - MyBase.UpdateDatabaseBeforeUpdateSchema() - 'if(CurrentDBVersion < new Version("1.1.0.0") && CurrentDBVersion > new Version("0.0.0.0")) { - ' RenameColumn("DomainObject1Table", "OldColumnName", "NewColumnName"); - '} - End Sub - Private Function CreateDefaultRole() As PermissionPolicyRole - Dim defaultRole As PermissionPolicyRole = ObjectSpace.FindObject(Of PermissionPolicyRole)(New BinaryOperator("Name", "Default")) - If defaultRole Is Nothing Then - defaultRole = ObjectSpace.CreateObject(Of PermissionPolicyRole)() - defaultRole.Name = "Default" - - defaultRole.AddObjectPermission(Of PermissionPolicyUser)(SecurityOperations.Read, "[Oid] = CurrentUserId()", SecurityPermissionState.Allow) - defaultRole.AddNavigationPermission("Application/NavigationItems/Items/Default/Items/MyDetails", SecurityPermissionState.Allow) - defaultRole.AddMemberPermission(Of PermissionPolicyUser)(SecurityOperations.Write, "ChangePasswordOnFirstLogon", "[Oid] = CurrentUserId()", SecurityPermissionState.Allow) - defaultRole.AddMemberPermission(Of PermissionPolicyUser)(SecurityOperations.Write, "StoredPassword", "[Oid] = CurrentUserId()", SecurityPermissionState.Allow) - defaultRole.AddTypePermissionsRecursively(Of PermissionPolicyRole)(SecurityOperations.Read, SecurityPermissionState.Deny) - defaultRole.AddTypePermissionsRecursively(Of ModelDifference)(SecurityOperations.ReadWriteAccess, SecurityPermissionState.Allow) - defaultRole.AddTypePermissionsRecursively(Of ModelDifferenceAspect)(SecurityOperations.ReadWriteAccess, SecurityPermissionState.Allow) - defaultRole.AddTypePermissionsRecursively(Of ModelDifference)(SecurityOperations.Create, SecurityPermissionState.Allow) - defaultRole.AddTypePermissionsRecursively(Of ModelDifferenceAspect)(SecurityOperations.Create, SecurityPermissionState.Allow) - End If - Return defaultRole - End Function - End Class -End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/ReadMe.txt deleted file mode 100644 index fb0b599..0000000 --- a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/ReadMe.txt +++ /dev/null @@ -1,10 +0,0 @@ -Folder Description - -The "FunctionalTests" project folder is intended for storing EasyTest -configuration file and scripts. - - -Relevant Documentation - -Functional Testing -https://docs.devexpress.com/eXpressAppFramework/113206 diff --git a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml deleted file mode 100644 index b19e270..0000000 --- a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/sample.ets b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/sample.ets deleted file mode 100644 index ab78fc2..0000000 --- a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/sample.ets +++ /dev/null @@ -1,20 +0,0 @@ -;#DropDB NonPersistentObjectsDemoEasyTest - -#Application NonPersistentObjectsDemoWin -#Application NonPersistentObjectsDemoWeb - -*FillForm - User Name = Admin -*Action Log In - -#IfDef NonPersistentObjectsDemoWin - -*Action About... - -*Action OK - -#EndIf - -#IfDef NonPersistentObjectsDemoWeb -*Action Navigation(My Details) -#EndIf diff --git a/VB/NonPersistentObjectsDemo.Module/Images/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module/Images/ReadMe.txt deleted file mode 100644 index 230befc..0000000 --- a/VB/NonPersistentObjectsDemo.Module/Images/ReadMe.txt +++ /dev/null @@ -1,12 +0,0 @@ -Folder Description - -The "Images" project folder is intended for storing custom image files. - - -Relevant Documentation - -Add and Override Images -https://docs.devexpress.com/eXpressAppFramework/112792 - -Assign a Custom Image -https://docs.devexpress.com/eXpressAppFramework/112744 diff --git a/VB/NonPersistentObjectsDemo.Module/Model.DesignedDiffs.xafml b/VB/NonPersistentObjectsDemo.Module/Model.DesignedDiffs.xafml deleted file mode 100644 index fbd248d..0000000 --- a/VB/NonPersistentObjectsDemo.Module/Model.DesignedDiffs.xafml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/VB/NonPersistentObjectsDemo.Module/Module.Designer.vb b/VB/NonPersistentObjectsDemo.Module/Module.Designer.vb deleted file mode 100644 index eb519e6..0000000 --- a/VB/NonPersistentObjectsDemo.Module/Module.Designer.vb +++ /dev/null @@ -1,50 +0,0 @@ -Namespace NonPersistentObjectsDemo.Module - Partial Public Class NonPersistentObjectsDemoModule - ''' - ''' Required designer variable. - ''' - Private components As System.ComponentModel.IContainer = Nothing - - ''' - ''' Clean up any resources being used. - ''' - ''' true if managed resources should be disposed; otherwise, false. - Protected Overrides Sub Dispose(ByVal disposing As Boolean) - If disposing AndAlso (components IsNot Nothing) Then - components.Dispose() - End If - MyBase.Dispose(disposing) - End Sub - - #Region "Component Designer generated code" - - ''' - ''' Required method for Designer support - do not modify - ''' the contents of this method with the code editor. - ''' - Private Sub InitializeComponent() - ' - ' NonPersistentObjectsDemoModule - ' - Me.AdditionalExportedTypes.Add(GetType(DevExpress.Persistent.BaseImpl.ModelDifference)) - Me.AdditionalExportedTypes.Add(GetType(DevExpress.Persistent.BaseImpl.ModelDifferenceAspect)) - Me.AdditionalExportedTypes.Add(GetType(DevExpress.Persistent.BaseImpl.BaseObject)) - 'this.AdditionalExportedTypes.Add(typeof(DevExpress.Persistent.BaseImpl.FileData)); - 'this.AdditionalExportedTypes.Add(typeof(DevExpress.Persistent.BaseImpl.FileAttachmentBase)); - 'this.AdditionalExportedTypes.Add(typeof(DevExpress.Persistent.BaseImpl.Event)); - 'this.AdditionalExportedTypes.Add(typeof(DevExpress.Persistent.BaseImpl.Resource)); - 'this.AdditionalExportedTypes.Add(typeof(DevExpress.Persistent.BaseImpl.HCategory)); - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.SystemModule.SystemModule)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.Objects.BusinessClassLibraryCustomizationModule)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.CloneObject.CloneObjectModule)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.ConditionalAppearance.ConditionalAppearanceModule)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.ReportsV2.ReportsModuleV2)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.Scheduler.SchedulerModuleBase)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.ScriptRecorder.ScriptRecorderModuleBase)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.TreeListEditors.TreeListEditorsModuleBase)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.Validation.ValidationModule)) - End Sub - - #End Region - End Class -End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module/Module.vb b/VB/NonPersistentObjectsDemo.Module/Module.vb deleted file mode 100644 index 6f57162..0000000 --- a/VB/NonPersistentObjectsDemo.Module/Module.vb +++ /dev/null @@ -1,54 +0,0 @@ -Imports System -Imports System.Text -Imports System.Linq -Imports DevExpress.ExpressApp -Imports System.ComponentModel -Imports DevExpress.ExpressApp.DC -Imports System.Collections.Generic -Imports DevExpress.Persistent.Base -Imports DevExpress.Persistent.BaseImpl -Imports DevExpress.Persistent.BaseImpl.PermissionPolicy -Imports DevExpress.ExpressApp.Model -Imports DevExpress.ExpressApp.Actions -Imports DevExpress.ExpressApp.Editors -Imports DevExpress.ExpressApp.Updating -Imports DevExpress.ExpressApp.Model.Core -Imports DevExpress.ExpressApp.Model.DomainLogics -Imports DevExpress.ExpressApp.Model.NodeGenerators -Imports DevExpress.ExpressApp.Xpo -Imports NonPersistentObjectsDemo.Module.BusinessObjects - -Namespace NonPersistentObjectsDemo.Module - ' For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase. - Public NotInheritable Partial Class NonPersistentObjectsDemoModule - Inherits ModuleBase - - Public Sub New() - InitializeComponent() - BaseObject.OidInitializationMode = OidInitializationMode.AfterConstruction - End Sub - Public Overrides Function GetModuleUpdaters(ByVal objectSpace As IObjectSpace, ByVal versionFromDB As Version) As IEnumerable(Of ModuleUpdater) - Dim updater As ModuleUpdater = New DatabaseUpdate.Updater(objectSpace, versionFromDB) - Return New ModuleUpdater() { updater } - End Function - Public Overrides Sub Setup(ByVal application As XafApplication) - MyBase.Setup(application) - ' Manage various aspects of the application UI and behavior at the module level. - AddHandler application.SetupComplete, AddressOf Application_SetupComplete - End Sub - Private Sub Application_SetupComplete(ByVal sender As Object, ByVal e As EventArgs) - AddHandler Application.ObjectSpaceCreated, AddressOf Application_ObjectSpaceCreated - End Sub - Private Sub Application_ObjectSpaceCreated(ByVal sender As Object, ByVal e As ObjectSpaceCreatedEventArgs) - Dim npos = TryCast(e.ObjectSpace, NonPersistentObjectSpace) - If npos IsNot Nothing Then - Dim tempVar As New ArticleAdapter(npos) - Dim tempVar2 As New ContactAdapter(npos) - End If - End Sub - Public Overrides Sub CustomizeTypesInfo(ByVal typesInfo As ITypesInfo) - MyBase.CustomizeTypesInfo(typesInfo) - CalculatedPersistentAliasHelper.CustomizeTypesInfo(typesInfo) - End Sub - End Class -End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module/My Project/AssemblyInfo.vb b/VB/NonPersistentObjectsDemo.Module/My Project/AssemblyInfo.vb deleted file mode 100644 index 43eb069..0000000 --- a/VB/NonPersistentObjectsDemo.Module/My Project/AssemblyInfo.vb +++ /dev/null @@ -1,33 +0,0 @@ -Imports System.Reflection -Imports System.Runtime.CompilerServices -Imports System.Runtime.InteropServices - -' General Information about an assembly is controlled through the following -' set of attributes. Change these attribute values to modify the information -' associated with an assembly. - - - - - - - - - -' Setting ComVisible to false makes the types in this assembly not visible -' to COM components. If you need to access a type in this assembly from -' COM, set the ComVisible attribute to true on that type. - - -' The following GUID is for the ID of the typelib if this project is exposed to COM - - -' Version information for an assembly consists of the following four values: -' -' Major Version -' Minor Version -' Build Number -' Revision -' - - diff --git a/VB/NonPersistentObjectsDemo.Module/NonPersistentObjectsDemo.Module.vbproj b/VB/NonPersistentObjectsDemo.Module/NonPersistentObjectsDemo.Module.vbproj deleted file mode 100644 index d375615..0000000 --- a/VB/NonPersistentObjectsDemo.Module/NonPersistentObjectsDemo.Module.vbproj +++ /dev/null @@ -1,202 +0,0 @@ - - - - - Debug - AnyCPU - {57ACDBDB-006E-43D3-9308-97857F2FF75D} - Library - - NonPersistentObjectsDemo.Module - v4.5.2 - 512 - On - Binary - Off - On - - - true - full - false - bin\Debug\ - true - true - prompt - true - - - pdbonly - true - bin\Release\ - false - true - prompt - true - - - true - bin\EasyTest\ - true - true - EASYTEST=True - full - AnyCPU - prompt - true - - - - - - - - - - - - - - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - System - - - System.Data - - - - System.XML - - - - - - - - Component - - - - Component - - - Module.vb - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/VB/NonPersistentObjectsDemo.Module/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module/ReadMe.txt deleted file mode 100644 index a96fb7a..0000000 --- a/VB/NonPersistentObjectsDemo.Module/ReadMe.txt +++ /dev/null @@ -1,28 +0,0 @@ -Project Description - -This project implements a platform-agnostic Module. UI-independent application -elements can be implemented here (Business Objects, Controllers, etc.). The root -project folder contains the Module.cs(vb) file with the class that inherits -ModuleBase. This class can be designed with the Module Designer that allows -you to view and customize Module components: referenced modules, Controllers -and business classes. Additionally, the root folder contains Application Model -difference files (XAFML files) that keep application settings specific for the -current Module. Differences files can be designed with the Model Editor. - - -Relevant Documentation - -Application Solution Components -https://docs.devexpress.com/eXpressAppFramework/112569 - -ModuleBase Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase - -Module Designer -https://docs.devexpress.com/eXpressAppFramework/112828 - -Application Model -https://docs.devexpress.com/eXpressAppFramework/112579 - -Model Editor -https://docs.devexpress.com/eXpressAppFramework/112582 diff --git a/VB/NonPersistentObjectsDemo.Module/Util.vb b/VB/NonPersistentObjectsDemo.Module/Util.vb deleted file mode 100644 index 039906c..0000000 --- a/VB/NonPersistentObjectsDemo.Module/Util.vb +++ /dev/null @@ -1,102 +0,0 @@ -Imports System -Imports System.Collections.Generic -Imports System.Linq -Imports System.Text -Imports System.Threading.Tasks - -Namespace NonPersistentObjectsDemo.Module - - Public Class GenHelper - Private Shared srnd As Random - Private Shared words As List(Of String) - Private Shared fnames As List(Of String) - Private Shared lnames As List(Of String) - Shared Sub New() - srnd = New Random() - words = CreateWords(12000) - fnames = CreateNames(200) - lnames = CreateNames(500) - End Sub - Private Shared Function CreateWords(ByVal number As Integer) As List(Of String) - Dim items = New HashSet(Of String)() - Do While number > 0 - If items.Add(CreateWord()) Then - number -= 1 - End If - Loop - Return items.ToList() - End Function - Private Shared Function MakeTosh(ByVal rnd As Random, ByVal length As Integer) As String - Dim chars = New Char(length - 1){} - For i As Integer = 0 To length - 1 - chars(i) = ChrW(AscW("a"c) + rnd.Next(26)) - Next i - Return New String(chars) - End Function - Private Shared Function CreateWord() As String - Return MakeTosh(srnd, 1 + srnd.Next(13)) - End Function - Private Shared Function CreateNames(ByVal number As Integer) As List(Of String) - Dim items = New HashSet(Of String)() - Do While number > 0 - If items.Add(ToTitle(CreateWord())) Then - number -= 1 - End If - Loop - Return items.ToList() - End Function - Public Shared Function ToTitle(ByVal s As String) As String - If String.IsNullOrEmpty(s) Then - Return s - End If - Return String.Concat(s.Substring(0, 1).ToUpper(), s.Substring(1)) - End Function - - Private rnd As Random - Public Sub New() - rnd = New Random() - End Sub - Public Sub New(ByVal seed As Integer) - rnd = New Random(seed) - End Sub - Public Function [Next](ByVal max As Integer) As Integer - Return rnd.Next(max) - End Function - Public Function MakeTosh(ByVal length As Integer) As String - Return MakeTosh(rnd, length) - End Function - Public Function MakeBlah(ByVal length As Integer) As String - Dim sb = New StringBuilder() - For i = 0 To length - If sb.Length > 0 Then - sb.Append(" ") - End If - sb.Append(GetWord()) - Next i - Return sb.ToString() - End Function - Public Function MakeBlahBlahBlah(ByVal length As Integer, ByVal plength As Integer) As String - Dim sb = New StringBuilder() - For i = 0 To length - If sb.Length > 0 Then - sb.Append(" ") - End If - Dim w = ToTitle(MakeBlah(3 + rnd.Next(plength))) & "." - sb.Append(w) - Next i - Return sb.ToString() - End Function - Public Function GetFullName() As String - Return String.Concat(GetFName(), " ", GetLName()) - End Function - Private Function GetFName() As String - Return fnames(rnd.Next(fnames.Count)) - End Function - Private Function GetLName() As String - Return lnames(rnd.Next(lnames.Count)) - End Function - Private Function GetWord() As String - Return words(rnd.Next(words.Count)) - End Function - End Class -End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module/Welcome.html b/VB/NonPersistentObjectsDemo.Module/Welcome.html deleted file mode 100644 index d27bb12..0000000 --- a/VB/NonPersistentObjectsDemo.Module/Welcome.html +++ /dev/null @@ -1,185 +0,0 @@ - - - - - Your XAF application - - - - - - -
- - - - - -
-
-

The XAF Solution Wizard has successfully generated the solution according to your settings.

-
    -
  • The NonPersistentObjectsDemo.Module project keeps your platform-agnostic code. - Add persistent objects code to the Business Objects folder of this project and XAF will automatically create a UI to create, read, update and delete these persistent objects.
  • -
  • The NonPersistentObjectsDemo.Win project is a startup project for the desktop application.
  • -
  • The NonPersistentObjectsDemo.Web project is a startup project for the web application.
  • -
  • To specify the database used by your application, modify the ConnectionString attribute in the configuration file located in the startup project.
  • -
  • To login, enter the "Admin" user name with empty password.
  • -
-
-
- - - - - -
-
- - - \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Web/Default.aspx b/VB/NonPersistentObjectsDemo.Web/Default.aspx deleted file mode 100644 index 918be8f..0000000 --- a/VB/NonPersistentObjectsDemo.Web/Default.aspx +++ /dev/null @@ -1,19 +0,0 @@ -<%@ Page Language="C#" AutoEventWireup="true" Inherits="Default" EnableViewState="false" - ValidateRequest="false" CodeBehind="Default.aspx.cs" %> -<%@ Register Assembly="DevExpress.ExpressApp.Web.v20.1" - Namespace="DevExpress.ExpressApp.Web.Templates" TagPrefix="cc3" %> -<%@ Register Assembly="DevExpress.ExpressApp.Web.v20.1" - Namespace="DevExpress.ExpressApp.Web.Controls" TagPrefix="cc4" %> - - - - Main Page - - - -
- -
- - - \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Web/Default.aspx.designer.vb b/VB/NonPersistentObjectsDemo.Web/Default.aspx.designer.vb deleted file mode 100644 index c8e5ce6..0000000 --- a/VB/NonPersistentObjectsDemo.Web/Default.aspx.designer.vb +++ /dev/null @@ -1,40 +0,0 @@ -'------------------------------------------------------------------------------ -' -' This code was generated by a tool. -' -' Changes to this file may cause incorrect behavior and will be lost if -' the code is regenerated. -' -'------------------------------------------------------------------------------ - - - -Partial Public Class [Default] - - ''' - ''' form2 control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected form2 As Global.System.Web.UI.HtmlControls.HtmlForm - - ''' - ''' ProgressControl control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected ProgressControl As Global.DevExpress.ExpressApp.Web.Controls.ASPxProgressControl - - ''' - ''' Content control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected Content As Global.System.Web.UI.HtmlControls.HtmlGenericControl -End Class diff --git a/VB/NonPersistentObjectsDemo.Web/Default.aspx.vb b/VB/NonPersistentObjectsDemo.Web/Default.aspx.vb deleted file mode 100644 index 90b1180..0000000 --- a/VB/NonPersistentObjectsDemo.Web/Default.aspx.vb +++ /dev/null @@ -1,20 +0,0 @@ -Imports System -Imports System.Collections.Generic -Imports System.Web.UI -Imports DevExpress.ExpressApp.Templates -Imports DevExpress.ExpressApp.Web -Imports DevExpress.ExpressApp.Web.Templates -Imports DevExpress.ExpressApp.Web.Templates.ActionContainers - -Partial Public Class [Default] - Inherits BaseXafPage - - Protected Overrides Function CreateContextActionsMenu() As ContextActionsMenu - Return New ContextActionsMenu(Me, "Edit", "RecordEdit", "ObjectsCreation", "ListView", "Reports") - End Function - Public Overrides ReadOnly Property InnerContentPlaceHolder() As Control - Get - Return Content - End Get - End Property -End Class \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Web/Error.aspx b/VB/NonPersistentObjectsDemo.Web/Error.aspx deleted file mode 100644 index 5cd4348..0000000 --- a/VB/NonPersistentObjectsDemo.Web/Error.aspx +++ /dev/null @@ -1,147 +0,0 @@ -<%@ Page Language="c#" AutoEventWireup="false" Inherits="ErrorPage" EnableViewState="false" - ValidateRequest="false" CodeBehind="Error.aspx.cs" %> - - - - Error - - - - -
- - - - -
-
-
- - - - - -
-

- -

-
- -
- -
- - - - -
- - - -

-

- -

- - We are currently unable to serve your request.
- You could go back and - try again or - restart the application. -
-

- - - - Show Error details - - - - Report error
-
-

- This error has been logged. If you have additional information that you believe - may have caused this error please report the problem.

- - - - - - - -
- -
- -
-
-
-
-
-
-
-
-
-
-
- -
- - diff --git a/VB/NonPersistentObjectsDemo.Web/Error.aspx.designer.vb b/VB/NonPersistentObjectsDemo.Web/Error.aspx.designer.vb deleted file mode 100644 index 050a7f5..0000000 --- a/VB/NonPersistentObjectsDemo.Web/Error.aspx.designer.vb +++ /dev/null @@ -1,166 +0,0 @@ -'------------------------------------------------------------------------------ -' -' This code was generated by a tool. -' -' Changes to this file may cause incorrect behavior and will be lost if -' the code is regenerated. -' -'------------------------------------------------------------------------------ - - - -Partial Public Class ErrorPage - - ''' - ''' Head1 control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected Head1 As Global.System.Web.UI.HtmlControls.HtmlHead - - ''' - ''' form1 control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected form1 As Global.System.Web.UI.HtmlControls.HtmlForm - - ''' - ''' ApplicationTitle control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected ApplicationTitle As Global.System.Web.UI.WebControls.Literal - - ''' - ''' InfoMessagesPanel control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected InfoMessagesPanel As Global.System.Web.UI.WebControls.Literal - - ''' - ''' Table1 control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected Table1 As Global.System.Web.UI.WebControls.Table - - ''' - ''' TableRow2 control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected TableRow2 As Global.System.Web.UI.WebControls.TableRow - - ''' - ''' ViewSite control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected ViewSite As Global.System.Web.UI.WebControls.TableCell - - ''' - ''' ErrorTitleLiteral control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected ErrorTitleLiteral As Global.System.Web.UI.WebControls.Literal - - ''' - ''' ErrorPanel control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected ErrorPanel As Global.System.Web.UI.WebControls.Panel - - ''' - ''' ApologizeMessage control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected ApologizeMessage As Global.System.Web.UI.WebControls.PlaceHolder - - ''' - ''' HyperLink1 control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected HyperLink1 As Global.System.Web.UI.WebControls.HyperLink - - ''' - ''' NavigateToStart control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected NavigateToStart As Global.System.Web.UI.WebControls.LinkButton - - ''' - ''' Details control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected Details As Global.System.Web.UI.WebControls.Panel - - ''' - ''' DetailsText control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected DetailsText As Global.System.Web.UI.WebControls.Literal - - ''' - ''' ReportForm control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected ReportForm As Global.System.Web.UI.WebControls.Panel - - ''' - ''' DescriptionTextBox control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected DescriptionTextBox As Global.System.Web.UI.WebControls.TextBox - - ''' - ''' ReportButton control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected ReportButton As Global.System.Web.UI.WebControls.Button -End Class diff --git a/VB/NonPersistentObjectsDemo.Web/Error.aspx.vb b/VB/NonPersistentObjectsDemo.Web/Error.aspx.vb deleted file mode 100644 index 053a4bf..0000000 --- a/VB/NonPersistentObjectsDemo.Web/Error.aspx.vb +++ /dev/null @@ -1,77 +0,0 @@ -Imports System -Imports System.Web.UI -Imports DevExpress.ExpressApp.Web -Imports DevExpress.ExpressApp.Web.SystemModule -Imports DevExpress.ExpressApp.Web.Templates -Imports DevExpress.ExpressApp.Web.TestScripts - -Partial Public Class ErrorPage - Inherits System.Web.UI.Page - - Protected Overrides Sub InitializeCulture() - If WebApplication.Instance IsNot Nothing Then - WebApplication.Instance.InitializeCulture() - End If - End Sub - Protected Overrides Sub OnPreInit(ByVal e As EventArgs) - MyBase.OnPreInit(e) - BaseXafPage.SetupCurrentTheme() - End Sub - Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load - If TestScriptsManager.EasyTestEnabled Then - Dim testScriptsManager As New TestScriptsManager(Page) - testScriptsManager.RegisterControl(JSLabelTestControl.ClassName, "FormCaption", TestControlType.Field, "FormCaption") - testScriptsManager.RegisterControl(JSLabelTestControl.ClassName, "DescriptionTextBox", TestControlType.Field, "Description") - testScriptsManager.RegisterControl(JSDefaultTestControl.ClassName, "ReportButton", TestControlType.Action, "Report") - testScriptsManager.AllControlRegistered() - ClientScript.RegisterStartupScript(Me.GetType(), "EasyTest", testScriptsManager.GetScript(), True) - End If - If WebApplication.Instance IsNot Nothing Then - ApplicationTitle.Text = WebApplication.Instance.Title - Else - ApplicationTitle.Text = "No application" - End If - Header.Title = "Application Error - " & ApplicationTitle.Text - - Dim errorInfo As ErrorInfo = ErrorHandling.GetApplicationError() - If errorInfo IsNot Nothing Then - If ErrorHandling.CanShowDetailedInformation Then - DetailsText.Text = errorInfo.GetTextualPresentation(True) - Else - Details.Visible = False - End If - ReportForm.Visible = ErrorHandling.CanSendAlertToAdmin - Else - ErrorPanel.Visible = False - End If - End Sub - #Region "Web Form Designer generated code" - Protected Overrides Sub OnInit(ByVal e As EventArgs) - InitializeComponent() - MyBase.OnInit(e) - End Sub - - Private Sub InitializeComponent() -'INSTANT VB NOTE: The following InitializeComponent event wireup was converted to a 'Handles' clause: -'ORIGINAL LINE: this.Load += new System.EventHandler(this.Page_Load); -'INSTANT VB NOTE: The following InitializeComponent event wireup was converted to a 'Handles' clause: -'ORIGINAL LINE: this.PreRender += new EventHandler(ErrorPage_PreRender); - End Sub - - Private Sub ErrorPage_PreRender(ByVal sender As Object, ByVal e As EventArgs) Handles Me.PreRender - RegisterThemeAssemblyController.RegisterThemeResources(DirectCast(sender, Page)) - End Sub - - - #End Region - Protected Sub ReportButton_Click(ByVal sender As Object, ByVal e As EventArgs) - Dim errorInfo As ErrorInfo = ErrorHandling.GetApplicationError() - If errorInfo IsNot Nothing Then - ErrorHandling.SendAlertToAdmin(errorInfo.Id, DescriptionTextBox.Text, errorInfo.Exception.Message) - ClientScript.RegisterStartupScript(Me.GetType(), "alert", "alert('Your report has been sent. Thank you.');", True) - End If - End Sub - Protected Sub NavigateToStart_Click(ByVal sender As Object, ByVal e As EventArgs) - WebApplication.Instance.LogOff() - End Sub -End Class diff --git a/VB/NonPersistentObjectsDemo.Web/Global.asax b/VB/NonPersistentObjectsDemo.Web/Global.asax deleted file mode 100644 index 129093f..0000000 --- a/VB/NonPersistentObjectsDemo.Web/Global.asax +++ /dev/null @@ -1 +0,0 @@ -<%@ Application Language="C#" CodeBehind="Global.asax.cs" Inherits="NonPersistentObjectsDemo.Web.Global"%> diff --git a/VB/NonPersistentObjectsDemo.Web/Global.asax.vb b/VB/NonPersistentObjectsDemo.Web/Global.asax.vb deleted file mode 100644 index 68b4fae..0000000 --- a/VB/NonPersistentObjectsDemo.Web/Global.asax.vb +++ /dev/null @@ -1,77 +0,0 @@ -Imports System -Imports System.Configuration -Imports System.Web.Configuration -Imports System.Web -Imports System.Web.Routing - -Imports DevExpress.ExpressApp -Imports DevExpress.Persistent.Base -Imports DevExpress.Persistent.BaseImpl -Imports DevExpress.ExpressApp.Security -Imports DevExpress.ExpressApp.Web -Imports DevExpress.Web - -Namespace NonPersistentObjectsDemo.Web - Public Class [Global] - Inherits System.Web.HttpApplication - - Public Sub New() - InitializeComponent() - End Sub - Protected Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) - RouteTable.Routes.RegisterXafRoutes() - DevExpress.ExpressApp.BaseObjectSpace.ThrowExceptionForNotRegisteredEntityType = True - AddHandler ASPxWebControl.CallbackError, AddressOf Application_Error -#If EASYTEST Then - DevExpress.ExpressApp.Web.TestScripts.TestScriptsManager.EasyTestEnabled = True -#End If - End Sub - Protected Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs) - Tracing.Initialize() - WebApplication.SetInstance(Session, New NonPersistentObjectsDemoAspNetApplication()) - 'SecurityStrategy security = (SecurityStrategy)WebApplication.Instance.Security; - 'security.RegisterXPOAdapterProviders(); - DevExpress.ExpressApp.Web.Templates.DefaultVerticalTemplateContentNew.ClearSizeLimit() - WebApplication.Instance.SwitchToNewStyle() - If ConfigurationManager.ConnectionStrings("ConnectionString") IsNot Nothing Then - WebApplication.Instance.ConnectionString = ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString - End If -#If EASYTEST Then - If ConfigurationManager.ConnectionStrings("EasyTestConnectionString") IsNot Nothing Then - WebApplication.Instance.ConnectionString = ConfigurationManager.ConnectionStrings("EasyTestConnectionString").ConnectionString - End If -#End If - WebApplication.Instance.ConnectionString = DevExpress.ExpressApp.Xpo.InMemoryDataStoreProvider.ConnectionString -#If DEBUG Then - If System.Diagnostics.Debugger.IsAttached AndAlso WebApplication.Instance.CheckCompatibilityType = CheckCompatibilityType.DatabaseSchema Then - WebApplication.Instance.DatabaseUpdateMode = DatabaseUpdateMode.UpdateDatabaseAlways - End If -#End If - WebApplication.Instance.Setup() - WebApplication.Instance.Start() - End Sub - Protected Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs) - End Sub - Protected Sub Application_EndRequest(ByVal sender As Object, ByVal e As EventArgs) - End Sub - Protected Sub Application_AuthenticateRequest(ByVal sender As Object, ByVal e As EventArgs) - End Sub - Protected Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs) - ErrorHandling.Instance.ProcessApplicationError() - End Sub - Protected Sub Session_End(ByVal sender As Object, ByVal e As EventArgs) - WebApplication.LogOff(Session) - WebApplication.DisposeInstance(Session) - End Sub - Protected Sub Application_End(ByVal sender As Object, ByVal e As EventArgs) - End Sub - #Region "Web Form Designer generated code" - ''' - ''' Required method for Designer support - do not modify - ''' the contents of this method with the code editor. - ''' - Private Sub InitializeComponent() - End Sub - #End Region - End Class -End Namespace diff --git a/VB/NonPersistentObjectsDemo.Web/Images/Logo.svg b/VB/NonPersistentObjectsDemo.Web/Images/Logo.svg deleted file mode 100644 index d0aa175..0000000 --- a/VB/NonPersistentObjectsDemo.Web/Images/Logo.svg +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - diff --git a/VB/NonPersistentObjectsDemo.Web/Images/ReadMe.txt b/VB/NonPersistentObjectsDemo.Web/Images/ReadMe.txt deleted file mode 100644 index 230befc..0000000 --- a/VB/NonPersistentObjectsDemo.Web/Images/ReadMe.txt +++ /dev/null @@ -1,12 +0,0 @@ -Folder Description - -The "Images" project folder is intended for storing custom image files. - - -Relevant Documentation - -Add and Override Images -https://docs.devexpress.com/eXpressAppFramework/112792 - -Assign a Custom Image -https://docs.devexpress.com/eXpressAppFramework/112744 diff --git a/VB/NonPersistentObjectsDemo.Web/Login.aspx b/VB/NonPersistentObjectsDemo.Web/Login.aspx deleted file mode 100644 index b610ff1..0000000 --- a/VB/NonPersistentObjectsDemo.Web/Login.aspx +++ /dev/null @@ -1,24 +0,0 @@ -<%@ Page Language="C#" AutoEventWireup="true" Inherits="LoginPage" EnableViewState="false" - ValidateRequest="false" CodeBehind="Login.aspx.cs" %> -<%@ Register Assembly="DevExpress.ExpressApp.Web.v20.1" - Namespace="DevExpress.ExpressApp.Web.Templates.ActionContainers" TagPrefix="cc2" %> -<%@ Register Assembly="DevExpress.ExpressApp.Web.v20.1" - Namespace="DevExpress.ExpressApp.Web.Templates.Controls" TagPrefix="tc" %> -<%@ Register Assembly="DevExpress.ExpressApp.Web.v20.1" - Namespace="DevExpress.ExpressApp.Web.Controls" TagPrefix="cc4" %> -<%@ Register Assembly="DevExpress.ExpressApp.Web.v20.1" - Namespace="DevExpress.ExpressApp.Web.Templates" TagPrefix="cc3" %> - - - - Logon - - -
-
- -
- -
- - diff --git a/VB/NonPersistentObjectsDemo.Web/Login.aspx.designer.vb b/VB/NonPersistentObjectsDemo.Web/Login.aspx.designer.vb deleted file mode 100644 index b663b4f..0000000 --- a/VB/NonPersistentObjectsDemo.Web/Login.aspx.designer.vb +++ /dev/null @@ -1,49 +0,0 @@ -'------------------------------------------------------------------------------ -' -' This code was generated by a tool. -' -' Changes to this file may cause incorrect behavior and will be lost if -' the code is regenerated. -' -'------------------------------------------------------------------------------ - - - -Partial Public Class LoginPage - - ''' - ''' Head1 control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected Head1 As Global.System.Web.UI.HtmlControls.HtmlHead - - ''' - ''' form1 control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected form1 As Global.System.Web.UI.HtmlControls.HtmlForm - - ''' - ''' ProgressControl control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected ProgressControl As Global.DevExpress.ExpressApp.Web.Controls.ASPxProgressControl - - ''' - ''' Content control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected Content As Global.System.Web.UI.HtmlControls.HtmlGenericControl -End Class diff --git a/VB/NonPersistentObjectsDemo.Web/Login.aspx.vb b/VB/NonPersistentObjectsDemo.Web/Login.aspx.vb deleted file mode 100644 index 8edd0a0..0000000 --- a/VB/NonPersistentObjectsDemo.Web/Login.aspx.vb +++ /dev/null @@ -1,14 +0,0 @@ -Imports System - -Imports DevExpress.ExpressApp.Web -Imports DevExpress.ExpressApp.Web.Templates - -Partial Public Class LoginPage - Inherits BaseXafPage - - Public Overrides ReadOnly Property InnerContentPlaceHolder() As System.Web.UI.Control - Get - Return Content - End Get - End Property -End Class diff --git a/VB/NonPersistentObjectsDemo.Web/Model.Desktop.xafml b/VB/NonPersistentObjectsDemo.Web/Model.Desktop.xafml deleted file mode 100644 index ab80ccd..0000000 --- a/VB/NonPersistentObjectsDemo.Web/Model.Desktop.xafml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/VB/NonPersistentObjectsDemo.Web/Model.Tablet.xafml b/VB/NonPersistentObjectsDemo.Web/Model.Tablet.xafml deleted file mode 100644 index ab80ccd..0000000 --- a/VB/NonPersistentObjectsDemo.Web/Model.Tablet.xafml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/VB/NonPersistentObjectsDemo.Web/Model.xafml b/VB/NonPersistentObjectsDemo.Web/Model.xafml deleted file mode 100644 index ab80ccd..0000000 --- a/VB/NonPersistentObjectsDemo.Web/Model.xafml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/VB/NonPersistentObjectsDemo.Web/My Project/AssemblyInfo.vb b/VB/NonPersistentObjectsDemo.Web/My Project/AssemblyInfo.vb deleted file mode 100644 index 13e64bb..0000000 --- a/VB/NonPersistentObjectsDemo.Web/My Project/AssemblyInfo.vb +++ /dev/null @@ -1,33 +0,0 @@ -Imports System.Reflection -Imports System.Runtime.CompilerServices -Imports System.Runtime.InteropServices - -' General Information about an assembly is controlled through the following -' set of attributes. Change these attribute values to modify the information -' associated with an assembly. - - - - - - - - - -' Setting ComVisible to false makes the types in this assembly not visible -' to COM components. If you need to access a type in this assembly from -' COM, set the ComVisible attribute to true on that type. - - -' The following GUID is for the ID of the typelib if this project is exposed to COM - - -' Version information for an assembly consists of the following four values: -' -' Major Version -' Minor Version -' Build Number -' Revision -' - - diff --git a/VB/NonPersistentObjectsDemo.Web/NonPersistentObjectsDemo.Web.vbproj b/VB/NonPersistentObjectsDemo.Web/NonPersistentObjectsDemo.Web.vbproj deleted file mode 100644 index 23f8676..0000000 --- a/VB/NonPersistentObjectsDemo.Web/NonPersistentObjectsDemo.Web.vbproj +++ /dev/null @@ -1,396 +0,0 @@ - - - - - Debug - AnyCPU - {8C3026D1-113C-4B88-9F91-236753790C60} - {349c5851-65df-11da-9384-00065b846f21};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} - Library - - NonPersistentObjectsDemo.Web - v4.5.2 - 512 - false - 44300 - enabled - disabled - false - - - On - Binary - Off - On - - - true - full - false - bin\ - true - true - prompt - true - - - pdbonly - true - bin\ - false - true - prompt - true - - - true - bin\ - true - true - EASYTEST=True - full - AnyCPU - prompt - true - - - - - - - - - - - - - - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - False - - - False - False - - - False - False - - - False - False - - - False - False - - - False - False - - - False - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - - - - - - - - - - Default.aspx - - - Error.aspx - - - Global.asax - - - Login.aspx - - - Component - - - Default.aspx - ASPXCodeBehind - - - Error.aspx - ASPXCodeBehind - - - Login.aspx - ASPXCodeBehind - - - - - - Designer - - - - - - - - - - - {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B} - NonPersistentObjectsDemo.Module.Web - True - - - {57ACDBDB-006E-43D3-9308-97857F2FF75D} - NonPersistentObjectsDemo.Module - True - - - - 10.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - - - - - - - - - - False - True - 2064 - / - - - False - False - - - False - - - - - diff --git a/VB/NonPersistentObjectsDemo.Web/ReadMe.txt b/VB/NonPersistentObjectsDemo.Web/ReadMe.txt deleted file mode 100644 index db74671..0000000 --- a/VB/NonPersistentObjectsDemo.Web/ReadMe.txt +++ /dev/null @@ -1,31 +0,0 @@ -Project Description - -This project implements an ASP.NET application. The ApplicationCode project -folder contains the WebApplication.cs(vb) file with the class that inherits -WebApplication. This class can be designed with the Application Designer that -allows you to view and customize application components: referenced modules, -security settings, data connection. Additionally, the root folder contains -Application Model difference files (XAFML files) that keep application settings -specific for the current application. Differences files can be designed with -the Model Editor. - - -Relevant Documentation - -Application Solution Components -https://docs.devexpress.com/eXpressAppFramework/112569 - -WebApplication Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Web.WebApplication - -XafApplication Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.XafApplication - -Application Designer -https://docs.devexpress.com/eXpressAppFramework/112827 - -Application Model -https://docs.devexpress.com/eXpressAppFramework/112579 - -Model Editor -https://docs.devexpress.com/eXpressAppFramework/112582 diff --git a/VB/NonPersistentObjectsDemo.Web/Web.config b/VB/NonPersistentObjectsDemo.Web/Web.config deleted file mode 100644 index f2b083e..0000000 --- a/VB/NonPersistentObjectsDemo.Web/Web.config +++ /dev/null @@ -1,185 +0,0 @@ - - - - - -
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Web/WebApplication.vb b/VB/NonPersistentObjectsDemo.Web/WebApplication.vb deleted file mode 100644 index 0271483..0000000 --- a/VB/NonPersistentObjectsDemo.Web/WebApplication.vb +++ /dev/null @@ -1,172 +0,0 @@ -Imports System -Imports DevExpress.ExpressApp -Imports System.ComponentModel -Imports DevExpress.ExpressApp.Web -Imports System.Collections.Generic -Imports DevExpress.ExpressApp.Xpo -Imports DevExpress.ExpressApp.Security -Imports DevExpress.ExpressApp.Security.ClientServer - -Namespace NonPersistentObjectsDemo.Web - ' For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Web.WebApplication - Partial Public Class NonPersistentObjectsDemoAspNetApplication - Inherits WebApplication - - Private module1 As DevExpress.ExpressApp.SystemModule.SystemModule - Private module2 As DevExpress.ExpressApp.Web.SystemModule.SystemAspNetModule - Private module3 As NonPersistentObjectsDemo.Module.NonPersistentObjectsDemoModule - Private module4 As NonPersistentObjectsDemo.Module.Web.NonPersistentObjectsDemoAspNetModule - Private securityModule1 As DevExpress.ExpressApp.Security.SecurityModule - Private securityStrategyComplex1 As DevExpress.ExpressApp.Security.SecurityStrategyComplex - Private authenticationStandard1 As DevExpress.ExpressApp.Security.AuthenticationStandard - Private objectsModule As DevExpress.ExpressApp.Objects.BusinessClassLibraryCustomizationModule - Private cloneObjectModule As DevExpress.ExpressApp.CloneObject.CloneObjectModule - Private conditionalAppearanceModule As DevExpress.ExpressApp.ConditionalAppearance.ConditionalAppearanceModule - Private fileAttachmentsAspNetModule As DevExpress.ExpressApp.FileAttachments.Web.FileAttachmentsAspNetModule - Private reportsModuleV2 As DevExpress.ExpressApp.ReportsV2.ReportsModuleV2 - Private reportsAspNetModuleV2 As DevExpress.ExpressApp.ReportsV2.Web.ReportsAspNetModuleV2 - Private schedulerModuleBase As DevExpress.ExpressApp.Scheduler.SchedulerModuleBase - Private schedulerAspNetModule As DevExpress.ExpressApp.Scheduler.Web.SchedulerAspNetModule - Private scriptRecorderModuleBase As DevExpress.ExpressApp.ScriptRecorder.ScriptRecorderModuleBase - Private scriptRecorderAspNetModule As DevExpress.ExpressApp.ScriptRecorder.Web.ScriptRecorderAspNetModule - Private treeListEditorsModuleBase As DevExpress.ExpressApp.TreeListEditors.TreeListEditorsModuleBase - Private treeListEditorsAspNetModule As DevExpress.ExpressApp.TreeListEditors.Web.TreeListEditorsAspNetModule - Private validationModule As DevExpress.ExpressApp.Validation.ValidationModule - Private validationAspNetModule As DevExpress.ExpressApp.Validation.Web.ValidationAspNetModule - - #Region "Default XAF configuration options (https:" 'www.devexpress.com/kb=T501418) - Shared Sub New() - EnableMultipleBrowserTabsSupport = True - DevExpress.ExpressApp.Web.Editors.ASPx.ASPxGridListEditor.AllowFilterControlHierarchy = True - DevExpress.ExpressApp.Web.Editors.ASPx.ASPxGridListEditor.MaxFilterControlHierarchyDepth = 3 - DevExpress.ExpressApp.Web.Editors.ASPx.ASPxCriteriaPropertyEditor.AllowFilterControlHierarchyDefault = True - DevExpress.ExpressApp.Web.Editors.ASPx.ASPxCriteriaPropertyEditor.MaxHierarchyDepthDefault = 3 - DevExpress.Persistent.Base.PasswordCryptographer.EnableRfc2898 = True - DevExpress.Persistent.Base.PasswordCryptographer.SupportLegacySha512 = False - End Sub - Private Sub InitializeDefaults() - LinkNewObjectToParentImmediately = False - OptimizedControllersCreation = True - End Sub - #End Region - Public Sub New() - InitializeComponent() - InitializeDefaults() - End Sub - Protected Overrides Function CreateViewUrlManager() As IViewUrlManager - Return New ViewUrlManager() - End Function - Protected Overrides Sub CreateDefaultObjectSpaceProvider(ByVal args As CreateCustomObjectSpaceProviderEventArgs) - 'args.ObjectSpaceProvider = new SecuredObjectSpaceProvider((SecurityStrategyComplex)Security, GetDataStoreProvider(args.ConnectionString, args.Connection), true); - args.ObjectSpaceProvider = New XPObjectSpaceProvider(GetDataStoreProvider(args.ConnectionString, args.Connection), True) - args.ObjectSpaceProviders.Add(New NonPersistentObjectSpaceProvider(TypesInfo, Nothing)) - End Sub - Private Function GetDataStoreProvider(ByVal connectionString As String, ByVal connection As System.Data.IDbConnection) As IXpoDataStoreProvider - Dim application As System.Web.HttpApplicationState = If(System.Web.HttpContext.Current IsNot Nothing, System.Web.HttpContext.Current.Application, Nothing) - Dim dataStoreProvider As IXpoDataStoreProvider = Nothing - If application IsNot Nothing AndAlso application("DataStoreProvider") IsNot Nothing Then - dataStoreProvider = TryCast(application("DataStoreProvider"), IXpoDataStoreProvider) - Else - dataStoreProvider = XPObjectSpaceProvider.GetDataStoreProvider(connectionString, connection, True) - If application IsNot Nothing Then - application("DataStoreProvider") = dataStoreProvider - End If - End If - Return dataStoreProvider - End Function - Private Sub NonPersistentObjectsDemoAspNetApplication_DatabaseVersionMismatch(ByVal sender As Object, ByVal e As DevExpress.ExpressApp.DatabaseVersionMismatchEventArgs) Handles Me.DatabaseVersionMismatch -#If EASYTEST Then - e.Updater.Update() - e.Handled = True -#Else - If System.Diagnostics.Debugger.IsAttached Then - e.Updater.Update() - e.Handled = True - Else - Dim message As String = "The application cannot connect to the specified database, " & "because the database doesn't exist, its version is older " & "than that of the application or its schema does not match " & "the ORM data model structure. To avoid this error, use one " & "of the solutions from the https://www.devexpress.com/kb=T367835 KB Article." - - If e.CompatibilityError IsNot Nothing AndAlso e.CompatibilityError.Exception IsNot Nothing Then - message &= vbCrLf & vbCrLf & "Inner exception: " & e.CompatibilityError.Exception.Message - End If - Throw New InvalidOperationException(message) - End If -#End If - End Sub - Private Sub InitializeComponent() - Me.module1 = New DevExpress.ExpressApp.SystemModule.SystemModule() - Me.module2 = New DevExpress.ExpressApp.Web.SystemModule.SystemAspNetModule() - Me.module3 = New NonPersistentObjectsDemo.Module.NonPersistentObjectsDemoModule() - Me.module4 = New NonPersistentObjectsDemo.Module.Web.NonPersistentObjectsDemoAspNetModule() - Me.securityModule1 = New DevExpress.ExpressApp.Security.SecurityModule() - Me.securityStrategyComplex1 = New DevExpress.ExpressApp.Security.SecurityStrategyComplex() - Me.securityStrategyComplex1.SupportNavigationPermissionsForTypes = False - Me.authenticationStandard1 = New DevExpress.ExpressApp.Security.AuthenticationStandard() - Me.objectsModule = New DevExpress.ExpressApp.Objects.BusinessClassLibraryCustomizationModule() - Me.cloneObjectModule = New DevExpress.ExpressApp.CloneObject.CloneObjectModule() - Me.conditionalAppearanceModule = New DevExpress.ExpressApp.ConditionalAppearance.ConditionalAppearanceModule() - Me.fileAttachmentsAspNetModule = New DevExpress.ExpressApp.FileAttachments.Web.FileAttachmentsAspNetModule() - Me.reportsModuleV2 = New DevExpress.ExpressApp.ReportsV2.ReportsModuleV2() - Me.reportsAspNetModuleV2 = New DevExpress.ExpressApp.ReportsV2.Web.ReportsAspNetModuleV2() - Me.schedulerModuleBase = New DevExpress.ExpressApp.Scheduler.SchedulerModuleBase() - Me.schedulerAspNetModule = New DevExpress.ExpressApp.Scheduler.Web.SchedulerAspNetModule() - Me.scriptRecorderModuleBase = New DevExpress.ExpressApp.ScriptRecorder.ScriptRecorderModuleBase() - Me.scriptRecorderAspNetModule = New DevExpress.ExpressApp.ScriptRecorder.Web.ScriptRecorderAspNetModule() - Me.treeListEditorsModuleBase = New DevExpress.ExpressApp.TreeListEditors.TreeListEditorsModuleBase() - Me.treeListEditorsAspNetModule = New DevExpress.ExpressApp.TreeListEditors.Web.TreeListEditorsAspNetModule() - Me.validationModule = New DevExpress.ExpressApp.Validation.ValidationModule() - Me.validationAspNetModule = New DevExpress.ExpressApp.Validation.Web.ValidationAspNetModule() - DirectCast(Me, System.ComponentModel.ISupportInitialize).BeginInit() - ' - ' securityStrategyComplex1 - ' - Me.securityStrategyComplex1.Authentication = Me.authenticationStandard1 - Me.securityStrategyComplex1.RoleType = GetType(DevExpress.Persistent.BaseImpl.PermissionPolicy.PermissionPolicyRole) - Me.securityStrategyComplex1.UserType = GetType(DevExpress.Persistent.BaseImpl.PermissionPolicy.PermissionPolicyUser) - ' - ' securityModule1 - ' - Me.securityModule1.UserType = GetType(DevExpress.Persistent.BaseImpl.PermissionPolicy.PermissionPolicyUser) - ' - ' authenticationStandard1 - ' - Me.authenticationStandard1.LogonParametersType = GetType(DevExpress.ExpressApp.Security.AuthenticationStandardLogonParameters) - ' - ' reportsModuleV2 - ' - Me.reportsModuleV2.EnableInplaceReports = True - Me.reportsModuleV2.ReportDataType = GetType(DevExpress.Persistent.BaseImpl.ReportDataV2) - Me.reportsModuleV2.ShowAdditionalNavigation = False - Me.reportsAspNetModuleV2.ReportViewerType = DevExpress.ExpressApp.ReportsV2.Web.ReportViewerTypes.HTML5 - Me.reportsModuleV2.ReportStoreMode = DevExpress.ExpressApp.ReportsV2.ReportStoreModes.XML - ' - ' NonPersistentObjectsDemoAspNetApplication - ' - Me.ApplicationName = "NonPersistentObjectsDemo" - Me.CheckCompatibilityType = DevExpress.ExpressApp.CheckCompatibilityType.DatabaseSchema - Me.Modules.Add(Me.module1) - Me.Modules.Add(Me.module2) - Me.Modules.Add(Me.module3) - Me.Modules.Add(Me.module4) - Me.Modules.Add(Me.securityModule1) - 'this.Security = this.securityStrategyComplex1; - Me.Modules.Add(Me.objectsModule) - Me.Modules.Add(Me.cloneObjectModule) - Me.Modules.Add(Me.conditionalAppearanceModule) - Me.Modules.Add(Me.fileAttachmentsAspNetModule) - Me.Modules.Add(Me.reportsModuleV2) - Me.Modules.Add(Me.reportsAspNetModuleV2) - Me.Modules.Add(Me.schedulerModuleBase) - Me.Modules.Add(Me.schedulerAspNetModule) - Me.Modules.Add(Me.scriptRecorderModuleBase) - Me.Modules.Add(Me.scriptRecorderAspNetModule) - Me.Modules.Add(Me.treeListEditorsModuleBase) - Me.Modules.Add(Me.treeListEditorsAspNetModule) - Me.Modules.Add(Me.validationModule) - Me.Modules.Add(Me.validationAspNetModule) -'INSTANT VB NOTE: The following InitializeComponent event wireup was converted to a 'Handles' clause: -'ORIGINAL LINE: this.DatabaseVersionMismatch += new System.EventHandler(this.NonPersistentObjectsDemoAspNetApplication_DatabaseVersionMismatch); - DirectCast(Me, System.ComponentModel.ISupportInitialize).EndInit() - - End Sub - End Class -End Namespace diff --git a/VB/NonPersistentObjectsDemo.Win/App.config b/VB/NonPersistentObjectsDemo.Win/App.config deleted file mode 100644 index 7c38ed8..0000000 --- a/VB/NonPersistentObjectsDemo.Win/App.config +++ /dev/null @@ -1,46 +0,0 @@ - - - - -
- - - - - - System - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/VB/NonPersistentObjectsDemo.Win/ExpressApp.ico b/VB/NonPersistentObjectsDemo.Win/ExpressApp.ico deleted file mode 100644 index e6810fc4f94dccd83ec54db6e9ef51a4950f6638..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113407 zcmeDk30RC>_nnGD$(lBW>}&WWLfO~sOV%P;Lu1KWO_mahEZG%NmWV7-A#2J~*&?)9 zqo{;R%l*%px3^}dnQ3O4EZ_Iv=Q(rVyPbRPId|@Q?!6SnqLir`H7KwfP_vXM%ATSq zO-+3rS&{4J5yVJISwN zPx8?Z;4(l{01JTi04#up09^od04@TMX-5fpkxGiqt29Dp9OtG-9N#cb5ex;}yXYI~ zBa@F5CoA<~bF4TWmN5*V1wa(0LqIx{zLZKksk->JpbW@JIacZxmzLL>=NV^kKS0fCm5!j!9xtQxNYT zp14ckyAlBM7wZe+SXV~+1`uZ_z+C{H;<$7@?+1RYVn6tJqfSvt4DbeEEU01OU~vE# z!%?QF3CY*H7(5&*b#_S;4BZzd4(Q=kRB_lA(c zd%0~EQywfYwqK0<4t!%@h3&x$0PG_+0dV^Qu!&tDA%%q{?FoKiJMA4+;umJtGNI(eHx=QC(eaX-f3xdr(C;c|y=OBsKztpI)C z?L<0lUI8Je9}%+Z0wEi((Dc8{r15v(M#qVHM+l_B{sq%t0x0=Eu*pntBd?0{Xtb8( z2uCO*Rz90exFq^|rHV4ZKL2DaA)$~*Rt}91fAv-qvi@>0 ze&#=oZ9Mk>m3dKfzuDv@ma*X)l8byt^B(wv@2#W1-Ff zd@}ChN%9#P(^%-=NT3(`a$>xNkWX2(AMg{$7QA?w@3r8Med~8&;W)Mu{NJLiQ5KBB z{~%A=VEA?bI1TU!0O?i&DE`mFH~z;n0J!O(j^|&FCnP72!ARS;5((A=Ub>SYO+AL) z@Lkg9ut`U7V;iv<0Nb`!0N556(*|`hr{@lmj{x!)lw~?MT`_VYA50&@1kvprw?6Ua zBjP(7{M#@|CAQgQnE<{|;Knfvj)l$$gzc9YFB7q-zVhH1zyyJx0>E{iuvGZ2SsY&0 z2QBw!Jn6A6m&gp$)9o+zmpJw_DHSd*51Kyg8}Sk&p_ctry)m@9?@BtcjbgoPJ}QsJp0DUL!IIIE0FayAO zV7UxkX1;MEA3mDr$V;pnGXR+j-q_94wx0opG}U5%YXkJ8XxnE<5rL}*$HFH zOV3Ki-8eRbH4-i_n6dJ)Xs+y;GNXM809G@344VXr%3sTgkgq)B?$@y1ReKdbPoeG? z8_(->*p_Rw7uE%sgYdSEJ9%=ZKj}8q6lmB7fbB*xy)eJxGoQZ`0{=ViyavmP{C2un zG8e@E1&-;BHkbIpTocDH3{F@f5o73esN(VCOc)0XGe`%n{r&h^I`kh8nnzf6G|)!m z@Z|qkOzw0L&v+l#CxscD>pn>-8RzrHf%QOA2V}(Lza*%*?8pP`D_V%9foII#e>X2? zLQ=mGVzz^>XILg^^9cKN39r*2yxLMix_XwRga0MAKMeoT#y0IV0In^omZF7C)_^}Z zzJ>#TTZeTY+BaTYWTbaVUN|Sjw7YK8epq*b7uW{#rQva3=gS}0PuS!*PdIn(R+0lv zPjDO|{tpPjIW*2w5qx0n0p@?ia1;IC$25oUiOiRw=S*?_^!gO`=S&#a#LNF_#ZZ^?{xV-@Q=NW8b2!2SD$oc_c z!tzExYOy3?LW>>t4ya zoiycU;S%a7yCiItu0sJ4BRv5o*|% zD*$hRQ2_E;mnn-NHt7d>T?4@O2>UYKvXXGaORqihwr4n}DqmYBjtF{>5arD`1_L+J zP%>5$g@YbTJSvLMOE>c!Dk`a5{At-|iphVD*nIf+&Ka6{?d@XImp72!bHFu3-aL7~ zv0h`7!Efkv3J?}3CN1Kz;!jusE_xizOS9lN?$PxJz&^zf0Na^pfEWP5F(7YR9RGBv z0E+oh(tY?d$cr~`d3@u4w;F$D738AVy5vDKFOJthf7=S8m>(^h=s{kB;|*R~Wc~gM zc<1wHCd5_N99>9~QeL#qm#lP_m2MxDLy0d>To-4PDF8PBasb5ZmhmMPaIncx`_Q<@%DYD`Kp*0L41n{?;yeVthw>3kx6`2ED8h(Y z3&nk9)Pa!J#C@dasseP0qF2x#+vSpa#wOjsjdQNc0A2ty0C2oe2cQ7}j&lTYaCOa? z^)PAa$M`5KT;~#oTLQm%#oT5S7ZLGsy<4#Uaq~m{MO0oyBHvjEy95wx5J|N0Ecd^Ve05s{`8E^NC|cTAY^ zyH7~Bt%THtwc)D3N8FFV^=8!l;{BhXJ`BTW4CmdW!aW)+mjFH3-Q$ z1kxAd!~H1U{Frh?L;Vny2K^&IkBZl_&>mX1|hhX^O9WZo8H&6gLHR< zq%FpWYpucz>HxJ|FEn2Qx`RYe*O*tw3ie6)jO|IGcutg}S(FF8KYs|y@m;VisQV|% z;2tKf)1vM&?r%&wOz)-Po{liXtgVCo5TC(yV8MLB4NEOj8a4?R#N!TQ8hM$~J~W-M zcg#2D!2LqOe8K%dO6qZKwABB4(^YvVMDZ*1>H>=SVJ44AAoHv;$L)zKWr9^F$D7!a3_M>69AVNMH_m~z=sR> zv3T`KnVfOYQy>pMH>0!3#9tg#5(-)O|pk*I>Wrd#^|6=;_gVvo8g-fJA>YZboBCWZVNY5!DUs1Rx@zGb7gFZ{byFbW_7uPayeU{gc z?;G1rtS5r)4sW?ocOC!B<9!Lid7K!0o5~_rXgGbIix)5I8gc+=-5UBVBX4-AZ*2cZ zdJ}^BIe7j9$4q!e1Ltj`#@IaNz%~WvxBPqcLWvdPNw06>dNA%=4+ki{E==oJm!ccu z%EM3kahhN;a6h&zL;v4VHu9jE7YEkU_GM)+mvFkjkZRpU!t$21i*g}U1QNPk!}gh% zf0BHQUH=7q*lyMmk*oZ?X?<8x?G=^-|BJZheH9=O0QEqu0XhKS{8U_7XULCG5tvZV zS3C`2B2r>sgKPRpV$#P#SjFuJBVlyADvpPvMAA>E?*lkWjc<#}^bKtB`jBFgOAyE= z0Y!NUD+B5Ul+C}==T5QCc>}ZpkgX4pfONpE03dEZ-Bl7afI|h~J^=Cn`y3OA(v>$7 zz29LB`8fjMnitBOkps@_nn;`ltp_K*u1Snc#)$MDhb7RBdslm8#3EBN7+=BaBt^lE z1mXHV6>VLUwF?#%%k zYBXBBHaan!YnYW0{UWz%iOs=JaHBpH+WEq4$d~I6`EYHB!`L|(9}G7=*x~2^!@(aO zy28;(=x{}_lNtbdXhTAEu(JV?GT6{N6x$e%ZrWz$V0yUCAiu~iLry*O`XlXw88%|RRc zQ(u570FD2YqL!kAO-2KKPXK~Sg-PmB_Iw-X>$d?qONz3>2mA=XUft1SajTw%Oz;(7;QRsPByukyf@ICNF+}iEvhABs`x{hQ3h| zfAD|Mw@gyX*5l+Y|FSaiRdfXUKM)~d9Y}MTETp|I+;{-bY8@WhuCp z-%qA;3QI)m0e=)hSE+KSz#cH%ZN=3;#y$PVA7Ft5^d(Sd0`(}a!rt?aoAe$O?>$@+ z;Qs+}=r)0#gIxl*sJ;f*v{=H5Bb6WB_Ddvp)K_o`BjkC}Ib&FyDAVA*0oy=d3hr+# z#YYkRz;+SOWk?cV^0QgOm_mM}ysgowTaqf9111l+U4I)Uff%gRrR@COjL zQmLZRYs0wSq6NULoRx|OVYogcmY&XA2tnOec^TA!#k(EK%2$f;X{8EQGWX5^JP!eI z9o`WD_d8nvR4uZ3*Mv*agm;gK+iMob6V%fbXT;o5Sc(pyRh-`^2rtHG ztK3odn8AZK-pjWc^!-E`UcDXObP{}LLY&FP3=dbmt~`l3hK}a(t-CL z3p02}q+nbT?kwswIIRahC%fv)CU&|impD!J!v;7(4it`VN~5Y$`4^mrd9 zqeqVU<2aeQr-c{42%U1KEGdw-Mk#p+@EhAhMxR_1AGMr> zpWQ&bj4m;z6?Q%a@2su9oWHK{9IV>y-qr z;8_7CJ@1)^%AngTtPbGW3o&_2Dpg)#9`wF_FTisUAYBYTzPy&6WhfPHKYCxH*DDU^ ziu1zL<2ZnKZix4V2^zfDObl+x^bL4AR2aiNcR_R!I%&CFA|nc;9gZ zXa?ZCR}#ak2a9Kzc+YHMdOR=6TSo+F4UxLcf(h7UzW~l+e&e{Uq79BMnEX*ESMZ)? z!@Se%Qae-j@aV*H&Pw z<_5g?=L^!sxbbYL$yP$J|6=ZnP1rkHM==Lj=6r{X<#x+kJ^ED`6zig63!39bRo2GEqK4&c2E zBKkobqlztZkAruD}jk4qb*)fhklnpm!25dz*Lwx;H9%Z=U#H;Rrc&|%=f}eJsOb5CJ%r=Ag)(_8s{N9r%uJjE zk^Ey_CST?q5+)vF=ZkliNJ3K?amEx& zp4KO#I z$2|;Pp7K`$x1{@L!tfRQ;dx9+?%gdZkz`*uMig_NlgS^~G3hm4y5BYg_XL3T0A~T> z0I*HFR$O-GL-?J(3|^^hcvp!#)|aegWyiw#GVeKKpkEX{tC->lwdwn-3?O|Y5#gw3 zEDE>O{&*icj!|SaxHgL81PRAD!9cs{eM_MQ7VxCk!f`*ntg@bmIFS;>>5e@XIyIL`s(qZ3Qtt1m2H+!s9x(4WgS`u=CkS6JLqez^99^H-cR;TQ*X zAdn|G55{x%IL1L)_t-A6yqP?3Y~DdYlCnGLGc&kn!r;gKayx+frI6Bb!+GK|X?~TB z`u1h7ahD>z3=cM$19(pW^aD^58=LMs_dvW~Rc79N?uw=DR|eu;rEIZpi15-a&u`0L zSxm8c(eL--|3#kVD+?Fu!Tnx+cwVN^XM4+{S)SoI#uLBC$xB~Fe$#qksOwzb^5Gc| ziS)~g@+x~Bry|SE;HK}g7d7S<9@`W(+hLQ z0M62SeZQ>mkP-dntT5UH{WeNPRvB+zLB2SrbN;R6r_XNUnv!5y1>JZSU%K%s-LDE; zgZ>G)a7=C}6+bH?GOcqhSXN=~(sOS~=%L4=SY8I_Y549WNzz{uht?awwmgxCMut{i zyR`nDqy*A+9LGEK98A)5zcL>E24h#CaU}q*qw>zBQovoJcPTAhwC?qvGuD%Ye)`V5 zDNycX0FII*`IT{SZ6?DBe?O2Ub+jW$k|NrQv<1G&?w{m4qy~-6xrciXYpG$EDr5f zF0$2WC*Ih=HBLn~Hy8LWwmEb_5qgTw9>R+v2->Da{&*Dw8oXkGYXog978;uT;`<+1 zNnBq+x|I~ex&G>J=x}vH+xjGfJG(X|8G0DOiR3t;4gBL?aNz`Y61YvlM#iAcxY5=} zHw)ep=Gp{qk^r|N;h+uD;+UeXOv1rJ`wiL|${=bqTxsJy5gY)#tKzS^Cjx2y(+quv z;2iwVaU9?5Pb2UD^i&`R=(pv0`}tg`19t&j0eS++elJJ`lKp?wa^e7+>;M__%3tss z=X`kXeF6ZtwU<-Q|3||n8o<-0zl{;nuX}w3dcy&h19SqY{M%^%n=_{0zOn)SB^N>Y z-wu_9AF{uD&$JP!U$q^;96&z%c(Rn^Z%RX-%f$Yb;UU_-zq|%NgRh|}Pg6-%_f zge0;S7RUIP(f&7NM8A>h0WuYP?p~lh2mv>&XjHJF$DO!WDNK&C_#v+U_x~t1`c48I z9}C;}kc793D_HtSBc2nKgceET+^cY!|MU!KeIje%YkWC*i+h67?XyY48~UF52j!$u zuwERLhJ=4zT>2hJNp&6sc_++`cV&uxzqC9Ir1dm}Tp{hN@|_vWLHgrFQ{b>rMjzWe3)mJFNVT{^PTBrF~3o$LQiqN*@j zg}f12PF~~MyX3wri zypq))-vDdKWhI-`hVLE#*p{Q-9^L`>76A9{WyN2fbienlpg*mCq5e$8$O7M$!uwlM z7qL9@l4n{R@3#EYMDW|`VH4D)k|&@4R9x8CNp>FKw+rPL62K-rXKlOhrFS?{V5A*j(u>6$LZ(GZY&wnbO<>hD8zZ3&~22h&4-#=Bx;^_JgZ5-;4 z*87)Av3$k)eQ&IYlUYTCp&sM7@-gdQm|D8`(JDeNzZ&O0s0TIvg_4x5NYcFz_^V}A zQTfF}9gx5N0)0+pC*ZySApUL_*`!r5sn`Vdyeo>=e=1(Qb7^e38H#6*=yNAwVDs*+ zPAxa?Uxh&O_fh{;S(b;cMKZCO)|tigX9)np@<;za|6H1wJE%pJOITU|cE5EJ)d70V zWCZXf2p~rS{w$LS@9&DlCTld{ha}9vQEmfNK83EmlmIMSAr zdlx(2(|Z`+VW^0EY7r;m#yrH``z{OZJZVrb9`9&G{Z^@YAS4ayp8YxZ70~aP77C$L z=Cb1Z0eDxvJl~}(tEIqp0rM2|K8eibktc78aLG?UiuZpk?KhjW1A6d$wA^@ueYLnZ zCCidydBZVpq(Po#ssLPguI~4qJ;S@9H|GKzXvNM7=k1rO4Mw8^WS6@X`mL^7rI=QcwAxGrZ5pdnE@QIY6AzubJm zw_;Al$|9Lxn+9n_S}Q<)<;96(%Chy)>ANa;^TKo2cpt+-fQ0~k0rUYR!Bq$1y#wII zC-pbJ4~K85{4EA)6@2TqygZOodTUXC(_()%@sc1f+}Fl)4S@j80HXj}0r0Om(r>d# zEpNb6oCe>9e4FvNNWO$lq#0@FEz2M9{Q+nYt&2e4yMuC-g>Kw`zXF4@8JfEAZ{_@IgYTY-k_W!mX?;|-I*IRPW0^$Zu3-O9fM5LiD5f1?ldBa> zi$pvKeE6#+Pv^(`CbcL&=sFV;5Gy@>SSC?8E6^YBTxiUQSFBCH`&6F22Dy}veOh|n z$}7b@=<_9&g#+vrN^7uelHxCCJY4r*3?TVkNwglxucA+AKCL&%_RgZTau5~&R-$zB znFjpUO0D<)L>b$%yOy& zc*b4ynvOWRGhuAvA}3m8Dw90k8JCpzvcyB(55aW-L4M(T@y|X=jvdP^h(k(uD#W*9 zL@2XO-*b#(hVs%QQ~FAa<-4|@n@>m_$l=@*LU!M#*YMVb65;`GrQo{WjRZnILi;YQ z!L|V3`xVEhzB?r!3*a6BmR%e^F=2S8MH882&YO^a8~JzLjY0bDl2#JJ<43`J!?*R=c2neEu#RpD5o+hsDbbbxI{QSavZo78iDkSA^yIrtiQJmsf>`9fAI} zJO=;EsDq;*}~&_3)Hdo@6D$vWvn~hCjCbwaO)TCNZ0Y zmXVjNG?tkT|A(pHB;%E^Sno6CH=kY$eT1au9_arm!@hthzWG0p3=@{U9J&HM7!j7s zW)pmGQDj*vGHlp>$@nBHmQDG`P{rlOIeGM3Q8|_Nw>>GEXZY5=qy~8)BadY}J0z^K z;Cd1LPRTF5J88#FNx39E9=5eI@=j{+CdGmB(MpiIA^3lJQ7XEY!c&aF7pesLwC0LA_s5Jm}>m88+kr@2QSST?fXt zlFluW7h>crDh%iBjU*Lgx#O{k0_0}~fO?>Keq9t@68Yo4iM$N%!Qq&D;2wDV7S`b; zp{`;O;(ePEp)`&`_Mm4{gqB3gEmu5BPMWaQ&uS;Qx|H1z!~ zGTocJ70z4#8_Y3S?-M0E)E||^ATLDWD8t`EZnBgW5t~dbgGQlc!!!5)1{3~LwColK zNmfGSg)BUTG-d1a%PLn%)5*AgEX_K(WL*3`vF^SWExWm}MkI+rUdSl_S(1vW!s7j3 z{vu`fACbScEOqz)?SDzjP>%Nh*S?7>tP!E#(h&I{5LGw+KmIF`e>ui~IQIU%cm2`t zsYosVik$ylg!v!pdn|VNhj&t$)!v3BW?nl3= zBeneHx&DJ|cQ_9l1nWOFR!BCMGFVINi#&W^zFP2`*ME5Vj%#wbHiv6;3KcGQCIei9 zl;J%Wd9DBAIWgRC1sY@m+{a&bj*vW9LzLG1=Jj83<;AsnT(j3^#8hE6eYcC$XZ&%` zqrCe+sBfw1D4W~`>kF_rLoypFW3o{wX1NmK*or zdCz}ce4cW8OtK9jK9IJ0P^f8 z@_&zagNuGs^p}_6cisQ)E64la@gm(#N|U@os&*W1sh}Uuop>9MXz@w}W2O zc@J@9Mgcej;2RwHW&^&-QI;&c_;3kxu*ozD@RXI0 zT*Lpv@4vhSS=13GCO$v<-41<-+YbPBF%ALXTwU<)26Mi2!W=X%d@D$5R zUc)hf{s4-_^svd=a^Nhp?$mXl?`!wEMc*-)nJxW(0;a*U8HfY#en*@YNi*PHTg;z7 z>4Qx)fwojB%N_^uR{O;F0O>VHd^=Pa z{}RF96`&Pw5{bX*^(tX_{|kQN_u?dG;xCBECR2IjkMly@i@>|T_}_e%g%ma!3wX+X zrzGI`+v<#sEbRI%Y3RHD@IA?$0HXI0WhIV&dpPzllwo=5+(Rhu@4df8R(VxKIyR{R z{Mh#&s{?&1f|Y+YPBs|_bpZFd%k$s*Thbo?t7TPD#M66MJD?6ovakKO$XXbk-=K{8 z6~)HC9&ZJ$7ye;w%c{R#P8C%EHre=x$x7INxV(PxP)6m7V&Pwnmrbtx2jq|SXXsxo zr-~q+ewX^qe?{iO+2mR zDohR)?T4~J-ODHdd|w-NDop`s{W&&i2;ZLp#=?rxj~XvG`u=7_v>rO1 zYmoPUY?0j9g1Y%^k|bvuugHzQzZns(iOEm*jHyGJfK$GABGbA}sJF-DQC=IzyMKoM z=kKgPY|>YbJY{4e|2K1yM{MFQXIl6EPS*bsd9%qvIr9|jfN6!4jZLZmZh4-Wx&Zh} z^d&2V=sz4O{gwgqzmn~(O9_67G*MV^^BANc&A1=ajk;f+Y%E?PXIoOtq z9!V0j3Eq<FK7C86Qp5Qn~l;){&D6vl7FCI5Tx1$j;1l@uZc-MIJb z0iYv@>ObwK&z=dBqpW`Wei=X6qyfk?t&BQ=`jfb>*z%Xr^*3cipI4Su)`ID9Zr0_O z7GM0ExWPbAw_i%n-&>Uy>=CR0iI40>JTcH~^lHmb4DwxwTrqt)%q% z*}A_i|9@k~Y@!D;odAG$+~9vpTwU1lZ)Cy$%T&Yx`dnI1r~`QZ4EtByx96=7@;|5Y zf9C(W96GAC?`HAq121rg%DIoQN`{YQ?6T|@yGyo zK1CI~!{Lk9ji`9s`IIstIVJHkirj#OYr-i-0*3=B#?7HveD3g4ZXhkGBtCpP33EHq z=(#~0kO;0o6;;lPC( zT#usoEK&$wV2a!n$pOZ2MM3*Gg>&6Z{uFF}U^qh`rAfP?yv4=|!jp+@=uD z5#!d+a4IGTqp4@G81lKP)H5i)YmJnXxZcG-f^Kzza8m)dQ#i$EV1USL6b0PMe8gjw zc5mfCGGPKv0%DoHxCY_Uo-4vzFFF#6|_s<2Gm6PCy$0#T9I4C>#zwo-9IQ(u>sLm^HU>09- z1l=eNUiz>>;dOIcbPAgR+UP?#l&`o5rs(FB6w!(6)-PrOI!U-wv4ptp8zoiLiR)2P z#~C+M2FA@~Xj&AX$w1JpFA&bSnKB8wnI4N94m)bRZWd(9)4(btV;DC#NYD*LAwSVT zIH2N`awGrI(Ba%}i*f5C7nuB^{9LywHQRTJuxBOmqlM_;4w@#(Vp5 zDx(-RV=YZ;apmK>uj7WXx+*L(zpu54S{s+5qj349-WAgr-8<_u zFRQgzureIQvC~@BC3t3fB~>L47knQBF;|pHahoI%-Z>yR!*tDFS*b*?a|3A3O`%!tu-pOaz}*$`>%~t2x+u&k-y?+ z&T-bukew?N$JY$VIv)NiT*;>6i*vmUsGgm}XM|Uo-!8G*to^H}ZC5bo-}l{shiO}V?)sMnG?Qvx^8iK_N;1J z>^a+UUB(V6RQwoj?b_av4ywnZF%LgIK3dyOxI`H!HyYT z)|tnwVZz$sV;{6r^y{iIEX2gPGN{n{o=ta{H{eB=^m*%37YDtif)y@#+yWtg zzq8ra-8|w+?fTX3v4T3ad2O52*k;tOeoGv?8CE))cH`a7kVhNhUbZ-(#nP;PcS6!k z_q%agDZBgKw$xhopxGPcE;}<7GR|AG57wk^B)bkaGBKOG;Oydws$u$F+JEfajC$jH z(b`I>fuqKpDOb)uoa%Y^jAqJ%f;Ej7npEybz3!jgK=(x_Xl{IrzN&u z*7DU-)lJmR=tkkOVVipE-rcrK@!0DsJ~kWfZc%)xaBuNa)j8TMLn?svboP|nKf=>{ z#phX8nsji4=O>oBLPy<=Q$2P}F_{VIXVyO5LFt{YMz1#u+;e`W4%ln>^jJ-5GrKpt zom$Tk%3a4sxyEK{I(eC-2l}$xdylyAlD{KsBaPQIn!HWKKCS4g5o;O3u zirS^Wb>Wnc7Nb>rrYEZ9oOpjrH}$8pCd=@2)n2ih@r?%dTWnMq6`tjDe)u~@--l-! z>aYfEa!*&q#RzZWje|zQ3pu(vHj|--+SasM~}V}%~z6+TOKVB$r>4Q z!N!1cJKLb~y8ulo4sZn=3KRa_LHeiTRt*gV9-flke zg~gVB)X0||>#RE*&?aWq#`|Y3y4cx{_@b0BAoXLwnKx^7*kh7(ZuV}i8lZHg|LWb_ zm4l+foRpi}S89_uFDKN~A}{ssDx*;EHc>-|Am`v z(N-f49^RyBySRVPMb5XvyV{)nq4IqPYn8$`waBakezrXZeyBHRNRU~RDC@2 zk~uRIlPp^I)adWuh&6hgUX3}ar)p@CZb^3+J00vtZC%i~^1%anU9>Jn?jLz?Y3nP= z_3Fjv_4?M$`cRE#F)C&YSIs=0bb8*26M2^!PPa*{y2<_e;0~cwWKEZ6luOR;#fQJE z8c>xv^VYtZb-H1XDIQU4v{?fbY(^=x?%2t5>^(cvew1qaGvT9qPG~>qc^%;O%?;11 z4A3{C7WDt<4F8kpg*O*HsNvYO`CfB~nHiw?w&B6+YRP^|%R0?bpQqGdpzcOr&zzMm zc3Dlf=5!jV+27};+EwkXA)ky4XZt98`MuGem;JbjLS^0<16Z#bP7FRS9w zSHCftXl> z-0|&Zbl5(;buCNdy^3K~HjOeeRi2(7tVsGaO3*%ZV@i^qP1fO>RQjfm=3$XJL0ZeA z_irBdy_MM->rBcn@XWdaS)8EUjWs!M-H&z7sFbjv&CuQtJDLwS(&^qh&|UX!dre!L zMWHo0H{FlvZp}R6z1ilzVp9d*9ry1wzMJ=tVYknT^Dn73x6}%185teb>EKB7I{}o| zyM|}O@~5yHZm-je-6QQ))s+`|CF?bhZ)G}o@FA;e2HWqq=||P-cr=T%RH5afVRUiaU}_;i14Qu%mi=Q-|gM;+0dK1OK=>yt|0OLlk*=R*#s=PIUI zwDSIJdc!4s>MMn3A%oUlU(cyYMI1V0G9-Q9>aT%Hw+$w`Wmz{*eY2%$@5^)ClaA`e zyj7a@QcK&uR?X%gvL?)!?WXCJ(9NP_J;%bzWAE4SG<@VdplW!!^M_ISy6eIt?i@P> z!cSPUJwN&6XV(a&Y|R5NekA__P*L{jPZNbl&+fb-*)y5 zH5|E5eX!}8=Ycm~XCJg0w`)*3HLm5}ICo0-WzJrOvu^iOqia-qvezuGRnpB92ZyG9 zTXDhsuGQ1KjVixzsy_JGQpK6A_O|FpIkut$S=hnU*!#w7=`()dt*tZ#ds_w~|iDxU#xT0ja zS>;Cc>#eOgL66$8h8$8btbXyCh284uV>xR!nIP2;C$9=~;My*r-vd+dkby8Gv)cf6cs&cG7oiFD9 z=+wq&=)zCek7ZvQ*!j+ZE6KszHEw+Ski1RVD!X6(!55<^tKV@yPAPr-y0?e!qOSY$ z8b6+G{i%_LQJZyc!PnLGKU#$JHH%&xX|ScHYvxRY!tC$n)!aP;HrV}Cv@2Zy&GJ?D z)~NG7Sw}`Xo$yP2KgOco(dABU)BDa*O0sy#S$oImX0QEE?P9CN9N&Cw<8+H2S_vU~ zMstI!Ep-n1uB~RG@y^pMtdnz>D8HE6EW2&i_ij(W<>qk5DRRKk`0&T;>ZMIme&cd2 zdqUrgDQb&H8KsVzp7zAEhW&l#wr0(;qwhN(H>+pUF?&Fq+mcS7W?1L9f0)`-^PBPX z8GA!AHXK(=`s8N#vHGr`0d0@W*)V-mNK?vs0rgLx*R$*^#k1~D+S~1M@|MJFo|VjQ z*)4kWRp-(4LDzPx_f9n39g?xFot|@cy4S@@$NcNC>lTI^^p38qeew0fDqW@}Mty#w zb8Gn}XqJvmQ3>xDZtnN4zRSYh9TL-LY^|(({hp^`Vdcph%Jo>UcHIAB?0#8$xcaQr z>d7xyZ6>YBe!VYS!zasgb?OYggIgjLZw%RJGD&SL=k65GF>`wxF4k$<@IgY@1m*N= z_5-%;zN&xSrOxn(`q%Y8{P;9)Qtt)qT@69|```pNl zU6!!=)#;Av8@?W#wuEgxw#7n~&#R8z?5DYCUG+v*T{NscRmLoF_BwSic&XaulP2fX z_dN34zRJy<_3{ZZRa|N{$;rvQpT?vfEw#IoEAuj*j51u%%{HI4Z)9`JDtmO*BlauT zZ?|=g`7x_67R%nWtkP%e1Pz7ImoB)}!5oY?0 zN4O>jxcW}b5AA&YL_NKPoSqMIhB;^)_`x{W{2M^7Iqu;_k;}pPJPz^=pZt2wRO2nq zRRUSMGX}+IEK@Kx7&&J7H?xcHO=Io8J`YyY``qBe_u5B>>U60V+rlTN=B-K@UoVB| zH5&BXxO&QQTd$^_6pXF@Io;>^zA7(2wq14D^!$YDM+|)5BnKz2WM4CPF&{kjag&Un zb+7d)h`i^ubo7ZM?ei?}uvRqfUdecEjc(QVZCE>GkY&`k)q^cvj;r}Tvi&hHyKR$a zX>rMx4r{9X7;*k!*om)ACrs8Fn%$S0RP#<>4HbRGhaKHsa`JrMMaItQFuv~Qef?S| z#D;J5zp*`{pxw&5+urTh`tj(|nWM=Ysf&$Hk9(e9(^%QUYwVb~AEQ&UB2qf-?mDmW zlU+Nv*SU7s8I-hjiDc5_!u>Qw8 zt$tciaOuaUdN+fu675NpW!v5f`{NpEO!=AHmO7hAAUz`&0^Y-lkZW8mF{j$9;o4_R0H(j~>ejBgORrpIk7L&}%D>%ec%|h_BMw!yGqr0K za-eO%Nc}In>YwaRmOVdPNh8c4x8Ui6tS=!B>0hJ$oo4EFOQ>sqa`V@{FRGp!_oLmZ zd}r;0LC=ra&R2fW_rcKAh{#~gH>S0A%_>u(9*Co(WpjmuETbiJ#o8 z#WP>?tJ|vqLsEC#uN%JPOHAYM-$J^q7{B6j1OK-Bvg@cinB-3P&oybRZWh}^zhB$) zO>`FBtQ3C6(e3Mwugfn6Ew9ogAY_3+wtRS9_1a!CT*J023Xl2MS+UKl~2YXr}6^*JucgKd!ay5)wMI8Vo{mP2O49 z9zXg-!Nq*_j}MKP?vLDj?YLIqCWWDzwQN{-%pQDM|M}zCt`V2neyY-WsMpM|TidisIx}?S(%83iZ8i?$cq~6YSW$oXIg`PrZxVym zyv$wndu(r*`SVs}`nI_FO`N-J?qOa%D(BLRGel*{wYE7uu7zo}@*lYNpq^g4dr#+7 zi8#=N)z^1my@*5Wf^tXnXBoH3FtNYf%iBNkwC2M8Q9bgWj!BrZGHYS(z51*U4skC7%v8mCe*&DJ31YI^m=E&zG$s z{smv^?=qgWv+>UBZ~NbB5~u!Ph34_cgVRDUkspOOt=_baIc+_LltVIeIg^e`}C^1?V{hq$(=O@ZJh2JuHJPLwd6(9u`{bB ze!tMV?(snr2Q2WT;uI!tcRyl#r695O0N-AfO~`^3)8=?za5TBRcZj=h{=|mS51eb) z9&+kufpS8%QO94bHhs&AW_9OWiJEaZDA!zR?0%&N;kizi9-k^)lh!k@uI;00A=Q6m z|J>hhVA`bX!#Ykq5pia^_R`FzUe0<$l;IFc7xJZw(?&w(Ie{o5%aa1 z7dXGzl6Ez&<=(&@=998~?+vJGR$#xvwqX0+?Ke7%(Fq?n>|<<}Wqx{6(8qsF2d+q1 zmZcD|+hF33Ddq>aZ#6nI!(MZfW3>!cM$3#HK?9>U4yngFsyMw;GfKO@LS*xHj$hlX zxZ&#L`H0hV)cJ7!~_8Q&uEtxh1dz0M%3 zI_)Z%MHsP6w%nT#sIYB^`-hbgv9&o1wT7ENI-Lj-UHs}x+`#yN+&4`YdF)hPcf7OL zyg-k7Zb^r`s?0g`z#_F?6Mg%D)=#tty=eZV(TxK2aLwRg%hw;=7uVz@O*#`bPQ!cg z{>bAh5&PPDub#YhmBE4@0fqhiR8|_@4ZCC)_|4_&?y=J&JGC6WW>6=eFR@$e&m_q^ z_jUc*ZSH=fMyqm7-sB~`f0y9pJHcSKPNvrl6MIE(g+P{fOOsvCc0o};o4KDD)V)`4 z`?}-xo9oQ(?4+C)-@yI6RlPd(qTH@8oIfP|YnN%GyDa&xzG%vk9;4@~=CV&Yq*LS+i&rMQ54v*Z4Cp9QBjQg4+yE8K~F!D{ArtXHSp!;0@(4NTWbfBoUq_YMkQ zTRJQs+jq9kHJfvmte0x5j;1|s^598dYW1S1z)6D-ebD}Pu%ALTyOkHrJY5xhIvk#- zRBxBfnIJ9iPsihK)ogyT?WK|K&GpFRy?tseNqbSfZ*Iblo-F{~h=H!h;{c70+w`%9 zmHl6JHB*?|p>Lkg;Rg5S`G(cxj8-x0x7^w;{-ok)4`MR(Sg-*n=|w-Unw$=br;`rf zR^iw;j?eO{v+mNo=CC-j=9&ssW770{uX|-ZUE*te?O<437sWO6bUbQuESpzN8``8F zbwq@i!+xzU=ftKGdFH)>LyY@Qgkhkd`+hNkSgTo51kv((hpaU0Y zdEe`DqY;&BV)c2Ig$c}}HH=oZi*U|bs+(+V*Q85Li(`ID4dyKj>ytS9*@(c}t3#jO z@aUB36rF1DD%5De3l)$1o;6^?-o~z>T_wB4pH}Yc{_xG?`9}g{>wWQT-X-hyVCr5Q z)7#kvTN^ch-muY`f|+hj43`GvTe|zzTI>6!Z;YSQC*S1x6ZSl-IVmtP(c^qVGyU$} zQXh_`bT``is2kSNR7qK6fBu}3{oC1H&m~swXz8-s;D~?r+$)#ob-K55aIZQ04eP9! zCh6koV7G5jphmR^4lt}^tQgZxN$s@bnI1MR z+H#16VZo(3RbNLN7G|G*J@{fuZqn2K7XrP`yDvNT!sv{_&7bGo8d;4xigHq&l=R^9 z=4L|zEE``QcKnUP_Bz*722Z`_^pDoMu!bwY#tl(z`Z^}+W9A1X%57eX&FE$ko<=ow zbvP#vBH6kzwZ})A>Kq-c`8;Ig*oUL)>t}H`#&=H7$~n3FjYCxCjkBY7#_d~P<3?bmeW?#V z4{JDieD_wjQfpNEe#-lPkIE6PpQ)XlGBhnTVqdaD%k-od*SmdI3O{44r>VM6{hubU z#&_ziJG|v+^AY#w>g_eW5wU(u;^j8E1+}yaSMF9*Ijj~Cr50j;{<%xb4;GU?TC7ri z+vu3fqr@DR{mH>EtK6zK;oHMd$36R!qL)<5zP>%8R^I&7E5rRy2EWT~F)qHBoh|ir zmH`z$IsBN}xz+DXJl-Y_u3Nv|H^+7_S_Pd5ck2yPjC-DL&3b%ZaU^?U@Lhi;hiT%TFS`O~vHEQuOpFs|q-!2~bzVLSMt!Ja>+6SzQ)*F--dVXThyq*bO{^u;> z&BC*sY(^d0My+ybni;9kY{8WP%6~)Ko!5LKz6~1PA!$lV_m|#tuV#O^d5CbP4;k8c zRZg-+$7Xe3Tzj;ngY&|0)qlF|u48{iAx$ zq5@bfN^9@t5Im>1lV9U%%_=!iN2y&Wc2Ldt?hmhXC~CFa>&@PSy6#iIan(idYPQjx zzC+qHs2x(>Wv`!E@Z9`M5iYkfykFEJj)6LTeZmf3G)r(e-MaGFk46eqPPZV1(^Joo zDGSaFzwD-a^HQgJD-s(yWiL@Xq__C0hRd*Z*Q^`QTCWd7Z|hSvmcHn7G*)%!&o$Za zCj3~QujRI_*|_I*QXc1L=dp&ceo#9MS|}uXXeigNKg&)RW(WIzjI;Qum7n2heB3s_ zVQ%uA{YJI4Qc|2_>^ZIb{2Z7(Wm!Sg&7t|9{Rzox7VtdScT}c*;-ixv$%5~ZXL72h z)E~&Y^T65UL(h|5E4%`&f_0xy4mRsCaonZ$tl-|)+PYOq**;)H>ZaC5hxZ+t_3rTw zy>mTR*7VXgU(@AXaAHox6veFDO&s0dcTc_@nPAdn-gwsLC0kdhd5lcbwMlKFU^Cg- z)GdIjljibrXVN|LXq?Zd`Uc)Z>yfYNP1bE~aQ2+VkD$9dYS+AT&uiH6XTkLobgNcN zG|$)8dY7EmzaVqKJ%<*v-Xxm7()(bMubAT>6#KftfbssHB7LF@rzfq-n(#X7@o3Kx zg*(H&VNP~S`)l@SZQ`Xr^{vm_P5M63`|U=nr{4{pc{VKd@$f3kYAlOB^UwOt%Q@7& z%47SDrR-0w86RjhV09(pJkv?p)N%jIC3_AuFH~_fOxID!3@_Ukt4{_JwirU_L8r%*4pEnXBjT&=BR?2GlLB()&;j>*$Cd%`z*+|rCV zcyh*&m>4KSe9AY&W2h{nzMyuWRZLgA2{V#VJt?e>pzk6*UsLKae87nDA|8^t%wE5p_$EEb*Z(# zt#hl}>t`O)4|CY2;#GK$HGiy8$B|87lWkbPkTWx9+-UR22j09Oeydh-M)pwDGi&s0{ww$1_?ThNR%r$TC=bI*7bzD$SZwRG94Q`Z}v2&Qq$LRi{ z)t|QE1fR-kH+#m3QC2A?h3}i~D_k{4@oM7;Gph~O?f)@k*}3X^?>ePEaPN7WzKgxd zBiEZp;?(2!tBo7>t@Ef%uex8W-!SiEh)E;}k5rXw0nKkh)}cU<73q*~~CEHl=&E-;o5J zVg0=Nn1!S)C%%n_75ayTemm63F!Ic@$7hbd-3!gZyzqal3-VmAt2g$#WpuC3=PV+gIh zw7QGV)r`)MVjS(?M}~f#`?;6?P^t&J^_OphDZhq!o|U&$I&$X5^$YvA8-MpO?_s+f zGI(O_W<2_&C$VYUw#J+6_<;j0k5ikwYUmql%Dld98oaKDchSdRRYp*;B|U z%LbaWUSrs)^?Q7e%dD3F{?&_Q*Ui4qIt*LtuQYB&7X`ydoHgygkI#ASIjh@TZ<9A0 z>snl?wQpG`Rqv)f3VQlklKkY;7k~cj>tMCrI&(rd;I7($bc=6&URRo-eb_UO~Cd z$Fq)Zn%-gFk;pZll{79b^8V4H%|Kj`tlHIbPvQO9iAFh}TI}jPW%ahMM;^ZD+(pmB zM7`^jI`?#m)xG7l6Lb$PJ^uai@T%RacROTzp>bnatJUL}#V0u2O#Ec=EWDt_$@tf++?G3yAMsB= zh38#{`=8gd*=?ec5EidVYBtu{W%sN{YcDO0)0Hx=&t7SA`g*6Fb$6bBXcFGf=B&Yk zx!qZlRL>2*q!Q-Xq|O(&+j}_G-(FFwUAQIW=BebVFqLeY+=vp4lTlkMgcN z?A+jfP16U?tO4yN`$p2rH(s?2PH=Wz*N^C0sk!=Md)KCP3bsx`f zl6-RF_xAVOYk3WG2|nd||E~Gun-AQh-gk*sYM^SY(XQ90+HLYTz!t+NhnNqW3oC^V z88>L-JIx=>)N|^2Ht(KWJ>@;9D{QAmEBkHzG}(C#`^ww!9Aop=9S?;ROV z*+d+8GwR4hHDiq%&i?1ySfx7J-Ch$D5IXymO>T>NJuWJH?Vh#R&B(!Lb5L%F1MQBT z3#hVjoO8o?4a2hvi?5Dd1-oq?_Ge#R={I!T`zzDKer~l63v$a#TM|;$Y)sOqq&_FB zO*mQen_l%-r@nXYddeg1dFy_r-?gfk%^Bcw*=(szg#OjuN9MX4YnV#^ds1u)(#O*ZZ$|Zka-#XO$;Tz&K&d90z0G;DX`>ITG ze*3wV_v?iTKDJW^yjSq7No7~+!Lpd0Y4}9jP3501EbXN(F8h5(nx{|8)!*>2R;1=R z`?fIDJ~1;=&+%u#ThoKKU)CRNvxKUwSg&EtZ4E+PmHcT z$H=wv=O$Yhd~e#Q))VcXJ60@g+tX&i%hfl=Zc!ZSmXnws-@xUv^~u&R=jBXs`8ILf zkx>sW2W=W|6nyjff#a+XA=6?uCrul*FVMDW)0Ligs+djK7{0(yO>6j-4%5eMg#pKg z;jn?X>Fbt{9#$Kx9Xvc-$*>Da(zVXlw2+Mw@2AJq-Xq?&P!L==_SqF{y5rs z)DCk{?dVwFuyORZs2``=7;7xyRC_g|=djIpC#ZfKV`RCK-M;R-;4c>W^)E)BBLlL0 zf(m9Udi3>cMfK*Kb&l7YWFHW8>E4MB$B$lhhI+`(YftNJux)bt?9RM%L6@G~ z{km(-$6j+sRq~vwX4vQX;kPf(=+w+JNHT~x)Wq(RNeAPR4fdLcn|5!v`D4NCbxOu3 zZEX!c?@rbx9qz|lRj;)qZ;p?tviht=umSMD0Nn*5`pD~hn-PGl)EeVYe_jP{Q8wBg zNKiJrfr-FG$KqJvO2omarTZ%@foFZWcf@=DN^b9OrU2>7Uf^zJYaAu&;BB)8;&yyJ z@S3t2X#~LgO1=;nZ)_xOS%56|O*d6>aLPse`G=Y&khZ*t#K<$oZ$OSvcGRec4h={Sgtb0pLV29CEWLj@bj}%Ih?RxF#meS;Qx#?nARf8^zca5s^z1UmZv-F_ zh5{Mp)rX#TjzvRL4MqUs8UF7N)L;ldRe@Hf8jJwM!v#P+^V-vfPNoWs0L0q+XJHoq z(v9Ox6&L}CmG17xkUq3_EVG_t1Ryqsnb)0mv;k_EYA^zDq~U)fBq*aHy=VY5Hr0?g zQE>#i6sQ@JvgRYfAOOw)P5?RrS*E!jlnzKt2ZIrSgZBQ}NQ9NJ@PM*;&;9dzZuyS_ zIs?6c_DIIs`lk5;vJ)`MRD%(KLvf1RgNA`GfJe&ygBwJ0iTfGridsW=_}k7kfVRl? zW<6IJqU7Rzv@zqvN&C})j>UMw;rz1&N%puT!RO2ZYPp}pXhvZ$i za4aeqb2b97fB1ha&`>;p!JH^?cDBvcIi?|6{^)C!dohq9ZNIrYrY2!wGHbi&?ppb>DWtx`nkGkcikC8Ae z1~v!k7?X~$04SSMW%Cje`R86>gGR-BUD>=A(yILuiNmimCN_W>0sK!0wkn&4Tp@Ux z)H}5N2;3gx`pgII#Y-WlBMng(fHDntm9n`N=#4C9IVmVc32?Kr*%M41pfxYL3g@NdUp5AcT&c>Be}G$g))t~3D}8M8J55Q_-p zE1MU9Zoqwbzhm$>Wd}0K2(r!!(L4TLHYQz|5r8-w^)_YmAhKgH0@&@rWj`WZ-hS~g z9@wmL`OHF~5rBk*V3o4Dh2(b(HX`1BC23ku>wrlb7t!PkGy;%R1D{uB$KZAIiaE`pT;H!54}#WAmW z2Yt?3Y($P(-v*qBNfj1*+cs4YKaNFnx3?dLB-(gX+59Pj_3#|xOOXne0aJkwfNxw+ zMS~H5Kn>soB~nOG5&f9uo5|zJsFs)Z1PMkriM&Y1qKgz4GG42sP?oA zIYsy>@Rd8XFEG_+1i+9U%tuz{`T(FhqJ9a5-=Xl233lFkRW~ dFg2q${~tbSEdd=CLBs$6002ovPDHLkV1kt=BJThI diff --git a/VB/NonPersistentObjectsDemo.Win/Images/Logo.svg b/VB/NonPersistentObjectsDemo.Win/Images/Logo.svg deleted file mode 100644 index 68d56ca..0000000 --- a/VB/NonPersistentObjectsDemo.Win/Images/Logo.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - diff --git a/VB/NonPersistentObjectsDemo.Win/Images/ReadMe.txt b/VB/NonPersistentObjectsDemo.Win/Images/ReadMe.txt deleted file mode 100644 index 230befc..0000000 --- a/VB/NonPersistentObjectsDemo.Win/Images/ReadMe.txt +++ /dev/null @@ -1,12 +0,0 @@ -Folder Description - -The "Images" project folder is intended for storing custom image files. - - -Relevant Documentation - -Add and Override Images -https://docs.devexpress.com/eXpressAppFramework/112792 - -Assign a Custom Image -https://docs.devexpress.com/eXpressAppFramework/112744 diff --git a/VB/NonPersistentObjectsDemo.Win/Model.xafml b/VB/NonPersistentObjectsDemo.Win/Model.xafml deleted file mode 100644 index d745362..0000000 --- a/VB/NonPersistentObjectsDemo.Win/Model.xafml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Win/My Project/AssemblyInfo.vb b/VB/NonPersistentObjectsDemo.Win/My Project/AssemblyInfo.vb deleted file mode 100644 index a936e9a..0000000 --- a/VB/NonPersistentObjectsDemo.Win/My Project/AssemblyInfo.vb +++ /dev/null @@ -1,33 +0,0 @@ -Imports System.Reflection -Imports System.Runtime.CompilerServices -Imports System.Runtime.InteropServices - -' General Information about an assembly is controlled through the following -' set of attributes. Change these attribute values to modify the information -' associated with an assembly. - - - - - - - - - -' Setting ComVisible to false makes the types in this assembly not visible -' to COM components. If you need to access a type in this assembly from -' COM, set the ComVisible attribute to true on that type. - - -' The following GUID is for the ID of the typelib if this project is exposed to COM - - -' Version information for an assembly consists of the following four values: -' -' Major Version -' Minor Version -' Build Number -' Revision -' - - diff --git a/VB/NonPersistentObjectsDemo.Win/NonPersistentObjectsDemo.Win.vbproj b/VB/NonPersistentObjectsDemo.Win/NonPersistentObjectsDemo.Win.vbproj deleted file mode 100644 index 7aa1ad7..0000000 --- a/VB/NonPersistentObjectsDemo.Win/NonPersistentObjectsDemo.Win.vbproj +++ /dev/null @@ -1,370 +0,0 @@ - - - - - Debug - AnyCPU - {13E1ACF3-669C-4405-8260-E70BE603E197} - WinExe - - NonPersistentObjectsDemo.Win - v4.5.2 - ExpressApp.ico - 512 - On - Binary - Off - On - - - true - full - false - bin\Debug\ - true - true - prompt - true - - - pdbonly - true - bin\Release\ - false - true - prompt - true - - - true - bin\EasyTest\ - true - true - EASYTEST=True - full - AnyCPU - prompt - true - - - - - - - - - - - - - - - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - False - - - False - False - - - False - False - - - False - False - - - False - False - - - False - False - - - False - False - - - False - False - - - System - False - - - False - - - System.Data - False - - - System.Drawing - False - - - System.Windows.Forms - False - - - System.XML - False - - - - - - - - - - - - Always - - - - - - - Component - - - WinApplication.vb - - - Form - - - XafSplashScreen.vb - - - XafSplashScreen.vb - - - - - {72D644CD-C193-4572-B2E3-CA82819A1627} - NonPersistentObjectsDemo.Module.Win - True - - - {57ACDBDB-006E-43D3-9308-97857F2FF75D} - NonPersistentObjectsDemo.Module - True - - - - - diff --git a/VB/NonPersistentObjectsDemo.Win/Program.vb b/VB/NonPersistentObjectsDemo.Win/Program.vb deleted file mode 100644 index 220c1e2..0000000 --- a/VB/NonPersistentObjectsDemo.Win/Program.vb +++ /dev/null @@ -1,58 +0,0 @@ -Imports System -Imports System.Configuration -Imports System.Windows.Forms - -Imports DevExpress.ExpressApp -Imports DevExpress.ExpressApp.Security -Imports DevExpress.ExpressApp.Win -Imports DevExpress.Persistent.Base -Imports DevExpress.Persistent.BaseImpl -Imports DevExpress.XtraEditors - -Namespace NonPersistentObjectsDemo.Win - Friend Module Program - ''' - ''' The main entry point for the application. - ''' - - Sub Main() -#If EASYTEST Then - DevExpress.ExpressApp.Win.EasyTest.EasyTestRemotingRegistration.Register() -#End If - WindowsFormsSettings.LoadApplicationSettings() - Application.EnableVisualStyles() - Application.SetCompatibleTextRenderingDefault(False) - DevExpress.Utils.ToolTipController.DefaultController.ToolTipType = DevExpress.Utils.ToolTipType.SuperTip - DevExpress.ExpressApp.BaseObjectSpace.ThrowExceptionForNotRegisteredEntityType = True - EditModelPermission.AlwaysGranted = System.Diagnostics.Debugger.IsAttached - If Tracing.GetFileLocationFromSettings() = DevExpress.Persistent.Base.FileLocation.CurrentUserApplicationDataFolder Then - Tracing.LocalUserAppDataPath = Application.LocalUserAppDataPath - End If - Tracing.Initialize() - Dim winApplication As New NonPersistentObjectsDemoWindowsFormsApplication() - 'SecurityStrategy security = (SecurityStrategy)winApplication.Security; - 'security.RegisterXPOAdapterProviders(); - If ConfigurationManager.ConnectionStrings("ConnectionString") IsNot Nothing Then - winApplication.ConnectionString = ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString - End If -#If EASYTEST Then - If ConfigurationManager.ConnectionStrings("EasyTestConnectionString") IsNot Nothing Then - winApplication.ConnectionString = ConfigurationManager.ConnectionStrings("EasyTestConnectionString").ConnectionString - End If -#End If - winApplication.ConnectionString = DevExpress.ExpressApp.Xpo.InMemoryDataStoreProvider.ConnectionString -#If DEBUG Then - If System.Diagnostics.Debugger.IsAttached AndAlso winApplication.CheckCompatibilityType = CheckCompatibilityType.DatabaseSchema Then - winApplication.DatabaseUpdateMode = DatabaseUpdateMode.UpdateDatabaseAlways - End If -#End If - Try - winApplication.Setup() - winApplication.Start() - Catch e As Exception - winApplication.StopSplash() - winApplication.HandleException(e) - End Try - End Sub - End Module -End Namespace diff --git a/VB/NonPersistentObjectsDemo.Win/ReadMe.txt b/VB/NonPersistentObjectsDemo.Win/ReadMe.txt deleted file mode 100644 index fd287a6..0000000 --- a/VB/NonPersistentObjectsDemo.Win/ReadMe.txt +++ /dev/null @@ -1,31 +0,0 @@ -Project Description - -This project implements a WinForms application. The root project folder -contains the WinApplication.cs(vb) file with the class that inherits -WinApplication. This class can be designed with the Application Designer that -allows you to view and customize application components: referenced modules, -security settings, data connection. Additionally, the root folder contains -Application Model difference files (XAFML files) that keep application settings -specific for the current application. Differences files can be designed with -the Model Editor. - - -Relevant Documentation - -Application Solution Components -https://docs.devexpress.com/eXpressAppFramework/112569 - -WinApplication Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Win.WinApplication - -XafApplication Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.XafApplication - -Application Designer -https://docs.devexpress.com/eXpressAppFramework/112827 - -Application Model -https://docs.devexpress.com/eXpressAppFramework/112579 - -Model Editor -https://docs.devexpress.com/eXpressAppFramework/112582 \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Win/WinApplication.Designer.vb b/VB/NonPersistentObjectsDemo.Win/WinApplication.Designer.vb deleted file mode 100644 index 1c81c20..0000000 --- a/VB/NonPersistentObjectsDemo.Win/WinApplication.Designer.vb +++ /dev/null @@ -1,129 +0,0 @@ -Namespace NonPersistentObjectsDemo.Win - Partial Public Class NonPersistentObjectsDemoWindowsFormsApplication - ''' - ''' Required designer variable. - ''' - Private components As System.ComponentModel.IContainer = Nothing - - ''' - ''' Clean up any resources being used. - ''' - ''' true if managed resources should be disposed; otherwise, false. - Protected Overrides Sub Dispose(ByVal disposing As Boolean) - If disposing AndAlso (components IsNot Nothing) Then - components.Dispose() - End If - MyBase.Dispose(disposing) - End Sub - - #Region "Component Designer generated code" - - ''' - ''' Required method for Designer support - do not modify - ''' the contents of this method with the code editor. - ''' - Private Sub InitializeComponent() - Me.module1 = New DevExpress.ExpressApp.SystemModule.SystemModule() - Me.module2 = New DevExpress.ExpressApp.Win.SystemModule.SystemWindowsFormsModule() - Me.module3 = New NonPersistentObjectsDemo.Module.NonPersistentObjectsDemoModule() - Me.module4 = New NonPersistentObjectsDemo.Module.Win.NonPersistentObjectsDemoWindowsFormsModule() - Me.securityModule1 = New DevExpress.ExpressApp.Security.SecurityModule() - Me.securityStrategyComplex1 = New DevExpress.ExpressApp.Security.SecurityStrategyComplex() - Me.securityStrategyComplex1.SupportNavigationPermissionsForTypes = False - Me.objectsModule = New DevExpress.ExpressApp.Objects.BusinessClassLibraryCustomizationModule() - Me.cloneObjectModule = New DevExpress.ExpressApp.CloneObject.CloneObjectModule() - Me.conditionalAppearanceModule = New DevExpress.ExpressApp.ConditionalAppearance.ConditionalAppearanceModule() - Me.fileAttachmentsWindowsFormsModule = New DevExpress.ExpressApp.FileAttachments.Win.FileAttachmentsWindowsFormsModule() - Me.reportsModuleV2 = New DevExpress.ExpressApp.ReportsV2.ReportsModuleV2() - Me.reportsWindowsFormsModuleV2 = New DevExpress.ExpressApp.ReportsV2.Win.ReportsWindowsFormsModuleV2() - Me.schedulerModuleBase = New DevExpress.ExpressApp.Scheduler.SchedulerModuleBase() - Me.schedulerWindowsFormsModule = New DevExpress.ExpressApp.Scheduler.Win.SchedulerWindowsFormsModule() - Me.scriptRecorderModuleBase = New DevExpress.ExpressApp.ScriptRecorder.ScriptRecorderModuleBase() - Me.scriptRecorderWindowsFormsModule = New DevExpress.ExpressApp.ScriptRecorder.Win.ScriptRecorderWindowsFormsModule() - Me.treeListEditorsModuleBase = New DevExpress.ExpressApp.TreeListEditors.TreeListEditorsModuleBase() - Me.treeListEditorsWindowsFormsModule = New DevExpress.ExpressApp.TreeListEditors.Win.TreeListEditorsWindowsFormsModule() - Me.validationModule = New DevExpress.ExpressApp.Validation.ValidationModule() - Me.validationWindowsFormsModule = New DevExpress.ExpressApp.Validation.Win.ValidationWindowsFormsModule() - Me.authenticationStandard1 = New DevExpress.ExpressApp.Security.AuthenticationStandard() - DirectCast(Me, System.ComponentModel.ISupportInitialize).BeginInit() - ' - ' securityStrategyComplex1 - ' - Me.securityStrategyComplex1.Authentication = Me.authenticationStandard1 - Me.securityStrategyComplex1.RoleType = GetType(DevExpress.Persistent.BaseImpl.PermissionPolicy.PermissionPolicyRole) - Me.securityStrategyComplex1.UserType = GetType(DevExpress.Persistent.BaseImpl.PermissionPolicy.PermissionPolicyUser) - ' - ' securityModule1 - ' - Me.securityModule1.UserType = GetType(DevExpress.Persistent.BaseImpl.PermissionPolicy.PermissionPolicyUser) - ' - ' authenticationStandard1 - ' - Me.authenticationStandard1.LogonParametersType = GetType(DevExpress.ExpressApp.Security.AuthenticationStandardLogonParameters) - ' - ' reportsModuleV2 - ' - Me.reportsModuleV2.EnableInplaceReports = True - Me.reportsModuleV2.ReportDataType = GetType(DevExpress.Persistent.BaseImpl.ReportDataV2) - Me.reportsModuleV2.ShowAdditionalNavigation = False - Me.reportsModuleV2.ReportStoreMode = DevExpress.ExpressApp.ReportsV2.ReportStoreModes.XML - ' - ' NonPersistentObjectsDemoWindowsFormsApplication - ' - Me.ApplicationName = "NonPersistentObjectsDemo" - Me.CheckCompatibilityType = DevExpress.ExpressApp.CheckCompatibilityType.DatabaseSchema - Me.Modules.Add(Me.module1) - Me.Modules.Add(Me.module2) - Me.Modules.Add(Me.module3) - Me.Modules.Add(Me.module4) - Me.Modules.Add(Me.securityModule1) - 'this.Security = this.securityStrategyComplex1; - Me.Modules.Add(Me.objectsModule) - Me.Modules.Add(Me.cloneObjectModule) - Me.Modules.Add(Me.conditionalAppearanceModule) - Me.Modules.Add(Me.fileAttachmentsWindowsFormsModule) - Me.Modules.Add(Me.reportsModuleV2) - Me.Modules.Add(Me.reportsWindowsFormsModuleV2) - Me.Modules.Add(Me.schedulerModuleBase) - Me.Modules.Add(Me.schedulerWindowsFormsModule) - Me.Modules.Add(Me.scriptRecorderModuleBase) - Me.Modules.Add(Me.scriptRecorderWindowsFormsModule) - Me.Modules.Add(Me.treeListEditorsModuleBase) - Me.Modules.Add(Me.treeListEditorsWindowsFormsModule) - Me.Modules.Add(Me.validationModule) - Me.Modules.Add(Me.validationWindowsFormsModule) - Me.UseOldTemplates = False -'INSTANT VB NOTE: The following InitializeComponent event wireup was converted to a 'Handles' clause: -'ORIGINAL LINE: this.DatabaseVersionMismatch += new System.EventHandler(this.NonPersistentObjectsDemoWindowsFormsApplication_DatabaseVersionMismatch); -'INSTANT VB NOTE: The following InitializeComponent event wireup was converted to a 'Handles' clause: -'ORIGINAL LINE: this.CustomizeLanguagesList += new System.EventHandler(this.NonPersistentObjectsDemoWindowsFormsApplication_CustomizeLanguagesList); - - DirectCast(Me, System.ComponentModel.ISupportInitialize).EndInit() - - End Sub - - #End Region - - Private module1 As DevExpress.ExpressApp.SystemModule.SystemModule - Private module2 As DevExpress.ExpressApp.Win.SystemModule.SystemWindowsFormsModule - Private module3 As NonPersistentObjectsDemo.Module.NonPersistentObjectsDemoModule - Private module4 As NonPersistentObjectsDemo.Module.Win.NonPersistentObjectsDemoWindowsFormsModule - Private securityModule1 As DevExpress.ExpressApp.Security.SecurityModule - Private securityStrategyComplex1 As DevExpress.ExpressApp.Security.SecurityStrategyComplex - Private authenticationStandard1 As DevExpress.ExpressApp.Security.AuthenticationStandard - Private objectsModule As DevExpress.ExpressApp.Objects.BusinessClassLibraryCustomizationModule - Private cloneObjectModule As DevExpress.ExpressApp.CloneObject.CloneObjectModule - Private conditionalAppearanceModule As DevExpress.ExpressApp.ConditionalAppearance.ConditionalAppearanceModule - Private fileAttachmentsWindowsFormsModule As DevExpress.ExpressApp.FileAttachments.Win.FileAttachmentsWindowsFormsModule - Private reportsModuleV2 As DevExpress.ExpressApp.ReportsV2.ReportsModuleV2 - Private reportsWindowsFormsModuleV2 As DevExpress.ExpressApp.ReportsV2.Win.ReportsWindowsFormsModuleV2 - Private schedulerModuleBase As DevExpress.ExpressApp.Scheduler.SchedulerModuleBase - Private schedulerWindowsFormsModule As DevExpress.ExpressApp.Scheduler.Win.SchedulerWindowsFormsModule - Private scriptRecorderModuleBase As DevExpress.ExpressApp.ScriptRecorder.ScriptRecorderModuleBase - Private scriptRecorderWindowsFormsModule As DevExpress.ExpressApp.ScriptRecorder.Win.ScriptRecorderWindowsFormsModule - Private treeListEditorsModuleBase As DevExpress.ExpressApp.TreeListEditors.TreeListEditorsModuleBase - Private treeListEditorsWindowsFormsModule As DevExpress.ExpressApp.TreeListEditors.Win.TreeListEditorsWindowsFormsModule - Private validationModule As DevExpress.ExpressApp.Validation.ValidationModule - Private validationWindowsFormsModule As DevExpress.ExpressApp.Validation.Win.ValidationWindowsFormsModule - End Class -End Namespace diff --git a/VB/NonPersistentObjectsDemo.Win/WinApplication.vb b/VB/NonPersistentObjectsDemo.Win/WinApplication.vb deleted file mode 100644 index 5e54d22..0000000 --- a/VB/NonPersistentObjectsDemo.Win/WinApplication.vb +++ /dev/null @@ -1,65 +0,0 @@ -Imports System -Imports System.ComponentModel -Imports DevExpress.ExpressApp -Imports DevExpress.ExpressApp.Win -Imports System.Collections.Generic -Imports DevExpress.ExpressApp.Updating -Imports DevExpress.ExpressApp.Win.Utils -Imports DevExpress.ExpressApp.Xpo -Imports DevExpress.ExpressApp.Security -Imports DevExpress.ExpressApp.Security.ClientServer - -Namespace NonPersistentObjectsDemo.Win - ' For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Win.WinApplication._members - Partial Public Class NonPersistentObjectsDemoWindowsFormsApplication - Inherits WinApplication - - #Region "Default XAF configuration options (https:" 'www.devexpress.com/kb=T501418) - Shared Sub New() - DevExpress.Persistent.Base.PasswordCryptographer.EnableRfc2898 = True - DevExpress.Persistent.Base.PasswordCryptographer.SupportLegacySha512 = False - DevExpress.ExpressApp.Utils.ImageLoader.Instance.UseSvgImages = True - End Sub - Private Sub InitializeDefaults() - LinkNewObjectToParentImmediately = False - OptimizedControllersCreation = True - UseLightStyle = True - SplashScreen = New DXSplashScreen(GetType(XafSplashScreen), New DefaultOverlayFormOptions()) - ExecuteStartupLogicBeforeClosingLogonWindow = True - End Sub - #End Region - Public Sub New() - InitializeComponent() - InitializeDefaults() - End Sub - Protected Overrides Sub CreateDefaultObjectSpaceProvider(ByVal args As CreateCustomObjectSpaceProviderEventArgs) - 'args.ObjectSpaceProviders.Add(new SecuredObjectSpaceProvider((SecurityStrategyComplex)Security, XPObjectSpaceProvider.GetDataStoreProvider(args.ConnectionString, args.Connection, true), false)); - args.ObjectSpaceProviders.Add(New XPObjectSpaceProvider(XPObjectSpaceProvider.GetDataStoreProvider(args.ConnectionString, args.Connection, True), False)) - args.ObjectSpaceProviders.Add(New NonPersistentObjectSpaceProvider(TypesInfo, Nothing)) - End Sub - Private Sub NonPersistentObjectsDemoWindowsFormsApplication_CustomizeLanguagesList(ByVal sender As Object, ByVal e As CustomizeLanguagesListEventArgs) Handles Me.CustomizeLanguagesList - Dim userLanguageName As String = System.Threading.Thread.CurrentThread.CurrentUICulture.Name - If userLanguageName <> "en-US" AndAlso e.Languages.IndexOf(userLanguageName) = -1 Then - e.Languages.Add(userLanguageName) - End If - End Sub - Private Sub NonPersistentObjectsDemoWindowsFormsApplication_DatabaseVersionMismatch(ByVal sender As Object, ByVal e As DevExpress.ExpressApp.DatabaseVersionMismatchEventArgs) Handles Me.DatabaseVersionMismatch -#If EASYTEST Then - e.Updater.Update() - e.Handled = True -#Else - If System.Diagnostics.Debugger.IsAttached Then - e.Updater.Update() - e.Handled = True - Else - Dim message As String = "The application cannot connect to the specified database, " & "because the database doesn't exist, its version is older " & "than that of the application or its schema does not match " & "the ORM data model structure. To avoid this error, use one " & "of the solutions from the https://www.devexpress.com/kb=T367835 KB Article." - - If e.CompatibilityError IsNot Nothing AndAlso e.CompatibilityError.Exception IsNot Nothing Then - message &= vbCrLf & vbCrLf & "Inner exception: " & e.CompatibilityError.Exception.Message - End If - Throw New InvalidOperationException(message) - End If -#End If - End Sub - End Class -End Namespace diff --git a/VB/NonPersistentObjectsDemo.Win/XafSplashScreen.Designer.vb b/VB/NonPersistentObjectsDemo.Win/XafSplashScreen.Designer.vb deleted file mode 100644 index a1ded36..0000000 --- a/VB/NonPersistentObjectsDemo.Win/XafSplashScreen.Designer.vb +++ /dev/null @@ -1,177 +0,0 @@ -Namespace NonPersistentObjectsDemo.Win - Partial Public Class XafSplashScreen - ''' - ''' Required designer variable. - ''' - Private components As System.ComponentModel.IContainer = Nothing - - ''' - ''' Clean up any resources being used. - ''' - ''' true if managed resources should be disposed; otherwise, false. - Protected Overrides Sub Dispose(ByVal disposing As Boolean) - If disposing AndAlso (components IsNot Nothing) Then - components.Dispose() - End If - MyBase.Dispose(disposing) - End Sub - - #Region "Windows Form Designer generated code" - - ''' - ''' Required method for Designer support - do not modify - ''' the contents of this method with the code editor. - ''' - Private Sub InitializeComponent() - Dim resources As New System.ComponentModel.ComponentResourceManager(GetType(XafSplashScreen)) - Me.progressBarControl = New DevExpress.XtraEditors.MarqueeProgressBarControl() - Me.labelCopyright = New DevExpress.XtraEditors.LabelControl() - Me.labelStatus = New DevExpress.XtraEditors.LabelControl() - Me.peImage = New DevExpress.XtraEditors.PictureEdit() - Me.peLogo = New DevExpress.XtraEditors.PictureEdit() - Me.pcApplicationName = New DevExpress.XtraEditors.PanelControl() - Me.labelSubtitle = New DevExpress.XtraEditors.LabelControl() - Me.labelApplicationName = New DevExpress.XtraEditors.LabelControl() - CType(Me.progressBarControl.Properties, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.peImage.Properties, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.peLogo.Properties, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.pcApplicationName, System.ComponentModel.ISupportInitialize).BeginInit() - Me.pcApplicationName.SuspendLayout() - Me.SuspendLayout() - ' - ' progressBarControl - ' - Me.progressBarControl.EditValue = 0 - Me.progressBarControl.Location = New System.Drawing.Point(74, 271) - Me.progressBarControl.Name = "progressBarControl" - Me.progressBarControl.Properties.Appearance.BorderColor = System.Drawing.Color.FromArgb((CInt((CByte(195)))), (CInt((CByte(194)))), (CInt((CByte(194))))) - Me.progressBarControl.Properties.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.Simple - Me.progressBarControl.Properties.EndColor = System.Drawing.Color.FromArgb((CInt((CByte(255)))), (CInt((CByte(114)))), (CInt((CByte(0))))) - Me.progressBarControl.Properties.LookAndFeel.SkinName = "Visual Studio 2013 Blue" - Me.progressBarControl.Properties.LookAndFeel.Style = DevExpress.LookAndFeel.LookAndFeelStyle.UltraFlat - Me.progressBarControl.Properties.LookAndFeel.UseDefaultLookAndFeel = False - Me.progressBarControl.Properties.ProgressViewStyle = DevExpress.XtraEditors.Controls.ProgressViewStyle.Solid - Me.progressBarControl.Properties.StartColor = System.Drawing.Color.FromArgb((CInt((CByte(255)))), (CInt((CByte(144)))), (CInt((CByte(0))))) - Me.progressBarControl.Size = New System.Drawing.Size(350, 16) - Me.progressBarControl.TabIndex = 5 - ' - ' labelCopyright - ' - Me.labelCopyright.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder - Me.labelCopyright.Location = New System.Drawing.Point(24, 324) - Me.labelCopyright.Name = "labelCopyright" - Me.labelCopyright.Size = New System.Drawing.Size(47, 13) - Me.labelCopyright.TabIndex = 6 - Me.labelCopyright.Text = "Copyright" - ' - ' labelStatus - ' - Me.labelStatus.Location = New System.Drawing.Point(75, 253) - Me.labelStatus.Name = "labelStatus" - Me.labelStatus.Size = New System.Drawing.Size(50, 13) - Me.labelStatus.TabIndex = 7 - Me.labelStatus.Text = "Starting..." - ' - ' peImage - ' - Me.peImage.EditValue = (CObj(resources.GetObject("peImage.EditValue"))) - Me.peImage.Location = New System.Drawing.Point(12, 12) - Me.peImage.Name = "peImage" - Me.peImage.Properties.AllowFocused = False - Me.peImage.Properties.Appearance.BackColor = System.Drawing.Color.Transparent - Me.peImage.Properties.Appearance.Options.UseBackColor = True - Me.peImage.Properties.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder - Me.peImage.Properties.ShowMenu = False - Me.peImage.Size = New System.Drawing.Size(426, 180) - Me.peImage.TabIndex = 9 - Me.peImage.Visible = False - ' - ' peLogo - ' - Me.peLogo.EditValue = (CObj(resources.GetObject("peLogo.EditValue"))) - Me.peLogo.Location = New System.Drawing.Point(400, 328) - Me.peLogo.Name = "peLogo" - Me.peLogo.Properties.AllowFocused = False - Me.peLogo.Properties.Appearance.BackColor = System.Drawing.Color.Transparent - Me.peLogo.Properties.Appearance.Options.UseBackColor = True - Me.peLogo.Properties.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder - Me.peLogo.Properties.ShowMenu = False - Me.peLogo.Size = New System.Drawing.Size(70, 20) - Me.peLogo.TabIndex = 8 - ' - ' pcApplicationName - ' - Me.pcApplicationName.Appearance.BackColor = System.Drawing.Color.FromArgb((CInt((CByte(255)))), (CInt((CByte(114)))), (CInt((CByte(0))))) - Me.pcApplicationName.Appearance.Options.UseBackColor = True - Me.pcApplicationName.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder - Me.pcApplicationName.Controls.Add(Me.labelSubtitle) - Me.pcApplicationName.Controls.Add(Me.labelApplicationName) - Me.pcApplicationName.Dock = System.Windows.Forms.DockStyle.Top - Me.pcApplicationName.Location = New System.Drawing.Point(1, 1) - Me.pcApplicationName.LookAndFeel.UseDefaultLookAndFeel = False - Me.pcApplicationName.Name = "pcApplicationName" - Me.pcApplicationName.Size = New System.Drawing.Size(494, 220) - Me.pcApplicationName.TabIndex = 10 - ' - ' labelSubtitle - ' - Me.labelSubtitle.Appearance.Font = New System.Drawing.Font("Segoe UI", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (CByte(0))) - Me.labelSubtitle.Appearance.ForeColor = System.Drawing.Color.FromArgb((CInt((CByte(255)))), (CInt((CByte(216)))), (CInt((CByte(188))))) - Me.labelSubtitle.Appearance.Options.UseFont = True - Me.labelSubtitle.Appearance.Options.UseForeColor = True - Me.labelSubtitle.Location = New System.Drawing.Point(222, 131) - Me.labelSubtitle.Name = "labelSubtitle" - Me.labelSubtitle.Size = New System.Drawing.Size(64, 25) - Me.labelSubtitle.TabIndex = 1 - Me.labelSubtitle.Text = "Subtitle" - ' - ' labelApplicationName - ' - Me.labelApplicationName.Appearance.Font = New System.Drawing.Font("Segoe UI", 26.25F) - Me.labelApplicationName.Appearance.ForeColor = System.Drawing.SystemColors.Window - Me.labelApplicationName.Appearance.Options.UseFont = True - Me.labelApplicationName.Appearance.Options.UseForeColor = True - Me.labelApplicationName.Location = New System.Drawing.Point(123, 84) - Me.labelApplicationName.Name = "labelApplicationName" - Me.labelApplicationName.Size = New System.Drawing.Size(278, 47) - Me.labelApplicationName.TabIndex = 0 - Me.labelApplicationName.Text = "Application Name" - ' - ' XafSplashScreen - ' - Me.AutoScaleDimensions = New System.Drawing.SizeF(6F, 13F) - Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font - Me.BackColor = System.Drawing.Color.White - Me.ClientSize = New System.Drawing.Size(496, 370) - Me.Controls.Add(Me.pcApplicationName) - Me.Controls.Add(Me.peImage) - Me.Controls.Add(Me.peLogo) - Me.Controls.Add(Me.labelStatus) - Me.Controls.Add(Me.labelCopyright) - Me.Controls.Add(Me.progressBarControl) - Me.Name = "XafSplashScreen" - Me.Padding = New System.Windows.Forms.Padding(1) - Me.Text = "Form1" - CType(Me.progressBarControl.Properties, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.peImage.Properties, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.peLogo.Properties, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.pcApplicationName, System.ComponentModel.ISupportInitialize).EndInit() - Me.pcApplicationName.ResumeLayout(False) - Me.pcApplicationName.PerformLayout() - Me.ResumeLayout(False) - Me.PerformLayout() - - End Sub - - #End Region - - Private progressBarControl As DevExpress.XtraEditors.MarqueeProgressBarControl - Private labelCopyright As DevExpress.XtraEditors.LabelControl - Private labelStatus As DevExpress.XtraEditors.LabelControl - Private peLogo As DevExpress.XtraEditors.PictureEdit - Private peImage As DevExpress.XtraEditors.PictureEdit - Private pcApplicationName As DevExpress.XtraEditors.PanelControl - Private labelSubtitle As DevExpress.XtraEditors.LabelControl - Private labelApplicationName As DevExpress.XtraEditors.LabelControl - End Class -End Namespace diff --git a/VB/NonPersistentObjectsDemo.Win/XafSplashScreen.resx b/VB/NonPersistentObjectsDemo.Win/XafSplashScreen.resx deleted file mode 100644 index 18fc5b4..0000000 --- a/VB/NonPersistentObjectsDemo.Win/XafSplashScreen.resx +++ /dev/null @@ -1,638 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - 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 - YII= - - - \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Win/XafSplashScreen.vb b/VB/NonPersistentObjectsDemo.Win/XafSplashScreen.vb deleted file mode 100644 index 9938ca4..0000000 --- a/VB/NonPersistentObjectsDemo.Win/XafSplashScreen.vb +++ /dev/null @@ -1,56 +0,0 @@ -Imports System -Imports System.Drawing -Imports System.IO -Imports System.Reflection -Imports DevExpress.ExpressApp.Win.Utils -Imports DevExpress.Skins -Imports DevExpress.Utils.Drawing -Imports DevExpress.Utils.Svg -Imports DevExpress.XtraSplashScreen - -Namespace NonPersistentObjectsDemo.Win - Partial Public Class XafSplashScreen - Inherits SplashScreen - - Private Sub LoadBlankLogo() - Dim assembly As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly() - Dim blankLogoResourceName As String = assembly.GetName().Name & ".Images.Logo.svg" - Dim svgStream As Stream = assembly.GetManifestResourceStream(blankLogoResourceName) - If svgStream IsNot Nothing Then - svgStream.Position = 0 - peLogo.SvgImage = SvgImage.FromStream(svgStream) - End If - End Sub - Protected Overrides Sub DrawContent(ByVal graphicsCache As GraphicsCache, ByVal skin As Skin) - Dim bounds As Rectangle = ClientRectangle - bounds.Width -= 1 - bounds.Height -= 1 - graphicsCache.Graphics.DrawRectangle(graphicsCache.GetPen(Color.FromArgb(255, 87, 87, 87), 1), bounds) - End Sub - Protected Sub UpdateLabelsPosition() - labelApplicationName.CalcBestSize() - Dim newLeft As Integer = (Width - labelApplicationName.Width) \ 2 - labelApplicationName.Location = New Point(newLeft, labelApplicationName.Top) - labelSubtitle.CalcBestSize() - newLeft = (Width - labelSubtitle.Width) \ 2 - labelSubtitle.Location = New Point(newLeft, labelSubtitle.Top) - End Sub - Public Sub New() - InitializeComponent() - LoadBlankLogo() - Me.labelCopyright.Text = "Copyright © " & DateTime.Now.Year.ToString() & " Company Name" & Environment.NewLine & "All rights reserved." - UpdateLabelsPosition() - End Sub - - #Region "Overrides" - - Public Overrides Sub ProcessCommand(ByVal cmd As System.Enum, ByVal arg As Object) - MyBase.ProcessCommand(cmd, arg) - If CType(cmd, UpdateSplashCommand) = UpdateSplashCommand.Description Then - labelStatus.Text = DirectCast(arg, String) - End If - End Sub - - #End Region - End Class -End Namespace diff --git a/VB/NonPersistentObjectsFilteringDemo.sln b/VB/NonPersistentObjectsFilteringDemo.sln deleted file mode 100644 index 6dac80e..0000000 --- a/VB/NonPersistentObjectsFilteringDemo.sln +++ /dev/null @@ -1,59 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.28307.1000 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "NonPersistentObjectsDemo.Module", "NonPersistentObjectsDemo.Module\NonPersistentObjectsDemo.Module.vbproj", "{57ACDBDB-006E-43D3-9308-97857F2FF75D}" -EndProject -Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "NonPersistentObjectsDemo.Module.Web", "NonPersistentObjectsDemo.Module.Web\NonPersistentObjectsDemo.Module.Web.vbproj", "{EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B}" -EndProject -Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "NonPersistentObjectsDemo.Web", "NonPersistentObjectsDemo.Web\NonPersistentObjectsDemo.Web.vbproj", "{8C3026D1-113C-4B88-9F91-236753790C60}" -EndProject -Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "NonPersistentObjectsDemo.Module.Win", "NonPersistentObjectsDemo.Module.Win\NonPersistentObjectsDemo.Module.Win.vbproj", "{72D644CD-C193-4572-B2E3-CA82819A1627}" -EndProject -Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "NonPersistentObjectsDemo.Win", "NonPersistentObjectsDemo.Win\NonPersistentObjectsDemo.Win.vbproj", "{13E1ACF3-669C-4405-8260-E70BE603E197}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - EasyTest|Any CPU = EasyTest|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {57ACDBDB-006E-43D3-9308-97857F2FF75D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {57ACDBDB-006E-43D3-9308-97857F2FF75D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {57ACDBDB-006E-43D3-9308-97857F2FF75D}.EasyTest|Any CPU.ActiveCfg = EasyTest|Any CPU - {57ACDBDB-006E-43D3-9308-97857F2FF75D}.EasyTest|Any CPU.Build.0 = EasyTest|Any CPU - {57ACDBDB-006E-43D3-9308-97857F2FF75D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {57ACDBDB-006E-43D3-9308-97857F2FF75D}.Release|Any CPU.Build.0 = Release|Any CPU - {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B}.EasyTest|Any CPU.ActiveCfg = EasyTest|Any CPU - {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B}.EasyTest|Any CPU.Build.0 = EasyTest|Any CPU - {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B}.Release|Any CPU.Build.0 = Release|Any CPU - {8C3026D1-113C-4B88-9F91-236753790C60}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8C3026D1-113C-4B88-9F91-236753790C60}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8C3026D1-113C-4B88-9F91-236753790C60}.EasyTest|Any CPU.ActiveCfg = EasyTest|Any CPU - {8C3026D1-113C-4B88-9F91-236753790C60}.EasyTest|Any CPU.Build.0 = EasyTest|Any CPU - {8C3026D1-113C-4B88-9F91-236753790C60}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8C3026D1-113C-4B88-9F91-236753790C60}.Release|Any CPU.Build.0 = Release|Any CPU - {72D644CD-C193-4572-B2E3-CA82819A1627}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {72D644CD-C193-4572-B2E3-CA82819A1627}.Debug|Any CPU.Build.0 = Debug|Any CPU - {72D644CD-C193-4572-B2E3-CA82819A1627}.EasyTest|Any CPU.ActiveCfg = EasyTest|Any CPU - {72D644CD-C193-4572-B2E3-CA82819A1627}.EasyTest|Any CPU.Build.0 = EasyTest|Any CPU - {72D644CD-C193-4572-B2E3-CA82819A1627}.Release|Any CPU.ActiveCfg = Release|Any CPU - {72D644CD-C193-4572-B2E3-CA82819A1627}.Release|Any CPU.Build.0 = Release|Any CPU - {13E1ACF3-669C-4405-8260-E70BE603E197}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {13E1ACF3-669C-4405-8260-E70BE603E197}.Debug|Any CPU.Build.0 = Debug|Any CPU - {13E1ACF3-669C-4405-8260-E70BE603E197}.EasyTest|Any CPU.ActiveCfg = EasyTest|Any CPU - {13E1ACF3-669C-4405-8260-E70BE603E197}.EasyTest|Any CPU.Build.0 = EasyTest|Any CPU - {13E1ACF3-669C-4405-8260-E70BE603E197}.Release|Any CPU.ActiveCfg = Release|Any CPU - {13E1ACF3-669C-4405-8260-E70BE603E197}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {BCF45AD8-3F2F-4887-832F-CBD5AE72BD68} - EndGlobalSection -EndGlobal From 9c06bf2dbe11c45402c9586f15a07820bb27c961 Mon Sep 17 00:00:00 2001 From: DevExpressExampleBot Date: Fri, 24 Apr 2020 23:06:23 +0300 Subject: [PATCH 07/40] Source auto update [skip ci] --- .../Controllers/ReadMe.txt | 19 + .../Editors/ReadMe.txt | 31 + .../Images/ReadMe.txt | 12 + .../Model.DesignedDiffs.xafml | 9 + .../My Project/AssemblyInfo.vb | 33 + ...NonPersistentObjectsDemo.Module.Web.vbproj | 243 +++++++ .../ReadMe.txt | 28 + .../WebModule.Designer.vb | 41 ++ .../WebModule.vb | 44 ++ .../Controllers/ReadMe.txt | 19 + .../Editors/ReadMe.txt | 33 + .../Images/ExpressAppLogo.png | Bin 0 -> 7486 bytes .../Images/ReadMe.txt | 12 + .../Model.DesignedDiffs.xafml | 2 + .../My Project/AssemblyInfo.vb | 33 + ...NonPersistentObjectsDemo.Module.Win.vbproj | 281 ++++++++ .../ReadMe.txt | 29 + .../WinModule.Designer.vb | 41 ++ .../WinModule.vb | 44 ++ .../BusinessObjects/Article.vb | 108 +++ .../BusinessObjects/Contact.vb | 146 ++++ .../NonPersistentObjectBase.vb | 59 ++ .../BusinessObjects/ReadMe.txt | 11 + .../Controllers/FindArticlesController.vb | 95 +++ .../Controllers/ReadMe.txt | 19 + .../DatabaseUpdate/ReadMe.txt | 17 + .../DatabaseUpdate/Updater.vb | 83 +++ .../FunctionalTests/ReadMe.txt | 10 + .../FunctionalTests/config.xml | 36 + .../FunctionalTests/sample.ets | 20 + .../Images/ReadMe.txt | 12 + .../Model.DesignedDiffs.xafml | 26 + .../Module.Designer.vb | 50 ++ VB/NonPersistentObjectsDemo.Module/Module.vb | 54 ++ .../My Project/AssemblyInfo.vb | 33 + .../NonPersistentObjectsDemo.Module.vbproj | 202 ++++++ VB/NonPersistentObjectsDemo.Module/ReadMe.txt | 28 + VB/NonPersistentObjectsDemo.Module/Util.vb | 102 +++ .../Welcome.html | 185 +++++ VB/NonPersistentObjectsDemo.Web/Default.aspx | 19 + .../Default.aspx.designer.vb | 40 ++ .../Default.aspx.vb | 20 + VB/NonPersistentObjectsDemo.Web/Error.aspx | 147 ++++ .../Error.aspx.designer.vb | 166 +++++ VB/NonPersistentObjectsDemo.Web/Error.aspx.vb | 77 +++ VB/NonPersistentObjectsDemo.Web/Global.asax | 1 + .../Global.asax.vb | 77 +++ .../Images/Logo.svg | 43 ++ .../Images/ReadMe.txt | 12 + VB/NonPersistentObjectsDemo.Web/Login.aspx | 24 + .../Login.aspx.designer.vb | 49 ++ VB/NonPersistentObjectsDemo.Web/Login.aspx.vb | 14 + .../Model.Desktop.xafml | 3 + .../Model.Tablet.xafml | 3 + VB/NonPersistentObjectsDemo.Web/Model.xafml | 3 + .../My Project/AssemblyInfo.vb | 33 + .../NonPersistentObjectsDemo.Web.vbproj | 396 +++++++++++ VB/NonPersistentObjectsDemo.Web/ReadMe.txt | 31 + VB/NonPersistentObjectsDemo.Web/Web.config | 185 +++++ .../WebApplication.vb | 172 +++++ VB/NonPersistentObjectsDemo.Win/App.config | 46 ++ .../ExpressApp.ico | Bin 0 -> 113407 bytes .../Images/Logo.svg | 18 + .../Images/ReadMe.txt | 12 + VB/NonPersistentObjectsDemo.Win/Model.xafml | 7 + .../My Project/AssemblyInfo.vb | 33 + .../NonPersistentObjectsDemo.Win.vbproj | 370 ++++++++++ VB/NonPersistentObjectsDemo.Win/Program.vb | 58 ++ VB/NonPersistentObjectsDemo.Win/ReadMe.txt | 31 + .../WinApplication.Designer.vb | 129 ++++ .../WinApplication.vb | 65 ++ .../XafSplashScreen.Designer.vb | 177 +++++ .../XafSplashScreen.resx | 638 ++++++++++++++++++ .../XafSplashScreen.vb | 56 ++ VB/NonPersistentObjectsFilteringDemo.sln | 59 ++ 75 files changed, 5464 insertions(+) create mode 100644 VB/NonPersistentObjectsDemo.Module.Web/Controllers/ReadMe.txt create mode 100644 VB/NonPersistentObjectsDemo.Module.Web/Editors/ReadMe.txt create mode 100644 VB/NonPersistentObjectsDemo.Module.Web/Images/ReadMe.txt create mode 100644 VB/NonPersistentObjectsDemo.Module.Web/Model.DesignedDiffs.xafml create mode 100644 VB/NonPersistentObjectsDemo.Module.Web/My Project/AssemblyInfo.vb create mode 100644 VB/NonPersistentObjectsDemo.Module.Web/NonPersistentObjectsDemo.Module.Web.vbproj create mode 100644 VB/NonPersistentObjectsDemo.Module.Web/ReadMe.txt create mode 100644 VB/NonPersistentObjectsDemo.Module.Web/WebModule.Designer.vb create mode 100644 VB/NonPersistentObjectsDemo.Module.Web/WebModule.vb create mode 100644 VB/NonPersistentObjectsDemo.Module.Win/Controllers/ReadMe.txt create mode 100644 VB/NonPersistentObjectsDemo.Module.Win/Editors/ReadMe.txt create mode 100644 VB/NonPersistentObjectsDemo.Module.Win/Images/ExpressAppLogo.png create mode 100644 VB/NonPersistentObjectsDemo.Module.Win/Images/ReadMe.txt create mode 100644 VB/NonPersistentObjectsDemo.Module.Win/Model.DesignedDiffs.xafml create mode 100644 VB/NonPersistentObjectsDemo.Module.Win/My Project/AssemblyInfo.vb create mode 100644 VB/NonPersistentObjectsDemo.Module.Win/NonPersistentObjectsDemo.Module.Win.vbproj create mode 100644 VB/NonPersistentObjectsDemo.Module.Win/ReadMe.txt create mode 100644 VB/NonPersistentObjectsDemo.Module.Win/WinModule.Designer.vb create mode 100644 VB/NonPersistentObjectsDemo.Module.Win/WinModule.vb create mode 100644 VB/NonPersistentObjectsDemo.Module/BusinessObjects/Article.vb create mode 100644 VB/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.vb create mode 100644 VB/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.vb create mode 100644 VB/NonPersistentObjectsDemo.Module/BusinessObjects/ReadMe.txt create mode 100644 VB/NonPersistentObjectsDemo.Module/Controllers/FindArticlesController.vb create mode 100644 VB/NonPersistentObjectsDemo.Module/Controllers/ReadMe.txt create mode 100644 VB/NonPersistentObjectsDemo.Module/DatabaseUpdate/ReadMe.txt create mode 100644 VB/NonPersistentObjectsDemo.Module/DatabaseUpdate/Updater.vb create mode 100644 VB/NonPersistentObjectsDemo.Module/FunctionalTests/ReadMe.txt create mode 100644 VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml create mode 100644 VB/NonPersistentObjectsDemo.Module/FunctionalTests/sample.ets create mode 100644 VB/NonPersistentObjectsDemo.Module/Images/ReadMe.txt create mode 100644 VB/NonPersistentObjectsDemo.Module/Model.DesignedDiffs.xafml create mode 100644 VB/NonPersistentObjectsDemo.Module/Module.Designer.vb create mode 100644 VB/NonPersistentObjectsDemo.Module/Module.vb create mode 100644 VB/NonPersistentObjectsDemo.Module/My Project/AssemblyInfo.vb create mode 100644 VB/NonPersistentObjectsDemo.Module/NonPersistentObjectsDemo.Module.vbproj create mode 100644 VB/NonPersistentObjectsDemo.Module/ReadMe.txt create mode 100644 VB/NonPersistentObjectsDemo.Module/Util.vb create mode 100644 VB/NonPersistentObjectsDemo.Module/Welcome.html create mode 100644 VB/NonPersistentObjectsDemo.Web/Default.aspx create mode 100644 VB/NonPersistentObjectsDemo.Web/Default.aspx.designer.vb create mode 100644 VB/NonPersistentObjectsDemo.Web/Default.aspx.vb create mode 100644 VB/NonPersistentObjectsDemo.Web/Error.aspx create mode 100644 VB/NonPersistentObjectsDemo.Web/Error.aspx.designer.vb create mode 100644 VB/NonPersistentObjectsDemo.Web/Error.aspx.vb create mode 100644 VB/NonPersistentObjectsDemo.Web/Global.asax create mode 100644 VB/NonPersistentObjectsDemo.Web/Global.asax.vb create mode 100644 VB/NonPersistentObjectsDemo.Web/Images/Logo.svg create mode 100644 VB/NonPersistentObjectsDemo.Web/Images/ReadMe.txt create mode 100644 VB/NonPersistentObjectsDemo.Web/Login.aspx create mode 100644 VB/NonPersistentObjectsDemo.Web/Login.aspx.designer.vb create mode 100644 VB/NonPersistentObjectsDemo.Web/Login.aspx.vb create mode 100644 VB/NonPersistentObjectsDemo.Web/Model.Desktop.xafml create mode 100644 VB/NonPersistentObjectsDemo.Web/Model.Tablet.xafml create mode 100644 VB/NonPersistentObjectsDemo.Web/Model.xafml create mode 100644 VB/NonPersistentObjectsDemo.Web/My Project/AssemblyInfo.vb create mode 100644 VB/NonPersistentObjectsDemo.Web/NonPersistentObjectsDemo.Web.vbproj create mode 100644 VB/NonPersistentObjectsDemo.Web/ReadMe.txt create mode 100644 VB/NonPersistentObjectsDemo.Web/Web.config create mode 100644 VB/NonPersistentObjectsDemo.Web/WebApplication.vb create mode 100644 VB/NonPersistentObjectsDemo.Win/App.config create mode 100644 VB/NonPersistentObjectsDemo.Win/ExpressApp.ico create mode 100644 VB/NonPersistentObjectsDemo.Win/Images/Logo.svg create mode 100644 VB/NonPersistentObjectsDemo.Win/Images/ReadMe.txt create mode 100644 VB/NonPersistentObjectsDemo.Win/Model.xafml create mode 100644 VB/NonPersistentObjectsDemo.Win/My Project/AssemblyInfo.vb create mode 100644 VB/NonPersistentObjectsDemo.Win/NonPersistentObjectsDemo.Win.vbproj create mode 100644 VB/NonPersistentObjectsDemo.Win/Program.vb create mode 100644 VB/NonPersistentObjectsDemo.Win/ReadMe.txt create mode 100644 VB/NonPersistentObjectsDemo.Win/WinApplication.Designer.vb create mode 100644 VB/NonPersistentObjectsDemo.Win/WinApplication.vb create mode 100644 VB/NonPersistentObjectsDemo.Win/XafSplashScreen.Designer.vb create mode 100644 VB/NonPersistentObjectsDemo.Win/XafSplashScreen.resx create mode 100644 VB/NonPersistentObjectsDemo.Win/XafSplashScreen.vb create mode 100644 VB/NonPersistentObjectsFilteringDemo.sln diff --git a/VB/NonPersistentObjectsDemo.Module.Web/Controllers/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module.Web/Controllers/ReadMe.txt new file mode 100644 index 0000000..0ee4668 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module.Web/Controllers/ReadMe.txt @@ -0,0 +1,19 @@ +Folder Description + +The "Controllers" project folder is intended for storing ASP.NET-specific Controller classes +that can change the default XAF application flow and add new features. + + +Relevant Documentation + +Controllers and Actions +https://docs.devexpress.com/eXpressAppFramework/112623 + +Controller Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Controller + +ViewController Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ViewController + +WindowController Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.WindowController diff --git a/VB/NonPersistentObjectsDemo.Module.Web/Editors/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module.Web/Editors/ReadMe.txt new file mode 100644 index 0000000..461813c --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module.Web/Editors/ReadMe.txt @@ -0,0 +1,31 @@ +Folder Description + +This project folder is intended for storing custom ASP.NET List Editors, +Property Editors and View Items. + + +Relevant Documentation + +List Editors +https://docs.devexpress.com/eXpressAppFramework/113189 + +Implement Custom Property Editors +https://docs.devexpress.com/eXpressAppFramework/113097 + +View Items +https://docs.devexpress.com/eXpressAppFramework/112612 + +How to: Implement an ASP.NET Web List Editor Using a Custom Control +https://docs.devexpress.com/eXpressAppFramework/113126 + +How to: Implement a Property Editor (in ASP.NET Applications) +https://docs.devexpress.com/eXpressAppFramework/112678 + +How to: Implement a Property Editor for Specific Data Management (in ASP.NET Web Applications) +https://docs.devexpress.com/eXpressAppFramework/113116 + +How to: Customize a Built-in Web Property Editor +https://docs.devexpress.com/eXpressAppFramework/113114 + +How to: Implement a View Item +https://docs.devexpress.com/eXpressAppFramework/112641 \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Module.Web/Images/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module.Web/Images/ReadMe.txt new file mode 100644 index 0000000..230befc --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module.Web/Images/ReadMe.txt @@ -0,0 +1,12 @@ +Folder Description + +The "Images" project folder is intended for storing custom image files. + + +Relevant Documentation + +Add and Override Images +https://docs.devexpress.com/eXpressAppFramework/112792 + +Assign a Custom Image +https://docs.devexpress.com/eXpressAppFramework/112744 diff --git a/VB/NonPersistentObjectsDemo.Module.Web/Model.DesignedDiffs.xafml b/VB/NonPersistentObjectsDemo.Module.Web/Model.DesignedDiffs.xafml new file mode 100644 index 0000000..b3b40cf --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module.Web/Model.DesignedDiffs.xafml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/VB/NonPersistentObjectsDemo.Module.Web/My Project/AssemblyInfo.vb b/VB/NonPersistentObjectsDemo.Module.Web/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..cceadc5 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module.Web/My Project/AssemblyInfo.vb @@ -0,0 +1,33 @@ +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' + + diff --git a/VB/NonPersistentObjectsDemo.Module.Web/NonPersistentObjectsDemo.Module.Web.vbproj b/VB/NonPersistentObjectsDemo.Module.Web/NonPersistentObjectsDemo.Module.Web.vbproj new file mode 100644 index 0000000..ae3b5d5 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module.Web/NonPersistentObjectsDemo.Module.Web.vbproj @@ -0,0 +1,243 @@ + + + + + Debug + AnyCPU + {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B} + Library + + NonPersistentObjectsDemo.Module.Web + v4.5.2 + 512 + On + Binary + Off + On + + + true + full + false + bin\Debug\ + true + true + prompt + true + + + pdbonly + true + bin\Release\ + false + true + prompt + true + + + true + bin\EasyTest\ + true + true + EASYTEST=True + full + AnyCPU + prompt + true + + + + + + + + + + + + + + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + + + Component + + + + WebModule.vb + + + + + + + + + + + + + + + + + + {57ACDBDB-006E-43D3-9308-97857F2FF75D} + NonPersistentObjectsDemo.Module + True + + + + + diff --git a/VB/NonPersistentObjectsDemo.Module.Web/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module.Web/ReadMe.txt new file mode 100644 index 0000000..853a0d9 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module.Web/ReadMe.txt @@ -0,0 +1,28 @@ +Project Description + +This project implements an ASP.NET Module. Platform-specific application elements +can be implemented here (Controllers, Editors & View Items, etc.). The root project +folder contains the WebModule.cs(vb) file with the class that inherits ModuleBase. +This class can be designed with the Module Designer that allows you to view and +customize Module components: referenced modules, Controllers and business classes. +Additionally, the root folder contains Application Model difference files +(XAFML files) that keep application settings specific for the current Module. +Differences files can be designed with the Model Editor. + + +Relevant Documentation + +Application Solution Components +https://docs.devexpress.com/eXpressAppFramework/112569 + +ModuleBase Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase + +Module Designer +https://docs.devexpress.com/eXpressAppFramework/112828 + +Application Model +https://docs.devexpress.com/eXpressAppFramework/112579 + +Model Editor +https://docs.devexpress.com/eXpressAppFramework/112582 \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Module.Web/WebModule.Designer.vb b/VB/NonPersistentObjectsDemo.Module.Web/WebModule.Designer.vb new file mode 100644 index 0000000..daf910d --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module.Web/WebModule.Designer.vb @@ -0,0 +1,41 @@ +Namespace NonPersistentObjectsDemo.Module.Web + Partial Public Class NonPersistentObjectsDemoAspNetModule + ''' + ''' Required designer variable. + ''' + Private components As System.ComponentModel.IContainer = Nothing + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + #Region "Component Designer generated code" + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + ' + ' NonPersistentObjectsDemoAspNetModule + ' + Me.RequiredModuleTypes.Add(GetType(NonPersistentObjectsDemo.Module.NonPersistentObjectsDemoModule)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.Web.SystemModule.SystemAspNetModule)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.FileAttachments.Web.FileAttachmentsAspNetModule)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.ReportsV2.Web.ReportsAspNetModuleV2)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.Scheduler.Web.SchedulerAspNetModule)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.ScriptRecorder.Web.ScriptRecorderAspNetModule)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.TreeListEditors.Web.TreeListEditorsAspNetModule)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.Validation.Web.ValidationAspNetModule)) + End Sub + + #End Region + End Class +End Namespace \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Module.Web/WebModule.vb b/VB/NonPersistentObjectsDemo.Module.Web/WebModule.vb new file mode 100644 index 0000000..cd440ac --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module.Web/WebModule.vb @@ -0,0 +1,44 @@ +Imports System +Imports System.Linq +Imports System.Text +Imports System.ComponentModel +Imports DevExpress.ExpressApp +Imports DevExpress.ExpressApp.DC +Imports System.Collections.Generic +Imports DevExpress.ExpressApp.Model +Imports DevExpress.ExpressApp.Editors +Imports DevExpress.ExpressApp.Actions +Imports DevExpress.ExpressApp.Updating +Imports DevExpress.ExpressApp.Model.Core +Imports DevExpress.ExpressApp.Model.DomainLogics +Imports DevExpress.ExpressApp.Model.NodeGenerators +Imports DevExpress.Persistent.BaseImpl + +Namespace NonPersistentObjectsDemo.Module.Web + ' For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase. + + Public NotInheritable Partial Class NonPersistentObjectsDemoAspNetModule + Inherits ModuleBase + + 'private void Application_CreateCustomModelDifferenceStore(Object sender, CreateCustomModelDifferenceStoreEventArgs e) { + ' e.Store = new ModelDifferenceDbStore((XafApplication)sender, typeof(ModelDifference), true, "Web"); + ' e.Handled = true; + '} + Private Sub Application_CreateCustomUserModelDifferenceStore(ByVal sender As Object, ByVal e As CreateCustomModelDifferenceStoreEventArgs) + e.Store = New ModelDifferenceDbStore(DirectCast(sender, XafApplication), GetType(ModelDifference), False, "Web") + e.Handled = True + End Sub + Public Sub New() + InitializeComponent() + End Sub + Public Overrides Function GetModuleUpdaters(ByVal objectSpace As IObjectSpace, ByVal versionFromDB As Version) As IEnumerable(Of ModuleUpdater) + Return ModuleUpdater.EmptyModuleUpdaters + End Function + Public Overrides Sub Setup(ByVal application As XafApplication) + MyBase.Setup(application) + 'application.CreateCustomModelDifferenceStore += Application_CreateCustomModelDifferenceStore; + AddHandler application.CreateCustomUserModelDifferenceStore, AddressOf Application_CreateCustomUserModelDifferenceStore + ' Manage various aspects of the application UI and behavior at the module level. + End Sub + End Class +End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module.Win/Controllers/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module.Win/Controllers/ReadMe.txt new file mode 100644 index 0000000..b9c5dc3 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module.Win/Controllers/ReadMe.txt @@ -0,0 +1,19 @@ +Folder Description + +The "Controllers" project folder is intended for storing platform-agnostic Controller classes +that can change the default XAF application flow and add new features. + + +Relevant Documentation + +Controllers and Actions +https://docs.devexpress.com/eXpressAppFramework/112623 + +Controller Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Controller + +ViewController Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ViewController + +WindowController Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.WindowController diff --git a/VB/NonPersistentObjectsDemo.Module.Win/Editors/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module.Win/Editors/ReadMe.txt new file mode 100644 index 0000000..3d405d8 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module.Win/Editors/ReadMe.txt @@ -0,0 +1,33 @@ +Folder Description + +This project folder is intended for storing custom WinForms List Editors, +Property Editors and View Items. + +Relevant Documentation + +List Editors +https://docs.devexpress.com/eXpressAppFramework/113189 + +Implement Custom Property Editors +https://docs.devexpress.com/eXpressAppFramework/113097 + +View Items +https://docs.devexpress.com/eXpressAppFramework/112612 + +How to: Implement a Custom WinForms List Editor +https://docs.devexpress.com/eXpressAppFramework/112659 + +How to: Support a Context Menu for a Custom WinForms List Editor +https://docs.devexpress.com/eXpressAppFramework/112660 + +How to: Implement a Property Editor (in WinForms Applications) +https://docs.devexpress.com/eXpressAppFramework/112679 + +How to: Implement a Property Editor for Specific Data Management (in WinForms Applications) +https://docs.devexpress.com/eXpressAppFramework/113101 + +How to: Extend Built-in Property Editor's Functionality +https://docs.devexpress.com/eXpressAppFramework/113104 + +How to: Implement a View Item +https://docs.devexpress.com/eXpressAppFramework/112641 diff --git a/VB/NonPersistentObjectsDemo.Module.Win/Images/ExpressAppLogo.png b/VB/NonPersistentObjectsDemo.Module.Win/Images/ExpressAppLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..3a6eaada75b3745cfe120bd6c4a9b1fd9e3058fc GIT binary patch literal 7486 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%0D@};7Gcq+eA2G? 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 IM6N<$g0{$L^Z)<= literal 0 HcmV?d00001 diff --git a/VB/NonPersistentObjectsDemo.Module.Win/Images/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module.Win/Images/ReadMe.txt new file mode 100644 index 0000000..230befc --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module.Win/Images/ReadMe.txt @@ -0,0 +1,12 @@ +Folder Description + +The "Images" project folder is intended for storing custom image files. + + +Relevant Documentation + +Add and Override Images +https://docs.devexpress.com/eXpressAppFramework/112792 + +Assign a Custom Image +https://docs.devexpress.com/eXpressAppFramework/112744 diff --git a/VB/NonPersistentObjectsDemo.Module.Win/Model.DesignedDiffs.xafml b/VB/NonPersistentObjectsDemo.Module.Win/Model.DesignedDiffs.xafml new file mode 100644 index 0000000..d5e5a36 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module.Win/Model.DesignedDiffs.xafml @@ -0,0 +1,2 @@ + + diff --git a/VB/NonPersistentObjectsDemo.Module.Win/My Project/AssemblyInfo.vb b/VB/NonPersistentObjectsDemo.Module.Win/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..b38e166 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module.Win/My Project/AssemblyInfo.vb @@ -0,0 +1,33 @@ +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' + + diff --git a/VB/NonPersistentObjectsDemo.Module.Win/NonPersistentObjectsDemo.Module.Win.vbproj b/VB/NonPersistentObjectsDemo.Module.Win/NonPersistentObjectsDemo.Module.Win.vbproj new file mode 100644 index 0000000..a6a0475 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module.Win/NonPersistentObjectsDemo.Module.Win.vbproj @@ -0,0 +1,281 @@ + + + + + Debug + AnyCPU + {72D644CD-C193-4572-B2E3-CA82819A1627} + Library + + NonPersistentObjectsDemo.Module.Win + v4.5.2 + 512 + On + Binary + Off + On + + + true + full + false + bin\Debug\ + true + true + prompt + true + + + pdbonly + true + bin\Release\ + false + true + prompt + true + + + true + bin\EasyTest\ + true + true + EASYTEST=True + full + AnyCPU + prompt + true + + + + + + + + + + + + + + + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + System + False + + + False + + + System.Data + False + + + System.Drawing + False + + + System.Windows.Forms + False + + + System.XML + False + + + + + + Component + + + WinModule.vb + + + + + + + + + + + + + + + + + + + + + + + {57ACDBDB-006E-43D3-9308-97857F2FF75D} + NonPersistentObjectsDemo.Module + True + + + + + diff --git a/VB/NonPersistentObjectsDemo.Module.Win/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module.Win/ReadMe.txt new file mode 100644 index 0000000..17056ef --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module.Win/ReadMe.txt @@ -0,0 +1,29 @@ +Project Description + +This project implements a WinForms Module. Platform-specific application +elements can be implemented here (Controllers, Editors & View Items, etc.). +The root project folder contains the WinModule.cs(vb) file with the class that +inherits ModuleBase. This class can be designed with the Module Designer that +allows you to view and customize Module components: referenced modules, +Controllers and business classes. Additionally, the root folder contains +Application Model difference files (XAFML files) that keep application +settings specific for the current Module. Differences files can be designed +with the Model Editor. + + +Relevant Documentation + +Application Solution Components +https://docs.devexpress.com/eXpressAppFramework/112569 + +ModuleBase Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase + +Module Designer +https://docs.devexpress.com/eXpressAppFramework/112828 + +Application Model +https://docs.devexpress.com/eXpressAppFramework/112579 + +Model Editor +https://docs.devexpress.com/eXpressAppFramework/112582 diff --git a/VB/NonPersistentObjectsDemo.Module.Win/WinModule.Designer.vb b/VB/NonPersistentObjectsDemo.Module.Win/WinModule.Designer.vb new file mode 100644 index 0000000..5b61bab --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module.Win/WinModule.Designer.vb @@ -0,0 +1,41 @@ +Namespace NonPersistentObjectsDemo.Module.Win + Partial Public Class NonPersistentObjectsDemoWindowsFormsModule + ''' + ''' Required designer variable. + ''' + Private components As System.ComponentModel.IContainer = Nothing + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + #Region "Component Designer generated code" + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + ' + ' NonPersistentObjectsDemoWindowsFormsModule + ' + Me.RequiredModuleTypes.Add(GetType(NonPersistentObjectsDemo.Module.NonPersistentObjectsDemoModule)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.Win.SystemModule.SystemWindowsFormsModule)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.FileAttachments.Win.FileAttachmentsWindowsFormsModule)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.ReportsV2.Win.ReportsWindowsFormsModuleV2)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.Scheduler.Win.SchedulerWindowsFormsModule)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.ScriptRecorder.Win.ScriptRecorderWindowsFormsModule)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.TreeListEditors.Win.TreeListEditorsWindowsFormsModule)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.Validation.Win.ValidationWindowsFormsModule)) + End Sub + + #End Region + End Class +End Namespace \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Module.Win/WinModule.vb b/VB/NonPersistentObjectsDemo.Module.Win/WinModule.vb new file mode 100644 index 0000000..c53f375 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module.Win/WinModule.vb @@ -0,0 +1,44 @@ +Imports System +Imports System.Linq +Imports System.Text +Imports System.ComponentModel +Imports DevExpress.ExpressApp +Imports DevExpress.ExpressApp.DC +Imports System.Collections.Generic +Imports DevExpress.ExpressApp.Model +Imports DevExpress.ExpressApp.Editors +Imports DevExpress.ExpressApp.Actions +Imports DevExpress.ExpressApp.Updating +Imports DevExpress.ExpressApp.Model.Core +Imports DevExpress.ExpressApp.Model.DomainLogics +Imports DevExpress.ExpressApp.Model.NodeGenerators +Imports DevExpress.Persistent.BaseImpl + +Namespace NonPersistentObjectsDemo.Module.Win + ' For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase. + + Public NotInheritable Partial Class NonPersistentObjectsDemoWindowsFormsModule + Inherits ModuleBase + + 'private void Application_CreateCustomModelDifferenceStore(Object sender, CreateCustomModelDifferenceStoreEventArgs e) { + ' e.Store = new ModelDifferenceDbStore((XafApplication)sender, typeof(ModelDifference), true, "Win"); + ' e.Handled = true; + '} + Private Sub Application_CreateCustomUserModelDifferenceStore(ByVal sender As Object, ByVal e As CreateCustomModelDifferenceStoreEventArgs) + e.Store = New ModelDifferenceDbStore(DirectCast(sender, XafApplication), GetType(ModelDifference), False, "Win") + e.Handled = True + End Sub + Public Sub New() + InitializeComponent() + End Sub + Public Overrides Function GetModuleUpdaters(ByVal objectSpace As IObjectSpace, ByVal versionFromDB As Version) As IEnumerable(Of ModuleUpdater) + Return ModuleUpdater.EmptyModuleUpdaters + End Function + Public Overrides Sub Setup(ByVal application As XafApplication) + MyBase.Setup(application) + 'application.CreateCustomModelDifferenceStore += Application_CreateCustomModelDifferenceStore; + AddHandler application.CreateCustomUserModelDifferenceStore, AddressOf Application_CreateCustomUserModelDifferenceStore + ' Manage various aspects of the application UI and behavior at the module level. + End Sub + End Class +End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module/BusinessObjects/Article.vb b/VB/NonPersistentObjectsDemo.Module/BusinessObjects/Article.vb new file mode 100644 index 0000000..5d7c968 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/BusinessObjects/Article.vb @@ -0,0 +1,108 @@ +Imports System +Imports System.Collections.Generic +Imports System.ComponentModel +Imports System.Linq +Imports System.Text +Imports System.Threading.Tasks +Imports DevExpress.ExpressApp +Imports DevExpress.ExpressApp.DC +Imports DevExpress.Persistent.Base + +Namespace NonPersistentObjectsDemo.Module.BusinessObjects + + + + + + Public Class Article + Inherits NonPersistentObjectBase + + Friend Sub New() + End Sub +'INSTANT VB NOTE: The field id was renamed since Visual Basic does not allow fields to have the same name as other class members: + Private id_Conflict As Integer + + + Public Property ID() As Integer + Get + Return id_Conflict + End Get + Set(ByVal value As Integer) + id_Conflict = value + End Set + End Property + Private _Author As Contact + Public Property Author() As Contact + Get + Return _Author + End Get + Set(ByVal value As Contact) + SetPropertyValue(NameOf(Author), _Author, value) + End Set + End Property + Private _Title As String + Public Property Title() As String + Get + Return _Title + End Get + Set(ByVal value As String) + SetPropertyValue(Of String)(NameOf(Title), _Title, value) + End Set + End Property + Private _Content As String + + Public Property Content() As String + Get + Return _Content + End Get + Set(ByVal value As String) + SetPropertyValue(Of String)(NameOf(Content), _Content, value) + End Set + End Property + End Class + + Friend Class ArticleAdapter + Private objectSpace As NonPersistentObjectSpace + Private Shared articles As List(Of Article) + + Public Sub New(ByVal npos As NonPersistentObjectSpace) + Me.objectSpace = npos + AddHandler objectSpace.ObjectsGetting, AddressOf ObjectSpace_ObjectsGetting + End Sub + Private Sub ObjectSpace_ObjectsGetting(ByVal sender As Object, ByVal e As ObjectsGettingEventArgs) + If e.ObjectType Is GetType(Article) Then + Dim collection = New DynamicCollection(objectSpace, e.ObjectType, e.Criteria, e.Sorting, e.InTransaction) + AddHandler collection.FetchObjects, AddressOf DynamicCollection_FetchObjects + e.Objects = collection + End If + End Sub + Private Sub DynamicCollection_FetchObjects(ByVal sender As Object, ByVal e As FetchObjectsEventArgs) + If e.ObjectType Is GetType(Article) Then + e.Objects = articles + e.ShapeData = True + End If + End Sub + + Shared Sub New() + articles = New List(Of Article)() + CreateDemoData() + End Sub + + #Region "DemoData" + Private Shared Sub CreateDemoData() + Dim gen = New GenHelper() + Dim contacts = ContactAdapter.GetAllContacts() + For i As Integer = 0 To 4999 + Dim id1 = gen.Next(contacts.Count) + Dim id2 = gen.Next(contacts.Count - 1) + articles.Add(New Article() With { + .ID = i, + .Title = GenHelper.ToTitle(gen.MakeBlah(gen.Next(7))), + .Content = gen.MakeBlahBlahBlah(5 + gen.Next(100), 7), + .Author = contacts(id1) + }) + Next i + End Sub + #End Region + End Class +End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.vb b/VB/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.vb new file mode 100644 index 0000000..edbe023 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.vb @@ -0,0 +1,146 @@ +Imports System +Imports System.Collections.Generic +Imports System.ComponentModel +Imports System.Data +Imports System.Linq +Imports System.Text +Imports System.Threading.Tasks +Imports DevExpress.Data.Filtering +Imports DevExpress.ExpressApp +Imports DevExpress.Persistent.Base +Imports DevExpress.Xpo + +Namespace NonPersistentObjectsDemo.Module.BusinessObjects + + + + + + Public Class Contact + Inherits NonPersistentObjectBase + + Friend Sub New() + End Sub +'INSTANT VB NOTE: The field userName was renamed since Visual Basic does not allow fields to have the same name as other class members: + Private userName_Conflict As String + + Public Property UserName() As String + Get + Return userName_Conflict + End Get + Set(ByVal value As String) + userName_Conflict = value + End Set + End Property +'INSTANT VB NOTE: The field fullName was renamed since Visual Basic does not allow fields to have the same name as other class members: + Private fullName_Conflict As String + Public Property FullName() As String + Get + Return fullName_Conflict + End Get + Set(ByVal value As String) + SetPropertyValue(NameOf(FullName), fullName_Conflict, value) + End Set + End Property + Private _Age As Integer + Public Property Age() As Integer + Get + Return _Age + End Get + Set(ByVal value As Integer) + SetPropertyValue(Of Integer)(NameOf(Age), _Age, value) + End Set + End Property + Private _Rating As Single + Public Property Rating() As Single + Get + Return _Rating + End Get + Set(ByVal value As Single) + SetPropertyValue(Of Single)(NameOf(Rating), _Rating, value) + End Set + End Property + End Class + + Friend Class ContactAdapter + Private objectSpace As NonPersistentObjectSpace + + Public Sub New(ByVal npos As NonPersistentObjectSpace) + Me.objectSpace = npos + AddHandler objectSpace.ObjectsGetting, AddressOf ObjectSpace_ObjectsGetting + End Sub + Private Sub ObjectSpace_ObjectsGetting(ByVal sender As Object, ByVal e As ObjectsGettingEventArgs) + If e.ObjectType Is GetType(Contact) Then + Dim collection = New DynamicCollection(objectSpace, e.ObjectType, e.Criteria, e.Sorting, e.InTransaction) + AddHandler collection.FetchObjects, AddressOf DynamicCollection_FetchObjects + e.Objects = collection + End If + End Sub + Private Sub DynamicCollection_FetchObjects(ByVal sender As Object, ByVal e As FetchObjectsEventArgs) + If e.ObjectType Is GetType(Contact) Then + Dim rows = contactsStorage.GetContactRows(e.Criteria, e.Sorting) + e.Objects = rows.Select(Function(row) GetContact(row)) + End If + End Sub + Private Shared Function GetContact(ByVal row As DataRow) As Contact + Dim obj As Contact = Nothing + Dim key = TryCast(row("UserName"), String) + If Not contactsCache.TryGetValue(key, obj) Then + obj = New Contact() With { + .UserName = key, + .FullName = DirectCast(row("FullName"), String), + .Age = DirectCast(row("Age"), Integer), + .Rating = DirectCast(row("Rating"), Single) + } + contactsCache.Add(key, obj) + End If + Return obj + End Function + + Private Shared contactsStorage As ContactStorage + Private Shared contactsCache As Dictionary(Of String, Contact) + Friend Shared Function GetAllContacts() As IList(Of Contact) + Return contactsStorage.GetContactRows(Nothing, Nothing).Select(Function(row) GetContact(row)).ToList() + End Function + Shared Sub New() + contactsStorage = New ContactStorage() + contactsStorage.LoadDemoData() + contactsCache = New Dictionary(Of String, Contact)() + End Sub + End Class + + Friend Class ContactStorage + Private dataSet As DataSet + Public Function GetContactRows(ByVal criteria As CriteriaOperator, ByVal sorting As IList(Of SortProperty)) As IList(Of DataRow) + Dim filter = CriteriaToWhereClauseHelper.GetDataSetWhere(criteria) + Dim sort As String = Nothing + If sorting IsNot Nothing AndAlso sorting.Count = 1 AndAlso TypeOf sorting(0).Property Is OperandProperty Then + sort = String.Format("{0} {1}", sorting(0).PropertyName,If(sorting(0).Direction = DevExpress.Xpo.DB.SortingDirection.Ascending, "ASC", "DESC")) + End If + Return dataSet.Tables("Contacts").Select(filter, sort) + End Function + Public Sub New() + dataSet = New DataSet() + If True Then + Dim dt = dataSet.Tables.Add("Contacts") + Dim colID = dt.Columns.Add("UserName", GetType(String)) + dt.Columns.Add("FullName", GetType(String)) + dt.Columns.Add("Age", GetType(Integer)) + dt.Columns.Add("Rating", GetType(Single)) + dt.PrimaryKey = New DataColumn() { colID } + End If + LoadDemoData() + End Sub + Public Sub LoadDemoData() + Dim dt = dataSet.Tables("Contacts") + Dim gen = New GenHelper() + For i As Integer = 0 To 199 + Dim id = gen.MakeTosh(20) + Dim fullName = gen.GetFullName() + Dim age = 16 + gen.Next(80) + Dim rating = gen.Next(100) * gen.Next(100) * 0.001F + dt.LoadDataRow(New Object() { id, fullName, age, rating }, LoadOption.OverwriteChanges) + Next i + End Sub + End Class +End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.vb b/VB/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.vb new file mode 100644 index 0000000..c9fa554 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.vb @@ -0,0 +1,59 @@ +Imports System +Imports System.Collections.Generic +Imports System.ComponentModel +Imports System.Linq +Imports System.Text +Imports System.Threading.Tasks +Imports DevExpress.ExpressApp +Imports DevExpress.ExpressApp.DC +Imports DevExpress.Persistent.Base + +Namespace NonPersistentObjectsDemo.Module.BusinessObjects + + Public MustInherit Class NonPersistentObjectBase + Implements INotifyPropertyChanged, IObjectSpaceLink + +'INSTANT VB NOTE: The field objectSpace was renamed since Visual Basic does not allow fields to have the same name as other class members: + Private objectSpace_Conflict As IObjectSpace + Protected ReadOnly Property ObjectSpace() As IObjectSpace + Get + Return objectSpace_Conflict + End Get + End Property + Private Property IObjectSpaceLink_ObjectSpace() As IObjectSpace Implements IObjectSpaceLink.ObjectSpace + Get + Return objectSpace_Conflict + End Get + Set(ByVal value As IObjectSpace) + If objectSpace_Conflict IsNot value Then + OnObjectSpaceChanging() + objectSpace_Conflict = value + OnObjectSpaceChanged() + End If + End Set + End Property + Protected Overridable Sub OnObjectSpaceChanging() + End Sub + Protected Overridable Sub OnObjectSpaceChanged() + End Sub + Protected Function FindPersistentObjectSpace(ByVal type As Type) As IObjectSpace + Return DirectCast(ObjectSpace, NonPersistentObjectSpace).AdditionalObjectSpaces.FirstOrDefault(Function(os) os.IsKnownType(type)) + End Function + Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged + Protected Sub OnPropertyChanged(ByVal propertyName As String) + PropertyChangedEvent?.Invoke(Me, New PropertyChangedEventArgs(propertyName)) + End Sub + Protected Sub SetPropertyValue(Of T)(ByVal name As String, ByRef field As T, ByVal value As T) + If Not Equals(field, value) Then + field = value + OnPropertyChanged(name) + End If + End Sub + + Public ReadOnly Property This() As Object + Get + Return Me + End Get + End Property + End Class +End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module/BusinessObjects/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module/BusinessObjects/ReadMe.txt new file mode 100644 index 0000000..09595b9 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/BusinessObjects/ReadMe.txt @@ -0,0 +1,11 @@ +Folder Description + +The "BusinessObjects" project folder is intended for storing the business objects +code. In XAF, a business object can be implemented as a base persistent class +descendant and as Domain Component interfaces. + +Relevant Documentation + +Business Model Design +https://docs.devexpress.com/eXpressAppFramework/112600 + diff --git a/VB/NonPersistentObjectsDemo.Module/Controllers/FindArticlesController.vb b/VB/NonPersistentObjectsDemo.Module/Controllers/FindArticlesController.vb new file mode 100644 index 0000000..9431fe3 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/Controllers/FindArticlesController.vb @@ -0,0 +1,95 @@ +Imports System +Imports System.Collections.Generic +Imports System.ComponentModel +Imports System.Linq +Imports System.Text +Imports System.Threading.Tasks +Imports DevExpress.Data.Filtering +Imports DevExpress.ExpressApp +Imports DevExpress.ExpressApp.Actions +Imports DevExpress.ExpressApp.ConditionalAppearance +Imports DevExpress.ExpressApp.DC +Imports DevExpress.Persistent.Base +Imports NonPersistentObjectsDemo.Module.BusinessObjects + +Namespace NonPersistentObjectsDemo.Module.Controllers + + Public Class FindArticlesController + Inherits ViewController + + Private action As PopupWindowShowAction + Public Sub New() + action = New PopupWindowShowAction(Me, "FindArticles", PredefinedCategory.View) + AddHandler action.CustomizePopupWindowParams, AddressOf Action_CustomizePopupWindowParams + AddHandler action.Execute, AddressOf Action_Execute + End Sub + Private Sub Action_CustomizePopupWindowParams(ByVal sender As Object, ByVal e As CustomizePopupWindowParamsEventArgs) + Dim objectSpace = Application.CreateObjectSpace(GetType(FindArticlesDialog)) + Dim obj = New FindArticlesDialog() + Dim detailView = Application.CreateDetailView(objectSpace, obj) + detailView.ViewEditMode = DevExpress.ExpressApp.Editors.ViewEditMode.Edit + e.View = detailView + End Sub + Private Sub Action_Execute(ByVal sender As Object, ByVal e As PopupWindowShowActionExecuteEventArgs) + End Sub + End Class + + + Public Class FindArticlesDialog + Inherits NonPersistentObjectBase + + Private _Author As Contact + + Public Property Author() As Contact + Get + Return _Author + End Get + Set(ByVal value As Contact) + SetPropertyValue(Of Contact)(NameOf(Author), _Author, value) + End Set + End Property + Private _AuthorMinRating As Single + + Public Property AuthorMinRating() As Single + Get + Return _AuthorMinRating + End Get + Set(ByVal value As Single) + SetPropertyValue(Of Single)(NameOf(AuthorMinRating), _AuthorMinRating, value) + End Set + End Property + Private _Articles As BindingList(Of Article) + Public ReadOnly Property Articles() As BindingList(Of Article) + Get + If _Articles Is Nothing Then + _Articles = New BindingList(Of Article)() + End If + Return _Articles + End Get + End Property + Private Sub UpdateArticles() + If _Articles IsNot Nothing Then + Dim filter = GetCriteria() + _Articles.RaiseListChangedEvents = False + _Articles.Clear() + For Each obj In ObjectSpace.GetObjects(Of Article)(filter) + _Articles.Add(obj) + Next obj + _Articles.RaiseListChangedEvents = True + _Articles.ResetBindings() + OnPropertyChanged(NameOf(Articles)) + End If + End Sub + Private Function GetCriteria() As CriteriaOperator + If Author IsNot Nothing Then + Return New BinaryOperator("Author.UserName", Author.UserName) + Else + Return CriteriaOperator.Parse("Author.Rating >= ?", AuthorMinRating) + End If + End Function + + Public Sub Find() + UpdateArticles() + End Sub + End Class +End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module/Controllers/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module/Controllers/ReadMe.txt new file mode 100644 index 0000000..b9c5dc3 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/Controllers/ReadMe.txt @@ -0,0 +1,19 @@ +Folder Description + +The "Controllers" project folder is intended for storing platform-agnostic Controller classes +that can change the default XAF application flow and add new features. + + +Relevant Documentation + +Controllers and Actions +https://docs.devexpress.com/eXpressAppFramework/112623 + +Controller Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Controller + +ViewController Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ViewController + +WindowController Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.WindowController diff --git a/VB/NonPersistentObjectsDemo.Module/DatabaseUpdate/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module/DatabaseUpdate/ReadMe.txt new file mode 100644 index 0000000..31da2b7 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/DatabaseUpdate/ReadMe.txt @@ -0,0 +1,17 @@ +Folder Description + +The "DatabaseUpdate" project folder is intended for storing code that supplies +initial data (default User objects, etc) and handles a database update when the +application version changes. + + +Relevant Documentation + +Supply Initial Data +https://docs.devexpress.com/eXpressAppFramework/112788 + +How to: Update the Database Structure after the Persistent Class or Property Was Renamed or Removed +https://docs.devexpress.com/eXpressAppFramework/113254 + +ModuleUpdater Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Updating.ModuleUpdater diff --git a/VB/NonPersistentObjectsDemo.Module/DatabaseUpdate/Updater.vb b/VB/NonPersistentObjectsDemo.Module/DatabaseUpdate/Updater.vb new file mode 100644 index 0000000..c925266 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/DatabaseUpdate/Updater.vb @@ -0,0 +1,83 @@ +Imports System +Imports System.Linq +Imports DevExpress.ExpressApp +Imports DevExpress.Data.Filtering +Imports DevExpress.Persistent.Base +Imports DevExpress.ExpressApp.Updating +Imports DevExpress.ExpressApp.Security +Imports DevExpress.ExpressApp.SystemModule +Imports DevExpress.ExpressApp.Security.Strategy +Imports DevExpress.Xpo +Imports DevExpress.ExpressApp.Xpo +Imports DevExpress.Persistent.BaseImpl +Imports DevExpress.Persistent.BaseImpl.PermissionPolicy + +Namespace NonPersistentObjectsDemo.Module.DatabaseUpdate + ' For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Updating.ModuleUpdater + Public Class Updater + Inherits ModuleUpdater + + Public Sub New(ByVal objectSpace As IObjectSpace, ByVal currentDBVersion As Version) + MyBase.New(objectSpace, currentDBVersion) + End Sub + Public Overrides Sub UpdateDatabaseAfterUpdateSchema() + MyBase.UpdateDatabaseAfterUpdateSchema() + 'CreateSecurityObjects(); + End Sub + + #Region "Security" + Private Sub CreateSecurityObjects() + Dim sampleUser As PermissionPolicyUser = ObjectSpace.FindObject(Of PermissionPolicyUser)(New BinaryOperator("UserName", "User")) + If sampleUser Is Nothing Then + sampleUser = ObjectSpace.CreateObject(Of PermissionPolicyUser)() + sampleUser.UserName = "User" + sampleUser.SetPassword("") + End If + Dim defaultRole As PermissionPolicyRole = CreateDefaultRole() + sampleUser.Roles.Add(defaultRole) + + Dim userAdmin As PermissionPolicyUser = ObjectSpace.FindObject(Of PermissionPolicyUser)(New BinaryOperator("UserName", "Admin")) + If userAdmin Is Nothing Then + userAdmin = ObjectSpace.CreateObject(Of PermissionPolicyUser)() + userAdmin.UserName = "Admin" + ' Set a password if the standard authentication type is used + userAdmin.SetPassword("") + End If + ' If a role with the Administrators name doesn't exist in the database, create this role + Dim adminRole As PermissionPolicyRole = ObjectSpace.FindObject(Of PermissionPolicyRole)(New BinaryOperator("Name", "Administrators")) + If adminRole Is Nothing Then + adminRole = ObjectSpace.CreateObject(Of PermissionPolicyRole)() + adminRole.Name = "Administrators" + End If + adminRole.IsAdministrative = True + userAdmin.Roles.Add(adminRole) + ObjectSpace.CommitChanges() 'This line persists created object(s). + End Sub + #End Region + + Public Overrides Sub UpdateDatabaseBeforeUpdateSchema() + MyBase.UpdateDatabaseBeforeUpdateSchema() + 'if(CurrentDBVersion < new Version("1.1.0.0") && CurrentDBVersion > new Version("0.0.0.0")) { + ' RenameColumn("DomainObject1Table", "OldColumnName", "NewColumnName"); + '} + End Sub + Private Function CreateDefaultRole() As PermissionPolicyRole + Dim defaultRole As PermissionPolicyRole = ObjectSpace.FindObject(Of PermissionPolicyRole)(New BinaryOperator("Name", "Default")) + If defaultRole Is Nothing Then + defaultRole = ObjectSpace.CreateObject(Of PermissionPolicyRole)() + defaultRole.Name = "Default" + + defaultRole.AddObjectPermission(Of PermissionPolicyUser)(SecurityOperations.Read, "[Oid] = CurrentUserId()", SecurityPermissionState.Allow) + defaultRole.AddNavigationPermission("Application/NavigationItems/Items/Default/Items/MyDetails", SecurityPermissionState.Allow) + defaultRole.AddMemberPermission(Of PermissionPolicyUser)(SecurityOperations.Write, "ChangePasswordOnFirstLogon", "[Oid] = CurrentUserId()", SecurityPermissionState.Allow) + defaultRole.AddMemberPermission(Of PermissionPolicyUser)(SecurityOperations.Write, "StoredPassword", "[Oid] = CurrentUserId()", SecurityPermissionState.Allow) + defaultRole.AddTypePermissionsRecursively(Of PermissionPolicyRole)(SecurityOperations.Read, SecurityPermissionState.Deny) + defaultRole.AddTypePermissionsRecursively(Of ModelDifference)(SecurityOperations.ReadWriteAccess, SecurityPermissionState.Allow) + defaultRole.AddTypePermissionsRecursively(Of ModelDifferenceAspect)(SecurityOperations.ReadWriteAccess, SecurityPermissionState.Allow) + defaultRole.AddTypePermissionsRecursively(Of ModelDifference)(SecurityOperations.Create, SecurityPermissionState.Allow) + defaultRole.AddTypePermissionsRecursively(Of ModelDifferenceAspect)(SecurityOperations.Create, SecurityPermissionState.Allow) + End If + Return defaultRole + End Function + End Class +End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/ReadMe.txt new file mode 100644 index 0000000..fb0b599 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/ReadMe.txt @@ -0,0 +1,10 @@ +Folder Description + +The "FunctionalTests" project folder is intended for storing EasyTest +configuration file and scripts. + + +Relevant Documentation + +Functional Testing +https://docs.devexpress.com/eXpressAppFramework/113206 diff --git a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml new file mode 100644 index 0000000..b19e270 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/sample.ets b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/sample.ets new file mode 100644 index 0000000..ab78fc2 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/sample.ets @@ -0,0 +1,20 @@ +;#DropDB NonPersistentObjectsDemoEasyTest + +#Application NonPersistentObjectsDemoWin +#Application NonPersistentObjectsDemoWeb + +*FillForm + User Name = Admin +*Action Log In + +#IfDef NonPersistentObjectsDemoWin + +*Action About... + +*Action OK + +#EndIf + +#IfDef NonPersistentObjectsDemoWeb +*Action Navigation(My Details) +#EndIf diff --git a/VB/NonPersistentObjectsDemo.Module/Images/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module/Images/ReadMe.txt new file mode 100644 index 0000000..230befc --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/Images/ReadMe.txt @@ -0,0 +1,12 @@ +Folder Description + +The "Images" project folder is intended for storing custom image files. + + +Relevant Documentation + +Add and Override Images +https://docs.devexpress.com/eXpressAppFramework/112792 + +Assign a Custom Image +https://docs.devexpress.com/eXpressAppFramework/112744 diff --git a/VB/NonPersistentObjectsDemo.Module/Model.DesignedDiffs.xafml b/VB/NonPersistentObjectsDemo.Module/Model.DesignedDiffs.xafml new file mode 100644 index 0000000..fbd248d --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/Model.DesignedDiffs.xafml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/VB/NonPersistentObjectsDemo.Module/Module.Designer.vb b/VB/NonPersistentObjectsDemo.Module/Module.Designer.vb new file mode 100644 index 0000000..eb519e6 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/Module.Designer.vb @@ -0,0 +1,50 @@ +Namespace NonPersistentObjectsDemo.Module + Partial Public Class NonPersistentObjectsDemoModule + ''' + ''' Required designer variable. + ''' + Private components As System.ComponentModel.IContainer = Nothing + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + #Region "Component Designer generated code" + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + ' + ' NonPersistentObjectsDemoModule + ' + Me.AdditionalExportedTypes.Add(GetType(DevExpress.Persistent.BaseImpl.ModelDifference)) + Me.AdditionalExportedTypes.Add(GetType(DevExpress.Persistent.BaseImpl.ModelDifferenceAspect)) + Me.AdditionalExportedTypes.Add(GetType(DevExpress.Persistent.BaseImpl.BaseObject)) + 'this.AdditionalExportedTypes.Add(typeof(DevExpress.Persistent.BaseImpl.FileData)); + 'this.AdditionalExportedTypes.Add(typeof(DevExpress.Persistent.BaseImpl.FileAttachmentBase)); + 'this.AdditionalExportedTypes.Add(typeof(DevExpress.Persistent.BaseImpl.Event)); + 'this.AdditionalExportedTypes.Add(typeof(DevExpress.Persistent.BaseImpl.Resource)); + 'this.AdditionalExportedTypes.Add(typeof(DevExpress.Persistent.BaseImpl.HCategory)); + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.SystemModule.SystemModule)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.Objects.BusinessClassLibraryCustomizationModule)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.CloneObject.CloneObjectModule)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.ConditionalAppearance.ConditionalAppearanceModule)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.ReportsV2.ReportsModuleV2)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.Scheduler.SchedulerModuleBase)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.ScriptRecorder.ScriptRecorderModuleBase)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.TreeListEditors.TreeListEditorsModuleBase)) + Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.Validation.ValidationModule)) + End Sub + + #End Region + End Class +End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module/Module.vb b/VB/NonPersistentObjectsDemo.Module/Module.vb new file mode 100644 index 0000000..6f57162 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/Module.vb @@ -0,0 +1,54 @@ +Imports System +Imports System.Text +Imports System.Linq +Imports DevExpress.ExpressApp +Imports System.ComponentModel +Imports DevExpress.ExpressApp.DC +Imports System.Collections.Generic +Imports DevExpress.Persistent.Base +Imports DevExpress.Persistent.BaseImpl +Imports DevExpress.Persistent.BaseImpl.PermissionPolicy +Imports DevExpress.ExpressApp.Model +Imports DevExpress.ExpressApp.Actions +Imports DevExpress.ExpressApp.Editors +Imports DevExpress.ExpressApp.Updating +Imports DevExpress.ExpressApp.Model.Core +Imports DevExpress.ExpressApp.Model.DomainLogics +Imports DevExpress.ExpressApp.Model.NodeGenerators +Imports DevExpress.ExpressApp.Xpo +Imports NonPersistentObjectsDemo.Module.BusinessObjects + +Namespace NonPersistentObjectsDemo.Module + ' For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase. + Public NotInheritable Partial Class NonPersistentObjectsDemoModule + Inherits ModuleBase + + Public Sub New() + InitializeComponent() + BaseObject.OidInitializationMode = OidInitializationMode.AfterConstruction + End Sub + Public Overrides Function GetModuleUpdaters(ByVal objectSpace As IObjectSpace, ByVal versionFromDB As Version) As IEnumerable(Of ModuleUpdater) + Dim updater As ModuleUpdater = New DatabaseUpdate.Updater(objectSpace, versionFromDB) + Return New ModuleUpdater() { updater } + End Function + Public Overrides Sub Setup(ByVal application As XafApplication) + MyBase.Setup(application) + ' Manage various aspects of the application UI and behavior at the module level. + AddHandler application.SetupComplete, AddressOf Application_SetupComplete + End Sub + Private Sub Application_SetupComplete(ByVal sender As Object, ByVal e As EventArgs) + AddHandler Application.ObjectSpaceCreated, AddressOf Application_ObjectSpaceCreated + End Sub + Private Sub Application_ObjectSpaceCreated(ByVal sender As Object, ByVal e As ObjectSpaceCreatedEventArgs) + Dim npos = TryCast(e.ObjectSpace, NonPersistentObjectSpace) + If npos IsNot Nothing Then + Dim tempVar As New ArticleAdapter(npos) + Dim tempVar2 As New ContactAdapter(npos) + End If + End Sub + Public Overrides Sub CustomizeTypesInfo(ByVal typesInfo As ITypesInfo) + MyBase.CustomizeTypesInfo(typesInfo) + CalculatedPersistentAliasHelper.CustomizeTypesInfo(typesInfo) + End Sub + End Class +End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module/My Project/AssemblyInfo.vb b/VB/NonPersistentObjectsDemo.Module/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..43eb069 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/My Project/AssemblyInfo.vb @@ -0,0 +1,33 @@ +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' + + diff --git a/VB/NonPersistentObjectsDemo.Module/NonPersistentObjectsDemo.Module.vbproj b/VB/NonPersistentObjectsDemo.Module/NonPersistentObjectsDemo.Module.vbproj new file mode 100644 index 0000000..d375615 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/NonPersistentObjectsDemo.Module.vbproj @@ -0,0 +1,202 @@ + + + + + Debug + AnyCPU + {57ACDBDB-006E-43D3-9308-97857F2FF75D} + Library + + NonPersistentObjectsDemo.Module + v4.5.2 + 512 + On + Binary + Off + On + + + true + full + false + bin\Debug\ + true + true + prompt + true + + + pdbonly + true + bin\Release\ + false + true + prompt + true + + + true + bin\EasyTest\ + true + true + EASYTEST=True + full + AnyCPU + prompt + true + + + + + + + + + + + + + + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + System + + + System.Data + + + + System.XML + + + + + + + + Component + + + + Component + + + Module.vb + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/VB/NonPersistentObjectsDemo.Module/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module/ReadMe.txt new file mode 100644 index 0000000..a96fb7a --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/ReadMe.txt @@ -0,0 +1,28 @@ +Project Description + +This project implements a platform-agnostic Module. UI-independent application +elements can be implemented here (Business Objects, Controllers, etc.). The root +project folder contains the Module.cs(vb) file with the class that inherits +ModuleBase. This class can be designed with the Module Designer that allows +you to view and customize Module components: referenced modules, Controllers +and business classes. Additionally, the root folder contains Application Model +difference files (XAFML files) that keep application settings specific for the +current Module. Differences files can be designed with the Model Editor. + + +Relevant Documentation + +Application Solution Components +https://docs.devexpress.com/eXpressAppFramework/112569 + +ModuleBase Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase + +Module Designer +https://docs.devexpress.com/eXpressAppFramework/112828 + +Application Model +https://docs.devexpress.com/eXpressAppFramework/112579 + +Model Editor +https://docs.devexpress.com/eXpressAppFramework/112582 diff --git a/VB/NonPersistentObjectsDemo.Module/Util.vb b/VB/NonPersistentObjectsDemo.Module/Util.vb new file mode 100644 index 0000000..039906c --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/Util.vb @@ -0,0 +1,102 @@ +Imports System +Imports System.Collections.Generic +Imports System.Linq +Imports System.Text +Imports System.Threading.Tasks + +Namespace NonPersistentObjectsDemo.Module + + Public Class GenHelper + Private Shared srnd As Random + Private Shared words As List(Of String) + Private Shared fnames As List(Of String) + Private Shared lnames As List(Of String) + Shared Sub New() + srnd = New Random() + words = CreateWords(12000) + fnames = CreateNames(200) + lnames = CreateNames(500) + End Sub + Private Shared Function CreateWords(ByVal number As Integer) As List(Of String) + Dim items = New HashSet(Of String)() + Do While number > 0 + If items.Add(CreateWord()) Then + number -= 1 + End If + Loop + Return items.ToList() + End Function + Private Shared Function MakeTosh(ByVal rnd As Random, ByVal length As Integer) As String + Dim chars = New Char(length - 1){} + For i As Integer = 0 To length - 1 + chars(i) = ChrW(AscW("a"c) + rnd.Next(26)) + Next i + Return New String(chars) + End Function + Private Shared Function CreateWord() As String + Return MakeTosh(srnd, 1 + srnd.Next(13)) + End Function + Private Shared Function CreateNames(ByVal number As Integer) As List(Of String) + Dim items = New HashSet(Of String)() + Do While number > 0 + If items.Add(ToTitle(CreateWord())) Then + number -= 1 + End If + Loop + Return items.ToList() + End Function + Public Shared Function ToTitle(ByVal s As String) As String + If String.IsNullOrEmpty(s) Then + Return s + End If + Return String.Concat(s.Substring(0, 1).ToUpper(), s.Substring(1)) + End Function + + Private rnd As Random + Public Sub New() + rnd = New Random() + End Sub + Public Sub New(ByVal seed As Integer) + rnd = New Random(seed) + End Sub + Public Function [Next](ByVal max As Integer) As Integer + Return rnd.Next(max) + End Function + Public Function MakeTosh(ByVal length As Integer) As String + Return MakeTosh(rnd, length) + End Function + Public Function MakeBlah(ByVal length As Integer) As String + Dim sb = New StringBuilder() + For i = 0 To length + If sb.Length > 0 Then + sb.Append(" ") + End If + sb.Append(GetWord()) + Next i + Return sb.ToString() + End Function + Public Function MakeBlahBlahBlah(ByVal length As Integer, ByVal plength As Integer) As String + Dim sb = New StringBuilder() + For i = 0 To length + If sb.Length > 0 Then + sb.Append(" ") + End If + Dim w = ToTitle(MakeBlah(3 + rnd.Next(plength))) & "." + sb.Append(w) + Next i + Return sb.ToString() + End Function + Public Function GetFullName() As String + Return String.Concat(GetFName(), " ", GetLName()) + End Function + Private Function GetFName() As String + Return fnames(rnd.Next(fnames.Count)) + End Function + Private Function GetLName() As String + Return lnames(rnd.Next(lnames.Count)) + End Function + Private Function GetWord() As String + Return words(rnd.Next(words.Count)) + End Function + End Class +End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module/Welcome.html b/VB/NonPersistentObjectsDemo.Module/Welcome.html new file mode 100644 index 0000000..d27bb12 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Module/Welcome.html @@ -0,0 +1,185 @@ + + + + + Your XAF application + + + + + + +
+ + + + + +
+
+

The XAF Solution Wizard has successfully generated the solution according to your settings.

+
    +
  • The NonPersistentObjectsDemo.Module project keeps your platform-agnostic code. + Add persistent objects code to the Business Objects folder of this project and XAF will automatically create a UI to create, read, update and delete these persistent objects.
  • +
  • The NonPersistentObjectsDemo.Win project is a startup project for the desktop application.
  • +
  • The NonPersistentObjectsDemo.Web project is a startup project for the web application.
  • +
  • To specify the database used by your application, modify the ConnectionString attribute in the configuration file located in the startup project.
  • +
  • To login, enter the "Admin" user name with empty password.
  • +
+
+
+ + + + + +
+
+ + + \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Web/Default.aspx b/VB/NonPersistentObjectsDemo.Web/Default.aspx new file mode 100644 index 0000000..918be8f --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/Default.aspx @@ -0,0 +1,19 @@ +<%@ Page Language="C#" AutoEventWireup="true" Inherits="Default" EnableViewState="false" + ValidateRequest="false" CodeBehind="Default.aspx.cs" %> +<%@ Register Assembly="DevExpress.ExpressApp.Web.v20.1" + Namespace="DevExpress.ExpressApp.Web.Templates" TagPrefix="cc3" %> +<%@ Register Assembly="DevExpress.ExpressApp.Web.v20.1" + Namespace="DevExpress.ExpressApp.Web.Controls" TagPrefix="cc4" %> + + + + Main Page + + + +
+ +
+ + + \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Web/Default.aspx.designer.vb b/VB/NonPersistentObjectsDemo.Web/Default.aspx.designer.vb new file mode 100644 index 0000000..c8e5ce6 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/Default.aspx.designer.vb @@ -0,0 +1,40 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + + +Partial Public Class [Default] + + ''' + ''' form2 control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected form2 As Global.System.Web.UI.HtmlControls.HtmlForm + + ''' + ''' ProgressControl control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected ProgressControl As Global.DevExpress.ExpressApp.Web.Controls.ASPxProgressControl + + ''' + ''' Content control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected Content As Global.System.Web.UI.HtmlControls.HtmlGenericControl +End Class diff --git a/VB/NonPersistentObjectsDemo.Web/Default.aspx.vb b/VB/NonPersistentObjectsDemo.Web/Default.aspx.vb new file mode 100644 index 0000000..90b1180 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/Default.aspx.vb @@ -0,0 +1,20 @@ +Imports System +Imports System.Collections.Generic +Imports System.Web.UI +Imports DevExpress.ExpressApp.Templates +Imports DevExpress.ExpressApp.Web +Imports DevExpress.ExpressApp.Web.Templates +Imports DevExpress.ExpressApp.Web.Templates.ActionContainers + +Partial Public Class [Default] + Inherits BaseXafPage + + Protected Overrides Function CreateContextActionsMenu() As ContextActionsMenu + Return New ContextActionsMenu(Me, "Edit", "RecordEdit", "ObjectsCreation", "ListView", "Reports") + End Function + Public Overrides ReadOnly Property InnerContentPlaceHolder() As Control + Get + Return Content + End Get + End Property +End Class \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Web/Error.aspx b/VB/NonPersistentObjectsDemo.Web/Error.aspx new file mode 100644 index 0000000..5cd4348 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/Error.aspx @@ -0,0 +1,147 @@ +<%@ Page Language="c#" AutoEventWireup="false" Inherits="ErrorPage" EnableViewState="false" + ValidateRequest="false" CodeBehind="Error.aspx.cs" %> + + + + Error + + + + +
+ + + + +
+
+
+ + + + + +
+

+ +

+
+ +
+ +
+ + + + +
+ + + +

+

+ +

+ + We are currently unable to serve your request.
+ You could go back and + try again or + restart the application. +
+

+ + + + Show Error details + + + + Report error
+
+

+ This error has been logged. If you have additional information that you believe + may have caused this error please report the problem.

+ + + + + + + +
+ +
+ +
+
+
+
+
+
+
+
+
+
+
+ +
+ + diff --git a/VB/NonPersistentObjectsDemo.Web/Error.aspx.designer.vb b/VB/NonPersistentObjectsDemo.Web/Error.aspx.designer.vb new file mode 100644 index 0000000..050a7f5 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/Error.aspx.designer.vb @@ -0,0 +1,166 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + + +Partial Public Class ErrorPage + + ''' + ''' Head1 control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected Head1 As Global.System.Web.UI.HtmlControls.HtmlHead + + ''' + ''' form1 control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected form1 As Global.System.Web.UI.HtmlControls.HtmlForm + + ''' + ''' ApplicationTitle control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected ApplicationTitle As Global.System.Web.UI.WebControls.Literal + + ''' + ''' InfoMessagesPanel control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected InfoMessagesPanel As Global.System.Web.UI.WebControls.Literal + + ''' + ''' Table1 control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected Table1 As Global.System.Web.UI.WebControls.Table + + ''' + ''' TableRow2 control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected TableRow2 As Global.System.Web.UI.WebControls.TableRow + + ''' + ''' ViewSite control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected ViewSite As Global.System.Web.UI.WebControls.TableCell + + ''' + ''' ErrorTitleLiteral control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected ErrorTitleLiteral As Global.System.Web.UI.WebControls.Literal + + ''' + ''' ErrorPanel control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected ErrorPanel As Global.System.Web.UI.WebControls.Panel + + ''' + ''' ApologizeMessage control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected ApologizeMessage As Global.System.Web.UI.WebControls.PlaceHolder + + ''' + ''' HyperLink1 control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected HyperLink1 As Global.System.Web.UI.WebControls.HyperLink + + ''' + ''' NavigateToStart control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected NavigateToStart As Global.System.Web.UI.WebControls.LinkButton + + ''' + ''' Details control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected Details As Global.System.Web.UI.WebControls.Panel + + ''' + ''' DetailsText control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected DetailsText As Global.System.Web.UI.WebControls.Literal + + ''' + ''' ReportForm control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected ReportForm As Global.System.Web.UI.WebControls.Panel + + ''' + ''' DescriptionTextBox control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected DescriptionTextBox As Global.System.Web.UI.WebControls.TextBox + + ''' + ''' ReportButton control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected ReportButton As Global.System.Web.UI.WebControls.Button +End Class diff --git a/VB/NonPersistentObjectsDemo.Web/Error.aspx.vb b/VB/NonPersistentObjectsDemo.Web/Error.aspx.vb new file mode 100644 index 0000000..053a4bf --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/Error.aspx.vb @@ -0,0 +1,77 @@ +Imports System +Imports System.Web.UI +Imports DevExpress.ExpressApp.Web +Imports DevExpress.ExpressApp.Web.SystemModule +Imports DevExpress.ExpressApp.Web.Templates +Imports DevExpress.ExpressApp.Web.TestScripts + +Partial Public Class ErrorPage + Inherits System.Web.UI.Page + + Protected Overrides Sub InitializeCulture() + If WebApplication.Instance IsNot Nothing Then + WebApplication.Instance.InitializeCulture() + End If + End Sub + Protected Overrides Sub OnPreInit(ByVal e As EventArgs) + MyBase.OnPreInit(e) + BaseXafPage.SetupCurrentTheme() + End Sub + Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load + If TestScriptsManager.EasyTestEnabled Then + Dim testScriptsManager As New TestScriptsManager(Page) + testScriptsManager.RegisterControl(JSLabelTestControl.ClassName, "FormCaption", TestControlType.Field, "FormCaption") + testScriptsManager.RegisterControl(JSLabelTestControl.ClassName, "DescriptionTextBox", TestControlType.Field, "Description") + testScriptsManager.RegisterControl(JSDefaultTestControl.ClassName, "ReportButton", TestControlType.Action, "Report") + testScriptsManager.AllControlRegistered() + ClientScript.RegisterStartupScript(Me.GetType(), "EasyTest", testScriptsManager.GetScript(), True) + End If + If WebApplication.Instance IsNot Nothing Then + ApplicationTitle.Text = WebApplication.Instance.Title + Else + ApplicationTitle.Text = "No application" + End If + Header.Title = "Application Error - " & ApplicationTitle.Text + + Dim errorInfo As ErrorInfo = ErrorHandling.GetApplicationError() + If errorInfo IsNot Nothing Then + If ErrorHandling.CanShowDetailedInformation Then + DetailsText.Text = errorInfo.GetTextualPresentation(True) + Else + Details.Visible = False + End If + ReportForm.Visible = ErrorHandling.CanSendAlertToAdmin + Else + ErrorPanel.Visible = False + End If + End Sub + #Region "Web Form Designer generated code" + Protected Overrides Sub OnInit(ByVal e As EventArgs) + InitializeComponent() + MyBase.OnInit(e) + End Sub + + Private Sub InitializeComponent() +'INSTANT VB NOTE: The following InitializeComponent event wireup was converted to a 'Handles' clause: +'ORIGINAL LINE: this.Load += new System.EventHandler(this.Page_Load); +'INSTANT VB NOTE: The following InitializeComponent event wireup was converted to a 'Handles' clause: +'ORIGINAL LINE: this.PreRender += new EventHandler(ErrorPage_PreRender); + End Sub + + Private Sub ErrorPage_PreRender(ByVal sender As Object, ByVal e As EventArgs) Handles Me.PreRender + RegisterThemeAssemblyController.RegisterThemeResources(DirectCast(sender, Page)) + End Sub + + + #End Region + Protected Sub ReportButton_Click(ByVal sender As Object, ByVal e As EventArgs) + Dim errorInfo As ErrorInfo = ErrorHandling.GetApplicationError() + If errorInfo IsNot Nothing Then + ErrorHandling.SendAlertToAdmin(errorInfo.Id, DescriptionTextBox.Text, errorInfo.Exception.Message) + ClientScript.RegisterStartupScript(Me.GetType(), "alert", "alert('Your report has been sent. Thank you.');", True) + End If + End Sub + Protected Sub NavigateToStart_Click(ByVal sender As Object, ByVal e As EventArgs) + WebApplication.Instance.LogOff() + End Sub +End Class diff --git a/VB/NonPersistentObjectsDemo.Web/Global.asax b/VB/NonPersistentObjectsDemo.Web/Global.asax new file mode 100644 index 0000000..129093f --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/Global.asax @@ -0,0 +1 @@ +<%@ Application Language="C#" CodeBehind="Global.asax.cs" Inherits="NonPersistentObjectsDemo.Web.Global"%> diff --git a/VB/NonPersistentObjectsDemo.Web/Global.asax.vb b/VB/NonPersistentObjectsDemo.Web/Global.asax.vb new file mode 100644 index 0000000..68b4fae --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/Global.asax.vb @@ -0,0 +1,77 @@ +Imports System +Imports System.Configuration +Imports System.Web.Configuration +Imports System.Web +Imports System.Web.Routing + +Imports DevExpress.ExpressApp +Imports DevExpress.Persistent.Base +Imports DevExpress.Persistent.BaseImpl +Imports DevExpress.ExpressApp.Security +Imports DevExpress.ExpressApp.Web +Imports DevExpress.Web + +Namespace NonPersistentObjectsDemo.Web + Public Class [Global] + Inherits System.Web.HttpApplication + + Public Sub New() + InitializeComponent() + End Sub + Protected Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) + RouteTable.Routes.RegisterXafRoutes() + DevExpress.ExpressApp.BaseObjectSpace.ThrowExceptionForNotRegisteredEntityType = True + AddHandler ASPxWebControl.CallbackError, AddressOf Application_Error +#If EASYTEST Then + DevExpress.ExpressApp.Web.TestScripts.TestScriptsManager.EasyTestEnabled = True +#End If + End Sub + Protected Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs) + Tracing.Initialize() + WebApplication.SetInstance(Session, New NonPersistentObjectsDemoAspNetApplication()) + 'SecurityStrategy security = (SecurityStrategy)WebApplication.Instance.Security; + 'security.RegisterXPOAdapterProviders(); + DevExpress.ExpressApp.Web.Templates.DefaultVerticalTemplateContentNew.ClearSizeLimit() + WebApplication.Instance.SwitchToNewStyle() + If ConfigurationManager.ConnectionStrings("ConnectionString") IsNot Nothing Then + WebApplication.Instance.ConnectionString = ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString + End If +#If EASYTEST Then + If ConfigurationManager.ConnectionStrings("EasyTestConnectionString") IsNot Nothing Then + WebApplication.Instance.ConnectionString = ConfigurationManager.ConnectionStrings("EasyTestConnectionString").ConnectionString + End If +#End If + WebApplication.Instance.ConnectionString = DevExpress.ExpressApp.Xpo.InMemoryDataStoreProvider.ConnectionString +#If DEBUG Then + If System.Diagnostics.Debugger.IsAttached AndAlso WebApplication.Instance.CheckCompatibilityType = CheckCompatibilityType.DatabaseSchema Then + WebApplication.Instance.DatabaseUpdateMode = DatabaseUpdateMode.UpdateDatabaseAlways + End If +#End If + WebApplication.Instance.Setup() + WebApplication.Instance.Start() + End Sub + Protected Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs) + End Sub + Protected Sub Application_EndRequest(ByVal sender As Object, ByVal e As EventArgs) + End Sub + Protected Sub Application_AuthenticateRequest(ByVal sender As Object, ByVal e As EventArgs) + End Sub + Protected Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs) + ErrorHandling.Instance.ProcessApplicationError() + End Sub + Protected Sub Session_End(ByVal sender As Object, ByVal e As EventArgs) + WebApplication.LogOff(Session) + WebApplication.DisposeInstance(Session) + End Sub + Protected Sub Application_End(ByVal sender As Object, ByVal e As EventArgs) + End Sub + #Region "Web Form Designer generated code" + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + End Sub + #End Region + End Class +End Namespace diff --git a/VB/NonPersistentObjectsDemo.Web/Images/Logo.svg b/VB/NonPersistentObjectsDemo.Web/Images/Logo.svg new file mode 100644 index 0000000..d0aa175 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/Images/Logo.svg @@ -0,0 +1,43 @@ + + + + + + diff --git a/VB/NonPersistentObjectsDemo.Web/Images/ReadMe.txt b/VB/NonPersistentObjectsDemo.Web/Images/ReadMe.txt new file mode 100644 index 0000000..230befc --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/Images/ReadMe.txt @@ -0,0 +1,12 @@ +Folder Description + +The "Images" project folder is intended for storing custom image files. + + +Relevant Documentation + +Add and Override Images +https://docs.devexpress.com/eXpressAppFramework/112792 + +Assign a Custom Image +https://docs.devexpress.com/eXpressAppFramework/112744 diff --git a/VB/NonPersistentObjectsDemo.Web/Login.aspx b/VB/NonPersistentObjectsDemo.Web/Login.aspx new file mode 100644 index 0000000..b610ff1 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/Login.aspx @@ -0,0 +1,24 @@ +<%@ Page Language="C#" AutoEventWireup="true" Inherits="LoginPage" EnableViewState="false" + ValidateRequest="false" CodeBehind="Login.aspx.cs" %> +<%@ Register Assembly="DevExpress.ExpressApp.Web.v20.1" + Namespace="DevExpress.ExpressApp.Web.Templates.ActionContainers" TagPrefix="cc2" %> +<%@ Register Assembly="DevExpress.ExpressApp.Web.v20.1" + Namespace="DevExpress.ExpressApp.Web.Templates.Controls" TagPrefix="tc" %> +<%@ Register Assembly="DevExpress.ExpressApp.Web.v20.1" + Namespace="DevExpress.ExpressApp.Web.Controls" TagPrefix="cc4" %> +<%@ Register Assembly="DevExpress.ExpressApp.Web.v20.1" + Namespace="DevExpress.ExpressApp.Web.Templates" TagPrefix="cc3" %> + + + + Logon + + +
+
+ +
+ +
+ + diff --git a/VB/NonPersistentObjectsDemo.Web/Login.aspx.designer.vb b/VB/NonPersistentObjectsDemo.Web/Login.aspx.designer.vb new file mode 100644 index 0000000..b663b4f --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/Login.aspx.designer.vb @@ -0,0 +1,49 @@ +'------------------------------------------------------------------------------ +' +' This code was generated by a tool. +' +' Changes to this file may cause incorrect behavior and will be lost if +' the code is regenerated. +' +'------------------------------------------------------------------------------ + + + +Partial Public Class LoginPage + + ''' + ''' Head1 control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected Head1 As Global.System.Web.UI.HtmlControls.HtmlHead + + ''' + ''' form1 control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected form1 As Global.System.Web.UI.HtmlControls.HtmlForm + + ''' + ''' ProgressControl control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected ProgressControl As Global.DevExpress.ExpressApp.Web.Controls.ASPxProgressControl + + ''' + ''' Content control. + ''' + ''' + ''' Auto-generated field. + ''' To modify move field declaration from designer file to code-behind file. + ''' + Protected Content As Global.System.Web.UI.HtmlControls.HtmlGenericControl +End Class diff --git a/VB/NonPersistentObjectsDemo.Web/Login.aspx.vb b/VB/NonPersistentObjectsDemo.Web/Login.aspx.vb new file mode 100644 index 0000000..8edd0a0 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/Login.aspx.vb @@ -0,0 +1,14 @@ +Imports System + +Imports DevExpress.ExpressApp.Web +Imports DevExpress.ExpressApp.Web.Templates + +Partial Public Class LoginPage + Inherits BaseXafPage + + Public Overrides ReadOnly Property InnerContentPlaceHolder() As System.Web.UI.Control + Get + Return Content + End Get + End Property +End Class diff --git a/VB/NonPersistentObjectsDemo.Web/Model.Desktop.xafml b/VB/NonPersistentObjectsDemo.Web/Model.Desktop.xafml new file mode 100644 index 0000000..ab80ccd --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/Model.Desktop.xafml @@ -0,0 +1,3 @@ + + + diff --git a/VB/NonPersistentObjectsDemo.Web/Model.Tablet.xafml b/VB/NonPersistentObjectsDemo.Web/Model.Tablet.xafml new file mode 100644 index 0000000..ab80ccd --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/Model.Tablet.xafml @@ -0,0 +1,3 @@ + + + diff --git a/VB/NonPersistentObjectsDemo.Web/Model.xafml b/VB/NonPersistentObjectsDemo.Web/Model.xafml new file mode 100644 index 0000000..ab80ccd --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/Model.xafml @@ -0,0 +1,3 @@ + + + diff --git a/VB/NonPersistentObjectsDemo.Web/My Project/AssemblyInfo.vb b/VB/NonPersistentObjectsDemo.Web/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..13e64bb --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/My Project/AssemblyInfo.vb @@ -0,0 +1,33 @@ +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' + + diff --git a/VB/NonPersistentObjectsDemo.Web/NonPersistentObjectsDemo.Web.vbproj b/VB/NonPersistentObjectsDemo.Web/NonPersistentObjectsDemo.Web.vbproj new file mode 100644 index 0000000..23f8676 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/NonPersistentObjectsDemo.Web.vbproj @@ -0,0 +1,396 @@ + + + + + Debug + AnyCPU + {8C3026D1-113C-4B88-9F91-236753790C60} + {349c5851-65df-11da-9384-00065b846f21};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} + Library + + NonPersistentObjectsDemo.Web + v4.5.2 + 512 + false + 44300 + enabled + disabled + false + + + On + Binary + Off + On + + + true + full + false + bin\ + true + true + prompt + true + + + pdbonly + true + bin\ + false + true + prompt + true + + + true + bin\ + true + true + EASYTEST=True + full + AnyCPU + prompt + true + + + + + + + + + + + + + + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + False + + + False + False + + + False + False + + + False + False + + + False + False + + + False + False + + + False + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + False + + + + + + + + + + + + Default.aspx + + + Error.aspx + + + Global.asax + + + Login.aspx + + + Component + + + Default.aspx + ASPXCodeBehind + + + Error.aspx + ASPXCodeBehind + + + Login.aspx + ASPXCodeBehind + + + + + + Designer + + + + + + + + + + + {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B} + NonPersistentObjectsDemo.Module.Web + True + + + {57ACDBDB-006E-43D3-9308-97857F2FF75D} + NonPersistentObjectsDemo.Module + True + + + + 10.0 + $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) + + + + + + + + + + False + True + 2064 + / + + + False + False + + + False + + + + + diff --git a/VB/NonPersistentObjectsDemo.Web/ReadMe.txt b/VB/NonPersistentObjectsDemo.Web/ReadMe.txt new file mode 100644 index 0000000..db74671 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/ReadMe.txt @@ -0,0 +1,31 @@ +Project Description + +This project implements an ASP.NET application. The ApplicationCode project +folder contains the WebApplication.cs(vb) file with the class that inherits +WebApplication. This class can be designed with the Application Designer that +allows you to view and customize application components: referenced modules, +security settings, data connection. Additionally, the root folder contains +Application Model difference files (XAFML files) that keep application settings +specific for the current application. Differences files can be designed with +the Model Editor. + + +Relevant Documentation + +Application Solution Components +https://docs.devexpress.com/eXpressAppFramework/112569 + +WebApplication Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Web.WebApplication + +XafApplication Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.XafApplication + +Application Designer +https://docs.devexpress.com/eXpressAppFramework/112827 + +Application Model +https://docs.devexpress.com/eXpressAppFramework/112579 + +Model Editor +https://docs.devexpress.com/eXpressAppFramework/112582 diff --git a/VB/NonPersistentObjectsDemo.Web/Web.config b/VB/NonPersistentObjectsDemo.Web/Web.config new file mode 100644 index 0000000..f2b083e --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/Web.config @@ -0,0 +1,185 @@ + + + + + +
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Web/WebApplication.vb b/VB/NonPersistentObjectsDemo.Web/WebApplication.vb new file mode 100644 index 0000000..0271483 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Web/WebApplication.vb @@ -0,0 +1,172 @@ +Imports System +Imports DevExpress.ExpressApp +Imports System.ComponentModel +Imports DevExpress.ExpressApp.Web +Imports System.Collections.Generic +Imports DevExpress.ExpressApp.Xpo +Imports DevExpress.ExpressApp.Security +Imports DevExpress.ExpressApp.Security.ClientServer + +Namespace NonPersistentObjectsDemo.Web + ' For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Web.WebApplication + Partial Public Class NonPersistentObjectsDemoAspNetApplication + Inherits WebApplication + + Private module1 As DevExpress.ExpressApp.SystemModule.SystemModule + Private module2 As DevExpress.ExpressApp.Web.SystemModule.SystemAspNetModule + Private module3 As NonPersistentObjectsDemo.Module.NonPersistentObjectsDemoModule + Private module4 As NonPersistentObjectsDemo.Module.Web.NonPersistentObjectsDemoAspNetModule + Private securityModule1 As DevExpress.ExpressApp.Security.SecurityModule + Private securityStrategyComplex1 As DevExpress.ExpressApp.Security.SecurityStrategyComplex + Private authenticationStandard1 As DevExpress.ExpressApp.Security.AuthenticationStandard + Private objectsModule As DevExpress.ExpressApp.Objects.BusinessClassLibraryCustomizationModule + Private cloneObjectModule As DevExpress.ExpressApp.CloneObject.CloneObjectModule + Private conditionalAppearanceModule As DevExpress.ExpressApp.ConditionalAppearance.ConditionalAppearanceModule + Private fileAttachmentsAspNetModule As DevExpress.ExpressApp.FileAttachments.Web.FileAttachmentsAspNetModule + Private reportsModuleV2 As DevExpress.ExpressApp.ReportsV2.ReportsModuleV2 + Private reportsAspNetModuleV2 As DevExpress.ExpressApp.ReportsV2.Web.ReportsAspNetModuleV2 + Private schedulerModuleBase As DevExpress.ExpressApp.Scheduler.SchedulerModuleBase + Private schedulerAspNetModule As DevExpress.ExpressApp.Scheduler.Web.SchedulerAspNetModule + Private scriptRecorderModuleBase As DevExpress.ExpressApp.ScriptRecorder.ScriptRecorderModuleBase + Private scriptRecorderAspNetModule As DevExpress.ExpressApp.ScriptRecorder.Web.ScriptRecorderAspNetModule + Private treeListEditorsModuleBase As DevExpress.ExpressApp.TreeListEditors.TreeListEditorsModuleBase + Private treeListEditorsAspNetModule As DevExpress.ExpressApp.TreeListEditors.Web.TreeListEditorsAspNetModule + Private validationModule As DevExpress.ExpressApp.Validation.ValidationModule + Private validationAspNetModule As DevExpress.ExpressApp.Validation.Web.ValidationAspNetModule + + #Region "Default XAF configuration options (https:" 'www.devexpress.com/kb=T501418) + Shared Sub New() + EnableMultipleBrowserTabsSupport = True + DevExpress.ExpressApp.Web.Editors.ASPx.ASPxGridListEditor.AllowFilterControlHierarchy = True + DevExpress.ExpressApp.Web.Editors.ASPx.ASPxGridListEditor.MaxFilterControlHierarchyDepth = 3 + DevExpress.ExpressApp.Web.Editors.ASPx.ASPxCriteriaPropertyEditor.AllowFilterControlHierarchyDefault = True + DevExpress.ExpressApp.Web.Editors.ASPx.ASPxCriteriaPropertyEditor.MaxHierarchyDepthDefault = 3 + DevExpress.Persistent.Base.PasswordCryptographer.EnableRfc2898 = True + DevExpress.Persistent.Base.PasswordCryptographer.SupportLegacySha512 = False + End Sub + Private Sub InitializeDefaults() + LinkNewObjectToParentImmediately = False + OptimizedControllersCreation = True + End Sub + #End Region + Public Sub New() + InitializeComponent() + InitializeDefaults() + End Sub + Protected Overrides Function CreateViewUrlManager() As IViewUrlManager + Return New ViewUrlManager() + End Function + Protected Overrides Sub CreateDefaultObjectSpaceProvider(ByVal args As CreateCustomObjectSpaceProviderEventArgs) + 'args.ObjectSpaceProvider = new SecuredObjectSpaceProvider((SecurityStrategyComplex)Security, GetDataStoreProvider(args.ConnectionString, args.Connection), true); + args.ObjectSpaceProvider = New XPObjectSpaceProvider(GetDataStoreProvider(args.ConnectionString, args.Connection), True) + args.ObjectSpaceProviders.Add(New NonPersistentObjectSpaceProvider(TypesInfo, Nothing)) + End Sub + Private Function GetDataStoreProvider(ByVal connectionString As String, ByVal connection As System.Data.IDbConnection) As IXpoDataStoreProvider + Dim application As System.Web.HttpApplicationState = If(System.Web.HttpContext.Current IsNot Nothing, System.Web.HttpContext.Current.Application, Nothing) + Dim dataStoreProvider As IXpoDataStoreProvider = Nothing + If application IsNot Nothing AndAlso application("DataStoreProvider") IsNot Nothing Then + dataStoreProvider = TryCast(application("DataStoreProvider"), IXpoDataStoreProvider) + Else + dataStoreProvider = XPObjectSpaceProvider.GetDataStoreProvider(connectionString, connection, True) + If application IsNot Nothing Then + application("DataStoreProvider") = dataStoreProvider + End If + End If + Return dataStoreProvider + End Function + Private Sub NonPersistentObjectsDemoAspNetApplication_DatabaseVersionMismatch(ByVal sender As Object, ByVal e As DevExpress.ExpressApp.DatabaseVersionMismatchEventArgs) Handles Me.DatabaseVersionMismatch +#If EASYTEST Then + e.Updater.Update() + e.Handled = True +#Else + If System.Diagnostics.Debugger.IsAttached Then + e.Updater.Update() + e.Handled = True + Else + Dim message As String = "The application cannot connect to the specified database, " & "because the database doesn't exist, its version is older " & "than that of the application or its schema does not match " & "the ORM data model structure. To avoid this error, use one " & "of the solutions from the https://www.devexpress.com/kb=T367835 KB Article." + + If e.CompatibilityError IsNot Nothing AndAlso e.CompatibilityError.Exception IsNot Nothing Then + message &= vbCrLf & vbCrLf & "Inner exception: " & e.CompatibilityError.Exception.Message + End If + Throw New InvalidOperationException(message) + End If +#End If + End Sub + Private Sub InitializeComponent() + Me.module1 = New DevExpress.ExpressApp.SystemModule.SystemModule() + Me.module2 = New DevExpress.ExpressApp.Web.SystemModule.SystemAspNetModule() + Me.module3 = New NonPersistentObjectsDemo.Module.NonPersistentObjectsDemoModule() + Me.module4 = New NonPersistentObjectsDemo.Module.Web.NonPersistentObjectsDemoAspNetModule() + Me.securityModule1 = New DevExpress.ExpressApp.Security.SecurityModule() + Me.securityStrategyComplex1 = New DevExpress.ExpressApp.Security.SecurityStrategyComplex() + Me.securityStrategyComplex1.SupportNavigationPermissionsForTypes = False + Me.authenticationStandard1 = New DevExpress.ExpressApp.Security.AuthenticationStandard() + Me.objectsModule = New DevExpress.ExpressApp.Objects.BusinessClassLibraryCustomizationModule() + Me.cloneObjectModule = New DevExpress.ExpressApp.CloneObject.CloneObjectModule() + Me.conditionalAppearanceModule = New DevExpress.ExpressApp.ConditionalAppearance.ConditionalAppearanceModule() + Me.fileAttachmentsAspNetModule = New DevExpress.ExpressApp.FileAttachments.Web.FileAttachmentsAspNetModule() + Me.reportsModuleV2 = New DevExpress.ExpressApp.ReportsV2.ReportsModuleV2() + Me.reportsAspNetModuleV2 = New DevExpress.ExpressApp.ReportsV2.Web.ReportsAspNetModuleV2() + Me.schedulerModuleBase = New DevExpress.ExpressApp.Scheduler.SchedulerModuleBase() + Me.schedulerAspNetModule = New DevExpress.ExpressApp.Scheduler.Web.SchedulerAspNetModule() + Me.scriptRecorderModuleBase = New DevExpress.ExpressApp.ScriptRecorder.ScriptRecorderModuleBase() + Me.scriptRecorderAspNetModule = New DevExpress.ExpressApp.ScriptRecorder.Web.ScriptRecorderAspNetModule() + Me.treeListEditorsModuleBase = New DevExpress.ExpressApp.TreeListEditors.TreeListEditorsModuleBase() + Me.treeListEditorsAspNetModule = New DevExpress.ExpressApp.TreeListEditors.Web.TreeListEditorsAspNetModule() + Me.validationModule = New DevExpress.ExpressApp.Validation.ValidationModule() + Me.validationAspNetModule = New DevExpress.ExpressApp.Validation.Web.ValidationAspNetModule() + DirectCast(Me, System.ComponentModel.ISupportInitialize).BeginInit() + ' + ' securityStrategyComplex1 + ' + Me.securityStrategyComplex1.Authentication = Me.authenticationStandard1 + Me.securityStrategyComplex1.RoleType = GetType(DevExpress.Persistent.BaseImpl.PermissionPolicy.PermissionPolicyRole) + Me.securityStrategyComplex1.UserType = GetType(DevExpress.Persistent.BaseImpl.PermissionPolicy.PermissionPolicyUser) + ' + ' securityModule1 + ' + Me.securityModule1.UserType = GetType(DevExpress.Persistent.BaseImpl.PermissionPolicy.PermissionPolicyUser) + ' + ' authenticationStandard1 + ' + Me.authenticationStandard1.LogonParametersType = GetType(DevExpress.ExpressApp.Security.AuthenticationStandardLogonParameters) + ' + ' reportsModuleV2 + ' + Me.reportsModuleV2.EnableInplaceReports = True + Me.reportsModuleV2.ReportDataType = GetType(DevExpress.Persistent.BaseImpl.ReportDataV2) + Me.reportsModuleV2.ShowAdditionalNavigation = False + Me.reportsAspNetModuleV2.ReportViewerType = DevExpress.ExpressApp.ReportsV2.Web.ReportViewerTypes.HTML5 + Me.reportsModuleV2.ReportStoreMode = DevExpress.ExpressApp.ReportsV2.ReportStoreModes.XML + ' + ' NonPersistentObjectsDemoAspNetApplication + ' + Me.ApplicationName = "NonPersistentObjectsDemo" + Me.CheckCompatibilityType = DevExpress.ExpressApp.CheckCompatibilityType.DatabaseSchema + Me.Modules.Add(Me.module1) + Me.Modules.Add(Me.module2) + Me.Modules.Add(Me.module3) + Me.Modules.Add(Me.module4) + Me.Modules.Add(Me.securityModule1) + 'this.Security = this.securityStrategyComplex1; + Me.Modules.Add(Me.objectsModule) + Me.Modules.Add(Me.cloneObjectModule) + Me.Modules.Add(Me.conditionalAppearanceModule) + Me.Modules.Add(Me.fileAttachmentsAspNetModule) + Me.Modules.Add(Me.reportsModuleV2) + Me.Modules.Add(Me.reportsAspNetModuleV2) + Me.Modules.Add(Me.schedulerModuleBase) + Me.Modules.Add(Me.schedulerAspNetModule) + Me.Modules.Add(Me.scriptRecorderModuleBase) + Me.Modules.Add(Me.scriptRecorderAspNetModule) + Me.Modules.Add(Me.treeListEditorsModuleBase) + Me.Modules.Add(Me.treeListEditorsAspNetModule) + Me.Modules.Add(Me.validationModule) + Me.Modules.Add(Me.validationAspNetModule) +'INSTANT VB NOTE: The following InitializeComponent event wireup was converted to a 'Handles' clause: +'ORIGINAL LINE: this.DatabaseVersionMismatch += new System.EventHandler(this.NonPersistentObjectsDemoAspNetApplication_DatabaseVersionMismatch); + DirectCast(Me, System.ComponentModel.ISupportInitialize).EndInit() + + End Sub + End Class +End Namespace diff --git a/VB/NonPersistentObjectsDemo.Win/App.config b/VB/NonPersistentObjectsDemo.Win/App.config new file mode 100644 index 0000000..7c38ed8 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Win/App.config @@ -0,0 +1,46 @@ + + + + +
+ + + + + + System + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/VB/NonPersistentObjectsDemo.Win/ExpressApp.ico b/VB/NonPersistentObjectsDemo.Win/ExpressApp.ico new file mode 100644 index 0000000000000000000000000000000000000000..e6810fc4f94dccd83ec54db6e9ef51a4950f6638 GIT binary patch literal 113407 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 literal 0 HcmV?d00001 diff --git a/VB/NonPersistentObjectsDemo.Win/Images/Logo.svg b/VB/NonPersistentObjectsDemo.Win/Images/Logo.svg new file mode 100644 index 0000000..68d56ca --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Win/Images/Logo.svg @@ -0,0 +1,18 @@ + + + + + + diff --git a/VB/NonPersistentObjectsDemo.Win/Images/ReadMe.txt b/VB/NonPersistentObjectsDemo.Win/Images/ReadMe.txt new file mode 100644 index 0000000..230befc --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Win/Images/ReadMe.txt @@ -0,0 +1,12 @@ +Folder Description + +The "Images" project folder is intended for storing custom image files. + + +Relevant Documentation + +Add and Override Images +https://docs.devexpress.com/eXpressAppFramework/112792 + +Assign a Custom Image +https://docs.devexpress.com/eXpressAppFramework/112744 diff --git a/VB/NonPersistentObjectsDemo.Win/Model.xafml b/VB/NonPersistentObjectsDemo.Win/Model.xafml new file mode 100644 index 0000000..d745362 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Win/Model.xafml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Win/My Project/AssemblyInfo.vb b/VB/NonPersistentObjectsDemo.Win/My Project/AssemblyInfo.vb new file mode 100644 index 0000000..a936e9a --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Win/My Project/AssemblyInfo.vb @@ -0,0 +1,33 @@ +Imports System.Reflection +Imports System.Runtime.CompilerServices +Imports System.Runtime.InteropServices + +' General Information about an assembly is controlled through the following +' set of attributes. Change these attribute values to modify the information +' associated with an assembly. + + + + + + + + + +' Setting ComVisible to false makes the types in this assembly not visible +' to COM components. If you need to access a type in this assembly from +' COM, set the ComVisible attribute to true on that type. + + +' The following GUID is for the ID of the typelib if this project is exposed to COM + + +' Version information for an assembly consists of the following four values: +' +' Major Version +' Minor Version +' Build Number +' Revision +' + + diff --git a/VB/NonPersistentObjectsDemo.Win/NonPersistentObjectsDemo.Win.vbproj b/VB/NonPersistentObjectsDemo.Win/NonPersistentObjectsDemo.Win.vbproj new file mode 100644 index 0000000..7aa1ad7 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Win/NonPersistentObjectsDemo.Win.vbproj @@ -0,0 +1,370 @@ + + + + + Debug + AnyCPU + {13E1ACF3-669C-4405-8260-E70BE603E197} + WinExe + + NonPersistentObjectsDemo.Win + v4.5.2 + ExpressApp.ico + 512 + On + Binary + Off + On + + + true + full + false + bin\Debug\ + true + true + prompt + true + + + pdbonly + true + bin\Release\ + false + true + prompt + true + + + true + bin\EasyTest\ + true + true + EASYTEST=True + full + AnyCPU + prompt + true + + + + + + + + + + + + + + + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + True + + + False + False + + + False + False + + + False + False + + + False + False + + + False + False + + + False + False + + + False + False + + + False + False + + + System + False + + + False + + + System.Data + False + + + System.Drawing + False + + + System.Windows.Forms + False + + + System.XML + False + + + + + + + + + + + + Always + + + + + + + Component + + + WinApplication.vb + + + Form + + + XafSplashScreen.vb + + + XafSplashScreen.vb + + + + + {72D644CD-C193-4572-B2E3-CA82819A1627} + NonPersistentObjectsDemo.Module.Win + True + + + {57ACDBDB-006E-43D3-9308-97857F2FF75D} + NonPersistentObjectsDemo.Module + True + + + + + diff --git a/VB/NonPersistentObjectsDemo.Win/Program.vb b/VB/NonPersistentObjectsDemo.Win/Program.vb new file mode 100644 index 0000000..220c1e2 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Win/Program.vb @@ -0,0 +1,58 @@ +Imports System +Imports System.Configuration +Imports System.Windows.Forms + +Imports DevExpress.ExpressApp +Imports DevExpress.ExpressApp.Security +Imports DevExpress.ExpressApp.Win +Imports DevExpress.Persistent.Base +Imports DevExpress.Persistent.BaseImpl +Imports DevExpress.XtraEditors + +Namespace NonPersistentObjectsDemo.Win + Friend Module Program + ''' + ''' The main entry point for the application. + ''' + + Sub Main() +#If EASYTEST Then + DevExpress.ExpressApp.Win.EasyTest.EasyTestRemotingRegistration.Register() +#End If + WindowsFormsSettings.LoadApplicationSettings() + Application.EnableVisualStyles() + Application.SetCompatibleTextRenderingDefault(False) + DevExpress.Utils.ToolTipController.DefaultController.ToolTipType = DevExpress.Utils.ToolTipType.SuperTip + DevExpress.ExpressApp.BaseObjectSpace.ThrowExceptionForNotRegisteredEntityType = True + EditModelPermission.AlwaysGranted = System.Diagnostics.Debugger.IsAttached + If Tracing.GetFileLocationFromSettings() = DevExpress.Persistent.Base.FileLocation.CurrentUserApplicationDataFolder Then + Tracing.LocalUserAppDataPath = Application.LocalUserAppDataPath + End If + Tracing.Initialize() + Dim winApplication As New NonPersistentObjectsDemoWindowsFormsApplication() + 'SecurityStrategy security = (SecurityStrategy)winApplication.Security; + 'security.RegisterXPOAdapterProviders(); + If ConfigurationManager.ConnectionStrings("ConnectionString") IsNot Nothing Then + winApplication.ConnectionString = ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString + End If +#If EASYTEST Then + If ConfigurationManager.ConnectionStrings("EasyTestConnectionString") IsNot Nothing Then + winApplication.ConnectionString = ConfigurationManager.ConnectionStrings("EasyTestConnectionString").ConnectionString + End If +#End If + winApplication.ConnectionString = DevExpress.ExpressApp.Xpo.InMemoryDataStoreProvider.ConnectionString +#If DEBUG Then + If System.Diagnostics.Debugger.IsAttached AndAlso winApplication.CheckCompatibilityType = CheckCompatibilityType.DatabaseSchema Then + winApplication.DatabaseUpdateMode = DatabaseUpdateMode.UpdateDatabaseAlways + End If +#End If + Try + winApplication.Setup() + winApplication.Start() + Catch e As Exception + winApplication.StopSplash() + winApplication.HandleException(e) + End Try + End Sub + End Module +End Namespace diff --git a/VB/NonPersistentObjectsDemo.Win/ReadMe.txt b/VB/NonPersistentObjectsDemo.Win/ReadMe.txt new file mode 100644 index 0000000..fd287a6 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Win/ReadMe.txt @@ -0,0 +1,31 @@ +Project Description + +This project implements a WinForms application. The root project folder +contains the WinApplication.cs(vb) file with the class that inherits +WinApplication. This class can be designed with the Application Designer that +allows you to view and customize application components: referenced modules, +security settings, data connection. Additionally, the root folder contains +Application Model difference files (XAFML files) that keep application settings +specific for the current application. Differences files can be designed with +the Model Editor. + + +Relevant Documentation + +Application Solution Components +https://docs.devexpress.com/eXpressAppFramework/112569 + +WinApplication Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Win.WinApplication + +XafApplication Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.XafApplication + +Application Designer +https://docs.devexpress.com/eXpressAppFramework/112827 + +Application Model +https://docs.devexpress.com/eXpressAppFramework/112579 + +Model Editor +https://docs.devexpress.com/eXpressAppFramework/112582 \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Win/WinApplication.Designer.vb b/VB/NonPersistentObjectsDemo.Win/WinApplication.Designer.vb new file mode 100644 index 0000000..1c81c20 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Win/WinApplication.Designer.vb @@ -0,0 +1,129 @@ +Namespace NonPersistentObjectsDemo.Win + Partial Public Class NonPersistentObjectsDemoWindowsFormsApplication + ''' + ''' Required designer variable. + ''' + Private components As System.ComponentModel.IContainer = Nothing + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + #Region "Component Designer generated code" + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + Me.module1 = New DevExpress.ExpressApp.SystemModule.SystemModule() + Me.module2 = New DevExpress.ExpressApp.Win.SystemModule.SystemWindowsFormsModule() + Me.module3 = New NonPersistentObjectsDemo.Module.NonPersistentObjectsDemoModule() + Me.module4 = New NonPersistentObjectsDemo.Module.Win.NonPersistentObjectsDemoWindowsFormsModule() + Me.securityModule1 = New DevExpress.ExpressApp.Security.SecurityModule() + Me.securityStrategyComplex1 = New DevExpress.ExpressApp.Security.SecurityStrategyComplex() + Me.securityStrategyComplex1.SupportNavigationPermissionsForTypes = False + Me.objectsModule = New DevExpress.ExpressApp.Objects.BusinessClassLibraryCustomizationModule() + Me.cloneObjectModule = New DevExpress.ExpressApp.CloneObject.CloneObjectModule() + Me.conditionalAppearanceModule = New DevExpress.ExpressApp.ConditionalAppearance.ConditionalAppearanceModule() + Me.fileAttachmentsWindowsFormsModule = New DevExpress.ExpressApp.FileAttachments.Win.FileAttachmentsWindowsFormsModule() + Me.reportsModuleV2 = New DevExpress.ExpressApp.ReportsV2.ReportsModuleV2() + Me.reportsWindowsFormsModuleV2 = New DevExpress.ExpressApp.ReportsV2.Win.ReportsWindowsFormsModuleV2() + Me.schedulerModuleBase = New DevExpress.ExpressApp.Scheduler.SchedulerModuleBase() + Me.schedulerWindowsFormsModule = New DevExpress.ExpressApp.Scheduler.Win.SchedulerWindowsFormsModule() + Me.scriptRecorderModuleBase = New DevExpress.ExpressApp.ScriptRecorder.ScriptRecorderModuleBase() + Me.scriptRecorderWindowsFormsModule = New DevExpress.ExpressApp.ScriptRecorder.Win.ScriptRecorderWindowsFormsModule() + Me.treeListEditorsModuleBase = New DevExpress.ExpressApp.TreeListEditors.TreeListEditorsModuleBase() + Me.treeListEditorsWindowsFormsModule = New DevExpress.ExpressApp.TreeListEditors.Win.TreeListEditorsWindowsFormsModule() + Me.validationModule = New DevExpress.ExpressApp.Validation.ValidationModule() + Me.validationWindowsFormsModule = New DevExpress.ExpressApp.Validation.Win.ValidationWindowsFormsModule() + Me.authenticationStandard1 = New DevExpress.ExpressApp.Security.AuthenticationStandard() + DirectCast(Me, System.ComponentModel.ISupportInitialize).BeginInit() + ' + ' securityStrategyComplex1 + ' + Me.securityStrategyComplex1.Authentication = Me.authenticationStandard1 + Me.securityStrategyComplex1.RoleType = GetType(DevExpress.Persistent.BaseImpl.PermissionPolicy.PermissionPolicyRole) + Me.securityStrategyComplex1.UserType = GetType(DevExpress.Persistent.BaseImpl.PermissionPolicy.PermissionPolicyUser) + ' + ' securityModule1 + ' + Me.securityModule1.UserType = GetType(DevExpress.Persistent.BaseImpl.PermissionPolicy.PermissionPolicyUser) + ' + ' authenticationStandard1 + ' + Me.authenticationStandard1.LogonParametersType = GetType(DevExpress.ExpressApp.Security.AuthenticationStandardLogonParameters) + ' + ' reportsModuleV2 + ' + Me.reportsModuleV2.EnableInplaceReports = True + Me.reportsModuleV2.ReportDataType = GetType(DevExpress.Persistent.BaseImpl.ReportDataV2) + Me.reportsModuleV2.ShowAdditionalNavigation = False + Me.reportsModuleV2.ReportStoreMode = DevExpress.ExpressApp.ReportsV2.ReportStoreModes.XML + ' + ' NonPersistentObjectsDemoWindowsFormsApplication + ' + Me.ApplicationName = "NonPersistentObjectsDemo" + Me.CheckCompatibilityType = DevExpress.ExpressApp.CheckCompatibilityType.DatabaseSchema + Me.Modules.Add(Me.module1) + Me.Modules.Add(Me.module2) + Me.Modules.Add(Me.module3) + Me.Modules.Add(Me.module4) + Me.Modules.Add(Me.securityModule1) + 'this.Security = this.securityStrategyComplex1; + Me.Modules.Add(Me.objectsModule) + Me.Modules.Add(Me.cloneObjectModule) + Me.Modules.Add(Me.conditionalAppearanceModule) + Me.Modules.Add(Me.fileAttachmentsWindowsFormsModule) + Me.Modules.Add(Me.reportsModuleV2) + Me.Modules.Add(Me.reportsWindowsFormsModuleV2) + Me.Modules.Add(Me.schedulerModuleBase) + Me.Modules.Add(Me.schedulerWindowsFormsModule) + Me.Modules.Add(Me.scriptRecorderModuleBase) + Me.Modules.Add(Me.scriptRecorderWindowsFormsModule) + Me.Modules.Add(Me.treeListEditorsModuleBase) + Me.Modules.Add(Me.treeListEditorsWindowsFormsModule) + Me.Modules.Add(Me.validationModule) + Me.Modules.Add(Me.validationWindowsFormsModule) + Me.UseOldTemplates = False +'INSTANT VB NOTE: The following InitializeComponent event wireup was converted to a 'Handles' clause: +'ORIGINAL LINE: this.DatabaseVersionMismatch += new System.EventHandler(this.NonPersistentObjectsDemoWindowsFormsApplication_DatabaseVersionMismatch); +'INSTANT VB NOTE: The following InitializeComponent event wireup was converted to a 'Handles' clause: +'ORIGINAL LINE: this.CustomizeLanguagesList += new System.EventHandler(this.NonPersistentObjectsDemoWindowsFormsApplication_CustomizeLanguagesList); + + DirectCast(Me, System.ComponentModel.ISupportInitialize).EndInit() + + End Sub + + #End Region + + Private module1 As DevExpress.ExpressApp.SystemModule.SystemModule + Private module2 As DevExpress.ExpressApp.Win.SystemModule.SystemWindowsFormsModule + Private module3 As NonPersistentObjectsDemo.Module.NonPersistentObjectsDemoModule + Private module4 As NonPersistentObjectsDemo.Module.Win.NonPersistentObjectsDemoWindowsFormsModule + Private securityModule1 As DevExpress.ExpressApp.Security.SecurityModule + Private securityStrategyComplex1 As DevExpress.ExpressApp.Security.SecurityStrategyComplex + Private authenticationStandard1 As DevExpress.ExpressApp.Security.AuthenticationStandard + Private objectsModule As DevExpress.ExpressApp.Objects.BusinessClassLibraryCustomizationModule + Private cloneObjectModule As DevExpress.ExpressApp.CloneObject.CloneObjectModule + Private conditionalAppearanceModule As DevExpress.ExpressApp.ConditionalAppearance.ConditionalAppearanceModule + Private fileAttachmentsWindowsFormsModule As DevExpress.ExpressApp.FileAttachments.Win.FileAttachmentsWindowsFormsModule + Private reportsModuleV2 As DevExpress.ExpressApp.ReportsV2.ReportsModuleV2 + Private reportsWindowsFormsModuleV2 As DevExpress.ExpressApp.ReportsV2.Win.ReportsWindowsFormsModuleV2 + Private schedulerModuleBase As DevExpress.ExpressApp.Scheduler.SchedulerModuleBase + Private schedulerWindowsFormsModule As DevExpress.ExpressApp.Scheduler.Win.SchedulerWindowsFormsModule + Private scriptRecorderModuleBase As DevExpress.ExpressApp.ScriptRecorder.ScriptRecorderModuleBase + Private scriptRecorderWindowsFormsModule As DevExpress.ExpressApp.ScriptRecorder.Win.ScriptRecorderWindowsFormsModule + Private treeListEditorsModuleBase As DevExpress.ExpressApp.TreeListEditors.TreeListEditorsModuleBase + Private treeListEditorsWindowsFormsModule As DevExpress.ExpressApp.TreeListEditors.Win.TreeListEditorsWindowsFormsModule + Private validationModule As DevExpress.ExpressApp.Validation.ValidationModule + Private validationWindowsFormsModule As DevExpress.ExpressApp.Validation.Win.ValidationWindowsFormsModule + End Class +End Namespace diff --git a/VB/NonPersistentObjectsDemo.Win/WinApplication.vb b/VB/NonPersistentObjectsDemo.Win/WinApplication.vb new file mode 100644 index 0000000..5e54d22 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Win/WinApplication.vb @@ -0,0 +1,65 @@ +Imports System +Imports System.ComponentModel +Imports DevExpress.ExpressApp +Imports DevExpress.ExpressApp.Win +Imports System.Collections.Generic +Imports DevExpress.ExpressApp.Updating +Imports DevExpress.ExpressApp.Win.Utils +Imports DevExpress.ExpressApp.Xpo +Imports DevExpress.ExpressApp.Security +Imports DevExpress.ExpressApp.Security.ClientServer + +Namespace NonPersistentObjectsDemo.Win + ' For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Win.WinApplication._members + Partial Public Class NonPersistentObjectsDemoWindowsFormsApplication + Inherits WinApplication + + #Region "Default XAF configuration options (https:" 'www.devexpress.com/kb=T501418) + Shared Sub New() + DevExpress.Persistent.Base.PasswordCryptographer.EnableRfc2898 = True + DevExpress.Persistent.Base.PasswordCryptographer.SupportLegacySha512 = False + DevExpress.ExpressApp.Utils.ImageLoader.Instance.UseSvgImages = True + End Sub + Private Sub InitializeDefaults() + LinkNewObjectToParentImmediately = False + OptimizedControllersCreation = True + UseLightStyle = True + SplashScreen = New DXSplashScreen(GetType(XafSplashScreen), New DefaultOverlayFormOptions()) + ExecuteStartupLogicBeforeClosingLogonWindow = True + End Sub + #End Region + Public Sub New() + InitializeComponent() + InitializeDefaults() + End Sub + Protected Overrides Sub CreateDefaultObjectSpaceProvider(ByVal args As CreateCustomObjectSpaceProviderEventArgs) + 'args.ObjectSpaceProviders.Add(new SecuredObjectSpaceProvider((SecurityStrategyComplex)Security, XPObjectSpaceProvider.GetDataStoreProvider(args.ConnectionString, args.Connection, true), false)); + args.ObjectSpaceProviders.Add(New XPObjectSpaceProvider(XPObjectSpaceProvider.GetDataStoreProvider(args.ConnectionString, args.Connection, True), False)) + args.ObjectSpaceProviders.Add(New NonPersistentObjectSpaceProvider(TypesInfo, Nothing)) + End Sub + Private Sub NonPersistentObjectsDemoWindowsFormsApplication_CustomizeLanguagesList(ByVal sender As Object, ByVal e As CustomizeLanguagesListEventArgs) Handles Me.CustomizeLanguagesList + Dim userLanguageName As String = System.Threading.Thread.CurrentThread.CurrentUICulture.Name + If userLanguageName <> "en-US" AndAlso e.Languages.IndexOf(userLanguageName) = -1 Then + e.Languages.Add(userLanguageName) + End If + End Sub + Private Sub NonPersistentObjectsDemoWindowsFormsApplication_DatabaseVersionMismatch(ByVal sender As Object, ByVal e As DevExpress.ExpressApp.DatabaseVersionMismatchEventArgs) Handles Me.DatabaseVersionMismatch +#If EASYTEST Then + e.Updater.Update() + e.Handled = True +#Else + If System.Diagnostics.Debugger.IsAttached Then + e.Updater.Update() + e.Handled = True + Else + Dim message As String = "The application cannot connect to the specified database, " & "because the database doesn't exist, its version is older " & "than that of the application or its schema does not match " & "the ORM data model structure. To avoid this error, use one " & "of the solutions from the https://www.devexpress.com/kb=T367835 KB Article." + + If e.CompatibilityError IsNot Nothing AndAlso e.CompatibilityError.Exception IsNot Nothing Then + message &= vbCrLf & vbCrLf & "Inner exception: " & e.CompatibilityError.Exception.Message + End If + Throw New InvalidOperationException(message) + End If +#End If + End Sub + End Class +End Namespace diff --git a/VB/NonPersistentObjectsDemo.Win/XafSplashScreen.Designer.vb b/VB/NonPersistentObjectsDemo.Win/XafSplashScreen.Designer.vb new file mode 100644 index 0000000..a1ded36 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Win/XafSplashScreen.Designer.vb @@ -0,0 +1,177 @@ +Namespace NonPersistentObjectsDemo.Win + Partial Public Class XafSplashScreen + ''' + ''' Required designer variable. + ''' + Private components As System.ComponentModel.IContainer = Nothing + + ''' + ''' Clean up any resources being used. + ''' + ''' true if managed resources should be disposed; otherwise, false. + Protected Overrides Sub Dispose(ByVal disposing As Boolean) + If disposing AndAlso (components IsNot Nothing) Then + components.Dispose() + End If + MyBase.Dispose(disposing) + End Sub + + #Region "Windows Form Designer generated code" + + ''' + ''' Required method for Designer support - do not modify + ''' the contents of this method with the code editor. + ''' + Private Sub InitializeComponent() + Dim resources As New System.ComponentModel.ComponentResourceManager(GetType(XafSplashScreen)) + Me.progressBarControl = New DevExpress.XtraEditors.MarqueeProgressBarControl() + Me.labelCopyright = New DevExpress.XtraEditors.LabelControl() + Me.labelStatus = New DevExpress.XtraEditors.LabelControl() + Me.peImage = New DevExpress.XtraEditors.PictureEdit() + Me.peLogo = New DevExpress.XtraEditors.PictureEdit() + Me.pcApplicationName = New DevExpress.XtraEditors.PanelControl() + Me.labelSubtitle = New DevExpress.XtraEditors.LabelControl() + Me.labelApplicationName = New DevExpress.XtraEditors.LabelControl() + CType(Me.progressBarControl.Properties, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.peImage.Properties, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.peLogo.Properties, System.ComponentModel.ISupportInitialize).BeginInit() + CType(Me.pcApplicationName, System.ComponentModel.ISupportInitialize).BeginInit() + Me.pcApplicationName.SuspendLayout() + Me.SuspendLayout() + ' + ' progressBarControl + ' + Me.progressBarControl.EditValue = 0 + Me.progressBarControl.Location = New System.Drawing.Point(74, 271) + Me.progressBarControl.Name = "progressBarControl" + Me.progressBarControl.Properties.Appearance.BorderColor = System.Drawing.Color.FromArgb((CInt((CByte(195)))), (CInt((CByte(194)))), (CInt((CByte(194))))) + Me.progressBarControl.Properties.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.Simple + Me.progressBarControl.Properties.EndColor = System.Drawing.Color.FromArgb((CInt((CByte(255)))), (CInt((CByte(114)))), (CInt((CByte(0))))) + Me.progressBarControl.Properties.LookAndFeel.SkinName = "Visual Studio 2013 Blue" + Me.progressBarControl.Properties.LookAndFeel.Style = DevExpress.LookAndFeel.LookAndFeelStyle.UltraFlat + Me.progressBarControl.Properties.LookAndFeel.UseDefaultLookAndFeel = False + Me.progressBarControl.Properties.ProgressViewStyle = DevExpress.XtraEditors.Controls.ProgressViewStyle.Solid + Me.progressBarControl.Properties.StartColor = System.Drawing.Color.FromArgb((CInt((CByte(255)))), (CInt((CByte(144)))), (CInt((CByte(0))))) + Me.progressBarControl.Size = New System.Drawing.Size(350, 16) + Me.progressBarControl.TabIndex = 5 + ' + ' labelCopyright + ' + Me.labelCopyright.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder + Me.labelCopyright.Location = New System.Drawing.Point(24, 324) + Me.labelCopyright.Name = "labelCopyright" + Me.labelCopyright.Size = New System.Drawing.Size(47, 13) + Me.labelCopyright.TabIndex = 6 + Me.labelCopyright.Text = "Copyright" + ' + ' labelStatus + ' + Me.labelStatus.Location = New System.Drawing.Point(75, 253) + Me.labelStatus.Name = "labelStatus" + Me.labelStatus.Size = New System.Drawing.Size(50, 13) + Me.labelStatus.TabIndex = 7 + Me.labelStatus.Text = "Starting..." + ' + ' peImage + ' + Me.peImage.EditValue = (CObj(resources.GetObject("peImage.EditValue"))) + Me.peImage.Location = New System.Drawing.Point(12, 12) + Me.peImage.Name = "peImage" + Me.peImage.Properties.AllowFocused = False + Me.peImage.Properties.Appearance.BackColor = System.Drawing.Color.Transparent + Me.peImage.Properties.Appearance.Options.UseBackColor = True + Me.peImage.Properties.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder + Me.peImage.Properties.ShowMenu = False + Me.peImage.Size = New System.Drawing.Size(426, 180) + Me.peImage.TabIndex = 9 + Me.peImage.Visible = False + ' + ' peLogo + ' + Me.peLogo.EditValue = (CObj(resources.GetObject("peLogo.EditValue"))) + Me.peLogo.Location = New System.Drawing.Point(400, 328) + Me.peLogo.Name = "peLogo" + Me.peLogo.Properties.AllowFocused = False + Me.peLogo.Properties.Appearance.BackColor = System.Drawing.Color.Transparent + Me.peLogo.Properties.Appearance.Options.UseBackColor = True + Me.peLogo.Properties.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder + Me.peLogo.Properties.ShowMenu = False + Me.peLogo.Size = New System.Drawing.Size(70, 20) + Me.peLogo.TabIndex = 8 + ' + ' pcApplicationName + ' + Me.pcApplicationName.Appearance.BackColor = System.Drawing.Color.FromArgb((CInt((CByte(255)))), (CInt((CByte(114)))), (CInt((CByte(0))))) + Me.pcApplicationName.Appearance.Options.UseBackColor = True + Me.pcApplicationName.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder + Me.pcApplicationName.Controls.Add(Me.labelSubtitle) + Me.pcApplicationName.Controls.Add(Me.labelApplicationName) + Me.pcApplicationName.Dock = System.Windows.Forms.DockStyle.Top + Me.pcApplicationName.Location = New System.Drawing.Point(1, 1) + Me.pcApplicationName.LookAndFeel.UseDefaultLookAndFeel = False + Me.pcApplicationName.Name = "pcApplicationName" + Me.pcApplicationName.Size = New System.Drawing.Size(494, 220) + Me.pcApplicationName.TabIndex = 10 + ' + ' labelSubtitle + ' + Me.labelSubtitle.Appearance.Font = New System.Drawing.Font("Segoe UI", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (CByte(0))) + Me.labelSubtitle.Appearance.ForeColor = System.Drawing.Color.FromArgb((CInt((CByte(255)))), (CInt((CByte(216)))), (CInt((CByte(188))))) + Me.labelSubtitle.Appearance.Options.UseFont = True + Me.labelSubtitle.Appearance.Options.UseForeColor = True + Me.labelSubtitle.Location = New System.Drawing.Point(222, 131) + Me.labelSubtitle.Name = "labelSubtitle" + Me.labelSubtitle.Size = New System.Drawing.Size(64, 25) + Me.labelSubtitle.TabIndex = 1 + Me.labelSubtitle.Text = "Subtitle" + ' + ' labelApplicationName + ' + Me.labelApplicationName.Appearance.Font = New System.Drawing.Font("Segoe UI", 26.25F) + Me.labelApplicationName.Appearance.ForeColor = System.Drawing.SystemColors.Window + Me.labelApplicationName.Appearance.Options.UseFont = True + Me.labelApplicationName.Appearance.Options.UseForeColor = True + Me.labelApplicationName.Location = New System.Drawing.Point(123, 84) + Me.labelApplicationName.Name = "labelApplicationName" + Me.labelApplicationName.Size = New System.Drawing.Size(278, 47) + Me.labelApplicationName.TabIndex = 0 + Me.labelApplicationName.Text = "Application Name" + ' + ' XafSplashScreen + ' + Me.AutoScaleDimensions = New System.Drawing.SizeF(6F, 13F) + Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font + Me.BackColor = System.Drawing.Color.White + Me.ClientSize = New System.Drawing.Size(496, 370) + Me.Controls.Add(Me.pcApplicationName) + Me.Controls.Add(Me.peImage) + Me.Controls.Add(Me.peLogo) + Me.Controls.Add(Me.labelStatus) + Me.Controls.Add(Me.labelCopyright) + Me.Controls.Add(Me.progressBarControl) + Me.Name = "XafSplashScreen" + Me.Padding = New System.Windows.Forms.Padding(1) + Me.Text = "Form1" + CType(Me.progressBarControl.Properties, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.peImage.Properties, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.peLogo.Properties, System.ComponentModel.ISupportInitialize).EndInit() + CType(Me.pcApplicationName, System.ComponentModel.ISupportInitialize).EndInit() + Me.pcApplicationName.ResumeLayout(False) + Me.pcApplicationName.PerformLayout() + Me.ResumeLayout(False) + Me.PerformLayout() + + End Sub + + #End Region + + Private progressBarControl As DevExpress.XtraEditors.MarqueeProgressBarControl + Private labelCopyright As DevExpress.XtraEditors.LabelControl + Private labelStatus As DevExpress.XtraEditors.LabelControl + Private peLogo As DevExpress.XtraEditors.PictureEdit + Private peImage As DevExpress.XtraEditors.PictureEdit + Private pcApplicationName As DevExpress.XtraEditors.PanelControl + Private labelSubtitle As DevExpress.XtraEditors.LabelControl + Private labelApplicationName As DevExpress.XtraEditors.LabelControl + End Class +End Namespace diff --git a/VB/NonPersistentObjectsDemo.Win/XafSplashScreen.resx b/VB/NonPersistentObjectsDemo.Win/XafSplashScreen.resx new file mode 100644 index 0000000..18fc5b4 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Win/XafSplashScreen.resx @@ -0,0 +1,638 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + YII= + + + \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Win/XafSplashScreen.vb b/VB/NonPersistentObjectsDemo.Win/XafSplashScreen.vb new file mode 100644 index 0000000..9938ca4 --- /dev/null +++ b/VB/NonPersistentObjectsDemo.Win/XafSplashScreen.vb @@ -0,0 +1,56 @@ +Imports System +Imports System.Drawing +Imports System.IO +Imports System.Reflection +Imports DevExpress.ExpressApp.Win.Utils +Imports DevExpress.Skins +Imports DevExpress.Utils.Drawing +Imports DevExpress.Utils.Svg +Imports DevExpress.XtraSplashScreen + +Namespace NonPersistentObjectsDemo.Win + Partial Public Class XafSplashScreen + Inherits SplashScreen + + Private Sub LoadBlankLogo() + Dim assembly As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly() + Dim blankLogoResourceName As String = assembly.GetName().Name & ".Images.Logo.svg" + Dim svgStream As Stream = assembly.GetManifestResourceStream(blankLogoResourceName) + If svgStream IsNot Nothing Then + svgStream.Position = 0 + peLogo.SvgImage = SvgImage.FromStream(svgStream) + End If + End Sub + Protected Overrides Sub DrawContent(ByVal graphicsCache As GraphicsCache, ByVal skin As Skin) + Dim bounds As Rectangle = ClientRectangle + bounds.Width -= 1 + bounds.Height -= 1 + graphicsCache.Graphics.DrawRectangle(graphicsCache.GetPen(Color.FromArgb(255, 87, 87, 87), 1), bounds) + End Sub + Protected Sub UpdateLabelsPosition() + labelApplicationName.CalcBestSize() + Dim newLeft As Integer = (Width - labelApplicationName.Width) \ 2 + labelApplicationName.Location = New Point(newLeft, labelApplicationName.Top) + labelSubtitle.CalcBestSize() + newLeft = (Width - labelSubtitle.Width) \ 2 + labelSubtitle.Location = New Point(newLeft, labelSubtitle.Top) + End Sub + Public Sub New() + InitializeComponent() + LoadBlankLogo() + Me.labelCopyright.Text = "Copyright © " & DateTime.Now.Year.ToString() & " Company Name" & Environment.NewLine & "All rights reserved." + UpdateLabelsPosition() + End Sub + + #Region "Overrides" + + Public Overrides Sub ProcessCommand(ByVal cmd As System.Enum, ByVal arg As Object) + MyBase.ProcessCommand(cmd, arg) + If CType(cmd, UpdateSplashCommand) = UpdateSplashCommand.Description Then + labelStatus.Text = DirectCast(arg, String) + End If + End Sub + + #End Region + End Class +End Namespace diff --git a/VB/NonPersistentObjectsFilteringDemo.sln b/VB/NonPersistentObjectsFilteringDemo.sln new file mode 100644 index 0000000..6dac80e --- /dev/null +++ b/VB/NonPersistentObjectsFilteringDemo.sln @@ -0,0 +1,59 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.28307.1000 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "NonPersistentObjectsDemo.Module", "NonPersistentObjectsDemo.Module\NonPersistentObjectsDemo.Module.vbproj", "{57ACDBDB-006E-43D3-9308-97857F2FF75D}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "NonPersistentObjectsDemo.Module.Web", "NonPersistentObjectsDemo.Module.Web\NonPersistentObjectsDemo.Module.Web.vbproj", "{EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "NonPersistentObjectsDemo.Web", "NonPersistentObjectsDemo.Web\NonPersistentObjectsDemo.Web.vbproj", "{8C3026D1-113C-4B88-9F91-236753790C60}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "NonPersistentObjectsDemo.Module.Win", "NonPersistentObjectsDemo.Module.Win\NonPersistentObjectsDemo.Module.Win.vbproj", "{72D644CD-C193-4572-B2E3-CA82819A1627}" +EndProject +Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "NonPersistentObjectsDemo.Win", "NonPersistentObjectsDemo.Win\NonPersistentObjectsDemo.Win.vbproj", "{13E1ACF3-669C-4405-8260-E70BE603E197}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + EasyTest|Any CPU = EasyTest|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {57ACDBDB-006E-43D3-9308-97857F2FF75D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {57ACDBDB-006E-43D3-9308-97857F2FF75D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {57ACDBDB-006E-43D3-9308-97857F2FF75D}.EasyTest|Any CPU.ActiveCfg = EasyTest|Any CPU + {57ACDBDB-006E-43D3-9308-97857F2FF75D}.EasyTest|Any CPU.Build.0 = EasyTest|Any CPU + {57ACDBDB-006E-43D3-9308-97857F2FF75D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {57ACDBDB-006E-43D3-9308-97857F2FF75D}.Release|Any CPU.Build.0 = Release|Any CPU + {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B}.EasyTest|Any CPU.ActiveCfg = EasyTest|Any CPU + {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B}.EasyTest|Any CPU.Build.0 = EasyTest|Any CPU + {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B}.Release|Any CPU.Build.0 = Release|Any CPU + {8C3026D1-113C-4B88-9F91-236753790C60}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8C3026D1-113C-4B88-9F91-236753790C60}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8C3026D1-113C-4B88-9F91-236753790C60}.EasyTest|Any CPU.ActiveCfg = EasyTest|Any CPU + {8C3026D1-113C-4B88-9F91-236753790C60}.EasyTest|Any CPU.Build.0 = EasyTest|Any CPU + {8C3026D1-113C-4B88-9F91-236753790C60}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8C3026D1-113C-4B88-9F91-236753790C60}.Release|Any CPU.Build.0 = Release|Any CPU + {72D644CD-C193-4572-B2E3-CA82819A1627}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {72D644CD-C193-4572-B2E3-CA82819A1627}.Debug|Any CPU.Build.0 = Debug|Any CPU + {72D644CD-C193-4572-B2E3-CA82819A1627}.EasyTest|Any CPU.ActiveCfg = EasyTest|Any CPU + {72D644CD-C193-4572-B2E3-CA82819A1627}.EasyTest|Any CPU.Build.0 = EasyTest|Any CPU + {72D644CD-C193-4572-B2E3-CA82819A1627}.Release|Any CPU.ActiveCfg = Release|Any CPU + {72D644CD-C193-4572-B2E3-CA82819A1627}.Release|Any CPU.Build.0 = Release|Any CPU + {13E1ACF3-669C-4405-8260-E70BE603E197}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {13E1ACF3-669C-4405-8260-E70BE603E197}.Debug|Any CPU.Build.0 = Debug|Any CPU + {13E1ACF3-669C-4405-8260-E70BE603E197}.EasyTest|Any CPU.ActiveCfg = EasyTest|Any CPU + {13E1ACF3-669C-4405-8260-E70BE603E197}.EasyTest|Any CPU.Build.0 = EasyTest|Any CPU + {13E1ACF3-669C-4405-8260-E70BE603E197}.Release|Any CPU.ActiveCfg = Release|Any CPU + {13E1ACF3-669C-4405-8260-E70BE603E197}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {BCF45AD8-3F2F-4887-832F-CBD5AE72BD68} + EndGlobalSection +EndGlobal From 6f141c3e5c55524374381376b38d2d82ddd5c35b Mon Sep 17 00:00:00 2001 From: KL <@> Date: Mon, 18 May 2020 19:13:11 +0300 Subject: [PATCH 08/40] update readme --- readme.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/readme.md b/readme.md index 52e2dc9..9032b7a 100644 --- a/readme.md +++ b/readme.md @@ -10,13 +10,13 @@ ## Scenario -When a [Non\-Persistent Object](https://docs.devexpress.com/eXpressAppFramework/116516/concepts/business-model-design/non-persistent-objects) colletion contains a lot of objects, it is often useful to filter it. However, the built-in filtering facilities are disabled for non-persistent collections by default. +When a [Non\-Persistent Object](https://docs.devexpress.com/eXpressAppFramework/116516/concepts/business-model-design/non-persistent-objects) collection contains many objects, it is often useful to filter it. However, the built-in filtering facilities are disabled for non-persistent collections by default. ## Solution To enable filtering and sorting for [Non\-Persistent Objects](https://docs.devexpress.com/eXpressAppFramework/116516/concepts/business-model-design/non-persistent-objects), use the built-in **DynamicCollection** class or a custom **DynamicCollectionBase** descendant. -Here, we create a **DynamicCollection** instance and pass it in the [NonPersistentObjectSpace\.ObjectsGetting](https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.NonPersistentObjectSpace.ObjectsGetting) event handler. We subscribe to the **DynamicCollection.ObjectsFetching** event and pass a new collection of non-persistent objects every time filtering or sorting parameters are changed. If you cannot filter the collection manually, set the **ShapeData** event parameter to *true*. Then, **DynamicCollection** will process data (filter, sort, trim) internally. +Here, we create a **DynamicCollection** instance and pass it in the [NonPersistentObjectSpace\.ObjectsGetting](https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.NonPersistentObjectSpace.ObjectsGetting) event handler. We subscribe to the **DynamicCollection.ObjectsFetching** event and pass a new collection of non-persistent objects every time the filtering or sorting parameters are changed. If you cannot filter the collection manually, set the **ShapeData** event parameter to *true*. Then, **DynamicCollection** will process data (filter, sort, trim) internally. This example demonstrates two approaches to filter objects. @@ -26,7 +26,7 @@ This example demonstrates two approaches to filter objects. When **DynamicCollection** is used, the built-in [FullTextSearch Action](https://docs.devexpress.com/eXpressAppFramework/112997/concepts/filtering/full-text-search-action) is shown in corresponding non-persistent list views. -*FindArticlesController* in this example shows a custom search form with a lookup editor that allows filtering non-perssitent objects in a lookup list view. +*FindArticlesController* in this example shows a custom search form with a lookup editor that allows filtering non-persistent objects in a lookup list view. Filtering and sorting at the data source level is also supported in Reports. Use the [Criteria](https://docs.devexpress.com/eXpressAppFramework/DevExpress.Persistent.Base.ReportsV2.DataSourceBase.Criteria) and [Sorting](https://docs.devexpress.com/eXpressAppFramework/DevExpress.Persistent.Base.ReportsV2.DataSourceBase.Sorting) properties of [CollectionDataSource](https://docs.devexpress.com/eXpressAppFramework/DevExpress.Persistent.Base.ReportsV2.CollectionDataSource) to specify filter criteria and sorting parameters. From 6118d1120745ad059101f16b69d4f2498fe05305 Mon Sep 17 00:00:00 2001 From: DevExpressExampleBot Date: Tue, 19 May 2020 11:01:26 +0300 Subject: [PATCH 09/40] Source auto update [skip ci] --- CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml | 4 ++-- VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml b/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml index b19e270..5a5a97d 100644 --- a/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml +++ b/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml @@ -28,8 +28,8 @@ - - + + diff --git a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml index b19e270..5a5a97d 100644 --- a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml +++ b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml @@ -28,8 +28,8 @@ - - + + From c629f4dd79ce9f714ef8d5dd9269fc7a97b5215e Mon Sep 17 00:00:00 2001 From: KL <@> Date: Fri, 29 May 2020 14:24:52 +0300 Subject: [PATCH 10/40] Update readme --- readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index 9032b7a..68b0d68 100644 --- a/readme.md +++ b/readme.md @@ -16,13 +16,13 @@ When a [Non\-Persistent Object](https://docs.devexpress.com/eXpressAppFramework/ To enable filtering and sorting for [Non\-Persistent Objects](https://docs.devexpress.com/eXpressAppFramework/116516/concepts/business-model-design/non-persistent-objects), use the built-in **DynamicCollection** class or a custom **DynamicCollectionBase** descendant. -Here, we create a **DynamicCollection** instance and pass it in the [NonPersistentObjectSpace\.ObjectsGetting](https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.NonPersistentObjectSpace.ObjectsGetting) event handler. We subscribe to the **DynamicCollection.ObjectsFetching** event and pass a new collection of non-persistent objects every time the filtering or sorting parameters are changed. If you cannot filter the collection manually, set the **ShapeData** event parameter to *true*. Then, **DynamicCollection** will process data (filter, sort, trim) internally. +Here, we create a **DynamicCollection** instance and pass it in the [NonPersistentObjectSpace\.ObjectsGetting](https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.NonPersistentObjectSpace.ObjectsGetting) event handler. We subscribe to the **DynamicCollection.FetchObjects** event and pass a new collection of non-persistent objects every time the filtering or sorting parameters are changed. If you cannot filter the collection manually, set the **ShapeData** event parameter to *true*. Then, **DynamicCollection** will process data (filter, sort, trim) internally. This example demonstrates two approaches to filter objects. - *Contact* objects are filtered at the storage level. Criteria and Sorting values passed in event parameters are converted into a storage-specific format and used in arguments of the *DataTable.Select* method call. DataSet returns filtered and sorted data that is then transformed into non-persistent objects. This approach can be useful if data for non-persistent objects is obtained from a remote service, a custom database query or a stored procedure. -- *Article* objects are filtered and sorted by DynamicCollection internally. This functionality is enabled when the **ShapeData** parameter of the **DynamicCollection.ObjectsFetching** event is set to *true*. This approach is useful when all data is already available and no custom processing is required. +- *Article* objects are filtered and sorted by DynamicCollection internally. This functionality is enabled when the **ShapeData** parameter of the **DynamicCollection.FetchObjects** event is set to *true*. This approach is useful when all data is already available and no custom processing is required. When **DynamicCollection** is used, the built-in [FullTextSearch Action](https://docs.devexpress.com/eXpressAppFramework/112997/concepts/filtering/full-text-search-action) is shown in corresponding non-persistent list views. From ceaf6f93f3a2b461d703c18a67006c875b9b7e17 Mon Sep 17 00:00:00 2001 From: DevExpressExampleBot Date: Fri, 28 Aug 2020 21:22:34 +0300 Subject: [PATCH 11/40] Source auto update [skip ci] --- CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml | 4 ++-- VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml b/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml index 5a5a97d..94bd80a 100644 --- a/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml +++ b/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml @@ -28,8 +28,8 @@ - - + + diff --git a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml index 5a5a97d..94bd80a 100644 --- a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml +++ b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml @@ -28,8 +28,8 @@ - - + + From e93223e085987976f7405de6101627054440f430 Mon Sep 17 00:00:00 2001 From: DevExpressExampleBot Date: Fri, 16 Oct 2020 07:54:46 +0300 Subject: [PATCH 12/40] Source auto update [skip ci] --- CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml | 4 ++-- VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml b/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml index 94bd80a..eca08d4 100644 --- a/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml +++ b/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml @@ -28,8 +28,8 @@ - - + + diff --git a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml index 94bd80a..eca08d4 100644 --- a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml +++ b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml @@ -28,8 +28,8 @@ - - + + From 4d5a61bf5c88eae83d5e50e150df6dde38c6147d Mon Sep 17 00:00:00 2001 From: DevExpressExampleBot Date: Wed, 25 Nov 2020 09:48:15 +0300 Subject: [PATCH 13/40] Source auto update [skip ci] --- CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml | 4 ++-- VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml b/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml index eca08d4..f636e99 100644 --- a/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml +++ b/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml @@ -28,8 +28,8 @@ - - + + diff --git a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml index eca08d4..f636e99 100644 --- a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml +++ b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml @@ -28,8 +28,8 @@ - - + + From 63fa51385d5362920d875dc45572c0eaf72d2247 Mon Sep 17 00:00:00 2001 From: mi <37874810+dxmi@users.noreply.github.com> Date: Wed, 25 Nov 2020 22:10:29 +0300 Subject: [PATCH 14/40] Fix T952445 --- .../BusinessObjects/NonPersistentObjectBase.cs | 5 ++++- .../Controllers/FindArticlesController.cs | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/CS/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.cs b/CS/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.cs index 853afeb..ccf9139 100644 --- a/CS/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.cs +++ b/CS/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.cs @@ -10,7 +10,7 @@ namespace NonPersistentObjectsDemo.Module.BusinessObjects { - public abstract class NonPersistentObjectBase : INotifyPropertyChanged, IObjectSpaceLink { + public abstract class BoundNonPersistentObjectBase : NonPersistentObjectBase, IObjectSpaceLink { private IObjectSpace objectSpace; protected IObjectSpace ObjectSpace { get { return objectSpace; } } IObjectSpace IObjectSpaceLink.ObjectSpace { @@ -28,6 +28,9 @@ protected virtual void OnObjectSpaceChanged() { } protected IObjectSpace FindPersistentObjectSpace(Type type) { return ((NonPersistentObjectSpace)ObjectSpace).AdditionalObjectSpaces.FirstOrDefault(os => os.IsKnownType(type)); } + } + + public abstract class NonPersistentObjectBase : INotifyPropertyChanged { public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); diff --git a/CS/NonPersistentObjectsDemo.Module/Controllers/FindArticlesController.cs b/CS/NonPersistentObjectsDemo.Module/Controllers/FindArticlesController.cs index 4ba3ab7..f1fd517 100644 --- a/CS/NonPersistentObjectsDemo.Module/Controllers/FindArticlesController.cs +++ b/CS/NonPersistentObjectsDemo.Module/Controllers/FindArticlesController.cs @@ -33,7 +33,7 @@ private void Action_Execute(object sender, PopupWindowShowActionExecuteEventArgs } [DomainComponent] - public class FindArticlesDialog : NonPersistentObjectBase { + public class FindArticlesDialog : BoundNonPersistentObjectBase { private Contact _Author; [ImmediatePostData] public Contact Author { From cee4b205e8d7f9be304e3721d439e0f1cbf7fc70 Mon Sep 17 00:00:00 2001 From: DevExpressExampleBot Date: Wed, 25 Nov 2020 22:19:42 +0300 Subject: [PATCH 15/40] Source auto update [skip ci] --- .../NonPersistentObjectBase.vb | 10 ++++-- .../Controllers/FindArticlesController.vb | 2 +- .../Default.aspx.designer.vb | 4 +-- .../Error.aspx.designer.vb | 34 +++++++++---------- .../Login.aspx.designer.vb | 6 ++-- 5 files changed, 31 insertions(+), 25 deletions(-) diff --git a/VB/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.vb b/VB/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.vb index c9fa554..c99bebe 100644 --- a/VB/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.vb +++ b/VB/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.vb @@ -10,8 +10,9 @@ Imports DevExpress.Persistent.Base Namespace NonPersistentObjectsDemo.Module.BusinessObjects - Public MustInherit Class NonPersistentObjectBase - Implements INotifyPropertyChanged, IObjectSpaceLink + Public MustInherit Class BoundNonPersistentObjectBase + Inherits NonPersistentObjectBase + Implements IObjectSpaceLink 'INSTANT VB NOTE: The field objectSpace was renamed since Visual Basic does not allow fields to have the same name as other class members: Private objectSpace_Conflict As IObjectSpace @@ -39,6 +40,11 @@ Namespace NonPersistentObjectsDemo.Module.BusinessObjects Protected Function FindPersistentObjectSpace(ByVal type As Type) As IObjectSpace Return DirectCast(ObjectSpace, NonPersistentObjectSpace).AdditionalObjectSpaces.FirstOrDefault(Function(os) os.IsKnownType(type)) End Function + End Class + + Public MustInherit Class NonPersistentObjectBase + Implements INotifyPropertyChanged + Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged Protected Sub OnPropertyChanged(ByVal propertyName As String) PropertyChangedEvent?.Invoke(Me, New PropertyChangedEventArgs(propertyName)) diff --git a/VB/NonPersistentObjectsDemo.Module/Controllers/FindArticlesController.vb b/VB/NonPersistentObjectsDemo.Module/Controllers/FindArticlesController.vb index 9431fe3..9045f45 100644 --- a/VB/NonPersistentObjectsDemo.Module/Controllers/FindArticlesController.vb +++ b/VB/NonPersistentObjectsDemo.Module/Controllers/FindArticlesController.vb @@ -36,7 +36,7 @@ Namespace NonPersistentObjectsDemo.Module.Controllers Public Class FindArticlesDialog - Inherits NonPersistentObjectBase + Inherits BoundNonPersistentObjectBase Private _Author As Contact diff --git a/VB/NonPersistentObjectsDemo.Web/Default.aspx.designer.vb b/VB/NonPersistentObjectsDemo.Web/Default.aspx.designer.vb index c8e5ce6..9a635ed 100644 --- a/VB/NonPersistentObjectsDemo.Web/Default.aspx.designer.vb +++ b/VB/NonPersistentObjectsDemo.Web/Default.aspx.designer.vb @@ -18,7 +18,7 @@ Partial Public Class [Default] ''' Auto-generated field. ''' To modify move field declaration from designer file to code-behind file. ''' - Protected form2 As Global.System.Web.UI.HtmlControls.HtmlForm + Protected form2 As System.Web.UI.HtmlControls.HtmlForm ''' ''' ProgressControl control. @@ -36,5 +36,5 @@ Partial Public Class [Default] ''' Auto-generated field. ''' To modify move field declaration from designer file to code-behind file. ''' - Protected Content As Global.System.Web.UI.HtmlControls.HtmlGenericControl + Protected Content As System.Web.UI.HtmlControls.HtmlGenericControl End Class diff --git a/VB/NonPersistentObjectsDemo.Web/Error.aspx.designer.vb b/VB/NonPersistentObjectsDemo.Web/Error.aspx.designer.vb index 050a7f5..4155220 100644 --- a/VB/NonPersistentObjectsDemo.Web/Error.aspx.designer.vb +++ b/VB/NonPersistentObjectsDemo.Web/Error.aspx.designer.vb @@ -18,7 +18,7 @@ Partial Public Class ErrorPage ''' Auto-generated field. ''' To modify move field declaration from designer file to code-behind file. ''' - Protected Head1 As Global.System.Web.UI.HtmlControls.HtmlHead + Protected Head1 As System.Web.UI.HtmlControls.HtmlHead ''' ''' form1 control. @@ -27,7 +27,7 @@ Partial Public Class ErrorPage ''' Auto-generated field. ''' To modify move field declaration from designer file to code-behind file. ''' - Protected form1 As Global.System.Web.UI.HtmlControls.HtmlForm + Protected form1 As System.Web.UI.HtmlControls.HtmlForm ''' ''' ApplicationTitle control. @@ -36,7 +36,7 @@ Partial Public Class ErrorPage ''' Auto-generated field. ''' To modify move field declaration from designer file to code-behind file. ''' - Protected ApplicationTitle As Global.System.Web.UI.WebControls.Literal + Protected ApplicationTitle As System.Web.UI.WebControls.Literal ''' ''' InfoMessagesPanel control. @@ -45,7 +45,7 @@ Partial Public Class ErrorPage ''' Auto-generated field. ''' To modify move field declaration from designer file to code-behind file. ''' - Protected InfoMessagesPanel As Global.System.Web.UI.WebControls.Literal + Protected InfoMessagesPanel As System.Web.UI.WebControls.Literal ''' ''' Table1 control. @@ -54,7 +54,7 @@ Partial Public Class ErrorPage ''' Auto-generated field. ''' To modify move field declaration from designer file to code-behind file. ''' - Protected Table1 As Global.System.Web.UI.WebControls.Table + Protected Table1 As System.Web.UI.WebControls.Table ''' ''' TableRow2 control. @@ -63,7 +63,7 @@ Partial Public Class ErrorPage ''' Auto-generated field. ''' To modify move field declaration from designer file to code-behind file. ''' - Protected TableRow2 As Global.System.Web.UI.WebControls.TableRow + Protected TableRow2 As System.Web.UI.WebControls.TableRow ''' ''' ViewSite control. @@ -72,7 +72,7 @@ Partial Public Class ErrorPage ''' Auto-generated field. ''' To modify move field declaration from designer file to code-behind file. ''' - Protected ViewSite As Global.System.Web.UI.WebControls.TableCell + Protected ViewSite As System.Web.UI.WebControls.TableCell ''' ''' ErrorTitleLiteral control. @@ -81,7 +81,7 @@ Partial Public Class ErrorPage ''' Auto-generated field. ''' To modify move field declaration from designer file to code-behind file. ''' - Protected ErrorTitleLiteral As Global.System.Web.UI.WebControls.Literal + Protected ErrorTitleLiteral As System.Web.UI.WebControls.Literal ''' ''' ErrorPanel control. @@ -90,7 +90,7 @@ Partial Public Class ErrorPage ''' Auto-generated field. ''' To modify move field declaration from designer file to code-behind file. ''' - Protected ErrorPanel As Global.System.Web.UI.WebControls.Panel + Protected ErrorPanel As System.Web.UI.WebControls.Panel ''' ''' ApologizeMessage control. @@ -99,7 +99,7 @@ Partial Public Class ErrorPage ''' Auto-generated field. ''' To modify move field declaration from designer file to code-behind file. ''' - Protected ApologizeMessage As Global.System.Web.UI.WebControls.PlaceHolder + Protected ApologizeMessage As System.Web.UI.WebControls.PlaceHolder ''' ''' HyperLink1 control. @@ -108,7 +108,7 @@ Partial Public Class ErrorPage ''' Auto-generated field. ''' To modify move field declaration from designer file to code-behind file. ''' - Protected HyperLink1 As Global.System.Web.UI.WebControls.HyperLink + Protected HyperLink1 As System.Web.UI.WebControls.HyperLink ''' ''' NavigateToStart control. @@ -117,7 +117,7 @@ Partial Public Class ErrorPage ''' Auto-generated field. ''' To modify move field declaration from designer file to code-behind file. ''' - Protected NavigateToStart As Global.System.Web.UI.WebControls.LinkButton + Protected NavigateToStart As System.Web.UI.WebControls.LinkButton ''' ''' Details control. @@ -126,7 +126,7 @@ Partial Public Class ErrorPage ''' Auto-generated field. ''' To modify move field declaration from designer file to code-behind file. ''' - Protected Details As Global.System.Web.UI.WebControls.Panel + Protected Details As System.Web.UI.WebControls.Panel ''' ''' DetailsText control. @@ -135,7 +135,7 @@ Partial Public Class ErrorPage ''' Auto-generated field. ''' To modify move field declaration from designer file to code-behind file. ''' - Protected DetailsText As Global.System.Web.UI.WebControls.Literal + Protected DetailsText As System.Web.UI.WebControls.Literal ''' ''' ReportForm control. @@ -144,7 +144,7 @@ Partial Public Class ErrorPage ''' Auto-generated field. ''' To modify move field declaration from designer file to code-behind file. ''' - Protected ReportForm As Global.System.Web.UI.WebControls.Panel + Protected ReportForm As System.Web.UI.WebControls.Panel ''' ''' DescriptionTextBox control. @@ -153,7 +153,7 @@ Partial Public Class ErrorPage ''' Auto-generated field. ''' To modify move field declaration from designer file to code-behind file. ''' - Protected DescriptionTextBox As Global.System.Web.UI.WebControls.TextBox + Protected DescriptionTextBox As System.Web.UI.WebControls.TextBox ''' ''' ReportButton control. @@ -162,5 +162,5 @@ Partial Public Class ErrorPage ''' Auto-generated field. ''' To modify move field declaration from designer file to code-behind file. ''' - Protected ReportButton As Global.System.Web.UI.WebControls.Button + Protected ReportButton As System.Web.UI.WebControls.Button End Class diff --git a/VB/NonPersistentObjectsDemo.Web/Login.aspx.designer.vb b/VB/NonPersistentObjectsDemo.Web/Login.aspx.designer.vb index b663b4f..b729840 100644 --- a/VB/NonPersistentObjectsDemo.Web/Login.aspx.designer.vb +++ b/VB/NonPersistentObjectsDemo.Web/Login.aspx.designer.vb @@ -18,7 +18,7 @@ Partial Public Class LoginPage ''' Auto-generated field. ''' To modify move field declaration from designer file to code-behind file. ''' - Protected Head1 As Global.System.Web.UI.HtmlControls.HtmlHead + Protected Head1 As System.Web.UI.HtmlControls.HtmlHead ''' ''' form1 control. @@ -27,7 +27,7 @@ Partial Public Class LoginPage ''' Auto-generated field. ''' To modify move field declaration from designer file to code-behind file. ''' - Protected form1 As Global.System.Web.UI.HtmlControls.HtmlForm + Protected form1 As System.Web.UI.HtmlControls.HtmlForm ''' ''' ProgressControl control. @@ -45,5 +45,5 @@ Partial Public Class LoginPage ''' Auto-generated field. ''' To modify move field declaration from designer file to code-behind file. ''' - Protected Content As Global.System.Web.UI.HtmlControls.HtmlGenericControl + Protected Content As System.Web.UI.HtmlControls.HtmlGenericControl End Class From 25010ed410285b48235113196b99cfca6a2a7385 Mon Sep 17 00:00:00 2001 From: mi <37874810+dxmi@users.noreply.github.com> Date: Wed, 25 Nov 2020 22:32:36 +0300 Subject: [PATCH 16/40] Please VB --- .../BusinessObjects/Article.cs | 6 +++--- .../BusinessObjects/Contact.cs | 12 ++++++------ .../BusinessObjects/NonPersistentObjectBase.cs | 10 +++++----- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/CS/NonPersistentObjectsDemo.Module/BusinessObjects/Article.cs b/CS/NonPersistentObjectsDemo.Module/BusinessObjects/Article.cs index 4acb740..c7fd590 100644 --- a/CS/NonPersistentObjectsDemo.Module/BusinessObjects/Article.cs +++ b/CS/NonPersistentObjectsDemo.Module/BusinessObjects/Article.cs @@ -16,12 +16,12 @@ namespace NonPersistentObjectsDemo.Module.BusinessObjects { [DevExpress.ExpressApp.DC.DomainComponent] public class Article : NonPersistentObjectBase { internal Article() { } - private int id; + private int _ID; [Browsable(false)] [DevExpress.ExpressApp.Data.Key] public int ID { - get { return id; } - set { id = value; } + get { return _ID; } + set { _ID = value; } } private Contact _Author; public Contact Author { diff --git a/CS/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.cs b/CS/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.cs index 816d3b1..652e3de 100644 --- a/CS/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.cs +++ b/CS/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.cs @@ -18,16 +18,16 @@ namespace NonPersistentObjectsDemo.Module.BusinessObjects { [DevExpress.ExpressApp.DC.DomainComponent] public class Contact : NonPersistentObjectBase { internal Contact() { } - private string userName; + private string _UserName; [DevExpress.ExpressApp.Data.Key] public string UserName { - get { return userName; } - set { userName = value; } + get { return _UserName; } + set { _UserName = value; } } - private string fullName; + private string _FullName; public string FullName { - get { return fullName; } - set { SetPropertyValue(nameof(FullName), ref fullName, value); } + get { return _FullName; } + set { SetPropertyValue(nameof(FullName), ref _FullName, value); } } private int _Age; public int Age { diff --git a/CS/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.cs b/CS/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.cs index ccf9139..b712117 100644 --- a/CS/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.cs +++ b/CS/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.cs @@ -11,14 +11,14 @@ namespace NonPersistentObjectsDemo.Module.BusinessObjects { public abstract class BoundNonPersistentObjectBase : NonPersistentObjectBase, IObjectSpaceLink { - private IObjectSpace objectSpace; - protected IObjectSpace ObjectSpace { get { return objectSpace; } } + private IObjectSpace _ObjectSpace; + protected IObjectSpace ObjectSpace { get { return _ObjectSpace; } } IObjectSpace IObjectSpaceLink.ObjectSpace { - get { return objectSpace; } + get { return _ObjectSpace; } set { - if(objectSpace != value) { + if(_ObjectSpace != value) { OnObjectSpaceChanging(); - objectSpace = value; + _ObjectSpace = value; OnObjectSpaceChanged(); } } From 5e5c80e69748eb4a64625ffa61b58c5f3710eb2b Mon Sep 17 00:00:00 2001 From: DevExpressExampleBot Date: Wed, 25 Nov 2020 22:39:41 +0300 Subject: [PATCH 17/40] Source auto update [skip ci] --- .../BusinessObjects/Article.vb | 7 +++---- .../BusinessObjects/Contact.vb | 14 ++++++-------- .../BusinessObjects/NonPersistentObjectBase.vb | 11 +++++------ 3 files changed, 14 insertions(+), 18 deletions(-) diff --git a/VB/NonPersistentObjectsDemo.Module/BusinessObjects/Article.vb b/VB/NonPersistentObjectsDemo.Module/BusinessObjects/Article.vb index 5d7c968..32d9cd6 100644 --- a/VB/NonPersistentObjectsDemo.Module/BusinessObjects/Article.vb +++ b/VB/NonPersistentObjectsDemo.Module/BusinessObjects/Article.vb @@ -19,16 +19,15 @@ Namespace NonPersistentObjectsDemo.Module.BusinessObjects Friend Sub New() End Sub -'INSTANT VB NOTE: The field id was renamed since Visual Basic does not allow fields to have the same name as other class members: - Private id_Conflict As Integer + Private _ID As Integer Public Property ID() As Integer Get - Return id_Conflict + Return _ID End Get Set(ByVal value As Integer) - id_Conflict = value + _ID = value End Set End Property Private _Author As Contact diff --git a/VB/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.vb b/VB/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.vb index edbe023..8d67557 100644 --- a/VB/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.vb +++ b/VB/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.vb @@ -21,25 +21,23 @@ Namespace NonPersistentObjectsDemo.Module.BusinessObjects Friend Sub New() End Sub -'INSTANT VB NOTE: The field userName was renamed since Visual Basic does not allow fields to have the same name as other class members: - Private userName_Conflict As String + Private _UserName As String Public Property UserName() As String Get - Return userName_Conflict + Return _UserName End Get Set(ByVal value As String) - userName_Conflict = value + _UserName = value End Set End Property -'INSTANT VB NOTE: The field fullName was renamed since Visual Basic does not allow fields to have the same name as other class members: - Private fullName_Conflict As String + Private _FullName As String Public Property FullName() As String Get - Return fullName_Conflict + Return _FullName End Get Set(ByVal value As String) - SetPropertyValue(NameOf(FullName), fullName_Conflict, value) + SetPropertyValue(NameOf(FullName), _FullName, value) End Set End Property Private _Age As Integer diff --git a/VB/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.vb b/VB/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.vb index c99bebe..2881bc5 100644 --- a/VB/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.vb +++ b/VB/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.vb @@ -14,21 +14,20 @@ Namespace NonPersistentObjectsDemo.Module.BusinessObjects Inherits NonPersistentObjectBase Implements IObjectSpaceLink -'INSTANT VB NOTE: The field objectSpace was renamed since Visual Basic does not allow fields to have the same name as other class members: - Private objectSpace_Conflict As IObjectSpace + Private _ObjectSpace As IObjectSpace Protected ReadOnly Property ObjectSpace() As IObjectSpace Get - Return objectSpace_Conflict + Return _ObjectSpace End Get End Property Private Property IObjectSpaceLink_ObjectSpace() As IObjectSpace Implements IObjectSpaceLink.ObjectSpace Get - Return objectSpace_Conflict + Return _ObjectSpace End Get Set(ByVal value As IObjectSpace) - If objectSpace_Conflict IsNot value Then + If _ObjectSpace IsNot value Then OnObjectSpaceChanging() - objectSpace_Conflict = value + _ObjectSpace = value OnObjectSpaceChanged() End If End Set From f6a727a8b11a426287af48cadb98ea668f07f531 Mon Sep 17 00:00:00 2001 From: DevExpressExampleBot Date: Wed, 20 Jan 2021 02:48:19 +0300 Subject: [PATCH 18/40] Source auto update [skip ci] --- CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml | 4 ++-- VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml b/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml index f636e99..934775e 100644 --- a/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml +++ b/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml @@ -28,8 +28,8 @@ - - + + diff --git a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml index f636e99..934775e 100644 --- a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml +++ b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml @@ -28,8 +28,8 @@ - - + + From 2aecf689ab3631c0da4f37aa5f0c99724d0dc618 Mon Sep 17 00:00:00 2001 From: DevExpressExampleBot Date: Wed, 17 Mar 2021 02:55:36 +0300 Subject: [PATCH 19/40] Source auto update [skip ci] --- CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml | 4 ++-- VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml b/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml index 934775e..ccf5862 100644 --- a/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml +++ b/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml @@ -28,8 +28,8 @@ - - + + diff --git a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml index 934775e..ccf5862 100644 --- a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml +++ b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml @@ -28,8 +28,8 @@ - - + + From ed36b5f792c98c74aa12532ed770e1c7d57f54cd Mon Sep 17 00:00:00 2001 From: DevExpressExampleBot Date: Wed, 28 Apr 2021 07:06:05 +0300 Subject: [PATCH 20/40] Source auto update [skip ci] --- CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml | 4 ++-- VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml b/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml index ccf5862..7ec9d8c 100644 --- a/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml +++ b/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml @@ -28,8 +28,8 @@ - - + + diff --git a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml index ccf5862..7ec9d8c 100644 --- a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml +++ b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml @@ -28,8 +28,8 @@ - - + + From 11ebb11536e4971164d0ec20ab3bb9873118586a Mon Sep 17 00:00:00 2001 From: DevExpressExampleBot Date: Tue, 6 Jul 2021 19:59:09 +0300 Subject: [PATCH 21/40] Source auto update [skip ci] --- CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml | 4 ++-- VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml b/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml index 7ec9d8c..2474a13 100644 --- a/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml +++ b/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml @@ -28,8 +28,8 @@ - - + + diff --git a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml index 7ec9d8c..2474a13 100644 --- a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml +++ b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml @@ -28,8 +28,8 @@ - - + + From bd1fc2beb599e8ba4d639b9db4c7d97cfb1896b7 Mon Sep 17 00:00:00 2001 From: DevExpressExampleBot Date: Fri, 27 Aug 2021 09:40:31 +0300 Subject: [PATCH 22/40] README auto update [skip ci] --- readme.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/readme.md b/readme.md index 68b0d68..864d81c 100644 --- a/readme.md +++ b/readme.md @@ -1,3 +1,8 @@ + +![](https://img.shields.io/endpoint?url=https://codecentral.devexpress.com/api/v1/VersionRange/255626959/20.1.3%2B) +[![](https://img.shields.io/badge/Open_in_DevExpress_Support_Center-FF7200?style=flat-square&logo=DevExpress&logoColor=white)](https://supportcenter.devexpress.com/ticket/details/T952649) +[![](https://img.shields.io/badge/📖_How_to_use_DevExpress_Examples-e9f6fc?style=flat-square)](https://docs.devexpress.com/GeneralInformation/403183) + *Files to look at*: * [Contact.cs](./CS/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.cs) From 38e604ba8eba013d7a81781a002d7a472dee4d3c Mon Sep 17 00:00:00 2001 From: DevExpressExampleBot Date: Fri, 31 Dec 2021 07:25:35 +0300 Subject: [PATCH 23/40] Source auto update [skip ci] --- CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml | 4 ++-- VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml b/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml index 2474a13..b9c4923 100644 --- a/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml +++ b/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml @@ -28,8 +28,8 @@ - - + + diff --git a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml index 2474a13..b9c4923 100644 --- a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml +++ b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml @@ -28,8 +28,8 @@ - - + + From b5fc7a3f6e11c4a4864c15be849d558b7c905290 Mon Sep 17 00:00:00 2001 From: DevExpressExampleBot Date: Sat, 18 Jun 2022 09:56:26 +0400 Subject: [PATCH 24/40] Source auto update [skip ci] --- CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml | 4 ++-- VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml b/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml index b9c4923..9180560 100644 --- a/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml +++ b/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml @@ -28,8 +28,8 @@ - - + + diff --git a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml index b9c4923..9180560 100644 --- a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml +++ b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml @@ -28,8 +28,8 @@ - - + + From 4ab2cc66be9735d94f3460d8fe1e58798eb12fb0 Mon Sep 17 00:00:00 2001 From: DevExpressExampleBot Date: Wed, 26 Oct 2022 06:52:02 +0400 Subject: [PATCH 25/40] Source auto update [skip ci] --- CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml | 4 ++-- VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml b/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml index 9180560..aad4d8c 100644 --- a/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml +++ b/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml @@ -28,8 +28,8 @@ - - + + diff --git a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml index 9180560..aad4d8c 100644 --- a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml +++ b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml @@ -28,8 +28,8 @@ - - + + From 6462fbd1475e7b84ea32fa3c2fa31e736826d280 Mon Sep 17 00:00:00 2001 From: DevExpressExampleBot Date: Wed, 12 Apr 2023 20:38:23 +0400 Subject: [PATCH 26/40] Source auto update [skip ci] --- CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml | 4 ++-- VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml b/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml index aad4d8c..bf04ea6 100644 --- a/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml +++ b/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml @@ -28,8 +28,8 @@ - - + + diff --git a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml index aad4d8c..bf04ea6 100644 --- a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml +++ b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml @@ -28,8 +28,8 @@ - - + + From c54c4bace37b1489c9e383cd2905f23f56bd66b0 Mon Sep 17 00:00:00 2001 From: DevExpressExampleBot Date: Thu, 20 Apr 2023 17:37:09 +0400 Subject: [PATCH 27/40] README auto update [skip ci] --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 864d81c..1d3051c 100644 --- a/readme.md +++ b/readme.md @@ -1,5 +1,5 @@ -![](https://img.shields.io/endpoint?url=https://codecentral.devexpress.com/api/v1/VersionRange/255626959/20.1.3%2B) +![](https://img.shields.io/endpoint?url=https://codecentral.devexpress.com/api/v1/VersionRange/255626959/22.2.5%2B) [![](https://img.shields.io/badge/Open_in_DevExpress_Support_Center-FF7200?style=flat-square&logo=DevExpress&logoColor=white)](https://supportcenter.devexpress.com/ticket/details/T952649) [![](https://img.shields.io/badge/📖_How_to_use_DevExpress_Examples-e9f6fc?style=flat-square)](https://docs.devexpress.com/GeneralInformation/403183) From b07cce3a5fa8c65531a74f8bb019567c64cc128e Mon Sep 17 00:00:00 2001 From: andrey Date: Thu, 20 Apr 2023 18:00:56 +0400 Subject: [PATCH 28/40] XPO --- .editorconfig | 100 --- .gitignore | 1 + .../Controllers/ReadMe.txt | 19 - .../Editors/ReadMe.txt | 31 - .../Model.DesignedDiffs.xafml | 9 - ...NonPersistentObjectsDemo.Module.Web.csproj | 223 ------ .../Properties/AssemblyInfo.cs | 33 - .../ReadMe.txt | 28 - .../WebModule.Designer.cs | 41 -- .../WebModule.cs | 42 -- .../Controllers/ReadMe.txt | 19 - .../Model.DesignedDiffs.xafml | 2 - ...NonPersistentObjectsDemo.Module.Win.csproj | 260 ------- .../Properties/AssemblyInfo.cs | 33 - .../ReadMe.txt | 29 - .../WinModule.Designer.cs | 41 -- .../WinModule.cs | 42 -- .../BusinessObjects/ReadMe.txt | 11 - .../Controllers/ReadMe.txt | 19 - .../DatabaseUpdate/ReadMe.txt | 17 - .../DatabaseUpdate/Updater.cs | 81 --- .../FunctionalTests/ReadMe.txt | 10 - .../FunctionalTests/config.xml | 36 - .../FunctionalTests/sample.ets | 20 - .../Model.DesignedDiffs.xafml | 26 - .../Module.Designer.cs | 50 -- CS/NonPersistentObjectsDemo.Module/Module.cs | 52 -- .../NonPersistentObjectsDemo.Module.csproj | 182 ----- .../Properties/AssemblyInfo.cs | 33 - CS/NonPersistentObjectsDemo.Module/ReadMe.txt | 28 - CS/NonPersistentObjectsDemo.Module/Util.cs | 101 --- .../Welcome.html | 185 ----- CS/NonPersistentObjectsDemo.Web/Default.aspx | 19 - .../Default.aspx.cs | 18 - .../Default.aspx.designer.cs | 40 -- CS/NonPersistentObjectsDemo.Web/Error.aspx | 147 ---- CS/NonPersistentObjectsDemo.Web/Error.aspx.cs | 75 -- .../Error.aspx.designer.cs | 166 ----- CS/NonPersistentObjectsDemo.Web/Global.asax | 1 - .../Global.asax.cs | 75 -- .../Images/ReadMe.txt | 12 - CS/NonPersistentObjectsDemo.Web/Login.aspx | 24 - CS/NonPersistentObjectsDemo.Web/Login.aspx.cs | 12 - .../Login.aspx.designer.cs | 49 -- .../Model.Desktop.xafml | 3 - .../Model.Tablet.xafml | 3 - CS/NonPersistentObjectsDemo.Web/Model.xafml | 3 - .../NonPersistentObjectsDemo.Web.csproj | 376 ----------- .../Properties/AssemblyInfo.cs | 33 - CS/NonPersistentObjectsDemo.Web/ReadMe.txt | 31 - CS/NonPersistentObjectsDemo.Web/Web.config | 185 ----- .../WebApplication.cs | 175 ----- .../Images/ReadMe.txt | 12 - CS/NonPersistentObjectsDemo.Win/Model.xafml | 7 - .../NonPersistentObjectsDemo.Win.csproj | 349 ---------- CS/NonPersistentObjectsDemo.Win/Program.cs | 59 -- .../Properties/AssemblyInfo.cs | 33 - CS/NonPersistentObjectsDemo.Win/ReadMe.txt | 31 - .../WinApplication.Designer.cs | 127 ---- .../WinApplication.cs | 68 -- CS/NonPersistentObjectsFilteringDemo.sln | 60 -- .../App.razor | 11 + .../BlazorApplication.cs | 47 ++ .../BlazorModule.cs | 26 + .../Controllers/ReadMe.txt | 25 + .../Editors/ReadMe.txt | 25 + .../Images/ReadMe.txt | 0 .../Model.xafml | 7 + ...onPersistentFiltering.Blazor.Server.csproj | 26 + .../Pages/_Host.cshtml | 55 ++ .../Program.cs | 50 ++ .../Properties/launchSettings.json | 27 + .../ReadMe.txt | 40 ++ .../Services/CircuitHandlerProxy.cs | 23 + .../Services/ProxyHubConnectionHandler.cs | 27 + .../Startup.cs | 76 +++ .../_Imports.razor | 11 + .../appsettings.Development.json | 16 + .../appsettings.json | 52 ++ .../wwwroot/css/site.css | 31 + .../wwwroot/favicon.ico | Bin 0 -> 31444 bytes .../wwwroot/images}/Logo.svg | 0 .../wwwroot/images/SplashScreen.svg | 13 + .../BusinessObjects/Article.cs | 16 +- .../BusinessObjects/Contact.cs | 11 +- .../NonPersistentObjectBase.cs | 0 .../BusinessObjects/ReadMe.txt | 26 + .../Controllers/FindArticlesController.cs | 2 +- .../Controllers/ReadMe.txt | 25 + .../DatabaseUpdate/ReadMe.txt | 18 +- .../DatabaseUpdate/Updater.cs | 33 + .../Images/ReadMe.txt | 0 .../Model.DesignedDiffs.xafml | 5 + .../NonPersistentFiltering.Module/Module.cs | 51 ++ .../NonPersistentFiltering.Module.csproj | 25 + .../NonPersistentFiltering.Module/ReadMe.txt | 32 + .../Welcome.html | 191 ++++++ .../NonPersistentFiltering.Win}/App.config | 22 +- .../Controllers/ReadMe.txt | 25 + .../Editors/ReadMe.txt | 15 +- .../ExpressApp.ico | Bin .../Images/ExpressAppLogo.png | Bin .../Images/Logo.svg | 0 .../Images/ReadMe.txt | 0 .../NonPersistentFiltering.Win/Model.xafml | 4 + .../NonPersistentFiltering.Win.csproj | 43 ++ .../NonPersistentFiltering.Win/Program.cs | 80 +++ .../NonPersistentFiltering.Win/ReadMe.txt | 33 + .../NonPersistentFiltering.Win/Startup.cs | 40 ++ .../WinApplication.cs | 50 ++ .../NonPersistentFiltering.Win/WinModule.cs | 26 + .../XafSplashScreen.Designer.cs | 2 +- .../XafSplashScreen.cs | 5 +- .../XafSplashScreen.resx | 0 .../NonPersistentFiltering.sln | 41 ++ .../Controllers/ReadMe.txt | 19 - .../Editors/ReadMe.txt | 31 - .../Images/ReadMe.txt | 12 - .../Model.DesignedDiffs.xafml | 9 - .../My Project/AssemblyInfo.vb | 33 - ...NonPersistentObjectsDemo.Module.Web.vbproj | 243 ------- .../ReadMe.txt | 28 - .../WebModule.Designer.vb | 41 -- .../WebModule.vb | 44 -- .../Controllers/ReadMe.txt | 19 - .../Editors/ReadMe.txt | 33 - .../Images/ExpressAppLogo.png | Bin 7486 -> 0 bytes .../Images/ReadMe.txt | 12 - .../Model.DesignedDiffs.xafml | 2 - .../My Project/AssemblyInfo.vb | 33 - ...NonPersistentObjectsDemo.Module.Win.vbproj | 281 -------- .../ReadMe.txt | 29 - .../WinModule.Designer.vb | 41 -- .../WinModule.vb | 44 -- .../BusinessObjects/Article.vb | 107 --- .../BusinessObjects/Contact.vb | 144 ---- .../NonPersistentObjectBase.vb | 64 -- .../BusinessObjects/ReadMe.txt | 11 - .../Controllers/FindArticlesController.vb | 95 --- .../Controllers/ReadMe.txt | 19 - .../DatabaseUpdate/Updater.vb | 83 --- .../FunctionalTests/ReadMe.txt | 10 - .../FunctionalTests/config.xml | 36 - .../FunctionalTests/sample.ets | 20 - .../Images/ReadMe.txt | 12 - .../Model.DesignedDiffs.xafml | 26 - .../Module.Designer.vb | 50 -- VB/NonPersistentObjectsDemo.Module/Module.vb | 54 -- .../My Project/AssemblyInfo.vb | 33 - .../NonPersistentObjectsDemo.Module.vbproj | 202 ------ VB/NonPersistentObjectsDemo.Module/ReadMe.txt | 28 - VB/NonPersistentObjectsDemo.Module/Util.vb | 102 --- .../Welcome.html | 185 ----- VB/NonPersistentObjectsDemo.Web/Default.aspx | 19 - .../Default.aspx.designer.vb | 40 -- .../Default.aspx.vb | 20 - VB/NonPersistentObjectsDemo.Web/Error.aspx | 147 ---- .../Error.aspx.designer.vb | 166 ----- VB/NonPersistentObjectsDemo.Web/Error.aspx.vb | 77 --- VB/NonPersistentObjectsDemo.Web/Global.asax | 1 - .../Global.asax.vb | 77 --- .../Images/Logo.svg | 43 -- .../Images/ReadMe.txt | 12 - VB/NonPersistentObjectsDemo.Web/Login.aspx | 24 - .../Login.aspx.designer.vb | 49 -- VB/NonPersistentObjectsDemo.Web/Login.aspx.vb | 14 - .../Model.Desktop.xafml | 3 - .../Model.Tablet.xafml | 3 - VB/NonPersistentObjectsDemo.Web/Model.xafml | 3 - .../My Project/AssemblyInfo.vb | 33 - .../NonPersistentObjectsDemo.Web.vbproj | 396 ----------- VB/NonPersistentObjectsDemo.Web/ReadMe.txt | 31 - VB/NonPersistentObjectsDemo.Web/Web.config | 185 ----- .../WebApplication.vb | 172 ----- VB/NonPersistentObjectsDemo.Win/App.config | 46 -- .../ExpressApp.ico | Bin 113407 -> 0 bytes .../Images/Logo.svg | 18 - .../Images/ReadMe.txt | 12 - VB/NonPersistentObjectsDemo.Win/Model.xafml | 7 - .../My Project/AssemblyInfo.vb | 33 - .../NonPersistentObjectsDemo.Win.vbproj | 370 ---------- VB/NonPersistentObjectsDemo.Win/Program.vb | 58 -- VB/NonPersistentObjectsDemo.Win/ReadMe.txt | 31 - .../WinApplication.Designer.vb | 129 ---- .../WinApplication.vb | 65 -- .../XafSplashScreen.Designer.vb | 177 ----- .../XafSplashScreen.resx | 638 ------------------ .../XafSplashScreen.vb | 56 -- VB/NonPersistentObjectsFilteringDemo.sln | 59 -- 189 files changed, 1369 insertions(+), 9486 deletions(-) delete mode 100644 .editorconfig delete mode 100644 CS/NonPersistentObjectsDemo.Module.Web/Controllers/ReadMe.txt delete mode 100644 CS/NonPersistentObjectsDemo.Module.Web/Editors/ReadMe.txt delete mode 100644 CS/NonPersistentObjectsDemo.Module.Web/Model.DesignedDiffs.xafml delete mode 100644 CS/NonPersistentObjectsDemo.Module.Web/NonPersistentObjectsDemo.Module.Web.csproj delete mode 100644 CS/NonPersistentObjectsDemo.Module.Web/Properties/AssemblyInfo.cs delete mode 100644 CS/NonPersistentObjectsDemo.Module.Web/ReadMe.txt delete mode 100644 CS/NonPersistentObjectsDemo.Module.Web/WebModule.Designer.cs delete mode 100644 CS/NonPersistentObjectsDemo.Module.Web/WebModule.cs delete mode 100644 CS/NonPersistentObjectsDemo.Module.Win/Controllers/ReadMe.txt delete mode 100644 CS/NonPersistentObjectsDemo.Module.Win/Model.DesignedDiffs.xafml delete mode 100644 CS/NonPersistentObjectsDemo.Module.Win/NonPersistentObjectsDemo.Module.Win.csproj delete mode 100644 CS/NonPersistentObjectsDemo.Module.Win/Properties/AssemblyInfo.cs delete mode 100644 CS/NonPersistentObjectsDemo.Module.Win/ReadMe.txt delete mode 100644 CS/NonPersistentObjectsDemo.Module.Win/WinModule.Designer.cs delete mode 100644 CS/NonPersistentObjectsDemo.Module.Win/WinModule.cs delete mode 100644 CS/NonPersistentObjectsDemo.Module/BusinessObjects/ReadMe.txt delete mode 100644 CS/NonPersistentObjectsDemo.Module/Controllers/ReadMe.txt delete mode 100644 CS/NonPersistentObjectsDemo.Module/DatabaseUpdate/ReadMe.txt delete mode 100644 CS/NonPersistentObjectsDemo.Module/DatabaseUpdate/Updater.cs delete mode 100644 CS/NonPersistentObjectsDemo.Module/FunctionalTests/ReadMe.txt delete mode 100644 CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml delete mode 100644 CS/NonPersistentObjectsDemo.Module/FunctionalTests/sample.ets delete mode 100644 CS/NonPersistentObjectsDemo.Module/Model.DesignedDiffs.xafml delete mode 100644 CS/NonPersistentObjectsDemo.Module/Module.Designer.cs delete mode 100644 CS/NonPersistentObjectsDemo.Module/Module.cs delete mode 100644 CS/NonPersistentObjectsDemo.Module/NonPersistentObjectsDemo.Module.csproj delete mode 100644 CS/NonPersistentObjectsDemo.Module/Properties/AssemblyInfo.cs delete mode 100644 CS/NonPersistentObjectsDemo.Module/ReadMe.txt delete mode 100644 CS/NonPersistentObjectsDemo.Module/Util.cs delete mode 100644 CS/NonPersistentObjectsDemo.Module/Welcome.html delete mode 100644 CS/NonPersistentObjectsDemo.Web/Default.aspx delete mode 100644 CS/NonPersistentObjectsDemo.Web/Default.aspx.cs delete mode 100644 CS/NonPersistentObjectsDemo.Web/Default.aspx.designer.cs delete mode 100644 CS/NonPersistentObjectsDemo.Web/Error.aspx delete mode 100644 CS/NonPersistentObjectsDemo.Web/Error.aspx.cs delete mode 100644 CS/NonPersistentObjectsDemo.Web/Error.aspx.designer.cs delete mode 100644 CS/NonPersistentObjectsDemo.Web/Global.asax delete mode 100644 CS/NonPersistentObjectsDemo.Web/Global.asax.cs delete mode 100644 CS/NonPersistentObjectsDemo.Web/Images/ReadMe.txt delete mode 100644 CS/NonPersistentObjectsDemo.Web/Login.aspx delete mode 100644 CS/NonPersistentObjectsDemo.Web/Login.aspx.cs delete mode 100644 CS/NonPersistentObjectsDemo.Web/Login.aspx.designer.cs delete mode 100644 CS/NonPersistentObjectsDemo.Web/Model.Desktop.xafml delete mode 100644 CS/NonPersistentObjectsDemo.Web/Model.Tablet.xafml delete mode 100644 CS/NonPersistentObjectsDemo.Web/Model.xafml delete mode 100644 CS/NonPersistentObjectsDemo.Web/NonPersistentObjectsDemo.Web.csproj delete mode 100644 CS/NonPersistentObjectsDemo.Web/Properties/AssemblyInfo.cs delete mode 100644 CS/NonPersistentObjectsDemo.Web/ReadMe.txt delete mode 100644 CS/NonPersistentObjectsDemo.Web/Web.config delete mode 100644 CS/NonPersistentObjectsDemo.Web/WebApplication.cs delete mode 100644 CS/NonPersistentObjectsDemo.Win/Images/ReadMe.txt delete mode 100644 CS/NonPersistentObjectsDemo.Win/Model.xafml delete mode 100644 CS/NonPersistentObjectsDemo.Win/NonPersistentObjectsDemo.Win.csproj delete mode 100644 CS/NonPersistentObjectsDemo.Win/Program.cs delete mode 100644 CS/NonPersistentObjectsDemo.Win/Properties/AssemblyInfo.cs delete mode 100644 CS/NonPersistentObjectsDemo.Win/ReadMe.txt delete mode 100644 CS/NonPersistentObjectsDemo.Win/WinApplication.Designer.cs delete mode 100644 CS/NonPersistentObjectsDemo.Win/WinApplication.cs delete mode 100644 CS/NonPersistentObjectsFilteringDemo.sln create mode 100644 CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/App.razor create mode 100644 CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/BlazorApplication.cs create mode 100644 CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/BlazorModule.cs create mode 100644 CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Controllers/ReadMe.txt create mode 100644 CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Editors/ReadMe.txt rename CS/{NonPersistentObjectsDemo.Module.Web => XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server}/Images/ReadMe.txt (100%) create mode 100644 CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Model.xafml create mode 100644 CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/NonPersistentFiltering.Blazor.Server.csproj create mode 100644 CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Pages/_Host.cshtml create mode 100644 CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Program.cs create mode 100644 CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Properties/launchSettings.json create mode 100644 CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/ReadMe.txt create mode 100644 CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Services/CircuitHandlerProxy.cs create mode 100644 CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Services/ProxyHubConnectionHandler.cs create mode 100644 CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Startup.cs create mode 100644 CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/_Imports.razor create mode 100644 CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/appsettings.Development.json create mode 100644 CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/appsettings.json create mode 100644 CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/wwwroot/css/site.css create mode 100644 CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/wwwroot/favicon.ico rename CS/{NonPersistentObjectsDemo.Web/Images => XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/wwwroot/images}/Logo.svg (100%) create mode 100644 CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/wwwroot/images/SplashScreen.svg rename CS/{NonPersistentObjectsDemo.Module => XPO/NonPersistentFiltering/NonPersistentFiltering.Module}/BusinessObjects/Article.cs (87%) rename CS/{NonPersistentObjectsDemo.Module => XPO/NonPersistentFiltering/NonPersistentFiltering.Module}/BusinessObjects/Contact.cs (94%) rename CS/{NonPersistentObjectsDemo.Module => XPO/NonPersistentFiltering/NonPersistentFiltering.Module}/BusinessObjects/NonPersistentObjectBase.cs (100%) create mode 100644 CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/BusinessObjects/ReadMe.txt rename CS/{NonPersistentObjectsDemo.Module => XPO/NonPersistentFiltering/NonPersistentFiltering.Module}/Controllers/FindArticlesController.cs (98%) create mode 100644 CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/Controllers/ReadMe.txt rename {VB/NonPersistentObjectsDemo.Module => CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module}/DatabaseUpdate/ReadMe.txt (64%) create mode 100644 CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/DatabaseUpdate/Updater.cs rename CS/{NonPersistentObjectsDemo.Module.Win => XPO/NonPersistentFiltering/NonPersistentFiltering.Module}/Images/ReadMe.txt (100%) create mode 100644 CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/Model.DesignedDiffs.xafml create mode 100644 CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/Module.cs create mode 100644 CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/NonPersistentFiltering.Module.csproj create mode 100644 CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/ReadMe.txt create mode 100644 CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/Welcome.html rename CS/{NonPersistentObjectsDemo.Win => XPO/NonPersistentFiltering/NonPersistentFiltering.Win}/App.config (74%) create mode 100644 CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/Controllers/ReadMe.txt rename CS/{NonPersistentObjectsDemo.Module.Win => XPO/NonPersistentFiltering/NonPersistentFiltering.Win}/Editors/ReadMe.txt (73%) rename CS/{NonPersistentObjectsDemo.Win => XPO/NonPersistentFiltering/NonPersistentFiltering.Win}/ExpressApp.ico (100%) rename CS/{NonPersistentObjectsDemo.Module.Win => XPO/NonPersistentFiltering/NonPersistentFiltering.Win}/Images/ExpressAppLogo.png (100%) rename CS/{NonPersistentObjectsDemo.Win => XPO/NonPersistentFiltering/NonPersistentFiltering.Win}/Images/Logo.svg (100%) rename CS/{NonPersistentObjectsDemo.Module => XPO/NonPersistentFiltering/NonPersistentFiltering.Win}/Images/ReadMe.txt (100%) create mode 100644 CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/Model.xafml create mode 100644 CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/NonPersistentFiltering.Win.csproj create mode 100644 CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/Program.cs create mode 100644 CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/ReadMe.txt create mode 100644 CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/Startup.cs create mode 100644 CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/WinApplication.cs create mode 100644 CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/WinModule.cs rename CS/{NonPersistentObjectsDemo.Win => XPO/NonPersistentFiltering/NonPersistentFiltering.Win}/XafSplashScreen.Designer.cs (99%) rename CS/{NonPersistentObjectsDemo.Win => XPO/NonPersistentFiltering/NonPersistentFiltering.Win}/XafSplashScreen.cs (98%) rename CS/{NonPersistentObjectsDemo.Win => XPO/NonPersistentFiltering/NonPersistentFiltering.Win}/XafSplashScreen.resx (100%) create mode 100644 CS/XPO/NonPersistentFiltering/NonPersistentFiltering.sln delete mode 100644 VB/NonPersistentObjectsDemo.Module.Web/Controllers/ReadMe.txt delete mode 100644 VB/NonPersistentObjectsDemo.Module.Web/Editors/ReadMe.txt delete mode 100644 VB/NonPersistentObjectsDemo.Module.Web/Images/ReadMe.txt delete mode 100644 VB/NonPersistentObjectsDemo.Module.Web/Model.DesignedDiffs.xafml delete mode 100644 VB/NonPersistentObjectsDemo.Module.Web/My Project/AssemblyInfo.vb delete mode 100644 VB/NonPersistentObjectsDemo.Module.Web/NonPersistentObjectsDemo.Module.Web.vbproj delete mode 100644 VB/NonPersistentObjectsDemo.Module.Web/ReadMe.txt delete mode 100644 VB/NonPersistentObjectsDemo.Module.Web/WebModule.Designer.vb delete mode 100644 VB/NonPersistentObjectsDemo.Module.Web/WebModule.vb delete mode 100644 VB/NonPersistentObjectsDemo.Module.Win/Controllers/ReadMe.txt delete mode 100644 VB/NonPersistentObjectsDemo.Module.Win/Editors/ReadMe.txt delete mode 100644 VB/NonPersistentObjectsDemo.Module.Win/Images/ExpressAppLogo.png delete mode 100644 VB/NonPersistentObjectsDemo.Module.Win/Images/ReadMe.txt delete mode 100644 VB/NonPersistentObjectsDemo.Module.Win/Model.DesignedDiffs.xafml delete mode 100644 VB/NonPersistentObjectsDemo.Module.Win/My Project/AssemblyInfo.vb delete mode 100644 VB/NonPersistentObjectsDemo.Module.Win/NonPersistentObjectsDemo.Module.Win.vbproj delete mode 100644 VB/NonPersistentObjectsDemo.Module.Win/ReadMe.txt delete mode 100644 VB/NonPersistentObjectsDemo.Module.Win/WinModule.Designer.vb delete mode 100644 VB/NonPersistentObjectsDemo.Module.Win/WinModule.vb delete mode 100644 VB/NonPersistentObjectsDemo.Module/BusinessObjects/Article.vb delete mode 100644 VB/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.vb delete mode 100644 VB/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.vb delete mode 100644 VB/NonPersistentObjectsDemo.Module/BusinessObjects/ReadMe.txt delete mode 100644 VB/NonPersistentObjectsDemo.Module/Controllers/FindArticlesController.vb delete mode 100644 VB/NonPersistentObjectsDemo.Module/Controllers/ReadMe.txt delete mode 100644 VB/NonPersistentObjectsDemo.Module/DatabaseUpdate/Updater.vb delete mode 100644 VB/NonPersistentObjectsDemo.Module/FunctionalTests/ReadMe.txt delete mode 100644 VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml delete mode 100644 VB/NonPersistentObjectsDemo.Module/FunctionalTests/sample.ets delete mode 100644 VB/NonPersistentObjectsDemo.Module/Images/ReadMe.txt delete mode 100644 VB/NonPersistentObjectsDemo.Module/Model.DesignedDiffs.xafml delete mode 100644 VB/NonPersistentObjectsDemo.Module/Module.Designer.vb delete mode 100644 VB/NonPersistentObjectsDemo.Module/Module.vb delete mode 100644 VB/NonPersistentObjectsDemo.Module/My Project/AssemblyInfo.vb delete mode 100644 VB/NonPersistentObjectsDemo.Module/NonPersistentObjectsDemo.Module.vbproj delete mode 100644 VB/NonPersistentObjectsDemo.Module/ReadMe.txt delete mode 100644 VB/NonPersistentObjectsDemo.Module/Util.vb delete mode 100644 VB/NonPersistentObjectsDemo.Module/Welcome.html delete mode 100644 VB/NonPersistentObjectsDemo.Web/Default.aspx delete mode 100644 VB/NonPersistentObjectsDemo.Web/Default.aspx.designer.vb delete mode 100644 VB/NonPersistentObjectsDemo.Web/Default.aspx.vb delete mode 100644 VB/NonPersistentObjectsDemo.Web/Error.aspx delete mode 100644 VB/NonPersistentObjectsDemo.Web/Error.aspx.designer.vb delete mode 100644 VB/NonPersistentObjectsDemo.Web/Error.aspx.vb delete mode 100644 VB/NonPersistentObjectsDemo.Web/Global.asax delete mode 100644 VB/NonPersistentObjectsDemo.Web/Global.asax.vb delete mode 100644 VB/NonPersistentObjectsDemo.Web/Images/Logo.svg delete mode 100644 VB/NonPersistentObjectsDemo.Web/Images/ReadMe.txt delete mode 100644 VB/NonPersistentObjectsDemo.Web/Login.aspx delete mode 100644 VB/NonPersistentObjectsDemo.Web/Login.aspx.designer.vb delete mode 100644 VB/NonPersistentObjectsDemo.Web/Login.aspx.vb delete mode 100644 VB/NonPersistentObjectsDemo.Web/Model.Desktop.xafml delete mode 100644 VB/NonPersistentObjectsDemo.Web/Model.Tablet.xafml delete mode 100644 VB/NonPersistentObjectsDemo.Web/Model.xafml delete mode 100644 VB/NonPersistentObjectsDemo.Web/My Project/AssemblyInfo.vb delete mode 100644 VB/NonPersistentObjectsDemo.Web/NonPersistentObjectsDemo.Web.vbproj delete mode 100644 VB/NonPersistentObjectsDemo.Web/ReadMe.txt delete mode 100644 VB/NonPersistentObjectsDemo.Web/Web.config delete mode 100644 VB/NonPersistentObjectsDemo.Web/WebApplication.vb delete mode 100644 VB/NonPersistentObjectsDemo.Win/App.config delete mode 100644 VB/NonPersistentObjectsDemo.Win/ExpressApp.ico delete mode 100644 VB/NonPersistentObjectsDemo.Win/Images/Logo.svg delete mode 100644 VB/NonPersistentObjectsDemo.Win/Images/ReadMe.txt delete mode 100644 VB/NonPersistentObjectsDemo.Win/Model.xafml delete mode 100644 VB/NonPersistentObjectsDemo.Win/My Project/AssemblyInfo.vb delete mode 100644 VB/NonPersistentObjectsDemo.Win/NonPersistentObjectsDemo.Win.vbproj delete mode 100644 VB/NonPersistentObjectsDemo.Win/Program.vb delete mode 100644 VB/NonPersistentObjectsDemo.Win/ReadMe.txt delete mode 100644 VB/NonPersistentObjectsDemo.Win/WinApplication.Designer.vb delete mode 100644 VB/NonPersistentObjectsDemo.Win/WinApplication.vb delete mode 100644 VB/NonPersistentObjectsDemo.Win/XafSplashScreen.Designer.vb delete mode 100644 VB/NonPersistentObjectsDemo.Win/XafSplashScreen.resx delete mode 100644 VB/NonPersistentObjectsDemo.Win/XafSplashScreen.vb delete mode 100644 VB/NonPersistentObjectsFilteringDemo.sln diff --git a/.editorconfig b/.editorconfig deleted file mode 100644 index 731dfee..0000000 --- a/.editorconfig +++ /dev/null @@ -1,100 +0,0 @@ -# To learn more about .editorconfig see https://aka.ms/editorconfigdocs -root = true -[*.cs] -charset = utf-8-bom -indent_style = space -indent_size = 4 -trim_trailing_whitespace = true -end_of_line = crlf -insert_final_newline = true -# Organize usings -dotnet_sort_system_directives_first = true -# this. preferences -dotnet_style_qualification_for_field = false:silent -dotnet_style_qualification_for_property = false:silent -dotnet_style_qualification_for_method = false:silent -dotnet_style_qualification_for_event = false:silent -# Language keywords vs BCL types preferences -dotnet_style_predefined_type_for_locals_parameters_members = true:silent -dotnet_style_predefined_type_for_member_access = true:silent -# Parentheses preferences -dotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:silent -dotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:silent -dotnet_style_parentheses_in_other_binary_operators = always_for_clarity:silent -dotnet_style_parentheses_in_other_operators = never_if_unnecessary:silent -# Modifier preferences -dotnet_style_require_accessibility_modifiers = for_non_interface_members:silent -dotnet_style_readonly_field = true:suggestion -# Expression-level preferences -dotnet_style_object_initializer = true:silent -dotnet_style_collection_initializer = true:silent -dotnet_style_explicit_tuple_names = true:suggestion -dotnet_style_null_propagation = true:silent -dotnet_style_coalesce_expression = true:suggestion -dotnet_style_prefer_is_null_check_over_reference_equality_method = true:silent -dotnet_style_prefer_inferred_tuple_names = true:silent -dotnet_style_prefer_inferred_anonymous_type_member_names = true:silent -dotnet_style_prefer_auto_properties = true:silent -dotnet_style_prefer_conditional_expression_over_assignment = true:silent -dotnet_style_prefer_conditional_expression_over_return = true:silent -# Style Definitions -dotnet_naming_style.pascal_case_style.capitalization = pascal_case -# Use PascalCase for constant fields -dotnet_naming_rule.constant_fields_should_be_pascal_case.severity = suggestion -dotnet_naming_rule.constant_fields_should_be_pascal_case.symbols = constant_fields -dotnet_naming_rule.constant_fields_should_be_pascal_case.style = pascal_case_style -dotnet_naming_symbols.constant_fields.applicable_kinds = field -dotnet_naming_symbols.constant_fields.applicable_accessibilities = * -dotnet_naming_symbols.constant_fields.required_modifiers = const -# var preferences -csharp_style_var_for_built_in_types = false:silent -csharp_style_var_when_type_is_apparent = false:silent -csharp_style_var_elsewhere = false:silent -# Expression-bodied members -csharp_style_expression_bodied_methods = false:silent -csharp_style_expression_bodied_constructors = false:silent -csharp_style_expression_bodied_operators = false:silent -csharp_style_expression_bodied_properties = false:silent -csharp_style_expression_bodied_indexers = false:silent -csharp_style_expression_bodied_accessors = false:silent -# Pattern matching preferences -csharp_style_pattern_matching_over_is_with_cast_check = true:silent -csharp_style_pattern_matching_over_as_with_null_check = true:silent -# Null-checking preferences -csharp_style_throw_expression = true:silent -csharp_style_conditional_delegate_call = true:silent -# Modifier preferences -csharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:suggestion -# Expression-level preferences -csharp_prefer_braces = true:suggestion -csharp_style_deconstructed_variable_declaration = true:silent -csharp_prefer_simple_default_expression = true:silent -csharp_style_pattern_local_over_anonymous_function = true:silent -csharp_style_inlined_variable_declaration = true:silent -# New line preferences -csharp_new_line_before_open_brace = none -csharp_new_line_before_else = true -csharp_new_line_before_catch = true -csharp_new_line_before_finally = true -csharp_new_line_before_members_in_object_initializers = true -csharp_new_line_before_members_in_anonymous_types = true -csharp_new_line_between_query_expression_clauses = true -# Indentation preferences -csharp_indent_case_contents = true -csharp_indent_switch_labels = true -csharp_indent_labels = flush_left -# Space preferences -csharp_space_after_cast = false -csharp_space_after_keywords_in_control_flow_statements = false -csharp_space_between_method_call_parameter_list_parentheses = false -csharp_space_between_method_declaration_parameter_list_parentheses = false -csharp_space_between_parentheses = false -csharp_space_before_colon_in_inheritance_clause = true -csharp_space_after_colon_in_inheritance_clause = true -csharp_space_around_binary_operators = before_and_after -csharp_space_between_method_declaration_empty_parameter_list_parentheses = false -csharp_space_between_method_call_name_and_opening_parenthesis = false -csharp_space_between_method_call_empty_parameter_list_parentheses = false -# Wrapping preferences -csharp_preserve_single_line_statements = false -csharp_preserve_single_line_blocks = true diff --git a/.gitignore b/.gitignore index 12a2548..5bb757a 100644 --- a/.gitignore +++ b/.gitignore @@ -29,6 +29,7 @@ bld/ [Bb]in/ [Oo]bj/ [Ll]og/ +CSOld/ # Visual Studio 2015/2017 cache/options directory .vs/ diff --git a/CS/NonPersistentObjectsDemo.Module.Web/Controllers/ReadMe.txt b/CS/NonPersistentObjectsDemo.Module.Web/Controllers/ReadMe.txt deleted file mode 100644 index 0ee4668..0000000 --- a/CS/NonPersistentObjectsDemo.Module.Web/Controllers/ReadMe.txt +++ /dev/null @@ -1,19 +0,0 @@ -Folder Description - -The "Controllers" project folder is intended for storing ASP.NET-specific Controller classes -that can change the default XAF application flow and add new features. - - -Relevant Documentation - -Controllers and Actions -https://docs.devexpress.com/eXpressAppFramework/112623 - -Controller Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Controller - -ViewController Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ViewController - -WindowController Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.WindowController diff --git a/CS/NonPersistentObjectsDemo.Module.Web/Editors/ReadMe.txt b/CS/NonPersistentObjectsDemo.Module.Web/Editors/ReadMe.txt deleted file mode 100644 index 461813c..0000000 --- a/CS/NonPersistentObjectsDemo.Module.Web/Editors/ReadMe.txt +++ /dev/null @@ -1,31 +0,0 @@ -Folder Description - -This project folder is intended for storing custom ASP.NET List Editors, -Property Editors and View Items. - - -Relevant Documentation - -List Editors -https://docs.devexpress.com/eXpressAppFramework/113189 - -Implement Custom Property Editors -https://docs.devexpress.com/eXpressAppFramework/113097 - -View Items -https://docs.devexpress.com/eXpressAppFramework/112612 - -How to: Implement an ASP.NET Web List Editor Using a Custom Control -https://docs.devexpress.com/eXpressAppFramework/113126 - -How to: Implement a Property Editor (in ASP.NET Applications) -https://docs.devexpress.com/eXpressAppFramework/112678 - -How to: Implement a Property Editor for Specific Data Management (in ASP.NET Web Applications) -https://docs.devexpress.com/eXpressAppFramework/113116 - -How to: Customize a Built-in Web Property Editor -https://docs.devexpress.com/eXpressAppFramework/113114 - -How to: Implement a View Item -https://docs.devexpress.com/eXpressAppFramework/112641 \ No newline at end of file diff --git a/CS/NonPersistentObjectsDemo.Module.Web/Model.DesignedDiffs.xafml b/CS/NonPersistentObjectsDemo.Module.Web/Model.DesignedDiffs.xafml deleted file mode 100644 index b3b40cf..0000000 --- a/CS/NonPersistentObjectsDemo.Module.Web/Model.DesignedDiffs.xafml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/CS/NonPersistentObjectsDemo.Module.Web/NonPersistentObjectsDemo.Module.Web.csproj b/CS/NonPersistentObjectsDemo.Module.Web/NonPersistentObjectsDemo.Module.Web.csproj deleted file mode 100644 index ee44fba..0000000 --- a/CS/NonPersistentObjectsDemo.Module.Web/NonPersistentObjectsDemo.Module.Web.csproj +++ /dev/null @@ -1,223 +0,0 @@ - - - - - Debug - AnyCPU - {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B} - Library - Properties - NonPersistentObjectsDemo.Module.Web - NonPersistentObjectsDemo.Module.Web - v4.5.2 - 512 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - true - bin\EasyTest\ - TRACE;DEBUG;EASYTEST - full - AnyCPU - prompt - - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - - - Component - - - - WebModule.cs - - - - - - - - - - - - - - - - - - {57ACDBDB-006E-43D3-9308-97857F2FF75D} - NonPersistentObjectsDemo.Module - True - - - - - diff --git a/CS/NonPersistentObjectsDemo.Module.Web/Properties/AssemblyInfo.cs b/CS/NonPersistentObjectsDemo.Module.Web/Properties/AssemblyInfo.cs deleted file mode 100644 index 5d5c9d6..0000000 --- a/CS/NonPersistentObjectsDemo.Module.Web/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("NonPersistentObjectsDemo.Module.Web")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("NonPersistentObjectsDemo.Module.Web")] -[assembly: AssemblyCopyright("Copyright © 2020")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("720e2161-0047-4cfe-a68c-433063a3ae53")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -[assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/CS/NonPersistentObjectsDemo.Module.Web/ReadMe.txt b/CS/NonPersistentObjectsDemo.Module.Web/ReadMe.txt deleted file mode 100644 index 853a0d9..0000000 --- a/CS/NonPersistentObjectsDemo.Module.Web/ReadMe.txt +++ /dev/null @@ -1,28 +0,0 @@ -Project Description - -This project implements an ASP.NET Module. Platform-specific application elements -can be implemented here (Controllers, Editors & View Items, etc.). The root project -folder contains the WebModule.cs(vb) file with the class that inherits ModuleBase. -This class can be designed with the Module Designer that allows you to view and -customize Module components: referenced modules, Controllers and business classes. -Additionally, the root folder contains Application Model difference files -(XAFML files) that keep application settings specific for the current Module. -Differences files can be designed with the Model Editor. - - -Relevant Documentation - -Application Solution Components -https://docs.devexpress.com/eXpressAppFramework/112569 - -ModuleBase Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase - -Module Designer -https://docs.devexpress.com/eXpressAppFramework/112828 - -Application Model -https://docs.devexpress.com/eXpressAppFramework/112579 - -Model Editor -https://docs.devexpress.com/eXpressAppFramework/112582 \ No newline at end of file diff --git a/CS/NonPersistentObjectsDemo.Module.Web/WebModule.Designer.cs b/CS/NonPersistentObjectsDemo.Module.Web/WebModule.Designer.cs deleted file mode 100644 index 3c7c48d..0000000 --- a/CS/NonPersistentObjectsDemo.Module.Web/WebModule.Designer.cs +++ /dev/null @@ -1,41 +0,0 @@ -namespace NonPersistentObjectsDemo.Module.Web { - partial class NonPersistentObjectsDemoAspNetModule { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) { - if(disposing && (components != null)) { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() { - // - // NonPersistentObjectsDemoAspNetModule - // - this.RequiredModuleTypes.Add(typeof(NonPersistentObjectsDemo.Module.NonPersistentObjectsDemoModule)); - this.RequiredModuleTypes.Add(typeof(DevExpress.ExpressApp.Web.SystemModule.SystemAspNetModule)); - this.RequiredModuleTypes.Add(typeof(DevExpress.ExpressApp.FileAttachments.Web.FileAttachmentsAspNetModule)); - this.RequiredModuleTypes.Add(typeof(DevExpress.ExpressApp.ReportsV2.Web.ReportsAspNetModuleV2)); - this.RequiredModuleTypes.Add(typeof(DevExpress.ExpressApp.Scheduler.Web.SchedulerAspNetModule)); - this.RequiredModuleTypes.Add(typeof(DevExpress.ExpressApp.ScriptRecorder.Web.ScriptRecorderAspNetModule)); - this.RequiredModuleTypes.Add(typeof(DevExpress.ExpressApp.TreeListEditors.Web.TreeListEditorsAspNetModule)); - this.RequiredModuleTypes.Add(typeof(DevExpress.ExpressApp.Validation.Web.ValidationAspNetModule)); - } - - #endregion - } -} \ No newline at end of file diff --git a/CS/NonPersistentObjectsDemo.Module.Web/WebModule.cs b/CS/NonPersistentObjectsDemo.Module.Web/WebModule.cs deleted file mode 100644 index fe3e181..0000000 --- a/CS/NonPersistentObjectsDemo.Module.Web/WebModule.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; -using System.Linq; -using System.Text; -using System.ComponentModel; -using DevExpress.ExpressApp; -using DevExpress.ExpressApp.DC; -using System.Collections.Generic; -using DevExpress.ExpressApp.Model; -using DevExpress.ExpressApp.Editors; -using DevExpress.ExpressApp.Actions; -using DevExpress.ExpressApp.Updating; -using DevExpress.ExpressApp.Model.Core; -using DevExpress.ExpressApp.Model.DomainLogics; -using DevExpress.ExpressApp.Model.NodeGenerators; -using DevExpress.Persistent.BaseImpl; - -namespace NonPersistentObjectsDemo.Module.Web { - [ToolboxItemFilter("Xaf.Platform.Web")] - // For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase. - public sealed partial class NonPersistentObjectsDemoAspNetModule : ModuleBase { - //private void Application_CreateCustomModelDifferenceStore(Object sender, CreateCustomModelDifferenceStoreEventArgs e) { - // e.Store = new ModelDifferenceDbStore((XafApplication)sender, typeof(ModelDifference), true, "Web"); - // e.Handled = true; - //} - private void Application_CreateCustomUserModelDifferenceStore(Object sender, CreateCustomModelDifferenceStoreEventArgs e) { - e.Store = new ModelDifferenceDbStore((XafApplication)sender, typeof(ModelDifference), false, "Web"); - e.Handled = true; - } - public NonPersistentObjectsDemoAspNetModule() { - InitializeComponent(); - } - public override IEnumerable GetModuleUpdaters(IObjectSpace objectSpace, Version versionFromDB) { - return ModuleUpdater.EmptyModuleUpdaters; - } - public override void Setup(XafApplication application) { - base.Setup(application); - //application.CreateCustomModelDifferenceStore += Application_CreateCustomModelDifferenceStore; - application.CreateCustomUserModelDifferenceStore += Application_CreateCustomUserModelDifferenceStore; - // Manage various aspects of the application UI and behavior at the module level. - } - } -} diff --git a/CS/NonPersistentObjectsDemo.Module.Win/Controllers/ReadMe.txt b/CS/NonPersistentObjectsDemo.Module.Win/Controllers/ReadMe.txt deleted file mode 100644 index b9c5dc3..0000000 --- a/CS/NonPersistentObjectsDemo.Module.Win/Controllers/ReadMe.txt +++ /dev/null @@ -1,19 +0,0 @@ -Folder Description - -The "Controllers" project folder is intended for storing platform-agnostic Controller classes -that can change the default XAF application flow and add new features. - - -Relevant Documentation - -Controllers and Actions -https://docs.devexpress.com/eXpressAppFramework/112623 - -Controller Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Controller - -ViewController Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ViewController - -WindowController Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.WindowController diff --git a/CS/NonPersistentObjectsDemo.Module.Win/Model.DesignedDiffs.xafml b/CS/NonPersistentObjectsDemo.Module.Win/Model.DesignedDiffs.xafml deleted file mode 100644 index d5e5a36..0000000 --- a/CS/NonPersistentObjectsDemo.Module.Win/Model.DesignedDiffs.xafml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/CS/NonPersistentObjectsDemo.Module.Win/NonPersistentObjectsDemo.Module.Win.csproj b/CS/NonPersistentObjectsDemo.Module.Win/NonPersistentObjectsDemo.Module.Win.csproj deleted file mode 100644 index f17ccb1..0000000 --- a/CS/NonPersistentObjectsDemo.Module.Win/NonPersistentObjectsDemo.Module.Win.csproj +++ /dev/null @@ -1,260 +0,0 @@ - - - - - Debug - AnyCPU - {72D644CD-C193-4572-B2E3-CA82819A1627} - Library - Properties - NonPersistentObjectsDemo.Module.Win - NonPersistentObjectsDemo.Module.Win - v4.5.2 - 512 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - true - bin\EasyTest\ - TRACE;DEBUG;EASYTEST - full - AnyCPU - prompt - - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - System - False - - - False - - - System.Data - False - - - System.Drawing - False - - - System.Windows.Forms - False - - - System.XML - False - - - - - - Component - - - WinModule.cs - - - - - - - - - - - - - - - - - - - - - - - {57ACDBDB-006E-43D3-9308-97857F2FF75D} - NonPersistentObjectsDemo.Module - True - - - - - diff --git a/CS/NonPersistentObjectsDemo.Module.Win/Properties/AssemblyInfo.cs b/CS/NonPersistentObjectsDemo.Module.Win/Properties/AssemblyInfo.cs deleted file mode 100644 index e91e305..0000000 --- a/CS/NonPersistentObjectsDemo.Module.Win/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("NonPersistentObjectsDemo.Module.Win")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("NonPersistentObjectsDemo.Module.Win")] -[assembly: AssemblyCopyright("Copyright © 2020")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("720e2161-0047-4cfe-a68c-433063a3ae53")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -[assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/CS/NonPersistentObjectsDemo.Module.Win/ReadMe.txt b/CS/NonPersistentObjectsDemo.Module.Win/ReadMe.txt deleted file mode 100644 index 17056ef..0000000 --- a/CS/NonPersistentObjectsDemo.Module.Win/ReadMe.txt +++ /dev/null @@ -1,29 +0,0 @@ -Project Description - -This project implements a WinForms Module. Platform-specific application -elements can be implemented here (Controllers, Editors & View Items, etc.). -The root project folder contains the WinModule.cs(vb) file with the class that -inherits ModuleBase. This class can be designed with the Module Designer that -allows you to view and customize Module components: referenced modules, -Controllers and business classes. Additionally, the root folder contains -Application Model difference files (XAFML files) that keep application -settings specific for the current Module. Differences files can be designed -with the Model Editor. - - -Relevant Documentation - -Application Solution Components -https://docs.devexpress.com/eXpressAppFramework/112569 - -ModuleBase Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase - -Module Designer -https://docs.devexpress.com/eXpressAppFramework/112828 - -Application Model -https://docs.devexpress.com/eXpressAppFramework/112579 - -Model Editor -https://docs.devexpress.com/eXpressAppFramework/112582 diff --git a/CS/NonPersistentObjectsDemo.Module.Win/WinModule.Designer.cs b/CS/NonPersistentObjectsDemo.Module.Win/WinModule.Designer.cs deleted file mode 100644 index e407aed..0000000 --- a/CS/NonPersistentObjectsDemo.Module.Win/WinModule.Designer.cs +++ /dev/null @@ -1,41 +0,0 @@ -namespace NonPersistentObjectsDemo.Module.Win { - partial class NonPersistentObjectsDemoWindowsFormsModule { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) { - if(disposing && (components != null)) { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() { - // - // NonPersistentObjectsDemoWindowsFormsModule - // - this.RequiredModuleTypes.Add(typeof(NonPersistentObjectsDemo.Module.NonPersistentObjectsDemoModule)); - this.RequiredModuleTypes.Add(typeof(DevExpress.ExpressApp.Win.SystemModule.SystemWindowsFormsModule)); - this.RequiredModuleTypes.Add(typeof(DevExpress.ExpressApp.FileAttachments.Win.FileAttachmentsWindowsFormsModule)); - this.RequiredModuleTypes.Add(typeof(DevExpress.ExpressApp.ReportsV2.Win.ReportsWindowsFormsModuleV2)); - this.RequiredModuleTypes.Add(typeof(DevExpress.ExpressApp.Scheduler.Win.SchedulerWindowsFormsModule)); - this.RequiredModuleTypes.Add(typeof(DevExpress.ExpressApp.ScriptRecorder.Win.ScriptRecorderWindowsFormsModule)); - this.RequiredModuleTypes.Add(typeof(DevExpress.ExpressApp.TreeListEditors.Win.TreeListEditorsWindowsFormsModule)); - this.RequiredModuleTypes.Add(typeof(DevExpress.ExpressApp.Validation.Win.ValidationWindowsFormsModule)); - } - - #endregion - } -} \ No newline at end of file diff --git a/CS/NonPersistentObjectsDemo.Module.Win/WinModule.cs b/CS/NonPersistentObjectsDemo.Module.Win/WinModule.cs deleted file mode 100644 index e187371..0000000 --- a/CS/NonPersistentObjectsDemo.Module.Win/WinModule.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; -using System.Linq; -using System.Text; -using System.ComponentModel; -using DevExpress.ExpressApp; -using DevExpress.ExpressApp.DC; -using System.Collections.Generic; -using DevExpress.ExpressApp.Model; -using DevExpress.ExpressApp.Editors; -using DevExpress.ExpressApp.Actions; -using DevExpress.ExpressApp.Updating; -using DevExpress.ExpressApp.Model.Core; -using DevExpress.ExpressApp.Model.DomainLogics; -using DevExpress.ExpressApp.Model.NodeGenerators; -using DevExpress.Persistent.BaseImpl; - -namespace NonPersistentObjectsDemo.Module.Win { - [ToolboxItemFilter("Xaf.Platform.Win")] - // For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase. - public sealed partial class NonPersistentObjectsDemoWindowsFormsModule : ModuleBase { - //private void Application_CreateCustomModelDifferenceStore(Object sender, CreateCustomModelDifferenceStoreEventArgs e) { - // e.Store = new ModelDifferenceDbStore((XafApplication)sender, typeof(ModelDifference), true, "Win"); - // e.Handled = true; - //} - private void Application_CreateCustomUserModelDifferenceStore(Object sender, CreateCustomModelDifferenceStoreEventArgs e) { - e.Store = new ModelDifferenceDbStore((XafApplication)sender, typeof(ModelDifference), false, "Win"); - e.Handled = true; - } - public NonPersistentObjectsDemoWindowsFormsModule() { - InitializeComponent(); - } - public override IEnumerable GetModuleUpdaters(IObjectSpace objectSpace, Version versionFromDB) { - return ModuleUpdater.EmptyModuleUpdaters; - } - public override void Setup(XafApplication application) { - base.Setup(application); - //application.CreateCustomModelDifferenceStore += Application_CreateCustomModelDifferenceStore; - application.CreateCustomUserModelDifferenceStore += Application_CreateCustomUserModelDifferenceStore; - // Manage various aspects of the application UI and behavior at the module level. - } - } -} diff --git a/CS/NonPersistentObjectsDemo.Module/BusinessObjects/ReadMe.txt b/CS/NonPersistentObjectsDemo.Module/BusinessObjects/ReadMe.txt deleted file mode 100644 index 09595b9..0000000 --- a/CS/NonPersistentObjectsDemo.Module/BusinessObjects/ReadMe.txt +++ /dev/null @@ -1,11 +0,0 @@ -Folder Description - -The "BusinessObjects" project folder is intended for storing the business objects -code. In XAF, a business object can be implemented as a base persistent class -descendant and as Domain Component interfaces. - -Relevant Documentation - -Business Model Design -https://docs.devexpress.com/eXpressAppFramework/112600 - diff --git a/CS/NonPersistentObjectsDemo.Module/Controllers/ReadMe.txt b/CS/NonPersistentObjectsDemo.Module/Controllers/ReadMe.txt deleted file mode 100644 index b9c5dc3..0000000 --- a/CS/NonPersistentObjectsDemo.Module/Controllers/ReadMe.txt +++ /dev/null @@ -1,19 +0,0 @@ -Folder Description - -The "Controllers" project folder is intended for storing platform-agnostic Controller classes -that can change the default XAF application flow and add new features. - - -Relevant Documentation - -Controllers and Actions -https://docs.devexpress.com/eXpressAppFramework/112623 - -Controller Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Controller - -ViewController Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ViewController - -WindowController Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.WindowController diff --git a/CS/NonPersistentObjectsDemo.Module/DatabaseUpdate/ReadMe.txt b/CS/NonPersistentObjectsDemo.Module/DatabaseUpdate/ReadMe.txt deleted file mode 100644 index 31da2b7..0000000 --- a/CS/NonPersistentObjectsDemo.Module/DatabaseUpdate/ReadMe.txt +++ /dev/null @@ -1,17 +0,0 @@ -Folder Description - -The "DatabaseUpdate" project folder is intended for storing code that supplies -initial data (default User objects, etc) and handles a database update when the -application version changes. - - -Relevant Documentation - -Supply Initial Data -https://docs.devexpress.com/eXpressAppFramework/112788 - -How to: Update the Database Structure after the Persistent Class or Property Was Renamed or Removed -https://docs.devexpress.com/eXpressAppFramework/113254 - -ModuleUpdater Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Updating.ModuleUpdater diff --git a/CS/NonPersistentObjectsDemo.Module/DatabaseUpdate/Updater.cs b/CS/NonPersistentObjectsDemo.Module/DatabaseUpdate/Updater.cs deleted file mode 100644 index 1b13791..0000000 --- a/CS/NonPersistentObjectsDemo.Module/DatabaseUpdate/Updater.cs +++ /dev/null @@ -1,81 +0,0 @@ -using System; -using System.Linq; -using DevExpress.ExpressApp; -using DevExpress.Data.Filtering; -using DevExpress.Persistent.Base; -using DevExpress.ExpressApp.Updating; -using DevExpress.ExpressApp.Security; -using DevExpress.ExpressApp.SystemModule; -using DevExpress.ExpressApp.Security.Strategy; -using DevExpress.Xpo; -using DevExpress.ExpressApp.Xpo; -using DevExpress.Persistent.BaseImpl; -using DevExpress.Persistent.BaseImpl.PermissionPolicy; - -namespace NonPersistentObjectsDemo.Module.DatabaseUpdate { - // For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Updating.ModuleUpdater - public class Updater : ModuleUpdater { - public Updater(IObjectSpace objectSpace, Version currentDBVersion) : - base(objectSpace, currentDBVersion) { - } - public override void UpdateDatabaseAfterUpdateSchema() { - base.UpdateDatabaseAfterUpdateSchema(); - //CreateSecurityObjects(); - } - - #region Security - private void CreateSecurityObjects() { - PermissionPolicyUser sampleUser = ObjectSpace.FindObject(new BinaryOperator("UserName", "User")); - if(sampleUser == null) { - sampleUser = ObjectSpace.CreateObject(); - sampleUser.UserName = "User"; - sampleUser.SetPassword(""); - } - PermissionPolicyRole defaultRole = CreateDefaultRole(); - sampleUser.Roles.Add(defaultRole); - - PermissionPolicyUser userAdmin = ObjectSpace.FindObject(new BinaryOperator("UserName", "Admin")); - if(userAdmin == null) { - userAdmin = ObjectSpace.CreateObject(); - userAdmin.UserName = "Admin"; - // Set a password if the standard authentication type is used - userAdmin.SetPassword(""); - } - // If a role with the Administrators name doesn't exist in the database, create this role - PermissionPolicyRole adminRole = ObjectSpace.FindObject(new BinaryOperator("Name", "Administrators")); - if(adminRole == null) { - adminRole = ObjectSpace.CreateObject(); - adminRole.Name = "Administrators"; - } - adminRole.IsAdministrative = true; - userAdmin.Roles.Add(adminRole); - ObjectSpace.CommitChanges(); //This line persists created object(s). - } - #endregion - - public override void UpdateDatabaseBeforeUpdateSchema() { - base.UpdateDatabaseBeforeUpdateSchema(); - //if(CurrentDBVersion < new Version("1.1.0.0") && CurrentDBVersion > new Version("0.0.0.0")) { - // RenameColumn("DomainObject1Table", "OldColumnName", "NewColumnName"); - //} - } - private PermissionPolicyRole CreateDefaultRole() { - PermissionPolicyRole defaultRole = ObjectSpace.FindObject(new BinaryOperator("Name", "Default")); - if(defaultRole == null) { - defaultRole = ObjectSpace.CreateObject(); - defaultRole.Name = "Default"; - - defaultRole.AddObjectPermission(SecurityOperations.Read, "[Oid] = CurrentUserId()", SecurityPermissionState.Allow); - defaultRole.AddNavigationPermission(@"Application/NavigationItems/Items/Default/Items/MyDetails", SecurityPermissionState.Allow); - defaultRole.AddMemberPermission(SecurityOperations.Write, "ChangePasswordOnFirstLogon", "[Oid] = CurrentUserId()", SecurityPermissionState.Allow); - defaultRole.AddMemberPermission(SecurityOperations.Write, "StoredPassword", "[Oid] = CurrentUserId()", SecurityPermissionState.Allow); - defaultRole.AddTypePermissionsRecursively(SecurityOperations.Read, SecurityPermissionState.Deny); - defaultRole.AddTypePermissionsRecursively(SecurityOperations.ReadWriteAccess, SecurityPermissionState.Allow); - defaultRole.AddTypePermissionsRecursively(SecurityOperations.ReadWriteAccess, SecurityPermissionState.Allow); - defaultRole.AddTypePermissionsRecursively(SecurityOperations.Create, SecurityPermissionState.Allow); - defaultRole.AddTypePermissionsRecursively(SecurityOperations.Create, SecurityPermissionState.Allow); - } - return defaultRole; - } - } -} diff --git a/CS/NonPersistentObjectsDemo.Module/FunctionalTests/ReadMe.txt b/CS/NonPersistentObjectsDemo.Module/FunctionalTests/ReadMe.txt deleted file mode 100644 index fb0b599..0000000 --- a/CS/NonPersistentObjectsDemo.Module/FunctionalTests/ReadMe.txt +++ /dev/null @@ -1,10 +0,0 @@ -Folder Description - -The "FunctionalTests" project folder is intended for storing EasyTest -configuration file and scripts. - - -Relevant Documentation - -Functional Testing -https://docs.devexpress.com/eXpressAppFramework/113206 diff --git a/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml b/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml deleted file mode 100644 index bf04ea6..0000000 --- a/CS/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/CS/NonPersistentObjectsDemo.Module/FunctionalTests/sample.ets b/CS/NonPersistentObjectsDemo.Module/FunctionalTests/sample.ets deleted file mode 100644 index ab78fc2..0000000 --- a/CS/NonPersistentObjectsDemo.Module/FunctionalTests/sample.ets +++ /dev/null @@ -1,20 +0,0 @@ -;#DropDB NonPersistentObjectsDemoEasyTest - -#Application NonPersistentObjectsDemoWin -#Application NonPersistentObjectsDemoWeb - -*FillForm - User Name = Admin -*Action Log In - -#IfDef NonPersistentObjectsDemoWin - -*Action About... - -*Action OK - -#EndIf - -#IfDef NonPersistentObjectsDemoWeb -*Action Navigation(My Details) -#EndIf diff --git a/CS/NonPersistentObjectsDemo.Module/Model.DesignedDiffs.xafml b/CS/NonPersistentObjectsDemo.Module/Model.DesignedDiffs.xafml deleted file mode 100644 index fbd248d..0000000 --- a/CS/NonPersistentObjectsDemo.Module/Model.DesignedDiffs.xafml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/CS/NonPersistentObjectsDemo.Module/Module.Designer.cs b/CS/NonPersistentObjectsDemo.Module/Module.Designer.cs deleted file mode 100644 index 4be439d..0000000 --- a/CS/NonPersistentObjectsDemo.Module/Module.Designer.cs +++ /dev/null @@ -1,50 +0,0 @@ -namespace NonPersistentObjectsDemo.Module { - partial class NonPersistentObjectsDemoModule { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) { - if(disposing && (components != null)) { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() { - // - // NonPersistentObjectsDemoModule - // - this.AdditionalExportedTypes.Add(typeof(DevExpress.Persistent.BaseImpl.ModelDifference)); - this.AdditionalExportedTypes.Add(typeof(DevExpress.Persistent.BaseImpl.ModelDifferenceAspect)); - this.AdditionalExportedTypes.Add(typeof(DevExpress.Persistent.BaseImpl.BaseObject)); - //this.AdditionalExportedTypes.Add(typeof(DevExpress.Persistent.BaseImpl.FileData)); - //this.AdditionalExportedTypes.Add(typeof(DevExpress.Persistent.BaseImpl.FileAttachmentBase)); - //this.AdditionalExportedTypes.Add(typeof(DevExpress.Persistent.BaseImpl.Event)); - //this.AdditionalExportedTypes.Add(typeof(DevExpress.Persistent.BaseImpl.Resource)); - //this.AdditionalExportedTypes.Add(typeof(DevExpress.Persistent.BaseImpl.HCategory)); - this.RequiredModuleTypes.Add(typeof(DevExpress.ExpressApp.SystemModule.SystemModule)); - this.RequiredModuleTypes.Add(typeof(DevExpress.ExpressApp.Objects.BusinessClassLibraryCustomizationModule)); - this.RequiredModuleTypes.Add(typeof(DevExpress.ExpressApp.CloneObject.CloneObjectModule)); - this.RequiredModuleTypes.Add(typeof(DevExpress.ExpressApp.ConditionalAppearance.ConditionalAppearanceModule)); - this.RequiredModuleTypes.Add(typeof(DevExpress.ExpressApp.ReportsV2.ReportsModuleV2)); - this.RequiredModuleTypes.Add(typeof(DevExpress.ExpressApp.Scheduler.SchedulerModuleBase)); - this.RequiredModuleTypes.Add(typeof(DevExpress.ExpressApp.ScriptRecorder.ScriptRecorderModuleBase)); - this.RequiredModuleTypes.Add(typeof(DevExpress.ExpressApp.TreeListEditors.TreeListEditorsModuleBase)); - this.RequiredModuleTypes.Add(typeof(DevExpress.ExpressApp.Validation.ValidationModule)); - } - - #endregion - } -} diff --git a/CS/NonPersistentObjectsDemo.Module/Module.cs b/CS/NonPersistentObjectsDemo.Module/Module.cs deleted file mode 100644 index 37f7721..0000000 --- a/CS/NonPersistentObjectsDemo.Module/Module.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Text; -using System.Linq; -using DevExpress.ExpressApp; -using System.ComponentModel; -using DevExpress.ExpressApp.DC; -using System.Collections.Generic; -using DevExpress.Persistent.Base; -using DevExpress.Persistent.BaseImpl; -using DevExpress.Persistent.BaseImpl.PermissionPolicy; -using DevExpress.ExpressApp.Model; -using DevExpress.ExpressApp.Actions; -using DevExpress.ExpressApp.Editors; -using DevExpress.ExpressApp.Updating; -using DevExpress.ExpressApp.Model.Core; -using DevExpress.ExpressApp.Model.DomainLogics; -using DevExpress.ExpressApp.Model.NodeGenerators; -using DevExpress.ExpressApp.Xpo; -using NonPersistentObjectsDemo.Module.BusinessObjects; - -namespace NonPersistentObjectsDemo.Module { - // For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase. - public sealed partial class NonPersistentObjectsDemoModule : ModuleBase { - public NonPersistentObjectsDemoModule() { - InitializeComponent(); - BaseObject.OidInitializationMode = OidInitializationMode.AfterConstruction; - } - public override IEnumerable GetModuleUpdaters(IObjectSpace objectSpace, Version versionFromDB) { - ModuleUpdater updater = new DatabaseUpdate.Updater(objectSpace, versionFromDB); - return new ModuleUpdater[] { updater }; - } - public override void Setup(XafApplication application) { - base.Setup(application); - // Manage various aspects of the application UI and behavior at the module level. - application.SetupComplete += Application_SetupComplete; - } - private void Application_SetupComplete(object sender, EventArgs e) { - Application.ObjectSpaceCreated += Application_ObjectSpaceCreated; - } - private void Application_ObjectSpaceCreated(object sender, ObjectSpaceCreatedEventArgs e) { - var npos = e.ObjectSpace as NonPersistentObjectSpace; - if(npos != null) { - new ArticleAdapter(npos); - new ContactAdapter(npos); - } - } - public override void CustomizeTypesInfo(ITypesInfo typesInfo) { - base.CustomizeTypesInfo(typesInfo); - CalculatedPersistentAliasHelper.CustomizeTypesInfo(typesInfo); - } - } -} diff --git a/CS/NonPersistentObjectsDemo.Module/NonPersistentObjectsDemo.Module.csproj b/CS/NonPersistentObjectsDemo.Module/NonPersistentObjectsDemo.Module.csproj deleted file mode 100644 index b11532d..0000000 --- a/CS/NonPersistentObjectsDemo.Module/NonPersistentObjectsDemo.Module.csproj +++ /dev/null @@ -1,182 +0,0 @@ - - - - - Debug - AnyCPU - {57ACDBDB-006E-43D3-9308-97857F2FF75D} - Library - Properties - NonPersistentObjectsDemo.Module - NonPersistentObjectsDemo.Module - v4.5.2 - 512 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - true - bin\EasyTest\ - TRACE;DEBUG;EASYTEST - full - AnyCPU - prompt - - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - System - - - System.Data - - - - System.XML - - - - - - - - Component - - - - Component - - - Module.cs - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/CS/NonPersistentObjectsDemo.Module/Properties/AssemblyInfo.cs b/CS/NonPersistentObjectsDemo.Module/Properties/AssemblyInfo.cs deleted file mode 100644 index 87b67a8..0000000 --- a/CS/NonPersistentObjectsDemo.Module/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("NonPersistentObjectsDemo.Module")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("NonPersistentObjectsDemo.Module")] -[assembly: AssemblyCopyright("Copyright © 2020")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("720e2161-0047-4cfe-a68c-433063a3ae53")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -[assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/CS/NonPersistentObjectsDemo.Module/ReadMe.txt b/CS/NonPersistentObjectsDemo.Module/ReadMe.txt deleted file mode 100644 index a96fb7a..0000000 --- a/CS/NonPersistentObjectsDemo.Module/ReadMe.txt +++ /dev/null @@ -1,28 +0,0 @@ -Project Description - -This project implements a platform-agnostic Module. UI-independent application -elements can be implemented here (Business Objects, Controllers, etc.). The root -project folder contains the Module.cs(vb) file with the class that inherits -ModuleBase. This class can be designed with the Module Designer that allows -you to view and customize Module components: referenced modules, Controllers -and business classes. Additionally, the root folder contains Application Model -difference files (XAFML files) that keep application settings specific for the -current Module. Differences files can be designed with the Model Editor. - - -Relevant Documentation - -Application Solution Components -https://docs.devexpress.com/eXpressAppFramework/112569 - -ModuleBase Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase - -Module Designer -https://docs.devexpress.com/eXpressAppFramework/112828 - -Application Model -https://docs.devexpress.com/eXpressAppFramework/112579 - -Model Editor -https://docs.devexpress.com/eXpressAppFramework/112582 diff --git a/CS/NonPersistentObjectsDemo.Module/Util.cs b/CS/NonPersistentObjectsDemo.Module/Util.cs deleted file mode 100644 index 3a6ac71..0000000 --- a/CS/NonPersistentObjectsDemo.Module/Util.cs +++ /dev/null @@ -1,101 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace NonPersistentObjectsDemo.Module { - - public class GenHelper { - private static Random srnd; - private static List words; - private static List fnames; - private static List lnames; - static GenHelper() { - srnd = new Random(); - words = CreateWords(12000); - fnames = CreateNames(200); - lnames = CreateNames(500); - } - private static List CreateWords(int number) { - var items = new HashSet(); - while(number > 0) { - if(items.Add(CreateWord())) { - number--; - } - } - return items.ToList(); - } - private static string MakeTosh(Random rnd, int length) { - var chars = new char[length]; - for(int i = 0; i < length; i++) { - chars[i] = (char)('a' + rnd.Next(26)); - } - return new String(chars); - } - private static string CreateWord() { - return MakeTosh(srnd, 1 + srnd.Next(13)); - } - private static List CreateNames(int number) { - var items = new HashSet(); - while(number > 0) { - if(items.Add(ToTitle(CreateWord()))) { - number--; - } - } - return items.ToList(); - } - public static string ToTitle(string s) { - if(string.IsNullOrEmpty(s)) - return s; - return string.Concat(s.Substring(0, 1).ToUpper(), s.Substring(1)); - } - - private Random rnd; - public GenHelper() { - rnd = new Random(); - } - public GenHelper(int seed) { - rnd = new Random(seed); - } - public int Next(int max) { - return rnd.Next(max); - } - public string MakeTosh(int length) { - return MakeTosh(rnd, length); - } - public string MakeBlah(int length) { - var sb = new StringBuilder(); - for(var i = 0; i <= length; i++) { - if(sb.Length > 0) { - sb.Append(" "); - } - sb.Append(GetWord()); - } - return sb.ToString(); - } - public string MakeBlahBlahBlah(int length, int plength) { - var sb = new StringBuilder(); - for(var i = 0; i <= length; i++) { - if(sb.Length > 0) { - sb.Append(" "); - } - var w = ToTitle(MakeBlah(3 + rnd.Next(plength))) + "."; - sb.Append(w); - } - return sb.ToString(); - } - public string GetFullName() { - return string.Concat(GetFName(), " ", GetLName()); - } - private string GetFName() { - return fnames[rnd.Next(fnames.Count)]; - } - private string GetLName() { - return lnames[rnd.Next(lnames.Count)]; - } - private string GetWord() { - return words[rnd.Next(words.Count)]; - } - } -} diff --git a/CS/NonPersistentObjectsDemo.Module/Welcome.html b/CS/NonPersistentObjectsDemo.Module/Welcome.html deleted file mode 100644 index d27bb12..0000000 --- a/CS/NonPersistentObjectsDemo.Module/Welcome.html +++ /dev/null @@ -1,185 +0,0 @@ - - - - - Your XAF application - - - - - - -
- - - - - -
-
-

The XAF Solution Wizard has successfully generated the solution according to your settings.

-
    -
  • The NonPersistentObjectsDemo.Module project keeps your platform-agnostic code. - Add persistent objects code to the Business Objects folder of this project and XAF will automatically create a UI to create, read, update and delete these persistent objects.
  • -
  • The NonPersistentObjectsDemo.Win project is a startup project for the desktop application.
  • -
  • The NonPersistentObjectsDemo.Web project is a startup project for the web application.
  • -
  • To specify the database used by your application, modify the ConnectionString attribute in the configuration file located in the startup project.
  • -
  • To login, enter the "Admin" user name with empty password.
  • -
-
-
- - - - - -
-
- - - \ No newline at end of file diff --git a/CS/NonPersistentObjectsDemo.Web/Default.aspx b/CS/NonPersistentObjectsDemo.Web/Default.aspx deleted file mode 100644 index 918be8f..0000000 --- a/CS/NonPersistentObjectsDemo.Web/Default.aspx +++ /dev/null @@ -1,19 +0,0 @@ -<%@ Page Language="C#" AutoEventWireup="true" Inherits="Default" EnableViewState="false" - ValidateRequest="false" CodeBehind="Default.aspx.cs" %> -<%@ Register Assembly="DevExpress.ExpressApp.Web.v20.1" - Namespace="DevExpress.ExpressApp.Web.Templates" TagPrefix="cc3" %> -<%@ Register Assembly="DevExpress.ExpressApp.Web.v20.1" - Namespace="DevExpress.ExpressApp.Web.Controls" TagPrefix="cc4" %> - - - - Main Page - - - -
- -
- - - \ No newline at end of file diff --git a/CS/NonPersistentObjectsDemo.Web/Default.aspx.cs b/CS/NonPersistentObjectsDemo.Web/Default.aspx.cs deleted file mode 100644 index ad151ab..0000000 --- a/CS/NonPersistentObjectsDemo.Web/Default.aspx.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Web.UI; -using DevExpress.ExpressApp.Templates; -using DevExpress.ExpressApp.Web; -using DevExpress.ExpressApp.Web.Templates; -using DevExpress.ExpressApp.Web.Templates.ActionContainers; - -public partial class Default : BaseXafPage { - protected override ContextActionsMenu CreateContextActionsMenu() { - return new ContextActionsMenu(this, "Edit", "RecordEdit", "ObjectsCreation", "ListView", "Reports"); - } - public override Control InnerContentPlaceHolder { - get { - return Content; - } - } -} \ No newline at end of file diff --git a/CS/NonPersistentObjectsDemo.Web/Default.aspx.designer.cs b/CS/NonPersistentObjectsDemo.Web/Default.aspx.designer.cs deleted file mode 100644 index 58a6e63..0000000 --- a/CS/NonPersistentObjectsDemo.Web/Default.aspx.designer.cs +++ /dev/null @@ -1,40 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - - - -public partial class Default { - - /// - /// form2 control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlForm form2; - - /// - /// ProgressControl control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::DevExpress.ExpressApp.Web.Controls.ASPxProgressControl ProgressControl; - - /// - /// Content control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlGenericControl Content; -} diff --git a/CS/NonPersistentObjectsDemo.Web/Error.aspx b/CS/NonPersistentObjectsDemo.Web/Error.aspx deleted file mode 100644 index 5cd4348..0000000 --- a/CS/NonPersistentObjectsDemo.Web/Error.aspx +++ /dev/null @@ -1,147 +0,0 @@ -<%@ Page Language="c#" AutoEventWireup="false" Inherits="ErrorPage" EnableViewState="false" - ValidateRequest="false" CodeBehind="Error.aspx.cs" %> - - - - Error - - - - -
- - - - -
-
-
- - - - - -
-

- -

-
- -
- -
- - - - -
- - - -

-

- -

- - We are currently unable to serve your request.
- You could go back and - try again or - restart the application. -
-

- - - - Show Error details - - - - Report error
-
-

- This error has been logged. If you have additional information that you believe - may have caused this error please report the problem.

- - - - - - - -
- -
- -
-
-
-
-
-
-
-
-
-
-
- -
- - diff --git a/CS/NonPersistentObjectsDemo.Web/Error.aspx.cs b/CS/NonPersistentObjectsDemo.Web/Error.aspx.cs deleted file mode 100644 index 7928158..0000000 --- a/CS/NonPersistentObjectsDemo.Web/Error.aspx.cs +++ /dev/null @@ -1,75 +0,0 @@ -using System; -using System.Web.UI; -using DevExpress.ExpressApp.Web; -using DevExpress.ExpressApp.Web.SystemModule; -using DevExpress.ExpressApp.Web.Templates; -using DevExpress.ExpressApp.Web.TestScripts; - -public partial class ErrorPage : System.Web.UI.Page { - protected override void InitializeCulture() { - if(WebApplication.Instance != null) - WebApplication.Instance.InitializeCulture(); - } - protected override void OnPreInit(EventArgs e) { - base.OnPreInit(e); - BaseXafPage.SetupCurrentTheme(); - } - private void Page_Load(object sender, System.EventArgs e) { - if(TestScriptsManager.EasyTestEnabled) { - TestScriptsManager testScriptsManager = new TestScriptsManager(Page); - testScriptsManager.RegisterControl(JSLabelTestControl.ClassName, "FormCaption", TestControlType.Field, "FormCaption"); - testScriptsManager.RegisterControl(JSLabelTestControl.ClassName, "DescriptionTextBox", TestControlType.Field, "Description"); - testScriptsManager.RegisterControl(JSDefaultTestControl.ClassName, "ReportButton", TestControlType.Action, "Report"); - testScriptsManager.AllControlRegistered(); - ClientScript.RegisterStartupScript(GetType(), "EasyTest", testScriptsManager.GetScript(), true); - } - if(WebApplication.Instance != null) { - ApplicationTitle.Text = WebApplication.Instance.Title; - } - else { - ApplicationTitle.Text = "No application"; - } - Header.Title = "Application Error - " + ApplicationTitle.Text; - - ErrorInfo errorInfo = ErrorHandling.GetApplicationError(); - if(errorInfo != null) { - if(ErrorHandling.CanShowDetailedInformation) { - DetailsText.Text = errorInfo.GetTextualPresentation(true); - } - else { - Details.Visible = false; - } - ReportForm.Visible = ErrorHandling.CanSendAlertToAdmin; - } - else { - ErrorPanel.Visible = false; - } - } - #region Web Form Designer generated code - override protected void OnInit(EventArgs e) { - InitializeComponent(); - base.OnInit(e); - } - - private void InitializeComponent() { - this.Load += new System.EventHandler(this.Page_Load); - this.PreRender += new EventHandler(ErrorPage_PreRender); - } - - private void ErrorPage_PreRender(object sender, EventArgs e) { - RegisterThemeAssemblyController.RegisterThemeResources((Page)sender); - } - - - #endregion - protected void ReportButton_Click(object sender, EventArgs e) { - ErrorInfo errorInfo = ErrorHandling.GetApplicationError(); - if(errorInfo != null) { - ErrorHandling.SendAlertToAdmin(errorInfo.Id, DescriptionTextBox.Text, errorInfo.Exception.Message); - ClientScript.RegisterStartupScript(GetType(), "alert", "alert('Your report has been sent. Thank you.');", true); - } - } - protected void NavigateToStart_Click(object sender, EventArgs e) { - WebApplication.Instance.LogOff(); - } -} diff --git a/CS/NonPersistentObjectsDemo.Web/Error.aspx.designer.cs b/CS/NonPersistentObjectsDemo.Web/Error.aspx.designer.cs deleted file mode 100644 index 5427628..0000000 --- a/CS/NonPersistentObjectsDemo.Web/Error.aspx.designer.cs +++ /dev/null @@ -1,166 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - - - -public partial class ErrorPage { - - /// - /// Head1 control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlHead Head1; - - /// - /// form1 control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlForm form1; - - /// - /// ApplicationTitle control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Literal ApplicationTitle; - - /// - /// InfoMessagesPanel control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Literal InfoMessagesPanel; - - /// - /// Table1 control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Table Table1; - - /// - /// TableRow2 control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.TableRow TableRow2; - - /// - /// ViewSite control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.TableCell ViewSite; - - /// - /// ErrorTitleLiteral control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Literal ErrorTitleLiteral; - - /// - /// ErrorPanel control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Panel ErrorPanel; - - /// - /// ApologizeMessage control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.PlaceHolder ApologizeMessage; - - /// - /// HyperLink1 control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.HyperLink HyperLink1; - - /// - /// NavigateToStart control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.LinkButton NavigateToStart; - - /// - /// Details control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Panel Details; - - /// - /// DetailsText control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Literal DetailsText; - - /// - /// ReportForm control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Panel ReportForm; - - /// - /// DescriptionTextBox control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.TextBox DescriptionTextBox; - - /// - /// ReportButton control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.WebControls.Button ReportButton; -} diff --git a/CS/NonPersistentObjectsDemo.Web/Global.asax b/CS/NonPersistentObjectsDemo.Web/Global.asax deleted file mode 100644 index 129093f..0000000 --- a/CS/NonPersistentObjectsDemo.Web/Global.asax +++ /dev/null @@ -1 +0,0 @@ -<%@ Application Language="C#" CodeBehind="Global.asax.cs" Inherits="NonPersistentObjectsDemo.Web.Global"%> diff --git a/CS/NonPersistentObjectsDemo.Web/Global.asax.cs b/CS/NonPersistentObjectsDemo.Web/Global.asax.cs deleted file mode 100644 index 1646c4f..0000000 --- a/CS/NonPersistentObjectsDemo.Web/Global.asax.cs +++ /dev/null @@ -1,75 +0,0 @@ -using System; -using System.Configuration; -using System.Web.Configuration; -using System.Web; -using System.Web.Routing; - -using DevExpress.ExpressApp; -using DevExpress.Persistent.Base; -using DevExpress.Persistent.BaseImpl; -using DevExpress.ExpressApp.Security; -using DevExpress.ExpressApp.Web; -using DevExpress.Web; - -namespace NonPersistentObjectsDemo.Web { - public class Global : System.Web.HttpApplication { - public Global() { - InitializeComponent(); - } - protected void Application_Start(Object sender, EventArgs e) { - RouteTable.Routes.RegisterXafRoutes(); - DevExpress.ExpressApp.BaseObjectSpace.ThrowExceptionForNotRegisteredEntityType = true; - ASPxWebControl.CallbackError += new EventHandler(Application_Error); -#if EASYTEST - DevExpress.ExpressApp.Web.TestScripts.TestScriptsManager.EasyTestEnabled = true; -#endif - } - protected void Session_Start(Object sender, EventArgs e) { - Tracing.Initialize(); - WebApplication.SetInstance(Session, new NonPersistentObjectsDemoAspNetApplication()); - //SecurityStrategy security = (SecurityStrategy)WebApplication.Instance.Security; - //security.RegisterXPOAdapterProviders(); - DevExpress.ExpressApp.Web.Templates.DefaultVerticalTemplateContentNew.ClearSizeLimit(); - WebApplication.Instance.SwitchToNewStyle(); - if(ConfigurationManager.ConnectionStrings["ConnectionString"] != null) { - WebApplication.Instance.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; - } -#if EASYTEST - if(ConfigurationManager.ConnectionStrings["EasyTestConnectionString"] != null) { - WebApplication.Instance.ConnectionString = ConfigurationManager.ConnectionStrings["EasyTestConnectionString"].ConnectionString; - } -#endif - WebApplication.Instance.ConnectionString = DevExpress.ExpressApp.Xpo.InMemoryDataStoreProvider.ConnectionString; -#if DEBUG - if(System.Diagnostics.Debugger.IsAttached && WebApplication.Instance.CheckCompatibilityType == CheckCompatibilityType.DatabaseSchema) { - WebApplication.Instance.DatabaseUpdateMode = DatabaseUpdateMode.UpdateDatabaseAlways; - } -#endif - WebApplication.Instance.Setup(); - WebApplication.Instance.Start(); - } - protected void Application_BeginRequest(Object sender, EventArgs e) { - } - protected void Application_EndRequest(Object sender, EventArgs e) { - } - protected void Application_AuthenticateRequest(Object sender, EventArgs e) { - } - protected void Application_Error(Object sender, EventArgs e) { - ErrorHandling.Instance.ProcessApplicationError(); - } - protected void Session_End(Object sender, EventArgs e) { - WebApplication.LogOff(Session); - WebApplication.DisposeInstance(Session); - } - protected void Application_End(Object sender, EventArgs e) { - } - #region Web Form Designer generated code - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() { - } - #endregion - } -} diff --git a/CS/NonPersistentObjectsDemo.Web/Images/ReadMe.txt b/CS/NonPersistentObjectsDemo.Web/Images/ReadMe.txt deleted file mode 100644 index 230befc..0000000 --- a/CS/NonPersistentObjectsDemo.Web/Images/ReadMe.txt +++ /dev/null @@ -1,12 +0,0 @@ -Folder Description - -The "Images" project folder is intended for storing custom image files. - - -Relevant Documentation - -Add and Override Images -https://docs.devexpress.com/eXpressAppFramework/112792 - -Assign a Custom Image -https://docs.devexpress.com/eXpressAppFramework/112744 diff --git a/CS/NonPersistentObjectsDemo.Web/Login.aspx b/CS/NonPersistentObjectsDemo.Web/Login.aspx deleted file mode 100644 index b610ff1..0000000 --- a/CS/NonPersistentObjectsDemo.Web/Login.aspx +++ /dev/null @@ -1,24 +0,0 @@ -<%@ Page Language="C#" AutoEventWireup="true" Inherits="LoginPage" EnableViewState="false" - ValidateRequest="false" CodeBehind="Login.aspx.cs" %> -<%@ Register Assembly="DevExpress.ExpressApp.Web.v20.1" - Namespace="DevExpress.ExpressApp.Web.Templates.ActionContainers" TagPrefix="cc2" %> -<%@ Register Assembly="DevExpress.ExpressApp.Web.v20.1" - Namespace="DevExpress.ExpressApp.Web.Templates.Controls" TagPrefix="tc" %> -<%@ Register Assembly="DevExpress.ExpressApp.Web.v20.1" - Namespace="DevExpress.ExpressApp.Web.Controls" TagPrefix="cc4" %> -<%@ Register Assembly="DevExpress.ExpressApp.Web.v20.1" - Namespace="DevExpress.ExpressApp.Web.Templates" TagPrefix="cc3" %> - - - - Logon - - -
-
- -
- -
- - diff --git a/CS/NonPersistentObjectsDemo.Web/Login.aspx.cs b/CS/NonPersistentObjectsDemo.Web/Login.aspx.cs deleted file mode 100644 index faecf7b..0000000 --- a/CS/NonPersistentObjectsDemo.Web/Login.aspx.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; - -using DevExpress.ExpressApp.Web; -using DevExpress.ExpressApp.Web.Templates; - -public partial class LoginPage : BaseXafPage { - public override System.Web.UI.Control InnerContentPlaceHolder { - get { - return Content; - } - } -} diff --git a/CS/NonPersistentObjectsDemo.Web/Login.aspx.designer.cs b/CS/NonPersistentObjectsDemo.Web/Login.aspx.designer.cs deleted file mode 100644 index 769ff3e..0000000 --- a/CS/NonPersistentObjectsDemo.Web/Login.aspx.designer.cs +++ /dev/null @@ -1,49 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - - - -public partial class LoginPage { - - /// - /// Head1 control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlHead Head1; - - /// - /// form1 control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlForm form1; - - /// - /// ProgressControl control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::DevExpress.ExpressApp.Web.Controls.ASPxProgressControl ProgressControl; - - /// - /// Content control. - /// - /// - /// Auto-generated field. - /// To modify move field declaration from designer file to code-behind file. - /// - protected global::System.Web.UI.HtmlControls.HtmlGenericControl Content; -} diff --git a/CS/NonPersistentObjectsDemo.Web/Model.Desktop.xafml b/CS/NonPersistentObjectsDemo.Web/Model.Desktop.xafml deleted file mode 100644 index ab80ccd..0000000 --- a/CS/NonPersistentObjectsDemo.Web/Model.Desktop.xafml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/CS/NonPersistentObjectsDemo.Web/Model.Tablet.xafml b/CS/NonPersistentObjectsDemo.Web/Model.Tablet.xafml deleted file mode 100644 index ab80ccd..0000000 --- a/CS/NonPersistentObjectsDemo.Web/Model.Tablet.xafml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/CS/NonPersistentObjectsDemo.Web/Model.xafml b/CS/NonPersistentObjectsDemo.Web/Model.xafml deleted file mode 100644 index ab80ccd..0000000 --- a/CS/NonPersistentObjectsDemo.Web/Model.xafml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/CS/NonPersistentObjectsDemo.Web/NonPersistentObjectsDemo.Web.csproj b/CS/NonPersistentObjectsDemo.Web/NonPersistentObjectsDemo.Web.csproj deleted file mode 100644 index 641c53e..0000000 --- a/CS/NonPersistentObjectsDemo.Web/NonPersistentObjectsDemo.Web.csproj +++ /dev/null @@ -1,376 +0,0 @@ - - - - - Debug - AnyCPU - {8C3026D1-113C-4B88-9F91-236753790C60} - {349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc} - Library - Properties - NonPersistentObjectsDemo.Web - NonPersistentObjectsDemo.Web - v4.5.2 - 512 - false - 44300 - enabled - disabled - false - - - - - true - full - false - bin\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\ - TRACE - prompt - 4 - - - true - bin\ - TRACE;DEBUG;EASYTEST - full - AnyCPU - prompt - - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - False - - - False - False - - - False - False - - - False - False - - - False - False - - - False - False - - - False - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - - - - - - - - - - Default.aspx - - - Error.aspx - - - Global.asax - - - Login.aspx - - - Component - - - Default.aspx - ASPXCodeBehind - - - Error.aspx - ASPXCodeBehind - - - Login.aspx - ASPXCodeBehind - - - - - - Designer - - - - - - - - - - - {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B} - NonPersistentObjectsDemo.Module.Web - True - - - {57ACDBDB-006E-43D3-9308-97857F2FF75D} - NonPersistentObjectsDemo.Module - True - - - - 10.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - - - - - - - - - - False - True - 2064 - / - - - False - False - - - False - - - - - diff --git a/CS/NonPersistentObjectsDemo.Web/Properties/AssemblyInfo.cs b/CS/NonPersistentObjectsDemo.Web/Properties/AssemblyInfo.cs deleted file mode 100644 index 3ce642c..0000000 --- a/CS/NonPersistentObjectsDemo.Web/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("NonPersistentObjectsDemo.Web")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("NonPersistentObjectsDemo.Web")] -[assembly: AssemblyCopyright("Copyright © 2020")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("720e2161-0047-4cfe-a68c-433063a3ae53")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/CS/NonPersistentObjectsDemo.Web/ReadMe.txt b/CS/NonPersistentObjectsDemo.Web/ReadMe.txt deleted file mode 100644 index db74671..0000000 --- a/CS/NonPersistentObjectsDemo.Web/ReadMe.txt +++ /dev/null @@ -1,31 +0,0 @@ -Project Description - -This project implements an ASP.NET application. The ApplicationCode project -folder contains the WebApplication.cs(vb) file with the class that inherits -WebApplication. This class can be designed with the Application Designer that -allows you to view and customize application components: referenced modules, -security settings, data connection. Additionally, the root folder contains -Application Model difference files (XAFML files) that keep application settings -specific for the current application. Differences files can be designed with -the Model Editor. - - -Relevant Documentation - -Application Solution Components -https://docs.devexpress.com/eXpressAppFramework/112569 - -WebApplication Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Web.WebApplication - -XafApplication Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.XafApplication - -Application Designer -https://docs.devexpress.com/eXpressAppFramework/112827 - -Application Model -https://docs.devexpress.com/eXpressAppFramework/112579 - -Model Editor -https://docs.devexpress.com/eXpressAppFramework/112582 diff --git a/CS/NonPersistentObjectsDemo.Web/Web.config b/CS/NonPersistentObjectsDemo.Web/Web.config deleted file mode 100644 index f2b083e..0000000 --- a/CS/NonPersistentObjectsDemo.Web/Web.config +++ /dev/null @@ -1,185 +0,0 @@ - - - - - -
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/CS/NonPersistentObjectsDemo.Web/WebApplication.cs b/CS/NonPersistentObjectsDemo.Web/WebApplication.cs deleted file mode 100644 index 04853e7..0000000 --- a/CS/NonPersistentObjectsDemo.Web/WebApplication.cs +++ /dev/null @@ -1,175 +0,0 @@ -using System; -using DevExpress.ExpressApp; -using System.ComponentModel; -using DevExpress.ExpressApp.Web; -using System.Collections.Generic; -using DevExpress.ExpressApp.Xpo; -using DevExpress.ExpressApp.Security; -using DevExpress.ExpressApp.Security.ClientServer; - -namespace NonPersistentObjectsDemo.Web { - // For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Web.WebApplication - public partial class NonPersistentObjectsDemoAspNetApplication : WebApplication { - private DevExpress.ExpressApp.SystemModule.SystemModule module1; - private DevExpress.ExpressApp.Web.SystemModule.SystemAspNetModule module2; - private NonPersistentObjectsDemo.Module.NonPersistentObjectsDemoModule module3; - private NonPersistentObjectsDemo.Module.Web.NonPersistentObjectsDemoAspNetModule module4; - private DevExpress.ExpressApp.Security.SecurityModule securityModule1; - private DevExpress.ExpressApp.Security.SecurityStrategyComplex securityStrategyComplex1; - private DevExpress.ExpressApp.Security.AuthenticationStandard authenticationStandard1; - private DevExpress.ExpressApp.Objects.BusinessClassLibraryCustomizationModule objectsModule; - private DevExpress.ExpressApp.CloneObject.CloneObjectModule cloneObjectModule; - private DevExpress.ExpressApp.ConditionalAppearance.ConditionalAppearanceModule conditionalAppearanceModule; - private DevExpress.ExpressApp.FileAttachments.Web.FileAttachmentsAspNetModule fileAttachmentsAspNetModule; - private DevExpress.ExpressApp.ReportsV2.ReportsModuleV2 reportsModuleV2; - private DevExpress.ExpressApp.ReportsV2.Web.ReportsAspNetModuleV2 reportsAspNetModuleV2; - private DevExpress.ExpressApp.Scheduler.SchedulerModuleBase schedulerModuleBase; - private DevExpress.ExpressApp.Scheduler.Web.SchedulerAspNetModule schedulerAspNetModule; - private DevExpress.ExpressApp.ScriptRecorder.ScriptRecorderModuleBase scriptRecorderModuleBase; - private DevExpress.ExpressApp.ScriptRecorder.Web.ScriptRecorderAspNetModule scriptRecorderAspNetModule; - private DevExpress.ExpressApp.TreeListEditors.TreeListEditorsModuleBase treeListEditorsModuleBase; - private DevExpress.ExpressApp.TreeListEditors.Web.TreeListEditorsAspNetModule treeListEditorsAspNetModule; - private DevExpress.ExpressApp.Validation.ValidationModule validationModule; - private DevExpress.ExpressApp.Validation.Web.ValidationAspNetModule validationAspNetModule; - - #region Default XAF configuration options (https://www.devexpress.com/kb=T501418) - static NonPersistentObjectsDemoAspNetApplication() { - EnableMultipleBrowserTabsSupport = true; - DevExpress.ExpressApp.Web.Editors.ASPx.ASPxGridListEditor.AllowFilterControlHierarchy = true; - DevExpress.ExpressApp.Web.Editors.ASPx.ASPxGridListEditor.MaxFilterControlHierarchyDepth = 3; - DevExpress.ExpressApp.Web.Editors.ASPx.ASPxCriteriaPropertyEditor.AllowFilterControlHierarchyDefault = true; - DevExpress.ExpressApp.Web.Editors.ASPx.ASPxCriteriaPropertyEditor.MaxHierarchyDepthDefault = 3; - DevExpress.Persistent.Base.PasswordCryptographer.EnableRfc2898 = true; - DevExpress.Persistent.Base.PasswordCryptographer.SupportLegacySha512 = false; - } - private void InitializeDefaults() { - LinkNewObjectToParentImmediately = false; - OptimizedControllersCreation = true; - } - #endregion - public NonPersistentObjectsDemoAspNetApplication() { - InitializeComponent(); - InitializeDefaults(); - } - protected override IViewUrlManager CreateViewUrlManager() { - return new ViewUrlManager(); - } - protected override void CreateDefaultObjectSpaceProvider(CreateCustomObjectSpaceProviderEventArgs args) { - //args.ObjectSpaceProvider = new SecuredObjectSpaceProvider((SecurityStrategyComplex)Security, GetDataStoreProvider(args.ConnectionString, args.Connection), true); - args.ObjectSpaceProvider = new XPObjectSpaceProvider(GetDataStoreProvider(args.ConnectionString, args.Connection), true); - args.ObjectSpaceProviders.Add(new NonPersistentObjectSpaceProvider(TypesInfo, null)); - } - private IXpoDataStoreProvider GetDataStoreProvider(string connectionString, System.Data.IDbConnection connection) { - System.Web.HttpApplicationState application = (System.Web.HttpContext.Current != null) ? System.Web.HttpContext.Current.Application : null; - IXpoDataStoreProvider dataStoreProvider = null; - if(application != null && application["DataStoreProvider"] != null) { - dataStoreProvider = application["DataStoreProvider"] as IXpoDataStoreProvider; - } - else { - dataStoreProvider = XPObjectSpaceProvider.GetDataStoreProvider(connectionString, connection, true); - if(application != null) { - application["DataStoreProvider"] = dataStoreProvider; - } - } - return dataStoreProvider; - } - private void NonPersistentObjectsDemoAspNetApplication_DatabaseVersionMismatch(object sender, DevExpress.ExpressApp.DatabaseVersionMismatchEventArgs e) { -#if EASYTEST - e.Updater.Update(); - e.Handled = true; -#else - if(System.Diagnostics.Debugger.IsAttached) { - e.Updater.Update(); - e.Handled = true; - } - else { - string message = "The application cannot connect to the specified database, " + - "because the database doesn't exist, its version is older " + - "than that of the application or its schema does not match " + - "the ORM data model structure. To avoid this error, use one " + - "of the solutions from the https://www.devexpress.com/kb=T367835 KB Article."; - - if(e.CompatibilityError != null && e.CompatibilityError.Exception != null) { - message += "\r\n\r\nInner exception: " + e.CompatibilityError.Exception.Message; - } - throw new InvalidOperationException(message); - } -#endif - } - private void InitializeComponent() { - this.module1 = new DevExpress.ExpressApp.SystemModule.SystemModule(); - this.module2 = new DevExpress.ExpressApp.Web.SystemModule.SystemAspNetModule(); - this.module3 = new NonPersistentObjectsDemo.Module.NonPersistentObjectsDemoModule(); - this.module4 = new NonPersistentObjectsDemo.Module.Web.NonPersistentObjectsDemoAspNetModule(); - this.securityModule1 = new DevExpress.ExpressApp.Security.SecurityModule(); - this.securityStrategyComplex1 = new DevExpress.ExpressApp.Security.SecurityStrategyComplex(); - this.securityStrategyComplex1.SupportNavigationPermissionsForTypes = false; - this.authenticationStandard1 = new DevExpress.ExpressApp.Security.AuthenticationStandard(); - this.objectsModule = new DevExpress.ExpressApp.Objects.BusinessClassLibraryCustomizationModule(); - this.cloneObjectModule = new DevExpress.ExpressApp.CloneObject.CloneObjectModule(); - this.conditionalAppearanceModule = new DevExpress.ExpressApp.ConditionalAppearance.ConditionalAppearanceModule(); - this.fileAttachmentsAspNetModule = new DevExpress.ExpressApp.FileAttachments.Web.FileAttachmentsAspNetModule(); - this.reportsModuleV2 = new DevExpress.ExpressApp.ReportsV2.ReportsModuleV2(); - this.reportsAspNetModuleV2 = new DevExpress.ExpressApp.ReportsV2.Web.ReportsAspNetModuleV2(); - this.schedulerModuleBase = new DevExpress.ExpressApp.Scheduler.SchedulerModuleBase(); - this.schedulerAspNetModule = new DevExpress.ExpressApp.Scheduler.Web.SchedulerAspNetModule(); - this.scriptRecorderModuleBase = new DevExpress.ExpressApp.ScriptRecorder.ScriptRecorderModuleBase(); - this.scriptRecorderAspNetModule = new DevExpress.ExpressApp.ScriptRecorder.Web.ScriptRecorderAspNetModule(); - this.treeListEditorsModuleBase = new DevExpress.ExpressApp.TreeListEditors.TreeListEditorsModuleBase(); - this.treeListEditorsAspNetModule = new DevExpress.ExpressApp.TreeListEditors.Web.TreeListEditorsAspNetModule(); - this.validationModule = new DevExpress.ExpressApp.Validation.ValidationModule(); - this.validationAspNetModule = new DevExpress.ExpressApp.Validation.Web.ValidationAspNetModule(); - ((System.ComponentModel.ISupportInitialize)(this)).BeginInit(); - // - // securityStrategyComplex1 - // - this.securityStrategyComplex1.Authentication = this.authenticationStandard1; - this.securityStrategyComplex1.RoleType = typeof(DevExpress.Persistent.BaseImpl.PermissionPolicy.PermissionPolicyRole); - this.securityStrategyComplex1.UserType = typeof(DevExpress.Persistent.BaseImpl.PermissionPolicy.PermissionPolicyUser); - // - // securityModule1 - // - this.securityModule1.UserType = typeof(DevExpress.Persistent.BaseImpl.PermissionPolicy.PermissionPolicyUser); - // - // authenticationStandard1 - // - this.authenticationStandard1.LogonParametersType = typeof(DevExpress.ExpressApp.Security.AuthenticationStandardLogonParameters); - // - // reportsModuleV2 - // - this.reportsModuleV2.EnableInplaceReports = true; - this.reportsModuleV2.ReportDataType = typeof(DevExpress.Persistent.BaseImpl.ReportDataV2); - this.reportsModuleV2.ShowAdditionalNavigation = false; - this.reportsAspNetModuleV2.ReportViewerType = DevExpress.ExpressApp.ReportsV2.Web.ReportViewerTypes.HTML5; - this.reportsModuleV2.ReportStoreMode = DevExpress.ExpressApp.ReportsV2.ReportStoreModes.XML; - // - // NonPersistentObjectsDemoAspNetApplication - // - this.ApplicationName = "NonPersistentObjectsDemo"; - this.CheckCompatibilityType = DevExpress.ExpressApp.CheckCompatibilityType.DatabaseSchema; - this.Modules.Add(this.module1); - this.Modules.Add(this.module2); - this.Modules.Add(this.module3); - this.Modules.Add(this.module4); - this.Modules.Add(this.securityModule1); - //this.Security = this.securityStrategyComplex1; - this.Modules.Add(this.objectsModule); - this.Modules.Add(this.cloneObjectModule); - this.Modules.Add(this.conditionalAppearanceModule); - this.Modules.Add(this.fileAttachmentsAspNetModule); - this.Modules.Add(this.reportsModuleV2); - this.Modules.Add(this.reportsAspNetModuleV2); - this.Modules.Add(this.schedulerModuleBase); - this.Modules.Add(this.schedulerAspNetModule); - this.Modules.Add(this.scriptRecorderModuleBase); - this.Modules.Add(this.scriptRecorderAspNetModule); - this.Modules.Add(this.treeListEditorsModuleBase); - this.Modules.Add(this.treeListEditorsAspNetModule); - this.Modules.Add(this.validationModule); - this.Modules.Add(this.validationAspNetModule); - this.DatabaseVersionMismatch += new System.EventHandler(this.NonPersistentObjectsDemoAspNetApplication_DatabaseVersionMismatch); - ((System.ComponentModel.ISupportInitialize)(this)).EndInit(); - - } - } -} diff --git a/CS/NonPersistentObjectsDemo.Win/Images/ReadMe.txt b/CS/NonPersistentObjectsDemo.Win/Images/ReadMe.txt deleted file mode 100644 index 230befc..0000000 --- a/CS/NonPersistentObjectsDemo.Win/Images/ReadMe.txt +++ /dev/null @@ -1,12 +0,0 @@ -Folder Description - -The "Images" project folder is intended for storing custom image files. - - -Relevant Documentation - -Add and Override Images -https://docs.devexpress.com/eXpressAppFramework/112792 - -Assign a Custom Image -https://docs.devexpress.com/eXpressAppFramework/112744 diff --git a/CS/NonPersistentObjectsDemo.Win/Model.xafml b/CS/NonPersistentObjectsDemo.Win/Model.xafml deleted file mode 100644 index d745362..0000000 --- a/CS/NonPersistentObjectsDemo.Win/Model.xafml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/CS/NonPersistentObjectsDemo.Win/NonPersistentObjectsDemo.Win.csproj b/CS/NonPersistentObjectsDemo.Win/NonPersistentObjectsDemo.Win.csproj deleted file mode 100644 index 4b25a18..0000000 --- a/CS/NonPersistentObjectsDemo.Win/NonPersistentObjectsDemo.Win.csproj +++ /dev/null @@ -1,349 +0,0 @@ - - - - - Debug - AnyCPU - {13E1ACF3-669C-4405-8260-E70BE603E197} - WinExe - Properties - NonPersistentObjectsDemo.Win - NonPersistentObjectsDemo.Win - v4.5.2 - ExpressApp.ico - 512 - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - true - bin\EasyTest\ - TRACE;DEBUG;EASYTEST - full - AnyCPU - prompt - - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - False - - - False - False - - - False - False - - - False - False - - - False - False - - - False - False - - - False - False - - - False - False - - - System - False - - - False - - - System.Data - False - - - System.Drawing - False - - - System.Windows.Forms - False - - - System.XML - False - - - - - - - - - - - - Always - - - - - - - Component - - - WinApplication.cs - - - Form - - - XafSplashScreen.cs - - - XafSplashScreen.cs - - - - - {72D644CD-C193-4572-B2E3-CA82819A1627} - NonPersistentObjectsDemo.Module.Win - True - - - {57ACDBDB-006E-43D3-9308-97857F2FF75D} - NonPersistentObjectsDemo.Module - True - - - - - diff --git a/CS/NonPersistentObjectsDemo.Win/Program.cs b/CS/NonPersistentObjectsDemo.Win/Program.cs deleted file mode 100644 index cec351a..0000000 --- a/CS/NonPersistentObjectsDemo.Win/Program.cs +++ /dev/null @@ -1,59 +0,0 @@ -using System; -using System.Configuration; -using System.Windows.Forms; - -using DevExpress.ExpressApp; -using DevExpress.ExpressApp.Security; -using DevExpress.ExpressApp.Win; -using DevExpress.Persistent.Base; -using DevExpress.Persistent.BaseImpl; -using DevExpress.XtraEditors; - -namespace NonPersistentObjectsDemo.Win { - static class Program { - /// - /// The main entry point for the application. - /// - [STAThread] - static void Main() { -#if EASYTEST - DevExpress.ExpressApp.Win.EasyTest.EasyTestRemotingRegistration.Register(); -#endif - WindowsFormsSettings.LoadApplicationSettings(); - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); - DevExpress.Utils.ToolTipController.DefaultController.ToolTipType = DevExpress.Utils.ToolTipType.SuperTip; - DevExpress.ExpressApp.BaseObjectSpace.ThrowExceptionForNotRegisteredEntityType = true; - EditModelPermission.AlwaysGranted = System.Diagnostics.Debugger.IsAttached; - if(Tracing.GetFileLocationFromSettings() == DevExpress.Persistent.Base.FileLocation.CurrentUserApplicationDataFolder) { - Tracing.LocalUserAppDataPath = Application.LocalUserAppDataPath; - } - Tracing.Initialize(); - NonPersistentObjectsDemoWindowsFormsApplication winApplication = new NonPersistentObjectsDemoWindowsFormsApplication(); - //SecurityStrategy security = (SecurityStrategy)winApplication.Security; - //security.RegisterXPOAdapterProviders(); - if(ConfigurationManager.ConnectionStrings["ConnectionString"] != null) { - winApplication.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; - } -#if EASYTEST - if(ConfigurationManager.ConnectionStrings["EasyTestConnectionString"] != null) { - winApplication.ConnectionString = ConfigurationManager.ConnectionStrings["EasyTestConnectionString"].ConnectionString; - } -#endif - winApplication.ConnectionString = DevExpress.ExpressApp.Xpo.InMemoryDataStoreProvider.ConnectionString; -#if DEBUG - if(System.Diagnostics.Debugger.IsAttached && winApplication.CheckCompatibilityType == CheckCompatibilityType.DatabaseSchema) { - winApplication.DatabaseUpdateMode = DatabaseUpdateMode.UpdateDatabaseAlways; - } -#endif - try { - winApplication.Setup(); - winApplication.Start(); - } - catch(Exception e) { - winApplication.StopSplash(); - winApplication.HandleException(e); - } - } - } -} diff --git a/CS/NonPersistentObjectsDemo.Win/Properties/AssemblyInfo.cs b/CS/NonPersistentObjectsDemo.Win/Properties/AssemblyInfo.cs deleted file mode 100644 index 80cdb20..0000000 --- a/CS/NonPersistentObjectsDemo.Win/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("NonPersistentObjectsDemo.Win")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("NonPersistentObjectsDemo.Win")] -[assembly: AssemblyCopyright("Copyright © 2020")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("720e2161-0047-4cfe-a68c-433063a3ae53")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -[assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/CS/NonPersistentObjectsDemo.Win/ReadMe.txt b/CS/NonPersistentObjectsDemo.Win/ReadMe.txt deleted file mode 100644 index fd287a6..0000000 --- a/CS/NonPersistentObjectsDemo.Win/ReadMe.txt +++ /dev/null @@ -1,31 +0,0 @@ -Project Description - -This project implements a WinForms application. The root project folder -contains the WinApplication.cs(vb) file with the class that inherits -WinApplication. This class can be designed with the Application Designer that -allows you to view and customize application components: referenced modules, -security settings, data connection. Additionally, the root folder contains -Application Model difference files (XAFML files) that keep application settings -specific for the current application. Differences files can be designed with -the Model Editor. - - -Relevant Documentation - -Application Solution Components -https://docs.devexpress.com/eXpressAppFramework/112569 - -WinApplication Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Win.WinApplication - -XafApplication Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.XafApplication - -Application Designer -https://docs.devexpress.com/eXpressAppFramework/112827 - -Application Model -https://docs.devexpress.com/eXpressAppFramework/112579 - -Model Editor -https://docs.devexpress.com/eXpressAppFramework/112582 \ No newline at end of file diff --git a/CS/NonPersistentObjectsDemo.Win/WinApplication.Designer.cs b/CS/NonPersistentObjectsDemo.Win/WinApplication.Designer.cs deleted file mode 100644 index b1da85b..0000000 --- a/CS/NonPersistentObjectsDemo.Win/WinApplication.Designer.cs +++ /dev/null @@ -1,127 +0,0 @@ -namespace NonPersistentObjectsDemo.Win { - partial class NonPersistentObjectsDemoWindowsFormsApplication { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) { - if(disposing && (components != null)) { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Component Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() { - this.module1 = new DevExpress.ExpressApp.SystemModule.SystemModule(); - this.module2 = new DevExpress.ExpressApp.Win.SystemModule.SystemWindowsFormsModule(); - this.module3 = new NonPersistentObjectsDemo.Module.NonPersistentObjectsDemoModule(); - this.module4 = new NonPersistentObjectsDemo.Module.Win.NonPersistentObjectsDemoWindowsFormsModule(); - this.securityModule1 = new DevExpress.ExpressApp.Security.SecurityModule(); - this.securityStrategyComplex1 = new DevExpress.ExpressApp.Security.SecurityStrategyComplex(); - this.securityStrategyComplex1.SupportNavigationPermissionsForTypes = false; - this.objectsModule = new DevExpress.ExpressApp.Objects.BusinessClassLibraryCustomizationModule(); - this.cloneObjectModule = new DevExpress.ExpressApp.CloneObject.CloneObjectModule(); - this.conditionalAppearanceModule = new DevExpress.ExpressApp.ConditionalAppearance.ConditionalAppearanceModule(); - this.fileAttachmentsWindowsFormsModule = new DevExpress.ExpressApp.FileAttachments.Win.FileAttachmentsWindowsFormsModule(); - this.reportsModuleV2 = new DevExpress.ExpressApp.ReportsV2.ReportsModuleV2(); - this.reportsWindowsFormsModuleV2 = new DevExpress.ExpressApp.ReportsV2.Win.ReportsWindowsFormsModuleV2(); - this.schedulerModuleBase = new DevExpress.ExpressApp.Scheduler.SchedulerModuleBase(); - this.schedulerWindowsFormsModule = new DevExpress.ExpressApp.Scheduler.Win.SchedulerWindowsFormsModule(); - this.scriptRecorderModuleBase = new DevExpress.ExpressApp.ScriptRecorder.ScriptRecorderModuleBase(); - this.scriptRecorderWindowsFormsModule = new DevExpress.ExpressApp.ScriptRecorder.Win.ScriptRecorderWindowsFormsModule(); - this.treeListEditorsModuleBase = new DevExpress.ExpressApp.TreeListEditors.TreeListEditorsModuleBase(); - this.treeListEditorsWindowsFormsModule = new DevExpress.ExpressApp.TreeListEditors.Win.TreeListEditorsWindowsFormsModule(); - this.validationModule = new DevExpress.ExpressApp.Validation.ValidationModule(); - this.validationWindowsFormsModule = new DevExpress.ExpressApp.Validation.Win.ValidationWindowsFormsModule(); - this.authenticationStandard1 = new DevExpress.ExpressApp.Security.AuthenticationStandard(); - ((System.ComponentModel.ISupportInitialize)(this)).BeginInit(); - // - // securityStrategyComplex1 - // - this.securityStrategyComplex1.Authentication = this.authenticationStandard1; - this.securityStrategyComplex1.RoleType = typeof(DevExpress.Persistent.BaseImpl.PermissionPolicy.PermissionPolicyRole); - this.securityStrategyComplex1.UserType = typeof(DevExpress.Persistent.BaseImpl.PermissionPolicy.PermissionPolicyUser); - // - // securityModule1 - // - this.securityModule1.UserType = typeof(DevExpress.Persistent.BaseImpl.PermissionPolicy.PermissionPolicyUser); - // - // authenticationStandard1 - // - this.authenticationStandard1.LogonParametersType = typeof(DevExpress.ExpressApp.Security.AuthenticationStandardLogonParameters); - // - // reportsModuleV2 - // - this.reportsModuleV2.EnableInplaceReports = true; - this.reportsModuleV2.ReportDataType = typeof(DevExpress.Persistent.BaseImpl.ReportDataV2); - this.reportsModuleV2.ShowAdditionalNavigation = false; - this.reportsModuleV2.ReportStoreMode = DevExpress.ExpressApp.ReportsV2.ReportStoreModes.XML; - // - // NonPersistentObjectsDemoWindowsFormsApplication - // - this.ApplicationName = "NonPersistentObjectsDemo"; - this.CheckCompatibilityType = DevExpress.ExpressApp.CheckCompatibilityType.DatabaseSchema; - this.Modules.Add(this.module1); - this.Modules.Add(this.module2); - this.Modules.Add(this.module3); - this.Modules.Add(this.module4); - this.Modules.Add(this.securityModule1); - //this.Security = this.securityStrategyComplex1; - this.Modules.Add(this.objectsModule); - this.Modules.Add(this.cloneObjectModule); - this.Modules.Add(this.conditionalAppearanceModule); - this.Modules.Add(this.fileAttachmentsWindowsFormsModule); - this.Modules.Add(this.reportsModuleV2); - this.Modules.Add(this.reportsWindowsFormsModuleV2); - this.Modules.Add(this.schedulerModuleBase); - this.Modules.Add(this.schedulerWindowsFormsModule); - this.Modules.Add(this.scriptRecorderModuleBase); - this.Modules.Add(this.scriptRecorderWindowsFormsModule); - this.Modules.Add(this.treeListEditorsModuleBase); - this.Modules.Add(this.treeListEditorsWindowsFormsModule); - this.Modules.Add(this.validationModule); - this.Modules.Add(this.validationWindowsFormsModule); - this.UseOldTemplates = false; - this.DatabaseVersionMismatch += new System.EventHandler(this.NonPersistentObjectsDemoWindowsFormsApplication_DatabaseVersionMismatch); - this.CustomizeLanguagesList += new System.EventHandler(this.NonPersistentObjectsDemoWindowsFormsApplication_CustomizeLanguagesList); - - ((System.ComponentModel.ISupportInitialize)(this)).EndInit(); - - } - - #endregion - - private DevExpress.ExpressApp.SystemModule.SystemModule module1; - private DevExpress.ExpressApp.Win.SystemModule.SystemWindowsFormsModule module2; - private NonPersistentObjectsDemo.Module.NonPersistentObjectsDemoModule module3; - private NonPersistentObjectsDemo.Module.Win.NonPersistentObjectsDemoWindowsFormsModule module4; - private DevExpress.ExpressApp.Security.SecurityModule securityModule1; - private DevExpress.ExpressApp.Security.SecurityStrategyComplex securityStrategyComplex1; - private DevExpress.ExpressApp.Security.AuthenticationStandard authenticationStandard1; - private DevExpress.ExpressApp.Objects.BusinessClassLibraryCustomizationModule objectsModule; - private DevExpress.ExpressApp.CloneObject.CloneObjectModule cloneObjectModule; - private DevExpress.ExpressApp.ConditionalAppearance.ConditionalAppearanceModule conditionalAppearanceModule; - private DevExpress.ExpressApp.FileAttachments.Win.FileAttachmentsWindowsFormsModule fileAttachmentsWindowsFormsModule; - private DevExpress.ExpressApp.ReportsV2.ReportsModuleV2 reportsModuleV2; - private DevExpress.ExpressApp.ReportsV2.Win.ReportsWindowsFormsModuleV2 reportsWindowsFormsModuleV2; - private DevExpress.ExpressApp.Scheduler.SchedulerModuleBase schedulerModuleBase; - private DevExpress.ExpressApp.Scheduler.Win.SchedulerWindowsFormsModule schedulerWindowsFormsModule; - private DevExpress.ExpressApp.ScriptRecorder.ScriptRecorderModuleBase scriptRecorderModuleBase; - private DevExpress.ExpressApp.ScriptRecorder.Win.ScriptRecorderWindowsFormsModule scriptRecorderWindowsFormsModule; - private DevExpress.ExpressApp.TreeListEditors.TreeListEditorsModuleBase treeListEditorsModuleBase; - private DevExpress.ExpressApp.TreeListEditors.Win.TreeListEditorsWindowsFormsModule treeListEditorsWindowsFormsModule; - private DevExpress.ExpressApp.Validation.ValidationModule validationModule; - private DevExpress.ExpressApp.Validation.Win.ValidationWindowsFormsModule validationWindowsFormsModule; - } -} diff --git a/CS/NonPersistentObjectsDemo.Win/WinApplication.cs b/CS/NonPersistentObjectsDemo.Win/WinApplication.cs deleted file mode 100644 index 139bce5..0000000 --- a/CS/NonPersistentObjectsDemo.Win/WinApplication.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System; -using System.ComponentModel; -using DevExpress.ExpressApp; -using DevExpress.ExpressApp.Win; -using System.Collections.Generic; -using DevExpress.ExpressApp.Updating; -using DevExpress.ExpressApp.Win.Utils; -using DevExpress.ExpressApp.Xpo; -using DevExpress.ExpressApp.Security; -using DevExpress.ExpressApp.Security.ClientServer; - -namespace NonPersistentObjectsDemo.Win { - // For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Win.WinApplication._members - public partial class NonPersistentObjectsDemoWindowsFormsApplication : WinApplication { - #region Default XAF configuration options (https://www.devexpress.com/kb=T501418) - static NonPersistentObjectsDemoWindowsFormsApplication() { - DevExpress.Persistent.Base.PasswordCryptographer.EnableRfc2898 = true; - DevExpress.Persistent.Base.PasswordCryptographer.SupportLegacySha512 = false; - DevExpress.ExpressApp.Utils.ImageLoader.Instance.UseSvgImages = true; - } - private void InitializeDefaults() { - LinkNewObjectToParentImmediately = false; - OptimizedControllersCreation = true; - UseLightStyle = true; - SplashScreen = new DXSplashScreen(typeof(XafSplashScreen), new DefaultOverlayFormOptions()); - ExecuteStartupLogicBeforeClosingLogonWindow = true; - } - #endregion - public NonPersistentObjectsDemoWindowsFormsApplication() { - InitializeComponent(); - InitializeDefaults(); - } - protected override void CreateDefaultObjectSpaceProvider(CreateCustomObjectSpaceProviderEventArgs args) { - //args.ObjectSpaceProviders.Add(new SecuredObjectSpaceProvider((SecurityStrategyComplex)Security, XPObjectSpaceProvider.GetDataStoreProvider(args.ConnectionString, args.Connection, true), false)); - args.ObjectSpaceProviders.Add(new XPObjectSpaceProvider(XPObjectSpaceProvider.GetDataStoreProvider(args.ConnectionString, args.Connection, true), false)); - args.ObjectSpaceProviders.Add(new NonPersistentObjectSpaceProvider(TypesInfo, null)); - } - private void NonPersistentObjectsDemoWindowsFormsApplication_CustomizeLanguagesList(object sender, CustomizeLanguagesListEventArgs e) { - string userLanguageName = System.Threading.Thread.CurrentThread.CurrentUICulture.Name; - if(userLanguageName != "en-US" && e.Languages.IndexOf(userLanguageName) == -1) { - e.Languages.Add(userLanguageName); - } - } - private void NonPersistentObjectsDemoWindowsFormsApplication_DatabaseVersionMismatch(object sender, DevExpress.ExpressApp.DatabaseVersionMismatchEventArgs e) { -#if EASYTEST - e.Updater.Update(); - e.Handled = true; -#else - if(System.Diagnostics.Debugger.IsAttached) { - e.Updater.Update(); - e.Handled = true; - } - else { - string message = "The application cannot connect to the specified database, " + - "because the database doesn't exist, its version is older " + - "than that of the application or its schema does not match " + - "the ORM data model structure. To avoid this error, use one " + - "of the solutions from the https://www.devexpress.com/kb=T367835 KB Article."; - - if(e.CompatibilityError != null && e.CompatibilityError.Exception != null) { - message += "\r\n\r\nInner exception: " + e.CompatibilityError.Exception.Message; - } - throw new InvalidOperationException(message); - } -#endif - } - } -} diff --git a/CS/NonPersistentObjectsFilteringDemo.sln b/CS/NonPersistentObjectsFilteringDemo.sln deleted file mode 100644 index b6f8e99..0000000 --- a/CS/NonPersistentObjectsFilteringDemo.sln +++ /dev/null @@ -1,60 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.28307.1000 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NonPersistentObjectsDemo.Module", "NonPersistentObjectsDemo.Module\NonPersistentObjectsDemo.Module.csproj", "{57ACDBDB-006E-43D3-9308-97857F2FF75D}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NonPersistentObjectsDemo.Module.Web", "NonPersistentObjectsDemo.Module.Web\NonPersistentObjectsDemo.Module.Web.csproj", "{EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NonPersistentObjectsDemo.Web", "NonPersistentObjectsDemo.Web\NonPersistentObjectsDemo.Web.csproj", "{8C3026D1-113C-4B88-9F91-236753790C60}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NonPersistentObjectsDemo.Module.Win", "NonPersistentObjectsDemo.Module.Win\NonPersistentObjectsDemo.Module.Win.csproj", "{72D644CD-C193-4572-B2E3-CA82819A1627}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NonPersistentObjectsDemo.Win", "NonPersistentObjectsDemo.Win\NonPersistentObjectsDemo.Win.csproj", "{13E1ACF3-669C-4405-8260-E70BE603E197}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - EasyTest|Any CPU = EasyTest|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {57ACDBDB-006E-43D3-9308-97857F2FF75D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {57ACDBDB-006E-43D3-9308-97857F2FF75D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {57ACDBDB-006E-43D3-9308-97857F2FF75D}.EasyTest|Any CPU.ActiveCfg = EasyTest|Any CPU - {57ACDBDB-006E-43D3-9308-97857F2FF75D}.EasyTest|Any CPU.Build.0 = EasyTest|Any CPU - {57ACDBDB-006E-43D3-9308-97857F2FF75D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {57ACDBDB-006E-43D3-9308-97857F2FF75D}.Release|Any CPU.Build.0 = Release|Any CPU - {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B}.EasyTest|Any CPU.ActiveCfg = EasyTest|Any CPU - {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B}.EasyTest|Any CPU.Build.0 = EasyTest|Any CPU - {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B}.Release|Any CPU.Build.0 = Release|Any CPU - {8C3026D1-113C-4B88-9F91-236753790C60}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8C3026D1-113C-4B88-9F91-236753790C60}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8C3026D1-113C-4B88-9F91-236753790C60}.EasyTest|Any CPU.ActiveCfg = EasyTest|Any CPU - {8C3026D1-113C-4B88-9F91-236753790C60}.EasyTest|Any CPU.Build.0 = EasyTest|Any CPU - {8C3026D1-113C-4B88-9F91-236753790C60}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8C3026D1-113C-4B88-9F91-236753790C60}.Release|Any CPU.Build.0 = Release|Any CPU - {72D644CD-C193-4572-B2E3-CA82819A1627}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {72D644CD-C193-4572-B2E3-CA82819A1627}.Debug|Any CPU.Build.0 = Debug|Any CPU - {72D644CD-C193-4572-B2E3-CA82819A1627}.EasyTest|Any CPU.ActiveCfg = EasyTest|Any CPU - {72D644CD-C193-4572-B2E3-CA82819A1627}.EasyTest|Any CPU.Build.0 = EasyTest|Any CPU - {72D644CD-C193-4572-B2E3-CA82819A1627}.Release|Any CPU.ActiveCfg = Release|Any CPU - {72D644CD-C193-4572-B2E3-CA82819A1627}.Release|Any CPU.Build.0 = Release|Any CPU - {13E1ACF3-669C-4405-8260-E70BE603E197}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {13E1ACF3-669C-4405-8260-E70BE603E197}.Debug|Any CPU.Build.0 = Debug|Any CPU - {13E1ACF3-669C-4405-8260-E70BE603E197}.EasyTest|Any CPU.ActiveCfg = EasyTest|Any CPU - {13E1ACF3-669C-4405-8260-E70BE603E197}.EasyTest|Any CPU.Build.0 = EasyTest|Any CPU - {13E1ACF3-669C-4405-8260-E70BE603E197}.Release|Any CPU.ActiveCfg = Release|Any CPU - {13E1ACF3-669C-4405-8260-E70BE603E197}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {BCF45AD8-3F2F-4887-832F-CBD5AE72BD68} - EndGlobalSection -EndGlobal diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/App.razor b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/App.razor new file mode 100644 index 0000000..3b8af49 --- /dev/null +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/App.razor @@ -0,0 +1,11 @@ + + + + + + + Not found +

Sorry, there's nothing at this address.

+
+
+
diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/BlazorApplication.cs b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/BlazorApplication.cs new file mode 100644 index 0000000..a9d47b8 --- /dev/null +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/BlazorApplication.cs @@ -0,0 +1,47 @@ +using DevExpress.ExpressApp; +using DevExpress.ExpressApp.ApplicationBuilder; +using DevExpress.ExpressApp.Blazor; +using DevExpress.ExpressApp.SystemModule; +using DevExpress.ExpressApp.Xpo; +using NonPersistentFiltering.Blazor.Server.Services; + +namespace NonPersistentFiltering.Blazor.Server; + +public class NonPersistentFilteringBlazorApplication : BlazorApplication { + public NonPersistentFilteringBlazorApplication() { + ApplicationName = "NonPersistentFiltering"; + CheckCompatibilityType = DevExpress.ExpressApp.CheckCompatibilityType.DatabaseSchema; + DatabaseVersionMismatch += NonPersistentFilteringBlazorApplication_DatabaseVersionMismatch; + } + protected override void OnSetupStarted() { + base.OnSetupStarted(); +#if DEBUG + if(System.Diagnostics.Debugger.IsAttached && CheckCompatibilityType == CheckCompatibilityType.DatabaseSchema) { + DatabaseUpdateMode = DatabaseUpdateMode.UpdateDatabaseAlways; + } +#endif + } + private void NonPersistentFilteringBlazorApplication_DatabaseVersionMismatch(object sender, DatabaseVersionMismatchEventArgs e) { +#if EASYTEST + e.Updater.Update(); + e.Handled = true; +#else + if(System.Diagnostics.Debugger.IsAttached) { + e.Updater.Update(); + e.Handled = true; + } + else { + string message = "The application cannot connect to the specified database, " + + "because the database doesn't exist, its version is older " + + "than that of the application or its schema does not match " + + "the ORM data model structure. To avoid this error, use one " + + "of the solutions from the https://www.devexpress.com/kb=T367835 KB Article."; + + if(e.CompatibilityError != null && e.CompatibilityError.Exception != null) { + message += "\r\n\r\nInner exception: " + e.CompatibilityError.Exception.Message; + } + throw new InvalidOperationException(message); + } +#endif + } +} diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/BlazorModule.cs b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/BlazorModule.cs new file mode 100644 index 0000000..e14c3e6 --- /dev/null +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/BlazorModule.cs @@ -0,0 +1,26 @@ +using System.ComponentModel; +using DevExpress.ExpressApp; +using DevExpress.ExpressApp.DC; +using DevExpress.ExpressApp.Model; +using DevExpress.ExpressApp.Editors; +using DevExpress.ExpressApp.Actions; +using DevExpress.ExpressApp.Updating; +using DevExpress.ExpressApp.Model.Core; +using DevExpress.ExpressApp.Model.DomainLogics; +using DevExpress.ExpressApp.Model.NodeGenerators; +using DevExpress.Persistent.BaseImpl; + +namespace NonPersistentFiltering.Blazor.Server; + +[ToolboxItemFilter("Xaf.Platform.Blazor")] +// For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase. +public sealed class NonPersistentFilteringBlazorModule : ModuleBase { + public NonPersistentFilteringBlazorModule() { + } + public override IEnumerable GetModuleUpdaters(IObjectSpace objectSpace, Version versionFromDB) { + return ModuleUpdater.EmptyModuleUpdaters; + } + public override void Setup(XafApplication application) { + base.Setup(application); + } +} diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Controllers/ReadMe.txt b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Controllers/ReadMe.txt new file mode 100644 index 0000000..42f3017 --- /dev/null +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Controllers/ReadMe.txt @@ -0,0 +1,25 @@ +Folder Description + +The "Controllers" project folder is intended for storing Blazor-specific Controller classes +that can change the default XAF application flow and add new features. + + +Relevant Documentation + +Controllers and Actions +https://docs.devexpress.com/eXpressAppFramework/112623 + +Implement Custom Controllers +https://docs.devexpress.com/eXpressAppFramework/112621 + +Define the Scope of Controllers and Actions +https://docs.devexpress.com/eXpressAppFramework/113103 + +Ways to Show a View +https://docs.devexpress.com/eXpressAppFramework/112803 + +Ways to Implement Business Logic +https://docs.devexpress.com/eXpressAppFramework/113710 + +Debugging, Unit and Functional Testing +https://docs.devexpress.com/eXpressAppFramework/112572 diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Editors/ReadMe.txt b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Editors/ReadMe.txt new file mode 100644 index 0000000..827fd95 --- /dev/null +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Editors/ReadMe.txt @@ -0,0 +1,25 @@ +Folder Description + +This project folder is intended for storing custom Blazor List Editors, +Property Editors and View Items. + + +Relevant Documentation + +Using a Custom Control that is not Integrated by Default +https://docs.devexpress.com/eXpressAppFramework/113610 + +Ways to Access UI Elements and Their Controls +https://docs.devexpress.com/eXpressAppFramework/120092 + +Views +https://docs.devexpress.com/eXpressAppFramework/112611 + +List Editors +https://docs.devexpress.com/eXpressAppFramework/113189 + +View Items +https://docs.devexpress.com/eXpressAppFramework/112612 + +Debugging, Unit and Functional Testing +https://docs.devexpress.com/eXpressAppFramework/112572 diff --git a/CS/NonPersistentObjectsDemo.Module.Web/Images/ReadMe.txt b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Images/ReadMe.txt similarity index 100% rename from CS/NonPersistentObjectsDemo.Module.Web/Images/ReadMe.txt rename to CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Images/ReadMe.txt diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Model.xafml b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Model.xafml new file mode 100644 index 0000000..2877e3b --- /dev/null +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Model.xafml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/NonPersistentFiltering.Blazor.Server.csproj b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/NonPersistentFiltering.Blazor.Server.csproj new file mode 100644 index 0000000..9bf7dd6 --- /dev/null +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/NonPersistentFiltering.Blazor.Server.csproj @@ -0,0 +1,26 @@ + + + net6.0 + false + false + 1.0.* + 1.0.0.0 + Debug;Release;EasyTest + enable + + + + + + + Always + + + + + + + + + + diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Pages/_Host.cshtml b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Pages/_Host.cshtml new file mode 100644 index 0000000..f3994ab --- /dev/null +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Pages/_Host.cshtml @@ -0,0 +1,55 @@ +@page "/" +@namespace NonPersistentFiltering.Blazor.Server +@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers +@using DevExpress.ExpressApp.Blazor.Components + + + + + + + + + + NonPersistentFiltering + + + + + @{ + string userAgent = Request.Headers["User-Agent"]; + bool isIE = userAgent.Contains("MSIE") || userAgent.Contains("Trident"); + } + @if(isIE) { + +
+
+ +
+
Internet Explorer is not supported.
+

NonPersistentFiltering cannot be loaded in Internet Explorer.
Please use a different browser.

+
+
+
+ } + else { + + + + + + + + + + + + +
+ +
+ + + } + + diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Program.cs b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Program.cs new file mode 100644 index 0000000..253f3b7 --- /dev/null +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Program.cs @@ -0,0 +1,50 @@ +using System.Reflection; +using DevExpress.ExpressApp; +using DevExpress.ExpressApp.Blazor.DesignTime; +using DevExpress.ExpressApp.Blazor.Services; +using DevExpress.ExpressApp.Design; +using DevExpress.ExpressApp.Utils; + +namespace NonPersistentFiltering.Blazor.Server; + +public class Program : IDesignTimeApplicationFactory { + private static bool ContainsArgument(string[] args, string argument) { + return args.Any(arg => arg.TrimStart('/').TrimStart('-').ToLower() == argument.ToLower()); + } + public static int Main(string[] args) { + if(ContainsArgument(args, "help") || ContainsArgument(args, "h")) { + Console.WriteLine("Updates the database when its version does not match the application's version."); + Console.WriteLine(); + Console.WriteLine($" {Assembly.GetExecutingAssembly().GetName().Name}.exe --updateDatabase [--forceUpdate --silent]"); + Console.WriteLine(); + Console.WriteLine("--forceUpdate - Marks that the database must be updated whether its version matches the application's version or not."); + Console.WriteLine("--silent - Marks that database update proceeds automatically and does not require any interaction with the user."); + Console.WriteLine(); + Console.WriteLine($"Exit codes: 0 - {DBUpdaterStatus.UpdateCompleted}"); + Console.WriteLine($" 1 - {DBUpdaterStatus.UpdateError}"); + Console.WriteLine($" 2 - {DBUpdaterStatus.UpdateNotNeeded}"); + } + else { + DevExpress.ExpressApp.FrameworkSettings.DefaultSettingsCompatibilityMode = DevExpress.ExpressApp.FrameworkSettingsCompatibilityMode.Latest; + IHost host = CreateHostBuilder(args).Build(); + if(ContainsArgument(args, "updateDatabase")) { + using(var serviceScope = host.Services.CreateScope()) { + return serviceScope.ServiceProvider.GetRequiredService().Update(ContainsArgument(args, "forceUpdate"), ContainsArgument(args, "silent")); + } + } + else { + host.Run(); + } + } + return 0; + } + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webBuilder => { + webBuilder.UseStartup(); + }); + XafApplication IDesignTimeApplicationFactory.Create() { + IHostBuilder hostBuilder = CreateHostBuilder(Array.Empty()); + return DesignTimeApplicationFactoryHelper.Create(hostBuilder); + } +} diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Properties/launchSettings.json b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Properties/launchSettings.json new file mode 100644 index 0000000..87a1107 --- /dev/null +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Properties/launchSettings.json @@ -0,0 +1,27 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:65201", + "sslPort": 44318 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "NonPersistentFiltering.Blazor.Server": { + "commandName": "Project", + "launchBrowser": true, + "applicationUrl": "https://localhost:5001;http://localhost:5000", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} \ No newline at end of file diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/ReadMe.txt b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/ReadMe.txt new file mode 100644 index 0000000..a229505 --- /dev/null +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/ReadMe.txt @@ -0,0 +1,40 @@ +Project Description + +This project implements an ASP.NET Core Blazor Server application (https://docs.microsoft.com/en-us/aspnet/core/blazor/). +The root project folder contains the BlazorApplication.cs file with the class that inherits +BlazorApplication. This class allows you to view and customize application components: referenced modules, +security settings, data connection. Additionally, the root folder contains +Application Model difference files (XAFML files) that keep settings +specific to the current application. Difference files can be customized in code +or in the Model Editor. +The appsettings.json file contains database connection, logging, and theme settings (https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration). + + +Relevant Documentation + +Application Solution Components +https://docs.devexpress.com/eXpressAppFramework/112569 + +Debugging, Testing and Error Handling +https://docs.devexpress.com/eXpressAppFramework/112572 + +XafApplication Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.XafApplication + +Application Model (UI Settings Storage) +https://docs.devexpress.com/eXpressAppFramework/112579 + +Model Editor +https://docs.devexpress.com/eXpressAppFramework/112582 + +ASP.NET Core Blazor UI +https://docs.devexpress.com/eXpressAppFramework/401675/overview/supported-ui-platforms#aspnet-core-blazor-ui + +Frequently Asked Questions - Blazor UI (FAQ) +https://docs.devexpress.com/eXpressAppFramework/403277/support-qa-troubleshooting/frequently-asked-questions-blazor-faq + +Backend WebApi Service +https://docs.devexpress.com/eXpressAppFramework/403394/backend-web-api-service + +XAF Community Extensions +https://www.devexpress.com/products/net/application_framework/#extensions \ No newline at end of file diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Services/CircuitHandlerProxy.cs b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Services/CircuitHandlerProxy.cs new file mode 100644 index 0000000..0440c50 --- /dev/null +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Services/CircuitHandlerProxy.cs @@ -0,0 +1,23 @@ +using DevExpress.ExpressApp.Blazor.Services; +using Microsoft.AspNetCore.Components.Server.Circuits; + +namespace NonPersistentFiltering.Blazor.Server.Services; + +internal class CircuitHandlerProxy : CircuitHandler { + private readonly IScopedCircuitHandler scopedCircuitHandler; + public CircuitHandlerProxy(IScopedCircuitHandler scopedCircuitHandler) { + this.scopedCircuitHandler = scopedCircuitHandler; + } + public override Task OnCircuitOpenedAsync(Circuit circuit, CancellationToken cancellationToken) { + return scopedCircuitHandler.OnCircuitOpenedAsync(cancellationToken); + } + public override Task OnConnectionUpAsync(Circuit circuit, CancellationToken cancellationToken) { + return scopedCircuitHandler.OnConnectionUpAsync(cancellationToken); + } + public override Task OnCircuitClosedAsync(Circuit circuit, CancellationToken cancellationToken) { + return scopedCircuitHandler.OnCircuitClosedAsync(cancellationToken); + } + public override Task OnConnectionDownAsync(Circuit circuit, CancellationToken cancellationToken) { + return scopedCircuitHandler.OnConnectionDownAsync(cancellationToken); + } +} diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Services/ProxyHubConnectionHandler.cs b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Services/ProxyHubConnectionHandler.cs new file mode 100644 index 0000000..708f209 --- /dev/null +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Services/ProxyHubConnectionHandler.cs @@ -0,0 +1,27 @@ +using DevExpress.ExpressApp.Blazor.Services; +using Microsoft.AspNetCore.Connections; +using Microsoft.AspNetCore.SignalR; +using Microsoft.Extensions.Options; + +namespace NonPersistentFiltering.Blazor.Server.Services; + +internal class ProxyHubConnectionHandler : HubConnectionHandler where THub : Hub { + private readonly IValueManagerStorageContainerInitializer storageContainerInitializer; + public ProxyHubConnectionHandler( + HubLifetimeManager lifetimeManager, + IHubProtocolResolver protocolResolver, + IOptions globalHubOptions, + IOptions> hubOptions, + ILoggerFactory loggerFactory, + IUserIdProvider userIdProvider, + IServiceScopeFactory serviceScopeFactory, + IValueManagerStorageContainerInitializer storageContainerAccessor) + : base(lifetimeManager, protocolResolver, globalHubOptions, hubOptions, loggerFactory, userIdProvider, serviceScopeFactory) { + this.storageContainerInitializer = storageContainerAccessor; + } + + public override Task OnConnectedAsync(ConnectionContext connection) { + storageContainerInitializer.Initialize(); + return base.OnConnectedAsync(connection); + } +} diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Startup.cs b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Startup.cs new file mode 100644 index 0000000..e7d48b6 --- /dev/null +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/Startup.cs @@ -0,0 +1,76 @@ +using DevExpress.ExpressApp.ApplicationBuilder; +using DevExpress.ExpressApp.Blazor.ApplicationBuilder; +using DevExpress.ExpressApp.Blazor.Services; +using DevExpress.Persistent.Base; +using Microsoft.AspNetCore.Authentication.Cookies; +using Microsoft.AspNetCore.Components.Server.Circuits; +using DevExpress.ExpressApp.Xpo; +using NonPersistentFiltering.Blazor.Server.Services; +using DevExpress.ExpressApp.Core; + +namespace NonPersistentFiltering.Blazor.Server; + +public class Startup { + public Startup(IConfiguration configuration) { + Configuration = configuration; + } + + public IConfiguration Configuration { get; } + + // This method gets called by the runtime. Use this method to add services to the container. + // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 + public void ConfigureServices(IServiceCollection services) { + services.AddSingleton(typeof(Microsoft.AspNetCore.SignalR.HubConnectionHandler<>), typeof(ProxyHubConnectionHandler<>)); + + services.AddRazorPages(); + services.AddServerSideBlazor(); + services.AddHttpContextAccessor(); + services.AddScoped(); + services.AddXaf(Configuration, builder => { + builder.UseApplication(); + builder.Modules + .Add() + .Add(); + builder.ObjectSpaceProviders + .AddXpo((serviceProvider, options) => { + string connectionString = null; + if(Configuration.GetConnectionString("ConnectionString") != null) { + connectionString = Configuration.GetConnectionString("ConnectionString"); + } +#if EASYTEST + if(Configuration.GetConnectionString("EasyTestConnectionString") != null) { + connectionString = Configuration.GetConnectionString("EasyTestConnectionString"); + } +#endif + ArgumentNullException.ThrowIfNull(connectionString); + options.ConnectionString = connectionString; + options.ThreadSafe = true; + options.UseSharedDataStoreProvider = true; + }) + .AddNonPersistent(); + }); + } + + // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { + if(env.IsDevelopment()) { + app.UseDeveloperExceptionPage(); + } + else { + app.UseExceptionHandler("/Error"); + // The default HSTS value is 30 days. To change this for production scenarios, see: https://aka.ms/aspnetcore-hsts. + app.UseHsts(); + } + app.UseHttpsRedirection(); + app.UseRequestLocalization(); + app.UseStaticFiles(); + app.UseRouting(); + app.UseXaf(); + app.UseEndpoints(endpoints => { + endpoints.MapXafEndpoints(); + endpoints.MapBlazorHub(); + endpoints.MapFallbackToPage("/_Host"); + endpoints.MapControllers(); + }); + } +} diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/_Imports.razor b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/_Imports.razor new file mode 100644 index 0000000..3deb47f --- /dev/null +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/_Imports.razor @@ -0,0 +1,11 @@ +@using System.Net.Http +@using Microsoft.AspNetCore.Authorization +@using Microsoft.AspNetCore.Components.Authorization +@using Microsoft.AspNetCore.Components.Forms +@using Microsoft.AspNetCore.Components.Routing +@using Microsoft.AspNetCore.Components.Web +@using Microsoft.AspNetCore.Components.Web.Virtualization +@using Microsoft.JSInterop +@using DevExpress.Blazor +@using DevExpress.ExpressApp.Blazor.Components +@using NonPersistentFiltering.Blazor.Server diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/appsettings.Development.json b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/appsettings.Development.json new file mode 100644 index 0000000..437008f --- /dev/null +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/appsettings.Development.json @@ -0,0 +1,16 @@ +{ + "DetailedErrors": true, + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information", + "DevExpress.ExpressApp": "Information" + } + }, + "DevExpress": { + "ExpressApp": { + "EnableDiagnosticActions": false + } + } +} \ No newline at end of file diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/appsettings.json b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/appsettings.json new file mode 100644 index 0000000..123076e --- /dev/null +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/appsettings.json @@ -0,0 +1,52 @@ +{ + "ConnectionStrings": { + "ConnectionString": "Integrated Security=SSPI;Pooling=false;Data Source=(localdb)\\mssqllocaldb;Initial Catalog=NonPersistentFiltering", + "EasyTestConnectionString": "Integrated Security=SSPI;Pooling=false;Data Source=(localdb)\\mssqllocaldb;Initial Catalog=NonPersistentFilteringEasyTest" + }, + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information", + "DevExpress.ExpressApp": "Information" + } + }, + "AllowedHosts": "*", + "DevExpress": { + "ExpressApp": { + "Languages": "en-US;", + "ShowLanguageSwitcher": false, + "ThemeSwitcher": { + "DefaultItemName": "Office White", + "ShowSizeModeSwitcher": true, + "Groups": [ + { + "Caption": "DevExpress Themes", + "Items": [ + { + "Caption": "Blazing Berry", + "Url": "_content/DevExpress.Blazor.Themes/blazing-berry.bs5.min.css", + "Color": "#5c2d91" + }, + { + "Caption": "Blazing Dark", + "Url": "_content/DevExpress.Blazor.Themes/blazing-dark.bs5.min.css", + "Color": "#46444a" + }, + { + "Caption": "Office White", + "Url": "_content/DevExpress.Blazor.Themes/office-white.bs5.min.css", + "Color": "#fe7109" + }, + { + "Caption": "Purple", + "Url": "_content/DevExpress.Blazor.Themes/purple.bs5.min.css", + "Color": "#7989ff" + } + ] + } + ] + } + } + } +} \ No newline at end of file diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/wwwroot/css/site.css b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/wwwroot/css/site.css new file mode 100644 index 0000000..2e1c9a0 --- /dev/null +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/wwwroot/css/site.css @@ -0,0 +1,31 @@ +html, body { + height: 100%; +} + +app { + display: block; + height: 100%; +} + +.header-logo { + flex-shrink: 0; + background-color: currentColor; + -webkit-mask: url('../images/Logo.svg'); + mask: url('../images/Logo.svg'); + -webkit-mask-position: center; + mask-position: center; + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; + width: 180px; + height: 24px; +} + +#blazor-error-ui { + background: inherit; + bottom: 0; + display: none; + position: fixed; + width: 100%; + height: 100%; + z-index: 100001; +} \ No newline at end of file diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/wwwroot/favicon.ico b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/wwwroot/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..91de870e5df62f3dc001d46fbbb59522b790e006 GIT binary patch literal 31444 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 literal 0 HcmV?d00001 diff --git a/CS/NonPersistentObjectsDemo.Web/Images/Logo.svg b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/wwwroot/images/Logo.svg similarity index 100% rename from CS/NonPersistentObjectsDemo.Web/Images/Logo.svg rename to CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/wwwroot/images/Logo.svg diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/wwwroot/images/SplashScreen.svg b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/wwwroot/images/SplashScreen.svg new file mode 100644 index 0000000..d68f0e7 --- /dev/null +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Blazor.Server/wwwroot/images/SplashScreen.svg @@ -0,0 +1,13 @@ + + + + + + + diff --git a/CS/NonPersistentObjectsDemo.Module/BusinessObjects/Article.cs b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/BusinessObjects/Article.cs similarity index 87% rename from CS/NonPersistentObjectsDemo.Module/BusinessObjects/Article.cs rename to CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/BusinessObjects/Article.cs index c7fd590..72ad8af 100644 --- a/CS/NonPersistentObjectsDemo.Module/BusinessObjects/Article.cs +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/BusinessObjects/Article.cs @@ -70,17 +70,17 @@ static ArticleAdapter() { #region DemoData static void CreateDemoData() { - var gen = new GenHelper(); + // var gen = new GenHelper(); var contacts = ContactAdapter.GetAllContacts(); - for(int i = 0; i < 5000; i++) { - var id1 = gen.Next(contacts.Count); - var id2 = gen.Next(contacts.Count - 1); + + for (int i = 0; i < 70; i++) { + var cntIndex = new Random(i).Next(0, contacts.Count); articles.Add(new Article() { ID = i, - Title = GenHelper.ToTitle(gen.MakeBlah(gen.Next(7))), - Content = gen.MakeBlahBlahBlah(5 + gen.Next(100), 7), - Author = contacts[id1] - }); + Title = "Title" + i, + Content = "Content" + i, + Author = contacts[cntIndex] + }) ; } } #endregion diff --git a/CS/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.cs b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/BusinessObjects/Contact.cs similarity index 94% rename from CS/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.cs rename to CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/BusinessObjects/Contact.cs index 652e3de..87ca349 100644 --- a/CS/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.cs +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/BusinessObjects/Contact.cs @@ -112,12 +112,11 @@ public ContactStorage() { } public void LoadDemoData() { var dt = dataSet.Tables["Contacts"]; - var gen = new GenHelper(); - for(int i = 0; i < 200; i++) { - var id = gen.MakeTosh(20); - var fullName = gen.GetFullName(); - var age = 16 + gen.Next(80); - var rating = gen.Next(100) * gen.Next(100) * 0.001f; + for(int i = 0; i < 50; i++) { + var id = i; + var fullName = "FullName"+i; + var age = 16 + i; + var rating = new Random(i).Next(10,90); dt.LoadDataRow(new object[] { id, fullName, age, rating }, LoadOption.OverwriteChanges); } } diff --git a/CS/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.cs b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/BusinessObjects/NonPersistentObjectBase.cs similarity index 100% rename from CS/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.cs rename to CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/BusinessObjects/NonPersistentObjectBase.cs diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/BusinessObjects/ReadMe.txt b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/BusinessObjects/ReadMe.txt new file mode 100644 index 0000000..a958910 --- /dev/null +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/BusinessObjects/ReadMe.txt @@ -0,0 +1,26 @@ +Folder Description + +The "BusinessObjects" project folder is intended for storing code of your data model. +In XAF, a business object can be implemented as an ORM-based persistent class +or a non-persistent POCO. + + +Relevant Documentation + +Business Model Design +https://docs.devexpress.com/eXpressAppFramework/113461 + +Non-Persistent Objects +https://docs.devexpress.com/eXpressAppFramework/116516 + +Data Types Supported by built-in Editors +https://docs.devexpress.com/eXpressAppFramework/113014 + +Ways to Add a Business Class (XPO) +https://docs.devexpress.com/eXpressAppFramework/112847 + +Ways to Implement Business Logic +https://docs.devexpress.com/eXpressAppFramework/113710 + +Debugging, Unit and Functional Testing +https://docs.devexpress.com/eXpressAppFramework/112572 diff --git a/CS/NonPersistentObjectsDemo.Module/Controllers/FindArticlesController.cs b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/Controllers/FindArticlesController.cs similarity index 98% rename from CS/NonPersistentObjectsDemo.Module/Controllers/FindArticlesController.cs rename to CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/Controllers/FindArticlesController.cs index f1fd517..7d75671 100644 --- a/CS/NonPersistentObjectsDemo.Module/Controllers/FindArticlesController.cs +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/Controllers/FindArticlesController.cs @@ -76,7 +76,7 @@ private CriteriaOperator GetCriteria() { return CriteriaOperator.Parse("Author.Rating >= ?", AuthorMinRating); } } - [Action(PredefinedCategory.Filters)] + [Action(PredefinedCategory.PopupActions)] public void Find() { UpdateArticles(); } diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/Controllers/ReadMe.txt b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/Controllers/ReadMe.txt new file mode 100644 index 0000000..9389414 --- /dev/null +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/Controllers/ReadMe.txt @@ -0,0 +1,25 @@ +Folder Description + +The "Controllers" project folder is intended for storing platform-agnostic Controller classes +that can change the default XAF application flow and add new features. + + +Relevant Documentation + +Controllers and Actions +https://docs.devexpress.com/eXpressAppFramework/112623 + +Implement Custom Controllers +https://docs.devexpress.com/eXpressAppFramework/112621 + +Define the Scope of Controllers and Actions +https://docs.devexpress.com/eXpressAppFramework/113103 + +Ways to Show a View +https://docs.devexpress.com/eXpressAppFramework/112803 + +Ways to Implement Business Logic +https://docs.devexpress.com/eXpressAppFramework/113710 + +Debugging, Unit and Functional Testing +https://docs.devexpress.com/eXpressAppFramework/112572 diff --git a/VB/NonPersistentObjectsDemo.Module/DatabaseUpdate/ReadMe.txt b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/DatabaseUpdate/ReadMe.txt similarity index 64% rename from VB/NonPersistentObjectsDemo.Module/DatabaseUpdate/ReadMe.txt rename to CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/DatabaseUpdate/ReadMe.txt index 31da2b7..436b186 100644 --- a/VB/NonPersistentObjectsDemo.Module/DatabaseUpdate/ReadMe.txt +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/DatabaseUpdate/ReadMe.txt @@ -1,17 +1,23 @@ Folder Description -The "DatabaseUpdate" project folder is intended for storing code that supplies -initial data (default User objects, etc) and handles a database update when the +The "DatabaseUpdate" project folder is intended for storing code that supplies +initial data (default User objects, etc) and handles a database update when the application version changes. Relevant Documentation -Supply Initial Data +Supply Initial Data (XPO) https://docs.devexpress.com/eXpressAppFramework/112788 -How to: Update the Database Structure after the Persistent Class or Property Was Renamed or Removed -https://docs.devexpress.com/eXpressAppFramework/113254 - ModuleUpdater Class https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Updating.ModuleUpdater + +Application Update +https://docs.devexpress.com/eXpressAppFramework/113239 + +How to: Update the Database Structure after the Persistent Class or Property Was Renamed or Removed (XPO) +https://docs.devexpress.com/eXpressAppFramework/113254 + +Debugging, Unit and Functional Testing +https://docs.devexpress.com/eXpressAppFramework/112572 diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/DatabaseUpdate/Updater.cs b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/DatabaseUpdate/Updater.cs new file mode 100644 index 0000000..895f2ff --- /dev/null +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/DatabaseUpdate/Updater.cs @@ -0,0 +1,33 @@ +using DevExpress.ExpressApp; +using DevExpress.Data.Filtering; +using DevExpress.Persistent.Base; +using DevExpress.ExpressApp.Updating; +using DevExpress.Xpo; +using DevExpress.ExpressApp.Xpo; +using DevExpress.Persistent.BaseImpl; + +namespace NonPersistentFiltering.Module.DatabaseUpdate; + +// For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Updating.ModuleUpdater +public class Updater : ModuleUpdater { + public Updater(IObjectSpace objectSpace, Version currentDBVersion) : + base(objectSpace, currentDBVersion) { + } + public override void UpdateDatabaseAfterUpdateSchema() { + base.UpdateDatabaseAfterUpdateSchema(); + //string name = "MyName"; + //DomainObject1 theObject = ObjectSpace.FirstOrDefault(u => u.Name == name); + //if(theObject == null) { + // theObject = ObjectSpace.CreateObject(); + // theObject.Name = name; + //} + + //ObjectSpace.CommitChanges(); //Uncomment this line to persist created object(s). + } + public override void UpdateDatabaseBeforeUpdateSchema() { + base.UpdateDatabaseBeforeUpdateSchema(); + //if(CurrentDBVersion < new Version("1.1.0.0") && CurrentDBVersion > new Version("0.0.0.0")) { + // RenameColumn("DomainObject1Table", "OldColumnName", "NewColumnName"); + //} + } +} diff --git a/CS/NonPersistentObjectsDemo.Module.Win/Images/ReadMe.txt b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/Images/ReadMe.txt similarity index 100% rename from CS/NonPersistentObjectsDemo.Module.Win/Images/ReadMe.txt rename to CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/Images/ReadMe.txt diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/Model.DesignedDiffs.xafml b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/Model.DesignedDiffs.xafml new file mode 100644 index 0000000..7cc37e2 --- /dev/null +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/Model.DesignedDiffs.xafml @@ -0,0 +1,5 @@ + + + + + diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/Module.cs b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/Module.cs new file mode 100644 index 0000000..8d24c39 --- /dev/null +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/Module.cs @@ -0,0 +1,51 @@ +using System.ComponentModel; +using DevExpress.ExpressApp; +using DevExpress.ExpressApp.DC; +using DevExpress.Persistent.Base; +using DevExpress.Persistent.BaseImpl; +using DevExpress.ExpressApp.Model; +using DevExpress.ExpressApp.Actions; +using DevExpress.ExpressApp.Editors; +using DevExpress.ExpressApp.Updating; +using DevExpress.ExpressApp.Model.Core; +using DevExpress.ExpressApp.Model.DomainLogics; +using DevExpress.ExpressApp.Model.NodeGenerators; +using DevExpress.Xpo; +using DevExpress.ExpressApp.Xpo; +using NonPersistentObjectsDemo.Module.BusinessObjects; + +namespace NonPersistentFiltering.Module; + +// For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase. +public sealed class NonPersistentFilteringModule : ModuleBase { + public NonPersistentFilteringModule() { + // + // NonPersistentFilteringModule + // + RequiredModuleTypes.Add(typeof(DevExpress.ExpressApp.SystemModule.SystemModule)); + RequiredModuleTypes.Add(typeof(DevExpress.ExpressApp.Objects.BusinessClassLibraryCustomizationModule)); + } + public override IEnumerable GetModuleUpdaters(IObjectSpace objectSpace, Version versionFromDB) { + ModuleUpdater updater = new DatabaseUpdate.Updater(objectSpace, versionFromDB); + return new ModuleUpdater[] { updater }; + } + public override void Setup(XafApplication application) { + base.Setup(application); + // Manage various aspects of the application UI and behavior at the module level. + application.SetupComplete += Application_SetupComplete; + } + private void Application_SetupComplete(object sender, EventArgs e) { + Application.ObjectSpaceCreated += Application_ObjectSpaceCreated; + } + private void Application_ObjectSpaceCreated(object sender, ObjectSpaceCreatedEventArgs e) { + var npos = e.ObjectSpace as NonPersistentObjectSpace; + if (npos != null) { + new ArticleAdapter(npos); + new ContactAdapter(npos); + } + } + public override void CustomizeTypesInfo(ITypesInfo typesInfo) { + base.CustomizeTypesInfo(typesInfo); + CalculatedPersistentAliasHelper.CustomizeTypesInfo(typesInfo); + } +} diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/NonPersistentFiltering.Module.csproj b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/NonPersistentFiltering.Module.csproj new file mode 100644 index 0000000..cd4dd1e --- /dev/null +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/NonPersistentFiltering.Module.csproj @@ -0,0 +1,25 @@ + + + net6.0 + false + false + 1.0.* + 1.0.0.0 + Debug;Release;EasyTest + enable + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/ReadMe.txt b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/ReadMe.txt new file mode 100644 index 0000000..087d288 --- /dev/null +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/ReadMe.txt @@ -0,0 +1,32 @@ +Project Description + +This project implements a platform-agnostic Module. UI-independent application +elements can be implemented here (Business Objects, Controllers, etc.). The root project +folder contains the Module.cs(vb) file with the class that inherits ModuleBase. +This class allows you to view and customize Module components: +referenced modules, Controllers and business classes. Additionally, the root folder +contains Application Model difference files (XAFML files) that keep application +settings specific for the current Module. Difference files can be customized in code +or in the Model Editor. + + +Relevant Documentation + +Application Solution Components +https://docs.devexpress.com/eXpressAppFramework/112569 + +XAF Community Extensions +https://www.devexpress.com/products/net/application_framework/#extensions + +Debugging, Unit and Functional Testing +https://docs.devexpress.com/eXpressAppFramework/112572 + +ModuleBase Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase + + +Application Model +https://docs.devexpress.com/eXpressAppFramework/112579 + +Model Editor +https://docs.devexpress.com/eXpressAppFramework/112582 \ No newline at end of file diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/Welcome.html b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/Welcome.html new file mode 100644 index 0000000..dde5abf --- /dev/null +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Module/Welcome.html @@ -0,0 +1,191 @@ + + + + + Your XAF application + + + + +
+ + + + + +
+
+

The XAF Solution Wizard has successfully generated the solution according to your settings.

+
    +
  • The NonPersistentFiltering.Module project keeps your platform-agnostic code. + Add persistent objects code to the Business Objects folder of this project and XAF will automatically create a UI to create, read, update and delete these persistent objects.
  • +
  • The NonPersistentFiltering.Win project is a startup project for the desktop application.
  • +
  • To specify the database used by your application, modify the ConnectionString attribute in the configuration file located in the startup project.
  • +
+
+
+ + + + + +
+
+ + + diff --git a/CS/NonPersistentObjectsDemo.Win/App.config b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/App.config similarity index 74% rename from CS/NonPersistentObjectsDemo.Win/App.config rename to CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/App.config index 7c38ed8..bf4274b 100644 --- a/CS/NonPersistentObjectsDemo.Win/App.config +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/App.config @@ -20,27 +20,17 @@ Use the one of predefined values: None, ApplicationFolder, CurrentUserApplicationDataFolder. The default value is ApplicationFolder. - + --> + + - - + + - - - - - - - - - - diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/Controllers/ReadMe.txt b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/Controllers/ReadMe.txt new file mode 100644 index 0000000..a2c3f7a --- /dev/null +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/Controllers/ReadMe.txt @@ -0,0 +1,25 @@ +Folder Description + +The "Controllers" project folder is intended for storing WinForms-specific Controller classes +that can change the default XAF application flow and add new features. + + +Relevant Documentation + +Controllers and Actions +https://docs.devexpress.com/eXpressAppFramework/112623 + +Implement Custom Controllers +https://docs.devexpress.com/eXpressAppFramework/112621 + +Define the Scope of Controllers and Actions +https://docs.devexpress.com/eXpressAppFramework/113103 + +Ways to Show a View +https://docs.devexpress.com/eXpressAppFramework/112803 + +Ways to Implement Business Logic +https://docs.devexpress.com/eXpressAppFramework/113710 + +Debugging, Unit and Functional Testing +https://docs.devexpress.com/eXpressAppFramework/112572 diff --git a/CS/NonPersistentObjectsDemo.Module.Win/Editors/ReadMe.txt b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/Editors/ReadMe.txt similarity index 73% rename from CS/NonPersistentObjectsDemo.Module.Win/Editors/ReadMe.txt rename to CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/Editors/ReadMe.txt index 3d405d8..00ff025 100644 --- a/CS/NonPersistentObjectsDemo.Module.Win/Editors/ReadMe.txt +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/Editors/ReadMe.txt @@ -1,10 +1,20 @@ Folder Description -This project folder is intended for storing custom WinForms List Editors, +This project folder is intended for storing custom WinForms List Editors, Property Editors and View Items. + Relevant Documentation +Using a Custom Control that is not Integrated by Default +https://docs.devexpress.com/eXpressAppFramework/113610 + +Ways to Access UI Elements and Their Controls +https://docs.devexpress.com/eXpressAppFramework/120092 + +Views +https://docs.devexpress.com/eXpressAppFramework/112611 + List Editors https://docs.devexpress.com/eXpressAppFramework/113189 @@ -31,3 +41,6 @@ https://docs.devexpress.com/eXpressAppFramework/113104 How to: Implement a View Item https://docs.devexpress.com/eXpressAppFramework/112641 + +Debugging, Unit and Functional Testing +https://docs.devexpress.com/eXpressAppFramework/112572 diff --git a/CS/NonPersistentObjectsDemo.Win/ExpressApp.ico b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/ExpressApp.ico similarity index 100% rename from CS/NonPersistentObjectsDemo.Win/ExpressApp.ico rename to CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/ExpressApp.ico diff --git a/CS/NonPersistentObjectsDemo.Module.Win/Images/ExpressAppLogo.png b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/Images/ExpressAppLogo.png similarity index 100% rename from CS/NonPersistentObjectsDemo.Module.Win/Images/ExpressAppLogo.png rename to CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/Images/ExpressAppLogo.png diff --git a/CS/NonPersistentObjectsDemo.Win/Images/Logo.svg b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/Images/Logo.svg similarity index 100% rename from CS/NonPersistentObjectsDemo.Win/Images/Logo.svg rename to CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/Images/Logo.svg diff --git a/CS/NonPersistentObjectsDemo.Module/Images/ReadMe.txt b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/Images/ReadMe.txt similarity index 100% rename from CS/NonPersistentObjectsDemo.Module/Images/ReadMe.txt rename to CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/Images/ReadMe.txt diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/Model.xafml b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/Model.xafml new file mode 100644 index 0000000..594847b --- /dev/null +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/Model.xafml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/NonPersistentFiltering.Win.csproj b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/NonPersistentFiltering.Win.csproj new file mode 100644 index 0000000..0190961 --- /dev/null +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/NonPersistentFiltering.Win.csproj @@ -0,0 +1,43 @@ + + + WinExe + net6.0-windows + false + true + ExpressApp.ico + false + 1.0.* + 1.0.0.0 + Debug;Release;EasyTest + enable + + + + + + + + + + + Always + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/Program.cs b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/Program.cs new file mode 100644 index 0000000..db2a62f --- /dev/null +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/Program.cs @@ -0,0 +1,80 @@ +using System.Configuration; +using DevExpress.ExpressApp; +using DevExpress.ExpressApp.ApplicationBuilder; +using DevExpress.ExpressApp.Win.ApplicationBuilder; +using DevExpress.ExpressApp.Security; +using DevExpress.ExpressApp.Win; +using DevExpress.Persistent.Base; +using DevExpress.Persistent.BaseImpl; +using DevExpress.XtraEditors; +using DevExpress.ExpressApp.Utils; +using DevExpress.ExpressApp.Win.Utils; +using System.Reflection; + +namespace NonPersistentFiltering.Win; + +static class Program { + private static bool ContainsArgument(string[] args, string argument) { + return args.Any(arg => arg.TrimStart('/').TrimStart('-').ToLower() == argument.ToLower()); + } + /// + /// The main entry point for the application. + /// + [STAThread] + public static int Main(string[] args) { + if(ContainsArgument(args, "help") || ContainsArgument(args, "h")) { + Console.WriteLine("Updates the database when its version does not match the application's version."); + Console.WriteLine(); + Console.WriteLine($" {Assembly.GetExecutingAssembly().GetName().Name}.exe --updateDatabase [--forceUpdate --silent]"); + Console.WriteLine(); + Console.WriteLine("--forceUpdate - Marks that the database must be updated whether its version matches the application's version or not."); + Console.WriteLine("--silent - Marks that database update proceeds automatically and does not require any interaction with the user."); + Console.WriteLine(); + Console.WriteLine($"Exit codes: 0 - {DBUpdaterStatus.UpdateCompleted}"); + Console.WriteLine($" 1 - {DBUpdaterStatus.UpdateError}"); + Console.WriteLine($" 2 - {DBUpdaterStatus.UpdateNotNeeded}"); + return 0; + } + DevExpress.ExpressApp.FrameworkSettings.DefaultSettingsCompatibilityMode = DevExpress.ExpressApp.FrameworkSettingsCompatibilityMode.Latest; +#if EASYTEST + DevExpress.ExpressApp.Win.EasyTest.EasyTestRemotingRegistration.Register(); +#endif + WindowsFormsSettings.LoadApplicationSettings(); + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + DevExpress.Utils.ToolTipController.DefaultController.ToolTipType = DevExpress.Utils.ToolTipType.SuperTip; + if(Tracing.GetFileLocationFromSettings() == DevExpress.Persistent.Base.FileLocation.CurrentUserApplicationDataFolder) { + Tracing.LocalUserAppDataPath = Application.LocalUserAppDataPath; + } + Tracing.Initialize(); + + string connectionString = null; + if(ConfigurationManager.ConnectionStrings["ConnectionString"] != null) { + connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; + } +#if EASYTEST + if(ConfigurationManager.ConnectionStrings["EasyTestConnectionString"] != null) { + connectionString = ConfigurationManager.ConnectionStrings["EasyTestConnectionString"].ConnectionString; + } +#endif + ArgumentNullException.ThrowIfNull(connectionString); + var winApplication = ApplicationBuilder.BuildApplication(connectionString); + + if (ContainsArgument(args, "updateDatabase")) { + using var dbUpdater = new WinDBUpdater(() => winApplication); + return dbUpdater.Update( + forceUpdate: ContainsArgument(args, "forceUpdate"), + silent: ContainsArgument(args, "silent")); + } + + try { + winApplication.Setup(); + winApplication.Start(); + } + catch(Exception e) { + winApplication.StopSplash(); + winApplication.HandleException(e); + } + return 0; + } +} diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/ReadMe.txt b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/ReadMe.txt new file mode 100644 index 0000000..cebe462 --- /dev/null +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/ReadMe.txt @@ -0,0 +1,33 @@ +Project Description + +This project implements a WinForms application. The root project folder +contains the WinApplication.cs file with the class that inherits WinApplication. +This class allows you to view and customize Module components: +referenced modules, Controllers and business classes. Additionally, the root folder +contains Application Model difference files (XAFML files) that keep application +settings specific for the current Module. Difference files can be customized in code +or in the Model Editor. + + +Relevant Documentation + +Application Solution Components +https://docs.devexpress.com/eXpressAppFramework/112569 + +XAF Community Extensions +https://www.devexpress.com/products/net/application_framework/#extensions + +Debugging, Unit and Functional Testing +https://docs.devexpress.com/eXpressAppFramework/112572 + +WinApplication Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Win.WinApplication + +XafApplication Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.XafApplication + +Application Model +https://docs.devexpress.com/eXpressAppFramework/112579 + +Model Editor +https://docs.devexpress.com/eXpressAppFramework/112582 \ No newline at end of file diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/Startup.cs b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/Startup.cs new file mode 100644 index 0000000..e52a264 --- /dev/null +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/Startup.cs @@ -0,0 +1,40 @@ +using System.Configuration; +using DevExpress.ExpressApp; +using DevExpress.ExpressApp.ApplicationBuilder; +using DevExpress.ExpressApp.Win.ApplicationBuilder; +using DevExpress.ExpressApp.Security; +using DevExpress.ExpressApp.Win; +using DevExpress.Persistent.Base; +using DevExpress.Persistent.BaseImpl; +using DevExpress.XtraEditors; +using DevExpress.ExpressApp.Design; + +namespace NonPersistentFiltering.Win; + +public class ApplicationBuilder : IDesignTimeApplicationFactory { + public static WinApplication BuildApplication(string connectionString) { + var builder = WinApplication.CreateBuilder(); + builder.UseApplication(); + builder.Modules + .Add() + .Add(); + builder.ObjectSpaceProviders + .AddXpo((application, options) => { + options.ConnectionString = connectionString; + }) + .AddNonPersistent(); + builder.AddBuildStep(application => { + application.ConnectionString = connectionString; +#if DEBUG + if(System.Diagnostics.Debugger.IsAttached && application.CheckCompatibilityType == CheckCompatibilityType.DatabaseSchema) { + application.DatabaseUpdateMode = DatabaseUpdateMode.UpdateDatabaseAlways; + } +#endif + }); + var winApplication = builder.Build(); + return winApplication; + } + + XafApplication IDesignTimeApplicationFactory.Create() + => BuildApplication(XafApplication.DesignTimeConnectionString); +} diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/WinApplication.cs b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/WinApplication.cs new file mode 100644 index 0000000..c3e6775 --- /dev/null +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/WinApplication.cs @@ -0,0 +1,50 @@ +using System.ComponentModel; +using DevExpress.ExpressApp; +using DevExpress.ExpressApp.ApplicationBuilder; +using DevExpress.ExpressApp.Win; +using DevExpress.ExpressApp.Updating; +using DevExpress.ExpressApp.Win.Utils; +using DevExpress.ExpressApp.Xpo; + +namespace NonPersistentFiltering.Win; + +// For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Win.WinApplication._members +public class NonPersistentFilteringWindowsFormsApplication : WinApplication { + public NonPersistentFilteringWindowsFormsApplication() { + SplashScreen = new DXSplashScreen(typeof(XafSplashScreen), new DefaultOverlayFormOptions()); + ApplicationName = "NonPersistentFiltering"; + CheckCompatibilityType = DevExpress.ExpressApp.CheckCompatibilityType.DatabaseSchema; + UseOldTemplates = false; + DatabaseVersionMismatch += NonPersistentFilteringWindowsFormsApplication_DatabaseVersionMismatch; + CustomizeLanguagesList += NonPersistentFilteringWindowsFormsApplication_CustomizeLanguagesList; + } + private void NonPersistentFilteringWindowsFormsApplication_CustomizeLanguagesList(object sender, CustomizeLanguagesListEventArgs e) { + string userLanguageName = System.Threading.Thread.CurrentThread.CurrentUICulture.Name; + if(userLanguageName != "en-US" && e.Languages.IndexOf(userLanguageName) == -1) { + e.Languages.Add(userLanguageName); + } + } + private void NonPersistentFilteringWindowsFormsApplication_DatabaseVersionMismatch(object sender, DevExpress.ExpressApp.DatabaseVersionMismatchEventArgs e) { +#if EASYTEST + e.Updater.Update(); + e.Handled = true; +#else + if(System.Diagnostics.Debugger.IsAttached) { + e.Updater.Update(); + e.Handled = true; + } + else { + string message = "The application cannot connect to the specified database, " + + "because the database doesn't exist, its version is older " + + "than that of the application or its schema does not match " + + "the ORM data model structure. To avoid this error, use one " + + "of the solutions from the https://www.devexpress.com/kb=T367835 KB Article."; + + if(e.CompatibilityError != null && e.CompatibilityError.Exception != null) { + message += "\r\n\r\nInner exception: " + e.CompatibilityError.Exception.Message; + } + throw new InvalidOperationException(message); + } +#endif + } +} diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/WinModule.cs b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/WinModule.cs new file mode 100644 index 0000000..57a3ab5 --- /dev/null +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/WinModule.cs @@ -0,0 +1,26 @@ +using System.ComponentModel; +using DevExpress.ExpressApp; +using DevExpress.ExpressApp.DC; +using DevExpress.ExpressApp.Model; +using DevExpress.ExpressApp.Editors; +using DevExpress.ExpressApp.Actions; +using DevExpress.ExpressApp.Updating; +using DevExpress.ExpressApp.Model.Core; +using DevExpress.ExpressApp.Model.DomainLogics; +using DevExpress.ExpressApp.Model.NodeGenerators; + +namespace NonPersistentFiltering.Win; + +[ToolboxItemFilter("Xaf.Platform.Win")] +// For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase. +public sealed class NonPersistentFilteringWinModule : ModuleBase { + public NonPersistentFilteringWinModule() { + DevExpress.ExpressApp.Editors.FormattingProvider.UseMaskSettings = true; + } + public override IEnumerable GetModuleUpdaters(IObjectSpace objectSpace, Version versionFromDB) { + return ModuleUpdater.EmptyModuleUpdaters; + } + public override void Setup(XafApplication application) { + base.Setup(application); + } +} diff --git a/CS/NonPersistentObjectsDemo.Win/XafSplashScreen.Designer.cs b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/XafSplashScreen.Designer.cs similarity index 99% rename from CS/NonPersistentObjectsDemo.Win/XafSplashScreen.Designer.cs rename to CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/XafSplashScreen.Designer.cs index 6f969d7..42d1990 100644 --- a/CS/NonPersistentObjectsDemo.Win/XafSplashScreen.Designer.cs +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/XafSplashScreen.Designer.cs @@ -1,4 +1,4 @@ -namespace NonPersistentObjectsDemo.Win { +namespace NonPersistentFiltering.Win { partial class XafSplashScreen { /// diff --git a/CS/NonPersistentObjectsDemo.Win/XafSplashScreen.cs b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/XafSplashScreen.cs similarity index 98% rename from CS/NonPersistentObjectsDemo.Win/XafSplashScreen.cs rename to CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/XafSplashScreen.cs index 717f2b4..ad9eaa1 100644 --- a/CS/NonPersistentObjectsDemo.Win/XafSplashScreen.cs +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/XafSplashScreen.cs @@ -8,7 +8,7 @@ using DevExpress.Utils.Svg; using DevExpress.XtraSplashScreen; -namespace NonPersistentObjectsDemo.Win { +namespace NonPersistentFiltering.Win { public partial class XafSplashScreen : SplashScreen { private void LoadBlankLogo() { Assembly assembly = Assembly.GetExecutingAssembly(); @@ -49,5 +49,6 @@ public override void ProcessCommand(Enum cmd, object arg) { } #endregion + } -} +} \ No newline at end of file diff --git a/CS/NonPersistentObjectsDemo.Win/XafSplashScreen.resx b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/XafSplashScreen.resx similarity index 100% rename from CS/NonPersistentObjectsDemo.Win/XafSplashScreen.resx rename to CS/XPO/NonPersistentFiltering/NonPersistentFiltering.Win/XafSplashScreen.resx diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.sln b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.sln new file mode 100644 index 0000000..0581285 --- /dev/null +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.sln @@ -0,0 +1,41 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.33424.131 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NonPersistentFiltering.Module", "NonPersistentFiltering.Module\NonPersistentFiltering.Module.csproj", "{683BB2A8-F56B-4F37-9DCF-DE906FCAD530}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NonPersistentFiltering.Win", "NonPersistentFiltering.Win\NonPersistentFiltering.Win.csproj", "{4035990A-11F0-4E24-99DA-9A61C0C5F8F9}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NonPersistentFiltering.Blazor.Server", "NonPersistentFiltering.Blazor.Server\NonPersistentFiltering.Blazor.Server.csproj", "{787C7A8E-80C0-47F4-810B-1B41B4E3DA54}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + EasyTest|Any CPU = EasyTest|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {683BB2A8-F56B-4F37-9DCF-DE906FCAD530}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {683BB2A8-F56B-4F37-9DCF-DE906FCAD530}.Debug|Any CPU.Build.0 = Debug|Any CPU + {683BB2A8-F56B-4F37-9DCF-DE906FCAD530}.EasyTest|Any CPU.ActiveCfg = EasyTest|Any CPU + {683BB2A8-F56B-4F37-9DCF-DE906FCAD530}.EasyTest|Any CPU.Build.0 = EasyTest|Any CPU + {683BB2A8-F56B-4F37-9DCF-DE906FCAD530}.Release|Any CPU.ActiveCfg = Release|Any CPU + {683BB2A8-F56B-4F37-9DCF-DE906FCAD530}.Release|Any CPU.Build.0 = Release|Any CPU + {4035990A-11F0-4E24-99DA-9A61C0C5F8F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4035990A-11F0-4E24-99DA-9A61C0C5F8F9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4035990A-11F0-4E24-99DA-9A61C0C5F8F9}.EasyTest|Any CPU.ActiveCfg = EasyTest|Any CPU + {4035990A-11F0-4E24-99DA-9A61C0C5F8F9}.EasyTest|Any CPU.Build.0 = EasyTest|Any CPU + {4035990A-11F0-4E24-99DA-9A61C0C5F8F9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4035990A-11F0-4E24-99DA-9A61C0C5F8F9}.Release|Any CPU.Build.0 = Release|Any CPU + {787C7A8E-80C0-47F4-810B-1B41B4E3DA54}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {787C7A8E-80C0-47F4-810B-1B41B4E3DA54}.Debug|Any CPU.Build.0 = Debug|Any CPU + {787C7A8E-80C0-47F4-810B-1B41B4E3DA54}.EasyTest|Any CPU.ActiveCfg = EasyTest|Any CPU + {787C7A8E-80C0-47F4-810B-1B41B4E3DA54}.EasyTest|Any CPU.Build.0 = EasyTest|Any CPU + {787C7A8E-80C0-47F4-810B-1B41B4E3DA54}.Release|Any CPU.ActiveCfg = Release|Any CPU + {787C7A8E-80C0-47F4-810B-1B41B4E3DA54}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/VB/NonPersistentObjectsDemo.Module.Web/Controllers/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module.Web/Controllers/ReadMe.txt deleted file mode 100644 index 0ee4668..0000000 --- a/VB/NonPersistentObjectsDemo.Module.Web/Controllers/ReadMe.txt +++ /dev/null @@ -1,19 +0,0 @@ -Folder Description - -The "Controllers" project folder is intended for storing ASP.NET-specific Controller classes -that can change the default XAF application flow and add new features. - - -Relevant Documentation - -Controllers and Actions -https://docs.devexpress.com/eXpressAppFramework/112623 - -Controller Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Controller - -ViewController Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ViewController - -WindowController Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.WindowController diff --git a/VB/NonPersistentObjectsDemo.Module.Web/Editors/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module.Web/Editors/ReadMe.txt deleted file mode 100644 index 461813c..0000000 --- a/VB/NonPersistentObjectsDemo.Module.Web/Editors/ReadMe.txt +++ /dev/null @@ -1,31 +0,0 @@ -Folder Description - -This project folder is intended for storing custom ASP.NET List Editors, -Property Editors and View Items. - - -Relevant Documentation - -List Editors -https://docs.devexpress.com/eXpressAppFramework/113189 - -Implement Custom Property Editors -https://docs.devexpress.com/eXpressAppFramework/113097 - -View Items -https://docs.devexpress.com/eXpressAppFramework/112612 - -How to: Implement an ASP.NET Web List Editor Using a Custom Control -https://docs.devexpress.com/eXpressAppFramework/113126 - -How to: Implement a Property Editor (in ASP.NET Applications) -https://docs.devexpress.com/eXpressAppFramework/112678 - -How to: Implement a Property Editor for Specific Data Management (in ASP.NET Web Applications) -https://docs.devexpress.com/eXpressAppFramework/113116 - -How to: Customize a Built-in Web Property Editor -https://docs.devexpress.com/eXpressAppFramework/113114 - -How to: Implement a View Item -https://docs.devexpress.com/eXpressAppFramework/112641 \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Module.Web/Images/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module.Web/Images/ReadMe.txt deleted file mode 100644 index 230befc..0000000 --- a/VB/NonPersistentObjectsDemo.Module.Web/Images/ReadMe.txt +++ /dev/null @@ -1,12 +0,0 @@ -Folder Description - -The "Images" project folder is intended for storing custom image files. - - -Relevant Documentation - -Add and Override Images -https://docs.devexpress.com/eXpressAppFramework/112792 - -Assign a Custom Image -https://docs.devexpress.com/eXpressAppFramework/112744 diff --git a/VB/NonPersistentObjectsDemo.Module.Web/Model.DesignedDiffs.xafml b/VB/NonPersistentObjectsDemo.Module.Web/Model.DesignedDiffs.xafml deleted file mode 100644 index b3b40cf..0000000 --- a/VB/NonPersistentObjectsDemo.Module.Web/Model.DesignedDiffs.xafml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/VB/NonPersistentObjectsDemo.Module.Web/My Project/AssemblyInfo.vb b/VB/NonPersistentObjectsDemo.Module.Web/My Project/AssemblyInfo.vb deleted file mode 100644 index cceadc5..0000000 --- a/VB/NonPersistentObjectsDemo.Module.Web/My Project/AssemblyInfo.vb +++ /dev/null @@ -1,33 +0,0 @@ -Imports System.Reflection -Imports System.Runtime.CompilerServices -Imports System.Runtime.InteropServices - -' General Information about an assembly is controlled through the following -' set of attributes. Change these attribute values to modify the information -' associated with an assembly. - - - - - - - - - -' Setting ComVisible to false makes the types in this assembly not visible -' to COM components. If you need to access a type in this assembly from -' COM, set the ComVisible attribute to true on that type. - - -' The following GUID is for the ID of the typelib if this project is exposed to COM - - -' Version information for an assembly consists of the following four values: -' -' Major Version -' Minor Version -' Build Number -' Revision -' - - diff --git a/VB/NonPersistentObjectsDemo.Module.Web/NonPersistentObjectsDemo.Module.Web.vbproj b/VB/NonPersistentObjectsDemo.Module.Web/NonPersistentObjectsDemo.Module.Web.vbproj deleted file mode 100644 index ae3b5d5..0000000 --- a/VB/NonPersistentObjectsDemo.Module.Web/NonPersistentObjectsDemo.Module.Web.vbproj +++ /dev/null @@ -1,243 +0,0 @@ - - - - - Debug - AnyCPU - {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B} - Library - - NonPersistentObjectsDemo.Module.Web - v4.5.2 - 512 - On - Binary - Off - On - - - true - full - false - bin\Debug\ - true - true - prompt - true - - - pdbonly - true - bin\Release\ - false - true - prompt - true - - - true - bin\EasyTest\ - true - true - EASYTEST=True - full - AnyCPU - prompt - true - - - - - - - - - - - - - - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - - - Component - - - - WebModule.vb - - - - - - - - - - - - - - - - - - {57ACDBDB-006E-43D3-9308-97857F2FF75D} - NonPersistentObjectsDemo.Module - True - - - - - diff --git a/VB/NonPersistentObjectsDemo.Module.Web/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module.Web/ReadMe.txt deleted file mode 100644 index 853a0d9..0000000 --- a/VB/NonPersistentObjectsDemo.Module.Web/ReadMe.txt +++ /dev/null @@ -1,28 +0,0 @@ -Project Description - -This project implements an ASP.NET Module. Platform-specific application elements -can be implemented here (Controllers, Editors & View Items, etc.). The root project -folder contains the WebModule.cs(vb) file with the class that inherits ModuleBase. -This class can be designed with the Module Designer that allows you to view and -customize Module components: referenced modules, Controllers and business classes. -Additionally, the root folder contains Application Model difference files -(XAFML files) that keep application settings specific for the current Module. -Differences files can be designed with the Model Editor. - - -Relevant Documentation - -Application Solution Components -https://docs.devexpress.com/eXpressAppFramework/112569 - -ModuleBase Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase - -Module Designer -https://docs.devexpress.com/eXpressAppFramework/112828 - -Application Model -https://docs.devexpress.com/eXpressAppFramework/112579 - -Model Editor -https://docs.devexpress.com/eXpressAppFramework/112582 \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Module.Web/WebModule.Designer.vb b/VB/NonPersistentObjectsDemo.Module.Web/WebModule.Designer.vb deleted file mode 100644 index daf910d..0000000 --- a/VB/NonPersistentObjectsDemo.Module.Web/WebModule.Designer.vb +++ /dev/null @@ -1,41 +0,0 @@ -Namespace NonPersistentObjectsDemo.Module.Web - Partial Public Class NonPersistentObjectsDemoAspNetModule - ''' - ''' Required designer variable. - ''' - Private components As System.ComponentModel.IContainer = Nothing - - ''' - ''' Clean up any resources being used. - ''' - ''' true if managed resources should be disposed; otherwise, false. - Protected Overrides Sub Dispose(ByVal disposing As Boolean) - If disposing AndAlso (components IsNot Nothing) Then - components.Dispose() - End If - MyBase.Dispose(disposing) - End Sub - - #Region "Component Designer generated code" - - ''' - ''' Required method for Designer support - do not modify - ''' the contents of this method with the code editor. - ''' - Private Sub InitializeComponent() - ' - ' NonPersistentObjectsDemoAspNetModule - ' - Me.RequiredModuleTypes.Add(GetType(NonPersistentObjectsDemo.Module.NonPersistentObjectsDemoModule)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.Web.SystemModule.SystemAspNetModule)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.FileAttachments.Web.FileAttachmentsAspNetModule)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.ReportsV2.Web.ReportsAspNetModuleV2)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.Scheduler.Web.SchedulerAspNetModule)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.ScriptRecorder.Web.ScriptRecorderAspNetModule)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.TreeListEditors.Web.TreeListEditorsAspNetModule)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.Validation.Web.ValidationAspNetModule)) - End Sub - - #End Region - End Class -End Namespace \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Module.Web/WebModule.vb b/VB/NonPersistentObjectsDemo.Module.Web/WebModule.vb deleted file mode 100644 index cd440ac..0000000 --- a/VB/NonPersistentObjectsDemo.Module.Web/WebModule.vb +++ /dev/null @@ -1,44 +0,0 @@ -Imports System -Imports System.Linq -Imports System.Text -Imports System.ComponentModel -Imports DevExpress.ExpressApp -Imports DevExpress.ExpressApp.DC -Imports System.Collections.Generic -Imports DevExpress.ExpressApp.Model -Imports DevExpress.ExpressApp.Editors -Imports DevExpress.ExpressApp.Actions -Imports DevExpress.ExpressApp.Updating -Imports DevExpress.ExpressApp.Model.Core -Imports DevExpress.ExpressApp.Model.DomainLogics -Imports DevExpress.ExpressApp.Model.NodeGenerators -Imports DevExpress.Persistent.BaseImpl - -Namespace NonPersistentObjectsDemo.Module.Web - ' For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase. - - Public NotInheritable Partial Class NonPersistentObjectsDemoAspNetModule - Inherits ModuleBase - - 'private void Application_CreateCustomModelDifferenceStore(Object sender, CreateCustomModelDifferenceStoreEventArgs e) { - ' e.Store = new ModelDifferenceDbStore((XafApplication)sender, typeof(ModelDifference), true, "Web"); - ' e.Handled = true; - '} - Private Sub Application_CreateCustomUserModelDifferenceStore(ByVal sender As Object, ByVal e As CreateCustomModelDifferenceStoreEventArgs) - e.Store = New ModelDifferenceDbStore(DirectCast(sender, XafApplication), GetType(ModelDifference), False, "Web") - e.Handled = True - End Sub - Public Sub New() - InitializeComponent() - End Sub - Public Overrides Function GetModuleUpdaters(ByVal objectSpace As IObjectSpace, ByVal versionFromDB As Version) As IEnumerable(Of ModuleUpdater) - Return ModuleUpdater.EmptyModuleUpdaters - End Function - Public Overrides Sub Setup(ByVal application As XafApplication) - MyBase.Setup(application) - 'application.CreateCustomModelDifferenceStore += Application_CreateCustomModelDifferenceStore; - AddHandler application.CreateCustomUserModelDifferenceStore, AddressOf Application_CreateCustomUserModelDifferenceStore - ' Manage various aspects of the application UI and behavior at the module level. - End Sub - End Class -End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module.Win/Controllers/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module.Win/Controllers/ReadMe.txt deleted file mode 100644 index b9c5dc3..0000000 --- a/VB/NonPersistentObjectsDemo.Module.Win/Controllers/ReadMe.txt +++ /dev/null @@ -1,19 +0,0 @@ -Folder Description - -The "Controllers" project folder is intended for storing platform-agnostic Controller classes -that can change the default XAF application flow and add new features. - - -Relevant Documentation - -Controllers and Actions -https://docs.devexpress.com/eXpressAppFramework/112623 - -Controller Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Controller - -ViewController Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ViewController - -WindowController Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.WindowController diff --git a/VB/NonPersistentObjectsDemo.Module.Win/Editors/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module.Win/Editors/ReadMe.txt deleted file mode 100644 index 3d405d8..0000000 --- a/VB/NonPersistentObjectsDemo.Module.Win/Editors/ReadMe.txt +++ /dev/null @@ -1,33 +0,0 @@ -Folder Description - -This project folder is intended for storing custom WinForms List Editors, -Property Editors and View Items. - -Relevant Documentation - -List Editors -https://docs.devexpress.com/eXpressAppFramework/113189 - -Implement Custom Property Editors -https://docs.devexpress.com/eXpressAppFramework/113097 - -View Items -https://docs.devexpress.com/eXpressAppFramework/112612 - -How to: Implement a Custom WinForms List Editor -https://docs.devexpress.com/eXpressAppFramework/112659 - -How to: Support a Context Menu for a Custom WinForms List Editor -https://docs.devexpress.com/eXpressAppFramework/112660 - -How to: Implement a Property Editor (in WinForms Applications) -https://docs.devexpress.com/eXpressAppFramework/112679 - -How to: Implement a Property Editor for Specific Data Management (in WinForms Applications) -https://docs.devexpress.com/eXpressAppFramework/113101 - -How to: Extend Built-in Property Editor's Functionality -https://docs.devexpress.com/eXpressAppFramework/113104 - -How to: Implement a View Item -https://docs.devexpress.com/eXpressAppFramework/112641 diff --git a/VB/NonPersistentObjectsDemo.Module.Win/Images/ExpressAppLogo.png b/VB/NonPersistentObjectsDemo.Module.Win/Images/ExpressAppLogo.png deleted file mode 100644 index 3a6eaada75b3745cfe120bd6c4a9b1fd9e3058fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7486 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%0D@};7Gcq+eA2G? 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 IM6N<$g0{$L^Z)<= diff --git a/VB/NonPersistentObjectsDemo.Module.Win/Images/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module.Win/Images/ReadMe.txt deleted file mode 100644 index 230befc..0000000 --- a/VB/NonPersistentObjectsDemo.Module.Win/Images/ReadMe.txt +++ /dev/null @@ -1,12 +0,0 @@ -Folder Description - -The "Images" project folder is intended for storing custom image files. - - -Relevant Documentation - -Add and Override Images -https://docs.devexpress.com/eXpressAppFramework/112792 - -Assign a Custom Image -https://docs.devexpress.com/eXpressAppFramework/112744 diff --git a/VB/NonPersistentObjectsDemo.Module.Win/Model.DesignedDiffs.xafml b/VB/NonPersistentObjectsDemo.Module.Win/Model.DesignedDiffs.xafml deleted file mode 100644 index d5e5a36..0000000 --- a/VB/NonPersistentObjectsDemo.Module.Win/Model.DesignedDiffs.xafml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/VB/NonPersistentObjectsDemo.Module.Win/My Project/AssemblyInfo.vb b/VB/NonPersistentObjectsDemo.Module.Win/My Project/AssemblyInfo.vb deleted file mode 100644 index b38e166..0000000 --- a/VB/NonPersistentObjectsDemo.Module.Win/My Project/AssemblyInfo.vb +++ /dev/null @@ -1,33 +0,0 @@ -Imports System.Reflection -Imports System.Runtime.CompilerServices -Imports System.Runtime.InteropServices - -' General Information about an assembly is controlled through the following -' set of attributes. Change these attribute values to modify the information -' associated with an assembly. - - - - - - - - - -' Setting ComVisible to false makes the types in this assembly not visible -' to COM components. If you need to access a type in this assembly from -' COM, set the ComVisible attribute to true on that type. - - -' The following GUID is for the ID of the typelib if this project is exposed to COM - - -' Version information for an assembly consists of the following four values: -' -' Major Version -' Minor Version -' Build Number -' Revision -' - - diff --git a/VB/NonPersistentObjectsDemo.Module.Win/NonPersistentObjectsDemo.Module.Win.vbproj b/VB/NonPersistentObjectsDemo.Module.Win/NonPersistentObjectsDemo.Module.Win.vbproj deleted file mode 100644 index a6a0475..0000000 --- a/VB/NonPersistentObjectsDemo.Module.Win/NonPersistentObjectsDemo.Module.Win.vbproj +++ /dev/null @@ -1,281 +0,0 @@ - - - - - Debug - AnyCPU - {72D644CD-C193-4572-B2E3-CA82819A1627} - Library - - NonPersistentObjectsDemo.Module.Win - v4.5.2 - 512 - On - Binary - Off - On - - - true - full - false - bin\Debug\ - true - true - prompt - true - - - pdbonly - true - bin\Release\ - false - true - prompt - true - - - true - bin\EasyTest\ - true - true - EASYTEST=True - full - AnyCPU - prompt - true - - - - - - - - - - - - - - - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - System - False - - - False - - - System.Data - False - - - System.Drawing - False - - - System.Windows.Forms - False - - - System.XML - False - - - - - - Component - - - WinModule.vb - - - - - - - - - - - - - - - - - - - - - - - {57ACDBDB-006E-43D3-9308-97857F2FF75D} - NonPersistentObjectsDemo.Module - True - - - - - diff --git a/VB/NonPersistentObjectsDemo.Module.Win/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module.Win/ReadMe.txt deleted file mode 100644 index 17056ef..0000000 --- a/VB/NonPersistentObjectsDemo.Module.Win/ReadMe.txt +++ /dev/null @@ -1,29 +0,0 @@ -Project Description - -This project implements a WinForms Module. Platform-specific application -elements can be implemented here (Controllers, Editors & View Items, etc.). -The root project folder contains the WinModule.cs(vb) file with the class that -inherits ModuleBase. This class can be designed with the Module Designer that -allows you to view and customize Module components: referenced modules, -Controllers and business classes. Additionally, the root folder contains -Application Model difference files (XAFML files) that keep application -settings specific for the current Module. Differences files can be designed -with the Model Editor. - - -Relevant Documentation - -Application Solution Components -https://docs.devexpress.com/eXpressAppFramework/112569 - -ModuleBase Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase - -Module Designer -https://docs.devexpress.com/eXpressAppFramework/112828 - -Application Model -https://docs.devexpress.com/eXpressAppFramework/112579 - -Model Editor -https://docs.devexpress.com/eXpressAppFramework/112582 diff --git a/VB/NonPersistentObjectsDemo.Module.Win/WinModule.Designer.vb b/VB/NonPersistentObjectsDemo.Module.Win/WinModule.Designer.vb deleted file mode 100644 index 5b61bab..0000000 --- a/VB/NonPersistentObjectsDemo.Module.Win/WinModule.Designer.vb +++ /dev/null @@ -1,41 +0,0 @@ -Namespace NonPersistentObjectsDemo.Module.Win - Partial Public Class NonPersistentObjectsDemoWindowsFormsModule - ''' - ''' Required designer variable. - ''' - Private components As System.ComponentModel.IContainer = Nothing - - ''' - ''' Clean up any resources being used. - ''' - ''' true if managed resources should be disposed; otherwise, false. - Protected Overrides Sub Dispose(ByVal disposing As Boolean) - If disposing AndAlso (components IsNot Nothing) Then - components.Dispose() - End If - MyBase.Dispose(disposing) - End Sub - - #Region "Component Designer generated code" - - ''' - ''' Required method for Designer support - do not modify - ''' the contents of this method with the code editor. - ''' - Private Sub InitializeComponent() - ' - ' NonPersistentObjectsDemoWindowsFormsModule - ' - Me.RequiredModuleTypes.Add(GetType(NonPersistentObjectsDemo.Module.NonPersistentObjectsDemoModule)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.Win.SystemModule.SystemWindowsFormsModule)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.FileAttachments.Win.FileAttachmentsWindowsFormsModule)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.ReportsV2.Win.ReportsWindowsFormsModuleV2)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.Scheduler.Win.SchedulerWindowsFormsModule)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.ScriptRecorder.Win.ScriptRecorderWindowsFormsModule)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.TreeListEditors.Win.TreeListEditorsWindowsFormsModule)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.Validation.Win.ValidationWindowsFormsModule)) - End Sub - - #End Region - End Class -End Namespace \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Module.Win/WinModule.vb b/VB/NonPersistentObjectsDemo.Module.Win/WinModule.vb deleted file mode 100644 index c53f375..0000000 --- a/VB/NonPersistentObjectsDemo.Module.Win/WinModule.vb +++ /dev/null @@ -1,44 +0,0 @@ -Imports System -Imports System.Linq -Imports System.Text -Imports System.ComponentModel -Imports DevExpress.ExpressApp -Imports DevExpress.ExpressApp.DC -Imports System.Collections.Generic -Imports DevExpress.ExpressApp.Model -Imports DevExpress.ExpressApp.Editors -Imports DevExpress.ExpressApp.Actions -Imports DevExpress.ExpressApp.Updating -Imports DevExpress.ExpressApp.Model.Core -Imports DevExpress.ExpressApp.Model.DomainLogics -Imports DevExpress.ExpressApp.Model.NodeGenerators -Imports DevExpress.Persistent.BaseImpl - -Namespace NonPersistentObjectsDemo.Module.Win - ' For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase. - - Public NotInheritable Partial Class NonPersistentObjectsDemoWindowsFormsModule - Inherits ModuleBase - - 'private void Application_CreateCustomModelDifferenceStore(Object sender, CreateCustomModelDifferenceStoreEventArgs e) { - ' e.Store = new ModelDifferenceDbStore((XafApplication)sender, typeof(ModelDifference), true, "Win"); - ' e.Handled = true; - '} - Private Sub Application_CreateCustomUserModelDifferenceStore(ByVal sender As Object, ByVal e As CreateCustomModelDifferenceStoreEventArgs) - e.Store = New ModelDifferenceDbStore(DirectCast(sender, XafApplication), GetType(ModelDifference), False, "Win") - e.Handled = True - End Sub - Public Sub New() - InitializeComponent() - End Sub - Public Overrides Function GetModuleUpdaters(ByVal objectSpace As IObjectSpace, ByVal versionFromDB As Version) As IEnumerable(Of ModuleUpdater) - Return ModuleUpdater.EmptyModuleUpdaters - End Function - Public Overrides Sub Setup(ByVal application As XafApplication) - MyBase.Setup(application) - 'application.CreateCustomModelDifferenceStore += Application_CreateCustomModelDifferenceStore; - AddHandler application.CreateCustomUserModelDifferenceStore, AddressOf Application_CreateCustomUserModelDifferenceStore - ' Manage various aspects of the application UI and behavior at the module level. - End Sub - End Class -End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module/BusinessObjects/Article.vb b/VB/NonPersistentObjectsDemo.Module/BusinessObjects/Article.vb deleted file mode 100644 index 32d9cd6..0000000 --- a/VB/NonPersistentObjectsDemo.Module/BusinessObjects/Article.vb +++ /dev/null @@ -1,107 +0,0 @@ -Imports System -Imports System.Collections.Generic -Imports System.ComponentModel -Imports System.Linq -Imports System.Text -Imports System.Threading.Tasks -Imports DevExpress.ExpressApp -Imports DevExpress.ExpressApp.DC -Imports DevExpress.Persistent.Base - -Namespace NonPersistentObjectsDemo.Module.BusinessObjects - - - - - - Public Class Article - Inherits NonPersistentObjectBase - - Friend Sub New() - End Sub - Private _ID As Integer - - - Public Property ID() As Integer - Get - Return _ID - End Get - Set(ByVal value As Integer) - _ID = value - End Set - End Property - Private _Author As Contact - Public Property Author() As Contact - Get - Return _Author - End Get - Set(ByVal value As Contact) - SetPropertyValue(NameOf(Author), _Author, value) - End Set - End Property - Private _Title As String - Public Property Title() As String - Get - Return _Title - End Get - Set(ByVal value As String) - SetPropertyValue(Of String)(NameOf(Title), _Title, value) - End Set - End Property - Private _Content As String - - Public Property Content() As String - Get - Return _Content - End Get - Set(ByVal value As String) - SetPropertyValue(Of String)(NameOf(Content), _Content, value) - End Set - End Property - End Class - - Friend Class ArticleAdapter - Private objectSpace As NonPersistentObjectSpace - Private Shared articles As List(Of Article) - - Public Sub New(ByVal npos As NonPersistentObjectSpace) - Me.objectSpace = npos - AddHandler objectSpace.ObjectsGetting, AddressOf ObjectSpace_ObjectsGetting - End Sub - Private Sub ObjectSpace_ObjectsGetting(ByVal sender As Object, ByVal e As ObjectsGettingEventArgs) - If e.ObjectType Is GetType(Article) Then - Dim collection = New DynamicCollection(objectSpace, e.ObjectType, e.Criteria, e.Sorting, e.InTransaction) - AddHandler collection.FetchObjects, AddressOf DynamicCollection_FetchObjects - e.Objects = collection - End If - End Sub - Private Sub DynamicCollection_FetchObjects(ByVal sender As Object, ByVal e As FetchObjectsEventArgs) - If e.ObjectType Is GetType(Article) Then - e.Objects = articles - e.ShapeData = True - End If - End Sub - - Shared Sub New() - articles = New List(Of Article)() - CreateDemoData() - End Sub - - #Region "DemoData" - Private Shared Sub CreateDemoData() - Dim gen = New GenHelper() - Dim contacts = ContactAdapter.GetAllContacts() - For i As Integer = 0 To 4999 - Dim id1 = gen.Next(contacts.Count) - Dim id2 = gen.Next(contacts.Count - 1) - articles.Add(New Article() With { - .ID = i, - .Title = GenHelper.ToTitle(gen.MakeBlah(gen.Next(7))), - .Content = gen.MakeBlahBlahBlah(5 + gen.Next(100), 7), - .Author = contacts(id1) - }) - Next i - End Sub - #End Region - End Class -End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.vb b/VB/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.vb deleted file mode 100644 index 8d67557..0000000 --- a/VB/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.vb +++ /dev/null @@ -1,144 +0,0 @@ -Imports System -Imports System.Collections.Generic -Imports System.ComponentModel -Imports System.Data -Imports System.Linq -Imports System.Text -Imports System.Threading.Tasks -Imports DevExpress.Data.Filtering -Imports DevExpress.ExpressApp -Imports DevExpress.Persistent.Base -Imports DevExpress.Xpo - -Namespace NonPersistentObjectsDemo.Module.BusinessObjects - - - - - - Public Class Contact - Inherits NonPersistentObjectBase - - Friend Sub New() - End Sub - Private _UserName As String - - Public Property UserName() As String - Get - Return _UserName - End Get - Set(ByVal value As String) - _UserName = value - End Set - End Property - Private _FullName As String - Public Property FullName() As String - Get - Return _FullName - End Get - Set(ByVal value As String) - SetPropertyValue(NameOf(FullName), _FullName, value) - End Set - End Property - Private _Age As Integer - Public Property Age() As Integer - Get - Return _Age - End Get - Set(ByVal value As Integer) - SetPropertyValue(Of Integer)(NameOf(Age), _Age, value) - End Set - End Property - Private _Rating As Single - Public Property Rating() As Single - Get - Return _Rating - End Get - Set(ByVal value As Single) - SetPropertyValue(Of Single)(NameOf(Rating), _Rating, value) - End Set - End Property - End Class - - Friend Class ContactAdapter - Private objectSpace As NonPersistentObjectSpace - - Public Sub New(ByVal npos As NonPersistentObjectSpace) - Me.objectSpace = npos - AddHandler objectSpace.ObjectsGetting, AddressOf ObjectSpace_ObjectsGetting - End Sub - Private Sub ObjectSpace_ObjectsGetting(ByVal sender As Object, ByVal e As ObjectsGettingEventArgs) - If e.ObjectType Is GetType(Contact) Then - Dim collection = New DynamicCollection(objectSpace, e.ObjectType, e.Criteria, e.Sorting, e.InTransaction) - AddHandler collection.FetchObjects, AddressOf DynamicCollection_FetchObjects - e.Objects = collection - End If - End Sub - Private Sub DynamicCollection_FetchObjects(ByVal sender As Object, ByVal e As FetchObjectsEventArgs) - If e.ObjectType Is GetType(Contact) Then - Dim rows = contactsStorage.GetContactRows(e.Criteria, e.Sorting) - e.Objects = rows.Select(Function(row) GetContact(row)) - End If - End Sub - Private Shared Function GetContact(ByVal row As DataRow) As Contact - Dim obj As Contact = Nothing - Dim key = TryCast(row("UserName"), String) - If Not contactsCache.TryGetValue(key, obj) Then - obj = New Contact() With { - .UserName = key, - .FullName = DirectCast(row("FullName"), String), - .Age = DirectCast(row("Age"), Integer), - .Rating = DirectCast(row("Rating"), Single) - } - contactsCache.Add(key, obj) - End If - Return obj - End Function - - Private Shared contactsStorage As ContactStorage - Private Shared contactsCache As Dictionary(Of String, Contact) - Friend Shared Function GetAllContacts() As IList(Of Contact) - Return contactsStorage.GetContactRows(Nothing, Nothing).Select(Function(row) GetContact(row)).ToList() - End Function - Shared Sub New() - contactsStorage = New ContactStorage() - contactsStorage.LoadDemoData() - contactsCache = New Dictionary(Of String, Contact)() - End Sub - End Class - - Friend Class ContactStorage - Private dataSet As DataSet - Public Function GetContactRows(ByVal criteria As CriteriaOperator, ByVal sorting As IList(Of SortProperty)) As IList(Of DataRow) - Dim filter = CriteriaToWhereClauseHelper.GetDataSetWhere(criteria) - Dim sort As String = Nothing - If sorting IsNot Nothing AndAlso sorting.Count = 1 AndAlso TypeOf sorting(0).Property Is OperandProperty Then - sort = String.Format("{0} {1}", sorting(0).PropertyName,If(sorting(0).Direction = DevExpress.Xpo.DB.SortingDirection.Ascending, "ASC", "DESC")) - End If - Return dataSet.Tables("Contacts").Select(filter, sort) - End Function - Public Sub New() - dataSet = New DataSet() - If True Then - Dim dt = dataSet.Tables.Add("Contacts") - Dim colID = dt.Columns.Add("UserName", GetType(String)) - dt.Columns.Add("FullName", GetType(String)) - dt.Columns.Add("Age", GetType(Integer)) - dt.Columns.Add("Rating", GetType(Single)) - dt.PrimaryKey = New DataColumn() { colID } - End If - LoadDemoData() - End Sub - Public Sub LoadDemoData() - Dim dt = dataSet.Tables("Contacts") - Dim gen = New GenHelper() - For i As Integer = 0 To 199 - Dim id = gen.MakeTosh(20) - Dim fullName = gen.GetFullName() - Dim age = 16 + gen.Next(80) - Dim rating = gen.Next(100) * gen.Next(100) * 0.001F - dt.LoadDataRow(New Object() { id, fullName, age, rating }, LoadOption.OverwriteChanges) - Next i - End Sub - End Class -End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.vb b/VB/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.vb deleted file mode 100644 index 2881bc5..0000000 --- a/VB/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.vb +++ /dev/null @@ -1,64 +0,0 @@ -Imports System -Imports System.Collections.Generic -Imports System.ComponentModel -Imports System.Linq -Imports System.Text -Imports System.Threading.Tasks -Imports DevExpress.ExpressApp -Imports DevExpress.ExpressApp.DC -Imports DevExpress.Persistent.Base - -Namespace NonPersistentObjectsDemo.Module.BusinessObjects - - Public MustInherit Class BoundNonPersistentObjectBase - Inherits NonPersistentObjectBase - Implements IObjectSpaceLink - - Private _ObjectSpace As IObjectSpace - Protected ReadOnly Property ObjectSpace() As IObjectSpace - Get - Return _ObjectSpace - End Get - End Property - Private Property IObjectSpaceLink_ObjectSpace() As IObjectSpace Implements IObjectSpaceLink.ObjectSpace - Get - Return _ObjectSpace - End Get - Set(ByVal value As IObjectSpace) - If _ObjectSpace IsNot value Then - OnObjectSpaceChanging() - _ObjectSpace = value - OnObjectSpaceChanged() - End If - End Set - End Property - Protected Overridable Sub OnObjectSpaceChanging() - End Sub - Protected Overridable Sub OnObjectSpaceChanged() - End Sub - Protected Function FindPersistentObjectSpace(ByVal type As Type) As IObjectSpace - Return DirectCast(ObjectSpace, NonPersistentObjectSpace).AdditionalObjectSpaces.FirstOrDefault(Function(os) os.IsKnownType(type)) - End Function - End Class - - Public MustInherit Class NonPersistentObjectBase - Implements INotifyPropertyChanged - - Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged - Protected Sub OnPropertyChanged(ByVal propertyName As String) - PropertyChangedEvent?.Invoke(Me, New PropertyChangedEventArgs(propertyName)) - End Sub - Protected Sub SetPropertyValue(Of T)(ByVal name As String, ByRef field As T, ByVal value As T) - If Not Equals(field, value) Then - field = value - OnPropertyChanged(name) - End If - End Sub - - Public ReadOnly Property This() As Object - Get - Return Me - End Get - End Property - End Class -End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module/BusinessObjects/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module/BusinessObjects/ReadMe.txt deleted file mode 100644 index 09595b9..0000000 --- a/VB/NonPersistentObjectsDemo.Module/BusinessObjects/ReadMe.txt +++ /dev/null @@ -1,11 +0,0 @@ -Folder Description - -The "BusinessObjects" project folder is intended for storing the business objects -code. In XAF, a business object can be implemented as a base persistent class -descendant and as Domain Component interfaces. - -Relevant Documentation - -Business Model Design -https://docs.devexpress.com/eXpressAppFramework/112600 - diff --git a/VB/NonPersistentObjectsDemo.Module/Controllers/FindArticlesController.vb b/VB/NonPersistentObjectsDemo.Module/Controllers/FindArticlesController.vb deleted file mode 100644 index 9045f45..0000000 --- a/VB/NonPersistentObjectsDemo.Module/Controllers/FindArticlesController.vb +++ /dev/null @@ -1,95 +0,0 @@ -Imports System -Imports System.Collections.Generic -Imports System.ComponentModel -Imports System.Linq -Imports System.Text -Imports System.Threading.Tasks -Imports DevExpress.Data.Filtering -Imports DevExpress.ExpressApp -Imports DevExpress.ExpressApp.Actions -Imports DevExpress.ExpressApp.ConditionalAppearance -Imports DevExpress.ExpressApp.DC -Imports DevExpress.Persistent.Base -Imports NonPersistentObjectsDemo.Module.BusinessObjects - -Namespace NonPersistentObjectsDemo.Module.Controllers - - Public Class FindArticlesController - Inherits ViewController - - Private action As PopupWindowShowAction - Public Sub New() - action = New PopupWindowShowAction(Me, "FindArticles", PredefinedCategory.View) - AddHandler action.CustomizePopupWindowParams, AddressOf Action_CustomizePopupWindowParams - AddHandler action.Execute, AddressOf Action_Execute - End Sub - Private Sub Action_CustomizePopupWindowParams(ByVal sender As Object, ByVal e As CustomizePopupWindowParamsEventArgs) - Dim objectSpace = Application.CreateObjectSpace(GetType(FindArticlesDialog)) - Dim obj = New FindArticlesDialog() - Dim detailView = Application.CreateDetailView(objectSpace, obj) - detailView.ViewEditMode = DevExpress.ExpressApp.Editors.ViewEditMode.Edit - e.View = detailView - End Sub - Private Sub Action_Execute(ByVal sender As Object, ByVal e As PopupWindowShowActionExecuteEventArgs) - End Sub - End Class - - - Public Class FindArticlesDialog - Inherits BoundNonPersistentObjectBase - - Private _Author As Contact - - Public Property Author() As Contact - Get - Return _Author - End Get - Set(ByVal value As Contact) - SetPropertyValue(Of Contact)(NameOf(Author), _Author, value) - End Set - End Property - Private _AuthorMinRating As Single - - Public Property AuthorMinRating() As Single - Get - Return _AuthorMinRating - End Get - Set(ByVal value As Single) - SetPropertyValue(Of Single)(NameOf(AuthorMinRating), _AuthorMinRating, value) - End Set - End Property - Private _Articles As BindingList(Of Article) - Public ReadOnly Property Articles() As BindingList(Of Article) - Get - If _Articles Is Nothing Then - _Articles = New BindingList(Of Article)() - End If - Return _Articles - End Get - End Property - Private Sub UpdateArticles() - If _Articles IsNot Nothing Then - Dim filter = GetCriteria() - _Articles.RaiseListChangedEvents = False - _Articles.Clear() - For Each obj In ObjectSpace.GetObjects(Of Article)(filter) - _Articles.Add(obj) - Next obj - _Articles.RaiseListChangedEvents = True - _Articles.ResetBindings() - OnPropertyChanged(NameOf(Articles)) - End If - End Sub - Private Function GetCriteria() As CriteriaOperator - If Author IsNot Nothing Then - Return New BinaryOperator("Author.UserName", Author.UserName) - Else - Return CriteriaOperator.Parse("Author.Rating >= ?", AuthorMinRating) - End If - End Function - - Public Sub Find() - UpdateArticles() - End Sub - End Class -End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module/Controllers/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module/Controllers/ReadMe.txt deleted file mode 100644 index b9c5dc3..0000000 --- a/VB/NonPersistentObjectsDemo.Module/Controllers/ReadMe.txt +++ /dev/null @@ -1,19 +0,0 @@ -Folder Description - -The "Controllers" project folder is intended for storing platform-agnostic Controller classes -that can change the default XAF application flow and add new features. - - -Relevant Documentation - -Controllers and Actions -https://docs.devexpress.com/eXpressAppFramework/112623 - -Controller Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Controller - -ViewController Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ViewController - -WindowController Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.WindowController diff --git a/VB/NonPersistentObjectsDemo.Module/DatabaseUpdate/Updater.vb b/VB/NonPersistentObjectsDemo.Module/DatabaseUpdate/Updater.vb deleted file mode 100644 index c925266..0000000 --- a/VB/NonPersistentObjectsDemo.Module/DatabaseUpdate/Updater.vb +++ /dev/null @@ -1,83 +0,0 @@ -Imports System -Imports System.Linq -Imports DevExpress.ExpressApp -Imports DevExpress.Data.Filtering -Imports DevExpress.Persistent.Base -Imports DevExpress.ExpressApp.Updating -Imports DevExpress.ExpressApp.Security -Imports DevExpress.ExpressApp.SystemModule -Imports DevExpress.ExpressApp.Security.Strategy -Imports DevExpress.Xpo -Imports DevExpress.ExpressApp.Xpo -Imports DevExpress.Persistent.BaseImpl -Imports DevExpress.Persistent.BaseImpl.PermissionPolicy - -Namespace NonPersistentObjectsDemo.Module.DatabaseUpdate - ' For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Updating.ModuleUpdater - Public Class Updater - Inherits ModuleUpdater - - Public Sub New(ByVal objectSpace As IObjectSpace, ByVal currentDBVersion As Version) - MyBase.New(objectSpace, currentDBVersion) - End Sub - Public Overrides Sub UpdateDatabaseAfterUpdateSchema() - MyBase.UpdateDatabaseAfterUpdateSchema() - 'CreateSecurityObjects(); - End Sub - - #Region "Security" - Private Sub CreateSecurityObjects() - Dim sampleUser As PermissionPolicyUser = ObjectSpace.FindObject(Of PermissionPolicyUser)(New BinaryOperator("UserName", "User")) - If sampleUser Is Nothing Then - sampleUser = ObjectSpace.CreateObject(Of PermissionPolicyUser)() - sampleUser.UserName = "User" - sampleUser.SetPassword("") - End If - Dim defaultRole As PermissionPolicyRole = CreateDefaultRole() - sampleUser.Roles.Add(defaultRole) - - Dim userAdmin As PermissionPolicyUser = ObjectSpace.FindObject(Of PermissionPolicyUser)(New BinaryOperator("UserName", "Admin")) - If userAdmin Is Nothing Then - userAdmin = ObjectSpace.CreateObject(Of PermissionPolicyUser)() - userAdmin.UserName = "Admin" - ' Set a password if the standard authentication type is used - userAdmin.SetPassword("") - End If - ' If a role with the Administrators name doesn't exist in the database, create this role - Dim adminRole As PermissionPolicyRole = ObjectSpace.FindObject(Of PermissionPolicyRole)(New BinaryOperator("Name", "Administrators")) - If adminRole Is Nothing Then - adminRole = ObjectSpace.CreateObject(Of PermissionPolicyRole)() - adminRole.Name = "Administrators" - End If - adminRole.IsAdministrative = True - userAdmin.Roles.Add(adminRole) - ObjectSpace.CommitChanges() 'This line persists created object(s). - End Sub - #End Region - - Public Overrides Sub UpdateDatabaseBeforeUpdateSchema() - MyBase.UpdateDatabaseBeforeUpdateSchema() - 'if(CurrentDBVersion < new Version("1.1.0.0") && CurrentDBVersion > new Version("0.0.0.0")) { - ' RenameColumn("DomainObject1Table", "OldColumnName", "NewColumnName"); - '} - End Sub - Private Function CreateDefaultRole() As PermissionPolicyRole - Dim defaultRole As PermissionPolicyRole = ObjectSpace.FindObject(Of PermissionPolicyRole)(New BinaryOperator("Name", "Default")) - If defaultRole Is Nothing Then - defaultRole = ObjectSpace.CreateObject(Of PermissionPolicyRole)() - defaultRole.Name = "Default" - - defaultRole.AddObjectPermission(Of PermissionPolicyUser)(SecurityOperations.Read, "[Oid] = CurrentUserId()", SecurityPermissionState.Allow) - defaultRole.AddNavigationPermission("Application/NavigationItems/Items/Default/Items/MyDetails", SecurityPermissionState.Allow) - defaultRole.AddMemberPermission(Of PermissionPolicyUser)(SecurityOperations.Write, "ChangePasswordOnFirstLogon", "[Oid] = CurrentUserId()", SecurityPermissionState.Allow) - defaultRole.AddMemberPermission(Of PermissionPolicyUser)(SecurityOperations.Write, "StoredPassword", "[Oid] = CurrentUserId()", SecurityPermissionState.Allow) - defaultRole.AddTypePermissionsRecursively(Of PermissionPolicyRole)(SecurityOperations.Read, SecurityPermissionState.Deny) - defaultRole.AddTypePermissionsRecursively(Of ModelDifference)(SecurityOperations.ReadWriteAccess, SecurityPermissionState.Allow) - defaultRole.AddTypePermissionsRecursively(Of ModelDifferenceAspect)(SecurityOperations.ReadWriteAccess, SecurityPermissionState.Allow) - defaultRole.AddTypePermissionsRecursively(Of ModelDifference)(SecurityOperations.Create, SecurityPermissionState.Allow) - defaultRole.AddTypePermissionsRecursively(Of ModelDifferenceAspect)(SecurityOperations.Create, SecurityPermissionState.Allow) - End If - Return defaultRole - End Function - End Class -End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/ReadMe.txt deleted file mode 100644 index fb0b599..0000000 --- a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/ReadMe.txt +++ /dev/null @@ -1,10 +0,0 @@ -Folder Description - -The "FunctionalTests" project folder is intended for storing EasyTest -configuration file and scripts. - - -Relevant Documentation - -Functional Testing -https://docs.devexpress.com/eXpressAppFramework/113206 diff --git a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml deleted file mode 100644 index bf04ea6..0000000 --- a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/config.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/sample.ets b/VB/NonPersistentObjectsDemo.Module/FunctionalTests/sample.ets deleted file mode 100644 index ab78fc2..0000000 --- a/VB/NonPersistentObjectsDemo.Module/FunctionalTests/sample.ets +++ /dev/null @@ -1,20 +0,0 @@ -;#DropDB NonPersistentObjectsDemoEasyTest - -#Application NonPersistentObjectsDemoWin -#Application NonPersistentObjectsDemoWeb - -*FillForm - User Name = Admin -*Action Log In - -#IfDef NonPersistentObjectsDemoWin - -*Action About... - -*Action OK - -#EndIf - -#IfDef NonPersistentObjectsDemoWeb -*Action Navigation(My Details) -#EndIf diff --git a/VB/NonPersistentObjectsDemo.Module/Images/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module/Images/ReadMe.txt deleted file mode 100644 index 230befc..0000000 --- a/VB/NonPersistentObjectsDemo.Module/Images/ReadMe.txt +++ /dev/null @@ -1,12 +0,0 @@ -Folder Description - -The "Images" project folder is intended for storing custom image files. - - -Relevant Documentation - -Add and Override Images -https://docs.devexpress.com/eXpressAppFramework/112792 - -Assign a Custom Image -https://docs.devexpress.com/eXpressAppFramework/112744 diff --git a/VB/NonPersistentObjectsDemo.Module/Model.DesignedDiffs.xafml b/VB/NonPersistentObjectsDemo.Module/Model.DesignedDiffs.xafml deleted file mode 100644 index fbd248d..0000000 --- a/VB/NonPersistentObjectsDemo.Module/Model.DesignedDiffs.xafml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/VB/NonPersistentObjectsDemo.Module/Module.Designer.vb b/VB/NonPersistentObjectsDemo.Module/Module.Designer.vb deleted file mode 100644 index eb519e6..0000000 --- a/VB/NonPersistentObjectsDemo.Module/Module.Designer.vb +++ /dev/null @@ -1,50 +0,0 @@ -Namespace NonPersistentObjectsDemo.Module - Partial Public Class NonPersistentObjectsDemoModule - ''' - ''' Required designer variable. - ''' - Private components As System.ComponentModel.IContainer = Nothing - - ''' - ''' Clean up any resources being used. - ''' - ''' true if managed resources should be disposed; otherwise, false. - Protected Overrides Sub Dispose(ByVal disposing As Boolean) - If disposing AndAlso (components IsNot Nothing) Then - components.Dispose() - End If - MyBase.Dispose(disposing) - End Sub - - #Region "Component Designer generated code" - - ''' - ''' Required method for Designer support - do not modify - ''' the contents of this method with the code editor. - ''' - Private Sub InitializeComponent() - ' - ' NonPersistentObjectsDemoModule - ' - Me.AdditionalExportedTypes.Add(GetType(DevExpress.Persistent.BaseImpl.ModelDifference)) - Me.AdditionalExportedTypes.Add(GetType(DevExpress.Persistent.BaseImpl.ModelDifferenceAspect)) - Me.AdditionalExportedTypes.Add(GetType(DevExpress.Persistent.BaseImpl.BaseObject)) - 'this.AdditionalExportedTypes.Add(typeof(DevExpress.Persistent.BaseImpl.FileData)); - 'this.AdditionalExportedTypes.Add(typeof(DevExpress.Persistent.BaseImpl.FileAttachmentBase)); - 'this.AdditionalExportedTypes.Add(typeof(DevExpress.Persistent.BaseImpl.Event)); - 'this.AdditionalExportedTypes.Add(typeof(DevExpress.Persistent.BaseImpl.Resource)); - 'this.AdditionalExportedTypes.Add(typeof(DevExpress.Persistent.BaseImpl.HCategory)); - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.SystemModule.SystemModule)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.Objects.BusinessClassLibraryCustomizationModule)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.CloneObject.CloneObjectModule)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.ConditionalAppearance.ConditionalAppearanceModule)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.ReportsV2.ReportsModuleV2)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.Scheduler.SchedulerModuleBase)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.ScriptRecorder.ScriptRecorderModuleBase)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.TreeListEditors.TreeListEditorsModuleBase)) - Me.RequiredModuleTypes.Add(GetType(DevExpress.ExpressApp.Validation.ValidationModule)) - End Sub - - #End Region - End Class -End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module/Module.vb b/VB/NonPersistentObjectsDemo.Module/Module.vb deleted file mode 100644 index 6f57162..0000000 --- a/VB/NonPersistentObjectsDemo.Module/Module.vb +++ /dev/null @@ -1,54 +0,0 @@ -Imports System -Imports System.Text -Imports System.Linq -Imports DevExpress.ExpressApp -Imports System.ComponentModel -Imports DevExpress.ExpressApp.DC -Imports System.Collections.Generic -Imports DevExpress.Persistent.Base -Imports DevExpress.Persistent.BaseImpl -Imports DevExpress.Persistent.BaseImpl.PermissionPolicy -Imports DevExpress.ExpressApp.Model -Imports DevExpress.ExpressApp.Actions -Imports DevExpress.ExpressApp.Editors -Imports DevExpress.ExpressApp.Updating -Imports DevExpress.ExpressApp.Model.Core -Imports DevExpress.ExpressApp.Model.DomainLogics -Imports DevExpress.ExpressApp.Model.NodeGenerators -Imports DevExpress.ExpressApp.Xpo -Imports NonPersistentObjectsDemo.Module.BusinessObjects - -Namespace NonPersistentObjectsDemo.Module - ' For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase. - Public NotInheritable Partial Class NonPersistentObjectsDemoModule - Inherits ModuleBase - - Public Sub New() - InitializeComponent() - BaseObject.OidInitializationMode = OidInitializationMode.AfterConstruction - End Sub - Public Overrides Function GetModuleUpdaters(ByVal objectSpace As IObjectSpace, ByVal versionFromDB As Version) As IEnumerable(Of ModuleUpdater) - Dim updater As ModuleUpdater = New DatabaseUpdate.Updater(objectSpace, versionFromDB) - Return New ModuleUpdater() { updater } - End Function - Public Overrides Sub Setup(ByVal application As XafApplication) - MyBase.Setup(application) - ' Manage various aspects of the application UI and behavior at the module level. - AddHandler application.SetupComplete, AddressOf Application_SetupComplete - End Sub - Private Sub Application_SetupComplete(ByVal sender As Object, ByVal e As EventArgs) - AddHandler Application.ObjectSpaceCreated, AddressOf Application_ObjectSpaceCreated - End Sub - Private Sub Application_ObjectSpaceCreated(ByVal sender As Object, ByVal e As ObjectSpaceCreatedEventArgs) - Dim npos = TryCast(e.ObjectSpace, NonPersistentObjectSpace) - If npos IsNot Nothing Then - Dim tempVar As New ArticleAdapter(npos) - Dim tempVar2 As New ContactAdapter(npos) - End If - End Sub - Public Overrides Sub CustomizeTypesInfo(ByVal typesInfo As ITypesInfo) - MyBase.CustomizeTypesInfo(typesInfo) - CalculatedPersistentAliasHelper.CustomizeTypesInfo(typesInfo) - End Sub - End Class -End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module/My Project/AssemblyInfo.vb b/VB/NonPersistentObjectsDemo.Module/My Project/AssemblyInfo.vb deleted file mode 100644 index 43eb069..0000000 --- a/VB/NonPersistentObjectsDemo.Module/My Project/AssemblyInfo.vb +++ /dev/null @@ -1,33 +0,0 @@ -Imports System.Reflection -Imports System.Runtime.CompilerServices -Imports System.Runtime.InteropServices - -' General Information about an assembly is controlled through the following -' set of attributes. Change these attribute values to modify the information -' associated with an assembly. - - - - - - - - - -' Setting ComVisible to false makes the types in this assembly not visible -' to COM components. If you need to access a type in this assembly from -' COM, set the ComVisible attribute to true on that type. - - -' The following GUID is for the ID of the typelib if this project is exposed to COM - - -' Version information for an assembly consists of the following four values: -' -' Major Version -' Minor Version -' Build Number -' Revision -' - - diff --git a/VB/NonPersistentObjectsDemo.Module/NonPersistentObjectsDemo.Module.vbproj b/VB/NonPersistentObjectsDemo.Module/NonPersistentObjectsDemo.Module.vbproj deleted file mode 100644 index d375615..0000000 --- a/VB/NonPersistentObjectsDemo.Module/NonPersistentObjectsDemo.Module.vbproj +++ /dev/null @@ -1,202 +0,0 @@ - - - - - Debug - AnyCPU - {57ACDBDB-006E-43D3-9308-97857F2FF75D} - Library - - NonPersistentObjectsDemo.Module - v4.5.2 - 512 - On - Binary - Off - On - - - true - full - false - bin\Debug\ - true - true - prompt - true - - - pdbonly - true - bin\Release\ - false - true - prompt - true - - - true - bin\EasyTest\ - true - true - EASYTEST=True - full - AnyCPU - prompt - true - - - - - - - - - - - - - - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - System - - - System.Data - - - - System.XML - - - - - - - - Component - - - - Component - - - Module.vb - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/VB/NonPersistentObjectsDemo.Module/ReadMe.txt b/VB/NonPersistentObjectsDemo.Module/ReadMe.txt deleted file mode 100644 index a96fb7a..0000000 --- a/VB/NonPersistentObjectsDemo.Module/ReadMe.txt +++ /dev/null @@ -1,28 +0,0 @@ -Project Description - -This project implements a platform-agnostic Module. UI-independent application -elements can be implemented here (Business Objects, Controllers, etc.). The root -project folder contains the Module.cs(vb) file with the class that inherits -ModuleBase. This class can be designed with the Module Designer that allows -you to view and customize Module components: referenced modules, Controllers -and business classes. Additionally, the root folder contains Application Model -difference files (XAFML files) that keep application settings specific for the -current Module. Differences files can be designed with the Model Editor. - - -Relevant Documentation - -Application Solution Components -https://docs.devexpress.com/eXpressAppFramework/112569 - -ModuleBase Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase - -Module Designer -https://docs.devexpress.com/eXpressAppFramework/112828 - -Application Model -https://docs.devexpress.com/eXpressAppFramework/112579 - -Model Editor -https://docs.devexpress.com/eXpressAppFramework/112582 diff --git a/VB/NonPersistentObjectsDemo.Module/Util.vb b/VB/NonPersistentObjectsDemo.Module/Util.vb deleted file mode 100644 index 039906c..0000000 --- a/VB/NonPersistentObjectsDemo.Module/Util.vb +++ /dev/null @@ -1,102 +0,0 @@ -Imports System -Imports System.Collections.Generic -Imports System.Linq -Imports System.Text -Imports System.Threading.Tasks - -Namespace NonPersistentObjectsDemo.Module - - Public Class GenHelper - Private Shared srnd As Random - Private Shared words As List(Of String) - Private Shared fnames As List(Of String) - Private Shared lnames As List(Of String) - Shared Sub New() - srnd = New Random() - words = CreateWords(12000) - fnames = CreateNames(200) - lnames = CreateNames(500) - End Sub - Private Shared Function CreateWords(ByVal number As Integer) As List(Of String) - Dim items = New HashSet(Of String)() - Do While number > 0 - If items.Add(CreateWord()) Then - number -= 1 - End If - Loop - Return items.ToList() - End Function - Private Shared Function MakeTosh(ByVal rnd As Random, ByVal length As Integer) As String - Dim chars = New Char(length - 1){} - For i As Integer = 0 To length - 1 - chars(i) = ChrW(AscW("a"c) + rnd.Next(26)) - Next i - Return New String(chars) - End Function - Private Shared Function CreateWord() As String - Return MakeTosh(srnd, 1 + srnd.Next(13)) - End Function - Private Shared Function CreateNames(ByVal number As Integer) As List(Of String) - Dim items = New HashSet(Of String)() - Do While number > 0 - If items.Add(ToTitle(CreateWord())) Then - number -= 1 - End If - Loop - Return items.ToList() - End Function - Public Shared Function ToTitle(ByVal s As String) As String - If String.IsNullOrEmpty(s) Then - Return s - End If - Return String.Concat(s.Substring(0, 1).ToUpper(), s.Substring(1)) - End Function - - Private rnd As Random - Public Sub New() - rnd = New Random() - End Sub - Public Sub New(ByVal seed As Integer) - rnd = New Random(seed) - End Sub - Public Function [Next](ByVal max As Integer) As Integer - Return rnd.Next(max) - End Function - Public Function MakeTosh(ByVal length As Integer) As String - Return MakeTosh(rnd, length) - End Function - Public Function MakeBlah(ByVal length As Integer) As String - Dim sb = New StringBuilder() - For i = 0 To length - If sb.Length > 0 Then - sb.Append(" ") - End If - sb.Append(GetWord()) - Next i - Return sb.ToString() - End Function - Public Function MakeBlahBlahBlah(ByVal length As Integer, ByVal plength As Integer) As String - Dim sb = New StringBuilder() - For i = 0 To length - If sb.Length > 0 Then - sb.Append(" ") - End If - Dim w = ToTitle(MakeBlah(3 + rnd.Next(plength))) & "." - sb.Append(w) - Next i - Return sb.ToString() - End Function - Public Function GetFullName() As String - Return String.Concat(GetFName(), " ", GetLName()) - End Function - Private Function GetFName() As String - Return fnames(rnd.Next(fnames.Count)) - End Function - Private Function GetLName() As String - Return lnames(rnd.Next(lnames.Count)) - End Function - Private Function GetWord() As String - Return words(rnd.Next(words.Count)) - End Function - End Class -End Namespace diff --git a/VB/NonPersistentObjectsDemo.Module/Welcome.html b/VB/NonPersistentObjectsDemo.Module/Welcome.html deleted file mode 100644 index d27bb12..0000000 --- a/VB/NonPersistentObjectsDemo.Module/Welcome.html +++ /dev/null @@ -1,185 +0,0 @@ - - - - - Your XAF application - - - - - - -
- - - - - -
-
-

The XAF Solution Wizard has successfully generated the solution according to your settings.

-
    -
  • The NonPersistentObjectsDemo.Module project keeps your platform-agnostic code. - Add persistent objects code to the Business Objects folder of this project and XAF will automatically create a UI to create, read, update and delete these persistent objects.
  • -
  • The NonPersistentObjectsDemo.Win project is a startup project for the desktop application.
  • -
  • The NonPersistentObjectsDemo.Web project is a startup project for the web application.
  • -
  • To specify the database used by your application, modify the ConnectionString attribute in the configuration file located in the startup project.
  • -
  • To login, enter the "Admin" user name with empty password.
  • -
-
-
- - - - - -
-
- - - \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Web/Default.aspx b/VB/NonPersistentObjectsDemo.Web/Default.aspx deleted file mode 100644 index 918be8f..0000000 --- a/VB/NonPersistentObjectsDemo.Web/Default.aspx +++ /dev/null @@ -1,19 +0,0 @@ -<%@ Page Language="C#" AutoEventWireup="true" Inherits="Default" EnableViewState="false" - ValidateRequest="false" CodeBehind="Default.aspx.cs" %> -<%@ Register Assembly="DevExpress.ExpressApp.Web.v20.1" - Namespace="DevExpress.ExpressApp.Web.Templates" TagPrefix="cc3" %> -<%@ Register Assembly="DevExpress.ExpressApp.Web.v20.1" - Namespace="DevExpress.ExpressApp.Web.Controls" TagPrefix="cc4" %> - - - - Main Page - - - -
- -
- - - \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Web/Default.aspx.designer.vb b/VB/NonPersistentObjectsDemo.Web/Default.aspx.designer.vb deleted file mode 100644 index 9a635ed..0000000 --- a/VB/NonPersistentObjectsDemo.Web/Default.aspx.designer.vb +++ /dev/null @@ -1,40 +0,0 @@ -'------------------------------------------------------------------------------ -' -' This code was generated by a tool. -' -' Changes to this file may cause incorrect behavior and will be lost if -' the code is regenerated. -' -'------------------------------------------------------------------------------ - - - -Partial Public Class [Default] - - ''' - ''' form2 control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected form2 As System.Web.UI.HtmlControls.HtmlForm - - ''' - ''' ProgressControl control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected ProgressControl As Global.DevExpress.ExpressApp.Web.Controls.ASPxProgressControl - - ''' - ''' Content control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected Content As System.Web.UI.HtmlControls.HtmlGenericControl -End Class diff --git a/VB/NonPersistentObjectsDemo.Web/Default.aspx.vb b/VB/NonPersistentObjectsDemo.Web/Default.aspx.vb deleted file mode 100644 index 90b1180..0000000 --- a/VB/NonPersistentObjectsDemo.Web/Default.aspx.vb +++ /dev/null @@ -1,20 +0,0 @@ -Imports System -Imports System.Collections.Generic -Imports System.Web.UI -Imports DevExpress.ExpressApp.Templates -Imports DevExpress.ExpressApp.Web -Imports DevExpress.ExpressApp.Web.Templates -Imports DevExpress.ExpressApp.Web.Templates.ActionContainers - -Partial Public Class [Default] - Inherits BaseXafPage - - Protected Overrides Function CreateContextActionsMenu() As ContextActionsMenu - Return New ContextActionsMenu(Me, "Edit", "RecordEdit", "ObjectsCreation", "ListView", "Reports") - End Function - Public Overrides ReadOnly Property InnerContentPlaceHolder() As Control - Get - Return Content - End Get - End Property -End Class \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Web/Error.aspx b/VB/NonPersistentObjectsDemo.Web/Error.aspx deleted file mode 100644 index 5cd4348..0000000 --- a/VB/NonPersistentObjectsDemo.Web/Error.aspx +++ /dev/null @@ -1,147 +0,0 @@ -<%@ Page Language="c#" AutoEventWireup="false" Inherits="ErrorPage" EnableViewState="false" - ValidateRequest="false" CodeBehind="Error.aspx.cs" %> - - - - Error - - - - -
- - - - -
-
-
- - - - - -
-

- -

-
- -
- -
- - - - -
- - - -

-

- -

- - We are currently unable to serve your request.
- You could go back and - try again or - restart the application. -
-

- - - - Show Error details - - - - Report error
-
-

- This error has been logged. If you have additional information that you believe - may have caused this error please report the problem.

- - - - - - - -
- -
- -
-
-
-
-
-
-
-
-
-
-
- -
- - diff --git a/VB/NonPersistentObjectsDemo.Web/Error.aspx.designer.vb b/VB/NonPersistentObjectsDemo.Web/Error.aspx.designer.vb deleted file mode 100644 index 4155220..0000000 --- a/VB/NonPersistentObjectsDemo.Web/Error.aspx.designer.vb +++ /dev/null @@ -1,166 +0,0 @@ -'------------------------------------------------------------------------------ -' -' This code was generated by a tool. -' -' Changes to this file may cause incorrect behavior and will be lost if -' the code is regenerated. -' -'------------------------------------------------------------------------------ - - - -Partial Public Class ErrorPage - - ''' - ''' Head1 control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected Head1 As System.Web.UI.HtmlControls.HtmlHead - - ''' - ''' form1 control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected form1 As System.Web.UI.HtmlControls.HtmlForm - - ''' - ''' ApplicationTitle control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected ApplicationTitle As System.Web.UI.WebControls.Literal - - ''' - ''' InfoMessagesPanel control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected InfoMessagesPanel As System.Web.UI.WebControls.Literal - - ''' - ''' Table1 control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected Table1 As System.Web.UI.WebControls.Table - - ''' - ''' TableRow2 control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected TableRow2 As System.Web.UI.WebControls.TableRow - - ''' - ''' ViewSite control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected ViewSite As System.Web.UI.WebControls.TableCell - - ''' - ''' ErrorTitleLiteral control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected ErrorTitleLiteral As System.Web.UI.WebControls.Literal - - ''' - ''' ErrorPanel control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected ErrorPanel As System.Web.UI.WebControls.Panel - - ''' - ''' ApologizeMessage control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected ApologizeMessage As System.Web.UI.WebControls.PlaceHolder - - ''' - ''' HyperLink1 control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected HyperLink1 As System.Web.UI.WebControls.HyperLink - - ''' - ''' NavigateToStart control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected NavigateToStart As System.Web.UI.WebControls.LinkButton - - ''' - ''' Details control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected Details As System.Web.UI.WebControls.Panel - - ''' - ''' DetailsText control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected DetailsText As System.Web.UI.WebControls.Literal - - ''' - ''' ReportForm control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected ReportForm As System.Web.UI.WebControls.Panel - - ''' - ''' DescriptionTextBox control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected DescriptionTextBox As System.Web.UI.WebControls.TextBox - - ''' - ''' ReportButton control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected ReportButton As System.Web.UI.WebControls.Button -End Class diff --git a/VB/NonPersistentObjectsDemo.Web/Error.aspx.vb b/VB/NonPersistentObjectsDemo.Web/Error.aspx.vb deleted file mode 100644 index 053a4bf..0000000 --- a/VB/NonPersistentObjectsDemo.Web/Error.aspx.vb +++ /dev/null @@ -1,77 +0,0 @@ -Imports System -Imports System.Web.UI -Imports DevExpress.ExpressApp.Web -Imports DevExpress.ExpressApp.Web.SystemModule -Imports DevExpress.ExpressApp.Web.Templates -Imports DevExpress.ExpressApp.Web.TestScripts - -Partial Public Class ErrorPage - Inherits System.Web.UI.Page - - Protected Overrides Sub InitializeCulture() - If WebApplication.Instance IsNot Nothing Then - WebApplication.Instance.InitializeCulture() - End If - End Sub - Protected Overrides Sub OnPreInit(ByVal e As EventArgs) - MyBase.OnPreInit(e) - BaseXafPage.SetupCurrentTheme() - End Sub - Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load - If TestScriptsManager.EasyTestEnabled Then - Dim testScriptsManager As New TestScriptsManager(Page) - testScriptsManager.RegisterControl(JSLabelTestControl.ClassName, "FormCaption", TestControlType.Field, "FormCaption") - testScriptsManager.RegisterControl(JSLabelTestControl.ClassName, "DescriptionTextBox", TestControlType.Field, "Description") - testScriptsManager.RegisterControl(JSDefaultTestControl.ClassName, "ReportButton", TestControlType.Action, "Report") - testScriptsManager.AllControlRegistered() - ClientScript.RegisterStartupScript(Me.GetType(), "EasyTest", testScriptsManager.GetScript(), True) - End If - If WebApplication.Instance IsNot Nothing Then - ApplicationTitle.Text = WebApplication.Instance.Title - Else - ApplicationTitle.Text = "No application" - End If - Header.Title = "Application Error - " & ApplicationTitle.Text - - Dim errorInfo As ErrorInfo = ErrorHandling.GetApplicationError() - If errorInfo IsNot Nothing Then - If ErrorHandling.CanShowDetailedInformation Then - DetailsText.Text = errorInfo.GetTextualPresentation(True) - Else - Details.Visible = False - End If - ReportForm.Visible = ErrorHandling.CanSendAlertToAdmin - Else - ErrorPanel.Visible = False - End If - End Sub - #Region "Web Form Designer generated code" - Protected Overrides Sub OnInit(ByVal e As EventArgs) - InitializeComponent() - MyBase.OnInit(e) - End Sub - - Private Sub InitializeComponent() -'INSTANT VB NOTE: The following InitializeComponent event wireup was converted to a 'Handles' clause: -'ORIGINAL LINE: this.Load += new System.EventHandler(this.Page_Load); -'INSTANT VB NOTE: The following InitializeComponent event wireup was converted to a 'Handles' clause: -'ORIGINAL LINE: this.PreRender += new EventHandler(ErrorPage_PreRender); - End Sub - - Private Sub ErrorPage_PreRender(ByVal sender As Object, ByVal e As EventArgs) Handles Me.PreRender - RegisterThemeAssemblyController.RegisterThemeResources(DirectCast(sender, Page)) - End Sub - - - #End Region - Protected Sub ReportButton_Click(ByVal sender As Object, ByVal e As EventArgs) - Dim errorInfo As ErrorInfo = ErrorHandling.GetApplicationError() - If errorInfo IsNot Nothing Then - ErrorHandling.SendAlertToAdmin(errorInfo.Id, DescriptionTextBox.Text, errorInfo.Exception.Message) - ClientScript.RegisterStartupScript(Me.GetType(), "alert", "alert('Your report has been sent. Thank you.');", True) - End If - End Sub - Protected Sub NavigateToStart_Click(ByVal sender As Object, ByVal e As EventArgs) - WebApplication.Instance.LogOff() - End Sub -End Class diff --git a/VB/NonPersistentObjectsDemo.Web/Global.asax b/VB/NonPersistentObjectsDemo.Web/Global.asax deleted file mode 100644 index 129093f..0000000 --- a/VB/NonPersistentObjectsDemo.Web/Global.asax +++ /dev/null @@ -1 +0,0 @@ -<%@ Application Language="C#" CodeBehind="Global.asax.cs" Inherits="NonPersistentObjectsDemo.Web.Global"%> diff --git a/VB/NonPersistentObjectsDemo.Web/Global.asax.vb b/VB/NonPersistentObjectsDemo.Web/Global.asax.vb deleted file mode 100644 index 68b4fae..0000000 --- a/VB/NonPersistentObjectsDemo.Web/Global.asax.vb +++ /dev/null @@ -1,77 +0,0 @@ -Imports System -Imports System.Configuration -Imports System.Web.Configuration -Imports System.Web -Imports System.Web.Routing - -Imports DevExpress.ExpressApp -Imports DevExpress.Persistent.Base -Imports DevExpress.Persistent.BaseImpl -Imports DevExpress.ExpressApp.Security -Imports DevExpress.ExpressApp.Web -Imports DevExpress.Web - -Namespace NonPersistentObjectsDemo.Web - Public Class [Global] - Inherits System.Web.HttpApplication - - Public Sub New() - InitializeComponent() - End Sub - Protected Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs) - RouteTable.Routes.RegisterXafRoutes() - DevExpress.ExpressApp.BaseObjectSpace.ThrowExceptionForNotRegisteredEntityType = True - AddHandler ASPxWebControl.CallbackError, AddressOf Application_Error -#If EASYTEST Then - DevExpress.ExpressApp.Web.TestScripts.TestScriptsManager.EasyTestEnabled = True -#End If - End Sub - Protected Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs) - Tracing.Initialize() - WebApplication.SetInstance(Session, New NonPersistentObjectsDemoAspNetApplication()) - 'SecurityStrategy security = (SecurityStrategy)WebApplication.Instance.Security; - 'security.RegisterXPOAdapterProviders(); - DevExpress.ExpressApp.Web.Templates.DefaultVerticalTemplateContentNew.ClearSizeLimit() - WebApplication.Instance.SwitchToNewStyle() - If ConfigurationManager.ConnectionStrings("ConnectionString") IsNot Nothing Then - WebApplication.Instance.ConnectionString = ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString - End If -#If EASYTEST Then - If ConfigurationManager.ConnectionStrings("EasyTestConnectionString") IsNot Nothing Then - WebApplication.Instance.ConnectionString = ConfigurationManager.ConnectionStrings("EasyTestConnectionString").ConnectionString - End If -#End If - WebApplication.Instance.ConnectionString = DevExpress.ExpressApp.Xpo.InMemoryDataStoreProvider.ConnectionString -#If DEBUG Then - If System.Diagnostics.Debugger.IsAttached AndAlso WebApplication.Instance.CheckCompatibilityType = CheckCompatibilityType.DatabaseSchema Then - WebApplication.Instance.DatabaseUpdateMode = DatabaseUpdateMode.UpdateDatabaseAlways - End If -#End If - WebApplication.Instance.Setup() - WebApplication.Instance.Start() - End Sub - Protected Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs) - End Sub - Protected Sub Application_EndRequest(ByVal sender As Object, ByVal e As EventArgs) - End Sub - Protected Sub Application_AuthenticateRequest(ByVal sender As Object, ByVal e As EventArgs) - End Sub - Protected Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs) - ErrorHandling.Instance.ProcessApplicationError() - End Sub - Protected Sub Session_End(ByVal sender As Object, ByVal e As EventArgs) - WebApplication.LogOff(Session) - WebApplication.DisposeInstance(Session) - End Sub - Protected Sub Application_End(ByVal sender As Object, ByVal e As EventArgs) - End Sub - #Region "Web Form Designer generated code" - ''' - ''' Required method for Designer support - do not modify - ''' the contents of this method with the code editor. - ''' - Private Sub InitializeComponent() - End Sub - #End Region - End Class -End Namespace diff --git a/VB/NonPersistentObjectsDemo.Web/Images/Logo.svg b/VB/NonPersistentObjectsDemo.Web/Images/Logo.svg deleted file mode 100644 index d0aa175..0000000 --- a/VB/NonPersistentObjectsDemo.Web/Images/Logo.svg +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - diff --git a/VB/NonPersistentObjectsDemo.Web/Images/ReadMe.txt b/VB/NonPersistentObjectsDemo.Web/Images/ReadMe.txt deleted file mode 100644 index 230befc..0000000 --- a/VB/NonPersistentObjectsDemo.Web/Images/ReadMe.txt +++ /dev/null @@ -1,12 +0,0 @@ -Folder Description - -The "Images" project folder is intended for storing custom image files. - - -Relevant Documentation - -Add and Override Images -https://docs.devexpress.com/eXpressAppFramework/112792 - -Assign a Custom Image -https://docs.devexpress.com/eXpressAppFramework/112744 diff --git a/VB/NonPersistentObjectsDemo.Web/Login.aspx b/VB/NonPersistentObjectsDemo.Web/Login.aspx deleted file mode 100644 index b610ff1..0000000 --- a/VB/NonPersistentObjectsDemo.Web/Login.aspx +++ /dev/null @@ -1,24 +0,0 @@ -<%@ Page Language="C#" AutoEventWireup="true" Inherits="LoginPage" EnableViewState="false" - ValidateRequest="false" CodeBehind="Login.aspx.cs" %> -<%@ Register Assembly="DevExpress.ExpressApp.Web.v20.1" - Namespace="DevExpress.ExpressApp.Web.Templates.ActionContainers" TagPrefix="cc2" %> -<%@ Register Assembly="DevExpress.ExpressApp.Web.v20.1" - Namespace="DevExpress.ExpressApp.Web.Templates.Controls" TagPrefix="tc" %> -<%@ Register Assembly="DevExpress.ExpressApp.Web.v20.1" - Namespace="DevExpress.ExpressApp.Web.Controls" TagPrefix="cc4" %> -<%@ Register Assembly="DevExpress.ExpressApp.Web.v20.1" - Namespace="DevExpress.ExpressApp.Web.Templates" TagPrefix="cc3" %> - - - - Logon - - -
-
- -
- -
- - diff --git a/VB/NonPersistentObjectsDemo.Web/Login.aspx.designer.vb b/VB/NonPersistentObjectsDemo.Web/Login.aspx.designer.vb deleted file mode 100644 index b729840..0000000 --- a/VB/NonPersistentObjectsDemo.Web/Login.aspx.designer.vb +++ /dev/null @@ -1,49 +0,0 @@ -'------------------------------------------------------------------------------ -' -' This code was generated by a tool. -' -' Changes to this file may cause incorrect behavior and will be lost if -' the code is regenerated. -' -'------------------------------------------------------------------------------ - - - -Partial Public Class LoginPage - - ''' - ''' Head1 control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected Head1 As System.Web.UI.HtmlControls.HtmlHead - - ''' - ''' form1 control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected form1 As System.Web.UI.HtmlControls.HtmlForm - - ''' - ''' ProgressControl control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected ProgressControl As Global.DevExpress.ExpressApp.Web.Controls.ASPxProgressControl - - ''' - ''' Content control. - ''' - ''' - ''' Auto-generated field. - ''' To modify move field declaration from designer file to code-behind file. - ''' - Protected Content As System.Web.UI.HtmlControls.HtmlGenericControl -End Class diff --git a/VB/NonPersistentObjectsDemo.Web/Login.aspx.vb b/VB/NonPersistentObjectsDemo.Web/Login.aspx.vb deleted file mode 100644 index 8edd0a0..0000000 --- a/VB/NonPersistentObjectsDemo.Web/Login.aspx.vb +++ /dev/null @@ -1,14 +0,0 @@ -Imports System - -Imports DevExpress.ExpressApp.Web -Imports DevExpress.ExpressApp.Web.Templates - -Partial Public Class LoginPage - Inherits BaseXafPage - - Public Overrides ReadOnly Property InnerContentPlaceHolder() As System.Web.UI.Control - Get - Return Content - End Get - End Property -End Class diff --git a/VB/NonPersistentObjectsDemo.Web/Model.Desktop.xafml b/VB/NonPersistentObjectsDemo.Web/Model.Desktop.xafml deleted file mode 100644 index ab80ccd..0000000 --- a/VB/NonPersistentObjectsDemo.Web/Model.Desktop.xafml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/VB/NonPersistentObjectsDemo.Web/Model.Tablet.xafml b/VB/NonPersistentObjectsDemo.Web/Model.Tablet.xafml deleted file mode 100644 index ab80ccd..0000000 --- a/VB/NonPersistentObjectsDemo.Web/Model.Tablet.xafml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/VB/NonPersistentObjectsDemo.Web/Model.xafml b/VB/NonPersistentObjectsDemo.Web/Model.xafml deleted file mode 100644 index ab80ccd..0000000 --- a/VB/NonPersistentObjectsDemo.Web/Model.xafml +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/VB/NonPersistentObjectsDemo.Web/My Project/AssemblyInfo.vb b/VB/NonPersistentObjectsDemo.Web/My Project/AssemblyInfo.vb deleted file mode 100644 index 13e64bb..0000000 --- a/VB/NonPersistentObjectsDemo.Web/My Project/AssemblyInfo.vb +++ /dev/null @@ -1,33 +0,0 @@ -Imports System.Reflection -Imports System.Runtime.CompilerServices -Imports System.Runtime.InteropServices - -' General Information about an assembly is controlled through the following -' set of attributes. Change these attribute values to modify the information -' associated with an assembly. - - - - - - - - - -' Setting ComVisible to false makes the types in this assembly not visible -' to COM components. If you need to access a type in this assembly from -' COM, set the ComVisible attribute to true on that type. - - -' The following GUID is for the ID of the typelib if this project is exposed to COM - - -' Version information for an assembly consists of the following four values: -' -' Major Version -' Minor Version -' Build Number -' Revision -' - - diff --git a/VB/NonPersistentObjectsDemo.Web/NonPersistentObjectsDemo.Web.vbproj b/VB/NonPersistentObjectsDemo.Web/NonPersistentObjectsDemo.Web.vbproj deleted file mode 100644 index 23f8676..0000000 --- a/VB/NonPersistentObjectsDemo.Web/NonPersistentObjectsDemo.Web.vbproj +++ /dev/null @@ -1,396 +0,0 @@ - - - - - Debug - AnyCPU - {8C3026D1-113C-4B88-9F91-236753790C60} - {349c5851-65df-11da-9384-00065b846f21};{F184B08F-C81C-45F6-A57F-5ABD9991F28F} - Library - - NonPersistentObjectsDemo.Web - v4.5.2 - 512 - false - 44300 - enabled - disabled - false - - - On - Binary - Off - On - - - true - full - false - bin\ - true - true - prompt - true - - - pdbonly - true - bin\ - false - true - prompt - true - - - true - bin\ - true - true - EASYTEST=True - full - AnyCPU - prompt - true - - - - - - - - - - - - - - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - False - - - False - False - - - False - False - - - False - False - - - False - False - - - False - False - - - False - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - False - - - - - - - - - - - - Default.aspx - - - Error.aspx - - - Global.asax - - - Login.aspx - - - Component - - - Default.aspx - ASPXCodeBehind - - - Error.aspx - ASPXCodeBehind - - - Login.aspx - ASPXCodeBehind - - - - - - Designer - - - - - - - - - - - {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B} - NonPersistentObjectsDemo.Module.Web - True - - - {57ACDBDB-006E-43D3-9308-97857F2FF75D} - NonPersistentObjectsDemo.Module - True - - - - 10.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - - - - - - - - - - False - True - 2064 - / - - - False - False - - - False - - - - - diff --git a/VB/NonPersistentObjectsDemo.Web/ReadMe.txt b/VB/NonPersistentObjectsDemo.Web/ReadMe.txt deleted file mode 100644 index db74671..0000000 --- a/VB/NonPersistentObjectsDemo.Web/ReadMe.txt +++ /dev/null @@ -1,31 +0,0 @@ -Project Description - -This project implements an ASP.NET application. The ApplicationCode project -folder contains the WebApplication.cs(vb) file with the class that inherits -WebApplication. This class can be designed with the Application Designer that -allows you to view and customize application components: referenced modules, -security settings, data connection. Additionally, the root folder contains -Application Model difference files (XAFML files) that keep application settings -specific for the current application. Differences files can be designed with -the Model Editor. - - -Relevant Documentation - -Application Solution Components -https://docs.devexpress.com/eXpressAppFramework/112569 - -WebApplication Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Web.WebApplication - -XafApplication Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.XafApplication - -Application Designer -https://docs.devexpress.com/eXpressAppFramework/112827 - -Application Model -https://docs.devexpress.com/eXpressAppFramework/112579 - -Model Editor -https://docs.devexpress.com/eXpressAppFramework/112582 diff --git a/VB/NonPersistentObjectsDemo.Web/Web.config b/VB/NonPersistentObjectsDemo.Web/Web.config deleted file mode 100644 index f2b083e..0000000 --- a/VB/NonPersistentObjectsDemo.Web/Web.config +++ /dev/null @@ -1,185 +0,0 @@ - - - - - -
-
-
-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Web/WebApplication.vb b/VB/NonPersistentObjectsDemo.Web/WebApplication.vb deleted file mode 100644 index 0271483..0000000 --- a/VB/NonPersistentObjectsDemo.Web/WebApplication.vb +++ /dev/null @@ -1,172 +0,0 @@ -Imports System -Imports DevExpress.ExpressApp -Imports System.ComponentModel -Imports DevExpress.ExpressApp.Web -Imports System.Collections.Generic -Imports DevExpress.ExpressApp.Xpo -Imports DevExpress.ExpressApp.Security -Imports DevExpress.ExpressApp.Security.ClientServer - -Namespace NonPersistentObjectsDemo.Web - ' For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Web.WebApplication - Partial Public Class NonPersistentObjectsDemoAspNetApplication - Inherits WebApplication - - Private module1 As DevExpress.ExpressApp.SystemModule.SystemModule - Private module2 As DevExpress.ExpressApp.Web.SystemModule.SystemAspNetModule - Private module3 As NonPersistentObjectsDemo.Module.NonPersistentObjectsDemoModule - Private module4 As NonPersistentObjectsDemo.Module.Web.NonPersistentObjectsDemoAspNetModule - Private securityModule1 As DevExpress.ExpressApp.Security.SecurityModule - Private securityStrategyComplex1 As DevExpress.ExpressApp.Security.SecurityStrategyComplex - Private authenticationStandard1 As DevExpress.ExpressApp.Security.AuthenticationStandard - Private objectsModule As DevExpress.ExpressApp.Objects.BusinessClassLibraryCustomizationModule - Private cloneObjectModule As DevExpress.ExpressApp.CloneObject.CloneObjectModule - Private conditionalAppearanceModule As DevExpress.ExpressApp.ConditionalAppearance.ConditionalAppearanceModule - Private fileAttachmentsAspNetModule As DevExpress.ExpressApp.FileAttachments.Web.FileAttachmentsAspNetModule - Private reportsModuleV2 As DevExpress.ExpressApp.ReportsV2.ReportsModuleV2 - Private reportsAspNetModuleV2 As DevExpress.ExpressApp.ReportsV2.Web.ReportsAspNetModuleV2 - Private schedulerModuleBase As DevExpress.ExpressApp.Scheduler.SchedulerModuleBase - Private schedulerAspNetModule As DevExpress.ExpressApp.Scheduler.Web.SchedulerAspNetModule - Private scriptRecorderModuleBase As DevExpress.ExpressApp.ScriptRecorder.ScriptRecorderModuleBase - Private scriptRecorderAspNetModule As DevExpress.ExpressApp.ScriptRecorder.Web.ScriptRecorderAspNetModule - Private treeListEditorsModuleBase As DevExpress.ExpressApp.TreeListEditors.TreeListEditorsModuleBase - Private treeListEditorsAspNetModule As DevExpress.ExpressApp.TreeListEditors.Web.TreeListEditorsAspNetModule - Private validationModule As DevExpress.ExpressApp.Validation.ValidationModule - Private validationAspNetModule As DevExpress.ExpressApp.Validation.Web.ValidationAspNetModule - - #Region "Default XAF configuration options (https:" 'www.devexpress.com/kb=T501418) - Shared Sub New() - EnableMultipleBrowserTabsSupport = True - DevExpress.ExpressApp.Web.Editors.ASPx.ASPxGridListEditor.AllowFilterControlHierarchy = True - DevExpress.ExpressApp.Web.Editors.ASPx.ASPxGridListEditor.MaxFilterControlHierarchyDepth = 3 - DevExpress.ExpressApp.Web.Editors.ASPx.ASPxCriteriaPropertyEditor.AllowFilterControlHierarchyDefault = True - DevExpress.ExpressApp.Web.Editors.ASPx.ASPxCriteriaPropertyEditor.MaxHierarchyDepthDefault = 3 - DevExpress.Persistent.Base.PasswordCryptographer.EnableRfc2898 = True - DevExpress.Persistent.Base.PasswordCryptographer.SupportLegacySha512 = False - End Sub - Private Sub InitializeDefaults() - LinkNewObjectToParentImmediately = False - OptimizedControllersCreation = True - End Sub - #End Region - Public Sub New() - InitializeComponent() - InitializeDefaults() - End Sub - Protected Overrides Function CreateViewUrlManager() As IViewUrlManager - Return New ViewUrlManager() - End Function - Protected Overrides Sub CreateDefaultObjectSpaceProvider(ByVal args As CreateCustomObjectSpaceProviderEventArgs) - 'args.ObjectSpaceProvider = new SecuredObjectSpaceProvider((SecurityStrategyComplex)Security, GetDataStoreProvider(args.ConnectionString, args.Connection), true); - args.ObjectSpaceProvider = New XPObjectSpaceProvider(GetDataStoreProvider(args.ConnectionString, args.Connection), True) - args.ObjectSpaceProviders.Add(New NonPersistentObjectSpaceProvider(TypesInfo, Nothing)) - End Sub - Private Function GetDataStoreProvider(ByVal connectionString As String, ByVal connection As System.Data.IDbConnection) As IXpoDataStoreProvider - Dim application As System.Web.HttpApplicationState = If(System.Web.HttpContext.Current IsNot Nothing, System.Web.HttpContext.Current.Application, Nothing) - Dim dataStoreProvider As IXpoDataStoreProvider = Nothing - If application IsNot Nothing AndAlso application("DataStoreProvider") IsNot Nothing Then - dataStoreProvider = TryCast(application("DataStoreProvider"), IXpoDataStoreProvider) - Else - dataStoreProvider = XPObjectSpaceProvider.GetDataStoreProvider(connectionString, connection, True) - If application IsNot Nothing Then - application("DataStoreProvider") = dataStoreProvider - End If - End If - Return dataStoreProvider - End Function - Private Sub NonPersistentObjectsDemoAspNetApplication_DatabaseVersionMismatch(ByVal sender As Object, ByVal e As DevExpress.ExpressApp.DatabaseVersionMismatchEventArgs) Handles Me.DatabaseVersionMismatch -#If EASYTEST Then - e.Updater.Update() - e.Handled = True -#Else - If System.Diagnostics.Debugger.IsAttached Then - e.Updater.Update() - e.Handled = True - Else - Dim message As String = "The application cannot connect to the specified database, " & "because the database doesn't exist, its version is older " & "than that of the application or its schema does not match " & "the ORM data model structure. To avoid this error, use one " & "of the solutions from the https://www.devexpress.com/kb=T367835 KB Article." - - If e.CompatibilityError IsNot Nothing AndAlso e.CompatibilityError.Exception IsNot Nothing Then - message &= vbCrLf & vbCrLf & "Inner exception: " & e.CompatibilityError.Exception.Message - End If - Throw New InvalidOperationException(message) - End If -#End If - End Sub - Private Sub InitializeComponent() - Me.module1 = New DevExpress.ExpressApp.SystemModule.SystemModule() - Me.module2 = New DevExpress.ExpressApp.Web.SystemModule.SystemAspNetModule() - Me.module3 = New NonPersistentObjectsDemo.Module.NonPersistentObjectsDemoModule() - Me.module4 = New NonPersistentObjectsDemo.Module.Web.NonPersistentObjectsDemoAspNetModule() - Me.securityModule1 = New DevExpress.ExpressApp.Security.SecurityModule() - Me.securityStrategyComplex1 = New DevExpress.ExpressApp.Security.SecurityStrategyComplex() - Me.securityStrategyComplex1.SupportNavigationPermissionsForTypes = False - Me.authenticationStandard1 = New DevExpress.ExpressApp.Security.AuthenticationStandard() - Me.objectsModule = New DevExpress.ExpressApp.Objects.BusinessClassLibraryCustomizationModule() - Me.cloneObjectModule = New DevExpress.ExpressApp.CloneObject.CloneObjectModule() - Me.conditionalAppearanceModule = New DevExpress.ExpressApp.ConditionalAppearance.ConditionalAppearanceModule() - Me.fileAttachmentsAspNetModule = New DevExpress.ExpressApp.FileAttachments.Web.FileAttachmentsAspNetModule() - Me.reportsModuleV2 = New DevExpress.ExpressApp.ReportsV2.ReportsModuleV2() - Me.reportsAspNetModuleV2 = New DevExpress.ExpressApp.ReportsV2.Web.ReportsAspNetModuleV2() - Me.schedulerModuleBase = New DevExpress.ExpressApp.Scheduler.SchedulerModuleBase() - Me.schedulerAspNetModule = New DevExpress.ExpressApp.Scheduler.Web.SchedulerAspNetModule() - Me.scriptRecorderModuleBase = New DevExpress.ExpressApp.ScriptRecorder.ScriptRecorderModuleBase() - Me.scriptRecorderAspNetModule = New DevExpress.ExpressApp.ScriptRecorder.Web.ScriptRecorderAspNetModule() - Me.treeListEditorsModuleBase = New DevExpress.ExpressApp.TreeListEditors.TreeListEditorsModuleBase() - Me.treeListEditorsAspNetModule = New DevExpress.ExpressApp.TreeListEditors.Web.TreeListEditorsAspNetModule() - Me.validationModule = New DevExpress.ExpressApp.Validation.ValidationModule() - Me.validationAspNetModule = New DevExpress.ExpressApp.Validation.Web.ValidationAspNetModule() - DirectCast(Me, System.ComponentModel.ISupportInitialize).BeginInit() - ' - ' securityStrategyComplex1 - ' - Me.securityStrategyComplex1.Authentication = Me.authenticationStandard1 - Me.securityStrategyComplex1.RoleType = GetType(DevExpress.Persistent.BaseImpl.PermissionPolicy.PermissionPolicyRole) - Me.securityStrategyComplex1.UserType = GetType(DevExpress.Persistent.BaseImpl.PermissionPolicy.PermissionPolicyUser) - ' - ' securityModule1 - ' - Me.securityModule1.UserType = GetType(DevExpress.Persistent.BaseImpl.PermissionPolicy.PermissionPolicyUser) - ' - ' authenticationStandard1 - ' - Me.authenticationStandard1.LogonParametersType = GetType(DevExpress.ExpressApp.Security.AuthenticationStandardLogonParameters) - ' - ' reportsModuleV2 - ' - Me.reportsModuleV2.EnableInplaceReports = True - Me.reportsModuleV2.ReportDataType = GetType(DevExpress.Persistent.BaseImpl.ReportDataV2) - Me.reportsModuleV2.ShowAdditionalNavigation = False - Me.reportsAspNetModuleV2.ReportViewerType = DevExpress.ExpressApp.ReportsV2.Web.ReportViewerTypes.HTML5 - Me.reportsModuleV2.ReportStoreMode = DevExpress.ExpressApp.ReportsV2.ReportStoreModes.XML - ' - ' NonPersistentObjectsDemoAspNetApplication - ' - Me.ApplicationName = "NonPersistentObjectsDemo" - Me.CheckCompatibilityType = DevExpress.ExpressApp.CheckCompatibilityType.DatabaseSchema - Me.Modules.Add(Me.module1) - Me.Modules.Add(Me.module2) - Me.Modules.Add(Me.module3) - Me.Modules.Add(Me.module4) - Me.Modules.Add(Me.securityModule1) - 'this.Security = this.securityStrategyComplex1; - Me.Modules.Add(Me.objectsModule) - Me.Modules.Add(Me.cloneObjectModule) - Me.Modules.Add(Me.conditionalAppearanceModule) - Me.Modules.Add(Me.fileAttachmentsAspNetModule) - Me.Modules.Add(Me.reportsModuleV2) - Me.Modules.Add(Me.reportsAspNetModuleV2) - Me.Modules.Add(Me.schedulerModuleBase) - Me.Modules.Add(Me.schedulerAspNetModule) - Me.Modules.Add(Me.scriptRecorderModuleBase) - Me.Modules.Add(Me.scriptRecorderAspNetModule) - Me.Modules.Add(Me.treeListEditorsModuleBase) - Me.Modules.Add(Me.treeListEditorsAspNetModule) - Me.Modules.Add(Me.validationModule) - Me.Modules.Add(Me.validationAspNetModule) -'INSTANT VB NOTE: The following InitializeComponent event wireup was converted to a 'Handles' clause: -'ORIGINAL LINE: this.DatabaseVersionMismatch += new System.EventHandler(this.NonPersistentObjectsDemoAspNetApplication_DatabaseVersionMismatch); - DirectCast(Me, System.ComponentModel.ISupportInitialize).EndInit() - - End Sub - End Class -End Namespace diff --git a/VB/NonPersistentObjectsDemo.Win/App.config b/VB/NonPersistentObjectsDemo.Win/App.config deleted file mode 100644 index 7c38ed8..0000000 --- a/VB/NonPersistentObjectsDemo.Win/App.config +++ /dev/null @@ -1,46 +0,0 @@ - - - - -
- - - - - - System - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/VB/NonPersistentObjectsDemo.Win/ExpressApp.ico b/VB/NonPersistentObjectsDemo.Win/ExpressApp.ico deleted file mode 100644 index e6810fc4f94dccd83ec54db6e9ef51a4950f6638..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 113407 zcmeDk30RC>_nnGD$(lBW>}&WWLfO~sOV%P;Lu1KWO_mahEZG%NmWV7-A#2J~*&?)9 zqo{;R%l*%px3^}dnQ3O4EZ_Iv=Q(rVyPbRPId|@Q?!6SnqLir`H7KwfP_vXM%ATSq zO-+3rS&{4J5yVJISwN zPx8?Z;4(l{01JTi04#up09^od04@TMX-5fpkxGiqt29Dp9OtG-9N#cb5ex;}yXYI~ zBa@F5CoA<~bF4TWmN5*V1wa(0LqIx{zLZKksk->JpbW@JIacZxmzLL>=NV^kKS0fCm5!j!9xtQxNYT zp14ckyAlBM7wZe+SXV~+1`uZ_z+C{H;<$7@?+1RYVn6tJqfSvt4DbeEEU01OU~vE# z!%?QF3CY*H7(5&*b#_S;4BZzd4(Q=kRB_lA(c zd%0~EQywfYwqK0<4t!%@h3&x$0PG_+0dV^Qu!&tDA%%q{?FoKiJMA4+;umJtGNI(eHx=QC(eaX-f3xdr(C;c|y=OBsKztpI)C z?L<0lUI8Je9}%+Z0wEi((Dc8{r15v(M#qVHM+l_B{sq%t0x0=Eu*pntBd?0{Xtb8( z2uCO*Rz90exFq^|rHV4ZKL2DaA)$~*Rt}91fAv-qvi@>0 ze&#=oZ9Mk>m3dKfzuDv@ma*X)l8byt^B(wv@2#W1-Ff zd@}ChN%9#P(^%-=NT3(`a$>xNkWX2(AMg{$7QA?w@3r8Med~8&;W)Mu{NJLiQ5KBB z{~%A=VEA?bI1TU!0O?i&DE`mFH~z;n0J!O(j^|&FCnP72!ARS;5((A=Ub>SYO+AL) z@Lkg9ut`U7V;iv<0Nb`!0N556(*|`hr{@lmj{x!)lw~?MT`_VYA50&@1kvprw?6Ua zBjP(7{M#@|CAQgQnE<{|;Knfvj)l$$gzc9YFB7q-zVhH1zyyJx0>E{iuvGZ2SsY&0 z2QBw!Jn6A6m&gp$)9o+zmpJw_DHSd*51Kyg8}Sk&p_ctry)m@9?@BtcjbgoPJ}QsJp0DUL!IIIE0FayAO zV7UxkX1;MEA3mDr$V;pnGXR+j-q_94wx0opG}U5%YXkJ8XxnE<5rL}*$HFH zOV3Ki-8eRbH4-i_n6dJ)Xs+y;GNXM809G@344VXr%3sTgkgq)B?$@y1ReKdbPoeG? z8_(->*p_Rw7uE%sgYdSEJ9%=ZKj}8q6lmB7fbB*xy)eJxGoQZ`0{=ViyavmP{C2un zG8e@E1&-;BHkbIpTocDH3{F@f5o73esN(VCOc)0XGe`%n{r&h^I`kh8nnzf6G|)!m z@Z|qkOzw0L&v+l#CxscD>pn>-8RzrHf%QOA2V}(Lza*%*?8pP`D_V%9foII#e>X2? zLQ=mGVzz^>XILg^^9cKN39r*2yxLMix_XwRga0MAKMeoT#y0IV0In^omZF7C)_^}Z zzJ>#TTZeTY+BaTYWTbaVUN|Sjw7YK8epq*b7uW{#rQva3=gS}0PuS!*PdIn(R+0lv zPjDO|{tpPjIW*2w5qx0n0p@?ia1;IC$25oUiOiRw=S*?_^!gO`=S&#a#LNF_#ZZ^?{xV-@Q=NW8b2!2SD$oc_c z!tzExYOy3?LW>>t4ya zoiycU;S%a7yCiItu0sJ4BRv5o*|% zD*$hRQ2_E;mnn-NHt7d>T?4@O2>UYKvXXGaORqihwr4n}DqmYBjtF{>5arD`1_L+J zP%>5$g@YbTJSvLMOE>c!Dk`a5{At-|iphVD*nIf+&Ka6{?d@XImp72!bHFu3-aL7~ zv0h`7!Efkv3J?}3CN1Kz;!jusE_xizOS9lN?$PxJz&^zf0Na^pfEWP5F(7YR9RGBv z0E+oh(tY?d$cr~`d3@u4w;F$D738AVy5vDKFOJthf7=S8m>(^h=s{kB;|*R~Wc~gM zc<1wHCd5_N99>9~QeL#qm#lP_m2MxDLy0d>To-4PDF8PBasb5ZmhmMPaIncx`_Q<@%DYD`Kp*0L41n{?;yeVthw>3kx6`2ED8h(Y z3&nk9)Pa!J#C@dasseP0qF2x#+vSpa#wOjsjdQNc0A2ty0C2oe2cQ7}j&lTYaCOa? z^)PAa$M`5KT;~#oTLQm%#oT5S7ZLGsy<4#Uaq~m{MO0oyBHvjEy95wx5J|N0Ecd^Ve05s{`8E^NC|cTAY^ zyH7~Bt%THtwc)D3N8FFV^=8!l;{BhXJ`BTW4CmdW!aW)+mjFH3-Q$ z1kxAd!~H1U{Frh?L;Vny2K^&IkBZl_&>mX1|hhX^O9WZo8H&6gLHR< zq%FpWYpucz>HxJ|FEn2Qx`RYe*O*tw3ie6)jO|IGcutg}S(FF8KYs|y@m;VisQV|% z;2tKf)1vM&?r%&wOz)-Po{liXtgVCo5TC(yV8MLB4NEOj8a4?R#N!TQ8hM$~J~W-M zcg#2D!2LqOe8K%dO6qZKwABB4(^YvVMDZ*1>H>=SVJ44AAoHv;$L)zKWr9^F$D7!a3_M>69AVNMH_m~z=sR> zv3T`KnVfOYQy>pMH>0!3#9tg#5(-)O|pk*I>Wrd#^|6=;_gVvo8g-fJA>YZboBCWZVNY5!DUs1Rx@zGb7gFZ{byFbW_7uPayeU{gc z?;G1rtS5r)4sW?ocOC!B<9!Lid7K!0o5~_rXgGbIix)5I8gc+=-5UBVBX4-AZ*2cZ zdJ}^BIe7j9$4q!e1Ltj`#@IaNz%~WvxBPqcLWvdPNw06>dNA%=4+ki{E==oJm!ccu z%EM3kahhN;a6h&zL;v4VHu9jE7YEkU_GM)+mvFkjkZRpU!t$21i*g}U1QNPk!}gh% zf0BHQUH=7q*lyMmk*oZ?X?<8x?G=^-|BJZheH9=O0QEqu0XhKS{8U_7XULCG5tvZV zS3C`2B2r>sgKPRpV$#P#SjFuJBVlyADvpPvMAA>E?*lkWjc<#}^bKtB`jBFgOAyE= z0Y!NUD+B5Ul+C}==T5QCc>}ZpkgX4pfONpE03dEZ-Bl7afI|h~J^=Cn`y3OA(v>$7 zz29LB`8fjMnitBOkps@_nn;`ltp_K*u1Snc#)$MDhb7RBdslm8#3EBN7+=BaBt^lE z1mXHV6>VLUwF?#%%k zYBXBBHaan!YnYW0{UWz%iOs=JaHBpH+WEq4$d~I6`EYHB!`L|(9}G7=*x~2^!@(aO zy28;(=x{}_lNtbdXhTAEu(JV?GT6{N6x$e%ZrWz$V0yUCAiu~iLry*O`XlXw88%|RRc zQ(u570FD2YqL!kAO-2KKPXK~Sg-PmB_Iw-X>$d?qONz3>2mA=XUft1SajTw%Oz;(7;QRsPByukyf@ICNF+}iEvhABs`x{hQ3h| zfAD|Mw@gyX*5l+Y|FSaiRdfXUKM)~d9Y}MTETp|I+;{-bY8@WhuCp z-%qA;3QI)m0e=)hSE+KSz#cH%ZN=3;#y$PVA7Ft5^d(Sd0`(}a!rt?aoAe$O?>$@+ z;Qs+}=r)0#gIxl*sJ;f*v{=H5Bb6WB_Ddvp)K_o`BjkC}Ib&FyDAVA*0oy=d3hr+# z#YYkRz;+SOWk?cV^0QgOm_mM}ysgowTaqf9111l+U4I)Uff%gRrR@COjL zQmLZRYs0wSq6NULoRx|OVYogcmY&XA2tnOec^TA!#k(EK%2$f;X{8EQGWX5^JP!eI z9o`WD_d8nvR4uZ3*Mv*agm;gK+iMob6V%fbXT;o5Sc(pyRh-`^2rtHG ztK3odn8AZK-pjWc^!-E`UcDXObP{}LLY&FP3=dbmt~`l3hK}a(t-CL z3p02}q+nbT?kwswIIRahC%fv)CU&|impD!J!v;7(4it`VN~5Y$`4^mrd9 zqeqVU<2aeQr-c{42%U1KEGdw-Mk#p+@EhAhMxR_1AGMr> zpWQ&bj4m;z6?Q%a@2su9oWHK{9IV>y-qr z;8_7CJ@1)^%AngTtPbGW3o&_2Dpg)#9`wF_FTisUAYBYTzPy&6WhfPHKYCxH*DDU^ ziu1zL<2ZnKZix4V2^zfDObl+x^bL4AR2aiNcR_R!I%&CFA|nc;9gZ zXa?ZCR}#ak2a9Kzc+YHMdOR=6TSo+F4UxLcf(h7UzW~l+e&e{Uq79BMnEX*ESMZ)? z!@Se%Qae-j@aV*H&Pw z<_5g?=L^!sxbbYL$yP$J|6=ZnP1rkHM==Lj=6r{X<#x+kJ^ED`6zig63!39bRo2GEqK4&c2E zBKkobqlztZkAruD}jk4qb*)fhklnpm!25dz*Lwx;H9%Z=U#H;Rrc&|%=f}eJsOb5CJ%r=Ag)(_8s{N9r%uJjE zk^Ey_CST?q5+)vF=ZkliNJ3K?amEx& zp4KO#I z$2|;Pp7K`$x1{@L!tfRQ;dx9+?%gdZkz`*uMig_NlgS^~G3hm4y5BYg_XL3T0A~T> z0I*HFR$O-GL-?J(3|^^hcvp!#)|aegWyiw#GVeKKpkEX{tC->lwdwn-3?O|Y5#gw3 zEDE>O{&*icj!|SaxHgL81PRAD!9cs{eM_MQ7VxCk!f`*ntg@bmIFS;>>5e@XIyIL`s(qZ3Qtt1m2H+!s9x(4WgS`u=CkS6JLqez^99^H-cR;TQ*X zAdn|G55{x%IL1L)_t-A6yqP?3Y~DdYlCnGLGc&kn!r;gKayx+frI6Bb!+GK|X?~TB z`u1h7ahD>z3=cM$19(pW^aD^58=LMs_dvW~Rc79N?uw=DR|eu;rEIZpi15-a&u`0L zSxm8c(eL--|3#kVD+?Fu!Tnx+cwVN^XM4+{S)SoI#uLBC$xB~Fe$#qksOwzb^5Gc| ziS)~g@+x~Bry|SE;HK}g7d7S<9@`W(+hLQ z0M62SeZQ>mkP-dntT5UH{WeNPRvB+zLB2SrbN;R6r_XNUnv!5y1>JZSU%K%s-LDE; zgZ>G)a7=C}6+bH?GOcqhSXN=~(sOS~=%L4=SY8I_Y549WNzz{uht?awwmgxCMut{i zyR`nDqy*A+9LGEK98A)5zcL>E24h#CaU}q*qw>zBQovoJcPTAhwC?qvGuD%Ye)`V5 zDNycX0FII*`IT{SZ6?DBe?O2Ub+jW$k|NrQv<1G&?w{m4qy~-6xrciXYpG$EDr5f zF0$2WC*Ih=HBLn~Hy8LWwmEb_5qgTw9>R+v2->Da{&*Dw8oXkGYXog978;uT;`<+1 zNnBq+x|I~ex&G>J=x}vH+xjGfJG(X|8G0DOiR3t;4gBL?aNz`Y61YvlM#iAcxY5=} zHw)ep=Gp{qk^r|N;h+uD;+UeXOv1rJ`wiL|${=bqTxsJy5gY)#tKzS^Cjx2y(+quv z;2iwVaU9?5Pb2UD^i&`R=(pv0`}tg`19t&j0eS++elJJ`lKp?wa^e7+>;M__%3tss z=X`kXeF6ZtwU<-Q|3||n8o<-0zl{;nuX}w3dcy&h19SqY{M%^%n=_{0zOn)SB^N>Y z-wu_9AF{uD&$JP!U$q^;96&z%c(Rn^Z%RX-%f$Yb;UU_-zq|%NgRh|}Pg6-%_f zge0;S7RUIP(f&7NM8A>h0WuYP?p~lh2mv>&XjHJF$DO!WDNK&C_#v+U_x~t1`c48I z9}C;}kc793D_HtSBc2nKgceET+^cY!|MU!KeIje%YkWC*i+h67?XyY48~UF52j!$u zuwERLhJ=4zT>2hJNp&6sc_++`cV&uxzqC9Ir1dm}Tp{hN@|_vWLHgrFQ{b>rMjzWe3)mJFNVT{^PTBrF~3o$LQiqN*@j zg}f12PF~~MyX3wri zypq))-vDdKWhI-`hVLE#*p{Q-9^L`>76A9{WyN2fbienlpg*mCq5e$8$O7M$!uwlM z7qL9@l4n{R@3#EYMDW|`VH4D)k|&@4R9x8CNp>FKw+rPL62K-rXKlOhrFS?{V5A*j(u>6$LZ(GZY&wnbO<>hD8zZ3&~22h&4-#=Bx;^_JgZ5-;4 z*87)Av3$k)eQ&IYlUYTCp&sM7@-gdQm|D8`(JDeNzZ&O0s0TIvg_4x5NYcFz_^V}A zQTfF}9gx5N0)0+pC*ZySApUL_*`!r5sn`Vdyeo>=e=1(Qb7^e38H#6*=yNAwVDs*+ zPAxa?Uxh&O_fh{;S(b;cMKZCO)|tigX9)np@<;za|6H1wJE%pJOITU|cE5EJ)d70V zWCZXf2p~rS{w$LS@9&DlCTld{ha}9vQEmfNK83EmlmIMSAr zdlx(2(|Z`+VW^0EY7r;m#yrH``z{OZJZVrb9`9&G{Z^@YAS4ayp8YxZ70~aP77C$L z=Cb1Z0eDxvJl~}(tEIqp0rM2|K8eibktc78aLG?UiuZpk?KhjW1A6d$wA^@ueYLnZ zCCidydBZVpq(Po#ssLPguI~4qJ;S@9H|GKzXvNM7=k1rO4Mw8^WS6@X`mL^7rI=QcwAxGrZ5pdnE@QIY6AzubJm zw_;Al$|9Lxn+9n_S}Q<)<;96(%Chy)>ANa;^TKo2cpt+-fQ0~k0rUYR!Bq$1y#wII zC-pbJ4~K85{4EA)6@2TqygZOodTUXC(_()%@sc1f+}Fl)4S@j80HXj}0r0Om(r>d# zEpNb6oCe>9e4FvNNWO$lq#0@FEz2M9{Q+nYt&2e4yMuC-g>Kw`zXF4@8JfEAZ{_@IgYTY-k_W!mX?;|-I*IRPW0^$Zu3-O9fM5LiD5f1?ldBa> zi$pvKeE6#+Pv^(`CbcL&=sFV;5Gy@>SSC?8E6^YBTxiUQSFBCH`&6F22Dy}veOh|n z$}7b@=<_9&g#+vrN^7uelHxCCJY4r*3?TVkNwglxucA+AKCL&%_RgZTau5~&R-$zB znFjpUO0D<)L>b$%yOy& zc*b4ynvOWRGhuAvA}3m8Dw90k8JCpzvcyB(55aW-L4M(T@y|X=jvdP^h(k(uD#W*9 zL@2XO-*b#(hVs%QQ~FAa<-4|@n@>m_$l=@*LU!M#*YMVb65;`GrQo{WjRZnILi;YQ z!L|V3`xVEhzB?r!3*a6BmR%e^F=2S8MH882&YO^a8~JzLjY0bDl2#JJ<43`J!?*R=c2neEu#RpD5o+hsDbbbxI{QSavZo78iDkSA^yIrtiQJmsf>`9fAI} zJO=;EsDq;*}~&_3)Hdo@6D$vWvn~hCjCbwaO)TCNZ0Y zmXVjNG?tkT|A(pHB;%E^Sno6CH=kY$eT1au9_arm!@hthzWG0p3=@{U9J&HM7!j7s zW)pmGQDj*vGHlp>$@nBHmQDG`P{rlOIeGM3Q8|_Nw>>GEXZY5=qy~8)BadY}J0z^K z;Cd1LPRTF5J88#FNx39E9=5eI@=j{+CdGmB(MpiIA^3lJQ7XEY!c&aF7pesLwC0LA_s5Jm}>m88+kr@2QSST?fXt zlFluW7h>crDh%iBjU*Lgx#O{k0_0}~fO?>Keq9t@68Yo4iM$N%!Qq&D;2wDV7S`b; zp{`;O;(ePEp)`&`_Mm4{gqB3gEmu5BPMWaQ&uS;Qx|H1z!~ zGTocJ70z4#8_Y3S?-M0E)E||^ATLDWD8t`EZnBgW5t~dbgGQlc!!!5)1{3~LwColK zNmfGSg)BUTG-d1a%PLn%)5*AgEX_K(WL*3`vF^SWExWm}MkI+rUdSl_S(1vW!s7j3 z{vu`fACbScEOqz)?SDzjP>%Nh*S?7>tP!E#(h&I{5LGw+KmIF`e>ui~IQIU%cm2`t zsYosVik$ylg!v!pdn|VNhj&t$)!v3BW?nl3= zBeneHx&DJ|cQ_9l1nWOFR!BCMGFVINi#&W^zFP2`*ME5Vj%#wbHiv6;3KcGQCIei9 zl;J%Wd9DBAIWgRC1sY@m+{a&bj*vW9LzLG1=Jj83<;AsnT(j3^#8hE6eYcC$XZ&%` zqrCe+sBfw1D4W~`>kF_rLoypFW3o{wX1NmK*or zdCz}ce4cW8OtK9jK9IJ0P^f8 z@_&zagNuGs^p}_6cisQ)E64la@gm(#N|U@os&*W1sh}Uuop>9MXz@w}W2O zc@J@9Mgcej;2RwHW&^&-QI;&c_;3kxu*ozD@RXI0 zT*Lpv@4vhSS=13GCO$v<-41<-+YbPBF%ALXTwU<)26Mi2!W=X%d@D$5R zUc)hf{s4-_^svd=a^Nhp?$mXl?`!wEMc*-)nJxW(0;a*U8HfY#en*@YNi*PHTg;z7 z>4Qx)fwojB%N_^uR{O;F0O>VHd^=Pa z{}RF96`&Pw5{bX*^(tX_{|kQN_u?dG;xCBECR2IjkMly@i@>|T_}_e%g%ma!3wX+X zrzGI`+v<#sEbRI%Y3RHD@IA?$0HXI0WhIV&dpPzllwo=5+(Rhu@4df8R(VxKIyR{R z{Mh#&s{?&1f|Y+YPBs|_bpZFd%k$s*Thbo?t7TPD#M66MJD?6ovakKO$XXbk-=K{8 z6~)HC9&ZJ$7ye;w%c{R#P8C%EHre=x$x7INxV(PxP)6m7V&Pwnmrbtx2jq|SXXsxo zr-~q+ewX^qe?{iO+2mR zDohR)?T4~J-ODHdd|w-NDop`s{W&&i2;ZLp#=?rxj~XvG`u=7_v>rO1 zYmoPUY?0j9g1Y%^k|bvuugHzQzZns(iOEm*jHyGJfK$GABGbA}sJF-DQC=IzyMKoM z=kKgPY|>YbJY{4e|2K1yM{MFQXIl6EPS*bsd9%qvIr9|jfN6!4jZLZmZh4-Wx&Zh} z^d&2V=sz4O{gwgqzmn~(O9_67G*MV^^BANc&A1=ajk;f+Y%E?PXIoOtq z9!V0j3Eq<FK7C86Qp5Qn~l;){&D6vl7FCI5Tx1$j;1l@uZc-MIJb z0iYv@>ObwK&z=dBqpW`Wei=X6qyfk?t&BQ=`jfb>*z%Xr^*3cipI4Su)`ID9Zr0_O z7GM0ExWPbAw_i%n-&>Uy>=CR0iI40>JTcH~^lHmb4DwxwTrqt)%q% z*}A_i|9@k~Y@!D;odAG$+~9vpTwU1lZ)Cy$%T&Yx`dnI1r~`QZ4EtByx96=7@;|5Y zf9C(W96GAC?`HAq121rg%DIoQN`{YQ?6T|@yGyo zK1CI~!{Lk9ji`9s`IIstIVJHkirj#OYr-i-0*3=B#?7HveD3g4ZXhkGBtCpP33EHq z=(#~0kO;0o6;;lPC( zT#usoEK&$wV2a!n$pOZ2MM3*Gg>&6Z{uFF}U^qh`rAfP?yv4=|!jp+@=uD z5#!d+a4IGTqp4@G81lKP)H5i)YmJnXxZcG-f^Kzza8m)dQ#i$EV1USL6b0PMe8gjw zc5mfCGGPKv0%DoHxCY_Uo-4vzFFF#6|_s<2Gm6PCy$0#T9I4C>#zwo-9IQ(u>sLm^HU>09- z1l=eNUiz>>;dOIcbPAgR+UP?#l&`o5rs(FB6w!(6)-PrOI!U-wv4ptp8zoiLiR)2P z#~C+M2FA@~Xj&AX$w1JpFA&bSnKB8wnI4N94m)bRZWd(9)4(btV;DC#NYD*LAwSVT zIH2N`awGrI(Ba%}i*f5C7nuB^{9LywHQRTJuxBOmqlM_;4w@#(Vp5 zDx(-RV=YZ;apmK>uj7WXx+*L(zpu54S{s+5qj349-WAgr-8<_u zFRQgzureIQvC~@BC3t3fB~>L47knQBF;|pHahoI%-Z>yR!*tDFS*b*?a|3A3O`%!tu-pOaz}*$`>%~t2x+u&k-y?+ z&T-bukew?N$JY$VIv)NiT*;>6i*vmUsGgm}XM|Uo-!8G*to^H}ZC5bo-}l{shiO}V?)sMnG?Qvx^8iK_N;1J z>^a+UUB(V6RQwoj?b_av4ywnZF%LgIK3dyOxI`H!HyYT z)|tnwVZz$sV;{6r^y{iIEX2gPGN{n{o=ta{H{eB=^m*%37YDtif)y@#+yWtg zzq8ra-8|w+?fTX3v4T3ad2O52*k;tOeoGv?8CE))cH`a7kVhNhUbZ-(#nP;PcS6!k z_q%agDZBgKw$xhopxGPcE;}<7GR|AG57wk^B)bkaGBKOG;Oydws$u$F+JEfajC$jH z(b`I>fuqKpDOb)uoa%Y^jAqJ%f;Ej7npEybz3!jgK=(x_Xl{IrzN&u z*7DU-)lJmR=tkkOVVipE-rcrK@!0DsJ~kWfZc%)xaBuNa)j8TMLn?svboP|nKf=>{ z#phX8nsji4=O>oBLPy<=Q$2P}F_{VIXVyO5LFt{YMz1#u+;e`W4%ln>^jJ-5GrKpt zom$Tk%3a4sxyEK{I(eC-2l}$xdylyAlD{KsBaPQIn!HWKKCS4g5o;O3u zirS^Wb>Wnc7Nb>rrYEZ9oOpjrH}$8pCd=@2)n2ih@r?%dTWnMq6`tjDe)u~@--l-! z>aYfEa!*&q#RzZWje|zQ3pu(vHj|--+SasM~}V}%~z6+TOKVB$r>4Q z!N!1cJKLb~y8ulo4sZn=3KRa_LHeiTRt*gV9-flke zg~gVB)X0||>#RE*&?aWq#`|Y3y4cx{_@b0BAoXLwnKx^7*kh7(ZuV}i8lZHg|LWb_ zm4l+foRpi}S89_uFDKN~A}{ssDx*;EHc>-|Am`v z(N-f49^RyBySRVPMb5XvyV{)nq4IqPYn8$`waBakezrXZeyBHRNRU~RDC@2 zk~uRIlPp^I)adWuh&6hgUX3}ar)p@CZb^3+J00vtZC%i~^1%anU9>Jn?jLz?Y3nP= z_3Fjv_4?M$`cRE#F)C&YSIs=0bb8*26M2^!PPa*{y2<_e;0~cwWKEZ6luOR;#fQJE z8c>xv^VYtZb-H1XDIQU4v{?fbY(^=x?%2t5>^(cvew1qaGvT9qPG~>qc^%;O%?;11 z4A3{C7WDt<4F8kpg*O*HsNvYO`CfB~nHiw?w&B6+YRP^|%R0?bpQqGdpzcOr&zzMm zc3Dlf=5!jV+27};+EwkXA)ky4XZt98`MuGem;JbjLS^0<16Z#bP7FRS9w zSHCftXl> z-0|&Zbl5(;buCNdy^3K~HjOeeRi2(7tVsGaO3*%ZV@i^qP1fO>RQjfm=3$XJL0ZeA z_irBdy_MM->rBcn@XWdaS)8EUjWs!M-H&z7sFbjv&CuQtJDLwS(&^qh&|UX!dre!L zMWHo0H{FlvZp}R6z1ilzVp9d*9ry1wzMJ=tVYknT^Dn73x6}%185teb>EKB7I{}o| zyM|}O@~5yHZm-je-6QQ))s+`|CF?bhZ)G}o@FA;e2HWqq=||P-cr=T%RH5afVRUiaU}_;i14Qu%mi=Q-|gM;+0dK1OK=>yt|0OLlk*=R*#s=PIUI zwDSIJdc!4s>MMn3A%oUlU(cyYMI1V0G9-Q9>aT%Hw+$w`Wmz{*eY2%$@5^)ClaA`e zyj7a@QcK&uR?X%gvL?)!?WXCJ(9NP_J;%bzWAE4SG<@VdplW!!^M_ISy6eIt?i@P> z!cSPUJwN&6XV(a&Y|R5NekA__P*L{jPZNbl&+fb-*)y5 zH5|E5eX!}8=Ycm~XCJg0w`)*3HLm5}ICo0-WzJrOvu^iOqia-qvezuGRnpB92ZyG9 zTXDhsuGQ1KjVixzsy_JGQpK6A_O|FpIkut$S=hnU*!#w7=`()dt*tZ#ds_w~|iDxU#xT0ja zS>;Cc>#eOgL66$8h8$8btbXyCh284uV>xR!nIP2;C$9=~;My*r-vd+dkby8Gv)cf6cs&cG7oiFD9 z=+wq&=)zCek7ZvQ*!j+ZE6KszHEw+Ski1RVD!X6(!55<^tKV@yPAPr-y0?e!qOSY$ z8b6+G{i%_LQJZyc!PnLGKU#$JHH%&xX|ScHYvxRY!tC$n)!aP;HrV}Cv@2Zy&GJ?D z)~NG7Sw}`Xo$yP2KgOco(dABU)BDa*O0sy#S$oImX0QEE?P9CN9N&Cw<8+H2S_vU~ zMstI!Ep-n1uB~RG@y^pMtdnz>D8HE6EW2&i_ij(W<>qk5DRRKk`0&T;>ZMIme&cd2 zdqUrgDQb&H8KsVzp7zAEhW&l#wr0(;qwhN(H>+pUF?&Fq+mcS7W?1L9f0)`-^PBPX z8GA!AHXK(=`s8N#vHGr`0d0@W*)V-mNK?vs0rgLx*R$*^#k1~D+S~1M@|MJFo|VjQ z*)4kWRp-(4LDzPx_f9n39g?xFot|@cy4S@@$NcNC>lTI^^p38qeew0fDqW@}Mty#w zb8Gn}XqJvmQ3>xDZtnN4zRSYh9TL-LY^|(({hp^`Vdcph%Jo>UcHIAB?0#8$xcaQr z>d7xyZ6>YBe!VYS!zasgb?OYggIgjLZw%RJGD&SL=k65GF>`wxF4k$<@IgY@1m*N= z_5-%;zN&xSrOxn(`q%Y8{P;9)Qtt)qT@69|```pNl zU6!!=)#;Av8@?W#wuEgxw#7n~&#R8z?5DYCUG+v*T{NscRmLoF_BwSic&XaulP2fX z_dN34zRJy<_3{ZZRa|N{$;rvQpT?vfEw#IoEAuj*j51u%%{HI4Z)9`JDtmO*BlauT zZ?|=g`7x_67R%nWtkP%e1Pz7ImoB)}!5oY?0 zN4O>jxcW}b5AA&YL_NKPoSqMIhB;^)_`x{W{2M^7Iqu;_k;}pPJPz^=pZt2wRO2nq zRRUSMGX}+IEK@Kx7&&J7H?xcHO=Io8J`YyY``qBe_u5B>>U60V+rlTN=B-K@UoVB| zH5&BXxO&QQTd$^_6pXF@Io;>^zA7(2wq14D^!$YDM+|)5BnKz2WM4CPF&{kjag&Un zb+7d)h`i^ubo7ZM?ei?}uvRqfUdecEjc(QVZCE>GkY&`k)q^cvj;r}Tvi&hHyKR$a zX>rMx4r{9X7;*k!*om)ACrs8Fn%$S0RP#<>4HbRGhaKHsa`JrMMaItQFuv~Qef?S| z#D;J5zp*`{pxw&5+urTh`tj(|nWM=Ysf&$Hk9(e9(^%QUYwVb~AEQ&UB2qf-?mDmW zlU+Nv*SU7s8I-hjiDc5_!u>Qw8 zt$tciaOuaUdN+fu675NpW!v5f`{NpEO!=AHmO7hAAUz`&0^Y-lkZW8mF{j$9;o4_R0H(j~>ejBgORrpIk7L&}%D>%ec%|h_BMw!yGqr0K za-eO%Nc}In>YwaRmOVdPNh8c4x8Ui6tS=!B>0hJ$oo4EFOQ>sqa`V@{FRGp!_oLmZ zd}r;0LC=ra&R2fW_rcKAh{#~gH>S0A%_>u(9*Co(WpjmuETbiJ#o8 z#WP>?tJ|vqLsEC#uN%JPOHAYM-$J^q7{B6j1OK-Bvg@cinB-3P&oybRZWh}^zhB$) zO>`FBtQ3C6(e3Mwugfn6Ew9ogAY_3+wtRS9_1a!CT*J023Xl2MS+UKl~2YXr}6^*JucgKd!ay5)wMI8Vo{mP2O49 z9zXg-!Nq*_j}MKP?vLDj?YLIqCWWDzwQN{-%pQDM|M}zCt`V2neyY-WsMpM|TidisIx}?S(%83iZ8i?$cq~6YSW$oXIg`PrZxVym zyv$wndu(r*`SVs}`nI_FO`N-J?qOa%D(BLRGel*{wYE7uu7zo}@*lYNpq^g4dr#+7 zi8#=N)z^1my@*5Wf^tXnXBoH3FtNYf%iBNkwC2M8Q9bgWj!BrZGHYS(z51*U4skC7%v8mCe*&DJ31YI^m=E&zG$s z{smv^?=qgWv+>UBZ~NbB5~u!Ph34_cgVRDUkspOOt=_baIc+_LltVIeIg^e`}C^1?V{hq$(=O@ZJh2JuHJPLwd6(9u`{bB ze!tMV?(snr2Q2WT;uI!tcRyl#r695O0N-AfO~`^3)8=?za5TBRcZj=h{=|mS51eb) z9&+kufpS8%QO94bHhs&AW_9OWiJEaZDA!zR?0%&N;kizi9-k^)lh!k@uI;00A=Q6m z|J>hhVA`bX!#Ykq5pia^_R`FzUe0<$l;IFc7xJZw(?&w(Ie{o5%aa1 z7dXGzl6Ez&<=(&@=998~?+vJGR$#xvwqX0+?Ke7%(Fq?n>|<<}Wqx{6(8qsF2d+q1 zmZcD|+hF33Ddq>aZ#6nI!(MZfW3>!cM$3#HK?9>U4yngFsyMw;GfKO@LS*xHj$hlX zxZ&#L`H0hV)cJ7!~_8Q&uEtxh1dz0M%3 zI_)Z%MHsP6w%nT#sIYB^`-hbgv9&o1wT7ENI-Lj-UHs}x+`#yN+&4`YdF)hPcf7OL zyg-k7Zb^r`s?0g`z#_F?6Mg%D)=#tty=eZV(TxK2aLwRg%hw;=7uVz@O*#`bPQ!cg z{>bAh5&PPDub#YhmBE4@0fqhiR8|_@4ZCC)_|4_&?y=J&JGC6WW>6=eFR@$e&m_q^ z_jUc*ZSH=fMyqm7-sB~`f0y9pJHcSKPNvrl6MIE(g+P{fOOsvCc0o};o4KDD)V)`4 z`?}-xo9oQ(?4+C)-@yI6RlPd(qTH@8oIfP|YnN%GyDa&xzG%vk9;4@~=CV&Yq*LS+i&rMQ54v*Z4Cp9QBjQg4+yE8K~F!D{ArtXHSp!;0@(4NTWbfBoUq_YMkQ zTRJQs+jq9kHJfvmte0x5j;1|s^598dYW1S1z)6D-ebD}Pu%ALTyOkHrJY5xhIvk#- zRBxBfnIJ9iPsihK)ogyT?WK|K&GpFRy?tseNqbSfZ*Iblo-F{~h=H!h;{c70+w`%9 zmHl6JHB*?|p>Lkg;Rg5S`G(cxj8-x0x7^w;{-ok)4`MR(Sg-*n=|w-Unw$=br;`rf zR^iw;j?eO{v+mNo=CC-j=9&ssW770{uX|-ZUE*te?O<437sWO6bUbQuESpzN8``8F zbwq@i!+xzU=ftKGdFH)>LyY@Qgkhkd`+hNkSgTo51kv((hpaU0Y zdEe`DqY;&BV)c2Ig$c}}HH=oZi*U|bs+(+V*Q85Li(`ID4dyKj>ytS9*@(c}t3#jO z@aUB36rF1DD%5De3l)$1o;6^?-o~z>T_wB4pH}Yc{_xG?`9}g{>wWQT-X-hyVCr5Q z)7#kvTN^ch-muY`f|+hj43`GvTe|zzTI>6!Z;YSQC*S1x6ZSl-IVmtP(c^qVGyU$} zQXh_`bT``is2kSNR7qK6fBu}3{oC1H&m~swXz8-s;D~?r+$)#ob-K55aIZQ04eP9! zCh6koV7G5jphmR^4lt}^tQgZxN$s@bnI1MR z+H#16VZo(3RbNLN7G|G*J@{fuZqn2K7XrP`yDvNT!sv{_&7bGo8d;4xigHq&l=R^9 z=4L|zEE``QcKnUP_Bz*722Z`_^pDoMu!bwY#tl(z`Z^}+W9A1X%57eX&FE$ko<=ow zbvP#vBH6kzwZ})A>Kq-c`8;Ig*oUL)>t}H`#&=H7$~n3FjYCxCjkBY7#_d~P<3?bmeW?#V z4{JDieD_wjQfpNEe#-lPkIE6PpQ)XlGBhnTVqdaD%k-od*SmdI3O{44r>VM6{hubU z#&_ziJG|v+^AY#w>g_eW5wU(u;^j8E1+}yaSMF9*Ijj~Cr50j;{<%xb4;GU?TC7ri z+vu3fqr@DR{mH>EtK6zK;oHMd$36R!qL)<5zP>%8R^I&7E5rRy2EWT~F)qHBoh|ir zmH`z$IsBN}xz+DXJl-Y_u3Nv|H^+7_S_Pd5ck2yPjC-DL&3b%ZaU^?U@Lhi;hiT%TFS`O~vHEQuOpFs|q-!2~bzVLSMt!Ja>+6SzQ)*F--dVXThyq*bO{^u;> z&BC*sY(^d0My+ybni;9kY{8WP%6~)Ko!5LKz6~1PA!$lV_m|#tuV#O^d5CbP4;k8c zRZg-+$7Xe3Tzj;ngY&|0)qlF|u48{iAx$ zq5@bfN^9@t5Im>1lV9U%%_=!iN2y&Wc2Ldt?hmhXC~CFa>&@PSy6#iIan(idYPQjx zzC+qHs2x(>Wv`!E@Z9`M5iYkfykFEJj)6LTeZmf3G)r(e-MaGFk46eqPPZV1(^Joo zDGSaFzwD-a^HQgJD-s(yWiL@Xq__C0hRd*Z*Q^`QTCWd7Z|hSvmcHn7G*)%!&o$Za zCj3~QujRI_*|_I*QXc1L=dp&ceo#9MS|}uXXeigNKg&)RW(WIzjI;Qum7n2heB3s_ zVQ%uA{YJI4Qc|2_>^ZIb{2Z7(Wm!Sg&7t|9{Rzox7VtdScT}c*;-ixv$%5~ZXL72h z)E~&Y^T65UL(h|5E4%`&f_0xy4mRsCaonZ$tl-|)+PYOq**;)H>ZaC5hxZ+t_3rTw zy>mTR*7VXgU(@AXaAHox6veFDO&s0dcTc_@nPAdn-gwsLC0kdhd5lcbwMlKFU^Cg- z)GdIjljibrXVN|LXq?Zd`Uc)Z>yfYNP1bE~aQ2+VkD$9dYS+AT&uiH6XTkLobgNcN zG|$)8dY7EmzaVqKJ%<*v-Xxm7()(bMubAT>6#KftfbssHB7LF@rzfq-n(#X7@o3Kx zg*(H&VNP~S`)l@SZQ`Xr^{vm_P5M63`|U=nr{4{pc{VKd@$f3kYAlOB^UwOt%Q@7& z%47SDrR-0w86RjhV09(pJkv?p)N%jIC3_AuFH~_fOxID!3@_Ukt4{_JwirU_L8r%*4pEnXBjT&=BR?2GlLB()&;j>*$Cd%`z*+|rCV zcyh*&m>4KSe9AY&W2h{nzMyuWRZLgA2{V#VJt?e>pzk6*UsLKae87nDA|8^t%wE5p_$EEb*Z(# zt#hl}>t`O)4|CY2;#GK$HGiy8$B|87lWkbPkTWx9+-UR22j09Oeydh-M)pwDGi&s0{ww$1_?ThNR%r$TC=bI*7bzD$SZwRG94Q`Z}v2&Qq$LRi{ z)t|QE1fR-kH+#m3QC2A?h3}i~D_k{4@oM7;Gph~O?f)@k*}3X^?>ePEaPN7WzKgxd zBiEZp;?(2!tBo7>t@Ef%uex8W-!SiEh)E;}k5rXw0nKkh)}cU<73q*~~CEHl=&E-;o5J zVg0=Nn1!S)C%%n_75ayTemm63F!Ic@$7hbd-3!gZyzqal3-VmAt2g$#WpuC3=PV+gIh zw7QGV)r`)MVjS(?M}~f#`?;6?P^t&J^_OphDZhq!o|U&$I&$X5^$YvA8-MpO?_s+f zGI(O_W<2_&C$VYUw#J+6_<;j0k5ikwYUmql%Dld98oaKDchSdRRYp*;B|U z%LbaWUSrs)^?Q7e%dD3F{?&_Q*Ui4qIt*LtuQYB&7X`ydoHgygkI#ASIjh@TZ<9A0 z>snl?wQpG`Rqv)f3VQlklKkY;7k~cj>tMCrI&(rd;I7($bc=6&URRo-eb_UO~Cd z$Fq)Zn%-gFk;pZll{79b^8V4H%|Kj`tlHIbPvQO9iAFh}TI}jPW%ahMM;^ZD+(pmB zM7`^jI`?#m)xG7l6Lb$PJ^uai@T%RacROTzp>bnatJUL}#V0u2O#Ec=EWDt_$@tf++?G3yAMsB= zh38#{`=8gd*=?ec5EidVYBtu{W%sN{YcDO0)0Hx=&t7SA`g*6Fb$6bBXcFGf=B&Yk zx!qZlRL>2*q!Q-Xq|O(&+j}_G-(FFwUAQIW=BebVFqLeY+=vp4lTlkMgcN z?A+jfP16U?tO4yN`$p2rH(s?2PH=Wz*N^C0sk!=Md)KCP3bsx`f zl6-RF_xAVOYk3WG2|nd||E~Gun-AQh-gk*sYM^SY(XQ90+HLYTz!t+NhnNqW3oC^V z88>L-JIx=>)N|^2Ht(KWJ>@;9D{QAmEBkHzG}(C#`^ww!9Aop=9S?;ROV z*+d+8GwR4hHDiq%&i?1ySfx7J-Ch$D5IXymO>T>NJuWJH?Vh#R&B(!Lb5L%F1MQBT z3#hVjoO8o?4a2hvi?5Dd1-oq?_Ge#R={I!T`zzDKer~l63v$a#TM|;$Y)sOqq&_FB zO*mQen_l%-r@nXYddeg1dFy_r-?gfk%^Bcw*=(szg#OjuN9MX4YnV#^ds1u)(#O*ZZ$|Zka-#XO$;Tz&K&d90z0G;DX`>ITG ze*3wV_v?iTKDJW^yjSq7No7~+!Lpd0Y4}9jP3501EbXN(F8h5(nx{|8)!*>2R;1=R z`?fIDJ~1;=&+%u#ThoKKU)CRNvxKUwSg&EtZ4E+PmHcT z$H=wv=O$Yhd~e#Q))VcXJ60@g+tX&i%hfl=Zc!ZSmXnws-@xUv^~u&R=jBXs`8ILf zkx>sW2W=W|6nyjff#a+XA=6?uCrul*FVMDW)0Ligs+djK7{0(yO>6j-4%5eMg#pKg z;jn?X>Fbt{9#$Kx9Xvc-$*>Da(zVXlw2+Mw@2AJq-Xq?&P!L==_SqF{y5rs z)DCk{?dVwFuyORZs2``=7;7xyRC_g|=djIpC#ZfKV`RCK-M;R-;4c>W^)E)BBLlL0 zf(m9Udi3>cMfK*Kb&l7YWFHW8>E4MB$B$lhhI+`(YftNJux)bt?9RM%L6@G~ z{km(-$6j+sRq~vwX4vQX;kPf(=+w+JNHT~x)Wq(RNeAPR4fdLcn|5!v`D4NCbxOu3 zZEX!c?@rbx9qz|lRj;)qZ;p?tviht=umSMD0Nn*5`pD~hn-PGl)EeVYe_jP{Q8wBg zNKiJrfr-FG$KqJvO2omarTZ%@foFZWcf@=DN^b9OrU2>7Uf^zJYaAu&;BB)8;&yyJ z@S3t2X#~LgO1=;nZ)_xOS%56|O*d6>aLPse`G=Y&khZ*t#K<$oZ$OSvcGRec4h={Sgtb0pLV29CEWLj@bj}%Ih?RxF#meS;Qx#?nARf8^zca5s^z1UmZv-F_ zh5{Mp)rX#TjzvRL4MqUs8UF7N)L;ldRe@Hf8jJwM!v#P+^V-vfPNoWs0L0q+XJHoq z(v9Ox6&L}CmG17xkUq3_EVG_t1Ryqsnb)0mv;k_EYA^zDq~U)fBq*aHy=VY5Hr0?g zQE>#i6sQ@JvgRYfAOOw)P5?RrS*E!jlnzKt2ZIrSgZBQ}NQ9NJ@PM*;&;9dzZuyS_ zIs?6c_DIIs`lk5;vJ)`MRD%(KLvf1RgNA`GfJe&ygBwJ0iTfGridsW=_}k7kfVRl? zW<6IJqU7Rzv@zqvN&C})j>UMw;rz1&N%puT!RO2ZYPp}pXhvZ$i za4aeqb2b97fB1ha&`>;p!JH^?cDBvcIi?|6{^)C!dohq9ZNIrYrY2!wGHbi&?ppb>DWtx`nkGkcikC8Ae z1~v!k7?X~$04SSMW%Cje`R86>gGR-BUD>=A(yILuiNmimCN_W>0sK!0wkn&4Tp@Ux z)H}5N2;3gx`pgII#Y-WlBMng(fHDntm9n`N=#4C9IVmVc32?Kr*%M41pfxYL3g@NdUp5AcT&c>Be}G$g))t~3D}8M8J55Q_-p zE1MU9Zoqwbzhm$>Wd}0K2(r!!(L4TLHYQz|5r8-w^)_YmAhKgH0@&@rWj`WZ-hS~g z9@wmL`OHF~5rBk*V3o4Dh2(b(HX`1BC23ku>wrlb7t!PkGy;%R1D{uB$KZAIiaE`pT;H!54}#WAmW z2Yt?3Y($P(-v*qBNfj1*+cs4YKaNFnx3?dLB-(gX+59Pj_3#|xOOXne0aJkwfNxw+ zMS~H5Kn>soB~nOG5&f9uo5|zJsFs)Z1PMkriM&Y1qKgz4GG42sP?oA zIYsy>@Rd8XFEG_+1i+9U%tuz{`T(FhqJ9a5-=Xl233lFkRW~ dFg2q${~tbSEdd=CLBs$6002ovPDHLkV1kt=BJThI diff --git a/VB/NonPersistentObjectsDemo.Win/Images/Logo.svg b/VB/NonPersistentObjectsDemo.Win/Images/Logo.svg deleted file mode 100644 index 68d56ca..0000000 --- a/VB/NonPersistentObjectsDemo.Win/Images/Logo.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - diff --git a/VB/NonPersistentObjectsDemo.Win/Images/ReadMe.txt b/VB/NonPersistentObjectsDemo.Win/Images/ReadMe.txt deleted file mode 100644 index 230befc..0000000 --- a/VB/NonPersistentObjectsDemo.Win/Images/ReadMe.txt +++ /dev/null @@ -1,12 +0,0 @@ -Folder Description - -The "Images" project folder is intended for storing custom image files. - - -Relevant Documentation - -Add and Override Images -https://docs.devexpress.com/eXpressAppFramework/112792 - -Assign a Custom Image -https://docs.devexpress.com/eXpressAppFramework/112744 diff --git a/VB/NonPersistentObjectsDemo.Win/Model.xafml b/VB/NonPersistentObjectsDemo.Win/Model.xafml deleted file mode 100644 index d745362..0000000 --- a/VB/NonPersistentObjectsDemo.Win/Model.xafml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Win/My Project/AssemblyInfo.vb b/VB/NonPersistentObjectsDemo.Win/My Project/AssemblyInfo.vb deleted file mode 100644 index a936e9a..0000000 --- a/VB/NonPersistentObjectsDemo.Win/My Project/AssemblyInfo.vb +++ /dev/null @@ -1,33 +0,0 @@ -Imports System.Reflection -Imports System.Runtime.CompilerServices -Imports System.Runtime.InteropServices - -' General Information about an assembly is controlled through the following -' set of attributes. Change these attribute values to modify the information -' associated with an assembly. - - - - - - - - - -' Setting ComVisible to false makes the types in this assembly not visible -' to COM components. If you need to access a type in this assembly from -' COM, set the ComVisible attribute to true on that type. - - -' The following GUID is for the ID of the typelib if this project is exposed to COM - - -' Version information for an assembly consists of the following four values: -' -' Major Version -' Minor Version -' Build Number -' Revision -' - - diff --git a/VB/NonPersistentObjectsDemo.Win/NonPersistentObjectsDemo.Win.vbproj b/VB/NonPersistentObjectsDemo.Win/NonPersistentObjectsDemo.Win.vbproj deleted file mode 100644 index 7aa1ad7..0000000 --- a/VB/NonPersistentObjectsDemo.Win/NonPersistentObjectsDemo.Win.vbproj +++ /dev/null @@ -1,370 +0,0 @@ - - - - - Debug - AnyCPU - {13E1ACF3-669C-4405-8260-E70BE603E197} - WinExe - - NonPersistentObjectsDemo.Win - v4.5.2 - ExpressApp.ico - 512 - On - Binary - Off - On - - - true - full - false - bin\Debug\ - true - true - prompt - true - - - pdbonly - true - bin\Release\ - false - true - prompt - true - - - true - bin\EasyTest\ - true - true - EASYTEST=True - full - AnyCPU - prompt - true - - - - - - - - - - - - - - - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - True - - - False - False - - - False - False - - - False - False - - - False - False - - - False - False - - - False - False - - - False - False - - - False - False - - - System - False - - - False - - - System.Data - False - - - System.Drawing - False - - - System.Windows.Forms - False - - - System.XML - False - - - - - - - - - - - - Always - - - - - - - Component - - - WinApplication.vb - - - Form - - - XafSplashScreen.vb - - - XafSplashScreen.vb - - - - - {72D644CD-C193-4572-B2E3-CA82819A1627} - NonPersistentObjectsDemo.Module.Win - True - - - {57ACDBDB-006E-43D3-9308-97857F2FF75D} - NonPersistentObjectsDemo.Module - True - - - - - diff --git a/VB/NonPersistentObjectsDemo.Win/Program.vb b/VB/NonPersistentObjectsDemo.Win/Program.vb deleted file mode 100644 index 220c1e2..0000000 --- a/VB/NonPersistentObjectsDemo.Win/Program.vb +++ /dev/null @@ -1,58 +0,0 @@ -Imports System -Imports System.Configuration -Imports System.Windows.Forms - -Imports DevExpress.ExpressApp -Imports DevExpress.ExpressApp.Security -Imports DevExpress.ExpressApp.Win -Imports DevExpress.Persistent.Base -Imports DevExpress.Persistent.BaseImpl -Imports DevExpress.XtraEditors - -Namespace NonPersistentObjectsDemo.Win - Friend Module Program - ''' - ''' The main entry point for the application. - ''' - - Sub Main() -#If EASYTEST Then - DevExpress.ExpressApp.Win.EasyTest.EasyTestRemotingRegistration.Register() -#End If - WindowsFormsSettings.LoadApplicationSettings() - Application.EnableVisualStyles() - Application.SetCompatibleTextRenderingDefault(False) - DevExpress.Utils.ToolTipController.DefaultController.ToolTipType = DevExpress.Utils.ToolTipType.SuperTip - DevExpress.ExpressApp.BaseObjectSpace.ThrowExceptionForNotRegisteredEntityType = True - EditModelPermission.AlwaysGranted = System.Diagnostics.Debugger.IsAttached - If Tracing.GetFileLocationFromSettings() = DevExpress.Persistent.Base.FileLocation.CurrentUserApplicationDataFolder Then - Tracing.LocalUserAppDataPath = Application.LocalUserAppDataPath - End If - Tracing.Initialize() - Dim winApplication As New NonPersistentObjectsDemoWindowsFormsApplication() - 'SecurityStrategy security = (SecurityStrategy)winApplication.Security; - 'security.RegisterXPOAdapterProviders(); - If ConfigurationManager.ConnectionStrings("ConnectionString") IsNot Nothing Then - winApplication.ConnectionString = ConfigurationManager.ConnectionStrings("ConnectionString").ConnectionString - End If -#If EASYTEST Then - If ConfigurationManager.ConnectionStrings("EasyTestConnectionString") IsNot Nothing Then - winApplication.ConnectionString = ConfigurationManager.ConnectionStrings("EasyTestConnectionString").ConnectionString - End If -#End If - winApplication.ConnectionString = DevExpress.ExpressApp.Xpo.InMemoryDataStoreProvider.ConnectionString -#If DEBUG Then - If System.Diagnostics.Debugger.IsAttached AndAlso winApplication.CheckCompatibilityType = CheckCompatibilityType.DatabaseSchema Then - winApplication.DatabaseUpdateMode = DatabaseUpdateMode.UpdateDatabaseAlways - End If -#End If - Try - winApplication.Setup() - winApplication.Start() - Catch e As Exception - winApplication.StopSplash() - winApplication.HandleException(e) - End Try - End Sub - End Module -End Namespace diff --git a/VB/NonPersistentObjectsDemo.Win/ReadMe.txt b/VB/NonPersistentObjectsDemo.Win/ReadMe.txt deleted file mode 100644 index fd287a6..0000000 --- a/VB/NonPersistentObjectsDemo.Win/ReadMe.txt +++ /dev/null @@ -1,31 +0,0 @@ -Project Description - -This project implements a WinForms application. The root project folder -contains the WinApplication.cs(vb) file with the class that inherits -WinApplication. This class can be designed with the Application Designer that -allows you to view and customize application components: referenced modules, -security settings, data connection. Additionally, the root folder contains -Application Model difference files (XAFML files) that keep application settings -specific for the current application. Differences files can be designed with -the Model Editor. - - -Relevant Documentation - -Application Solution Components -https://docs.devexpress.com/eXpressAppFramework/112569 - -WinApplication Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Win.WinApplication - -XafApplication Class -https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.XafApplication - -Application Designer -https://docs.devexpress.com/eXpressAppFramework/112827 - -Application Model -https://docs.devexpress.com/eXpressAppFramework/112579 - -Model Editor -https://docs.devexpress.com/eXpressAppFramework/112582 \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Win/WinApplication.Designer.vb b/VB/NonPersistentObjectsDemo.Win/WinApplication.Designer.vb deleted file mode 100644 index 1c81c20..0000000 --- a/VB/NonPersistentObjectsDemo.Win/WinApplication.Designer.vb +++ /dev/null @@ -1,129 +0,0 @@ -Namespace NonPersistentObjectsDemo.Win - Partial Public Class NonPersistentObjectsDemoWindowsFormsApplication - ''' - ''' Required designer variable. - ''' - Private components As System.ComponentModel.IContainer = Nothing - - ''' - ''' Clean up any resources being used. - ''' - ''' true if managed resources should be disposed; otherwise, false. - Protected Overrides Sub Dispose(ByVal disposing As Boolean) - If disposing AndAlso (components IsNot Nothing) Then - components.Dispose() - End If - MyBase.Dispose(disposing) - End Sub - - #Region "Component Designer generated code" - - ''' - ''' Required method for Designer support - do not modify - ''' the contents of this method with the code editor. - ''' - Private Sub InitializeComponent() - Me.module1 = New DevExpress.ExpressApp.SystemModule.SystemModule() - Me.module2 = New DevExpress.ExpressApp.Win.SystemModule.SystemWindowsFormsModule() - Me.module3 = New NonPersistentObjectsDemo.Module.NonPersistentObjectsDemoModule() - Me.module4 = New NonPersistentObjectsDemo.Module.Win.NonPersistentObjectsDemoWindowsFormsModule() - Me.securityModule1 = New DevExpress.ExpressApp.Security.SecurityModule() - Me.securityStrategyComplex1 = New DevExpress.ExpressApp.Security.SecurityStrategyComplex() - Me.securityStrategyComplex1.SupportNavigationPermissionsForTypes = False - Me.objectsModule = New DevExpress.ExpressApp.Objects.BusinessClassLibraryCustomizationModule() - Me.cloneObjectModule = New DevExpress.ExpressApp.CloneObject.CloneObjectModule() - Me.conditionalAppearanceModule = New DevExpress.ExpressApp.ConditionalAppearance.ConditionalAppearanceModule() - Me.fileAttachmentsWindowsFormsModule = New DevExpress.ExpressApp.FileAttachments.Win.FileAttachmentsWindowsFormsModule() - Me.reportsModuleV2 = New DevExpress.ExpressApp.ReportsV2.ReportsModuleV2() - Me.reportsWindowsFormsModuleV2 = New DevExpress.ExpressApp.ReportsV2.Win.ReportsWindowsFormsModuleV2() - Me.schedulerModuleBase = New DevExpress.ExpressApp.Scheduler.SchedulerModuleBase() - Me.schedulerWindowsFormsModule = New DevExpress.ExpressApp.Scheduler.Win.SchedulerWindowsFormsModule() - Me.scriptRecorderModuleBase = New DevExpress.ExpressApp.ScriptRecorder.ScriptRecorderModuleBase() - Me.scriptRecorderWindowsFormsModule = New DevExpress.ExpressApp.ScriptRecorder.Win.ScriptRecorderWindowsFormsModule() - Me.treeListEditorsModuleBase = New DevExpress.ExpressApp.TreeListEditors.TreeListEditorsModuleBase() - Me.treeListEditorsWindowsFormsModule = New DevExpress.ExpressApp.TreeListEditors.Win.TreeListEditorsWindowsFormsModule() - Me.validationModule = New DevExpress.ExpressApp.Validation.ValidationModule() - Me.validationWindowsFormsModule = New DevExpress.ExpressApp.Validation.Win.ValidationWindowsFormsModule() - Me.authenticationStandard1 = New DevExpress.ExpressApp.Security.AuthenticationStandard() - DirectCast(Me, System.ComponentModel.ISupportInitialize).BeginInit() - ' - ' securityStrategyComplex1 - ' - Me.securityStrategyComplex1.Authentication = Me.authenticationStandard1 - Me.securityStrategyComplex1.RoleType = GetType(DevExpress.Persistent.BaseImpl.PermissionPolicy.PermissionPolicyRole) - Me.securityStrategyComplex1.UserType = GetType(DevExpress.Persistent.BaseImpl.PermissionPolicy.PermissionPolicyUser) - ' - ' securityModule1 - ' - Me.securityModule1.UserType = GetType(DevExpress.Persistent.BaseImpl.PermissionPolicy.PermissionPolicyUser) - ' - ' authenticationStandard1 - ' - Me.authenticationStandard1.LogonParametersType = GetType(DevExpress.ExpressApp.Security.AuthenticationStandardLogonParameters) - ' - ' reportsModuleV2 - ' - Me.reportsModuleV2.EnableInplaceReports = True - Me.reportsModuleV2.ReportDataType = GetType(DevExpress.Persistent.BaseImpl.ReportDataV2) - Me.reportsModuleV2.ShowAdditionalNavigation = False - Me.reportsModuleV2.ReportStoreMode = DevExpress.ExpressApp.ReportsV2.ReportStoreModes.XML - ' - ' NonPersistentObjectsDemoWindowsFormsApplication - ' - Me.ApplicationName = "NonPersistentObjectsDemo" - Me.CheckCompatibilityType = DevExpress.ExpressApp.CheckCompatibilityType.DatabaseSchema - Me.Modules.Add(Me.module1) - Me.Modules.Add(Me.module2) - Me.Modules.Add(Me.module3) - Me.Modules.Add(Me.module4) - Me.Modules.Add(Me.securityModule1) - 'this.Security = this.securityStrategyComplex1; - Me.Modules.Add(Me.objectsModule) - Me.Modules.Add(Me.cloneObjectModule) - Me.Modules.Add(Me.conditionalAppearanceModule) - Me.Modules.Add(Me.fileAttachmentsWindowsFormsModule) - Me.Modules.Add(Me.reportsModuleV2) - Me.Modules.Add(Me.reportsWindowsFormsModuleV2) - Me.Modules.Add(Me.schedulerModuleBase) - Me.Modules.Add(Me.schedulerWindowsFormsModule) - Me.Modules.Add(Me.scriptRecorderModuleBase) - Me.Modules.Add(Me.scriptRecorderWindowsFormsModule) - Me.Modules.Add(Me.treeListEditorsModuleBase) - Me.Modules.Add(Me.treeListEditorsWindowsFormsModule) - Me.Modules.Add(Me.validationModule) - Me.Modules.Add(Me.validationWindowsFormsModule) - Me.UseOldTemplates = False -'INSTANT VB NOTE: The following InitializeComponent event wireup was converted to a 'Handles' clause: -'ORIGINAL LINE: this.DatabaseVersionMismatch += new System.EventHandler(this.NonPersistentObjectsDemoWindowsFormsApplication_DatabaseVersionMismatch); -'INSTANT VB NOTE: The following InitializeComponent event wireup was converted to a 'Handles' clause: -'ORIGINAL LINE: this.CustomizeLanguagesList += new System.EventHandler(this.NonPersistentObjectsDemoWindowsFormsApplication_CustomizeLanguagesList); - - DirectCast(Me, System.ComponentModel.ISupportInitialize).EndInit() - - End Sub - - #End Region - - Private module1 As DevExpress.ExpressApp.SystemModule.SystemModule - Private module2 As DevExpress.ExpressApp.Win.SystemModule.SystemWindowsFormsModule - Private module3 As NonPersistentObjectsDemo.Module.NonPersistentObjectsDemoModule - Private module4 As NonPersistentObjectsDemo.Module.Win.NonPersistentObjectsDemoWindowsFormsModule - Private securityModule1 As DevExpress.ExpressApp.Security.SecurityModule - Private securityStrategyComplex1 As DevExpress.ExpressApp.Security.SecurityStrategyComplex - Private authenticationStandard1 As DevExpress.ExpressApp.Security.AuthenticationStandard - Private objectsModule As DevExpress.ExpressApp.Objects.BusinessClassLibraryCustomizationModule - Private cloneObjectModule As DevExpress.ExpressApp.CloneObject.CloneObjectModule - Private conditionalAppearanceModule As DevExpress.ExpressApp.ConditionalAppearance.ConditionalAppearanceModule - Private fileAttachmentsWindowsFormsModule As DevExpress.ExpressApp.FileAttachments.Win.FileAttachmentsWindowsFormsModule - Private reportsModuleV2 As DevExpress.ExpressApp.ReportsV2.ReportsModuleV2 - Private reportsWindowsFormsModuleV2 As DevExpress.ExpressApp.ReportsV2.Win.ReportsWindowsFormsModuleV2 - Private schedulerModuleBase As DevExpress.ExpressApp.Scheduler.SchedulerModuleBase - Private schedulerWindowsFormsModule As DevExpress.ExpressApp.Scheduler.Win.SchedulerWindowsFormsModule - Private scriptRecorderModuleBase As DevExpress.ExpressApp.ScriptRecorder.ScriptRecorderModuleBase - Private scriptRecorderWindowsFormsModule As DevExpress.ExpressApp.ScriptRecorder.Win.ScriptRecorderWindowsFormsModule - Private treeListEditorsModuleBase As DevExpress.ExpressApp.TreeListEditors.TreeListEditorsModuleBase - Private treeListEditorsWindowsFormsModule As DevExpress.ExpressApp.TreeListEditors.Win.TreeListEditorsWindowsFormsModule - Private validationModule As DevExpress.ExpressApp.Validation.ValidationModule - Private validationWindowsFormsModule As DevExpress.ExpressApp.Validation.Win.ValidationWindowsFormsModule - End Class -End Namespace diff --git a/VB/NonPersistentObjectsDemo.Win/WinApplication.vb b/VB/NonPersistentObjectsDemo.Win/WinApplication.vb deleted file mode 100644 index 5e54d22..0000000 --- a/VB/NonPersistentObjectsDemo.Win/WinApplication.vb +++ /dev/null @@ -1,65 +0,0 @@ -Imports System -Imports System.ComponentModel -Imports DevExpress.ExpressApp -Imports DevExpress.ExpressApp.Win -Imports System.Collections.Generic -Imports DevExpress.ExpressApp.Updating -Imports DevExpress.ExpressApp.Win.Utils -Imports DevExpress.ExpressApp.Xpo -Imports DevExpress.ExpressApp.Security -Imports DevExpress.ExpressApp.Security.ClientServer - -Namespace NonPersistentObjectsDemo.Win - ' For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Win.WinApplication._members - Partial Public Class NonPersistentObjectsDemoWindowsFormsApplication - Inherits WinApplication - - #Region "Default XAF configuration options (https:" 'www.devexpress.com/kb=T501418) - Shared Sub New() - DevExpress.Persistent.Base.PasswordCryptographer.EnableRfc2898 = True - DevExpress.Persistent.Base.PasswordCryptographer.SupportLegacySha512 = False - DevExpress.ExpressApp.Utils.ImageLoader.Instance.UseSvgImages = True - End Sub - Private Sub InitializeDefaults() - LinkNewObjectToParentImmediately = False - OptimizedControllersCreation = True - UseLightStyle = True - SplashScreen = New DXSplashScreen(GetType(XafSplashScreen), New DefaultOverlayFormOptions()) - ExecuteStartupLogicBeforeClosingLogonWindow = True - End Sub - #End Region - Public Sub New() - InitializeComponent() - InitializeDefaults() - End Sub - Protected Overrides Sub CreateDefaultObjectSpaceProvider(ByVal args As CreateCustomObjectSpaceProviderEventArgs) - 'args.ObjectSpaceProviders.Add(new SecuredObjectSpaceProvider((SecurityStrategyComplex)Security, XPObjectSpaceProvider.GetDataStoreProvider(args.ConnectionString, args.Connection, true), false)); - args.ObjectSpaceProviders.Add(New XPObjectSpaceProvider(XPObjectSpaceProvider.GetDataStoreProvider(args.ConnectionString, args.Connection, True), False)) - args.ObjectSpaceProviders.Add(New NonPersistentObjectSpaceProvider(TypesInfo, Nothing)) - End Sub - Private Sub NonPersistentObjectsDemoWindowsFormsApplication_CustomizeLanguagesList(ByVal sender As Object, ByVal e As CustomizeLanguagesListEventArgs) Handles Me.CustomizeLanguagesList - Dim userLanguageName As String = System.Threading.Thread.CurrentThread.CurrentUICulture.Name - If userLanguageName <> "en-US" AndAlso e.Languages.IndexOf(userLanguageName) = -1 Then - e.Languages.Add(userLanguageName) - End If - End Sub - Private Sub NonPersistentObjectsDemoWindowsFormsApplication_DatabaseVersionMismatch(ByVal sender As Object, ByVal e As DevExpress.ExpressApp.DatabaseVersionMismatchEventArgs) Handles Me.DatabaseVersionMismatch -#If EASYTEST Then - e.Updater.Update() - e.Handled = True -#Else - If System.Diagnostics.Debugger.IsAttached Then - e.Updater.Update() - e.Handled = True - Else - Dim message As String = "The application cannot connect to the specified database, " & "because the database doesn't exist, its version is older " & "than that of the application or its schema does not match " & "the ORM data model structure. To avoid this error, use one " & "of the solutions from the https://www.devexpress.com/kb=T367835 KB Article." - - If e.CompatibilityError IsNot Nothing AndAlso e.CompatibilityError.Exception IsNot Nothing Then - message &= vbCrLf & vbCrLf & "Inner exception: " & e.CompatibilityError.Exception.Message - End If - Throw New InvalidOperationException(message) - End If -#End If - End Sub - End Class -End Namespace diff --git a/VB/NonPersistentObjectsDemo.Win/XafSplashScreen.Designer.vb b/VB/NonPersistentObjectsDemo.Win/XafSplashScreen.Designer.vb deleted file mode 100644 index a1ded36..0000000 --- a/VB/NonPersistentObjectsDemo.Win/XafSplashScreen.Designer.vb +++ /dev/null @@ -1,177 +0,0 @@ -Namespace NonPersistentObjectsDemo.Win - Partial Public Class XafSplashScreen - ''' - ''' Required designer variable. - ''' - Private components As System.ComponentModel.IContainer = Nothing - - ''' - ''' Clean up any resources being used. - ''' - ''' true if managed resources should be disposed; otherwise, false. - Protected Overrides Sub Dispose(ByVal disposing As Boolean) - If disposing AndAlso (components IsNot Nothing) Then - components.Dispose() - End If - MyBase.Dispose(disposing) - End Sub - - #Region "Windows Form Designer generated code" - - ''' - ''' Required method for Designer support - do not modify - ''' the contents of this method with the code editor. - ''' - Private Sub InitializeComponent() - Dim resources As New System.ComponentModel.ComponentResourceManager(GetType(XafSplashScreen)) - Me.progressBarControl = New DevExpress.XtraEditors.MarqueeProgressBarControl() - Me.labelCopyright = New DevExpress.XtraEditors.LabelControl() - Me.labelStatus = New DevExpress.XtraEditors.LabelControl() - Me.peImage = New DevExpress.XtraEditors.PictureEdit() - Me.peLogo = New DevExpress.XtraEditors.PictureEdit() - Me.pcApplicationName = New DevExpress.XtraEditors.PanelControl() - Me.labelSubtitle = New DevExpress.XtraEditors.LabelControl() - Me.labelApplicationName = New DevExpress.XtraEditors.LabelControl() - CType(Me.progressBarControl.Properties, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.peImage.Properties, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.peLogo.Properties, System.ComponentModel.ISupportInitialize).BeginInit() - CType(Me.pcApplicationName, System.ComponentModel.ISupportInitialize).BeginInit() - Me.pcApplicationName.SuspendLayout() - Me.SuspendLayout() - ' - ' progressBarControl - ' - Me.progressBarControl.EditValue = 0 - Me.progressBarControl.Location = New System.Drawing.Point(74, 271) - Me.progressBarControl.Name = "progressBarControl" - Me.progressBarControl.Properties.Appearance.BorderColor = System.Drawing.Color.FromArgb((CInt((CByte(195)))), (CInt((CByte(194)))), (CInt((CByte(194))))) - Me.progressBarControl.Properties.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.Simple - Me.progressBarControl.Properties.EndColor = System.Drawing.Color.FromArgb((CInt((CByte(255)))), (CInt((CByte(114)))), (CInt((CByte(0))))) - Me.progressBarControl.Properties.LookAndFeel.SkinName = "Visual Studio 2013 Blue" - Me.progressBarControl.Properties.LookAndFeel.Style = DevExpress.LookAndFeel.LookAndFeelStyle.UltraFlat - Me.progressBarControl.Properties.LookAndFeel.UseDefaultLookAndFeel = False - Me.progressBarControl.Properties.ProgressViewStyle = DevExpress.XtraEditors.Controls.ProgressViewStyle.Solid - Me.progressBarControl.Properties.StartColor = System.Drawing.Color.FromArgb((CInt((CByte(255)))), (CInt((CByte(144)))), (CInt((CByte(0))))) - Me.progressBarControl.Size = New System.Drawing.Size(350, 16) - Me.progressBarControl.TabIndex = 5 - ' - ' labelCopyright - ' - Me.labelCopyright.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder - Me.labelCopyright.Location = New System.Drawing.Point(24, 324) - Me.labelCopyright.Name = "labelCopyright" - Me.labelCopyright.Size = New System.Drawing.Size(47, 13) - Me.labelCopyright.TabIndex = 6 - Me.labelCopyright.Text = "Copyright" - ' - ' labelStatus - ' - Me.labelStatus.Location = New System.Drawing.Point(75, 253) - Me.labelStatus.Name = "labelStatus" - Me.labelStatus.Size = New System.Drawing.Size(50, 13) - Me.labelStatus.TabIndex = 7 - Me.labelStatus.Text = "Starting..." - ' - ' peImage - ' - Me.peImage.EditValue = (CObj(resources.GetObject("peImage.EditValue"))) - Me.peImage.Location = New System.Drawing.Point(12, 12) - Me.peImage.Name = "peImage" - Me.peImage.Properties.AllowFocused = False - Me.peImage.Properties.Appearance.BackColor = System.Drawing.Color.Transparent - Me.peImage.Properties.Appearance.Options.UseBackColor = True - Me.peImage.Properties.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder - Me.peImage.Properties.ShowMenu = False - Me.peImage.Size = New System.Drawing.Size(426, 180) - Me.peImage.TabIndex = 9 - Me.peImage.Visible = False - ' - ' peLogo - ' - Me.peLogo.EditValue = (CObj(resources.GetObject("peLogo.EditValue"))) - Me.peLogo.Location = New System.Drawing.Point(400, 328) - Me.peLogo.Name = "peLogo" - Me.peLogo.Properties.AllowFocused = False - Me.peLogo.Properties.Appearance.BackColor = System.Drawing.Color.Transparent - Me.peLogo.Properties.Appearance.Options.UseBackColor = True - Me.peLogo.Properties.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder - Me.peLogo.Properties.ShowMenu = False - Me.peLogo.Size = New System.Drawing.Size(70, 20) - Me.peLogo.TabIndex = 8 - ' - ' pcApplicationName - ' - Me.pcApplicationName.Appearance.BackColor = System.Drawing.Color.FromArgb((CInt((CByte(255)))), (CInt((CByte(114)))), (CInt((CByte(0))))) - Me.pcApplicationName.Appearance.Options.UseBackColor = True - Me.pcApplicationName.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder - Me.pcApplicationName.Controls.Add(Me.labelSubtitle) - Me.pcApplicationName.Controls.Add(Me.labelApplicationName) - Me.pcApplicationName.Dock = System.Windows.Forms.DockStyle.Top - Me.pcApplicationName.Location = New System.Drawing.Point(1, 1) - Me.pcApplicationName.LookAndFeel.UseDefaultLookAndFeel = False - Me.pcApplicationName.Name = "pcApplicationName" - Me.pcApplicationName.Size = New System.Drawing.Size(494, 220) - Me.pcApplicationName.TabIndex = 10 - ' - ' labelSubtitle - ' - Me.labelSubtitle.Appearance.Font = New System.Drawing.Font("Segoe UI", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, (CByte(0))) - Me.labelSubtitle.Appearance.ForeColor = System.Drawing.Color.FromArgb((CInt((CByte(255)))), (CInt((CByte(216)))), (CInt((CByte(188))))) - Me.labelSubtitle.Appearance.Options.UseFont = True - Me.labelSubtitle.Appearance.Options.UseForeColor = True - Me.labelSubtitle.Location = New System.Drawing.Point(222, 131) - Me.labelSubtitle.Name = "labelSubtitle" - Me.labelSubtitle.Size = New System.Drawing.Size(64, 25) - Me.labelSubtitle.TabIndex = 1 - Me.labelSubtitle.Text = "Subtitle" - ' - ' labelApplicationName - ' - Me.labelApplicationName.Appearance.Font = New System.Drawing.Font("Segoe UI", 26.25F) - Me.labelApplicationName.Appearance.ForeColor = System.Drawing.SystemColors.Window - Me.labelApplicationName.Appearance.Options.UseFont = True - Me.labelApplicationName.Appearance.Options.UseForeColor = True - Me.labelApplicationName.Location = New System.Drawing.Point(123, 84) - Me.labelApplicationName.Name = "labelApplicationName" - Me.labelApplicationName.Size = New System.Drawing.Size(278, 47) - Me.labelApplicationName.TabIndex = 0 - Me.labelApplicationName.Text = "Application Name" - ' - ' XafSplashScreen - ' - Me.AutoScaleDimensions = New System.Drawing.SizeF(6F, 13F) - Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font - Me.BackColor = System.Drawing.Color.White - Me.ClientSize = New System.Drawing.Size(496, 370) - Me.Controls.Add(Me.pcApplicationName) - Me.Controls.Add(Me.peImage) - Me.Controls.Add(Me.peLogo) - Me.Controls.Add(Me.labelStatus) - Me.Controls.Add(Me.labelCopyright) - Me.Controls.Add(Me.progressBarControl) - Me.Name = "XafSplashScreen" - Me.Padding = New System.Windows.Forms.Padding(1) - Me.Text = "Form1" - CType(Me.progressBarControl.Properties, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.peImage.Properties, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.peLogo.Properties, System.ComponentModel.ISupportInitialize).EndInit() - CType(Me.pcApplicationName, System.ComponentModel.ISupportInitialize).EndInit() - Me.pcApplicationName.ResumeLayout(False) - Me.pcApplicationName.PerformLayout() - Me.ResumeLayout(False) - Me.PerformLayout() - - End Sub - - #End Region - - Private progressBarControl As DevExpress.XtraEditors.MarqueeProgressBarControl - Private labelCopyright As DevExpress.XtraEditors.LabelControl - Private labelStatus As DevExpress.XtraEditors.LabelControl - Private peLogo As DevExpress.XtraEditors.PictureEdit - Private peImage As DevExpress.XtraEditors.PictureEdit - Private pcApplicationName As DevExpress.XtraEditors.PanelControl - Private labelSubtitle As DevExpress.XtraEditors.LabelControl - Private labelApplicationName As DevExpress.XtraEditors.LabelControl - End Class -End Namespace diff --git a/VB/NonPersistentObjectsDemo.Win/XafSplashScreen.resx b/VB/NonPersistentObjectsDemo.Win/XafSplashScreen.resx deleted file mode 100644 index 18fc5b4..0000000 --- a/VB/NonPersistentObjectsDemo.Win/XafSplashScreen.resx +++ /dev/null @@ -1,638 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - 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 - YII= - - - \ No newline at end of file diff --git a/VB/NonPersistentObjectsDemo.Win/XafSplashScreen.vb b/VB/NonPersistentObjectsDemo.Win/XafSplashScreen.vb deleted file mode 100644 index 9938ca4..0000000 --- a/VB/NonPersistentObjectsDemo.Win/XafSplashScreen.vb +++ /dev/null @@ -1,56 +0,0 @@ -Imports System -Imports System.Drawing -Imports System.IO -Imports System.Reflection -Imports DevExpress.ExpressApp.Win.Utils -Imports DevExpress.Skins -Imports DevExpress.Utils.Drawing -Imports DevExpress.Utils.Svg -Imports DevExpress.XtraSplashScreen - -Namespace NonPersistentObjectsDemo.Win - Partial Public Class XafSplashScreen - Inherits SplashScreen - - Private Sub LoadBlankLogo() - Dim assembly As System.Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly() - Dim blankLogoResourceName As String = assembly.GetName().Name & ".Images.Logo.svg" - Dim svgStream As Stream = assembly.GetManifestResourceStream(blankLogoResourceName) - If svgStream IsNot Nothing Then - svgStream.Position = 0 - peLogo.SvgImage = SvgImage.FromStream(svgStream) - End If - End Sub - Protected Overrides Sub DrawContent(ByVal graphicsCache As GraphicsCache, ByVal skin As Skin) - Dim bounds As Rectangle = ClientRectangle - bounds.Width -= 1 - bounds.Height -= 1 - graphicsCache.Graphics.DrawRectangle(graphicsCache.GetPen(Color.FromArgb(255, 87, 87, 87), 1), bounds) - End Sub - Protected Sub UpdateLabelsPosition() - labelApplicationName.CalcBestSize() - Dim newLeft As Integer = (Width - labelApplicationName.Width) \ 2 - labelApplicationName.Location = New Point(newLeft, labelApplicationName.Top) - labelSubtitle.CalcBestSize() - newLeft = (Width - labelSubtitle.Width) \ 2 - labelSubtitle.Location = New Point(newLeft, labelSubtitle.Top) - End Sub - Public Sub New() - InitializeComponent() - LoadBlankLogo() - Me.labelCopyright.Text = "Copyright © " & DateTime.Now.Year.ToString() & " Company Name" & Environment.NewLine & "All rights reserved." - UpdateLabelsPosition() - End Sub - - #Region "Overrides" - - Public Overrides Sub ProcessCommand(ByVal cmd As System.Enum, ByVal arg As Object) - MyBase.ProcessCommand(cmd, arg) - If CType(cmd, UpdateSplashCommand) = UpdateSplashCommand.Description Then - labelStatus.Text = DirectCast(arg, String) - End If - End Sub - - #End Region - End Class -End Namespace diff --git a/VB/NonPersistentObjectsFilteringDemo.sln b/VB/NonPersistentObjectsFilteringDemo.sln deleted file mode 100644 index 6dac80e..0000000 --- a/VB/NonPersistentObjectsFilteringDemo.sln +++ /dev/null @@ -1,59 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 15 -VisualStudioVersion = 15.0.28307.1000 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "NonPersistentObjectsDemo.Module", "NonPersistentObjectsDemo.Module\NonPersistentObjectsDemo.Module.vbproj", "{57ACDBDB-006E-43D3-9308-97857F2FF75D}" -EndProject -Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "NonPersistentObjectsDemo.Module.Web", "NonPersistentObjectsDemo.Module.Web\NonPersistentObjectsDemo.Module.Web.vbproj", "{EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B}" -EndProject -Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "NonPersistentObjectsDemo.Web", "NonPersistentObjectsDemo.Web\NonPersistentObjectsDemo.Web.vbproj", "{8C3026D1-113C-4B88-9F91-236753790C60}" -EndProject -Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "NonPersistentObjectsDemo.Module.Win", "NonPersistentObjectsDemo.Module.Win\NonPersistentObjectsDemo.Module.Win.vbproj", "{72D644CD-C193-4572-B2E3-CA82819A1627}" -EndProject -Project("{F184B08F-C81C-45F6-A57F-5ABD9991F28F}") = "NonPersistentObjectsDemo.Win", "NonPersistentObjectsDemo.Win\NonPersistentObjectsDemo.Win.vbproj", "{13E1ACF3-669C-4405-8260-E70BE603E197}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - EasyTest|Any CPU = EasyTest|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {57ACDBDB-006E-43D3-9308-97857F2FF75D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {57ACDBDB-006E-43D3-9308-97857F2FF75D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {57ACDBDB-006E-43D3-9308-97857F2FF75D}.EasyTest|Any CPU.ActiveCfg = EasyTest|Any CPU - {57ACDBDB-006E-43D3-9308-97857F2FF75D}.EasyTest|Any CPU.Build.0 = EasyTest|Any CPU - {57ACDBDB-006E-43D3-9308-97857F2FF75D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {57ACDBDB-006E-43D3-9308-97857F2FF75D}.Release|Any CPU.Build.0 = Release|Any CPU - {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B}.EasyTest|Any CPU.ActiveCfg = EasyTest|Any CPU - {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B}.EasyTest|Any CPU.Build.0 = EasyTest|Any CPU - {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EFD113F7-1ED0-472C-8EBE-B1A7CAFB6C2B}.Release|Any CPU.Build.0 = Release|Any CPU - {8C3026D1-113C-4B88-9F91-236753790C60}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8C3026D1-113C-4B88-9F91-236753790C60}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8C3026D1-113C-4B88-9F91-236753790C60}.EasyTest|Any CPU.ActiveCfg = EasyTest|Any CPU - {8C3026D1-113C-4B88-9F91-236753790C60}.EasyTest|Any CPU.Build.0 = EasyTest|Any CPU - {8C3026D1-113C-4B88-9F91-236753790C60}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8C3026D1-113C-4B88-9F91-236753790C60}.Release|Any CPU.Build.0 = Release|Any CPU - {72D644CD-C193-4572-B2E3-CA82819A1627}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {72D644CD-C193-4572-B2E3-CA82819A1627}.Debug|Any CPU.Build.0 = Debug|Any CPU - {72D644CD-C193-4572-B2E3-CA82819A1627}.EasyTest|Any CPU.ActiveCfg = EasyTest|Any CPU - {72D644CD-C193-4572-B2E3-CA82819A1627}.EasyTest|Any CPU.Build.0 = EasyTest|Any CPU - {72D644CD-C193-4572-B2E3-CA82819A1627}.Release|Any CPU.ActiveCfg = Release|Any CPU - {72D644CD-C193-4572-B2E3-CA82819A1627}.Release|Any CPU.Build.0 = Release|Any CPU - {13E1ACF3-669C-4405-8260-E70BE603E197}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {13E1ACF3-669C-4405-8260-E70BE603E197}.Debug|Any CPU.Build.0 = Debug|Any CPU - {13E1ACF3-669C-4405-8260-E70BE603E197}.EasyTest|Any CPU.ActiveCfg = EasyTest|Any CPU - {13E1ACF3-669C-4405-8260-E70BE603E197}.EasyTest|Any CPU.Build.0 = EasyTest|Any CPU - {13E1ACF3-669C-4405-8260-E70BE603E197}.Release|Any CPU.ActiveCfg = Release|Any CPU - {13E1ACF3-669C-4405-8260-E70BE603E197}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {BCF45AD8-3F2F-4887-832F-CBD5AE72BD68} - EndGlobalSection -EndGlobal From 0cf357184f7f8cea55059e98e0c50c9d57594022 Mon Sep 17 00:00:00 2001 From: andrey Date: Fri, 21 Apr 2023 17:25:21 +0400 Subject: [PATCH 29/40] EF --- .../App.razor | 11 + .../BlazorApplication.cs | 48 ++ .../BlazorModule.cs | 26 + .../Controllers/ReadMe.txt | 25 + .../Editors/ReadMe.txt | 25 + .../Images/ReadMe.txt | 12 + .../Model.xafml | 7 + ...PersistentFilteringEF.Blazor.Server.csproj | 26 + .../Pages/_Host.cshtml | 55 ++ .../Program.cs | 50 ++ .../Properties/launchSettings.json | 27 + .../ReadMe.txt | 40 ++ .../Services/CircuitHandlerProxy.cs | 23 + .../Services/ProxyHubConnectionHandler.cs | 27 + .../Startup.cs | 81 +++ .../_Imports.razor | 11 + .../appsettings.Development.json | 16 + .../appsettings.json | 52 ++ .../wwwroot/css/site.css | 31 + .../wwwroot/favicon.ico | Bin 0 -> 31444 bytes .../wwwroot/images/Logo.svg | 43 ++ .../wwwroot/images/SplashScreen.svg | 13 + .../BusinessObjects/Article.cs | 88 +++ .../BusinessObjects/Contact.cs | 124 ++++ .../NonPersistentFilteringEFDbContext.cs | 43 ++ .../NonPersistentObjectBase.cs | 47 ++ .../BusinessObjects/ReadMe.txt | 29 + .../Controllers/FindArticlesController.cs | 84 +++ .../Controllers/ReadMe.txt | 25 + .../DatabaseUpdate/ReadMe.txt | 23 + .../DatabaseUpdate/Updater.cs | 29 + .../Images/ReadMe.txt | 12 + .../Model.DesignedDiffs.xafml | 5 + .../NonPersistentFilteringEF.Module/Module.cs | 44 ++ .../NonPersistentFilteringEF.Module.csproj | 27 + .../ReadMe.txt | 32 + .../Welcome.html | 191 ++++++ .../NonPersistentFilteringEF.Win/App.config | 36 + .../Controllers/ReadMe.txt | 25 + .../Editors/ReadMe.txt | 46 ++ .../ExpressApp.ico | Bin 0 -> 113407 bytes .../Images/ExpressAppLogo.png | Bin 0 -> 7486 bytes .../Images/Logo.svg | 18 + .../Images/ReadMe.txt | 12 + .../NonPersistentFilteringEF.Win/Model.xafml | 4 + .../NonPersistentFilteringEF.Win.csproj | 43 ++ .../NonPersistentFilteringEF.Win/Program.cs | 81 +++ .../NonPersistentFilteringEF.Win/ReadMe.txt | 33 + .../NonPersistentFilteringEF.Win/Startup.cs | 47 ++ .../WinApplication.cs | 54 ++ .../NonPersistentFilteringEF.Win/WinModule.cs | 26 + .../XafSplashScreen.Designer.cs | 181 +++++ .../XafSplashScreen.cs | 54 ++ .../XafSplashScreen.resx | 638 ++++++++++++++++++ .../NonPersistentFilteringEF.sln | 41 ++ 55 files changed, 2791 insertions(+) create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/App.razor create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/BlazorApplication.cs create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/BlazorModule.cs create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Controllers/ReadMe.txt create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Editors/ReadMe.txt create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Images/ReadMe.txt create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Model.xafml create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/NonPersistentFilteringEF.Blazor.Server.csproj create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Pages/_Host.cshtml create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Program.cs create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Properties/launchSettings.json create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/ReadMe.txt create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Services/CircuitHandlerProxy.cs create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Services/ProxyHubConnectionHandler.cs create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Startup.cs create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/_Imports.razor create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/appsettings.Development.json create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/appsettings.json create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/wwwroot/css/site.css create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/wwwroot/favicon.ico create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/wwwroot/images/Logo.svg create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/wwwroot/images/SplashScreen.svg create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/BusinessObjects/Article.cs create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/BusinessObjects/Contact.cs create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/BusinessObjects/NonPersistentFilteringEFDbContext.cs create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/BusinessObjects/NonPersistentObjectBase.cs create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/BusinessObjects/ReadMe.txt create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/Controllers/FindArticlesController.cs create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/Controllers/ReadMe.txt create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/DatabaseUpdate/ReadMe.txt create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/DatabaseUpdate/Updater.cs create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/Images/ReadMe.txt create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/Model.DesignedDiffs.xafml create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/Module.cs create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/NonPersistentFilteringEF.Module.csproj create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/ReadMe.txt create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/Welcome.html create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/App.config create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/Controllers/ReadMe.txt create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/Editors/ReadMe.txt create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/ExpressApp.ico create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/Images/ExpressAppLogo.png create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/Images/Logo.svg create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/Images/ReadMe.txt create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/Model.xafml create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/NonPersistentFilteringEF.Win.csproj create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/Program.cs create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/ReadMe.txt create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/Startup.cs create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/WinApplication.cs create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/WinModule.cs create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/XafSplashScreen.Designer.cs create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/XafSplashScreen.cs create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/XafSplashScreen.resx create mode 100644 CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.sln diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/App.razor b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/App.razor new file mode 100644 index 0000000..3b8af49 --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/App.razor @@ -0,0 +1,11 @@ + + + + + + + Not found +

Sorry, there's nothing at this address.

+
+
+
diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/BlazorApplication.cs b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/BlazorApplication.cs new file mode 100644 index 0000000..d3889f1 --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/BlazorApplication.cs @@ -0,0 +1,48 @@ +using DevExpress.ExpressApp; +using DevExpress.ExpressApp.ApplicationBuilder; +using DevExpress.ExpressApp.Blazor; +using DevExpress.ExpressApp.SystemModule; +using NonPersistentFilteringEF.Module.BusinessObjects; +using Microsoft.EntityFrameworkCore; +using DevExpress.ExpressApp.EFCore; + +namespace NonPersistentFilteringEF.Blazor.Server; + +public class NonPersistentFilteringEFBlazorApplication : BlazorApplication { + public NonPersistentFilteringEFBlazorApplication() { + ApplicationName = "NonPersistentFilteringEF"; + CheckCompatibilityType = DevExpress.ExpressApp.CheckCompatibilityType.DatabaseSchema; + DatabaseVersionMismatch += NonPersistentFilteringEFBlazorApplication_DatabaseVersionMismatch; + } + protected override void OnSetupStarted() { + base.OnSetupStarted(); +#if DEBUG + if(System.Diagnostics.Debugger.IsAttached && CheckCompatibilityType == CheckCompatibilityType.DatabaseSchema) { + DatabaseUpdateMode = DatabaseUpdateMode.UpdateDatabaseAlways; + } +#endif + } + private void NonPersistentFilteringEFBlazorApplication_DatabaseVersionMismatch(object sender, DatabaseVersionMismatchEventArgs e) { +#if EASYTEST + e.Updater.Update(); + e.Handled = true; +#else + if(System.Diagnostics.Debugger.IsAttached) { + e.Updater.Update(); + e.Handled = true; + } + else { + string message = "The application cannot connect to the specified database, " + + "because the database doesn't exist, its version is older " + + "than that of the application or its schema does not match " + + "the ORM data model structure. To avoid this error, use one " + + "of the solutions from the https://www.devexpress.com/kb=T367835 KB Article."; + + if(e.CompatibilityError != null && e.CompatibilityError.Exception != null) { + message += "\r\n\r\nInner exception: " + e.CompatibilityError.Exception.Message; + } + throw new InvalidOperationException(message); + } +#endif + } +} diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/BlazorModule.cs b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/BlazorModule.cs new file mode 100644 index 0000000..2336148 --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/BlazorModule.cs @@ -0,0 +1,26 @@ +using System.ComponentModel; +using DevExpress.ExpressApp; +using DevExpress.ExpressApp.DC; +using DevExpress.ExpressApp.Model; +using DevExpress.ExpressApp.Editors; +using DevExpress.ExpressApp.Actions; +using DevExpress.ExpressApp.Updating; +using DevExpress.ExpressApp.Model.Core; +using DevExpress.ExpressApp.Model.DomainLogics; +using DevExpress.ExpressApp.Model.NodeGenerators; +using DevExpress.Persistent.BaseImpl.EF; + +namespace NonPersistentFilteringEF.Blazor.Server; + +[ToolboxItemFilter("Xaf.Platform.Blazor")] +// For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase. +public sealed class NonPersistentFilteringEFBlazorModule : ModuleBase { + public NonPersistentFilteringEFBlazorModule() { + } + public override IEnumerable GetModuleUpdaters(IObjectSpace objectSpace, Version versionFromDB) { + return ModuleUpdater.EmptyModuleUpdaters; + } + public override void Setup(XafApplication application) { + base.Setup(application); + } +} diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Controllers/ReadMe.txt b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Controllers/ReadMe.txt new file mode 100644 index 0000000..42f3017 --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Controllers/ReadMe.txt @@ -0,0 +1,25 @@ +Folder Description + +The "Controllers" project folder is intended for storing Blazor-specific Controller classes +that can change the default XAF application flow and add new features. + + +Relevant Documentation + +Controllers and Actions +https://docs.devexpress.com/eXpressAppFramework/112623 + +Implement Custom Controllers +https://docs.devexpress.com/eXpressAppFramework/112621 + +Define the Scope of Controllers and Actions +https://docs.devexpress.com/eXpressAppFramework/113103 + +Ways to Show a View +https://docs.devexpress.com/eXpressAppFramework/112803 + +Ways to Implement Business Logic +https://docs.devexpress.com/eXpressAppFramework/113710 + +Debugging, Unit and Functional Testing +https://docs.devexpress.com/eXpressAppFramework/112572 diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Editors/ReadMe.txt b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Editors/ReadMe.txt new file mode 100644 index 0000000..827fd95 --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Editors/ReadMe.txt @@ -0,0 +1,25 @@ +Folder Description + +This project folder is intended for storing custom Blazor List Editors, +Property Editors and View Items. + + +Relevant Documentation + +Using a Custom Control that is not Integrated by Default +https://docs.devexpress.com/eXpressAppFramework/113610 + +Ways to Access UI Elements and Their Controls +https://docs.devexpress.com/eXpressAppFramework/120092 + +Views +https://docs.devexpress.com/eXpressAppFramework/112611 + +List Editors +https://docs.devexpress.com/eXpressAppFramework/113189 + +View Items +https://docs.devexpress.com/eXpressAppFramework/112612 + +Debugging, Unit and Functional Testing +https://docs.devexpress.com/eXpressAppFramework/112572 diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Images/ReadMe.txt b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Images/ReadMe.txt new file mode 100644 index 0000000..230befc --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Images/ReadMe.txt @@ -0,0 +1,12 @@ +Folder Description + +The "Images" project folder is intended for storing custom image files. + + +Relevant Documentation + +Add and Override Images +https://docs.devexpress.com/eXpressAppFramework/112792 + +Assign a Custom Image +https://docs.devexpress.com/eXpressAppFramework/112744 diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Model.xafml b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Model.xafml new file mode 100644 index 0000000..2877e3b --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Model.xafml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/NonPersistentFilteringEF.Blazor.Server.csproj b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/NonPersistentFilteringEF.Blazor.Server.csproj new file mode 100644 index 0000000..c3b777b --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/NonPersistentFilteringEF.Blazor.Server.csproj @@ -0,0 +1,26 @@ + + + net6.0 + false + false + 1.0.* + 1.0.0.0 + Debug;Release;EasyTest + enable + + + + + + + Always + + + + + + + + + + diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Pages/_Host.cshtml b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Pages/_Host.cshtml new file mode 100644 index 0000000..0c8fd68 --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Pages/_Host.cshtml @@ -0,0 +1,55 @@ +@page "/" +@namespace NonPersistentFilteringEF.Blazor.Server +@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers +@using DevExpress.ExpressApp.Blazor.Components + + + + + + + + + + NonPersistentFilteringEF + + + + + @{ + string userAgent = Request.Headers["User-Agent"]; + bool isIE = userAgent.Contains("MSIE") || userAgent.Contains("Trident"); + } + @if(isIE) { + +
+
+ +
+
Internet Explorer is not supported.
+

NonPersistentFilteringEF cannot be loaded in Internet Explorer.
Please use a different browser.

+
+
+
+ } + else { + + + + + + + + + + + + +
+ +
+ + + } + + diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Program.cs b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Program.cs new file mode 100644 index 0000000..77528f1 --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Program.cs @@ -0,0 +1,50 @@ +using System.Reflection; +using DevExpress.ExpressApp; +using DevExpress.ExpressApp.Blazor.DesignTime; +using DevExpress.ExpressApp.Blazor.Services; +using DevExpress.ExpressApp.Design; +using DevExpress.ExpressApp.Utils; + +namespace NonPersistentFilteringEF.Blazor.Server; + +public class Program : IDesignTimeApplicationFactory { + private static bool ContainsArgument(string[] args, string argument) { + return args.Any(arg => arg.TrimStart('/').TrimStart('-').ToLower() == argument.ToLower()); + } + public static int Main(string[] args) { + if(ContainsArgument(args, "help") || ContainsArgument(args, "h")) { + Console.WriteLine("Updates the database when its version does not match the application's version."); + Console.WriteLine(); + Console.WriteLine($" {Assembly.GetExecutingAssembly().GetName().Name}.exe --updateDatabase [--forceUpdate --silent]"); + Console.WriteLine(); + Console.WriteLine("--forceUpdate - Marks that the database must be updated whether its version matches the application's version or not."); + Console.WriteLine("--silent - Marks that database update proceeds automatically and does not require any interaction with the user."); + Console.WriteLine(); + Console.WriteLine($"Exit codes: 0 - {DBUpdaterStatus.UpdateCompleted}"); + Console.WriteLine($" 1 - {DBUpdaterStatus.UpdateError}"); + Console.WriteLine($" 2 - {DBUpdaterStatus.UpdateNotNeeded}"); + } + else { + DevExpress.ExpressApp.FrameworkSettings.DefaultSettingsCompatibilityMode = DevExpress.ExpressApp.FrameworkSettingsCompatibilityMode.Latest; + IHost host = CreateHostBuilder(args).Build(); + if(ContainsArgument(args, "updateDatabase")) { + using(var serviceScope = host.Services.CreateScope()) { + return serviceScope.ServiceProvider.GetRequiredService().Update(ContainsArgument(args, "forceUpdate"), ContainsArgument(args, "silent")); + } + } + else { + host.Run(); + } + } + return 0; + } + public static IHostBuilder CreateHostBuilder(string[] args) => + Host.CreateDefaultBuilder(args) + .ConfigureWebHostDefaults(webBuilder => { + webBuilder.UseStartup(); + }); + XafApplication IDesignTimeApplicationFactory.Create() { + IHostBuilder hostBuilder = CreateHostBuilder(Array.Empty()); + return DesignTimeApplicationFactoryHelper.Create(hostBuilder); + } +} diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Properties/launchSettings.json b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Properties/launchSettings.json new file mode 100644 index 0000000..a4c5058 --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Properties/launchSettings.json @@ -0,0 +1,27 @@ +{ + "iisSettings": { + "windowsAuthentication": false, + "anonymousAuthentication": true, + "iisExpress": { + "applicationUrl": "http://localhost:65201", + "sslPort": 44318 + } + }, + "profiles": { + "IIS Express": { + "commandName": "IISExpress", + "launchBrowser": true, + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + }, + "NonPersistentFilteringEF.Blazor.Server": { + "commandName": "Project", + "launchBrowser": true, + "applicationUrl": "https://localhost:5001;http://localhost:5000", + "environmentVariables": { + "ASPNETCORE_ENVIRONMENT": "Development" + } + } + } +} \ No newline at end of file diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/ReadMe.txt b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/ReadMe.txt new file mode 100644 index 0000000..a229505 --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/ReadMe.txt @@ -0,0 +1,40 @@ +Project Description + +This project implements an ASP.NET Core Blazor Server application (https://docs.microsoft.com/en-us/aspnet/core/blazor/). +The root project folder contains the BlazorApplication.cs file with the class that inherits +BlazorApplication. This class allows you to view and customize application components: referenced modules, +security settings, data connection. Additionally, the root folder contains +Application Model difference files (XAFML files) that keep settings +specific to the current application. Difference files can be customized in code +or in the Model Editor. +The appsettings.json file contains database connection, logging, and theme settings (https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration). + + +Relevant Documentation + +Application Solution Components +https://docs.devexpress.com/eXpressAppFramework/112569 + +Debugging, Testing and Error Handling +https://docs.devexpress.com/eXpressAppFramework/112572 + +XafApplication Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.XafApplication + +Application Model (UI Settings Storage) +https://docs.devexpress.com/eXpressAppFramework/112579 + +Model Editor +https://docs.devexpress.com/eXpressAppFramework/112582 + +ASP.NET Core Blazor UI +https://docs.devexpress.com/eXpressAppFramework/401675/overview/supported-ui-platforms#aspnet-core-blazor-ui + +Frequently Asked Questions - Blazor UI (FAQ) +https://docs.devexpress.com/eXpressAppFramework/403277/support-qa-troubleshooting/frequently-asked-questions-blazor-faq + +Backend WebApi Service +https://docs.devexpress.com/eXpressAppFramework/403394/backend-web-api-service + +XAF Community Extensions +https://www.devexpress.com/products/net/application_framework/#extensions \ No newline at end of file diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Services/CircuitHandlerProxy.cs b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Services/CircuitHandlerProxy.cs new file mode 100644 index 0000000..5c3396a --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Services/CircuitHandlerProxy.cs @@ -0,0 +1,23 @@ +using DevExpress.ExpressApp.Blazor.Services; +using Microsoft.AspNetCore.Components.Server.Circuits; + +namespace NonPersistentFilteringEF.Blazor.Server.Services; + +internal class CircuitHandlerProxy : CircuitHandler { + private readonly IScopedCircuitHandler scopedCircuitHandler; + public CircuitHandlerProxy(IScopedCircuitHandler scopedCircuitHandler) { + this.scopedCircuitHandler = scopedCircuitHandler; + } + public override Task OnCircuitOpenedAsync(Circuit circuit, CancellationToken cancellationToken) { + return scopedCircuitHandler.OnCircuitOpenedAsync(cancellationToken); + } + public override Task OnConnectionUpAsync(Circuit circuit, CancellationToken cancellationToken) { + return scopedCircuitHandler.OnConnectionUpAsync(cancellationToken); + } + public override Task OnCircuitClosedAsync(Circuit circuit, CancellationToken cancellationToken) { + return scopedCircuitHandler.OnCircuitClosedAsync(cancellationToken); + } + public override Task OnConnectionDownAsync(Circuit circuit, CancellationToken cancellationToken) { + return scopedCircuitHandler.OnConnectionDownAsync(cancellationToken); + } +} diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Services/ProxyHubConnectionHandler.cs b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Services/ProxyHubConnectionHandler.cs new file mode 100644 index 0000000..74b53c4 --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Services/ProxyHubConnectionHandler.cs @@ -0,0 +1,27 @@ +using DevExpress.ExpressApp.Blazor.Services; +using Microsoft.AspNetCore.Connections; +using Microsoft.AspNetCore.SignalR; +using Microsoft.Extensions.Options; + +namespace NonPersistentFilteringEF.Blazor.Server.Services; + +internal class ProxyHubConnectionHandler : HubConnectionHandler where THub : Hub { + private readonly IValueManagerStorageContainerInitializer storageContainerInitializer; + public ProxyHubConnectionHandler( + HubLifetimeManager lifetimeManager, + IHubProtocolResolver protocolResolver, + IOptions globalHubOptions, + IOptions> hubOptions, + ILoggerFactory loggerFactory, + IUserIdProvider userIdProvider, + IServiceScopeFactory serviceScopeFactory, + IValueManagerStorageContainerInitializer storageContainerAccessor) + : base(lifetimeManager, protocolResolver, globalHubOptions, hubOptions, loggerFactory, userIdProvider, serviceScopeFactory) { + this.storageContainerInitializer = storageContainerAccessor; + } + + public override Task OnConnectedAsync(ConnectionContext connection) { + storageContainerInitializer.Initialize(); + return base.OnConnectedAsync(connection); + } +} diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Startup.cs b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Startup.cs new file mode 100644 index 0000000..4c3ea5d --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/Startup.cs @@ -0,0 +1,81 @@ +using DevExpress.ExpressApp.ApplicationBuilder; +using DevExpress.ExpressApp.Blazor.ApplicationBuilder; +using DevExpress.ExpressApp.Blazor.Services; +using DevExpress.Persistent.Base; +using Microsoft.AspNetCore.Authentication.Cookies; +using Microsoft.AspNetCore.Components.Server.Circuits; +using Microsoft.EntityFrameworkCore; +using NonPersistentFilteringEF.Blazor.Server.Services; +using DevExpress.ExpressApp.Core; + +namespace NonPersistentFilteringEF.Blazor.Server; + +public class Startup { + public Startup(IConfiguration configuration) { + Configuration = configuration; + } + + public IConfiguration Configuration { get; } + + // This method gets called by the runtime. Use this method to add services to the container. + // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 + public void ConfigureServices(IServiceCollection services) { + services.AddSingleton(typeof(Microsoft.AspNetCore.SignalR.HubConnectionHandler<>), typeof(ProxyHubConnectionHandler<>)); + + services.AddRazorPages(); + services.AddServerSideBlazor(); + services.AddHttpContextAccessor(); + services.AddScoped(); + services.AddXaf(Configuration, builder => { + builder.UseApplication(); + builder.Modules + .Add() + .Add(); + builder.ObjectSpaceProviders + .AddEFCore().WithDbContext((serviceProvider, options) => { + // Uncomment this code to use an in-memory database. This database is recreated each time the server starts. With the in-memory database, you don't need to make a migration when the data model is changed. + // Do not use this code in production environment to avoid data loss. + // We recommend that you refer to the following help topic before you use an in-memory database: https://docs.microsoft.com/en-us/ef/core/testing/in-memory + //options.UseInMemoryDatabase("InMemory"); + string connectionString = null; + if(Configuration.GetConnectionString("ConnectionString") != null) { + connectionString = Configuration.GetConnectionString("ConnectionString"); + } +#if EASYTEST + if(Configuration.GetConnectionString("EasyTestConnectionString") != null) { + connectionString = Configuration.GetConnectionString("EasyTestConnectionString"); + } +#endif + ArgumentNullException.ThrowIfNull(connectionString); + options.UseSqlServer(connectionString); + options.UseChangeTrackingProxies(); + options.UseObjectSpaceLinkProxies(); + options.UseLazyLoadingProxies(); + }) + .AddNonPersistent(); + }); + } + + // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. + public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { + if(env.IsDevelopment()) { + app.UseDeveloperExceptionPage(); + } + else { + app.UseExceptionHandler("/Error"); + // The default HSTS value is 30 days. To change this for production scenarios, see: https://aka.ms/aspnetcore-hsts. + app.UseHsts(); + } + app.UseHttpsRedirection(); + app.UseRequestLocalization(); + app.UseStaticFiles(); + app.UseRouting(); + app.UseXaf(); + app.UseEndpoints(endpoints => { + endpoints.MapXafEndpoints(); + endpoints.MapBlazorHub(); + endpoints.MapFallbackToPage("/_Host"); + endpoints.MapControllers(); + }); + } +} diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/_Imports.razor b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/_Imports.razor new file mode 100644 index 0000000..67b7f92 --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/_Imports.razor @@ -0,0 +1,11 @@ +@using System.Net.Http +@using Microsoft.AspNetCore.Authorization +@using Microsoft.AspNetCore.Components.Authorization +@using Microsoft.AspNetCore.Components.Forms +@using Microsoft.AspNetCore.Components.Routing +@using Microsoft.AspNetCore.Components.Web +@using Microsoft.AspNetCore.Components.Web.Virtualization +@using Microsoft.JSInterop +@using DevExpress.Blazor +@using DevExpress.ExpressApp.Blazor.Components +@using NonPersistentFilteringEF.Blazor.Server diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/appsettings.Development.json b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/appsettings.Development.json new file mode 100644 index 0000000..437008f --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/appsettings.Development.json @@ -0,0 +1,16 @@ +{ + "DetailedErrors": true, + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information", + "DevExpress.ExpressApp": "Information" + } + }, + "DevExpress": { + "ExpressApp": { + "EnableDiagnosticActions": false + } + } +} \ No newline at end of file diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/appsettings.json b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/appsettings.json new file mode 100644 index 0000000..d6f0358 --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/appsettings.json @@ -0,0 +1,52 @@ +{ + "ConnectionStrings": { + "ConnectionString": "Integrated Security=SSPI;Pooling=false;MultipleActiveResultSets=true;Data Source=(localdb)\\mssqllocaldb;Initial Catalog=NonPersistentFilteringEF", + "EasyTestConnectionString": "Integrated Security=SSPI;Pooling=false;MultipleActiveResultSets=true;Data Source=(localdb)\\mssqllocaldb;Initial Catalog=NonPersistentFilteringEFEasyTest" + }, + "Logging": { + "LogLevel": { + "Default": "Information", + "Microsoft": "Warning", + "Microsoft.Hosting.Lifetime": "Information", + "DevExpress.ExpressApp": "Information" + } + }, + "AllowedHosts": "*", + "DevExpress": { + "ExpressApp": { + "Languages": "en-US;", + "ShowLanguageSwitcher": false, + "ThemeSwitcher": { + "DefaultItemName": "Office White", + "ShowSizeModeSwitcher": true, + "Groups": [ + { + "Caption": "DevExpress Themes", + "Items": [ + { + "Caption": "Blazing Berry", + "Url": "_content/DevExpress.Blazor.Themes/blazing-berry.bs5.min.css", + "Color": "#5c2d91" + }, + { + "Caption": "Blazing Dark", + "Url": "_content/DevExpress.Blazor.Themes/blazing-dark.bs5.min.css", + "Color": "#46444a" + }, + { + "Caption": "Office White", + "Url": "_content/DevExpress.Blazor.Themes/office-white.bs5.min.css", + "Color": "#fe7109" + }, + { + "Caption": "Purple", + "Url": "_content/DevExpress.Blazor.Themes/purple.bs5.min.css", + "Color": "#7989ff" + } + ] + } + ] + } + } + } +} \ No newline at end of file diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/wwwroot/css/site.css b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/wwwroot/css/site.css new file mode 100644 index 0000000..2e1c9a0 --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/wwwroot/css/site.css @@ -0,0 +1,31 @@ +html, body { + height: 100%; +} + +app { + display: block; + height: 100%; +} + +.header-logo { + flex-shrink: 0; + background-color: currentColor; + -webkit-mask: url('../images/Logo.svg'); + mask: url('../images/Logo.svg'); + -webkit-mask-position: center; + mask-position: center; + -webkit-mask-repeat: no-repeat; + mask-repeat: no-repeat; + width: 180px; + height: 24px; +} + +#blazor-error-ui { + background: inherit; + bottom: 0; + display: none; + position: fixed; + width: 100%; + height: 100%; + z-index: 100001; +} \ No newline at end of file diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/wwwroot/favicon.ico b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/wwwroot/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..91de870e5df62f3dc001d46fbbb59522b790e006 GIT binary patch literal 31444 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 literal 0 HcmV?d00001 diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/wwwroot/images/Logo.svg b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/wwwroot/images/Logo.svg new file mode 100644 index 0000000..d0aa175 --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/wwwroot/images/Logo.svg @@ -0,0 +1,43 @@ + + + + + + diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/wwwroot/images/SplashScreen.svg b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/wwwroot/images/SplashScreen.svg new file mode 100644 index 0000000..d68f0e7 --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Blazor.Server/wwwroot/images/SplashScreen.svg @@ -0,0 +1,13 @@ + + + + + + + diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/BusinessObjects/Article.cs b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/BusinessObjects/Article.cs new file mode 100644 index 0000000..72ad8af --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/BusinessObjects/Article.cs @@ -0,0 +1,88 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using DevExpress.ExpressApp; +using DevExpress.ExpressApp.DC; +using DevExpress.Persistent.Base; + +namespace NonPersistentObjectsDemo.Module.BusinessObjects { + + [DefaultClassOptions] + [DefaultProperty(nameof(Article.Title))] + [DevExpress.ExpressApp.ConditionalAppearance.Appearance("", Enabled = false, TargetItems = "*")] + [DevExpress.ExpressApp.DC.DomainComponent] + public class Article : NonPersistentObjectBase { + internal Article() { } + private int _ID; + [Browsable(false)] + [DevExpress.ExpressApp.Data.Key] + public int ID { + get { return _ID; } + set { _ID = value; } + } + private Contact _Author; + public Contact Author { + get { return _Author; } + set { SetPropertyValue(nameof(Author), ref _Author, value); } + } + private string _Title; + public string Title { + get { return _Title; } + set { SetPropertyValue(nameof(Title), ref _Title, value); } + } + private string _Content; + [FieldSize(-1)] + public string Content { + get { return _Content; } + set { SetPropertyValue(nameof(Content), ref _Content, value); } + } + } + + class ArticleAdapter { + private NonPersistentObjectSpace objectSpace; + private static List
articles; + + public ArticleAdapter(NonPersistentObjectSpace npos) { + this.objectSpace = npos; + objectSpace.ObjectsGetting += ObjectSpace_ObjectsGetting; + } + private void ObjectSpace_ObjectsGetting(object sender, ObjectsGettingEventArgs e) { + if(e.ObjectType == typeof(Article)) { + var collection = new DynamicCollection(objectSpace, e.ObjectType, e.Criteria, e.Sorting, e.InTransaction); + collection.FetchObjects += DynamicCollection_FetchObjects; + e.Objects = collection; + } + } + private void DynamicCollection_FetchObjects(object sender, FetchObjectsEventArgs e) { + if(e.ObjectType == typeof(Article)) { + e.Objects = articles; + e.ShapeData = true; + } + } + + static ArticleAdapter() { + articles = new List
(); + CreateDemoData(); + } + + #region DemoData + static void CreateDemoData() { + // var gen = new GenHelper(); + var contacts = ContactAdapter.GetAllContacts(); + + for (int i = 0; i < 70; i++) { + var cntIndex = new Random(i).Next(0, contacts.Count); + articles.Add(new Article() { + ID = i, + Title = "Title" + i, + Content = "Content" + i, + Author = contacts[cntIndex] + }) ; + } + } + #endregion + } +} diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/BusinessObjects/Contact.cs b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/BusinessObjects/Contact.cs new file mode 100644 index 0000000..87ca349 --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/BusinessObjects/Contact.cs @@ -0,0 +1,124 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using DevExpress.Data.Filtering; +using DevExpress.ExpressApp; +using DevExpress.Persistent.Base; +using DevExpress.Xpo; + +namespace NonPersistentObjectsDemo.Module.BusinessObjects { + + [DefaultClassOptions] + [DefaultProperty(nameof(Contact.FullName))] + [DevExpress.ExpressApp.ConditionalAppearance.Appearance("", Enabled = false, TargetItems = "*")] + [DevExpress.ExpressApp.DC.DomainComponent] + public class Contact : NonPersistentObjectBase { + internal Contact() { } + private string _UserName; + [DevExpress.ExpressApp.Data.Key] + public string UserName { + get { return _UserName; } + set { _UserName = value; } + } + private string _FullName; + public string FullName { + get { return _FullName; } + set { SetPropertyValue(nameof(FullName), ref _FullName, value); } + } + private int _Age; + public int Age { + get { return _Age; } + set { SetPropertyValue(nameof(Age), ref _Age, value); } + } + private float _Rating; + public float Rating { + get { return _Rating; } + set { SetPropertyValue(nameof(Rating), ref _Rating, value); } + } + } + + class ContactAdapter { + private NonPersistentObjectSpace objectSpace; + + public ContactAdapter(NonPersistentObjectSpace npos) { + this.objectSpace = npos; + objectSpace.ObjectsGetting += ObjectSpace_ObjectsGetting; + } + private void ObjectSpace_ObjectsGetting(object sender, ObjectsGettingEventArgs e) { + if(e.ObjectType == typeof(Contact)) { + var collection = new DynamicCollection(objectSpace, e.ObjectType, e.Criteria, e.Sorting, e.InTransaction); + collection.FetchObjects += DynamicCollection_FetchObjects; + e.Objects = collection; + } + } + private void DynamicCollection_FetchObjects(object sender, FetchObjectsEventArgs e) { + if(e.ObjectType == typeof(Contact)) { + var rows = contactsStorage.GetContactRows(e.Criteria, e.Sorting); + e.Objects = rows.Select(row => GetContact(row)); + } + } + private static Contact GetContact(DataRow row) { + Contact obj; + var key = row["UserName"] as string; + if(!contactsCache.TryGetValue(key, out obj)) { + obj = new Contact() { + UserName = key, + FullName = (string)row["FullName"], + Age = (int)row["Age"], + Rating = (float)row["Rating"] + }; + contactsCache.Add(key, obj); + } + return obj; + } + + private static ContactStorage contactsStorage; + private static Dictionary contactsCache; + internal static IList GetAllContacts() { + return contactsStorage.GetContactRows(null, null).Select(row => GetContact(row)).ToList(); + } + static ContactAdapter() { + contactsStorage = new ContactStorage(); + contactsStorage.LoadDemoData(); + contactsCache = new Dictionary(); + } + } + + class ContactStorage { + private DataSet dataSet; + public IList GetContactRows(CriteriaOperator criteria, IList sorting) { + var filter = CriteriaToWhereClauseHelper.GetDataSetWhere(criteria); + string sort = null; + if(sorting!= null&& sorting.Count == 1 && sorting[0].Property is OperandProperty) { + sort = string.Format("{0} {1}", sorting[0].PropertyName, sorting[0].Direction == DevExpress.Xpo.DB.SortingDirection.Ascending ? "ASC" : "DESC"); + } + return dataSet.Tables["Contacts"].Select(filter, sort); + } + public ContactStorage() { + dataSet = new DataSet(); + { + var dt = dataSet.Tables.Add("Contacts"); + var colID = dt.Columns.Add("UserName", typeof(string)); + dt.Columns.Add("FullName", typeof(string)); + dt.Columns.Add("Age", typeof(int)); + dt.Columns.Add("Rating", typeof(float)); + dt.PrimaryKey = new DataColumn[] { colID }; + } + LoadDemoData(); + } + public void LoadDemoData() { + var dt = dataSet.Tables["Contacts"]; + for(int i = 0; i < 50; i++) { + var id = i; + var fullName = "FullName"+i; + var age = 16 + i; + var rating = new Random(i).Next(10,90); + dt.LoadDataRow(new object[] { id, fullName, age, rating }, LoadOption.OverwriteChanges); + } + } + } +} diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/BusinessObjects/NonPersistentFilteringEFDbContext.cs b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/BusinessObjects/NonPersistentFilteringEFDbContext.cs new file mode 100644 index 0000000..9fa6ab5 --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/BusinessObjects/NonPersistentFilteringEFDbContext.cs @@ -0,0 +1,43 @@ +using DevExpress.ExpressApp.EFCore.Updating; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Design; +using DevExpress.Persistent.BaseImpl.EF.PermissionPolicy; +using DevExpress.Persistent.BaseImpl.EF; +using DevExpress.ExpressApp.Design; +using DevExpress.ExpressApp.EFCore.DesignTime; + +namespace NonPersistentFilteringEF.Module.BusinessObjects; + +// This code allows our Model Editor to get relevant EF Core metadata at design time. +// For details, please refer to https://supportcenter.devexpress.com/ticket/details/t933891. +public class NonPersistentFilteringEFContextInitializer : DbContextTypesInfoInitializerBase { + protected override DbContext CreateDbContext() { + var optionsBuilder = new DbContextOptionsBuilder() + .UseSqlServer(";") + .UseChangeTrackingProxies() + .UseObjectSpaceLinkProxies(); + return new NonPersistentFilteringEFEFCoreDbContext(optionsBuilder.Options); + } +} +//This factory creates DbContext for design-time services. For example, it is required for database migration. +public class NonPersistentFilteringEFDesignTimeDbContextFactory : IDesignTimeDbContextFactory { + public NonPersistentFilteringEFEFCoreDbContext CreateDbContext(string[] args) { + throw new InvalidOperationException("Make sure that the database connection string and connection provider are correct. After that, uncomment the code below and remove this exception."); + //var optionsBuilder = new DbContextOptionsBuilder(); + //optionsBuilder.UseSqlServer("Integrated Security=SSPI;Pooling=false;Data Source=(localdb)\\mssqllocaldb;Initial Catalog=NonPersistentFilteringEF"); + //optionsBuilder.UseChangeTrackingProxies(); + //optionsBuilder.UseObjectSpaceLinkProxies(); + //return new NonPersistentFilteringEFEFCoreDbContext(optionsBuilder.Options); + } +} +[TypesInfoInitializer(typeof(NonPersistentFilteringEFContextInitializer))] +public class NonPersistentFilteringEFEFCoreDbContext : DbContext { + public NonPersistentFilteringEFEFCoreDbContext(DbContextOptions options) : base(options) { + } + //public DbSet ModulesInfo { get; set; } + + protected override void OnModelCreating(ModelBuilder modelBuilder) { + base.OnModelCreating(modelBuilder); + modelBuilder.HasChangeTrackingStrategy(ChangeTrackingStrategy.ChangingAndChangedNotificationsWithOriginalValues); + } +} diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/BusinessObjects/NonPersistentObjectBase.cs b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/BusinessObjects/NonPersistentObjectBase.cs new file mode 100644 index 0000000..b712117 --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/BusinessObjects/NonPersistentObjectBase.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using DevExpress.ExpressApp; +using DevExpress.ExpressApp.DC; +using DevExpress.Persistent.Base; + +namespace NonPersistentObjectsDemo.Module.BusinessObjects { + + public abstract class BoundNonPersistentObjectBase : NonPersistentObjectBase, IObjectSpaceLink { + private IObjectSpace _ObjectSpace; + protected IObjectSpace ObjectSpace { get { return _ObjectSpace; } } + IObjectSpace IObjectSpaceLink.ObjectSpace { + get { return _ObjectSpace; } + set { + if(_ObjectSpace != value) { + OnObjectSpaceChanging(); + _ObjectSpace = value; + OnObjectSpaceChanged(); + } + } + } + protected virtual void OnObjectSpaceChanging() { } + protected virtual void OnObjectSpaceChanged() { } + protected IObjectSpace FindPersistentObjectSpace(Type type) { + return ((NonPersistentObjectSpace)ObjectSpace).AdditionalObjectSpaces.FirstOrDefault(os => os.IsKnownType(type)); + } + } + + public abstract class NonPersistentObjectBase : INotifyPropertyChanged { + public event PropertyChangedEventHandler PropertyChanged; + protected void OnPropertyChanged(string propertyName) { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); + } + protected void SetPropertyValue(string name, ref T field, T value) { + if(!Equals(field, value)) { + field = value; + OnPropertyChanged(name); + } + } + [Browsable(false)] + public object This { get { return this; } } + } +} diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/BusinessObjects/ReadMe.txt b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/BusinessObjects/ReadMe.txt new file mode 100644 index 0000000..12268e9 --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/BusinessObjects/ReadMe.txt @@ -0,0 +1,29 @@ +Folder Description + +The "BusinessObjects" project folder is intended for storing code of your data model. +In XAF, a business object can be implemented as an ORM-based persistent class +or a non-persistent POCO. + + +Relevant Documentation + +Business Model Design +https://docs.devexpress.com/eXpressAppFramework/113461 + +Use the Entity Framework Core Data Model +https://docs.devexpress.com/eXpressAppFramework/402972 + +Non-Persistent Objects +https://docs.devexpress.com/eXpressAppFramework/116516 + +Data Types Supported by built-in Editors +https://docs.devexpress.com/eXpressAppFramework/113014 + +Implement Custom Business Classes and Reference Properties (EF Core) +https://docs.devexpress.com/eXpressAppFramework/402978 + +Ways to Implement Business Logic +https://docs.devexpress.com/eXpressAppFramework/113710 + +Debugging, Unit and Functional Testing +https://docs.devexpress.com/eXpressAppFramework/112572 diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/Controllers/FindArticlesController.cs b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/Controllers/FindArticlesController.cs new file mode 100644 index 0000000..7d75671 --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/Controllers/FindArticlesController.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using DevExpress.Data.Filtering; +using DevExpress.ExpressApp; +using DevExpress.ExpressApp.Actions; +using DevExpress.ExpressApp.ConditionalAppearance; +using DevExpress.ExpressApp.DC; +using DevExpress.Persistent.Base; +using NonPersistentObjectsDemo.Module.BusinessObjects; + +namespace NonPersistentObjectsDemo.Module.Controllers { + + public class FindArticlesController : ViewController { + private PopupWindowShowAction action; + public FindArticlesController() { + action = new PopupWindowShowAction(this, "FindArticles", PredefinedCategory.View); + action.CustomizePopupWindowParams += Action_CustomizePopupWindowParams; + action.Execute += Action_Execute; + } + private void Action_CustomizePopupWindowParams(object sender, CustomizePopupWindowParamsEventArgs e) { + var objectSpace = Application.CreateObjectSpace(typeof(FindArticlesDialog)); + var obj = new FindArticlesDialog(); + var detailView = Application.CreateDetailView(objectSpace, obj); + detailView.ViewEditMode = DevExpress.ExpressApp.Editors.ViewEditMode.Edit; + e.View = detailView; + } + private void Action_Execute(object sender, PopupWindowShowActionExecuteEventArgs e) { + } + } + + [DomainComponent] + public class FindArticlesDialog : BoundNonPersistentObjectBase { + private Contact _Author; + [ImmediatePostData] + public Contact Author { + get { return _Author; } + set { SetPropertyValue(nameof(Author), ref _Author, value); } + } + private float _AuthorMinRating; + [Appearance("", Enabled = false, Criteria = "Author is not null")] + public float AuthorMinRating { + get { return _AuthorMinRating; } + set { SetPropertyValue(nameof(AuthorMinRating), ref _AuthorMinRating, value); } + } + private BindingList
_Articles; + public BindingList
Articles { + get { + if(_Articles == null) { + _Articles = new BindingList
(); + } + return _Articles; + } + } + private void UpdateArticles() { + if(_Articles != null) { + var filter = GetCriteria(); + _Articles.RaiseListChangedEvents = false; + _Articles.Clear(); + foreach(var obj in ObjectSpace.GetObjects
(filter)) { + _Articles.Add(obj); + } + _Articles.RaiseListChangedEvents = true; + _Articles.ResetBindings(); + OnPropertyChanged(nameof(Articles)); + } + } + private CriteriaOperator GetCriteria() { + if(Author != null) { + return new BinaryOperator("Author.UserName", Author.UserName); + } + else { + return CriteriaOperator.Parse("Author.Rating >= ?", AuthorMinRating); + } + } + [Action(PredefinedCategory.PopupActions)] + public void Find() { + UpdateArticles(); + } + } +} diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/Controllers/ReadMe.txt b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/Controllers/ReadMe.txt new file mode 100644 index 0000000..9389414 --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/Controllers/ReadMe.txt @@ -0,0 +1,25 @@ +Folder Description + +The "Controllers" project folder is intended for storing platform-agnostic Controller classes +that can change the default XAF application flow and add new features. + + +Relevant Documentation + +Controllers and Actions +https://docs.devexpress.com/eXpressAppFramework/112623 + +Implement Custom Controllers +https://docs.devexpress.com/eXpressAppFramework/112621 + +Define the Scope of Controllers and Actions +https://docs.devexpress.com/eXpressAppFramework/113103 + +Ways to Show a View +https://docs.devexpress.com/eXpressAppFramework/112803 + +Ways to Implement Business Logic +https://docs.devexpress.com/eXpressAppFramework/113710 + +Debugging, Unit and Functional Testing +https://docs.devexpress.com/eXpressAppFramework/112572 diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/DatabaseUpdate/ReadMe.txt b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/DatabaseUpdate/ReadMe.txt new file mode 100644 index 0000000..fc20baa --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/DatabaseUpdate/ReadMe.txt @@ -0,0 +1,23 @@ +Folder Description + +The "DatabaseUpdate" project folder is intended for storing code that supplies +initial data (default User objects, etc) and handles a database update when the +application version changes. + + +Relevant Documentation + +Supply Initial Data (EF Core) +https://docs.devexpress.com/eXpressAppFramework/402985 + +ModuleUpdater Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Updating.ModuleUpdater + +Application Update +https://docs.devexpress.com/eXpressAppFramework/113239 + +Migrations Overview (EF Core) +https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations + +Debugging, Unit and Functional Testing +https://docs.devexpress.com/eXpressAppFramework/112572 diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/DatabaseUpdate/Updater.cs b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/DatabaseUpdate/Updater.cs new file mode 100644 index 0000000..8fd9c97 --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/DatabaseUpdate/Updater.cs @@ -0,0 +1,29 @@ +using DevExpress.ExpressApp; +using DevExpress.Data.Filtering; +using DevExpress.Persistent.Base; +using DevExpress.ExpressApp.Updating; +using DevExpress.ExpressApp.EF; +using DevExpress.Persistent.BaseImpl.EF; + +namespace NonPersistentFilteringEF.Module.DatabaseUpdate; + +// For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Updating.ModuleUpdater +public class Updater : ModuleUpdater { + public Updater(IObjectSpace objectSpace, Version currentDBVersion) : + base(objectSpace, currentDBVersion) { + } + public override void UpdateDatabaseAfterUpdateSchema() { + base.UpdateDatabaseAfterUpdateSchema(); + //string name = "MyName"; + //EntityObject1 theObject = ObjectSpace.FirstOrDefault(u => u.Name == name); + //if(theObject == null) { + // theObject = ObjectSpace.CreateObject(); + // theObject.Name = name; + //} + + //ObjectSpace.CommitChanges(); //Uncomment this line to persist created object(s). + } + public override void UpdateDatabaseBeforeUpdateSchema() { + base.UpdateDatabaseBeforeUpdateSchema(); + } +} diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/Images/ReadMe.txt b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/Images/ReadMe.txt new file mode 100644 index 0000000..230befc --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/Images/ReadMe.txt @@ -0,0 +1,12 @@ +Folder Description + +The "Images" project folder is intended for storing custom image files. + + +Relevant Documentation + +Add and Override Images +https://docs.devexpress.com/eXpressAppFramework/112792 + +Assign a Custom Image +https://docs.devexpress.com/eXpressAppFramework/112744 diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/Model.DesignedDiffs.xafml b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/Model.DesignedDiffs.xafml new file mode 100644 index 0000000..b1c8695 --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/Model.DesignedDiffs.xafml @@ -0,0 +1,5 @@ + + + + + diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/Module.cs b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/Module.cs new file mode 100644 index 0000000..5723d48 --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/Module.cs @@ -0,0 +1,44 @@ +using System.ComponentModel; +using DevExpress.ExpressApp; +using DevExpress.ExpressApp.DC; +using DevExpress.Persistent.Base; +using DevExpress.ExpressApp.Model; +using DevExpress.ExpressApp.Actions; +using DevExpress.ExpressApp.Editors; +using DevExpress.ExpressApp.Updating; +using DevExpress.ExpressApp.Model.Core; +using DevExpress.ExpressApp.Model.DomainLogics; +using DevExpress.ExpressApp.Model.NodeGenerators; +using NonPersistentObjectsDemo.Module.BusinessObjects; + +namespace NonPersistentFilteringEF.Module; + +// For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase. +public sealed class NonPersistentFilteringEFModule : ModuleBase { + public NonPersistentFilteringEFModule() { + // + // NonPersistentFilteringEFModule + // + RequiredModuleTypes.Add(typeof(DevExpress.ExpressApp.SystemModule.SystemModule)); + RequiredModuleTypes.Add(typeof(DevExpress.ExpressApp.Objects.BusinessClassLibraryCustomizationModule)); + } + public override IEnumerable GetModuleUpdaters(IObjectSpace objectSpace, Version versionFromDB) { + ModuleUpdater updater = new DatabaseUpdate.Updater(objectSpace, versionFromDB); + return new ModuleUpdater[] { updater }; + } + public override void Setup(XafApplication application) { + base.Setup(application); + // Manage various aspects of the application UI and behavior at the module level. + application.SetupComplete += Application_SetupComplete; + } + private void Application_SetupComplete(object sender, EventArgs e) { + Application.ObjectSpaceCreated += Application_ObjectSpaceCreated; + } + private void Application_ObjectSpaceCreated(object sender, ObjectSpaceCreatedEventArgs e) { + var npos = e.ObjectSpace as NonPersistentObjectSpace; + if (npos != null) { + new ArticleAdapter(npos); + new ContactAdapter(npos); + } + } +} diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/NonPersistentFilteringEF.Module.csproj b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/NonPersistentFilteringEF.Module.csproj new file mode 100644 index 0000000..3f8027c --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/NonPersistentFilteringEF.Module.csproj @@ -0,0 +1,27 @@ + + + net6.0 + false + false + 1.0.* + 1.0.0.0 + Debug;Release;EasyTest + enable + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/ReadMe.txt b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/ReadMe.txt new file mode 100644 index 0000000..087d288 --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/ReadMe.txt @@ -0,0 +1,32 @@ +Project Description + +This project implements a platform-agnostic Module. UI-independent application +elements can be implemented here (Business Objects, Controllers, etc.). The root project +folder contains the Module.cs(vb) file with the class that inherits ModuleBase. +This class allows you to view and customize Module components: +referenced modules, Controllers and business classes. Additionally, the root folder +contains Application Model difference files (XAFML files) that keep application +settings specific for the current Module. Difference files can be customized in code +or in the Model Editor. + + +Relevant Documentation + +Application Solution Components +https://docs.devexpress.com/eXpressAppFramework/112569 + +XAF Community Extensions +https://www.devexpress.com/products/net/application_framework/#extensions + +Debugging, Unit and Functional Testing +https://docs.devexpress.com/eXpressAppFramework/112572 + +ModuleBase Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase + + +Application Model +https://docs.devexpress.com/eXpressAppFramework/112579 + +Model Editor +https://docs.devexpress.com/eXpressAppFramework/112582 \ No newline at end of file diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/Welcome.html b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/Welcome.html new file mode 100644 index 0000000..70af898 --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/Welcome.html @@ -0,0 +1,191 @@ + + + + + Your XAF application + + + + +
+ + + + + +
+
+

The XAF Solution Wizard has successfully generated the solution according to your settings.

+
    +
  • The NonPersistentFilteringEF.Module project keeps your platform-agnostic code. + Its Business Objects folder contains the autogenerated data model filled with entities required by the chosen set of modules. Add your custom entities to this model and XAF will automatically create a UI to create, read, update and delete these entities.
  • +
  • The NonPersistentFilteringEF.Win project is a startup project for the desktop application.
  • +
  • To specify the database used by your application, modify the ConnectionString attribute in the configuration file located in the startup project.
  • +
+
+
+ + + + + +
+
+ + + diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/App.config b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/App.config new file mode 100644 index 0000000..9fc8ea0 --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/App.config @@ -0,0 +1,36 @@ + + + + +
+ + + + + + System + + + + + + + + + + + + + + + + + diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/Controllers/ReadMe.txt b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/Controllers/ReadMe.txt new file mode 100644 index 0000000..a2c3f7a --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/Controllers/ReadMe.txt @@ -0,0 +1,25 @@ +Folder Description + +The "Controllers" project folder is intended for storing WinForms-specific Controller classes +that can change the default XAF application flow and add new features. + + +Relevant Documentation + +Controllers and Actions +https://docs.devexpress.com/eXpressAppFramework/112623 + +Implement Custom Controllers +https://docs.devexpress.com/eXpressAppFramework/112621 + +Define the Scope of Controllers and Actions +https://docs.devexpress.com/eXpressAppFramework/113103 + +Ways to Show a View +https://docs.devexpress.com/eXpressAppFramework/112803 + +Ways to Implement Business Logic +https://docs.devexpress.com/eXpressAppFramework/113710 + +Debugging, Unit and Functional Testing +https://docs.devexpress.com/eXpressAppFramework/112572 diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/Editors/ReadMe.txt b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/Editors/ReadMe.txt new file mode 100644 index 0000000..00ff025 --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/Editors/ReadMe.txt @@ -0,0 +1,46 @@ +Folder Description + +This project folder is intended for storing custom WinForms List Editors, +Property Editors and View Items. + + +Relevant Documentation + +Using a Custom Control that is not Integrated by Default +https://docs.devexpress.com/eXpressAppFramework/113610 + +Ways to Access UI Elements and Their Controls +https://docs.devexpress.com/eXpressAppFramework/120092 + +Views +https://docs.devexpress.com/eXpressAppFramework/112611 + +List Editors +https://docs.devexpress.com/eXpressAppFramework/113189 + +Implement Custom Property Editors +https://docs.devexpress.com/eXpressAppFramework/113097 + +View Items +https://docs.devexpress.com/eXpressAppFramework/112612 + +How to: Implement a Custom WinForms List Editor +https://docs.devexpress.com/eXpressAppFramework/112659 + +How to: Support a Context Menu for a Custom WinForms List Editor +https://docs.devexpress.com/eXpressAppFramework/112660 + +How to: Implement a Property Editor (in WinForms Applications) +https://docs.devexpress.com/eXpressAppFramework/112679 + +How to: Implement a Property Editor for Specific Data Management (in WinForms Applications) +https://docs.devexpress.com/eXpressAppFramework/113101 + +How to: Extend Built-in Property Editor's Functionality +https://docs.devexpress.com/eXpressAppFramework/113104 + +How to: Implement a View Item +https://docs.devexpress.com/eXpressAppFramework/112641 + +Debugging, Unit and Functional Testing +https://docs.devexpress.com/eXpressAppFramework/112572 diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/ExpressApp.ico b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/ExpressApp.ico new file mode 100644 index 0000000000000000000000000000000000000000..e6810fc4f94dccd83ec54db6e9ef51a4950f6638 GIT binary patch literal 113407 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 literal 0 HcmV?d00001 diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/Images/ExpressAppLogo.png b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/Images/ExpressAppLogo.png new file mode 100644 index 0000000000000000000000000000000000000000..3a6eaada75b3745cfe120bd6c4a9b1fd9e3058fc GIT binary patch literal 7486 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%0D@};7Gcq+eA2G? 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 IM6N<$g0{$L^Z)<= literal 0 HcmV?d00001 diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/Images/Logo.svg b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/Images/Logo.svg new file mode 100644 index 0000000..68d56ca --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/Images/Logo.svg @@ -0,0 +1,18 @@ + + + + + + diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/Images/ReadMe.txt b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/Images/ReadMe.txt new file mode 100644 index 0000000..230befc --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/Images/ReadMe.txt @@ -0,0 +1,12 @@ +Folder Description + +The "Images" project folder is intended for storing custom image files. + + +Relevant Documentation + +Add and Override Images +https://docs.devexpress.com/eXpressAppFramework/112792 + +Assign a Custom Image +https://docs.devexpress.com/eXpressAppFramework/112744 diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/Model.xafml b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/Model.xafml new file mode 100644 index 0000000..594847b --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/Model.xafml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/NonPersistentFilteringEF.Win.csproj b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/NonPersistentFilteringEF.Win.csproj new file mode 100644 index 0000000..321eba0 --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/NonPersistentFilteringEF.Win.csproj @@ -0,0 +1,43 @@ + + + WinExe + net6.0-windows + false + true + ExpressApp.ico + false + 1.0.* + 1.0.0.0 + Debug;Release;EasyTest + enable + + + + + + + + + + + Always + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/Program.cs b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/Program.cs new file mode 100644 index 0000000..f88ac9f --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/Program.cs @@ -0,0 +1,81 @@ +using System.Configuration; +using DevExpress.ExpressApp; +using DevExpress.ExpressApp.ApplicationBuilder; +using DevExpress.ExpressApp.Win.ApplicationBuilder; +using DevExpress.ExpressApp.Security; +using DevExpress.ExpressApp.Win; +using DevExpress.Persistent.Base; +using Microsoft.EntityFrameworkCore; +using DevExpress.ExpressApp.EFCore; +using DevExpress.XtraEditors; +using DevExpress.ExpressApp.Utils; +using DevExpress.ExpressApp.Win.Utils; +using System.Reflection; + +namespace NonPersistentFilteringEF.Win; + +static class Program { + private static bool ContainsArgument(string[] args, string argument) { + return args.Any(arg => arg.TrimStart('/').TrimStart('-').ToLower() == argument.ToLower()); + } + /// + /// The main entry point for the application. + /// + [STAThread] + public static int Main(string[] args) { + if(ContainsArgument(args, "help") || ContainsArgument(args, "h")) { + Console.WriteLine("Updates the database when its version does not match the application's version."); + Console.WriteLine(); + Console.WriteLine($" {Assembly.GetExecutingAssembly().GetName().Name}.exe --updateDatabase [--forceUpdate --silent]"); + Console.WriteLine(); + Console.WriteLine("--forceUpdate - Marks that the database must be updated whether its version matches the application's version or not."); + Console.WriteLine("--silent - Marks that database update proceeds automatically and does not require any interaction with the user."); + Console.WriteLine(); + Console.WriteLine($"Exit codes: 0 - {DBUpdaterStatus.UpdateCompleted}"); + Console.WriteLine($" 1 - {DBUpdaterStatus.UpdateError}"); + Console.WriteLine($" 2 - {DBUpdaterStatus.UpdateNotNeeded}"); + return 0; + } + DevExpress.ExpressApp.FrameworkSettings.DefaultSettingsCompatibilityMode = DevExpress.ExpressApp.FrameworkSettingsCompatibilityMode.Latest; +#if EASYTEST + DevExpress.ExpressApp.Win.EasyTest.EasyTestRemotingRegistration.Register(); +#endif + WindowsFormsSettings.LoadApplicationSettings(); + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + DevExpress.Utils.ToolTipController.DefaultController.ToolTipType = DevExpress.Utils.ToolTipType.SuperTip; + if(Tracing.GetFileLocationFromSettings() == DevExpress.Persistent.Base.FileLocation.CurrentUserApplicationDataFolder) { + Tracing.LocalUserAppDataPath = Application.LocalUserAppDataPath; + } + Tracing.Initialize(); + + string connectionString = null; + if(ConfigurationManager.ConnectionStrings["ConnectionString"] != null) { + connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString; + } +#if EASYTEST + if(ConfigurationManager.ConnectionStrings["EasyTestConnectionString"] != null) { + connectionString = ConfigurationManager.ConnectionStrings["EasyTestConnectionString"].ConnectionString; + } +#endif + ArgumentNullException.ThrowIfNull(connectionString); + var winApplication = ApplicationBuilder.BuildApplication(connectionString); + + if (ContainsArgument(args, "updateDatabase")) { + using var dbUpdater = new WinDBUpdater(() => winApplication); + return dbUpdater.Update( + forceUpdate: ContainsArgument(args, "forceUpdate"), + silent: ContainsArgument(args, "silent")); + } + + try { + winApplication.Setup(); + winApplication.Start(); + } + catch(Exception e) { + winApplication.StopSplash(); + winApplication.HandleException(e); + } + return 0; + } +} diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/ReadMe.txt b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/ReadMe.txt new file mode 100644 index 0000000..cebe462 --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/ReadMe.txt @@ -0,0 +1,33 @@ +Project Description + +This project implements a WinForms application. The root project folder +contains the WinApplication.cs file with the class that inherits WinApplication. +This class allows you to view and customize Module components: +referenced modules, Controllers and business classes. Additionally, the root folder +contains Application Model difference files (XAFML files) that keep application +settings specific for the current Module. Difference files can be customized in code +or in the Model Editor. + + +Relevant Documentation + +Application Solution Components +https://docs.devexpress.com/eXpressAppFramework/112569 + +XAF Community Extensions +https://www.devexpress.com/products/net/application_framework/#extensions + +Debugging, Unit and Functional Testing +https://docs.devexpress.com/eXpressAppFramework/112572 + +WinApplication Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Win.WinApplication + +XafApplication Class +https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.XafApplication + +Application Model +https://docs.devexpress.com/eXpressAppFramework/112579 + +Model Editor +https://docs.devexpress.com/eXpressAppFramework/112582 \ No newline at end of file diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/Startup.cs b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/Startup.cs new file mode 100644 index 0000000..8648168 --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/Startup.cs @@ -0,0 +1,47 @@ +using System.Configuration; +using DevExpress.ExpressApp; +using DevExpress.ExpressApp.ApplicationBuilder; +using DevExpress.ExpressApp.Win.ApplicationBuilder; +using DevExpress.ExpressApp.Security; +using DevExpress.ExpressApp.Win; +using DevExpress.Persistent.Base; +using Microsoft.EntityFrameworkCore; +using DevExpress.ExpressApp.EFCore; +using DevExpress.XtraEditors; +using DevExpress.ExpressApp.Design; + +namespace NonPersistentFilteringEF.Win; + +public class ApplicationBuilder : IDesignTimeApplicationFactory { + public static WinApplication BuildApplication(string connectionString) { + var builder = WinApplication.CreateBuilder(); + builder.UseApplication(); + builder.Modules + .Add() + .Add(); + builder.ObjectSpaceProviders + .AddEFCore().WithDbContext((application, options) => { + // Uncomment this code to use an in-memory database. This database is recreated each time the server starts. With the in-memory database, you don't need to make a migration when the data model is changed. + // Do not use this code in production environment to avoid data loss. + // We recommend that you refer to the following help topic before you use an in-memory database: https://docs.microsoft.com/en-us/ef/core/testing/in-memory + //options.UseInMemoryDatabase("InMemory"); + options.UseSqlServer(connectionString); + options.UseChangeTrackingProxies(); + options.UseObjectSpaceLinkProxies(); + }) + .AddNonPersistent(); + builder.AddBuildStep(application => { + application.ConnectionString = connectionString; +#if DEBUG + if(System.Diagnostics.Debugger.IsAttached && application.CheckCompatibilityType == CheckCompatibilityType.DatabaseSchema) { + application.DatabaseUpdateMode = DatabaseUpdateMode.UpdateDatabaseAlways; + } +#endif + }); + var winApplication = builder.Build(); + return winApplication; + } + + XafApplication IDesignTimeApplicationFactory.Create() + => BuildApplication(XafApplication.DesignTimeConnectionString); +} diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/WinApplication.cs b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/WinApplication.cs new file mode 100644 index 0000000..ee10625 --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/WinApplication.cs @@ -0,0 +1,54 @@ +using System.ComponentModel; +using DevExpress.ExpressApp; +using DevExpress.ExpressApp.ApplicationBuilder; +using DevExpress.ExpressApp.Win; +using DevExpress.ExpressApp.Updating; +using DevExpress.ExpressApp.Win.Utils; +using Microsoft.EntityFrameworkCore; +using DevExpress.ExpressApp.EFCore; +using NonPersistentFilteringEF.Module; +using NonPersistentFilteringEF.Module.BusinessObjects; +using System.Data.Common; + +namespace NonPersistentFilteringEF.Win; + +// For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.Win.WinApplication._members +public class NonPersistentFilteringEFWindowsFormsApplication : WinApplication { + public NonPersistentFilteringEFWindowsFormsApplication() { + SplashScreen = new DXSplashScreen(typeof(XafSplashScreen), new DefaultOverlayFormOptions()); + ApplicationName = "NonPersistentFilteringEF"; + CheckCompatibilityType = DevExpress.ExpressApp.CheckCompatibilityType.DatabaseSchema; + UseOldTemplates = false; + DatabaseVersionMismatch += NonPersistentFilteringEFWindowsFormsApplication_DatabaseVersionMismatch; + CustomizeLanguagesList += NonPersistentFilteringEFWindowsFormsApplication_CustomizeLanguagesList; + } + private void NonPersistentFilteringEFWindowsFormsApplication_CustomizeLanguagesList(object sender, CustomizeLanguagesListEventArgs e) { + string userLanguageName = System.Threading.Thread.CurrentThread.CurrentUICulture.Name; + if(userLanguageName != "en-US" && e.Languages.IndexOf(userLanguageName) == -1) { + e.Languages.Add(userLanguageName); + } + } + private void NonPersistentFilteringEFWindowsFormsApplication_DatabaseVersionMismatch(object sender, DevExpress.ExpressApp.DatabaseVersionMismatchEventArgs e) { +#if EASYTEST + e.Updater.Update(); + e.Handled = true; +#else + if(System.Diagnostics.Debugger.IsAttached) { + e.Updater.Update(); + e.Handled = true; + } + else { + string message = "The application cannot connect to the specified database, " + + "because the database doesn't exist, its version is older " + + "than that of the application or its schema does not match " + + "the ORM data model structure. To avoid this error, use one " + + "of the solutions from the https://www.devexpress.com/kb=T367835 KB Article."; + + if(e.CompatibilityError != null && e.CompatibilityError.Exception != null) { + message += "\r\n\r\nInner exception: " + e.CompatibilityError.Exception.Message; + } + throw new InvalidOperationException(message); + } +#endif + } +} diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/WinModule.cs b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/WinModule.cs new file mode 100644 index 0000000..6642717 --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/WinModule.cs @@ -0,0 +1,26 @@ +using System.ComponentModel; +using DevExpress.ExpressApp; +using DevExpress.ExpressApp.DC; +using DevExpress.ExpressApp.Model; +using DevExpress.ExpressApp.Editors; +using DevExpress.ExpressApp.Actions; +using DevExpress.ExpressApp.Updating; +using DevExpress.ExpressApp.Model.Core; +using DevExpress.ExpressApp.Model.DomainLogics; +using DevExpress.ExpressApp.Model.NodeGenerators; + +namespace NonPersistentFilteringEF.Win; + +[ToolboxItemFilter("Xaf.Platform.Win")] +// For more typical usage scenarios, be sure to check out https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.ModuleBase. +public sealed class NonPersistentFilteringEFWinModule : ModuleBase { + public NonPersistentFilteringEFWinModule() { + DevExpress.ExpressApp.Editors.FormattingProvider.UseMaskSettings = true; + } + public override IEnumerable GetModuleUpdaters(IObjectSpace objectSpace, Version versionFromDB) { + return ModuleUpdater.EmptyModuleUpdaters; + } + public override void Setup(XafApplication application) { + base.Setup(application); + } +} diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/XafSplashScreen.Designer.cs b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/XafSplashScreen.Designer.cs new file mode 100644 index 0000000..590fd2e --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/XafSplashScreen.Designer.cs @@ -0,0 +1,181 @@ +namespace NonPersistentFilteringEF.Win { + partial class XafSplashScreen + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(XafSplashScreen)); + this.progressBarControl = new DevExpress.XtraEditors.MarqueeProgressBarControl(); + this.labelCopyright = new DevExpress.XtraEditors.LabelControl(); + this.labelStatus = new DevExpress.XtraEditors.LabelControl(); + this.peImage = new DevExpress.XtraEditors.PictureEdit(); + this.peLogo = new DevExpress.XtraEditors.PictureEdit(); + this.pcApplicationName = new DevExpress.XtraEditors.PanelControl(); + this.labelSubtitle = new DevExpress.XtraEditors.LabelControl(); + this.labelApplicationName = new DevExpress.XtraEditors.LabelControl(); + ((System.ComponentModel.ISupportInitialize)(this.progressBarControl.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.peImage.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.peLogo.Properties)).BeginInit(); + ((System.ComponentModel.ISupportInitialize)(this.pcApplicationName)).BeginInit(); + this.pcApplicationName.SuspendLayout(); + this.SuspendLayout(); + // + // progressBarControl + // + this.progressBarControl.EditValue = 0; + this.progressBarControl.Location = new System.Drawing.Point(74, 271); + this.progressBarControl.Name = "progressBarControl"; + this.progressBarControl.Properties.Appearance.BorderColor = System.Drawing.Color.FromArgb(((int)(((byte)(195)))), ((int)(((byte)(194)))), ((int)(((byte)(194))))); + this.progressBarControl.Properties.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.Simple; + this.progressBarControl.Properties.EndColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(114)))), ((int)(((byte)(0))))); + this.progressBarControl.Properties.LookAndFeel.SkinName = "Visual Studio 2013 Blue"; + this.progressBarControl.Properties.LookAndFeel.Style = DevExpress.LookAndFeel.LookAndFeelStyle.UltraFlat; + this.progressBarControl.Properties.LookAndFeel.UseDefaultLookAndFeel = false; + this.progressBarControl.Properties.ProgressViewStyle = DevExpress.XtraEditors.Controls.ProgressViewStyle.Solid; + this.progressBarControl.Properties.StartColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(144)))), ((int)(((byte)(0))))); + this.progressBarControl.Size = new System.Drawing.Size(350, 16); + this.progressBarControl.TabIndex = 5; + // + // labelCopyright + // + this.labelCopyright.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; + this.labelCopyright.Location = new System.Drawing.Point(24, 324); + this.labelCopyright.Name = "labelCopyright"; + this.labelCopyright.Size = new System.Drawing.Size(47, 13); + this.labelCopyright.TabIndex = 6; + this.labelCopyright.Text = "Copyright"; + // + // labelStatus + // + this.labelStatus.Location = new System.Drawing.Point(75, 253); + this.labelStatus.Name = "labelStatus"; + this.labelStatus.Size = new System.Drawing.Size(50, 13); + this.labelStatus.TabIndex = 7; + this.labelStatus.Text = "Starting..."; + // + // peImage + // + this.peImage.EditValue = ((object)(resources.GetObject("peImage.EditValue"))); + this.peImage.Location = new System.Drawing.Point(12, 12); + this.peImage.Name = "peImage"; + this.peImage.Properties.AllowFocused = false; + this.peImage.Properties.Appearance.BackColor = System.Drawing.Color.Transparent; + this.peImage.Properties.Appearance.Options.UseBackColor = true; + this.peImage.Properties.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; + this.peImage.Properties.ShowMenu = false; + this.peImage.Size = new System.Drawing.Size(426, 180); + this.peImage.TabIndex = 9; + this.peImage.Visible = false; + // + // peLogo + // + this.peLogo.EditValue = ((object)(resources.GetObject("peLogo.EditValue"))); + this.peLogo.Location = new System.Drawing.Point(400, 328); + this.peLogo.Name = "peLogo"; + this.peLogo.Properties.AllowFocused = false; + this.peLogo.Properties.Appearance.BackColor = System.Drawing.Color.Transparent; + this.peLogo.Properties.Appearance.Options.UseBackColor = true; + this.peLogo.Properties.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; + this.peLogo.Properties.ShowMenu = false; + this.peLogo.Size = new System.Drawing.Size(70, 20); + this.peLogo.TabIndex = 8; + // + // pcApplicationName + // + this.pcApplicationName.Appearance.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(114)))), ((int)(((byte)(0))))); + this.pcApplicationName.Appearance.Options.UseBackColor = true; + this.pcApplicationName.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder; + this.pcApplicationName.Controls.Add(this.labelSubtitle); + this.pcApplicationName.Controls.Add(this.labelApplicationName); + this.pcApplicationName.Dock = System.Windows.Forms.DockStyle.Top; + this.pcApplicationName.Location = new System.Drawing.Point(1, 1); + this.pcApplicationName.LookAndFeel.UseDefaultLookAndFeel = false; + this.pcApplicationName.Name = "pcApplicationName"; + this.pcApplicationName.Size = new System.Drawing.Size(494, 220); + this.pcApplicationName.TabIndex = 10; + // + // labelSubtitle + // + this.labelSubtitle.Appearance.Font = new System.Drawing.Font("Segoe UI", 14.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); + this.labelSubtitle.Appearance.ForeColor = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(216)))), ((int)(((byte)(188))))); + this.labelSubtitle.Appearance.Options.UseFont = true; + this.labelSubtitle.Appearance.Options.UseForeColor = true; + this.labelSubtitle.Location = new System.Drawing.Point(222, 131); + this.labelSubtitle.Name = "labelSubtitle"; + this.labelSubtitle.Size = new System.Drawing.Size(64, 25); + this.labelSubtitle.TabIndex = 1; + this.labelSubtitle.Text = "Subtitle"; + // + // labelApplicationName + // + this.labelApplicationName.Appearance.Font = new System.Drawing.Font("Segoe UI", 26.25F); + this.labelApplicationName.Appearance.ForeColor = System.Drawing.SystemColors.Window; + this.labelApplicationName.Appearance.Options.UseFont = true; + this.labelApplicationName.Appearance.Options.UseForeColor = true; + this.labelApplicationName.Location = new System.Drawing.Point(123, 84); + this.labelApplicationName.Name = "labelApplicationName"; + this.labelApplicationName.Size = new System.Drawing.Size(278, 47); + this.labelApplicationName.TabIndex = 0; + this.labelApplicationName.Text = "Application Name"; + // + // XafSplashScreen + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.BackColor = System.Drawing.Color.White; + this.ClientSize = new System.Drawing.Size(496, 370); + this.Controls.Add(this.pcApplicationName); + this.Controls.Add(this.peImage); + this.Controls.Add(this.peLogo); + this.Controls.Add(this.labelStatus); + this.Controls.Add(this.labelCopyright); + this.Controls.Add(this.progressBarControl); + this.Name = "XafSplashScreen"; + this.Padding = new System.Windows.Forms.Padding(1); + this.Text = "Form1"; + ((System.ComponentModel.ISupportInitialize)(this.progressBarControl.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.peImage.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.peLogo.Properties)).EndInit(); + ((System.ComponentModel.ISupportInitialize)(this.pcApplicationName)).EndInit(); + this.pcApplicationName.ResumeLayout(false); + this.pcApplicationName.PerformLayout(); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private DevExpress.XtraEditors.MarqueeProgressBarControl progressBarControl; + private DevExpress.XtraEditors.LabelControl labelCopyright; + private DevExpress.XtraEditors.LabelControl labelStatus; + private DevExpress.XtraEditors.PictureEdit peLogo; + private DevExpress.XtraEditors.PictureEdit peImage; + private DevExpress.XtraEditors.PanelControl pcApplicationName; + private DevExpress.XtraEditors.LabelControl labelSubtitle; + private DevExpress.XtraEditors.LabelControl labelApplicationName; + } +} diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/XafSplashScreen.cs b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/XafSplashScreen.cs new file mode 100644 index 0000000..8312c65 --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/XafSplashScreen.cs @@ -0,0 +1,54 @@ +using System; +using System.Drawing; +using System.IO; +using System.Reflection; +using DevExpress.ExpressApp.Win.Utils; +using DevExpress.Skins; +using DevExpress.Utils.Drawing; +using DevExpress.Utils.Svg; +using DevExpress.XtraSplashScreen; + +namespace NonPersistentFilteringEF.Win { + public partial class XafSplashScreen : SplashScreen { + private void LoadBlankLogo() { + Assembly assembly = Assembly.GetExecutingAssembly(); + string blankLogoResourceName = assembly.GetName().Name + ".Images.Logo.svg"; + Stream svgStream = assembly.GetManifestResourceStream(blankLogoResourceName); + if(svgStream != null) { + svgStream.Position = 0; + peLogo.SvgImage = SvgImage.FromStream(svgStream); + } + } + protected override void DrawContent(GraphicsCache graphicsCache, Skin skin) { + Rectangle bounds = ClientRectangle; + bounds.Width--; bounds.Height--; + graphicsCache.Graphics.DrawRectangle(graphicsCache.GetPen(Color.FromArgb(255, 87, 87, 87), 1), bounds); + } + protected void UpdateLabelsPosition() { + labelApplicationName.CalcBestSize(); + int newLeft = (Width - labelApplicationName.Width) / 2; + labelApplicationName.Location = new Point(newLeft, labelApplicationName.Top); + labelSubtitle.CalcBestSize(); + newLeft = (Width - labelSubtitle.Width) / 2; + labelSubtitle.Location = new Point(newLeft, labelSubtitle.Top); + } + public XafSplashScreen() { + InitializeComponent(); + LoadBlankLogo(); + this.labelCopyright.Text = "Copyright © " + DateTime.Now.Year.ToString() + " Company Name" + System.Environment.NewLine + "All rights reserved."; + UpdateLabelsPosition(); + } + + #region Overrides + + public override void ProcessCommand(Enum cmd, object arg) { + base.ProcessCommand(cmd, arg); + if((UpdateSplashCommand)cmd == UpdateSplashCommand.Description) { + labelStatus.Text = (string)arg; + } + } + + #endregion + + } +} \ No newline at end of file diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/XafSplashScreen.resx b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/XafSplashScreen.resx new file mode 100644 index 0000000..18fc5b4 --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Win/XafSplashScreen.resx @@ -0,0 +1,638 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + + 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 + YII= + + + \ No newline at end of file diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.sln b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.sln new file mode 100644 index 0000000..74e88b2 --- /dev/null +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.sln @@ -0,0 +1,41 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.33424.131 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NonPersistentFilteringEF.Module", "NonPersistentFilteringEF.Module\NonPersistentFilteringEF.Module.csproj", "{CFD35739-63A1-4719-91BC-73DC68E37F0A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NonPersistentFilteringEF.Win", "NonPersistentFilteringEF.Win\NonPersistentFilteringEF.Win.csproj", "{840F30C1-8D4C-44CD-96BD-4149947B8AF8}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NonPersistentFilteringEF.Blazor.Server", "NonPersistentFilteringEF.Blazor.Server\NonPersistentFilteringEF.Blazor.Server.csproj", "{1EA5939B-0396-43BB-B9C8-4516F3EF00F9}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + EasyTest|Any CPU = EasyTest|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {CFD35739-63A1-4719-91BC-73DC68E37F0A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CFD35739-63A1-4719-91BC-73DC68E37F0A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CFD35739-63A1-4719-91BC-73DC68E37F0A}.EasyTest|Any CPU.ActiveCfg = EasyTest|Any CPU + {CFD35739-63A1-4719-91BC-73DC68E37F0A}.EasyTest|Any CPU.Build.0 = EasyTest|Any CPU + {CFD35739-63A1-4719-91BC-73DC68E37F0A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CFD35739-63A1-4719-91BC-73DC68E37F0A}.Release|Any CPU.Build.0 = Release|Any CPU + {840F30C1-8D4C-44CD-96BD-4149947B8AF8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {840F30C1-8D4C-44CD-96BD-4149947B8AF8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {840F30C1-8D4C-44CD-96BD-4149947B8AF8}.EasyTest|Any CPU.ActiveCfg = EasyTest|Any CPU + {840F30C1-8D4C-44CD-96BD-4149947B8AF8}.EasyTest|Any CPU.Build.0 = EasyTest|Any CPU + {840F30C1-8D4C-44CD-96BD-4149947B8AF8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {840F30C1-8D4C-44CD-96BD-4149947B8AF8}.Release|Any CPU.Build.0 = Release|Any CPU + {1EA5939B-0396-43BB-B9C8-4516F3EF00F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {1EA5939B-0396-43BB-B9C8-4516F3EF00F9}.Debug|Any CPU.Build.0 = Debug|Any CPU + {1EA5939B-0396-43BB-B9C8-4516F3EF00F9}.EasyTest|Any CPU.ActiveCfg = EasyTest|Any CPU + {1EA5939B-0396-43BB-B9C8-4516F3EF00F9}.EasyTest|Any CPU.Build.0 = EasyTest|Any CPU + {1EA5939B-0396-43BB-B9C8-4516F3EF00F9}.Release|Any CPU.ActiveCfg = Release|Any CPU + {1EA5939B-0396-43BB-B9C8-4516F3EF00F9}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal From 95e5eb82c0d1834721a315c9438918ba5fb01c42 Mon Sep 17 00:00:00 2001 From: andrey Date: Fri, 21 Apr 2023 17:26:52 +0400 Subject: [PATCH 30/40] update links --- readme.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/readme.md b/readme.md index 1d3051c..3c3451c 100644 --- a/readme.md +++ b/readme.md @@ -5,10 +5,10 @@ *Files to look at*: -* [Contact.cs](./CS/NonPersistentObjectsDemo.Module/BusinessObjects/Contact.cs) -* [Article.cs](./CS/NonPersistentObjectsDemo.Module/BusinessObjects/Article.cs) -* [NonPersistentObjectBase.cs](./CS/NonPersistentObjectsDemo.Module/BusinessObjects/NonPersistentObjectBase.cs) -* [Module.cs](./CS/NonPersistentObjectsDemo.Module/Module.cs) +* [Contact.cs](./CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/BusinessObjects/Contact.cs) +* [Article.cs](./CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/BusinessObjects/Article.cs ) +* [NonPersistentObjectBase.cs](./CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/BusinessObjects/NonPersistentObjectBase.cs ) +* [Module.cs](./CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/Module.cs ) # How to filter and sort Non-Persistent Objects From f76caf97d27d89db6fae7b65503aa1dd11f807dc Mon Sep 17 00:00:00 2001 From: AndreyKozhevnikov Date: Thu, 29 Jun 2023 16:53:22 +0400 Subject: [PATCH 31/40] Update NonPersistentFiltering.sln --- CS/XPO/NonPersistentFiltering/NonPersistentFiltering.sln | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.sln b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.sln index 0581285..a415fac 100644 --- a/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.sln +++ b/CS/XPO/NonPersistentFiltering/NonPersistentFiltering.sln @@ -3,12 +3,13 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.33424.131 MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NonPersistentFiltering.Blazor.Server", "NonPersistentFiltering.Blazor.Server\NonPersistentFiltering.Blazor.Server.csproj", "{787C7A8E-80C0-47F4-810B-1B41B4E3DA54}" +EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NonPersistentFiltering.Module", "NonPersistentFiltering.Module\NonPersistentFiltering.Module.csproj", "{683BB2A8-F56B-4F37-9DCF-DE906FCAD530}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NonPersistentFiltering.Win", "NonPersistentFiltering.Win\NonPersistentFiltering.Win.csproj", "{4035990A-11F0-4E24-99DA-9A61C0C5F8F9}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NonPersistentFiltering.Blazor.Server", "NonPersistentFiltering.Blazor.Server\NonPersistentFiltering.Blazor.Server.csproj", "{787C7A8E-80C0-47F4-810B-1B41B4E3DA54}" -EndProject + Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU From 36293c67cbadb8e5eb2fc1f821a16da1fe188631 Mon Sep 17 00:00:00 2001 From: AndreyKozhevnikov Date: Thu, 29 Jun 2023 16:53:40 +0400 Subject: [PATCH 32/40] Update NonPersistentFilteringEF.sln --- .../NonPersistentFilteringEF/NonPersistentFilteringEF.sln | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.sln b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.sln index 74e88b2..be12722 100644 --- a/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.sln +++ b/CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.sln @@ -3,12 +3,13 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.5.33424.131 MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NonPersistentFilteringEF.Blazor.Server", "NonPersistentFilteringEF.Blazor.Server\NonPersistentFilteringEF.Blazor.Server.csproj", "{1EA5939B-0396-43BB-B9C8-4516F3EF00F9}" +EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NonPersistentFilteringEF.Module", "NonPersistentFilteringEF.Module\NonPersistentFilteringEF.Module.csproj", "{CFD35739-63A1-4719-91BC-73DC68E37F0A}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NonPersistentFilteringEF.Win", "NonPersistentFilteringEF.Win\NonPersistentFilteringEF.Win.csproj", "{840F30C1-8D4C-44CD-96BD-4149947B8AF8}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "NonPersistentFilteringEF.Blazor.Server", "NonPersistentFilteringEF.Blazor.Server\NonPersistentFilteringEF.Blazor.Server.csproj", "{1EA5939B-0396-43BB-B9C8-4516F3EF00F9}" -EndProject + Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU From 134932f3a4507f42500a5f157873ded29dcf5fdd Mon Sep 17 00:00:00 2001 From: andrey Date: Wed, 8 Nov 2023 14:36:46 +0400 Subject: [PATCH 33/40] update readme --- readme.md | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/readme.md b/readme.md index 3c3451c..b8f65f5 100644 --- a/readme.md +++ b/readme.md @@ -3,21 +3,13 @@ [![](https://img.shields.io/badge/Open_in_DevExpress_Support_Center-FF7200?style=flat-square&logo=DevExpress&logoColor=white)](https://supportcenter.devexpress.com/ticket/details/T952649) [![](https://img.shields.io/badge/📖_How_to_use_DevExpress_Examples-e9f6fc?style=flat-square)](https://docs.devexpress.com/GeneralInformation/403183) -*Files to look at*: - -* [Contact.cs](./CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/BusinessObjects/Contact.cs) -* [Article.cs](./CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/BusinessObjects/Article.cs ) -* [NonPersistentObjectBase.cs](./CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/BusinessObjects/NonPersistentObjectBase.cs ) -* [Module.cs](./CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/Module.cs ) - # How to filter and sort Non-Persistent Objects -## Scenario When a [Non\-Persistent Object](https://docs.devexpress.com/eXpressAppFramework/116516/concepts/business-model-design/non-persistent-objects) collection contains many objects, it is often useful to filter it. However, the built-in filtering facilities are disabled for non-persistent collections by default. -## Solution +## Implementation Details To enable filtering and sorting for [Non\-Persistent Objects](https://docs.devexpress.com/eXpressAppFramework/116516/concepts/business-model-design/non-persistent-objects), use the built-in **DynamicCollection** class or a custom **DynamicCollectionBase** descendant. @@ -33,5 +25,18 @@ When **DynamicCollection** is used, the built-in [FullTextSearch Action](https:/ *FindArticlesController* in this example shows a custom search form with a lookup editor that allows filtering non-persistent objects in a lookup list view. -Filtering and sorting at the data source level is also supported in Reports. Use the [Criteria](https://docs.devexpress.com/eXpressAppFramework/DevExpress.Persistent.Base.ReportsV2.DataSourceBase.Criteria) and [Sorting](https://docs.devexpress.com/eXpressAppFramework/DevExpress.Persistent.Base.ReportsV2.DataSourceBase.Sorting) properties of [CollectionDataSource](https://docs.devexpress.com/eXpressAppFramework/DevExpress.Persistent.Base.ReportsV2.CollectionDataSource) to specify filter criteria and sorting parameters. +## Files to Review + +- [Contact.cs](./CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/BusinessObjects/Contact.cs) +- [Article.cs](./CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/BusinessObjects/Article.cs ) +- [NonPersistentObjectBase.cs](./CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/BusinessObjects/NonPersistentObjectBase.cs ) +- [Module.cs](./CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/Module.cs ) +- [FindArticlesController.cs](CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/Controllers/FindArticlesController.cs) + +## More Examples + +- [DevExpress-Examples/XAF_Non-Persistent-Objects-Editing-Demo: How to implement CRUD operations for Non-Persistent Objects stored remotely in eXpressApp Framework](https://github.com/DevExpress-Examples/XAF_Non-Persistent-Objects-Editing-Demo) +- [DevExpress-Examples/XAF_Non-Persistent-Objects-Nested-In-Persistent-Objects-Demo: .NET, Frameworks (XAF & XPO), eXpressApp Framework](https://github.com/DevExpress-Examples/XAF_Non-Persistent-Objects-Nested-In-Persistent-Objects-Demo) +- [DevExpress-Examples/XAF_Non-Persistent-Objects-Reloading-Demo: .NET, Frameworks (XAF & XPO), eXpressApp Framework](https://github.com/DevExpress-Examples/XAF_Non-Persistent-Objects-Reloading-Demo) +- [DevExpress-Examples/XAF_Non-Persistent-Objects-Filtering-Demo: .NET, Frameworks (XAF & XPO), eXpressApp Framework](https://github.com/DevExpress-Examples/XAF_Non-Persistent-Objects-Filtering-Demo) \ No newline at end of file From 2d4b887afa21f250c55b7ff7b9691999d6c1c353 Mon Sep 17 00:00:00 2001 From: DevExpressExampleBot Date: Wed, 8 Nov 2023 14:38:53 +0400 Subject: [PATCH 34/40] README auto update [skip ci] --- readme.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/readme.md b/readme.md index b8f65f5..b6f1565 100644 --- a/readme.md +++ b/readme.md @@ -1,5 +1,4 @@ -![](https://img.shields.io/endpoint?url=https://codecentral.devexpress.com/api/v1/VersionRange/255626959/22.2.5%2B) [![](https://img.shields.io/badge/Open_in_DevExpress_Support_Center-FF7200?style=flat-square&logo=DevExpress&logoColor=white)](https://supportcenter.devexpress.com/ticket/details/T952649) [![](https://img.shields.io/badge/📖_How_to_use_DevExpress_Examples-e9f6fc?style=flat-square)](https://docs.devexpress.com/GeneralInformation/403183) @@ -39,4 +38,4 @@ When **DynamicCollection** is used, the built-in [FullTextSearch Action](https:/ - [DevExpress-Examples/XAF_Non-Persistent-Objects-Editing-Demo: How to implement CRUD operations for Non-Persistent Objects stored remotely in eXpressApp Framework](https://github.com/DevExpress-Examples/XAF_Non-Persistent-Objects-Editing-Demo) - [DevExpress-Examples/XAF_Non-Persistent-Objects-Nested-In-Persistent-Objects-Demo: .NET, Frameworks (XAF & XPO), eXpressApp Framework](https://github.com/DevExpress-Examples/XAF_Non-Persistent-Objects-Nested-In-Persistent-Objects-Demo) - [DevExpress-Examples/XAF_Non-Persistent-Objects-Reloading-Demo: .NET, Frameworks (XAF & XPO), eXpressApp Framework](https://github.com/DevExpress-Examples/XAF_Non-Persistent-Objects-Reloading-Demo) -- [DevExpress-Examples/XAF_Non-Persistent-Objects-Filtering-Demo: .NET, Frameworks (XAF & XPO), eXpressApp Framework](https://github.com/DevExpress-Examples/XAF_Non-Persistent-Objects-Filtering-Demo) \ No newline at end of file +- [DevExpress-Examples/XAF_Non-Persistent-Objects-Filtering-Demo: .NET, Frameworks (XAF & XPO), eXpressApp Framework](https://github.com/DevExpress-Examples/XAF_Non-Persistent-Objects-Filtering-Demo) From 543830d230ed44b8b43a0d2c06a12dd5e881e8e9 Mon Sep 17 00:00:00 2001 From: AndreyKozhevnikov Date: Wed, 29 Nov 2023 16:34:42 +0400 Subject: [PATCH 35/40] Update readme.md --- readme.md | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/readme.md b/readme.md index b6f1565..a84f118 100644 --- a/readme.md +++ b/readme.md @@ -33,9 +33,16 @@ When **DynamicCollection** is used, the built-in [FullTextSearch Action](https:/ - [Module.cs](./CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/Module.cs ) - [FindArticlesController.cs](CS/EFCore/NonPersistentFilteringEF/NonPersistentFilteringEF.Module/Controllers/FindArticlesController.cs) +## Documentation + +- [Non-Persistent Objects](https://docs.devexpress.com/eXpressAppFramework/116516/business-model-design-orm/non-persistent-objects) + + ## More Examples -- [DevExpress-Examples/XAF_Non-Persistent-Objects-Editing-Demo: How to implement CRUD operations for Non-Persistent Objects stored remotely in eXpressApp Framework](https://github.com/DevExpress-Examples/XAF_Non-Persistent-Objects-Editing-Demo) -- [DevExpress-Examples/XAF_Non-Persistent-Objects-Nested-In-Persistent-Objects-Demo: .NET, Frameworks (XAF & XPO), eXpressApp Framework](https://github.com/DevExpress-Examples/XAF_Non-Persistent-Objects-Nested-In-Persistent-Objects-Demo) -- [DevExpress-Examples/XAF_Non-Persistent-Objects-Reloading-Demo: .NET, Frameworks (XAF & XPO), eXpressApp Framework](https://github.com/DevExpress-Examples/XAF_Non-Persistent-Objects-Reloading-Demo) -- [DevExpress-Examples/XAF_Non-Persistent-Objects-Filtering-Demo: .NET, Frameworks (XAF & XPO), eXpressApp Framework](https://github.com/DevExpress-Examples/XAF_Non-Persistent-Objects-Filtering-Demo) +- [How to implement CRUD operations for Non-Persistent Objects stored remotely in eXpressApp Framework](https://github.com/DevExpress-Examples/XAF_Non-Persistent-Objects-Editing-Demo) +- [How to edit Non-Persistent Objects nested in a Persistent Object](https://github.com/DevExpress-Examples/XAF_Non-Persistent-Objects-Nested-In-Persistent-Objects-Demo) +- [How to: Display a List of Non-Persistent Objects](https://github.com/DevExpress-Examples/XAF_how-to-display-a-list-of-non-persistent-objects-e980) +- [How to filter and sort Non-Persistent Objects](https://github.com/DevExpress-Examples/XAF_Non-Persistent-Objects-Filtering-Demo) +- [How to refresh Non-Persistent Objects and reload nested Persistent Objects](https://github.com/DevExpress-Examples/XAF_Non-Persistent-Objects-Reloading-Demo) +- [How to edit a collection of Persistent Objects linked to a Non-Persistent Object](https://github.com/DevExpress-Examples/XAF_Non-Persistent-Objects-Edit-Linked-Persistent-Objects-Demo) From 7dfc9ad15b43183d27d28860ee97ce5311aa5495 Mon Sep 17 00:00:00 2001 From: NikolaevaIrina Date: Wed, 10 Apr 2024 11:27:31 +0300 Subject: [PATCH 36/40] Update readme.md --- readme.md | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/readme.md b/readme.md index a84f118..737afa4 100644 --- a/readme.md +++ b/readme.md @@ -3,27 +3,28 @@ [![](https://img.shields.io/badge/📖_How_to_use_DevExpress_Examples-e9f6fc?style=flat-square)](https://docs.devexpress.com/GeneralInformation/403183) -# How to filter and sort Non-Persistent Objects +# XAF - How to filter and sort Non-Persistent Objects -When a [Non\-Persistent Object](https://docs.devexpress.com/eXpressAppFramework/116516/concepts/business-model-design/non-persistent-objects) collection contains many objects, it is often useful to filter it. However, the built-in filtering facilities are disabled for non-persistent collections by default. +If a collection of [non\-persistent objects](https://docs.devexpress.com/eXpressAppFramework/116516/concepts/business-model-design/non-persistent-objects) contains many items, you may need to filter it. However, built-in filters are disabled for non-persistent collections by default. ## Implementation Details -To enable filtering and sorting for [Non\-Persistent Objects](https://docs.devexpress.com/eXpressAppFramework/116516/concepts/business-model-design/non-persistent-objects), use the built-in **DynamicCollection** class or a custom **DynamicCollectionBase** descendant. +To enable filtering and sorting for [non\-persistent objects](https://docs.devexpress.com/eXpressAppFramework/116516/concepts/business-model-design/non-persistent-objects), you can use either the built-in `DynamicCollection` class or a custom `DynamicCollectionBase` descendant. -Here, we create a **DynamicCollection** instance and pass it in the [NonPersistentObjectSpace\.ObjectsGetting](https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.NonPersistentObjectSpace.ObjectsGetting) event handler. We subscribe to the **DynamicCollection.FetchObjects** event and pass a new collection of non-persistent objects every time the filtering or sorting parameters are changed. If you cannot filter the collection manually, set the **ShapeData** event parameter to *true*. Then, **DynamicCollection** will process data (filter, sort, trim) internally. +1. Create a `DynamicCollection` instance and pass it in the [NonPersistentObjectSpace\.ObjectsGetting](https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.NonPersistentObjectSpace.ObjectsGetting) event handler. +2. Subscribe to the `DynamicCollection.FetchObjects` event and pass a new collection of non-persistent objects every time filter or sort parameters change. +3. If you cannot filter the collection manually, set the `ShapeData` event parameter to `true`. Then, `DynamicCollection` will then process data (filter, sort, and trim) internally. + + When you use the `DynamicCollection`, the built-in [FullTextSearch action](https://docs.devexpress.com/eXpressAppFramework/112997/concepts/filtering/full-text-search-action) is displayed in corresponding non-persistent list views. -This example demonstrates two approaches to filter objects. - -- *Contact* objects are filtered at the storage level. Criteria and Sorting values passed in event parameters are converted into a storage-specific format and used in arguments of the *DataTable.Select* method call. DataSet returns filtered and sorted data that is then transformed into non-persistent objects. This approach can be useful if data for non-persistent objects is obtained from a remote service, a custom database query or a stored procedure. +4. The `FindArticlesController` in this example shows a custom search form with a lookup editor that allows filtering non-persistent objects in a lookup list view. -- *Article* objects are filtered and sorted by DynamicCollection internally. This functionality is enabled when the **ShapeData** parameter of the **DynamicCollection.FetchObjects** event is set to *true*. This approach is useful when all data is already available and no custom processing is required. - -When **DynamicCollection** is used, the built-in [FullTextSearch Action](https://docs.devexpress.com/eXpressAppFramework/112997/concepts/filtering/full-text-search-action) is shown in corresponding non-persistent list views. +This example demonstrates two approaches to filter objects. -*FindArticlesController* in this example shows a custom search form with a lookup editor that allows filtering non-persistent objects in a lookup list view. +- **Contact** objects are filtered at the storage level. `Criteria` and `Sorting` values passed in event parameters are converted to a storage-specific format and used as arguments of the `DataTable.Select` method call. `DataSet` returns filtered and sorted data that is then transformed into non-persistent objects. This approach can be useful when data for non-persistent objects is obtained from a remote service, a custom database query or a stored procedure. +- **Article** objects are filtered and sorted internally by a `DynamicCollection`. This functionality is enabled when the `ShapeData` parameter of the `DynamicCollection.FetchObjects` event is set to `true`. This approach is useful when all data is already available and no custom processing is required. ## Files to Review From fb86fd7bcc4b824ba9f464f03a0190b0ca1cbf38 Mon Sep 17 00:00:00 2001 From: NikolaevaIrina Date: Wed, 10 Apr 2024 11:29:15 +0300 Subject: [PATCH 37/40] Update readme.md --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 737afa4..3bceef6 100644 --- a/readme.md +++ b/readme.md @@ -3,7 +3,7 @@ [![](https://img.shields.io/badge/📖_How_to_use_DevExpress_Examples-e9f6fc?style=flat-square)](https://docs.devexpress.com/GeneralInformation/403183) -# XAF - How to filter and sort Non-Persistent Objects +# XAF - How to filter and sort non-persistent objects If a collection of [non\-persistent objects](https://docs.devexpress.com/eXpressAppFramework/116516/concepts/business-model-design/non-persistent-objects) contains many items, you may need to filter it. However, built-in filters are disabled for non-persistent collections by default. From bcc04f95e9c3caf8ba869ac3b6df05e22154b93a Mon Sep 17 00:00:00 2001 From: NikolaevaIrina Date: Thu, 11 Apr 2024 09:35:24 +0300 Subject: [PATCH 38/40] Update readme.md --- readme.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/readme.md b/readme.md index 3bceef6..3007aa6 100644 --- a/readme.md +++ b/readme.md @@ -8,6 +8,11 @@ If a collection of [non\-persistent objects](https://docs.devexpress.com/eXpressAppFramework/116516/concepts/business-model-design/non-persistent-objects) contains many items, you may need to filter it. However, built-in filters are disabled for non-persistent collections by default. +> [!WARNING] +> We created this example for demonstration purposes and it is not intended to address all possible usage scenarios with it. +> If this example does not have certain functionality or you want to change its behavior, you can extend this example as needed. Please note that this can be a complex task that requires good knowledge of XAF: [UI Customization Categories by Skill Level](https://www.devexpress.com/products/net/application_framework/xaf-considerations-for-newcomers.xml#ui-customization-categories). You will likely need to research how our components work under the hood. Refer to the following help topic for more information: [Debug DevExpress .NET Source Code with PDB Symbols](https://docs.devexpress.com/GeneralInformation/403656/support-debug-troubleshooting/debug-controls-with-debug-symbols). +> We are unable to help with such tasks as custom programming is outside our Support Service scope: [Technical Support Scope](https://www.devexpress.com/products/net/application_framework/xaf-considerations-for-newcomers.xml#support). + ## Implementation Details To enable filtering and sorting for [non\-persistent objects](https://docs.devexpress.com/eXpressAppFramework/116516/concepts/business-model-design/non-persistent-objects), you can use either the built-in `DynamicCollection` class or a custom `DynamicCollectionBase` descendant. From 71cb95bd254f8c181b86c3a6c16debffa05f15ad Mon Sep 17 00:00:00 2001 From: NikolaevaIrina Date: Fri, 19 Apr 2024 15:34:24 +0300 Subject: [PATCH 39/40] Apply suggestions from code review Co-authored-by: DirkPieterse --- readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index 3007aa6..d11eb61 100644 --- a/readme.md +++ b/readme.md @@ -9,8 +9,8 @@ If a collection of [non\-persistent objects](https://docs.devexpress.com/eXpressAppFramework/116516/concepts/business-model-design/non-persistent-objects) contains many items, you may need to filter it. However, built-in filters are disabled for non-persistent collections by default. > [!WARNING] -> We created this example for demonstration purposes and it is not intended to address all possible usage scenarios with it. -> If this example does not have certain functionality or you want to change its behavior, you can extend this example as needed. Please note that this can be a complex task that requires good knowledge of XAF: [UI Customization Categories by Skill Level](https://www.devexpress.com/products/net/application_framework/xaf-considerations-for-newcomers.xml#ui-customization-categories). You will likely need to research how our components work under the hood. Refer to the following help topic for more information: [Debug DevExpress .NET Source Code with PDB Symbols](https://docs.devexpress.com/GeneralInformation/403656/support-debug-troubleshooting/debug-controls-with-debug-symbols). +> We created this example for demonstration purposes and it is not intended to address all possible usage scenarios. +> If this example does not have certain functionality or you want to change its behavior, you can extend this example. This can be a complex task that requires good knowledge of XAF: [UI Customization Categories by Skill Level](https://www.devexpress.com/products/net/application_framework/xaf-considerations-for-newcomers.xml#ui-customization-categories), and you may need to research how our components work. Refer to the following help topic for more information: [Debug DevExpress .NET Source Code with PDB Symbols](https://docs.devexpress.com/GeneralInformation/403656/support-debug-troubleshooting/debug-controls-with-debug-symbols). > We are unable to help with such tasks as custom programming is outside our Support Service scope: [Technical Support Scope](https://www.devexpress.com/products/net/application_framework/xaf-considerations-for-newcomers.xml#support). ## Implementation Details From 084fc9756b38d53575642531307a333c70695162 Mon Sep 17 00:00:00 2001 From: NikolaevaIrina Date: Fri, 19 Apr 2024 15:34:55 +0300 Subject: [PATCH 40/40] Update readme.md Co-authored-by: DirkPieterse --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index d11eb61..fbe93e1 100644 --- a/readme.md +++ b/readme.md @@ -19,7 +19,7 @@ To enable filtering and sorting for [non\-persistent objects](https://docs.devex 1. Create a `DynamicCollection` instance and pass it in the [NonPersistentObjectSpace\.ObjectsGetting](https://docs.devexpress.com/eXpressAppFramework/DevExpress.ExpressApp.NonPersistentObjectSpace.ObjectsGetting) event handler. 2. Subscribe to the `DynamicCollection.FetchObjects` event and pass a new collection of non-persistent objects every time filter or sort parameters change. -3. If you cannot filter the collection manually, set the `ShapeData` event parameter to `true`. Then, `DynamicCollection` will then process data (filter, sort, and trim) internally. +3. If you cannot filter the collection, set the `ShapeData` event parameter to `true`. The `DynamicCollection` then processes the data (filter, sort, and trim) internally. When you use the `DynamicCollection`, the built-in [FullTextSearch action](https://docs.devexpress.com/eXpressAppFramework/112997/concepts/filtering/full-text-search-action) is displayed in corresponding non-persistent list views.