Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, Windows'ta Uygulama Eylemleri sağlayıcı uygulamasından bir bulut hizmeti sağlayıcısı tarafından barındırılan uzak dosyalar için desteğin nasıl uygulandığı açıklanmaktadır. RemoteFileActionEntity sınıfı tarafından C# ile temsil edilen RemoteFile varlık türü, dosyalar ve sürücüler için benzersiz kimlikler gibi birçok bulut dosya depolama sağlayıcısı tarafından kullanılan özellikler sağlar. Bu sayfadaki örnekler, bulut dosyası özelliklerine nasıl erişileceğini gösterir, ancak uzak dosyaları almaz veya işlemez çünkü bu tür işlemler farklı uygulamalar ve sağlayıcılar arasında farklılık gösterebilir. Eylemler için giriş ve çıkış olarak kullanılabilecek farklı varlık türleri hakkında daha fazla bilgi için bkz. Windows'da Uygulama Eylemleri için eylem tanımı JSON şeması.
Microsoft.AI.Actions kod oluşturmayı kullanarak uzak dosyaları işleme
Aşağıdaki örnek, kodunuzdaki .NET özniteliklerini temel alarak IActionProvider uygulamasını otomatik olarak oluşturan Microsoft.AI.Actions NuGet Paketini kullanan bir eylem sağlayıcısında uzak dosya desteğinin nasıl uygulanacağı gösterilmektedir ve eylemlerinizi temsil etmek için kesin olarak belirtilmiş sınıflar oluşturmanıza olanak sağlar. **Microsoft.AI.Actions NuGet paketini kullanarak eylem sağlayıcısı uygulaması oluşturma hakkında bilgi için bkz. Windows'ta Uygulama Eylemleri'ni kullanmaya başlama.
Bu eylem tarafından desteklenen bulut sağlayıcılarını belirtmek için WindowsActionInputCombination özniteliğinde where yan tümcesi kullanıldığını unutmayın. Eyleminizin desteklenmeyen senaryolar için kullanıcılara sunulmasını önlemek için bunun gibi where yan tümcelerini kullanmak her zaman iyi bir fikirdir.
[ActionProvider]
public sealed class MyActionsProvider
{
[WindowsAction(Description = "Summarize a remote file", Icon = "ms-resource://Files/Assets/LockScreenLogo.png", UsesGenerativeAI = false)]
[WindowsActionInputCombination(Description = "Summarize ${RemoteFileToSummarize}",
Inputs = ["RemoteFileToSummarize"],
Where = ["${RemoteFileToSummarize.SourceId} == 'Contoso.Cloud' || ${RemoteFileToSummarize.SourceId} == 'Fabrikam.Cloud'"])]
public async Task<SummarizeRemoteFileResult> SummarizeRemoteFile([Entity(Name = "RemoteFileToSummarize")] RemoteFileActionEntity remoteFile, InvocationContext context)
{
var summary = "";
var remoteFileContents = "";
switch (remoteFile.SourceId)
{
case "Contoso.Cloud":
// Retrieve the file contents using the properties used by the "Contoso" service
remoteFileContents = GetContosoCloudFile(remoteFile.AccountId, remoteFile.DriveId, remoteFile.FileId);
summary = SummarizeFile(remoteFileContents);
break;
case "Fabrikam.Cloud":
// Retrieve the file contents using the properties used by the "Fabrikam" service
remoteFileContents = GetFabrikamCloudFile(remoteFile.AccountId, remoteFile.SourceUri);
summary = SummarizeFile(remoteFileContents);
break;
}
var entityFactory = context.EntityFactory;
return new SummarizeRemoteFileResult
{
Text = entityFactory.CreateTextEntity(summary)
};
}
public record SummarizeRemoteFileResult
{
public required TextActionEntity Text { get; init; }
}
Uzak dosya girişiyle JSON eylem tanımı
Aşağıdaki kod örneğinde RemoteFile varlığını kullanan bir eylem bildiren bir eylem tanımı JSON dosyası gösterilmektedir. JSON eylem tanımı dosyanızı otomatik olarak oluşturmak için Microsoft.AI.Actions NuGet kullanıyorsanız, önceki bölümde gösterildiği gibi eylemi uyguladıktan sonra dosya böyle görünür.
{
"version": 3,
"actions": [
{
"id": "ExampleAppActionProvider.MyActionsProvider.SummarizeRemoteFile",
"description": "Summarize a remote file",
"icon": "ms-resource://Files/Assets/LockScreenLogo.png",
"usesGenerativeAI": false,
"allowedAppInvokers" : ["*"],
"inputs": [
{
"name": "RemoteFileToSummarize",
"kind": "RemoteFile"
}
],
"inputCombinations": [
{
"inputs": [
"RemoteFileToSummarize"
],
"where": [
"${RemoteFileToSummarize.SourceId} == 'Contoso.Cloud' || ${RemoteFileToSummarize.SourceId} == 'Fabrikam.Cloud'"
],
"description": "Summarize ${RemoteFileToSummarize}"
}
],
"outputs": [
{
"name": "Text",
"kind": "Text"
}
],
"invocation": {
"type": "COM",
"clsid": "00001111-aaaa-2222-bbbb-3333cccc4444"
}
}
]
}
IActionProvider ile uzak dosyaları işleme
Bu bölüm, IActionProvider arabirimini el ile uygularken bir RemoteFile varlığını giriş olarak kabul eden bir eylemin nasıl uygulandığını gösterir. Ayrıca, projenize önceki bölümde gösterilen gibi bir eylem tanımı JSON dosyasını el ile eklemeniz gerekir. Microsoft.AI.Actions gode oluşturma özelliğini kullanmadan COM tabanlı eylem sağlayıcısı uygulama hakkında daha fazla bilgi için bkz. IActionProvider'ı el ile uygulama.
public IAsyncAction InvokeAsync(ActionInvocationContext context)
{
return InvokeAsyncHelper(context).AsAsyncAction();
}
async Task InvokeAsyncHelper(ActionInvocationContext context)
{
NamedActionEntity[] inputs = context.GetInputEntities();
var actionId = context.ActionId;
switch (actionId)
{
case "ExampleAppActionProvider.MyActionsProvider.SummarizeRemoteFile":
var summary = "";
var remoteFileContents = "";
foreach (NamedActionEntity inputEntity in inputs)
{
if (inputEntity.Name.Equals("RemoteFileToSummarize", StringComparison.Ordinal))
{
var remoteFile = (RemoteFileActionEntity)inputEntity.Entity;
switch (remoteFile.SourceId)
{
case "Contoso.Cloud":
// Retrieve the file contents using the properties used by the "Contoso" service
remoteFileContents = GetContosoCloudFile(remoteFile.AccountId, remoteFile.DriveId, remoteFile.FileId);
summary = SummarizeFile(remoteFileContents);
break;
case "Fabrikam.Cloud":
// Retrieve the file contents using the properties used by the "Fabrikam" service
remoteFileContents = GetFabrikamCloudFile(remoteFile.AccountId, remoteFile.SourceUri);
summary = SummarizeFile(remoteFileContents);
break;
}
}
}
TextActionEntity result = context.EntityFactory.CreateTextEntity(summary);
context.SetOutputEntity("Text", result);
break;
default:
break;
}
}