2021年7月26日
★★★この記事はUiPathブログ発信チャレンジ2021サマー、26日目の記事です。★★★
RPAで効果を上げていくためにはExcelのデータ活用がとても重要です。
そして、Excelのルール作りや徹底はなかなかに大変です。(とくに、ずっと使ってた人たちに表記方法変えてもらうのとか、すごくハードルが高いです)
そんな時、一言「国のルールですよ?」の一言で終わるナイスな資料があります。
そう、みんなご存知、タロー(河野太郎代議士)のTwitterネ申対応!で有名な神エクセル対応の資料が昨年末出ています。
話題になっている割には、RPA界隈で出てこないので、ぜひ皆さんExcelシートの見直しに使ってください。
表向き、すごく難しそうなお題がついていますが、内容は「ネ申エクセル対応!」くらいに平易でデータ活用に必要なことが書かれています。ちゃんと、修正前のダメな例と直し方を例示されてあって、どんな人にもわかるようになってます。DBの理論とか知らなくてもちゃんとわかるように書いているあたり、すべての国民に周知させることがお仕事の人たちが作った資料だけあります。
図:1セル1データとなっているか
(なんか、ブログチャレンジ2021サマーに参加したいな、と思ったらちょうどいい早い者勝ちネタが残ってました^^;)
2018年12月19日
ここ最近、UiPathでイロイロ遊んでます。そこでUiPath (ja) Advent Calendar 2018に参加してみました。第二弾!
結論!
セキュリティー担保したいなら、Orchestrator買え。以上。
はじめに
UiPathを軽くみんなでお安く使用しようとすると、Node-Lockedライセンスという共有端末をみんなで使うライセンス形態があります。しかし!、この場合、どのユーザーでログインしても、端末に入っているすべてのロボットが見えてしまいます。つまり申請系と承認系のロボットが起動できてしまうという、監査人大喜びのツッコミどころができてしまいます。
そこで、ユーザーがActive DirectoryなりWindows OSのセキュリティーグループに所属しているかを確認するプログラムを作ってみます。
Active Directoryでは、グループの中にグループを突っ込めたりするので、単にグループのメンバーの一覧取得だと、ガッつり再帰かけないといけないので面倒すぎます。この時IADsGroupクラスのIsMember を使うのがいつものパターンです。
ではやってみる。
↑OrchestratorなしのNode Lockedライセンスだと、すべてのロボットがどのユーザーにログインしても見えて実行が可能
Orchestratorなしで頑張ってみる
まずは、参照の追加。DirectoryEntryは System.DirectoryServicesの参照を追加して…あれ?IADsGroupはCOMだけどどうやって参照するんだ?
XAMLで追加するのはあくまでclr-namespaceなので、きっぱりあきらめる。
ここで登場するのは、「カスタムアクティビティ」
自分でもサクっとアクティビティを作れてしまうのがUiPathのいいところ。だって、まんまWFなんだもの。
■作業
1、プログラムを作成
2、パッケージを作成
3、UiPathに読込
4、使ってみる
1、プログラムを作成
新しい.クラスライブラリ(NET Framework)のプロジェクトを作って次の4つを参照追加
.NET
・System.Activities
・System.ComponentModel.Composition
・System.DirectoryServices
COM
・Active DS Type Library
(コードは最後に入れてます)
2、パッケージを作成
詳しい作成方法は、「カスタムアクティビティ」をごらんあれ
3、UiPathに読込
「パッケージを管理」から設定を押して、作成したパッケージの場所を追加してください。詳しくは(以下略
Activitiesペインに表示されるようになります
4、使ってみる
ローカルコンピューターのAdministratorsグループにいるかを確認
TargetGroup:”Administrators”
TargetService:System.Environment.MachineName
成功!!!
こんなもん作ってメンテナンスするくらいなら、Orchestrator買いましょう^^;
以下、コード
Imports System.Activities
Imports System.ComponentModel
Imports System.DirectoryServices
Imports ActiveDs
Public Class IsGroupMember
Inherits CodeActivity
<Description("Domain | Domain\ComputerName | ComputerName")>
<Category("Input")>
<RequiredArgument>
Public Property TargetService As InArgument(Of String)
<Description("対象のグループ名")>
<Category("Input")>
<RequiredArgument>
Public Property TargetGroupName As InArgument(Of String)
<Description("結果")>
<Category("Output")>
<RequiredArgument>
Public Property Result As OutArgument(Of Boolean)
Protected Overrides Sub Execute(context As CodeActivityContext)
Dim comInfo As DirectoryEntry = New DirectoryEntry("WinNT://" + TargetService.Get(context))
Dim theGroup As DirectoryEntry = comInfo.Children.Find(TargetGroupName.Get(context), "group")
Dim localgroup As IADsGroup = CType(theGroup.NativeObject, IADsGroup)
Dim currentUser As String = "WinNT://" + System.Environment.UserDomainName + "/" + System.Environment.UserName
Result.Set(context, localgroup.IsMember(currentUser))
End Sub
End Class
2018年12月13日
ここ最近、UiPathでイロイロ遊んでます。そこでUiPath (ja) Advent Calendar 2018に参加してみました。
UiPathって、.NET使いなら見た瞬間あれもこれもしたくさせたくなるRPA製品だったりします。
かなり良くできていて、そのままでも十分使えるのですが、少しでも.NETを使ったことのある方ですと、.NETのアセンブリを使って、もっといろんなことがしたくなるはずです。勉強用や個人用だとタダで使えたりしますので皆さんもぜひ遊んでみてください。(詳しくはちゃんとライセンス条項読んだって下さい、責任なんて取れませんw)
本題
さて、皆さんDataTableの扱いどうされていますか?
現在は Entity Framework に押されて微妙な立場ですが、DataSet ではインメモリ DB を目指してたのでは?と思えるほどがっつりイロイロできます。UiPathは、ExcelのシートやCSVをDataTableに取り込めるのでDataTableをゴニョゴニョできるとすごく便利です。
そんな私に DataTable を SQL 文ライクでゴニョゴニョできる「LINQ for DataSet」はすごく便利です。
UiPathでは、データテーブル関連の部品が増えてきていますが、やっぱりLINQ使えると開発効率が全く違います。
ということで、LINQ for DataSetを使って遊んでみましょう
UiPathでLINQ to DataSetを使ってみる
1.準備
LINQ to DataSetで必要な.NETのアセンブリは次の二つです。
- System.Data
- System.Data.DataSetExtensions
早速使ってみましょう・・・ 無いorz
まぁ、アセンブリ参照の追加はいつものことなので、さっそく追加・・・ GUIが無いorz
■LINQ to DataSetを使うための準備
「UiPath.Web.Activities」をパッケージから追加する。そうすると、上記アセンブリが参照されて LINQ to DataSet が使えるようになります。
■開発者、というか保守まで考えてる人向け
欲しいアセンブリだけ入れれば良い。パッケージ追加は邪道!という個別参照追加命!な方へ
● UiPath で参照を手動追加、または参照しているアセンブリを確認する方法(実は一番ブログに残しておきたかったの、これかもしれない^^;)
1)追加したいワークフローの XMAL ファイルを、テキストエディタで開く
2)アセンブリ一覧を確認。必要なアセンブリがなければ追加する。
<TextExpression.ReferencesForImplementation>
<sco:Collection x:TypeArguments="AssemblyReference">
<AssemblyReference>System.Activities</AssemblyReference>
(中略)
<AssemblyReference>System.Data.DataSetExtensions</AssemblyReference>
3)保存
※いうまでもなく、アセンブリが足りないというエラーが出たときは、XAMLファイル開いてアセンブリを確認するよりも前にパッケージの有無やバージョンを確認しましょう
2. LINQ to DataSetの使い方
山ほど出てくるからググレ!(あ、終わった・・・)
せっかくなので、ちゃんとUiPathで動くか確認してみましょう。
以下、サンプルデータはこの投稿の最後にあるものをUTF-8形式のCSVで保存して使ってます
1) いわゆるWHERE句で検索
では、データから私「ちゅき」の行を取得してみましょう。
○代入(Assign)アクティビティ
左辺 (DataRow型):dr
右辺:From row In dt Where row("名前").ToString = "ちゅき"
はい、ビックリマーク来た!
下表では「ちゅき」は一意ですが、実際はいくつ返されるかわかりません。
そのため、受ける変数はコレクションである必要があります。
結果が一つしかないことが分かっている場合は上側、複数ある時は下側のように書きましょう
○代入(Assign)アクティビティ
左辺 (DataRow型):dr
右辺:(From row In dt Where row("名前").ToString = "ちゅき" ).FirstOrdefault()
○代入(Assign)アクティビティ
左辺 (System.DataEnumerableRowCollection<DataRow>型):dr
右辺:From row In dt Where row("名前").ToString = "ちゅき"
2) WHERE句で遊んでみる
当たり前ですが、こういう書き方もできたりします。ただ、いきなりString型にできず、いったんObject型になります。このあたり、褒貶毀誉があるLINQ to DataSetのバカかアホかと怒られる理由だったりします。
○代入(Assign)アクティビティ
左辺 (System.DataEnumerableRowCollection<Object>型):names
右辺:From row In dt Where row("住所").ToString.SubString(0,3) = "福岡県" Select row("名前")
取り出した namesはこんな感じで使えるので、イメージ通りだと思います。
取り出したデータを Count メソッドで数えればデータ個数なんかもすぐにとってこれます。
3)ほかにもいっぱいSQL文っぽいやつ
使える句はこんな感じです。ただ、思いっきりデータを展開して結合したりするので、あんまりえげつないことをするとメモリがパンクするかも・・・。まぁ、オンメモリDBがメモリイーターなのはご存知の通りですね^^;
Aggregate 句
Distinct 句
Equals 句
From 句
Group By 句
Group Join 句
Join 句
Let 句
Order By 句
Select 句
Skip 句
Skip While 句
Take 句
Take While 句
WHERE 句
最後に
LINQ使えるようになると、DataTableに限らず、VBでイロイロ記述できるようになるので是非のぞいてみてください。
UiPath開発者の必須項目になるかも・・・。
表.各地の勉強会でなんかあったらお世話になるところ
-- list.csv---
名前,郵便番号,住所,電話番号
中,100-8929,東京都千代田区霞が関2丁目1番1号,03-3581-4321
とっちゃん,231-0002,横浜市中区海岸通2丁目4番,045-211-1212
ちゅき,540-8540,大阪市中央区大手前三丁目1番11号,06-6943-1234
You & I,460-8502,名古屋市中区三の丸2-1-1,052-953-9110
むたぐち,650-0011,神戸市中央区下山手通5丁目4番1号,078-341-7441
ゆーち,812-8576,福岡県福岡市博多区東公園7-7,092-641-4141
どらん,803-0811,福岡県北九州市小倉北区大門1丁目6?19,093-583-1110
2017年2月10日
2月11日の
わんくま同盟大阪勉強会第69回会場への道順です。
会場の
東淀川区民会館は、駅を降りて道なりに行けばつくのですが、初めてですと入り口がわかりにくい・・・。
ザックリ道順です。
1、駅を降りたらデイリーストアのある信号までひたすら南下。地図見てわかるとおり、南行きの道はすべてこの信号へ通じてます。
2、デイリーストアがある信号まで来たら左折してください。
3、スポーツセンター前の看板を右折して歩いていくと、奥の建物が図書館などが入っている会場です。
(地図はBingマップ、画像はGoogleマップから作成しています)
2017年1月14日
Windows 10をアップデートしたら、IMEモードが画面のど真ん中に表示されてとてもありがたい。
まだ表示させていない人は、タスクトレイの「あ」とか「A」とか表示されているところを右クリックしてプロパティを表示して「アイコンをデスクトップに表示する」のチェックを入れてみてください。
2017年1月2日
旧年中はお世話になり大変ありがとうございました。
おかげさまで、Enterprise MobilityとしてMicrosoft MVPを再受賞することができました。
賞に恥じぬよう、今後も精進してまいります。
現況はクラウドコンピューティングサービスやマルチデバイス化の方向性はすでに当たり前の段階であると言える状況下です。思えば、昨年度はクラウドコンピューティングに関する今後のビジネスについて、関学IBAで修士を取得しこれからのICT業界についてのインプットをさせていただいた年だったと考えております。本年度はEnterprise Mobilityでのコミュニティー活動で皆さんがICTを通して幸せになれるようアウトプットの年にしてまいりたい所存です。
今後とも一層関西を中心に日本そして世界がICTを通して幸せになれるよう、精進してまいりますのでどうぞよろしくお願いいたします。
2016年1月2日
このたび2016年もMicrosoft社からMVPの受賞をいただくことができました。
今後とも、少しでもIT業界から世界へ貢献できるよう努力してまいりますので今まで通りのご指導よろしくお願いいたしますm(__)m
以上、手短ですがお礼とご報告まで
2015年10月18日
資料などに使う画像。一応、Googleさんの「検索ツール」で探せます。
ほんとに許可されてるかどうかは知らん^^;
毎回ちゃんと確認してください^^;
ADってディレクトリなのに、やっぱり思い出すのはドメイン。
NTのころからドメインといえばポリシー作って参加するモノの構成を縛るための機能。
やっぱりこれがないと、ADという気がしません。
(一応、認証系のサービスとドメインサービスはActive Directoryの中で別れていますが、やっぱり認証とドメインがくっついてこそのADですよねぇ^^;。ドメインコントローラ立てることをAD立てるっていう人多いし^^;)
元ネタ:
[Windows]Azure Active Directory Domain Servicesを触ってみた
http://damedame.monyo.com/?date=20151017#p01
2015年10月12日
このブログの書き込みには、まだまだLive Writer が現役です。
Mailとかは OS 付属の Universal アプリを使っていますが、書き込みにはまだまだこれを使てます。
楽ちんなんですよねぇ^^;
http://windows.microsoft.com/ja-jp/windows-live/essentials
それにしても、URL直打ちしないと私のBlogが出てこないのは、もう使用なんですねぇ(T_T)
http://blogs.wankuma.com/chuki
が死んでからどれくらい経つんだろう^^;