Search​Pane​Suggestions​Request​Deferral Search​Pane​Suggestions​Request​Deferral Search​Pane​Suggestions​Request​Deferral Class

Definition

Enables the app to signal when it has finished populating a searchSuggestionCollection object while handling the suggestionsrequested event. Apps should use a deferral if and only if they need to respond to a request for suggestions asynchronously.

public sealed class SearchPaneSuggestionsRequestDeferral : ISearchPaneSuggestionsRequestDeferralpublic sealed class SearchPaneSuggestionsRequestDeferral : ISearchPaneSuggestionsRequestDeferralPublic NotInheritable Class SearchPaneSuggestionsRequestDeferral Implements ISearchPaneSuggestionsRequestDeferral
Attributes
Windows 10 requirements
Device family
Windows Desktop Extension SDK (introduced v10.0.10240.0) Xbox One Extensions for the UWP (introduced v10.0.10586.0)
API contract
Windows.ApplicationModel.Search.SearchContract (introduced v1)

Remarks

Your app should respond asynchronously to a request for suggestions if fulfilling the request will take a significant amount of time, such as fetching suggestions from a web service.

Use the searchPaneSuggestionsRequestDeferral.complete method to signal when your app has fulfilled the request.

An app retrieves this object by calling the searchPaneSuggestionsRequest.getDeferral method while handling the suggestionsrequested event.

Examples

The Search contract sample demonstrates how to respond to a suggestionsrequested event, including how to get a deferral.

private async void OnSearchPaneSuggestionsRequested(SearchPane sender, SearchPaneSuggestionsRequestedEventArgs e)
{
    var queryText = e.QueryText;
    if (string.IsNullOrEmpty(queryText))
    {
        MainPage.Current.NotifyUser("Use the search pane to submit a query", NotifyType.StatusMessage);
    }
    else if (string.IsNullOrEmpty(UrlTextBox.Text))
    {
        MainPage.Current.NotifyUser("Please enter the web service URL", NotifyType.StatusMessage);
    }
    else
    {
        // The deferral object is used to supply suggestions asynchronously for example when fetching suggestions from a web service.
        var request = e.Request;
        var deferral = request.GetDeferral();

        try
        {
            // Use the web service Url entered in the UrlTextBox that supports XML Search Suggestions in order to see suggestions come from the web service.
            // See http://msdn.microsoft.com/en-us/library/cc848863(v=vs.85).aspx for details on XML Search Suggestions format.
            // Replace "{searchTerms}" of the Url with the query string.
            Task task = GetSuggestionsAsync(Regex.Replace(UrlTextBox.Text, "{searchTerms}", Uri.EscapeDataString(queryText)), request.SearchSuggestionCollection);
            await task;
            if (task.Status == TaskStatus.RanToCompletion)
            {
                if (request.SearchSuggestionCollection.Size > 0)
                {
                    MainPage.Current.NotifyUser("Suggestions provided for query: " + queryText, NotifyType.StatusMessage);
                }
                else
                {
                    MainPage.Current.NotifyUser("No suggestions provided for query: " + queryText, NotifyType.StatusMessage);
                }
            }
        }
        catch (TaskCanceledException)
        {
            // Previous suggestion request was canceled.
        }
        catch (FormatException)
        {
            MainPage.Current.NotifyUser("Suggestions could not be retrieved, please verify that the URL points to a valid service (for example http://contoso.com?q={searchTerms})", NotifyType.ErrorMessage);
        }
        catch (Exception)
        {
            MainPage.Current.NotifyUser("Suggestions could not be displayed, please verify that the service provides valid XML Search Suggestions.", NotifyType.ErrorMessage);
        }
        finally
        {
            deferral.Complete();
        }
    }
}
Windows.ApplicationModel.Search.SearchPane.getForCurrentView().onsuggestionsrequested = function (eventObject) {
    var queryText = eventObject.queryText, language = eventObject.language, suggestionRequest = eventObject.request;

    // The deferral object is used to supply suggestions asynchronously for example when fetching suggestions from a web service.
    // Indicate that we'll do this asynchronously:
    var deferral = suggestionRequest.getDeferral();

    // Use the web service Uri entered in the urlInput that supports this standard in order to see suggestions come from the web service.
    // See http://msdn.microsoft.com/en-us/library/cc848863(v=vs.85).aspx for details on XML Search Suggestions format.
    // And replace "{searchTerms}" with the query string, which should be encoded into the URI.
    var suggestionUri = document.getElementById("urlInput").innerText.replace("{searchTerms}", encodeURIComponent(queryText));

    // Cancel the previous suggestion request if it is not finished.
    if (xhrRequest && xhrRequest.cancel) {
        xhrRequest.cancel();
    }

    // Create request to obtain suggestions from service and supply them to the Search Pane.
    xhrRequest = WinJS.xhr({ url: suggestionUri });
    xhrRequest.done(
        function (request) {
            if (request.responseXML) {
                generateSuggestions(request.responseXML, suggestionRequest.searchSuggestionCollection, queryText);
            }

            deferral.complete(); // Indicate we're done supplying suggestions.
        },
        function (error) {
            WinJS.log && WinJS.log("Error retrieving suggestions for query: " + queryText, "sample", "status");

            // Call complete on the deferral when there is an error.
            deferral.complete();
        });
};

Methods

Complete() Complete() Complete()

Signals that the app has finished populating a searchSuggestionCollection object while handling the suggestionsrequested event.

public void Complete()public void Complete()Public Function Complete() As void
Attributes