Interface IRetrievingRuleArguments<TEntityView>
- Namespace
- GroupeIsa.Neos.Application.Rules.EventRules
- Assembly
- GroupeIsa.Neos.Application.Abstractions.dll
Provides the functionalities of a retrieving rule arguments.
public interface IRetrievingRuleArguments<TEntityView> : IRetrievedRuleArguments<TEntityView>, IContextRuleArguments, ICancelableRuleArguments, IRuleArguments where TEntityView : IEntityView
Type Parameters
TEntityViewThe entity view type.
- Inherited Members
Properties
EntityType
Gets the type of the entity associated with the entity view, or null for an unbound entity view.
Type? EntityType { get; }
Property Value
IsCountQuery
Gets a value indicating whether the query is a count query.
bool IsCountQuery { get; }
Property Value
WillTransform
Gets a value indicating whether the data will be transformed (grouping or select).
bool WillTransform { get; }
Property Value
Methods
AppendEntityFilter<TEntity>(Expression<Func<TEntity, bool>>)
Sets a filter based on the properties of the entity associated with the entity view.
void AppendEntityFilter<TEntity>(Expression<Func<TEntity, bool>> predicate) where TEntity : BusinessEntity
Parameters
predicateExpression<Func<TEntity, bool>>A function to test each element for a condition.
Type Parameters
TEntityType of the entity of the entity associated with.
Remarks
This filter is ignored when using the SetItemsSource(IEnumerable<TEntityView>) method.
AppendFilter(Expression<Func<TEntityView, bool>>)
Sets a filter based on the properties of the entity view.
void AppendFilter(Expression<Func<TEntityView, bool>> predicate)
Parameters
predicateExpression<Func<TEntityView, bool>>A function to test each element for a condition.
RetrieveItemsAsync()
Retrieves the entity view items. The process launched is the standard retrieve process of the entity view except that the Retrieving/Retrieved events are not triggered and no pagination is applied.
Task<TEntityView[]> RetrieveItemsAsync()
Returns
- Task<TEntityView[]>
The retrieved items.
Examples
The following example shows how to call RetrieveItemsAsync to aggregate entity view customers with an external source.
IEnumerable<ICustomerView> externalCustomers = GetExternalCustomers();
IEnumerable<ICustomerView> internalCustomers = await args.RetrieveItemsAsync(q => q.Where(c => c.IsActive));
args.SetItemsSource(externalCustomers.Concat(internalCustomers));
RetrieveItemsAsync(Func<IQueryable<TEntityView>, IQueryable<TEntityView>>?)
Retrieves the entity view items. The process launched is the standard retrieve process of the entity view except that the Retrieving/Retrieved events are not triggered and no pagination is applied.
Task<TEntityView[]> RetrieveItemsAsync(Func<IQueryable<TEntityView>, IQueryable<TEntityView>>? queryCustomization)
Parameters
queryCustomizationFunc<IQueryable<TEntityView>, IQueryable<TEntityView>>Query customization.
Returns
- Task<TEntityView[]>
The retrieved items.
Examples
The following example shows how to call RetrieveItemsAsync to aggregate entity view customers with an external source.
IEnumerable<ICustomerView> externalCustomers = GetExternalCustomers();
IEnumerable<ICustomerView> internalCustomers = await args.RetrieveItemsAsync(q => q.Where(c => c.IsActive));
args.SetItemsSource(externalCustomers.Concat(internalCustomers));
RetrieveItemsAsync(Func<IQueryable<TEntityView>, IQueryable<TEntityView>>?, CancellationToken)
Retrieves the entity view items. The process launched is the standard retrieve process of the entity view except that the Retrieving/Retrieved events are not triggered and no pagination is applied.
Task<TEntityView[]> RetrieveItemsAsync(Func<IQueryable<TEntityView>, IQueryable<TEntityView>>? queryCustomization, CancellationToken cancellationToken)
Parameters
queryCustomizationFunc<IQueryable<TEntityView>, IQueryable<TEntityView>>Query customization.
cancellationTokenCancellationTokenCancellation token.
Returns
- Task<TEntityView[]>
The retrieved items.
Examples
The following example shows how to call RetrieveItemsAsync to aggregate entity view customers with an external source.
IEnumerable<ICustomerView> externalCustomers = GetExternalCustomers();
IEnumerable<ICustomerView> internalCustomers = await args.RetrieveItemsAsync(q => q.Where(c => c.IsActive));
args.SetItemsSource(externalCustomers.Concat(internalCustomers));
RetrieveItemsAsync(CancellationToken)
Retrieves the entity view items. The process launched is the standard retrieve process of the entity view except that the Retrieving/Retrieved events are not triggered and no pagination is applied.
Task<TEntityView[]> RetrieveItemsAsync(CancellationToken cancellationToken)
Parameters
cancellationTokenCancellationTokenCancellation token.
Returns
- Task<TEntityView[]>
The retrieved items.
Examples
The following example shows how to call RetrieveItemsAsync to aggregate entity view customers with an external source.
IEnumerable<ICustomerView> externalCustomers = GetExternalCustomers();
IEnumerable<ICustomerView> internalCustomers = await args.RetrieveItemsAsync(q => q.Where(c => c.IsActive));
args.SetItemsSource(externalCustomers.Concat(internalCustomers));
SetCount(long)
Sets the count of the items and cancels the event when IsCountQuery is true.
void SetCount(long count)
Parameters
countlongThe count.
Exceptions
- InvalidOperationException
The method is called when IsCountQuery is false.
SetItems(IEnumerable<TEntityView>, int?)
Sets the items to retrieve and cancels the event.
void SetItems(IEnumerable<TEntityView> items, int? totalRecordCount = null)
Parameters
itemsIEnumerable<TEntityView>Items.
totalRecordCountint?Total record count.
Examples
The following example shows how to call SetItems to retrieve customers from a custom source.
_logger.LogInformation($"args.Skip: {args.Skip}");
_logger.LogInformation($"args.Top: {args.Top}");
ICustomerView[] customers = GetCustomers(args.Skip, args.Top);
int customerCount = GetCustomerCount();
_logger.LogInformation($"customers.Length: {customers.Length}");
_logger.LogInformation($"customerCount: {customerCount}");
args.SetItems(customers, customerCount);
// Log output:
// args.Skip: 5
// args.Top: 10
// customers.Length: 10
// customerCount: 150
You can note that you don't have to set Cancel to true, the call to SetItems does it automatically.
When you use this method, you must provide a list for which you have already applied pagination, filters and sorting.
SetItems(IQueryable<TEntityView>)
Sets the items to retrieve and cancels the event.
[Obsolete("Use SetItemsSource")]
void SetItems(IQueryable<TEntityView> query)
Parameters
queryIQueryable<TEntityView>Query.
SetItemsSource(IEnumerable<TEntityView>)
Sets a source for the items to retrieve and cancels the event. Filters and sorts will be applied to this source.
void SetItemsSource(IEnumerable<TEntityView> source)
Parameters
sourceIEnumerable<TEntityView>Source.
Examples
The following example shows how to call SetItemsSource to retrieve customers from a custom source.
_logger.LogInformation($"args.Skip: {args.Skip}");
_logger.LogInformation($"args.Top: {args.Top}");
IEnumerable<ICustomerView> source = GetCustomers();
_logger.LogInformation($"customerCount: {source.Count()}");
args.SetItemsSource(source);
// Log output:
// args.Skip: 5
// args.Top: 10
// customerCount: 150
Note that you don't have to set Cancel to true, the call to SetItemsSource does it automatically.
When you use this method, you must provide a source without pagination. The query can contain filters but Filter will be applied in addition.