Κοινή χρήση μέσω


Δημιουργία ενεργειών Power Automate για επιφάνεια εργασίας χρησιμοποιώντας το SDK ενεργειών

Αυτό το άρθρο περιγράφει τον τρόπο δημιουργίας προσαρμοσμένων ενεργειών στο Power Automate για υπολογιστή.

Δημιουργία προσαρμοσμένων ενεργειών

Σημαντικό

Οι δεσμευμένες λέξεις-κλειδιά δεν μπορούν να χρησιμοποιηθούν ως ονόματα ενεργειών ή/και ιδιότητες ενεργειών. Η χρήση δεσμευμένων λέξεων-κλειδιών ως ονομάτων ενεργειών ή/και ιδιοτήτων ενεργειών οδηγεί σε εσφαλμένη συμπεριφορά. Περισσότερες πληροφορίες: Δεσμευμένες λέξεις-κλειδιά σε ροές επιφάνειας εργασίας

Ξεκινήστε δημιουργώντας ένα νέο έργο Βιβλιοθήκης κλάσης (.NET Framework) Επιλέξτε .NET framework έκδοση 4.7.2.

Για να δημιουργήσετε μια ενέργεια στην προσαρμοσμένη λειτουργική μονάδα που δημιουργήθηκε:

  • Διαγράψτε το αρχείο Class1.cs που δημιουργήθηκε αυτόματα.
  • Δημιουργήστε μια νέα κλάση μέσα στο έργο σας για να αντιπροσωπεύει την προσαρμοσμένη ενέργεια, δώστε της ένα ξεχωριστό όνομα.
  • Συμπεριλάβετε τους χώρους ονομάτων Microsoft.PowerPlatform.PowerAutomate.Desktop.Actions.SDK και Microsoft.PowerPlatform.PowerAutomate.Desktop.Actions.SDK.Attributes.
  • Όλες οι κλάσεις που αντιπροσωπεύουν ενέργειες πρέπει να έχουν ένα χαρακτηριστικό [Action] πάνω από την κλάση σας.
  • Η κλάση πρέπει να έχει δημόσια πρόσβαση και να μεταβιβάζεται από την κλάση ActionBase.
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();
        }
    }
}

Οι περισσότερες ενέργειες έχουν παραμέτρους (Είσοδος ή Έξοδος). Οι παράμετροι εισόδου και εξόδου αντιπροσωπεύονται από κλασικές ιδιότητες C#. Κάθε ιδιότητα πρέπει να έχει ένα κατάλληλο χαρακτηριστικό C#, είτε [InputArgument] είτε [OutputArgument] για να υπαγορεύει τον τύπο της και τον τρόπο εμφάνισης της στο Power Automate για υπολογιστή. Τα ορίσματα εισόδου μπορεί επίσης να έχουν προεπιλεγμένες τιμές.

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

Προσθήκη περιγραφών σε προσαρμοσμένες ενέργειες

Προσθέστε μια περιγραφή και ένα φιλικό όνομα για τις λειτουργικές μονάδες και τις ενέργειες, ώστε οι προγραμματιστές RPA να γνωρίζουν πώς να τις χρησιμοποιούν καλύτερα.

Η σχεδίαση Power Automate για υπολογιστή εμφανίζει φιλικά ονόματα και περιγραφές.

Μπορείτε να δημιουργήσετε ένα αρχείο "Resources.resx" μέσα στο φάκελο "Ιδιότητες" του έργου λειτουργικής μονάδας. Το νέο αρχείο ".resx" θα πρέπει να έχει το όνομα "Resources.resx".

Η μορφή των περιγραφών για τις Λειτουργικές μονάδες και τις Ενέργειες θα πρέπει να είναι ως εξής:

"Module_Description" ή "Action_Description" και "Module_FriendlyName" ή "Action_FriendlyName" αντίστοιχα στο πεδίο ονόματος. Η περιγραφή στο πεδίο τιμής.

Συνιστούμε επίσης να παρέχετε περιγραφές και φιλικά ονόματα για τις παραμέτρους. Η μορφή τους θα πρέπει να είναι η ακόλουθη: "Action_Parameter_Description", "Action_Parameter_FriendlyName".

Στιγμιότυπο οθόνης των πόρων για μια απλή ενέργεια

Φιλοδώρημα

Συνιστάται να υποδηλώνετε αυτό που περιγράφετε στο πεδίο σχολίων (π.χ. Λειτουργική μονάδα, Ενέργεια κλπ.)

Αυτές οι ιδιότητες μπορούν επίσης να οριστούν με τις ιδιότητες FriendlyName και Description των χαρακτηριστικών [InputArgument], [OutputArgument] και [Action].

Ακολουθεί ένα παράδειγμα αρχείου Resources.resx για μια προσαρμοσμένη λειτουργική μονάδα.

Στιγμιότυπο οθόνης πόρων

Άλλος ένας τρόπος για να προσθέσετε γρήγορα φιλικά ονόματα και περιγραφές σε ενέργειες και παραμέτρους είναι με τις ιδιότητες FriendlyName και Description στα χαρακτηριστικά [Action], [InputArguement] και [OutputArguement].

Σημείωμα

Για να προσθέσετε ένα φιλικό όνομα και μια περιγραφή σε μια λειτουργική μονάδα, πρέπει να τροποποιήσετε το αντίστοιχο αρχείο .resx ή να προσθέσετε τα αντίστοιχα χαρακτηριστικά C#.

Προσθήκη χειρισμού σφαλμάτων σε προσαρμοσμένες ενέργειες

Για να ορίσετε προσαρμοσμένες εξαιρέσεις στην ενέργειά σας, χρησιμοποιήστε το [Throws("ActionError")] χαρακτηριστικό πάνω από την κλάση προσαρμοσμένης ενέργειας. Κάθε περίπτωση εξαίρεσης που θέλετε να ορίσετε πρέπει να έχει το δικό της χαρακτηριστικό.

Στο μπλοκ λήψης, χρησιμοποιήστε τον ακόλουθο κώδικα:

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

Βεβαιωθείτε ότι το όνομα ActionException ταιριάζει με το όνομα που δώσατε στο Throws χαρακτηριστικό. Χρησιμοποιήστε το throw new ActionException για κάθε περίπτωση εξαίρεσης και αντιστοιχίστε το με το αντίστοιχο Throws όνομα χαρακτηριστικού. Όλες οι εξαιρέσεις που ορίζονται με το Throws χαρακτηριστικό είναι ορατές στην καρτέλα χειρισμού σφαλμάτων ενέργειας του σχεδιαστή.

Ένα παράδειγμα αυτού μπορεί να βρεθεί στην ενότητα Ενέργειες υπό όρους.

Τοπική προσαρμογή πόρων

Η προεπιλεγμένη γλώσσα για λειτουργικές μονάδες στο Power Automate για υπολογιστή είναι τα Αγγλικά.

Το αρχείο Resources.resx πρέπει να είναι στα Αγγλικά.

Μπορείτε να προσθέσετε οποιαδήποτε άλλη γλώσσα με επιπλέον αρχεία Resources.{locale}.resx για τοπική προσαρμογή. Για παράδειγμα, Resources.fr.resx.

Προσαρμοσμένες κατηγορίες λειτουργικών μονάδων

Οι λειτουργικές μονάδες μπορεί να περιλαμβάνουν κατηγορίες και υποκατηγορίες για καλύτερη οργάνωση ενεργειών.

Για να διαχωρίσετε τις προσαρμοσμένες ενέργειες σε κατηγορίες, υποκατηγορίες, τροποποιήστε το χαρακτηριστικό [Action] που προηγείται της κλάσης που αντιπροσωπεύει την προσαρμοσμένη ενέργεια με τον ακόλουθο τρόπο:

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

Σημείωμα

Μια λειτουργική μονάδα μπορεί να έχει πολλές κατηγορίες. Ομοίως, οι κατηγορίες μπορούν να αποτελούνται από υποκατηγορίες. Αυτή η δομή μπορεί να είναι άπειρη.

Η ιδιότητα Order καθορίζει τη σειρά προεπισκόπησης των ενεργειών στη σχεδίαση.

Το Action1 ανήκει στην κατηγορία "TestCategory" και είναι η πρώτη ενέργεια της λειτουργικής μονάδας (με αυτόν τον τρόπο εξηγείτε την Παραγγελία και την κατηγορία με ένα παράδειγμα).

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

Ενέργειες συνθηκών

Οι ενέργειες υπό όρους είναι ενέργειες που επιστρέφουν είτε "Αληθής" είτε "Ψευδής". 'Εάν υπάρχει αρχείο' για μια ενέργεια Power Automate για υπολογιστή της τυπικής βιβλιοθήκης είναι ένα καλό παράδειγμα μιας ενέργειας υπό όρους.

Παράδειγμα ενέργειας υπό όρους:

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

Σημειώστε τη δυαδική μεταβλητή Αποτέλεσμα.

Η ενέργεια Εάν υπάρχει αρχείο δεν περιέχει όρισμα εξόδου. Αυτό που επιστρέφει είναι είτε αληθές είτε ψευδές, ανάλογα με το τι περιέχει η δυαδική μεταβλητή Αποτέλεσμα.

Επιλογείς προσαρμοσμένων ενεργειών

Υπάρχουν συγκεκριμένες περιπτώσεις στις οποίες μια προσαρμοσμένη ενέργεια ενδέχεται να χρειαστεί να έχει περισσότερες από μία παραλλαγές.

Παράδειγμα είναι η ενέργεια "Εκκίνηση Excel", από την τυπική βιβλιοθήκη ενεργειών.

Χρησιμοποιώντας τον επιλογέα "με κενό έγγραφο", η ροή εκκινεί ένα κενό έγγραφο Excel, ενώ η χρήση της επιλογής "και άνοιγμα του ακόλουθου εγγράφου" απαιτεί να ανοίξει η διαδρομή αρχείου του αρχείου.

Στιγμιότυπο οθόνης των επιλογέων της ενέργειας εκκίνησης Excel

Οι δύο ενέργειες που αναφέρθηκαν παραπάνω είναι δύο επιλογείς της βασικής ενέργειας "Εκκίνηση Excel".

Κατά τη δημιουργία προσαρμοσμένων ενεργειών, δεν χρειάζεται να γράψετε ξανά λειτουργίες.

Μπορείτε να δημιουργήσετε μια μεμονωμένη "βασική" ενέργεια, ορίζοντας τις παραμέτρους εισόδου και εξόδου της και, στη συνέχεια, να επιλέξετε τι θα είναι ορατό σε κάθε πεδίο, χρησιμοποιώντας επιλογείς ενεργειών.

Μέσω επιλογέων ενεργειών, μπορεί να προστεθεί ένα επίπεδο αφαίρεσης σε μία ενέργεια, επιτρέποντας την ανάκτηση συγκεκριμένης λειτουργικότητας από μια μεμονωμένη ενέργεια "βάσης", χωρίς να χρειάζεται να γράψετε ξανά κώδικα για να δημιουργήσετε μια νέα παραλλαγή της ίδιας ενέργειας κάθε φορά.

Σκεφτείτε τους επιλογείς ως επιλογές, φιλτράροντας μια μεμονωμένη ενέργεια και παρέχοντας μόνο τις πληροφορίες που απαιτούνται σύμφωνα με τους αντίστοιχους επιλογείς.

Στιγμιότυπο οθόνης του διαγράμματος επιλογέων ενεργειών

Για να δημιουργήσετε έναν νέο επιλογέα ενεργειών, δημιουργήστε πρώτα μια βασική ενέργεια που θα χρησιμοποιηθεί από τους επιλογείς.

Η κεντρική ενέργεια απαιτεί δυαδική τιμή ή ιδιότητα απαρίθμησης ως όρισμα εισόδου C#.

Η τιμή αυτής της ιδιότητας καθορίζει ποιος επιλογέα χρησιμοποιείται.

Ο συνηθέστερος τρόπος είναι η χρήση μιας απαρίθμησης. Ειδικά όταν απαιτούνται περισσότεροι από δύο επιλογείς, η επιλογή "απαριθμήσεις" είναι η μοναδική επιλογή.

Για δύο υποθέσεις επιλογέων, μπορεί να χρησιμοποιηθούν δυαδικές τιμές.

Αυτή η ιδιότητα, γνωστή επίσης και ως όρισμα περιορισμού, πρέπει να έχει μια προεπιλεγμένη τιμή.

Η κεντρική ενέργεια δηλώνεται ως κλασική ενέργεια.

Σημειώστε ότι η πρώτη ιδιότητα (όρισμα εισόδου) είναι μια απαρίθμηση. Με βάση την τιμή αυτής της ιδιότητας, ο κατάλληλος επιλογέας γίνεται ενεργός.

Σημείωμα

Για να διατάξετε τα ορίσματα με τον τρόπο που επιθυμείτε, ορίζετε την τιμή παραγγελίας δίπλα στο χαρακτηριστικό 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
}

Επιλογείς προσαρμοσμένων ενεργειών με τη χρήση απαριθμήσεων

Σε αυτό το παράδειγμα, δημιουργείτε τρεις επιλογείς. Μια απλή απαρίθμηση καθορίζει τον κατάλληλο επιλογέα κάθε φορά:

public enum SelectorChoice
{
    Selector1,
    Selector2,
    Selector3
}

Οι επιλογείς αντιπροσωπεύονται από κλάσεις.

Σε αυτές τις κλάσεις πρέπει να μεταβιβάζεται η κλάση ActionSelector<TBaseActionClass>.

Σημείωμα

TBaseActionClass είναι το όνομα της βασικής κλάσης ενέργειας.

Στη μέθοδο UseName(), το όνομα του επιλογέα ενέργειας χρησιμοποιείται χωρίς να απαιτείται η δήλωσή του. Χρησιμοποιείται ως όνομα της ενέργειας για την επίλυση των πόρων.

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

Σημείωμα

Οι κλάσεις Επιλογέας δεν πρέπει να είναι δυνατό να δηλωθούν ως ενέργειες. Η μόνη ενέργεια είναι η κεντρική. Οι επιλογείς λειτουργούν ως φίλτρα.

Σε αυτό το συγκεκριμένο παράδειγμα, θέλουμε να εμφανίζεται μόνο ένα από τα ορίσματα, επομένως τα υπόλοιπα θα φιλτράρονται. Παρόμοια για το Selector2:

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

Και κλάσεις Επιλογέας3:

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

Η τελική εκτέλεση επιτυγχάνεται μέσω της μεθόδου Execute(ActionContext context) που βρίσκεται στην κεντρική ενέργεια. Με βάση τον επιλογέα, εμφανίζονται οι αντίστοιχες τιμές που φιλτράρονται.

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

Επιλογείς προσαρμοσμένων ενεργειών με τη δυαδικής τιμής

Ακολουθεί ένα παράδειγμα για τη χρήση δυαδικών τιμής αντί για απαριθμήσεις.

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

Ρύθμιση περιγραφών για επιλογείς προσαρμοσμένων ενεργειών

Για να δημιουργήσετε μια περιγραφή και μια σύνοψη για επιλογείς, χρησιμοποιήστε την ακόλουθη μορφή στο αρχείο .resx της προσαρμοσμένης λειτουργικής μονάδας.

SelectorName_Description
SelectorName_Summary

Αυτό μπορεί επίσης να γίνει στον επιλογέα με τις μεθόδους WithDescription και WithSummary.

Σημαντικό

Τα αρχεία .dll που περιγράφουν τις προσαρμοσμένες ενέργειες, τις εξαρτήσεις τους από το .dll και το αρχείο .cab που περιέχει όλα τα στοιχεία πρέπει να έχουν σωστή υπογραφή με ένα ψηφιακό πιστοποιητικό το οποίο είναι αξιόπιστο από τον οργανισμό σας. Το πιστοποιητικό θα πρέπει επίσης να εγκατασταθεί σε κάθε μηχάνημα στο οποίο συντάσσεται/ τροποποιείται/εκτελείται μια ροή επιφάνειας εργασίας με εξαρτήσεις προσαρμοσμένων ενεργειών, η οποία βρίσκεται κάτω από τις Αξιόπιστες αρχές έκδοσης πιστοποιητικών ρίζας.

Αναγνωριστικά προσαρμοσμένης λειτουργικής μονάδας

Κάθε λειτουργική μονάδα έχει το δικό της αναγνωριστικό (όνομα συγκρότησης). Κατά τη δημιουργία προσαρμοσμένων λειτουργικών μονάδων, βεβαιωθείτε ότι έχετε ορίσει μοναδικά αναγνωριστικά λειτουργικής μονάδας. Για να ορίσετε το όνομα της συγκρότησης της λειτουργικής μονάδας, τροποποιήστε την ιδιότητα ονόματος συναρμολόγησης στην ενότητα Γενικά των ιδιοτήτων του έργου C#.

Προειδοποίηση

Η συμπερίληψη λειτουργικών μονάδων με το ίδιο αναγνωριστικό σε μια ροή θα έχει ως αποτέλεσμα διενέξεις

Συμβάσεις ονόματος προσαρμοσμένης λειτουργικής μονάδας

Για να είναι δυνατή η ανάγνωση των προσαρμοσμένων μονάδων μέσω Power Automate για υπολογιστή, το AssemblyName πρέπει να έχει ένα όνομα αρχείου που να ακολουθεί το παρακάτω μοτίβο:

?*.Modules.?*
Modules.?*

Για παράδειγμα, Λειτουργικές μονάδες .ContosoActions.dll

Το AssemblyTitle στις ρυθμίσεις έργου καθορίζει το αναγνωριστικό της λειτουργικής μονάδας. Μπορεί να έχει μόνο αλφαριθμητικούς χαρακτήρες και κάτω παύλες και πρέπει να αρχίζει με γράμμα.

Υπογραφή όλων των DLL εντός της προσαρμοσμένης λειτουργικής μονάδας

Σημαντικό

Είναι υποχρεωτικό να υπογράφονται όλα τα αρχεία .dll από μια προσαρμοσμένη λειτουργική μονάδα (που δημιουργείται η συγκρότηση και όλες οι εξαρτήσεις της) υπογεγραμμένη με ένα αξιόπιστο πιστοποιητικό

Για να οριστικοποιήσετε τη δημιουργία της προσαρμοσμένης λειτουργικής μονάδας, όλα τα αρχεία .dll που δημιουργούνται, τα οποία μπορείτε να βρείτε στο φάκελο bin/release ή bin/Debug του έργου, πρέπει να υπογραφούν.

Εισέλθετε όλα τα αρχεία .dll χρησιμοποιώντας ένα αξιόπιστο πιστοποιητικό εκτελώντας την ακόλουθη εντολή (για κάθε αρχείο .dll) σε μια γραμμή εντολών προγραμματιστή για Visual Studio:

Υπογράψτε τα αρχεία .dll χρησιμοποιώντας ένα αξιόπιστο πιστοποιητικό εκτελώντας την ακόλουθη εντολή (για κάθε dll) σε μια γραμμή εντολών προγραμματιστή για 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

ή εκτελώντας την ακόλουθη εντολή (δημιουργώντας μια δέσμη ενεργειών Windows PowerShell Script .ps1), η οποία διατρέχει όλα τα αρχεία .dll και υπογράφει καθένα από αυτά με το παρεχόμενο πιστοποιητικό:

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
}

Σημείωμα

Το ψηφιακό πιστοποιητικό πρέπει να έχει ιδιωτικό κλειδί με δυνατότητα εξαγωγής και δυνατότητες υπογραφής κώδικα

Συσκευασία όλων των αρχείων μιας αρχειοθήκης

Το .dll που περιέχει τις προσαρμοσμένες ενέργειες και όλες τις εξαρτήσεις του (αρχεία .dll) πρέπει να συσκευάστε σε μια αρχειοθήκη (.cab).

Σημείωμα

Όταν ονομάσετε το αρχείο .cab, ακολουθήστε τη σύμβαση ονομασίας αρχείων και φακέλων για το λειτουργικό σύστημα των Windows. Μην χρησιμοποιείτε κενά διαστήματα ή ειδικούς χαρακτήρες, όπως < > : " / \ | ? * .

Δημιουργήστε μια δέσμη ενεργειών Windows PowerShell (.ps1) που να περιέχει τις ακόλουθες γραμμές:

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

Αυτή η δέσμη ενεργειών Windows PowerShell μπορεί να χρησιμοποιηθεί για τη δημιουργία του αρχείου .cab καλώντας το στο Windows PowerShell και παρέχοντας:

  • Τον κατάλογο στα αρχεία .dll προς συμπίεση.
  • Τον κατάλογο προορισμού στον οποίο θα τοποθετήσετε το αρχείο .cab που δημιουργείται.

Καλέστε τη δέσμη ενεργειών χρησιμοποιώντας την ακόλουθη σύνταξη:

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

Παράδειγμα:

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

Σημείωμα

  • Βεβαιωθείτε ότι το πραγματικό αρχείο .dll προσαρμοσμένων ενεργειών βρίσκεται στο ριζικό επίπεδο της διαδρομής προορισμού κατά τη δημιουργία του αρχείου .cab και όχι σε έναν υποφάκελο.
  • Το αρχείο .cab πρέπει επίσης να έχει υπογραφή. Τα μη υπογεγραμμένα αρχεία .cab ή/και τα μη υπογεγραμμένα .dll που περιέχονται σε αυτά δεν θα μπορούν να χρησιμοποιηθούν σε ροές επιφάνειας εργασίας και θα έχουν ως αποτέλεσμα σφάλμα κατά τη συμπερίληψη.

Επόμενα βήματα

Αποστολή προσαρμοσμένων ενεργειών