Létrehozás Power Automate asztali műveletekhez az Actions SDK használatával
Ez a cikk azt ismerteti, hogyan hozhat létre egyéni műveleteket az asztali környezetben Power Automate .
Egyéni műveletek létrehozása
Fontos
A fenntartott kulcsszavak nem használhatók műveletnévként és/vagy művelettulajdonságként. A fenntartott kulcsszavak műveletnévként és/vagy művelettulajdonságként való használata hibás viselkedést eredményez. További információ: Fenntartott kulcsszavak az asztali folyamatokban
Először hozzon létre egy új osztálykönyvtári (.NET-keretrendszer) projektet. Válassza .NET-keretrendszer 4.7.2-es verziót.
Művelet létrehozása a létrehozott egyéni modulban:
- Törölje az automatikusan létrehozott Class1.cs fájlt.
- Hozzon létre egy új osztályt a projekten belül, amely az egyéni műveletet képviseli, és adjon neki egy külön nevet.
- Foglalja bele a Microsoft.PowerPlatform.PowerAutomate.Desktop.Actions.SDK és a Microsoft.PowerPlatform.PowerAutomate.Desktop.Actions.SDK.Attributes névtereket.
- A műveleteket képviselő összes osztálynak rendelkeznie kell egy [Action] attribútummal az osztály felett.
- Az osztálynak nyilvános hozzáféréssel kell rendelkeznie, és örökölnie kell az ActionBase osztálytól.
using System;
using Microsoft.PowerPlatform.PowerAutomate.Desktop.Actions.SDK;
using Microsoft.PowerPlatform.PowerAutomate.Desktop.Actions.SDK.Attributes;
namespace Modules.MyCustomModule
{
[Action(Id = "CustomAction")]
public class CustomAction : ActionBase
{
public override void Execute(ActionContext context)
{
throw new NotImplementedException();
}
}
}
A legtöbb művelet paraméterekkel rendelkezik (bemenet vagy kimenet). A bemeneti és kimeneti paramétereket klasszikus C#-tulajdonságok képviselik.
Minden tulajdonságnak rendelkeznie kell egy megfelelő C# attribútummal, vagy [InputArgument]
[OutputArgument]
vagy a típusának és az asztali megjelenítés módjának Power Automate diktálásához.
A bemeneti argumentumok alapértelmezett értékekkel is rendelkezhetnek.
using System.ComponentModel;
using Microsoft.PowerPlatform.PowerAutomate.Desktop.Actions.SDK;
using Microsoft.PowerPlatform.PowerAutomate.Desktop.Actions.SDK.Attributes;
namespace Modules.MyCustomModule
{
[Action(Id = "CustomAction")]
public class CustomAction : ActionBase
{
[InputArgument, DefaultValue("Developer")]
public string InputName { get; set; }
[OutputArgument]
public string DisplayedMessage { get; set; }
public override void Execute(ActionContext context)
{
DisplayedMessage = $"Hello, {InputName}";
}
}
}
Leírások hozzáadása egyéni műveletekhez
Adja meg a modulok és műveletek leírását és rövid nevét, hogy az RPA-fejlesztők tudják, hogyan használhatják ki őket a legjobban.
Power Automate A Desktop Designer rövid neveket és leírásokat jelenít meg.
Létrehozhat egy "Resources.resx" fájlt a modulprojekt Tulajdonságok mappájában. Az új ".resx" fájl neve "".Resources.resx
A modulok és műveletek leírásának formátuma a következő:
"Module_Description" vagy "Action_Description" és "Module_FriendlyName" vagy "Action_FriendlyName" a név mezőben. Az értékmezőben szereplő leírás.
Azt is javasoljuk, hogy adjon meg leírásokat és rövid neveket a paraméterekhez. Formátumuk a következő: "Action_Parameter_Description", "Action_Parameter_FriendlyName".
Tipp.
Javasoljuk, hogy jelölje meg, hogy mit ír le a megjegyzés mezőben (pl. Modul, Művelet stb.)
Ezek a FriendlyName és a Description attribútumok [InputArgument]
tulajdonságaival is beállíthatók. [OutputArgument]
[Action]
Az alábbi példa Resources.resx egy egyéni modul fájlját mutatja be.
Egy másik módja annak, hogy gyorsan adjon rövid neveket és leírásokat a műveletekhez és paraméterekhez, a FriendlyName és a Description tulajdonság használata a [Action], [InputArguement] and [OutputArguement] attribútumokban.
Feljegyzés
Ha rövid nevet és leírást szeretne hozzáadni egy modulhoz, módosítania kell a megfelelő .resx fájlt, vagy hozzá kell adnia a megfelelő C#-attribútumokat.
Erőforrások honosítása
Az asztali modulok Power Automate alapértelmezett nyelve az angol.
A Resources.resx fájlnak angol nyelvűnek kell lennie.
Bármely más nyelv hozzáadható extra erőforrásokkal.{locale} resx fájlok honosításhoz. Például, Resources.fr.resx.
Egyéni modulkategóriák
A modulok kategóriákat és alkategóriákat tartalmazhatnak a jobb műveletszervezés érdekében.
Az egyéni műveletek kategóriákban, alkategóriákban való elkülönítéséhez módosítsa az egyéni műveletet képviselő osztály előtti [Action] attribútumot a következő módon:
[Action(Category = "category.subcategory")]
Feljegyzés
Egy modulnak több kategóriája is lehet. Hasonlóképpen, a kategóriák alkategóriákból is állhatnak. Ez a szerkezet határozatlan lehet.
Az Order tulajdonság határozza meg, hogy a tervezőben milyen sorrendben jelenjen meg a műveletek előnézete.
Action1
a "TestCategory" kategóriába tartozik, és ez a modul első művelete (így egy példával magyarázza el a sorrendet és a kategóriát).
[Action(Id = "Action1", Order = 1, Category = "TestCategory")]
Feltételes műveletek
A feltételes műveletek olyan műveletek, amelyek "Igaz" vagy "Hamis" értéket adnak vissza. A szabványos könyvtár asztali műveletének "Ha létezik fájl" Power Automate jó példája a feltételes műveletnek.
Példa feltételes műveletre:
using Microsoft.PowerPlatform.PowerAutomate.Desktop.Actions.SDK;
using Microsoft.PowerPlatform.PowerAutomate.Desktop.Actions.SDK.Attributes;
using System;
using System.ComponentModel;
namespace Modules.CustomModule
{
[ConditionAction(Id = "ConditionalAction1", ResultPropertyName = nameof(Result))]
[Throws("ActionError")] // TODO: change error name (or delete if not needed)
public class ConditionalAction1 : ActionBase
{
#region Properties
public bool Result { get; private set; }
[InputArgument]
public string InputArgument1 { get; set; }
#endregion
#region Methods Overrides
public override void Execute(ActionContext context)
{
try
{
//TODO: add action execution code here
}
catch (Exception e)
{
if (e is ActionException) throw;
throw new ActionException("ActionError", e.Message, e.InnerException);
}
}
#endregion
}
}
Figyelje meg az Eredmény logikai változót.
A Ha a fájl létezik műveletnek nincs kimeneti argumentuma. Amit visszaad, az igaz vagy hamis, attól függően, hogy mit tartalmaz az Result logikai változó .
Egyéni műveletválasztók
Vannak olyan speciális esetek, amikor egy egyéni műveletnek egynél több változattal kell rendelkeznie.
Példa erre az "Excel indítása" művelet, a szabványos művelettárból.
Az "üres dokumentummal" választóval a folyamat elindít egy üres Excel-dokumentumot, míg az "és nyissa meg a következő dokumentumot" beállítás használatához meg kell nyitni a fájl elérési útját.
A fent említett két művelet az "Excel indítása" alapművelet két választója.
Egyéni műveletek létrehozásakor nem kell újraírnia a funkciókat.
Létrehozhat egyetlen "alap" műveletet, beállíthatja annak bemeneti és kimeneti paramétereit, majd műveletválasztók használatával kiválaszthatja, hogy mi legyen látható az egyes ízekben.
A műveletválasztókon keresztül egy absztrakciós szint adható hozzá egyetlen művelethez, lehetővé téve bizonyos funkciók visszakeresését egyetlen "alapműveletből" anélkül, hogy újra kellene írni a kódot, hogy minden alkalommal ugyanannak a műveletnek egy új változatát hozza létre.
Gondoljon úgy a választókra, mint választási lehetőségekre, amelyek egyetlen műveletet szűrnek, és csak a szükséges információkat jelenítik meg a megfelelő választók szerint.
Új műveletválasztó létrehozásához először hozzon létre egy alapműveletet, amelyet a választók használhatnak.
A központi művelethez bemeneti C#-argumentumként logikai vagy felsorolás tulajdonságra van szükség.
Ennek a tulajdonságnak az értéke határozza meg, hogy melyik választót használja.
A leggyakoribb módszer a felsorolás használata. Különösen akkor, ha kettőnél több választóra van szükség, az enumok az egyetlen lehetőség.
Két szelektor esetben logikai értékek használhatók.
Ennek a tulajdonságnak, más néven megszorítási argumentumnak, alapértelmezett értékkel kell rendelkeznie.
A központi akció klasszikus akciónak minősül.
Figyelje meg, hogy az első tulajdonság (bemeneti argumentum) egy felsorolás. A tulajdonság értéke alapján a megfelelő választó aktívvá válik.
Feljegyzés
Az argumentumok kívánt módon történő rendezéséhez állítsa be az Order értéket az InputArgument attribútum mellett.
using System.ComponentModel;
using Microsoft.PowerPlatform.PowerAutomate.Desktop.Desktop.Actions.SDK;
using Microsoft.PowerPlatform.PowerAutomate.Desktop.Desktop.Actions.SDK.Attributes;
namespace Modules.CustomModule
{
[Action(Id = "CentralCustomAction")]
public class CentralCustomAction : ActionBase
{
#region Properties
[InputArgument, DefaultValue(SelectorChoice.Selector1)]
public SelectorChoice Selector { get; set; }
[InputArgument(Order = 1)]
public string FirstName { get; set; }
[InputArgument(Order = 2)]
public string LastName { get; set; }
[InputArgument(Order = 3)]
public int Age { get; set; }
[OutputArgument]
public string DisplayedMessage { get; set; }
#endregion
#region Methods Overrides
public override void Execute(ActionContext context)
{
if (Selector == SelectorChoice.Selector1)
{
DisplayedMessage = $"Hello, {FirstName}!";
}
else if (Selector == SelectorChoice.Selector2)
{
DisplayedMessage = $"Hello, {FirstName} {LastName}!";
}
else // The 3rd Selector was chosen
{
DisplayedMessage = $"Hello, {FirstName} {LastName}!\nYour age is: {Age}";
}
}
#endregion
} // you can see below how to implement an action selector
}
Egyéni műveletválasztók felsorolások használatával
Ebben a példában három választót hoz létre. Egy egyszerű felsorolás minden alkalommal diktálja a megfelelő választót:
public enum SelectorChoice
{
Selector1,
Selector2,
Selector3
}
A szelektorokat osztályok képviselik.
Ezeknek az osztályoknak öröklik az ActionSelector<TBaseActionClass>
osztályt.
Feljegyzés
A TBaseActionClass az alapműveletosztály neve.
A UseName() metódusban a műveletválasztó neve deklarálva van. Ez az erőforrások feloldására szolgáló művelet neve.
public class Selector1 : ActionSelector<CentralCustomAction>
{
public Selector1()
{
UseName("DisplayOnlyFirstName");
Prop(p => p.Selector).ShouldBe(SelectorChoice.Selector1);
ShowAll();
Hide(p => p.LastName);
Hide(p => p.Age);
// or
// Show(p => p.FirstName);
// Show(p => p.DisplayedMessage);
}
}
Feljegyzés
A választóosztályok nem deklarálhatók műveletként. Az egyetlen cselekvés a központi. A szelektorok szűrőként működnek.
Ebben a konkrét példában csak az egyik argumentumot szeretnénk megjeleníteni, így a többit kiszűrjük. Hasonlóképpen a Selector2 esetében:
public class Selector2 : ActionSelector<CentralCustomAction>
{
public Selector2()
{
UseName("DisplayFullName");
Prop(p => p.Selector).ShouldBe(SelectorChoice.Selector2);
ShowAll();
Hide(p => p.Age);
}
}
És Selector3 osztályok:
public class Selector3 : ActionSelector<CentralCustomAction>
{
public Selector3()
{
UseName("DisplayFullDetails");
Prop(p => p.Selector).ShouldBe(SelectorChoice.Selector3);
ShowAll();
}
}
A végső végrehajtás a központi műveletben található Execute(ActionContext context) metódussal érhető el. A választó alapján megjelennek a megfelelő szűrt értékek.
public override void Execute(ActionContext context)
{
if (Selector == SelectorChoice.Selector1)
{
DisplayedMessage = $"Hello, {FirstName}!";
}
else if (Selector == SelectorChoice.Selector2)
{
DisplayedMessage = $"Hello, {FirstName} {LastName}!";
}
else // The 3rd Selector was chosen
{
DisplayedMessage = $"Hello, {FirstName} {LastName}!\nYour age is: {Age}";
}
}
Egyéni műveletválasztók logikai használatával
Az alábbi példa egy olyan példát mutat be, amely logikai használ felsorolások helyett.
using System.ComponentModel;
using Microsoft.PowerPlatform.PowerAutomate.Desktop.Actions.SDK;
using Microsoft.PowerPlatform.PowerAutomate.Desktop.Actions.SDK.ActionSelectors;
using Microsoft.PowerPlatform.PowerAutomate.Desktop.Actions.SDK.Attributes;
namespace Modules.CustomModule
{
[Action]
public class CentralCustomActionWithBoolean : ActionBase
{
#region Properties
[InputArgument, DefaultValue(true)]
public bool TimeExpired { get; set; }
[InputArgument]
public string ElapsedTime { get; set; }
[InputArgument]
public string RemainingTime { get; set; }
[OutputArgument]
public string DisplayedMessage { get; set; }
#endregion
#region Methods Overrides
public override void Execute(ActionContext context)
{
DisplayedMessage = TimeExpired ? $"The timer has expired. Elapsed time: {ElapsedTime}" : $"Remaining time: {RemainingTime}";
}
#endregion
}
public class NoTime : ActionSelector<CentralCustomActionWithBoolean>
{
public NoTime()
{
UseName("TimeHasExpired");
Prop(p => p.TimeExpired).ShouldBe(true);
ShowAll();
Hide(p => p.RemainingTime);
}
}
public class ThereIsTime : ActionSelector<CentralCustomActionWithBoolean>
{
public ThereIsTime()
{
UseName("TimeHasNotExpired");
Prop(p => p.TimeExpired).ShouldBe(false);
ShowAll();
Hide(p => p.RemainingTime);
}
}
}
Egyéni műveletválasztók leírásának beállítása
A választók leírásának és összegzésének létrehozásához használja a következő formátumot az egyéni modul .resx fájljában.
SelectorName_Description
SelectorName_Summary
Ez a választóban is elvégezhető a WithDescription és a WithSummary metódussal.
Fontos
. DLL az egyéni műveleteket leíró fájlok, azok . DLL függőségeket és a mindent tartalmazó .cab fájlt megfelelően alá kell írni a szervezet által megbízhatónak ítélt digitális tanúsítvánnyal. A tanúsítványt minden olyan gépre telepíteni kell, amelyen egyéni műveletfüggőségekkel rendelkező asztali folyamat írt/módosított/hajtott végre, amelyek a megbízható legfelső szintű hitelesítésszolgáltatók alatt találhatók.
Egyéni modulazonosítók
Minden modulnak saját azonosítója van (szerelvény neve). Egyéni modulok létrehozásakor győződjön meg arról, hogy egyedi modulazonosítókat állít be. A modul szerelvénynevének beállításához módosítsa a szerelvény neve tulajdonságot a C#-projekt tulajdonságainak Általános szakaszában.
Figyelmeztetés:
Az azonos azonosítóval rendelkező modulok folyamatba való belefoglalása ütközéseket eredményez
Egyéni modulnév-konvenciók
Ahhoz, hogy az egyéni modulok olvashatók Power Automate legyenek az asztalon, az AssemblyName fájlnévnek az alábbi mintát követő fájlnévvel kell rendelkeznie:
?*.Modules.?*
Modules.?*
Például,Modulok . ContosoActions. DLL
A projektbeállításokban az AssemblyTitle határozza meg a modul azonosítóját. Csak alfanumerikus karaktereket és aláhúzásjeleket tartalmazhat, és betűvel kell kezdődnie.
Az egyéni modulon belüli összes DLL-fájl aláírása
Fontos
Kötelező, hogy az összes . DLL fájlok egy megbízható tanúsítvánnyal aláírt egyéni modult (generált szerelvényt és annak összes függőségét) tartalmaznak
Az egyéni modul létrehozásának véglegesítéséhez az összes generált . DLL fájlokat, amelyek a projekt bin/release vagy bin/Debug mappájában találhatók, alá kell írni.
Írja alá az összes . DLL fájlokat megbízható tanúsítvánnyal a következő parancs futtatásával (minden .DLL fájlhoz) egy fejlesztői parancssorban a következőhöz Visual Studio:
Írja alá a .dlls fájlokat egy megbízható tanúsítvány használatával a következő parancs futtatásával (minden DLL esetében) egy fejlesztői parancssorban a következőhöz Visual Studio:
Signtool sign /f {your certificate name}.pfx /p {your password for exporting the certificate} /fd
SHA256 {path to the .dll you want to sign}.dll
Vagy a következő parancs futtatásával (egy .ps1 Windows PowerShell-parancsfájl létrehozásával), amely végighalad az összes . DLL fájlokat, és mindegyiket aláírja a megadott tanúsítvánnyal:
Get-ChildItem {the folder where dll files of custom module exist} -Filter *.dll |
Foreach-Object {
Signtool sign /f {your certificate name}.pfx /p {your password for exporting the certificate} /fd SHA256 $_.FullName
}
Feljegyzés
A digitális tanúsítványnak exportálható személyes kulccsal és kódaláírási képességgel kell rendelkeznie
Mindent egy kabinetfájl csomagol
A. DLL egyéni műveleteket és azok összes függőségét (.DLL fájlokat) tartalmazó kabinetfájl (.cab) kell csomagolni.
Feljegyzés
A .cab fájl elnevezésekor kövesse a Windows operációs rendszer fájl- és mappaelnevezési konvencióját. Ne használjon üres szóközöket vagy speciális karaktereket, < > : " / \ | ? *
például.
Hozzon létre egy Windows PowerShell-parancsfájlt (.ps1), amely a következő sorokat tartalmazza:
param(
[ValidateScript({Test-Path $_ -PathType Container})]
[string]
$sourceDir,
[ValidateScript({Test-Path $_ -PathType Container})]
[string]
$cabOutputDir,
[string]
$cabFilename
)
$ddf = ".OPTION EXPLICIT
.Set CabinetName1=$cabFilename
.Set DiskDirectory1=$cabOutputDir
.Set CompressionType=LZX
.Set Cabinet=on
.Set Compress=on
.Set CabinetFileCountThreshold=0
.Set FolderFileCountThreshold=0
.Set FolderSizeThreshold=0
.Set MaxCabinetSize=0
.Set MaxDiskFileCount=0
.Set MaxDiskSize=0
"
$ddfpath = ($env:TEMP + "\customModule.ddf")
$sourceDirLength = $sourceDir.Length;
$ddf += (Get-ChildItem $sourceDir -Filter "*.dll" | Where-Object { (!$_.PSIsContainer) -and ($_.Name -ne "Microsoft.PowerPlatform.PowerAutomate.Desktop.Actions.SDK.dll") } | Select-Object -ExpandProperty FullName | ForEach-Object { '"' + $_ + '" "' + ($_.Substring($sourceDirLength)) + '"' }) -join "`r`n"
$ddf | Out-File -Encoding UTF8 $ddfpath
makecab.exe /F $ddfpath
Remove-Item $ddfpath
Ez a Windows PowerShell-parancsfájl ezután használható a .cab fájl létrehozására úgy, hogy meghívja azt a Windows PowerShellben, és biztosítja a következőket:
- A könyvtára a . DLL tömörítendő fájlokat.
- A létrehozott .cab fájl elhelyezésére szolgáló célkönyvtár.
Hívja meg a parancsfájlt a következő szintaxissal:
.\{name of script containing the .cab compression directions}.ps1 "{absolute path to the source directory containing the .dll files}" "{target dir to save cab}" {cabName}.cab
Példa:
.\makeCabFile.ps1 "C:\Users\Username\source\repos\MyCustomModule\bin\Release\net472" "C:\Users\Username\MyCustomActions" MyCustomActions.cab
Feljegyzés
- Győződjön meg arról, hogy a tényleges egyéni műveletek . DLL fájl a .cab fájl létrehozásakor a célzott elérési út gyökérszintjén van, nem pedig egy almappában.
- A .cab fájlt is alá kell írni. Az aláíratlan .cab fájlok és/vagy a bennük található aláíratlan .dll-fájlok nem használhatók az asztali folyamatokban, és hibát okoznak a felvétel során.