Skip to content

Commit

Permalink
Merge pull request #281 from Flexberry/fix-232541-type-usage-in-safe-…
Browse files Browse the repository at this point in the history
…load-details

Fix safe load details with complex type usage hierarchy
  • Loading branch information
bratchikov committed May 22, 2023
2 parents c399027 + 2df9215 commit c3ed1a3
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 2 deletions.
5 changes: 4 additions & 1 deletion NewPlatform.Flexberry.ORM.ODataService.nuspec
Expand Up @@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>NewPlatform.Flexberry.ORM.ODataService</id>
<version>7.1.1-beta02</version>
<version>7.1.1-beta03</version>
<title>Flexberry ORM ODataService</title>
<authors>New Platform Ltd.</authors>
<owners>New Platform Ltd.</owners>
Expand All @@ -14,9 +14,12 @@
<releaseNotes>
Changed
1. Updated `NewPlatform.Flexberry.ORM` up to `7.1.1-beta01`.
2. Get properties from objects for send it to frontend always rethrow exception now.

Fixed
1. Fixed problem with metadata when inheritance and PublishName is used.
2. Safe load details with complex type usage hierarchy.

</releaseNotes>
<copyright>Copyright New Platform Ltd 2023</copyright>
<tags>Flexberry ORM OData ODataService</tags>
Expand Down
Expand Up @@ -88,7 +88,33 @@ public static void SafeLoadDetails(this IDataService dataService, View view, ILi
// Нужно гарантировать, что у загруженных детейлов будет проставлена ссылка на агрегатора, поэтому добавим свойство в представление (если уже есть, то второй раз не добавится).
detailView.AddProperty(agregatorPropertyName);
LoadingCustomizationStruct lcs = LoadingCustomizationStruct.GetSimpleStruct(detailView.DefineClassType, detailView);
lcs.LoadingTypes = TypeUsageProvider.TypeUsage.GetUsageTypes(view.DefineClassType, detailInView.Name);
Type[] usageTypes = TypeUsageProvider.TypeUsage.GetUsageTypes(view.DefineClassType, detailInView.Name);
List<Type> storedTypes = new List<Type>();
foreach (var usageType in usageTypes)
{
if (Information.IsStoredType(usageType))
{
storedTypes.Add(usageType);
}
}

if (!storedTypes.Any())
{
foreach (DataObject agregator in agregators)
{
Type agregatorType = agregator.GetType();
Type[] usageTypesFromAgregator = TypeUsageProvider.TypeUsage.GetUsageTypes(agregatorType, detailInView.Name);
foreach (Type usageTypeFromAgregator in usageTypesFromAgregator)
{
if (Information.IsStoredType(usageTypeFromAgregator) && !storedTypes.Contains(usageTypeFromAgregator))
{
storedTypes.Add(usageTypeFromAgregator);
}
}
}
}

lcs.LoadingTypes = storedTypes.ToArray();
Type agregatorKeyType = agregators[0].__PrimaryKey.GetType();

// Производим обработку только тех агрегаторов, для которых ранее не был загружен детейл.
Expand Down

0 comments on commit c3ed1a3

Please sign in to comment.