UiPathによるSharePointnの自動化（SharePoint Custom Activities Package）【UiPath マーケットプレース】

#はじめに
※2020/7/29に再投稿
本書は #UiPathFreiensdの@ShumpeiWatanabeさんが始められた
「UiPathブログ　ブログ発信チャレンジ」への投稿になります。
（https://twitter.com/ShumpeiWatanabe/status/1281173891189059585）
ブログなんて書いたことないし、UiPathなんてしばらく実務で使っていなかったので、何書けばいいんだろうと思いましたが、今実務でメインにつかっている「SharePoint」との連携を書けばいいんじゃないかということで書いてみました。
少し機能の掘り下げが甘いですが、これを機に徐々に追記してゆきます

## UiPath SharePoint Custom Activities Packageとは

　UiPathには様々な追加パッケージがUiPath社や、同社が運営するUiPath connect マーケットプレイス（ https://connect.uipath.com/ja/marketplace/components ）から提供されています。表題のパッケージもその一つで、マーケットプレイスもしくは、UiPath本体の「パッケージ管理」から導入することができます。

名前の通り、MicrosoftのSharePointを操作するActivity群です。

マーケットプレイス、パッケージ管理どちらからインストールしてもいいのですが、マーケットプレイスは英語ながらもドキュメントが添付されていますので、最初はマーケットプレイスを読んで、実際のインストールはパッケージ管理からインストールしたほうがいいでしょう。
【マーケットプレイス】https://connect.uipath.com/ja/marketplace/components/sharepoint-custom-activities-package
　※記事の時点のバージョンは 1.5.2
　※UiPathの社員さんがリリースしているようですが、会社としてのサポートはないようです。英語ですが、質問ができるようです。

##インストール
実際にインストールしてみます。
UiPathのパッケージ管理画面を開いて、connectチャネルを選択し、「SharePoint」で検索してみてください。
２つ以上検索されますので、「UiPathTeam.SharePoint.Activiteies」を選択してください。
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3134373933372f32653335656631612d366434662d666465642d383065332d31303233626263326565336.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147937/84c55b54-19d8-7087-caff-10f8f48cdc4c.png)

インストールを続行すると、依存性のチェック画面が出てくるので、「OK」でインストールを完了させてください。
インストールが完了すると、以下のアクテビティが追加されています。
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3134373933372f39656530326562372d626666652d633264642d343432372d30643062653661656366623.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147937/2a0a769a-498b-2d44-1fb1-754c203d7682.png)

## アクテビティについて
アクテビティは大きく４つにカテゴライズされます

|分類              |説明                                                                |
|:-----------------|:------------------------------------------------------------------|
|ライブラリ関連     |ファイルを格納するライブラリを操作するアクテビティ群です                |
|リスト関連         |簡易データベースのListを操作するアクテビティ群です                    |
|パーミッション関連  |上記ライブラリやListのパーミッションを操作するアクテビティ群です       |
|ユーザー関連        |ユーザーの権限関連の操作を行うアクテビティ群です                     |

今回はList操作にについて説明します。
アイテムの追加、参照、削除、更新の４つの機能について説明します。
※リストやライブラリ、ユーザーを作成する機能はありません

##ワークフローへの記載

ワークフローへの記載は以下の通りとなります。

### SharePointアプリケーションスコープの配置
まず、ワークフローにSharePoint Aplication scope を配置します。SHarePointとの接続を行う部分です。

![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3134373933372f38343466623266622d396532662d333832652d353863392d35373664613335323638643.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147937/be63a9ba-a3da-39bb-f38b-8a962692fe6f.png)
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3134373933372f64323330396435372d613231352d363530392d393465302d32353964376136313564643.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147937/f17d665a-fe1b-71dc-15e6-eb6058ff16dc.png)


必要な情報は以下の３点です

* SharePointサイトのURL
* ユーザー名
* パスワード

※実行に当たり、ユーザーに対して実際のSharePointの操作権限が付与されている必要があります

### コンポーネントの配置
次に実際に操作するコンポーネントを配置してゆきます。
SharePoint Application Scopeの「Do」スコープに配置してゆきます。
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3134373933372f38343466623266622d396532662d333832652d353863392d35373664613335323638643.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147937/7e06cee0-5fca-36c1-8a37-486cf5b6221a.png)

※Doスコープから外れると、接続が維持できなくなりますのでご注意ください

#### ADD List Item アクテビティ
リストにアイテムを追加するアクテビティです。
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3134373933372f37653763333932642d373239652d383163662d666434312d33313961346530353965616.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147937/d719ea8b-cd52-1c0b-bc15-6fceea001e94.png)

リスト名と追加アイテム値をセットします。追加アイテム値は項目名とデータをキーペアとした辞書（Dictionary）型である必要があります。
キーとなる項目名は内部名である必要があり、かつ大文字／小文字を区別しますのでご注意ください。

【実際のワークフローの例】
SharePointに下記のようなリストがあるとします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147937/483fbe69-07ec-51f1-7926-17b0ddc8ca7c.png)
※上記リストのタイトルの内部列名は「Title」、valie1は「value1」です。
それぞれに項目を追加するワークフローは以下の通りです。
![insert.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147937/6004efab-c236-cc9e-812d-c3a041dc4ebb.png)

これで、タイトルに「タイトル」をvalue1に「バリュー１」と入力するワークフローができました。

【実行結果】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147937/a5cc822c-33c3-f86e-ddff-f822b56bcd65.png)


#### Get List Item アクテビティ
リストの値を取得アクテビティです。

リスト名とデータを選択するためのCAMLクエリ、出力先の変数（DataSet型かもしくはDictionary型）を設定します
CAMLクエリーを設定しない場合は全件取得します。
CAMLクエリーを簡単に作りたい場合はこちら＞　https://qiita.com/TwToshiya/items/beee89f00ec94ce10baf
※本アクテビティのマニュアルに紹介されているツールを紹介しました

#### DELETE List Item アクテビティ
リストアイテムを削除するアクテビティです
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3134373933372f33383866373239662d343337362d646131372d323439312d64636163313035613538386.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147937/03683c96-ae1f-65a9-9d28-50d4bbd9f342.png)
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3134373933372f61353130323130362d326265392d396166352d373366652d31653136396133626238623.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147937/9b4274de-668f-0dcd-c178-1f66add01fe5.png)

これも対象リストと、削除したい条件式をCAMLクエリーで設定します。
クエリーを空で指定すると全件削除になります。
いちおう、ガードとして、プロパティの「AllowOperationOnAllItems」にチェックを入れないと、CAMLクエリーを空白値とすることを許さない仕様になっています。

#### UPDATE List Item アクテビティ
リストを更新するためのアクテビティです
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f3134373933372f37613038316265662d396465612d353230382d363561642d38383330336364626432663.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147937/ff839451-729e-b20e-59a8-c5d422e36b51.png)

こちらは少し変わっていて、変更したいリスト名を指定するのは今までと同様なのですが、変更する特定を対照するためのCAMLクエリーと更新するための項目名と項目地のペアの辞書（Dictionary）型変数をセットする必要があります。

#最後に
駆け足でSharePoint Custom Activitiesを紹介してみましたが、いかがだったでしょうか？

「SharePointの操作ならPower Auromateがあるじゃないか」とおっしゃる方。ごもっとです。
しかしながら、オンプレミスのSharePoint等でPower Automateが適用できない場合や、UiPathの一連処理の流れで最後にSharePointにデータを格納したい場合など、UiPathを使用するほうが適切といったケースもあると思いますので、この方法を参考してみてはいかがでしょうか？

ちなみに、StudioXにもパッケージのインストールはできましたが、辞書型変数の生成ができないため、取り扱いは難しいかもしれません。
ご拝読ありがとうございました。