通知を受け取る

UiPath の開発者

The UiPath Developer Guide

Building Workflow Analyzer Rules

ワークフロー アナライザーはプロジェクトがベスト プラクティス、保守性、わかりやすさ、パフォーマンス、再利用性、信頼性、セキュリティの要件に確実に従うようにするためのツールです。

これらの概念は、大規模なオートメーション プロジェクトを集約することができる、クリーンで信頼性の高いワークフローを確保するために重要です。

📘

注:

カスタム ルールを作成するには、オフィシャル フィードの UiPath.Activities.Api パッケージが必要です。カスタム プロジェクト内で、開発依存関係として SDK パッケージを使用する必要があります。開発依存関係について参照してください。

Watch the video below to get step-by-step instructions on how to build custom rules.

既製のフォームでは、Workflow Analyzer は Studio に統合され、検証およびアナライザー機能が組み込まれています。検証でエラーが返された場合、分析を実行できません。

Workflow Analyzer の概念

プロジェクトのカスタム ルールを作成するには、Workflow Analyzer が背後でどのように機能するかをよりよく理解するために、いくつかの概念を定義する必要があります。

📘

重要

カスタム ルールの作成時は、.NET Framework バージョン 4.6.1 をターゲットにしてください。

ルールとカウンター

Workflow Analyzer は特定の基準を使用して、プロジェクトの信頼性が満たされていることを確認します。これらのチェックは、慎重に定義されたルールやカウンターを使用して実行されます。

ルールは、満たさなければならない要件を表します。ルール定義に対して検査対象をチェックするように設定できます。

カウンターは、特定のイベントまたは条件が発生した回数を確認するために行われたチェックを表します。

満たされていない各ルールについて、[エラー リスト] パネルに、警告、エラー、情報、または詳細メッセージの形式でメッセージが一覧表示されます。これらのリストには、変更を行い、ルールが満たされていることを確認するための推奨事項も含まれています。

📘

注:

When creating custom rules and counters, make sure to follow the naming convention detailed in the About Workflow Analyzer page.

検査対象

Workflow Analyzer は、事前定義されたオブジェクトの詳細な分析を実行できます。オブジェクトは、分析される範囲、ルールまたはカウンターが適用される領域を表します。

ルールの作成

公式フィード (https://www.myget.org/F/workflow) から UiPath.Activities.Api パッケージをインストールします。

To help you create a custom rule, let's look at a current predefined rule in the Workflow Analyzer, Variable Length Exceeded. This rule checks whether the length of variables defined in the project is smaller than 20 characters. The rule's inspection object is activity.

背後では、ルールは次のようになります。

// This static class is not mandatory. It just helps organizining the code.
internal static class VariableLengthRule
    {
  // This should be as unique as possible, and should follow the naming convention.
        private const string RuleId = "ST-NMG-008";

        internal static Rule<IActivityModel> Get()
        {
            var rule = new Rule<IActivityModel>("Variable Length Rule", RuleId, Inspect)
            {
                RecommendationMessage = Recommendation,
              /// Off and Verbose are not supported.
                ErrorLevel = System.Diagnostics.TraceLevel.Warning
            };
            return rule;
        }
  
            // This is the function that executes for each activity in all the files. Might impact performance.
        // The rule instance is the rule provided above which also contains the user-configured data.
                 private static InspectionResult Inspect(IActivityModel activityModel, Rule ruleInstance)
        {
            var messageList = new List<string>();
            foreach(var activityModelVariable in activityModel.Variables)
            {
                if (activityModelVariable.DisplayName.Length > 20)
                {
                    messageList.Add($"The variable {activityModelVariable.DisplayName} has a length longer than 20");
                }
            }

            if (messageList.Count > 0)
            {
                return new InspectionResult()
                {
                    ErrorLevel = ruleInstance.ErrorLevel,
                    HasErrors = true,
                    RecommendationMessage = ruleInstance.RecommendationMessage,
                  // When inspecting a model, a rule can generate more than one message.
                    Messages = messageList
                };
            }
            else
            {
                return new InspectionResult() { HasErrors = false };
            }
        }
    }

The RuleId parameter requires the name of your rule. In this example, the Variable Length Exceeded rule carries the ST-NMG-008 rule ID and follows the Rule Naming Convention.

RecommendationMessage パラメーターは、分析の完了後に見つかった不整合をユーザーが解決するのに役立つ推奨事項としてメッセージを表示する必要があります。メッセージは簡潔で、明確な手順を示す必要があります。

ErrorLevel パラメーターは、条件が満たされない場合に実行される既定の操作を示します。この例では、ルールは警告をスローします。既定の操作は、エラー、警告、情報、または詳細です。

パラメーターを使用してルールを作成

The situation changes slightly when we want to build rules that contain customizable parameters. One of such rules is Variables Naming Convention. Its inspection element is activity and carries a default Regex expression, which can be changed.

背後では、このルールは次のようになります。

internal static class VariableNamingRule
    {
        private const string RuleId = "ST-NMG-001";
        private const string RegexKey = "Regex";
        private const string DefaultRegex = @"^([A-Z]|[a-z])+([0-9])*$";

        internal static Rule<IActivityModel> Get()
        {
            var rule = new Rule<IActivityModel>(Strings.ST_NMG_001_Name, RuleId, Inspect)
            {
                RecommendationMessage = Recommendation,
                ErrorLevel = System.Diagnostics.TraceLevel.Warning
            };
            rule.Parameters.Add(RegexKey, new Parameter()
        }
                                
       private static InspectionResult Inspect(IActivityModel activityModel, Rule ruleInstance) 
        {
          // This retrieves the parameter value from the rule instance as configured by the user, if not, the default value.
            var setRegexValue = ruleInstance.Parameters[RegexKey]?.Value;
          
            var regex = new Regex(setRegexValue);
            var messageList = new List<string>();
            foreach (var activityModelVariable in activityModel.Variables)
            {
                if(!regex.IsMatch(activityModelVariable.DisplayName))
                {
                    messageList.Add(string.Format(Strings.ST_NMG_001_ErrorFormat, activityModelVariable.DisplayName, setRegexValue));
                }
            }

            if(messageList.Count > 0)
            {
                return new InspectionResult()
                {
                    ErrorLevel = ruleInstance.ErrorLevel,
                    HasErrors = true,
                    RecommendationMessage = ruleInstance.RecommendationMessage,
                    Messages = messageList
                };
            }
            else
            {
                return new InspectionResult() { HasErrors = false };
            }
        }
    }

このルールに関連付けられた既定の正規表現である RuleIdRegexKeyDefaultRegex を呼び出します。

RecommendationMessage および ErrorLevel パラメーターは、以前に提示されたルールと同じです。

カウンターの作成

カウンターは、特定のイベントまたは条件が発生した回数を確認するために行われたチェックを表します。

それらの構造は、ルールの構造とは少し異なります。カウンターで使用できる唯一の ErrorLevel パラメーターは Info になります。したがって、カウンターのエラーレベルを定義する式はこの ErrorLevel = System.Diagnostics.TraceLevel.Info のようになります。

Let's take File Activities Stats as an example of how counter rules look behind the scenes:

internal static class NumberOfActivitiesInFile
    {
        private const string RuleId = "ST-ANA-009";

        internal static Counter<IActivityModel> Get()
        {
            return new Counter<IActivityModel>(Strings.ST_ANA_009_Name, RuleId, Inspect);
        }
  
  // A Counter<T> receives the entire collection of T objects in the parent structure. e.g. activities in workflow, workflows in project.
  private static InspectionResult Inspect(IReadOnlyCollection<IActivityModel> activities, Counter ruleInstance)
        {
            return new InspectionResult()
            {
              // For a counter, the error level is always info, even if not set here.
                ErrorLevel = System.Diagnostics.TraceLevel.Info,
              // For a counter, the Has Errors field is always ignored.
                HasErrors = false,
                Messages = new List<string>() { string.Format(Strings.ST_ANA_009_ErrorFormat,  activities.Count) }
            };
        }

StudioX のルールの構築

既定では、ルールは Studio のプロファイルにしか適用されません。StudioX のプロファイルにも表示されるようにするには、ApplicableScopes プロパティを追加し、BusinessRule を含めるように設定します。たとえば、次のようなプロパティを追加します。

var rule = new Rule<IActivityModel>(Strings.ORG_USG_001_Name, RuleId, Inspect)
            {
                RecommendationMessage = Strings.ORG_USG_001_Recommendation,
                ErrorLevel = TraceLevel.Error,
                //Must contain "BusinessRule" to appear in StudioX, rules always appear in Studio
                ApplicableScopes = new List<string> { RuleConstants.BusinessRule }
            };

ルール登録

登録インターフェイスメソッド

このメソッドを使用すると、パッケージを Studio バージョン 2019.10 以降でのみ使用できるようになることに留意してください。

次のメソッド Initialize(IAnalyzerConfigurationService workflowAnalyzerConfigService) を使用して IRegisterAnalyzerConfiguration インターフェイスを実装します。

using UiPath.Studio.Activities.Api;
using UiPath.Studio.Activities.Api.Analyzer;
using UiPath.Studio.RulesLibrary.Rules.Naming;

namespace UiPath.Studio.RulesLibrary
{
    public class RegisterAnalyzerConfiguration : IRegisterAnalyzerConfiguration
    {
        public void Initialize(IAnalyzerConfigurationService workflowAnalyzerConfigService)
        {
            // Naming
            workflowAnalyzerConfigService.AddRule(VariableNamingRule.Get());
            workflowAnalyzerConfigService.AddRule(DisplayNameDuplicationRule.Get());
            workflowAnalyzerConfigService.AddRule(VariableNameDuplicationRule.Get());
            workflowAnalyzerConfigService.AddRule(ArgumentNamingRule.Get());
            workflowAnalyzerConfigService.AddRule(VariableLengthRule.Get());
        }
    }
}

📘

注:

特定の Studio バージョン用にルールを登録するには、IAnalyzerConfigurationService に対して HasFeature メソッドを呼び出します。

IRegisterMetadata メソッド

この方法は、2019.6 以降のバージョンの Studio でのみ使用可能であり、登録インターフェイス メソッドほど適切ではないことに留意してください。

  • IRegisterMetadata の実装にメソッド無効 Initialize(object api) を追加します。
  • Initialize 実装では、object パラメーターを WorkflowDesignApi にキャストし、例外が管理されることを確認するためだけに [トライ キャッチ] の下にすべてを追加します。
  • WorkflowDesignApi を解決すると、WorkflowAnalyzerConfigService をプロパティとして使用できるようになります。
  • この時点で、上記のセクションで説明した IAnalyzerConfigurationService にアクセスできます。

Studio にルールを追加

Workflow Analyzer のカスタム ルールは、次の 2 つの方法で Studio に統合できます。

  • グローバル レベルで、Studio のインストール場所に外部アセンブリ (.dll) を追加
  • プロジェクト レベルで、カスタム アクティビティ パッケージをインストール

グローバル レベル

Studio のインスタンスで作成されたすべてのプロジェクトでカスタム ルールを使用できるようにするには、カスタム ルールの読み込み元フォルダーに外部アセンブリ (.dll) パッケージを追加する必要があります。既定では、フォルダー パスは次のとおりです。

  • .msi: C:\Program Files\UiPath\Studio\Rules
  • .exe: `%localappdata%\UiPath\app-%version%\Rules

Optionally, you can change the folder from which Studio loads custom rules by going to Home (Studio Backstage View) > Settings > Locations and defining a Custom Workflow Analyzer rules location. This feature is available in Studio v2020.10. and later.

Follow the steps detailed in the Creating a Custom Activity page to export the code as a .dll file.

プロジェクト レベル

カスタム ルールを特定のプロジェクトのみで利用できるようにするには、NuGet パッケージ (.nupkg) を作成し、こちらで説明しているように、依存関係として Studio プロジェクトでインストールします。

5 か月前に更新


Building Workflow Analyzer Rules


改善の提案は、API リファレンスのページでは制限されています

改善を提案できるのは Markdown の本文コンテンツのみであり、API 仕様に行うことはできません。