#概要#
uipathのカスタムアクティビティを作成してみました。
uipathの画面で入力した日付を祝日判定し、祝日だったら
祝日名を返すだけのアクティビティ
※カスタムアクティビティ:uipathで使用できる拡張機能
#アクティビティ:祝日判定#
思った以上に簡単にアクティビティの作成ができました。uipath特有の
処理が画面から入力された値の受け取りと値をuipathに返すだけだったので...
①"2019/05/03"を入力して実行すると...
②入力された日付に対応する祝日名を返します。
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;
}
}
}