Интеграция облачной службы с контрактами выбора файлов

В прошлом пользователи упорядочивали, предоставляли для общего доступа и хранили свои документы, фотографии, видео и музыку на локальных компьютерах. Но облако предоставляет пользователям гораздо более эффективные способы доступа к важным для них файлам, работы с этими файлами и управления ими. Windows 8 поддерживает эти новые сценарии, позволяя вам напрямую интегрировать облачные службы в свои приложения и создавать абсолютно новые способы взаимодействия, невозможные прежде.

Многие из этих сценариев вы можете увидеть в приложении SkyDrive, использующем контракты выбора файлов. Контракты выбора файлов созданы для того, чтобы сделать документы, фотографии, видео и музыкальные файлы пользователя, хранящиеся в вашем приложении, доступными всем другим приложениям в Windows 8. В этой записи блога мы используем приложение SkyDrive (в котором реализуются все три контракта выбора файлов, представленные в записи Подключение приложений, файлов, компьютеров и устройств к облаку с помощью службы SkyDrive и Windows 8), чтобы показать:

  • Что такое контракты выбора файлов, и как их можно использовать для реализации новых способов взаимодействия в вашем приложении
  • Как выбрать правильный контракт выбора файлов для своего приложения
  • Советы и рекомендации по реализации контрактов выбора файлов

[![Поддержка контракта выбора файлов в окне открытия в приложении SkyDrive](https://msdntnarchive.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/51/31/%0A%0Ametablogapi/3125.skydrive_thumb_6E3450F4.png "Поддержка контракта выбора файлов в окне открытия в

приложении SkyDrive")](https://msdntnarchive.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/51/31/%0A%0Ametablogapi/5488.skydrive_19E51AF1.png)

Поддержка контракта выбора файлов в окне открытия в приложении SkyDrive

Обзор контрактов выбора файлов

В соответствии со своим названием контракты выбора файлов расширяют возможности средства выбора файлов и позволяют приложениям для Windows 8 предоставлять файлы, папки для сохранения и даже обновления файлов всем другим приложениям для Windows 8. Например, на приведенном выше снимке экрана вы можете увидеть, что все мои файлы, хранящиеся в SkyDrive, доступны прямо в средстве выбора файлов.

Контракты выбора файлов состоят из 3 независимых контрактов: контракт выбора файлов в окне открытия, контракт выбора файлов в окне сохранения, контракт обновления кэшированных файлов. Следует реализовывать только те контракты, которые нужны для вашего приложения. Выбирая, какие контракты требуется реализовать, руководствуйтесь следующими рекомендациями:

  • Контракт выбора файлов в окне открытия. Используйте этот контракт, когда ваше приложение обеспечивает уникальное или ценное представление файлов, к которым сложно получить доступ другим способом. Например, приложение SkyDrive реализует этот контракт, чтобы предоставлять всем приложениям для Windows 8 доступ к файлам, хранящимся в данной службе.
  • Контракт выбора файлов в окне сохранения. Используйте этот контракт, если ваше приложение поддерживает контракт выбора файлов в окне открытия и если пользователям может потребоваться сохранить файлы в вашем приложении. Например, приложение SkyDrive реализует этот контракт, чтобы пользователи могли легко сохранять файлы в этой службе из любого приложения для Windows 8. Для некоторых приложений вам потребуется решить, какой контракт реализовать для передачи данных в ваше приложение — контракт выбора файлов в окне сохранения или контракт получателя данных (или оба). В статье Общий доступ к данным и обмен данными вы найдете информацию, которая поможет принять это решение.
  • Контракт обновления кэшированных файлов. Используйте этот контракт, когда ваше приложение помимо прочего автоматически отслеживает и обновляет файлы, поддерживая их синхронизацию с основным хранилищем данных вашего приложения. Приложение SkyDrive реализует этот контракт для того, чтобы любой файл, выбранный или сохраненный в приложении SkyDrive, мог быть легко обновлен без взаимодействия пользователя со средством выбора файлов. Например, я могу открыть фотографию из SkyDrive, используя свой любимый фоторедактор, и все внесенные мной изменения автоматически отправляются обратно в SkyDrive (мне не приходится использовать для этого средство выбора файлов).

Удобно рассматривать эти контракты как последовательность. Например, мы рекомендуем сначала реализовать в приложении для Windows 8 контракт выбора файлов в окне открытия, а затем решить, нужно ли реализовывать контракт выбора файлов в окне сохранения и т. д.

 

Последовательность контрактов выбора файлов

Последовательность контрактов выбора файлов

Теперь, когда вы имеете общее представление об этих контрактах, давайте рассмотрим, как можно реализовать каждый из них. Для пояснения описываемых понятий мы по-прежнему будем использовать в качестве примера приложение SkyDrive.

Сценарий 1. Контракт выбора файлов в окне открытия

Контракт выбора файлов в окне открытия предоставляет пользователям способ использования файлов, которые они создают, хранят или которыми они управляют в вашем приложении, в других приложениях для Windows 8. Например, благодаря реализации контракта выбора файлов в окне открытия в приложении SkyDrive, я имею доступ ко всем своим файлам, хранящимся в SkyDrive, в любом другом приложении для Windows 8. С момента настройки моего аватара для открытия документа в SkyDrive весь мой контент SkyDrive доступен независимо от того, что я делаю или какое приложение для Windows 8 использую!

Когда ваше приложение реализует этот контракт, оно может запускаться и отображаться в режиме открытия средства выбора файлов. Точка входа в ваше приложение отображается в меню выбора файлов каждый раз, когда пользователь выбирает тип файла, предоставляемый вашим приложением:

Выбор файлов в окне открытия

SkyDrive в меню выбора файлов

При запуске ваше приложение отображается внутри области просмотра средства выбора файлов, и рамка средства выбора файлов окрашивается в соответствии с цветовой схемой, указанной в вашем манифесте:

skydrive_тайланд

Приложение SkyDrive, отображаемое внутри средства выбора файлов для реализации контракта выбора файлов в окне открытия

Реализация контракта

Чтобы включить контракт выбора файлов в окне открытия в свое приложение, следуйте рекомендациям из Краткого руководства. Когда в ваше приложение внедрен этот контракт, следующим шагом необходимо настроить приложение для отображения файлов, которые может выбрать пользователь. Чтобы создать представление выбора файлов после добавления контракта выбора файлов в окне открытия в манифест приложения, можно использовать встроенный шаблон Visual Studio. А если вы уже создали представление в своем основном приложении, можно взять его за основу при создании представления выбора файлов. Как показано далее, в SkyDrive повторно используется существующее представление из основного приложения, что позволяет сэкономить время, а также обеспечивает согласованность с представлением основного приложения.

skydrive_представление1Приложение SkyDrive предоставляет одинаковые представления и модели навигации

Приложение SkyDrive предоставляет одинаковые представления и модели навигации
в основной и встроенной версиях

Кроме того, поскольку пользователь будет выбирать файлы в вашем приложении, важно предоставить механизм выбора. Если вы уже используете встроенные элементы управления HTML ListView или XAML GridView, в них уже встроены процедуры и визуальные элементы выбора.

[![Визуальный элемент выбора в приложении SkyDrive](https://blogs.msdn.com/cfs-%0A%0Afile.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-51-31-%0A%0Ametablogapi/6355.selection_5F00_visual_5F00_thumb_5F00_09A92D2B.png "Визуальный элемент выбора в приложении

SkyDrive")](https://msdntnarchive.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/51/31/%0A%0Ametablogapi/0005.selection_visual_7BD6E72F.png)

Визуальный элемент выбора в приложении SkyDrive

После того, как пользователь выберет файл, необходимо передать StorageFile средству выбора файлов, чтобы его можно было отобразить в подборке средства выбора файлов. В зависимости от сценария можно использовать локальный StorageFile или StorageFile на основе URI или потока. Объекты StorageFile на основе URI или потока лучше использовать для файлов, расположенных не на локальном компьютере, поскольку они позволяют отложить загрузку файла до того момента, когда к нему обратится приложение, использующее данный файл. Выбор зависит от реализации вашего приложения — URI соответствует политике невмешательства, а вариант на основе потока позволяет настраивать способ загрузки файла при обращении к нему. Например, если файл не был общедоступным через URI и требовал выполнения проверки подлинности, решение на основе потока позволило бы передать необходимые учетные данные. Вот простой пример добавления StorageFile на основе URI в подборку средства выбора файлов:

JavaScript

 // Create thumbnail for the file
var thumbnailSource = 

Windows.Storage.Streams.RandomAccessStreamReference.createFromUri(new 

Windows.Foundation.Uri
(selectedItem.fileThumbnailUri));
 // Add a file to the FileOpenPickerUI that is downloaded using BackgroundTransfer

Windows.Storage.StorageFile.createStreamedFileAsync(selectedItem.name, onDataRequested, thumbnailSource).done
(function (streamedFile) {   pickerUI.addFile(selectedItem.id, streamedFile);
});


function onDataRequested(outputStream) {
   var downloader = new 

Windows.Networking.BackgroundTransfer.BackgroundDownloader();
   var 

download = downloader.createDownload(new Windows.Foundation.Uri

(selectedItem.fileUri), null);
   download.startAsync().done();
   

var inputStream = download.getResultStreamAt(0);
   

Windows.Storage.Streams.RandomAccessStream.copyAndCloseAsync(inputStream, outputStream).done(function () {
      inputStream.close();
   });
}

C#

 // Create thumbnail for the file
var 

thumbnailSource = RandomAccessStreamReference.CreateFromUri(new Uri

(selectedItem.FileThumbnailUri));
// Add a file to the FileOpenPickerUI that is downloaded using BackgroundTransfer
StorageFile file = await StorageFile.CreateStreamedFileAsync

(selectedItem.Name, OnDataRequested, thumbnailSource);
_openUI.AddFile(selectedItem.Id, file);

protected async void OnDataRequested

(StreamedFileDataRequest outputStream)
{
   var downloader = new 

Windows.Networking.BackgroundTransfer.BackgroundDownloader();
   var download = downloader.CreateDownload(new Uri(_selectedItem.FileUri), null);
   var downloadTask = download.StartAsync();
   using (var inputStream = download.GetResultStreamAt(0))
   {
      await 

RandomAccessStream.CopyAndCloseAsync(inputStream, outputStream);
   }
   await downloadTask;
}

Создание пользовательского интерфейса выбора файлов

Важным компонентом подписки на контракт выбора файлов в окне открытия является предоставление пользовательского интерфейса выбора файлов, соответствующего индивидуальному стилю вашего приложения. В руководстве и контрольном списке для средств выбора файлов описаны ключевые аспекты, на которые следует обратить внимание при проектировании такого пользовательского интерфейса.

C точки зрения реализации есть несколько простых способов обеспечить выполнение этих правил:

  • Команды. Поскольку панель приложения не поддерживается в средстве выбора файлов, используйте встроенную строку команд из шаблона Visual Studio. (№1 на следующей схеме.)
  • Навигация. Выберите модель и возможности навигации в соответствии с тем, что уже используется в вашем основном приложении. Кроме того, необходимо задать содержание свойства Title таким же образом, как вы отображаете текущее расположение в своем приложении. (№2 на приведенной ниже схеме.)
  • Выбор. Поскольку средство выбора файлов поддерживает выбор как одного, так и нескольких элементов, используйте свойство SelectionMode, чтобы определить, должно ли приложение допускать выбор нескольких файлов. (№3 на приведенной ниже схеме.)
  • Фильтрация представления. Используйте свойство AllowedFileTypes для фильтрации элементов в вашем представлении и отображения файлов только тех типов, которые пользователь может выбрать.
  • Запуск. Используйте свойство SettingsIdentifier для запуска вашего приложения с тем же расположением, которое отображалось в прошлый раз, когда пользователь выбирал файлы в вашем приложении.
  • Проверка подлинности. При необходимости предоставьте пользователю возможность войти в ваше приложение так же, как при работе с основным приложением.
  • Организация. Упорядочивайте и отображайте файлы так, чтобы обеспечить оптимальный просмотр контента. Рекомендуется использовать контекстное масштабирование и простые фильтры вместо более сложных возможностей (таких как поиск).

[![Обзор пользовательского интерфейса приложения SkyDrive, реализующего контракт выбора файлов в окне открытия](https://blogs.msdn.com/cfs-%0A%0Afile.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-51-31-%0A%0Ametablogapi/2642.picking_5F00_experience_5F00_thumb_5F00_3B349AC0.jpg "Обзор пользовательского интерфейса

приложения SkyDrive, реализующего контракт выбора файлов в окне открытия ")](https://msdntnarchive.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/51/31/%0A%0Ametablogapi/8015.picking_experience_497313B0.jpg)

Обзор пользовательского интерфейса приложения SkyDrive, реализующего контракт выбора файлов в окне открытия

Комплексный процесс

Подводя итоги, рассмотрим комплексный процесс использования контракта выбора файлов в окне открытия. На этой схеме приложение, реализующее контракт выбора файлов в окне открытия (например, SkyDrive), называется "Providing app" (предоставляющее приложение).

[![Комплексный процесс использования контракта выбора файлов в окне открытия](https://msdntnarchive.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/51/31/%0A%0Ametablogapi/8831.end-to-end-flow_thumb_41E7A443.png "Комплексный процесс использования

контракта выбора файлов в окне открытия")](https://msdntnarchive.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/51/31/%0A%0Ametablogapi/3323.end-to-end-flow_6202B100.png)

Сценарий 2. Контракт выбора файлов в окне сохранения

Контракт выбора файлов в окне сохранения позволяет вашему приложению служить местом сохранения для приложений под Windows 8. Например, благодаря реализации контракта выбора файлов в окне сохранения в приложении SkyDrive, я могу сохранять файлы напрямую в SkyDrive из любого другого приложения для Windows 8. Таким образом, я могу добавлять файлы в SkyDrive, оставаясь в текущем приложении, а также помещать в SkyDrive файлы, которые могут быть недоступны для самого приложения SkyDrive (поскольку SkyDrive может не иметь доступа к расположению, используемому определенным приложением для хранения файлов).

Как упоминалось выше, для реализации контракта выбора файлов в окне сохранения необходимо, чтобы в приложении уже был реализован контракт выбора файлов в окне открытия. Тогда пользователь сможет выбирать файлы в тех же расположениях, где он их сохранял.

После того, как вы включили в свое приложение контракт выбора файлов в окне сохранения, оно может запускаться и отображаться в средстве выбора файлов в режиме сохранения. Точка входа в ваше приложение отображается в меню выбора файлов каждый раз, когда пользователь сохраняет тип файла, поддерживаемый вашим приложением. Как и в случае контракта выбора файлов в окне открытия, ваше приложение отображается в области просмотра средства выбора файлов, когда оно запущено:

Приложение SkyDrive, отображаемое внутри средства выбора файлов для реализации контракта выбора файлов в окне сохранения

Приложение SkyDrive, отображаемое внутри средства выбора файлов для реализации контракта выбора файлов в окне сохранения

Реализация контракта

Поскольку вы уже реализовали контракт выбора файлов в окне открытия, процесс реализации контракта выбора файлов в окне сохранения будет вам знаком (для них используется одно Краткое руководство). Первым делом необходимо настроить свое приложение для отображения расположений для сохранения файлов. Использование существующего представления, созданного для контракта выбора файлов в окне открытия, позволяет сэкономить время и обеспечивает согласованность с другими представлениями вашего приложения. На практике, простейший способ заключается в повторном использовании представления для выбора файлов в окне открытия и удалении кода подборки.

документы_skydrive

Приложение SkyDrive, использующее для средства выбора файлов в окне сохранения то же представление, что и в основном приложении

После сохранения файла пользователем (вы получите событие TargetFileRequested) проверьте имя файла и расширение (используя свойство FileName), чтобы убедиться, что они допустимы для вашего приложения. Если это не так, вы можете отобразить сообщение об ошибке в соответствии с рекомендациями по взаимодействию с пользователем . Если все правильно, вы создаете новый объект StorageFile и передаете его средству выбора файлов, которое затем передает его приложению, записывающему содержание этого объекта (то есть приложению, вызвавшему средство выбора файлов). Вот фрагмент кода, иллюстрирующий этот процесс:

JavaScript

 function onTargetFileRequested (e) {
  

 var request = e.request;
   var deferral = e.request.getDeferral();
   if 

(doesfileExist(saveUI.fileName)) {
      var dialog = new Windows.UI.Popups.MessageDialog("The location already has a file named " + saveUI.fileName + ".", 

"Replace the existing file?");
      dialog.commands.append

(new Windows.UI.Popups.UICommand("Replace", function () {
         

createFileAndFinishRequest(request, deferral)
      }));
      dialog.commands.append(new Windows.UI.Popups.UICommand("Cancel", function () {
         // Cancel save by setting targetFile to null
         request.targetFile = null;
         deferral.complete();
      }));
      dialog.showAsync().done();
   } else {
      createFileAndFinishRequest(request, deferral);
   }
}
function createFileAndFinishRequest(request, deferral) {
   

_currentLocalFolder.createFileAsync(saveUI.fileName, Windows.Storage.CreationCollisionOption.replaceExisting).done


(function (newFile) {
      // Return the empty placeholder file so the calling app can add the file contents
      request.targetFile = 

newFile;
      deferral.complete();
   });
}

C#

 async void OnTargetFileRequested

(FileSavePickerUI sender, TargetFileRequestedEventArgs args)
{
   var request = args.Request;
   var 

deferral = request.GetDeferral();
   if (DoesFileExist

(_saveUI.FileName))
   {
      var dialog = new MessageDialog("The location already has a file named " + _saveUI.FileName + ".", "Replace 
 the existing file?");     dialog.Commands.Add(new UICommand("Replace", (command) =>
      {
         

CreateFileAndFinishRequest(request, deferral);
      }));
      dialog.Commands.Add(new UICommand("Cancel", (command) =>
      

{
         request.TargetFile = null;
         deferral.Complete

();
      }));
      await dialog.ShowAsync();
   }
   else
   {
      CreateFileAndFinishRequest(request, deferral);
   }
}
async void CreateFileAndFinishRequest(TargetFileRequest request, TargetFileRequestDeferral 

deferral)
{
   request.TargetFile = await _currentFolder.CreateFileAsync(_fileSavePickerUI.FileName, 

CreationCollisionOption.
ReplaceExisting);   deferral.Complete();
}

Создание пользовательского интерфейса сохранения

Как и в случае контракта выбора файлов в окне открытия, важным компонентом подписки на контракт выбора файлов в окне сохранения является предоставление пользовательского интерфейса, соответствующего индивидуальному стилю вашего приложения. Вот несколько простых способов реализовать контракты выбора файлов в окне сохранения в соответствии с правилами:

  • Фильтрация представления. Если пользователь выбирает тип файла в списке типов файлов средства выбора файлов (вы получаете событие FileNameChanged), обновите свое представление, чтобы отображались только файлы выбранного типа. (№1 на следующей схеме.)
  • Обработка ошибок. Проверьте, являются ли имя файла, тип файла и расположение, указанные пользователем для сохранения, допустимыми. Если нет, выведите на экран сообщение об ошибке и предоставьте пользователю возможность решить проблему. Отображайте сообщения об ошибках в том же стиле и с теми же индивидуальными особенностями, что и сообщения об ошибках в основном приложении (необходимо также следовать правилам вывода сообщений об ошибках). (№2 на следующей схеме.)
  • Имя файла. Автоматически заполняйте имя файла (с помощью метода TrySetFileName), когда пользователь выбирает файл на странице сохранения. (№3 на следующей схеме.)

[![Обзор пользовательского интерфейса приложения SkyDrive, реализующего контракт выбора файлов в окне сохранения](https://blogs.msdn.com/cfs-%0A%0Afile.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-51-31-%0A%0Ametablogapi/5126.skydrive_5F00_replace_5F00_thumb_5F00_2BB188F1.png "Обзор пользовательского интерфейса

приложения SkyDrive, реализующего контракт выбора файлов в окне сохранения")](https://msdntnarchive.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/51/31/%0A%0Ametablogapi/4718.skydrive_replace_19D4F524.png)

Обзор пользовательского интерфейса приложения SkyDrive, реализующего контракт выбора файлов в окне сохранения

Комплексный процесс

Подводя итоги, рассмотрим комплексный процесс реализации контракта выбора файлов в окне сохранения. Как и на схеме для контракта выбора файлов в окне открытия, на этой схеме приложение, реализующее контракт выбора файлов (например, SkyDrive), называется "Providing app" (предоставляющее приложение).

[![Обзор процесса реализации контракта выбора файлов в окне сохранения](https://msdntnarchive.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/51/31/%0A%0Ametablogapi/2148.file-save-picker-flow_thumb_794DB571.png "Обзор процесса реализации

контракта выбора файлов в окне сохранения")](https://msdntnarchive.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/51/31/%0A%0Ametablogapi/2063.file-save-picker-flow_006CF1EA.png)

Сценарий 3. Контракт обновления кэшированных файлов

Контракт обновления кэшированных файлов — это способ, позволяющий вашему приложению поддерживать файлы в актуальном состоянии, когда они обновляются другими приложениями для Windows 8. Что это означает? Давайте снова обратимся к приложению SkyDrive. Благодаря тому, что приложение SkyDrive реализует контракт обновления кэшированных файлов, оно может гарантировать, что любой используемый мной файл (размещенный в SkyDrive) поддерживается в актуальном состоянии, и все внесенные мной изменения загружаются в SkyDrive. Представьте, что я использую мой любимый фоторедактор и хочу устранить эффект "красных глаз" в фотографии, сохраненной в SkyDrive. Я открываю средство выбора файлов в фоторедакторе и выбираю фотографию из приложения SkyDrive. Затем я устраняю эффект "красных глаз", и фоторедактор сохраняет мои изменения. Благодаря реализации контракта обновления кэшированных файлов эти изменения автоматически отправляются в SkyDrive. В сущности все дополнительные изменения, вносимые в файл, будут отправляться в SkyDrive в течение всего жизненного цикла этого файла. Мне никогда не придется вручную экспортировать или загружать мои изменения в SkyDrive — контракт обновления кэшированных файлов позволяет файлам в SkyDrive быть такими же, как файлы на моем локальном компьютере, где у меня всегда есть новейшая копия, которую я могу обновить в любой момент.

Этот контракт специально создан для приложений, служащих основным местом хранения, которое постоянно используется для сохранения файлов и доступа к ним. Для большинства приложений контракт обновления кэшированных файлов не нужен. Этот контракт требует больших усилий по управлению состояниями, обработке сложных потоков данных, разрешению конфликтов и разработке интерфейса, поэтому реализовать его непросто. Если бы контракты распределялись по разрядам, этот контракт считался бы продвинутым.

После реализации данного контракта ваше приложение активируется (но необязательно выводится на экран) каждый раз, когда необходимо обновить поддерживаемый им файл. Ваше приложение может быть активировано для этой цели в любой момент, но управляет всеми случаями активации система, а не пользователь. Например, если пользователь сохраняет данные в файл, обслуживаемый вашим приложением, система активирует ваше приложение, чтобы вы могли правильно его обработать (например, загрузить изменения в вашу облачную службу).

Реализация контракта

Чтобы начать реализацию контракта обновления кэшированных файлов, следуйте рекомендациям из Краткого руководства. После реализации этого контракта в приложении, оно будет автоматически активироваться для обработки изменений в обслуживаемых файлах.

Необходимо сообщить системе, какие объекты StorageFile вы обслуживаете. Вы можете задать разрешения на чтение и запись и управлять тем, как и когда выполняется активация вашего приложения для обслуживания файла, с помощью метода setUpdateInformation. В общем случае лучше задавать эту информацию для каждого файла, выбираемого пользователем из вашего приложения с использованием контракта выбора файлов в окне открытия или сохраняемого в вашем приложении с использованием контракта выбора файлов в окне сохранения. Код на C#, C++ и JavaScript для поддержки контракта обновления кэшированных файлов можно найти в нашем примере реализации контрактов выбора файлов в пакете SDK.

Кроме того, при реализации контракта обновления кэшированных файлов вам может потребоваться запросить у пользователя учетные данные или обработать конфликт версий перед обслуживанием файла. В таких случаях вы можете сообщить системе, что требуется пользовательский интерфейс, и ваше приложение будет запущено внутри средства выбора файлов.

учетные_данные_skydrive

Приложение SkyDrive, запрашивающее учетные данные во время операции обновления кэшированных файлов

В дополнение к параметрам, которые задаются вашим приложением, приложение, запрашивающее обновление или сохраняющее файл, может управлять частью процесса обновления кэшированных файлов. В частности, в некоторых случаях вызывающее приложение может блокировать отображение пользовательского интерфейса вашего приложения. Возможность выбора вашему приложению не предоставляется. Просто происходит сбой вызова, если вызывающее приложение пытается обновить или сохранить файл, а вашему приложению требуется отобразить пользовательский интерфейс для выполнения запроса.

Во время этого процесса можно использовать перечисление UIStatus, чтобы узнать, какое действие вы обрабатываете.

Создание пользовательского интерфейса обновления и сохранения

Хотя часть контракта обновления кэшированных файлов, связанная с пользовательским интерфейсом, относительно мала, обеспечьте соответствие своего приложения следующим правилам:

  • Отображение пользовательского интерфейса. Запрашивайте пользовательский интерфейс только в тех случаях, когда участие пользователя абсолютно необходимо (учетные данные, конфликты файлов и т. д.). Возвращайте случаи сбоя вызывающему приложению, которое сообщит пользователю о том, что выполнить обновление или сохранение не удалось. Кроме того, выводите на экран информационные сообщения (например, "Файл успешно сохранен") только в своем основном приложении (если необходимо) при следующем его запуске, а не в интерфейсе средства выбора файлов или других элементах интерфейса (например, всплывающих уведомлениях).
  • Статус. Если ваше приложение обрабатывает большое количество обновлений и сохранений, возможно, стоит отображать ход выполнения каждой операции в пользовательском интерфейсе основного приложения. Тогда пользователи смогут отслеживать ход выполнения и устранять проблемы.

Комплексный процесс

Подводя итоги, рассмотрим комплексный процесс реализации контракта обновления кэшированных файлов. Как и на предыдущих схемах, на этой схеме приложение, реализующее контракт выбора файлов (например, SkyDrive), называется "Providing app" (предоставляющее приложение).

[![процесс реализации контракта обновления кэшированных файлов](https://msdntnarchive.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/51/31/%0A%0Ametablogapi/7444.end-to-end-cahced-file-updater_thumb_3FCAA57A.png "процесс

реализации контракта обновления кэшированных файлов")](https://msdntnarchive.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/51/31/%0A%0Ametablogapi/1184.end-to-end-cahced-file-updater_5FE5B237.png)

Заключение

В этой записи я рассказал о контрактах выбора файлов и показал, как можно использовать их в своем приложении, чтобы открыть перед пользователями новые возможности в Windows 8. Контракт выбора файлов в окне открытия предоставляет пользователям отличную начальную точку, позволяющую использовать файлы, которые они хранят, создают и обрабатывают в вашем приложении, в других приложениях для Windows 8. Контракт выбора файлов в окне сохранения и контракт обновления кэшированных файлов позволяют вашему приложению стать участником большего количества сценариев Windows 8, поскольку ваше приложение предоставляет более развитые возможности.

Вот несколько важных моментов, о которых следует помнить:

  • Контракты выбора файлов образуют последовательность. Начните с контракта выбора файлов в окне открытия, затем перейдите к контракту выбора файлов в окне сохранения, а затем (при необходимости) — к контракту обновления кэшированных файлов.
  • Обеспечьте отражение индивидуальных особенностей вашего приложения. Пользователи будут знакомы с обычной версией вашего приложения, поэтому обеспечьте представление индивидуальных особенностей вашего приложения, его внешнего вида и удобства использования, а также возможностей навигации в версии, отображаемой в средстве выбора файлов.
  • Следуйте рекомендациям по взаимодействию с пользователем, которые позволят продемонстрировать индивидуальные особенности вашего приложения, а также использовать все возможности, предоставляемые средством выбора файлов. Тогда пользователи получат первоклассный интерфейс и согласованный опыт использования вашего приложения в средстве выбора файлов.

Чтобы получить дополнительную информацию о контрактах выбора файлов в Windows 8, вы можете перейти по приведенным ниже ссылкам или задать вопросы на наших форумах.

Ссылка

Тип

Краткое описание

Руководство и контрольный список для контрактов выбора файлов

Рекомендации по взаимодействию с пользователем

Руководство по реализации контрактов выбора файлов

Краткое руководство: интеграция с контрактами средства выбора файлов

Краткое руководство

Инструкции по внедрению контрактов выбора файлов в свое приложение

Windows.Storage.Pickers.Provider

Справочные материалы по API

Справочная документация по контракту выбора файлов в окне открытия и контракту выбора файлов в окне сохранения

Пространство имен Windows.Storage.Provider

Справочные материалы по API

Справочная документация по контракту обновления кэшированных файлов

Контракты выбора файлов

Пример кода

Демонстрация использования контракта выбора файлов в окне открытия, контракта выбора файлов в окне сохранения и контракта обновления кэшированных файлов

Спасибо за внимание!

-- Скотт Хугерверф (Scott Hoogerwerf), старший руководитель программы, рабочая группа по взаимодействию с пользователями Windows

Соавторы: Дерек Гебхард (Derek Gebhard)