Kopīgot, izmantojot


Darbvirsmas darbību izveide Power Automate , izmantojot darbību SDK

Šajā rakstā ir aprakstīts, kā izveidot pielāgotas darbības Power Automate darbvirsmai.

Pielāgotu darbību izveide

Svarīgi

Rezervētos atslēgvārdus nevar izmantot kā darbību nosaukumus un/vai darbību rekvizītus. Rezervēto atslēgvārdu izmantošana par darbību nosaukumiem un/vai darbību īpašībām rada kļūdainu rīcību. Papildinformācija: Rezervētie atslēgvārdi darbvirsmas plūsmās

Sāciet ar jauna klases bibliotēkas (.NET Framework) projekta izveidi. Atlasiet .NET Framework versiju 4.7.2.

Lai izveidotu darbību izveidotajā pielāgotajā modulī:

  • Izdzēsiet automātiski ģenerēto Class1.cs failu.
  • Izveidojiet jaunu mācību priekšmetu savā projektā, lai attēlotu pielāgoto darbību, piešķirot tai atšķirīgu nosaukumu.
  • Iekļaujiet Microsoft.PowerPlatform.PowerAutomate.Desktop.Actions.SDK un Microsoft.PowerPlatform.PowerAutomate.Desktop.Actions.SDK.Attributes nosaukumvietas.
  • Visām klasēm, kas attēlo darbības, virs jūsu klases ir jābūt atribūtam [Darbība].
  • Klasei jābūt publiski pieejamai un mantotai no ActionBase klases.
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();
        }
    }
}

Lielākajai daļai darbību ir parametri (ievade vai izvade). Ievades un izvades parametrus attēlo klasiskie C# rekvizīti. Katram rekvizītam ir jābūt atbilstošam C# atribūtam, vai nu [InputArgument] , lai [OutputArgument] diktētu tā veidu un to, kā tas tiek attēlots Power Automate darbvirsmai. Ievades argumentiem var būt arī noklusējuma vērtības.

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}";
        }
    }
}

Aprakstu pievienošana pielāgotām darbībām

Pievienojiet moduļu un darbību aprakstu un draudzīgu nosaukumu, lai RPA izstrādātāji zinātu, kā tos vislabāk izmantot.

Power Automate Darbvirsmas noformētājam tiek rādīti draudzīgi nosaukumi un apraksti.

Jūs varat izveidot "Resources.resx" failu moduļa projekta mapē Properties. Jaunajam ".resx" failam jābūt ar nosaukumu "Resources.resx".

Moduļu un darbību aprakstu formātam jābūt šādam:

"Module_Description" vai "Action_Description" un "Module_FriendlyName" vai "Action_FriendlyName" attiecīgi nosaukuma laukā. Apraksts vērtības laukā.

Mēs arī iesakām sniegt aprakstus un draudzīgus parametru nosaukumus. To formātam jābūt šādam: "Action_Parameter_Description", "Action_Parameter_FriendlyName".

Resursu ekrānuzņēmums vienkāršai darbībai

Padoms

Komentāra laukā ieteicams norādīt, ko jūs aprakstāt (piemēram, Modulis, Darbība utt.)

Tos var iestatīt arī ar rekvizītiem FriendlyName un Description, [InputArgument]un [OutputArgument] [Action] atribūtiem.

Tālāk ir sniegts pielāgota moduļa faila piemērs Resources.resx .

Resursu ekrānuzņēmums

Vēl viens veids, kā darbībām un parametriem ātri pievienot draudzīgus nosaukumus un aprakstus, ir rekvizīti FriendlyName un Description sadaļā [Darbība] [InputArguement] un [OutputArguement] atribūti.

Piezīmes

Lai modulim pievienotu draudzīgu nosaukumu un aprakstu, jums ir jāmodificē attiecīgais .resx fails vai jāpievieno attiecīgie C# atribūti.

Kļūdu apstrādes pievienošana pielāgotām darbībām

Lai savā darbībā definētu pielāgotus izņēmumus, izmantojiet [Throws("ActionError")] atribūtu virs pielāgotās darbību klases. Katram izņēmuma gadījumam, ko vēlaties definēt, ir jābūt savam atribūtam.

Nozvejas blokā izmantojiet šādu kodu:

throw new ActionException("ActionError", e.Message, e.InnerException);

Pārliecinieties, ActionException vai nosaukums atbilst atribūtā Throws norādītajam vārdam. Izmantojiet throw new ActionException katram izņēmuma gadījumam un saskaņojiet to ar atbilstošo Throws atribūta nosaukumu. Visi izņēmumi, kas definēti ar atribūtu, Throws ir redzami noformētāja darbības kļūdu apstrādes cilnē.

Piemērs tam ir atrodams sadaļā Nosacītās darbības .

Resursu lokalizācija

Tiek pieņemts, ka darbvirsmas moduļu Power Automate noklusējuma valoda ir angļu valoda.

Failam Resources.resx jābūt angļu valodā.

Jebkuras citas valodas var pievienot, izmantojot papildu resursus.{locale}. resx faili lokalizācijai. Piemēram, Resources.fr.resx.

Pielāgotas moduļu kategorijas

Moduļos var iekļaut kategorijas un apakškategorijas labākai darbības organizācijai.

Lai atdalītu pielāgotas darbības kategorijās, apakškategorijās, modificējiet atribūtu [Darbība], kas atrodas pirms klases, kura attēlo pielāgoto darbību, šādā veidā:

[Action(Category = "category.subcategory")]

Piezīmes

Modulim var būt vairākas kategorijas. Tāpat kategorijas var veidot pa apakškategorijām. Šī struktūra var būt nenoteikta.

Pasūtījuma rekvizīts nosaka secību, kādā noformētājā tiek priekšskatītas darbības.

Action1 pieder kategorijai "TestCategory" un tā ir moduļa pirmā darbība (tādā veidā jūs izskaidrojat secību un kategoriju ar piemēru).

[Action(Id = "Action1", Order = 1, Category = "TestCategory")]

Nosacītas darbības

Nosacītās darbības ir darbības, kas atgriež vai nu "True", vai "False". "Ja fails pastāv" Power Automate standarta bibliotēkas darbvirsmas darbībai ir labs nosacītas darbības piemērs.

Nosacījuma darbības piemērs:

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
    }
}

Ievērojiet rezultātu Būla mainīgo.

Darbībai Ja fails pastāv , nav izvades argumenta. Tas, ko tas atgriež, ir patiess vai aplams atkarībā no tā, kāds ir Būla mainīgais rezultāts .

Pielāgoti darbību atlasītāji

Ir īpaši gadījumi, kad pielāgotai darbībai var būt nepieciešams vairāk nekā viens variants.

Piemērs ir darbība "Launch Excel" no standarta darbību bibliotēkas.

Izmantojot atlasītāju "ar tukšu dokumentu", plūsma palaiž tukšu Excel dokumentu, savukārt, izmantojot atlasi "un atveriet nākamo dokumentu", ir jāatver faila ceļš.

Ekrānuzņēmums, kurā redzami Excel darbību atlasītāju palaišana

Divas iepriekš minētās darbības ir divi bāzes darbības "Launch Excel" atlasītāji.

Veidojot pielāgotas darbības, funkcionalitāte nav jāpārraksta.

Izmantojot darbību atlasītājus, varat izveidot vienu "bāzes" darbību, iestatot tās ievades un izvades parametrus, un pēc tam izvēlēties, kas būtu redzams katrā garšā.

Izmantojot darbību atlasītājus, abstrakcijas līmeni var pievienot vienai darbībai, ļaujot izgūt specifisku funkcionalitāti no vienas "bāzes" darbības bez nepieciešamības pārrakstīt kodu, lai katru reizi izveidotu jaunu tās pašas darbības variantu.

Padomājiet par selektoriem kā izvēli, filtrējot vienu darbību un parādot tikai to informāciju, kas nepieciešama saskaņā ar attiecīgajiem atlasītājiem.

Darbību atlasītāju shēmas ekrānuzņēmums

Lai izveidotu jaunu darbību atlasītāju, vispirms izveidojiet bāzes darbību, ko izmantos atlasītāji.

Centrālajai darbībai ir nepieciešams Būla vai uzskaitījums rekvizīts kā ievades C# arguments.

Šī īpašuma vērtība nosaka, kurš selektors tiek izmantots.

Visizplatītākais veids ir uzskaitījums izmantošana. It īpaši, ja ir nepieciešami vairāk nekā divi selektori, enums ir vienīgā iespēja.

Diviem selektoru korpusiem var izmantot būla paraugus.

Šim rekvizītam, kas tiek dēvēts arī par ierobežojuma argumentu, ir jābūt noklusējuma vērtībai.

Centrālā darbība tiek pasludināta par klasisku darbību.

Ievērojiet, ka pirmais rekvizīts (ievades arguments) ir uzskaitījums. Pamatojoties uz šī īpašuma vērtību, atbilstošais atlasītājs kļūst aktīvs.

Piezīmes

Lai argumentus sakārtotu vēlamajā veidā, iestatiet vērtību Pasūtījums blakus atribūtam InputArgument.

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
}

Pielāgoti darbību atlasītāji, izmantojot enums

Šajā piemērā jūs izveidojat trīs atlasītājus. Vienkāršs uzskaitījums katru reizi diktē atbilstošo selektoru:

public enum SelectorChoice
{
    Selector1,
    Selector2,
    Selector3
}

Selektorus pārstāv klases.

Šīm klasēm ir jāpārmanto ActionSelector<TBaseActionClass> klase.

Piezīmes

TBaseActionClass ir pamata darbības klases nosaukums.

Metodē UseName() tiek deklarēts darbību atlasītāja nosaukums. Tas tiek izmantots kā darbības nosaukums, lai atrisinātu resursus.

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);
    }
}

Piezīmes

Selektora klases nav jādeklarē kā darbības. Vienīgā darbība ir centrālā. Selektori darbojas kā filtri.

Šajā konkrētajā piemērā mēs vēlamies parādīt tikai vienu no argumentiem, tādējādi pārējie tiek filtrēti. Līdzīgi kā Selector2:

public class Selector2 : ActionSelector<CentralCustomAction>
{
    public Selector2()
    {
        UseName("DisplayFullName");
        Prop(p => p.Selector).ShouldBe(SelectorChoice.Selector2);
        ShowAll();
        Hide(p => p.Age);
    }
}

Un Selector3 klases:

public class Selector3 : ActionSelector<CentralCustomAction>
{
    public Selector3()
    {
        UseName("DisplayFullDetails");
        Prop(p => p.Selector).ShouldBe(SelectorChoice.Selector3);
        ShowAll();
    }
}

Galīgā izpilde tiek panākta, izmantojot Izpildes (ActionContext konteksta) metodi, kas atrodas centrālajā darbībā. Pamatojoties uz atlasītāju, tiek parādītas attiecīgās filtrētās vērtības.

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}";
    }
}

Pielāgoti darbību atlasītāji, izmantojot Būla

Šis ir piemērs, kurā enums tiek izmantots Būla, nevis enums.

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);
        }
    }
}

Pielāgotu darbību atlasītāju aprakstu iestatīšana

Lai atlasītājiem izveidotu aprakstu un kopsavilkumu, pielāgotā moduļa .resx failā izmantojiet šādu formātu.

SelectorName_Description
SelectorName_Summary

To var izdarīt arī atlasītājā, izmantojot metodes WithDescription un WithSummary.

Svarīgi

. DLL failus, kuros aprakstītas pielāgotās darbības, to . DLL atkarībām un .cab failam, kurā ir viss, ir jābūt pareizi parakstītam, izmantojot ciparsertifikātu, kam uzticas jūsu organizācija. Sertifikāts ir jāinstalē arī katrai mašīnai, kurā ir izveidots/ modificēts/izpildīts darbvirsmas plūsma ar pielāgotu darbību atkarībām, kas atrodas uzticamo saknes sertifikācijas iestāžu pakļautībā.

Pielāgoti moduļa ID

Katram modulim ir savs ID (montāžas nosaukums). Veidojot pielāgotus moduļus, pārliecinieties, vai iestatāt unikālus moduļu ID. Lai iestatītu moduļa montāžas nosaukumu, modificējiet rekvizītu Asamblejas nosaukums , kas atrodas C# projekta rekvizītu sadaļā Vispārīgi.

Brīdinājums.

Iekļaujot plūsmā moduļus ar vienu un to pašu ID, radīsies konflikti

Pielāgotas moduļa nosaukumu konvencijas

Lai pielāgotos moduļus varētu lasīt Power Automate darbvirsmai, AssemblyName ir jābūt faila nosaukumam, kas atbilst tālāk norādītajam modelim.

?*.Modules.?*
Modules.?*

Piemēram, Moduļi. ContosoActions. DLL

Projekta iestatījumos AssemblyTitle norāda moduļa ID. Tam var būt tikai burtciparu rakstzīmes un pasvītrojumi, un tam jāsākas ar burtu.

Parakstiet visus DLL pielāgotajā modulī

Svarīgi

Obligāti jābūt visiem . DLL faili ietver pielāgotu moduli (ģenerētu montāžu un visas tās atkarības), kas parakstīts ar uzticamu sertifikātu

Lai pabeigtu pielāgotā moduļa izveidi, visi ģenerēti . DLL faili, kas atrodami projekta bin/release vai bin/Debug mapē, ir jāparaksta.

Parakstiet visu . DLL failus, izmantojot uzticamu sertifikātu, izstrādātāja komandu uzvednē palaižot šādu komandu (katram .DLL failam Visual Studio):

Parakstiet .dlls failus, izmantojot uzticamu sertifikātu, izstrādātāja komandu uzvednē Visual Studio palaižot tālāk norādīto komandu (katrai DLL):

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

Vai palaižot tālāk norādīto komandu (izveidojot Windows PowerShell skriptu .ps1), kas atkārtojas cauri visiem . DLL failus un parakstiet katru ar sniegto sertifikātu:

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
}

Piezīmes

Ciparsertifikātam ir jābūt eksportējamai privātajai atslēgai un koda zīmes iespējām

Visu iepakošana kabinetfails

2019. gada 1 DLL, kurā ir ietvertas pielāgotās darbības un visas to atkarības (.DLL faili), ir jāiepako kabinetfails (.cab).

Piezīmes

Piešķirot .cab failam nosaukumu, ievērojiet Windows operētājsistēmas failu un mapju nosaukumdošanas konvenciju. Neizmantojiet tukšas atstarpes vai speciālās rakstzīmes, piemēram < > : " / \ | ? * .

Izveidojiet Windows PowerShell skriptu (.ps1), kurā ir šādas rindas:

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

Šo Windows PowerShell skriptu pēc tam var izmantot, lai izveidotu .cab failu, izsaucot to programmā Windows PowerShell un nodrošinot:

  • Direktorija uz . DLL saspiežamos failus.
  • Mērķa direktorijs, lai ievietotu ģenerēto .cab failu.

Izsauciet skriptu, izmantojot šādu sintaksi:

.\{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

Piemērs:

.\makeCabFile.ps1 "C:\Users\Username\source\repos\MyCustomModule\bin\Release\net472" "C:\Users\Username\MyCustomActions" MyCustomActions.cab

Piezīmes

  • Pārliecinieties, vai faktiskās pielāgotās darbības . DLL fails atrodas mērķa ceļa saknes līmenī, veidojot .cab failu, nevis apakšmapē.
  • Jāparaksta arī .cab fails. Neparakstīti .cab faili un/vai tajos esošie neparakstītie .dll nebūs izmantojami darbvirsmas plūsmās un iekļaušanas laikā radīs kļūdu.

Nākamās darbības

Pielāgotu darbību augšupielāde