2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【UiPath】カスタムアクティビティを作成してみた_祝日判定①

Posted at

#概要#
uipathのカスタムアクティビティを作成してみました。
uipathの画面で入力した日付を祝日判定し、祝日だったら
祝日名を返すだけのアクティビティ
※カスタムアクティビティ:uipathで使用できる拡張機能
#アクティビティ:祝日判定#
思った以上に簡単にアクティビティの作成ができました。uipath特有の
処理が画面から入力された値の受け取りと値をuipathに返すだけだったので...

①"2019/05/03"を入力して実行すると...
uipath_2.PNG
②入力された日付に対応する祝日名を返します。
uipath_3.PNG
3年分(去年・当年・来年)の祝日一覧を取得するapiがありそれを使用
Holidays JP API
apiで取得した祝日一覧をjson形式に変換しており、ライブラリをVSに
いれる必要があります。
C#でJSONを扱うライブラリ「Json.NET」を使ってみました

		//3年間分の祝日一覧を取得(当年・去年・来年)
		string url = "https://holidays-jp.github.io/api/v1/date.json";
		var req = WebRequest.Create(url);
		req.Headers.Add("Accept-Language:ja,en-us;q=0.7,en;q=0.3");
		var res = req.GetResponse();
		string responseFromServer = "";

		using (Stream dataStream = res.GetResponseStream())
		{

			StreamReader reader = new StreamReader(dataStream);
			responseFromServer = reader.ReadToEnd();

		}

		//取得した祝日一覧をjson形式に変換
		var jsonValues = JsonConvert.DeserializeObject<Dictionary<string, string>>(responseFromServer);
		ArrayList dayList = new ArrayList();
		ArrayList dayListName = new ArrayList();

一致する場合:祝日名を返す。
一致しない場合:平日、土日を判定して返す。

		int flg = 1;
		string outputDay = "";
		string outputDayName = "";

		for (int i = 0; i <= (dayList.Count - 1); i++)
		{
			flg = date.CompareTo(DateTime.Parse(dayList[i].ToString()));

			if (0 == flg)
			{
				outputDay = DateTime.Parse(dayList[i].ToString()).ToString("yyyy/MM/dd");
				outputDayName = dayListName[i].ToString();
				break;
			}
		}

		if (0 != flg)
		{

			int number = ((int)date.DayOfWeek);
			string[] week = { "Su", "M", "Tu", "W", "Th", "F", "Sa", };
			string dayOfWeek = week[(int)number];

			string result = date.ToString("yyyy/MM/dd");
			outputDay = result;

			if (dayOfWeek == "Su" || dayOfWeek == "Sa")
			{
				outputDayName = "土日";
			}
			else
			{
				outputDayName = "平日";
			}
		}
		return outputDayName;

#参考#
###カスタムアクティビティ作成環境###
結構簡単に環境作成ができました。
【UiPath】カスタムアクティビティの作成(事前準備と実践初級)
#ソースコード#

Class1.cs
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using System.Collections;
using System.IO;
using System.Net;
using System.Activities;
using System.ComponentModel;

namespace ClassLibrary1
{
	public class Class1 : CodeActivity
	{

		[Category("Input")]
		[RequiredArgument]
		public InArgument<String> inputDay { get; set; }

		[Category("Output")]
		public OutArgument<String> outputDay { get; set; }

		protected override void Execute(CodeActivityContext context)
		{

			//画面入力された日付取得
			var Arg = inputDay.Get(context);
			DateTime date = DateTime.Parse(Arg.ToString());
			var result = outputMethod(date);

			//祝日判定結果をuipathに渡す
			outputDay.Set(context, result);
		}

		public string outputMethod(DateTime date)
		{
			//3年間分の祝日一覧を取得(当年・去年・来年)
			string url = "https://holidays-jp.github.io/api/v1/date.json";
			var req = WebRequest.Create(url);
			req.Headers.Add("Accept-Language:ja,en-us;q=0.7,en;q=0.3");
			var res = req.GetResponse();
			string responseFromServer = "";

			using (Stream dataStream = res.GetResponseStream())
			{

				StreamReader reader = new StreamReader(dataStream);
				responseFromServer = reader.ReadToEnd();

			}

			//取得した祝日一覧をjson形式に変換
			var jsonValues = JsonConvert.DeserializeObject<Dictionary<string, string>>(responseFromServer);
			ArrayList dayList = new ArrayList();
			ArrayList dayListName = new ArrayList();

			//祝日一覧を配列に設定
			foreach (var key in jsonValues.Keys)
			{

				dayList.Add(key);
				dayListName.Add(jsonValues[key]);

			}

			/*入力された日付が祝日一覧に存在するか確認
			一致する場合は祝日名を呼び出し元に渡す
			一致しない場合は入力された日付が平日、土日を
			渡す			
			 */
			int flg = 1;
			string outputDay = "";
			string outputDayName = "";

			for (int i = 0; i <= (dayList.Count - 1); i++)
			{
				flg = date.CompareTo(DateTime.Parse(dayList[i].ToString()));

				if (0 == flg)
				{

					outputDay = DateTime.Parse(dayList[i].ToString()).ToString("yyyy/MM/dd");
					outputDayName = dayListName[i].ToString();
					break;

				}
			}

			if (0 != flg)
			{

				int number = ((int)date.DayOfWeek);
				string[] week = { "Su", "M", "Tu", "W", "Th", "F", "Sa", };
				string dayOfWeek = week[(int)number];

				string result = date.ToString("yyyy/MM/dd");
				outputDay = result;

				if (dayOfWeek == "Su" || dayOfWeek == "Sa")
				{
					outputDayName = "土日";
				}
				else
				{
					outputDayName = "平日";

				}
			}
			return outputDayName;
		}

	}
}
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?