Academy Level3 課題② 「GetTransactionData.xaml」プロジェクト

academy Level3(Advancedコース)の課題②に取り組んでいます。
ディスパッチャーのフローチャート作成にてこずっています。

簡略版PDF(全31ページ)の4ページ目について質問です。

***引用ここから***
● Framework フォルダーの「GetTransactionData.xaml」プロジェクトを開きます。
o キューへのアップロードにはディスパッチャーのプロセスを使用するため、Get Transaction Item アクティビティを削除します。
o 「Write Transaction info in Logging Fields」シーケンスの前に、Attach Browser アクティビティを追加し、「WorkItems」ページをスクリーンで指定します。
o “次のページ” が利用可能かどうかをチェックする Element Exists アクティビティを 追加します。ページ番号を示し、そのページ番号に関連する属性を使用するようにセ レクターを編集します(注:前述の説明の通り、in_TransactionNumber 引 数はディスパッチャープロセス用のページ番号となります。)
***引用ここまで***

「Write Transaction info in Logging Fields」シーケンスの前 とありますが、
該当シーケンスは、添付画像3枚目の「If a new Item is fetched Grab it’s significant data for logging」
(Condition「out_TransactionItem isNot Nothing」)のThenでしょうか?
その場合、このシーケンスの前、とはつまり、
ウィンドウにアタッチし、要素の有無検出
→次のページの有無(「NextPageExists」)が一番最初に来る
という、流れで合っているでしょうか?

Hello,
Now I try to Lv3 assignment2.
But I can not make flowchart for dispatcher.

About PDF 4page. (For Japanese text ver. and simple ver.)
They said…
Before “Write Transaction info in Logging Fields” Sequence,Add “Attach Browser” actibity, and designate “WorkItems” page as screen.

Where is the before “Write Transaction info in Logging Fields” Sequence?
I put 3 photos I think this roote is PDF saying.
Firstly, attached Windows and element exists, then Boolean for NextPage.

Please help me…



@Akane

こんにちわ!

「If a new Item is fetched Grab it’s significant data for logging」
の上です。
今から押す番号の要素有無を検出し、
あったらout_Transactionitemにin_TransactionNumberの値を入れ、
なかったら、out_TransactionitemにNothingを入れます。
これで下の処理が流れますよね。

Jun1様
回答ありがとうございます。

とのことですが、次のページの数字(今いるページ番号+1)をクリックする、ということでしょうか?

まずWorkItemページに移動済の前提です。
(ここまでは、NavigateToWorkItem.xamlという別ファイルでルート確保済)
1ページ目は、まず全体をDataTable化し、WI4のみ抽出 ※1
次のページに進む=「2」をクリック
次のページに進んだか確認 =が、UiElementAppear(要素の有無を検出)
2ページ目の全体をDataTable化し、WI4のみ抽出
次のページに進む
…を、最終ページ(今回は10ページ目まで)繰り返す、という流れだと思うのですが、
※1部分でも、現状のページ番号を「要素の有無を検出」するのが良いのでしょうか?

@Akane

正常系だけですが、ざっくり簡単に言うと下記の動きです。

「Get Transaction Data」では
・押せる頁番号がなかった場合はNo Dataで「End Process」に移ります。
・押せる頁番号がある場合は「Process Transaction」に移ります。

「Process Transaction」では
・頁番号を押して、頁移動します。(1頁目の時に①を押しますので頁移動はないです)
・DataTable化し、WI4のみ抽出
・キューにデータを上げます。
・SetTransactionStatusを呼び出し、この中で頁番号をインクリメントしてます。
・「Get Transaction Data」に戻ります。

1 Like

Jun1様
回答ありがとうございます。
何度も申し訳ないです…。
「Process.xaml」の「Process Transaction」シーケンスは、以下の手順で合っているでしょうか?

1.「Click」アクティビティを呼び、セレクターを変更
selector1
(簡略版PDFより)

2.「OnUiElementAppear」アクティビティを呼び、セレクターを下記に変更
selector2
(簡略版PDFより)

3.OnUiElementAppear」アクティビティ下の「Do」シーケンスには、データスクレイピングを配置
ブラウザーにアタッチ(WorkItemページ1ページ目)し、DataTableを作成(変数「dt_WorkItems」に出力)

4.「繰り返し(各行)」アクティビティを配置
要素:row コレクション:dt_WorkItems (=DataTable変数)

5.Bodyに「条件分岐」アクティビティを配置
Conditionには、下記WI4のみ抽出する構文を入力
「row(“Type”).Equals(“WI4”) and row(“Status”).Equals(“Open”)」

6.Thenシーケンスに「Add.QueueItem」アクティビティを配置
アイテム情報は下記のとおり。
名前→WIID
入力/String型
値→row(“WIID”).ToString
キュー名→in_Config(“OrchestratorQueueName”).ToString
※Configファイルと連動させる

7.Elsesシーケンスは空欄 (EndProcessに移る)

以上。

また、手順1、手順2の参照スクリーンショットは、どのあたりをスクショしておくと、分かりやすいのでしょうか?
セレクターの内容で実行する(=あくまでも参照)ので、実行内容には関係しないと認識しているのですが、より分かりやすいところを選択したいと考えています。
他のスクリーンショットは、セレクター変更しないで使用しているので、そのままでセレクターの内容と一致する、という認識です。
手順1が、赤線で囲んだ辺り(現在のページ番号と次のページ番号を含める)で、
手順2は、青線で囲んだ辺り(移動後のページ番号のみ)とかでしょうか?
(下記画像参照)

%E3%83%9A%E3%83%BC%E3%82%B8%E9%81%B8%E6%8A%9E

@Akane

手順はあってますね。

スクリーンショットについては、
これがベストと言う訳ではありませんが、
個人的には手引書同様に1です。
「画面上で指定」でセレクタを構築しても1ですし、
そこから、セレクタに変数を埋め込んだ後に、
2にするために、わざわざスクリーンショットを
取り直す作業が発生するのは手間。
もう一つの理由は、
番号が並んでいた方が、視覚的に、どの部分なのか、
すぐにわかりそうなので他の人が見てわかりやすい
と思う方でよろしいかと。

1 Like

Jun1様
回答ありがとうございます。
「Process.xaml」の手順については、理解できました。

「GetTransactionData.xaml」の「GetTransactionData」シーケンスは、以下の手順で合っているでしょうか?

1.「ブラウザーにアタッチ」アクティビティを呼び、WorkItemページを選択

2.「UiElementEists」アクティビティを呼び、
出力を「NextPageExists」(Boolean変数)に設定
また、セレクターを下記に変更
selector1
(簡略版PDFより)

3.「条件分岐」アクティビティを配置
Condition:NextPageExists (=Boolean変数) (次のページの有無)
Thenシーケンス:「代入」アクティビティを配置
out_TransactionItem = in_TransactionNumber.ToString
→次のページがある場合

Elseシーケンス:「代入」アクティビティを配置
out_TransactionItem = Nothing
→最終ページまで来た場合

4.「条件分岐」アクティビティを配置
Condition:out_TransactionItem isNot Nothing (次のページにWI4データの有無)
Thenシーケンス1:「代入」アクティビティを配置
out_TransactionID = in_TransactionNumber

Thenシーケンス2:「代入」アクティビティを配置
out_TransactionField1 = string.Empty (使わない?)

Thenシーケンス3:「代入」アクティビティを配置
out_TransactionField2 = string.Empty (使わない?)

Elseシーケンス:空欄

以上

Thenシーケンス1とThenシーケンス2の「代入」アクティビティは、初期設定(REFramework新規作成)時からありますが、
これは残しておいて問題ないのでしょうか?
というか、この2つのアクティビティは、今回使ってない、という認識で良いのでしょうか?

こんにちわ!

手順は合ってます。

カスタムログフィールド用として、今後の利用も考慮し、残しておいてください。
環境に合わせる以外はフレームワークとして保持しておくことをお勧めします。
参考ですが、SetTransactionStatus内でデフォルトでこの変数の値もログ出力しています。
(このワークフローでは値は空ですが。)

1 Like

Jun1様
回答ありがとうございます。
必要分以外は、極力変更しないようにします。
「GetTransactionData.xaml」の手順も理解できました。

「SetTransactionStatus.xaml」の手順ですが、以前、質問した件に関する内容(https://forum.uipath.com/t/academy-level3-repair-variable-and-argument/158038/2)
なのですが、
「in_TransactionItem」引数は、System.String型に変更する、ということでした。

今回はQueueItemから値を使用するため、添付画像にあるように、「条件分岐」アクティビティ(及び、Thenシーケンスの「SetTransactionStatus」アクティビティ)は必要、ということでしょうか?
それとも、課題①同様に、削除ということでしょうか?
このアクティビティが必要なのは、パフォーマーだけ、でしょうか?

この課題のディスパッチャ―では「SetTransactionStatus」アクティビティは不要ですがパフォーマーで必要です。
キューからトランザクション項目を取得し、その後の処理状態を「SetTransactionStatus」で、ステータス変更します。
(Orchestrator上でも、その状態を確認できる様になります。 )
ディスパッチャ―はキューにデータを上げるだけのプロセスなので、この流れはありませんよね。なのでディスパッチャとしての機能を構築するための改造は必要となります。
言い方が良くなかったですかね。環境を合わせる、必要な機能を構築する以外は、なるべくフレームワークとして保持しておくことをお勧めします。

1 Like

Jun1様、
回答ありがとうございます。

%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_5-31

%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_7-31

セレクター内容を修正する点について質問です。
添付画像2点は、簡略版PDFのものですが、こちらでは、”aaname”を「in_TransactionItem」としています。
しかし、「in_TransactionItem」引数は、System.String型に変更しているため、このままだと、エラーになってしまいます。
ここは、引数の後に「.ToString」を追記する形にすればよいのでしょうか?
そうすると、一応、エラーは消えます。

よろしくお願いいたします。

String型に変更していなら、エラーにならないとは思うのですが、
この場合、「.ToString」を付けても同じなので、それでも良いです。

1 Like

Jun1様
回答ありがとうございます。
ファイルを実行すると、出力部分に下記のような文章がありました。

[Debug] Error getting transaction data for Transaction Number: 1. Error converting value “1” to type ‘System.String’. Path ‘’. at Source: Newtonsoft.Json

変数のSystem.String型が問題になってるのは分かるのですが、手順書のPDFどおりの変数型変更しかしてないはずなのですが…。
下記は、Main.xamlの変数一覧です。

よろしくお願いいたします。

TransactionItemがString型の配列になってしまってますが・・・

Jun1様、
回答ありがとうございます。

簡略版の手順書PDFでは、「TransactionItem変数はSystem.Stringに変更」、とありますが、ここは無視してしまってよい、ということでしょうか?
PDF3ページ目(表紙含む)です。

stringでも、配列になってしまってます。
[]なしにして下さい。

2 Likes

Jun1様
回答ありがとうございます。
[]に修正し、また他も見直しして、動くようになりました。

何度もありがとうございました。

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.