Partager via


Comment effectuer des appels asynchrones dans votre gestionnaire datarequested (HTML)

[ Cet article est destiné aux développeurs de Windows 8.x et Windows Phone 8.x qui créent des applications Windows Runtime. Si vous développez une application pour Windows 10, voir la Documentation ]

Nous allons vous montrer comment produire des données de manière asynchrone en réponse à un événement datarequested. Si votre application effectue des opérations asynchrones en réponse à un événement datarequested, elle doit d’abord acquérir un objet DataRequestDeferral. Acquérir un objet de report permet au système de savoir que votre appel à ajouter des données au DataPackage peut se produire après le retour du délégué.

Remarque  Si vous partagez uniquement du texte ou un lien, vous pouvez ignorer le code fourni dans cette rubrique. Il est plus rapide d’utiliser les méthodes setText et setUri .

 

Ce que vous devez savoir

Technologies

Prérequis

  • Vous devez être familiarisé avec Microsoft Visual Studio et ses modèles connexes.
  • Vous devez être familiarisé avec JavaScript.
  • Vous devez comprendre comment obtenir des fichiers et d’autres données à l’aide de l’objet FileOpenPicker, par exemple.

Instructions

Étape 1: Définir votre application comme source de partage

L’objet DataTransferManager est le point de départ principal de toute opération de partage. Vous ajouterez un datarequested gestionnaire d’événements sur l’objet DataTransferManager dans le gestionnaire d’événements activated de votre application. L’événement datarequested survient lorsque l’utilisateur appelle l’icône Partager.

var dataTransferManager = Windows.ApplicationModel.DataTransfer.DataTransferManager.getForCurrentView();
    dataTransferManager.addEventListener("datarequested", shareAsyncHandler);

Les étapes restantes servent à implémenter la fonction shareAsyncHandler.

Étape 2: Obtenir un objet DataRequest

Lorsqu’un événement datarequested survient, votre application reçoit un objet DataRequest. Cet objet contient une classe DataPackage que vous pouvez utiliser pour fournir le contenu qu’un utilisateur souhaite partager.

var request = e.request;

Étape 3: Définir les propriétés de titre et de description

request.data.properties.title = "Async Share Example";
request.data.properties.description =
    "Demonstrates how to make asynchronous calls from a datarequested event handler.";

Étape 4: Obtenir un objet de report

Pour obtenir un objet de report, appelez la méthode getDeferral.

var deferral = request.getDeferral();

Étape 5: Passer un appel asynchrone pour préparer les données

Pour ajouter du contenu, vous pouvez utiliser n’importe quelle méthode prise en charge par la classe DataPackage. Dans cet exemple, nous utilisons la méthode setStorageItems pour partager un fichier.

Windows.ApplicationModel.Package.current.installedLocation.getFileAsync("images\\logo.png").done(function (storageFile) {
    request.data.setStorageItems([storageFile]);
});

Étape 6: Appeler la méthode complète

La méthode DataRequestDeferral.complete indique au système que les données sont prêtes pour le partage.

deferral.complete();

Vous devez également appeler DataRequestDeferral.complete dans le gestionnaire d’erreurs de l’appel asynchrone.

Terminer l’exemple

function shareAsyncHandler(e) {
    var request = e.request;
    request.data.properties.title = "Async Share Example";
    request.data.properties.description = 
        "Demonstrates how to make asynchronous calls from a datarequested event handler.";
    var deferral = request.getDeferral();
    Windows.ApplicationModel.Package.current.installedLocation.getFileAsync("images\\logo.png").done(function (storageFile) {
        request.data.setStorageItems([storageFile]);
        deferral.complete();
    }, function (err) {
        deferral.complete();
    });
}

app.onactivated = function (args) {
    if (args.detail.kind === activation.ActivationKind.launch) {
        if (args.detail.previousExecutionState !== activation.ApplicationExecutionState.terminated) {
            // This app was recently launched; register it as share source.
            var dataTransferManager = Windows.ApplicationModel.DataTransfer.DataTransferManager.getForCurrentView();
            dataTransferManager.addEventListener("datarequested", shareAsyncHandler);
        } else {
            // TODO: This app was reactivated from suspension.
            // Restore the app state here.
        }
        args.setPromise(WinJS.UI.processAll());
    }
};

Rubriques associées

Exemple de partage de contenu source entre applications

Partage et échange de données

Comment prendre en charge les opérations Pull

Démarrage rapide : partage de contenu

DataPackage

Windows.ApplicationModel.DataTransfer

Windows.ApplicationModel.DataTransfer.Share