UiPath Documentation
marketplace
latest
false

Marketplace ユーザー ガイド

最終更新日時 2026年5月5日

アクティビティ ファイル

重要:

このドキュメントでは、UiPath Visual Studio Activity Creator の非推奨バージョンについて説明します。新しいドキュメントについては、 こちらをご覧ください

Intro

すべてのアクティビティは、入力、出力、実行ロジックを定義する Activity クラス ファイルで始まります。この方法について詳しくは、アクティビティ プロジェクトで ChildActivity.cs ファイルを開き、セクションごとに詳しい手順をご覧ください。これは、2 つの数値を合計して合計を出力する簡単なアクティビティです。

ドキュメントの画像

using System;
using System.Activities;
using System.Threading;
using System.Threading.Tasks;
using MyCompany.MyProduct.Activities.Properties;
using UiPath.Shared.Activities;
namespace MyCompany.MyProduct.Activities
{
    [LocalizedDisplayName(nameof(Resources.ChildActivityDisplayName))]
    [LocalizedDescription(nameof(Resources.ChildActivityDescription))]
    public class ChildActivity : AsyncTaskCodeActivity
    {
        #region Properties
        [LocalizedDisplayName(nameof(Resources.ChildActivityFirstNumberDisplayName))]
        [LocalizedDescription(nameof(Resources.ChildActivityFirstNumberDescription))]
        [LocalizedCategory(nameof(Resources.Input))]
        public InArgument<int> FirstNumber { get; set; }
        [LocalizedDisplayName(nameof(Resources.ChildActivitySecondNumberDisplayName))]
        [LocalizedDescription(nameof(Resources.ChildActivitySecondNumberDescription))]
        [LocalizedCategory(nameof(Resources.Input))]
        public InArgument<int> SecondNumber { get; set; }
        [LocalizedDisplayName(nameof(Resources.ChildActivitySumDisplayName))]
        [LocalizedDescription(nameof(Resources.ChildActivitySumDescription))]
        [LocalizedCategory(nameof(Resources.Output))]
        public OutArgument<string> Sum { get; set; }
        #endregion

        #region Constructors

        public ChildActivity()
        {
              Constraints.Add(ActivityConstraints.HasParentType<ChildActivity, ParentScope>(Resources.ValidationMessage));
        }

        #endregion

        #region Protected Methods
        protected override void CacheMetadata(CodeActivityMetadata metadata)
        {
              if (FirstNumber == null) metadata.AddValidationError(string.Format(Resources.MetadataValidationError, nameof(FirstNumber)));
              if (SecondNumber == null) metadata.AddValidationError(string.Format(Resources.MetadataValidationError, nameof(SecondNumber)));
              base.CacheMetadata(metadata);
        }
        protected override async Task<Action<AsyncCodeActivityContext>> ExecuteAsync(AsyncCodeActivityContext context, CancellationToken cancellationToken)
        {
              var property = context.DataContext.GetProperties()[ParentScope.ApplicationTag];
              var app = property.GetValue(context.DataContext) as Application;

              var firstValue = FirstNumber.Get(context);
              var secondValue = SecondNumber.Get(context);

              var sum = app.Sum(firstValue, secondValue);
              return ctx =>
              {
                  Sum.Set(ctx, sum);
              };
       }
        #endregion
    }
}
using System;
using System.Activities;
using System.Threading;
using System.Threading.Tasks;
using MyCompany.MyProduct.Activities.Properties;
using UiPath.Shared.Activities;
namespace MyCompany.MyProduct.Activities
{
    [LocalizedDisplayName(nameof(Resources.ChildActivityDisplayName))]
    [LocalizedDescription(nameof(Resources.ChildActivityDescription))]
    public class ChildActivity : AsyncTaskCodeActivity
    {
        #region Properties
        [LocalizedDisplayName(nameof(Resources.ChildActivityFirstNumberDisplayName))]
        [LocalizedDescription(nameof(Resources.ChildActivityFirstNumberDescription))]
        [LocalizedCategory(nameof(Resources.Input))]
        public InArgument<int> FirstNumber { get; set; }
        [LocalizedDisplayName(nameof(Resources.ChildActivitySecondNumberDisplayName))]
        [LocalizedDescription(nameof(Resources.ChildActivitySecondNumberDescription))]
        [LocalizedCategory(nameof(Resources.Input))]
        public InArgument<int> SecondNumber { get; set; }
        [LocalizedDisplayName(nameof(Resources.ChildActivitySumDisplayName))]
        [LocalizedDescription(nameof(Resources.ChildActivitySumDescription))]
        [LocalizedCategory(nameof(Resources.Output))]
        public OutArgument<string> Sum { get; set; }
        #endregion

        #region Constructors

        public ChildActivity()
        {
              Constraints.Add(ActivityConstraints.HasParentType<ChildActivity, ParentScope>(Resources.ValidationMessage));
        }

        #endregion

        #region Protected Methods
        protected override void CacheMetadata(CodeActivityMetadata metadata)
        {
              if (FirstNumber == null) metadata.AddValidationError(string.Format(Resources.MetadataValidationError, nameof(FirstNumber)));
              if (SecondNumber == null) metadata.AddValidationError(string.Format(Resources.MetadataValidationError, nameof(SecondNumber)));
              base.CacheMetadata(metadata);
        }
        protected override async Task<Action<AsyncCodeActivityContext>> ExecuteAsync(AsyncCodeActivityContext context, CancellationToken cancellationToken)
        {
              var property = context.DataContext.GetProperties()[ParentScope.ApplicationTag];
              var app = property.GetValue(context.DataContext) as Application;

              var firstValue = FirstNumber.Get(context);
              var secondValue = SecondNumber.Get(context);

              var sum = app.Sum(firstValue, secondValue);
              return ctx =>
              {
                  Sum.Set(ctx, sum);
              };
       }
        #endregion
    }
}

名前空間をインポートする

ファイルは標準の定型文で始まります。いくつかの名前空間をインポートし、このアクティビティ自体が MyCompany.MyProduct.Activities 名前空間に存在することを宣言します。

using System;
using System.Activities;
using System.Threading;
using System.Threading.Tasks;
using MyCompany.MyProduct.Activities.Properties;
using UiPath.Shared.Activities;
namespace MyCompany.MyProduct.Activities
{
using System;
using System.Activities;
using System.Threading;
using System.Threading.Tasks;
using MyCompany.MyProduct.Activities.Properties;
using UiPath.Shared.Activities;
namespace MyCompany.MyProduct.Activities
{

クラス定義

アクティビティのすべての標準クラス (例: サンプルで使用されている ChildActivity) は、設計時のプロパティの検証と実行時の実行ロジックのためのメソッドを提供する UI AsyncTaskCodeActivityを拡張します。これらは、お使いのソリューションに含まれている Shared フォルダー内にあります。また、 AsyncTaskCodeActivity を拡張するすべてのアクティビティは非同期的に実行できるため、UiPath Studio の [ 並列 ] アクティビティや [並列繰り返し (コレクションの各要素 )] アクティビティと併用できます。

[LocalizedDisplayName(nameof(Resources.ChildActivityDisplayName))]
[LocalizedDescription(nameof(Resources.ChildActivityDescription))]
public class ChildActivity : AsyncTaskCodeActivity
{
[LocalizedDisplayName(nameof(Resources.ChildActivityDisplayName))]
[LocalizedDescription(nameof(Resources.ChildActivityDescription))]
public class ChildActivity : AsyncTaskCodeActivity
{

ChildActivity クラスの定義の上に、LocalizedDisplayNameLocalizedDescriptionという 2 つの属性があることが分かります。これらを使用すると、UiPath Studio の [アクティビティ] パネルに表示されるアクティビティの名前とツールチップの説明を設定できます。この例では、属性はそれぞれのローカライズされたバージョンを参照しています (例:Resources.ChildActivityDisplayName)、単純な文字列を使用することもできます。ローカリゼーションについて詳しくは、 こちらをご覧ください

ドキュメントの画像

ドキュメントの画像

プロパティ

次に、UiPath Studio の [プロパティ] パネルに表示されるアクティビティのプロパティを示します。 各プロパティには、トップレベルのアクティビティで表示名と説明が表示されますが、グループ関連のアクティビティを支援するカテゴリ属性も含まれています。 [入力] カテゴリ FirstNumberSecondNumber が、[出力] の下にどのように表示 Sum

[LocalizedDisplayName(nameof(Resources.ChildActivityFirstNumberDisplayName))]
[LocalizedDescription(nameof(Resources.ChildActivityFirstNumberDescription))]
[LocalizedCategory(nameof(Resources.Input))]
public InArgument<int> FirstNumber { get; set; }
[LocalizedDisplayName(nameof(Resources.ChildActivitySecondNumberDisplayName))]
[LocalizedDescription(nameof(Resources.ChildActivitySecondNumberDescription))]
[LocalizedCategory(nameof(Resources.Input))]
public InArgument<int> SecondNumber { get; set; }
[LocalizedDisplayName(nameof(Resources.ChildActivitySumDisplayName))]
[LocalizedDescription(nameof(Resources.ChildActivitySumDescription))]
[LocalizedCategory(nameof(Resources.Output))]
public OutArgument<int> Sum { get; set; }
[LocalizedDisplayName(nameof(Resources.ChildActivityFirstNumberDisplayName))]
[LocalizedDescription(nameof(Resources.ChildActivityFirstNumberDescription))]
[LocalizedCategory(nameof(Resources.Input))]
public InArgument<int> FirstNumber { get; set; }
[LocalizedDisplayName(nameof(Resources.ChildActivitySecondNumberDisplayName))]
[LocalizedDescription(nameof(Resources.ChildActivitySecondNumberDescription))]
[LocalizedCategory(nameof(Resources.Input))]
public InArgument<int> SecondNumber { get; set; }
[LocalizedDisplayName(nameof(Resources.ChildActivitySumDisplayName))]
[LocalizedDescription(nameof(Resources.ChildActivitySumDescription))]
[LocalizedCategory(nameof(Resources.Output))]
public OutArgument<int> Sum { get; set; }

ドキュメントの画像

プロパティは InArgument型、 InOutArgument、または OutArgument として宣言することができ、期待される型 (例: string、int、...)。

コンストラクター

public ChildActivity()
{
     FirstNumber = 10;
     Constraints.Add(ActivityConstraints.HasParentType<ChildActivity, ParentScope>(Resources.ValidationMessage));
}
public ChildActivity()
{
     FirstNumber = 10;
     Constraints.Add(ActivityConstraints.HasParentType<ChildActivity, ParentScope>(Resources.ValidationMessage));
}

コンストラクターを使用して、既定値とプロパティに制約を設定します。

  • 上記の例では、[ FirstNumber ] プロパティには既定値 10 が指定されており、[プロパティ] パネルに表示されます。

    ドキュメントの画像

  • さらに、この制約はアクティビティ自体に配置され、ParentScope で囲まれる必要があります。 検証エラーでない場合は、検証エラーが表示されます。

    ドキュメントの画像

CacheMetadata

CacheMetadata は、アクティビティのプロパティ、デリゲート、および/または子アクティビティを検証します。この例では、 FirstNumberSecondNumberの 2 つの入力プロパティに値が指定されていることを確認します。いずれかが指定されていない場合は検証エラーが発生します。この検証エラーが解消されるまで、ワークフローは実行されません。

protected override void CacheMetadata(CodeActivityMetadata metadata)
{
    if (FirstNumber == null) metadata.AddValidationError(string.Format(Resources.MetadataValidationError, nameof(FirstNumber)));
    if (SecondNumber == null) metadata.AddValidationError(string.Format(Resources.MetadataValidationError, nameof(SecondNumber)));
    base.CacheMetadata(metadata);
}
protected override void CacheMetadata(CodeActivityMetadata metadata)
{
    if (FirstNumber == null) metadata.AddValidationError(string.Format(Resources.MetadataValidationError, nameof(FirstNumber)));
    if (SecondNumber == null) metadata.AddValidationError(string.Format(Resources.MetadataValidationError, nameof(SecondNumber)));
    base.CacheMetadata(metadata);
}

ドキュメントの画像

ExecuteAsync

ExecuteAsync には、そのアクティビティの実行ロジックが保持されます。

  • メソッドの最初の 2 行は、ChildActivity のアクティビティ コンテキストまたは現在のステートと、それを囲む要素を検索して、ParentScope から Application オブジェクトを取得します (囲む場合)。 上記のコンストラクタに追加された制約により、このアクティビティがまだ ParentScope に存在しない場合、このアクティビティは決して実行できません。

  • 次の行は、 FirstNumberSecondNumber プロパティの現在の値を取って、それらをローカル変数に保存します。

  • 最後の行は、入力された数に対して Sum 操作を実行し、 Sum プロパティをこの値に設定します。 Sum は出力プロパティであるため、この値は、ワークフロー内の後続のアクティビティで使用できます。

    protected override async Task<Action<AsyncCodeActivityContext>> ExecuteAsync(AsyncCodeActivityContext context, CancellationToken cancellationToken)
    {
        var property = context.DataContext.GetProperties()[ParentScope.ApplicationTag];
        var app = property.GetValue(context.DataContext) as Application;
    
        var firstValue = FirstNumber.Get(context);
        var secondValue = SecondNumber.Get(context);
    
        var sum = app.Sum(firstValue, secondValue);
        return ctx =>
        {
            Sum.Set(ctx, sum);
        };
    }
    protected override async Task<Action<AsyncCodeActivityContext>> ExecuteAsync(AsyncCodeActivityContext context, CancellationToken cancellationToken)
    {
        var property = context.DataContext.GetProperties()[ParentScope.ApplicationTag];
        var app = property.GetValue(context.DataContext) as Application;
    
        var firstValue = FirstNumber.Get(context);
        var secondValue = SecondNumber.Get(context);
    
        var sum = app.Sum(firstValue, secondValue);
        return ctx =>
        {
            Sum.Set(ctx, sum);
        };
    }
    
    重要:

    ExecuteAsync メソッドが Task<Action<AsyncCodeActivityContext>> オブジェクトを返すことに注意してください。このアクティビティを非同期的に実行できるよう、 Task が返されます。非同期操作の完了後に複雑な関数を実行できるようにするために、このタスク内で Action が返されます。上記の例では、この関数は単に Sumの値を設定します。最後に、 ActionAsyncCodeActivityContext パラメーターを受け取るため、非同期操作の完了後で実行されるすべての関数で、このアクティビティのコンテキストを使用できます。そうでない場合、コンテキストが失われ、 Sum を簡単に変更できません。

このページは役に立ちましたか?

接続

ヘルプ リソース サポート

学習する UiPath アカデミー

質問する UiPath フォーラム

最新情報を取得