Skip to main content
All docs
V25.2
  • 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.v25.2.dll

    NuGet Package: DevExpress.ExpressApp.Xpo

    Declaration

    public Task<ObjectType> FindObjectAsync<ObjectType>(
        CriteriaOperator criteria,
        CancellationToken cancellationToken = default(CancellationToken)
    )

    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 if no persistent object is found that matches the criteria.

    Remarks

    The following code snippet uses 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, XAF displays a Detail View for a new Contact object.

    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.

    See Also