XPObjectSpace.FindObjectAsync<ObjectType>(CriteriaOperator, CancellationToken) Method
Asynchronously searches for an object that matches the specified criteria. This object’s type is designated by the specified generic parameter.
Namespace: DevExpress.ExpressApp.Xpo
Assembly: DevExpress.ExpressApp.Xpo.v24.1.dll
NuGet Package: DevExpress.ExpressApp.Xpo
Declaration
Parameters
Name | Type | Description |
---|---|---|
criteria | CriteriaOperator | A CriteriaOperator descendant which represents the criteria the persistent object must match. |
Optional Parameters
Name | Type | Default | Description |
---|---|---|---|
cancellationToken | CancellationToken | null | A CancellationToken object that delivers a cancellation notice to the running operation. |
Type Parameters
Name | Description |
---|---|
ObjectType | A type of objects to search for. |
Returns
Type | Description |
---|---|
Task<ObjectType> | A Task that returns an object. This object represents a persistent object that matches the specified criteria. null (Nothing in Visual Basic) if no persistent object is found that matches the criteria. |
Remarks
The following code demonstrates how you can use this method in a View Controller to find and show a Contact the selected DemoTask is assigned to. If this DemoTask is not assigned to any Contact, a Detail View for a new Contact object is shown.
using DevExpress.Data.Filtering;
using DevExpress.ExpressApp;
using DevExpress.ExpressApp.Actions;
using DevExpress.ExpressApp.Xpo;
using System;
using System.Threading;
// ...
public class AsyncAssignedToInfoController : ObjectViewController<ListView, DemoTask> {
View contactView = null;
public AsyncAssignedToInfoController() : base() {
SimpleAction showAssignedToInfoAction = new SimpleAction(this, "Assigned contact's info", "Edit");
showAssignedToInfoAction.SelectionDependencyType = SelectionDependencyType.RequireSingleObject;
showAssignedToInfoAction.Execute += showAssignedToInfoAction_Execute;
}
async private void showAssignedToInfoAction_Execute(object sender, SimpleActionExecuteEventArgs e) {
CancellationTokenSource cancellationTokenSource = new CancellationTokenSource();
XPObjectSpace contactObjectSpace = (XPObjectSpace)Application.CreateObjectSpace(typeof(Contact));
contactView = Application.CreateDetailView(contactObjectSpace, "Contact_DetailView", true);
e.ShowViewParameters.CreatedView = contactView;
Contact assignedTo = (Contact)ViewCurrentObject.AssignedTo;
if (assignedTo != null) {
object obj = await contactObjectSpace.FindObjectAsync<Contact>(
CriteriaOperator.Parse(string.Format("[Oid] = '{0}'", assignedTo.Oid)),
cancellationTokenSource.Token);
contactView.CurrentObject = obj ?? contactObjectSpace.CreateObject(typeof(Contact));
}
else {
contactView.CurrentObject = contactObjectSpace.CreateObject(typeof(Contact));
}
if (contactObjectSpace.IsNewObject(contactView.CurrentObject)) {
contactObjectSpace.Committed += contactObjectSpace_Committed;
}
}
private void contactObjectSpace_Committed(object sender, EventArgs e) {
ViewCurrentObject.AssignedTo = ObjectSpace.GetObject(contactView.CurrentObject) as Contact;
}
}
In the current example, the cancellationToken parameter is used for demonstration purposes. You can skip it or use to cancel an asynchronous operation as shown in the CancellationToken topic.