windntmd
(Windntmd)
July 18, 2023, 7:39am
1
お世話になっております。
複数条件分岐について教えてください。
2つのDBから取得した情報が一致しているかどうかを確認する分岐を作りたいと思います。
複数列のデータを照合し、1つでも相違がある場合は、エラーを出すということができればと思います。
例えば、
DB1_A列 = DB2_A列
DB1_B列 = DB2_B列
DB1_C列 = DB2_C列
DB1_D列 = DB2_D列
DB1_E列 = DB2_E列
に対し、分岐アクティビティを使うと、
のようになると思います。
実際には20個以上の分岐がありますので、かなり見栄えの悪い構築になってしまうと思います。
簡潔にまとめることができるアクティブ等について教えていただけますようお願いいたします。
supriya117
(Supriya Allada)
July 18, 2023, 7:41am
2
Hi @windntmd
Use else if instead of nested if conditions. And Use operators like AND, OR (suitable to your condition)
rlgandu
(Rlgandu)
July 18, 2023, 7:45am
3
@windntmd
Use Linq querys Instead of Branches
Yoichi
(Yoichi)
July 18, 2023, 7:53am
4
こんにちは
もう少し要件を明確にいただいた方が例示しやすいですが、
例えば必要項目をDictioanryやListに代入して、これをチェックすれば簡潔に記載できると思います。
dict1("A")=DB1_A
dict1("B")=DB1_B
dict2("A")=DB2_A
dict2("B")=DB2_B
とあるとし、双方の要素数が同じであるとすると、すべての値が一致したときにThenに流れる条件式は
dict1.Zip(dict2,Function(kv1,kv2) kv1.Value=kv2.Value).All(Function(b) b)
になります。
minami
July 18, 2023, 8:08am
5
datatableでの比較ならカラムのループで行けると思いますけど・・・
カラム名ではなくインデックスでも参照できますよ
テーブル構成が同じであることが条件になってしまいますが
windntmd
(Windntmd)
July 18, 2023, 8:12am
6
説明が明確ではなく、大変失礼いたしました。
補足しますと、DB1とDB2と名付けているのは、片方はExcelファイル、片方はシステムのUIに表示されているフィールドのことです。
また、今使っているUiPath Botのバージョンでは、Else Ifが使えないことで、Ifだけで対応することを考えていました。
Yoichi
(Yoichi)
July 18, 2023, 8:23am
7
こんにちは
windntmd:
片方はシステムのUIに表示されているフィールド
こちらが何らかのルールあるいは、セレクター内の変動要素をリスト化できるのであれば
ループをつかってチェックすることは可能と思います。
(ForEachRowや繰り返し(UI要素)等を検討)
まずはこのあたりの確認からでしょうか
minami
July 18, 2023, 8:29am
8
両方をdatatableに代入して、比較すべき項目が同一の並びであれば
if d1(y).item(x).tostring=d2(y).item(x).tostring
を行、列ループで比較できると思いますが・・
並びがばらばらであれば他の方が示唆しているように(x)に渡す部分を配列にしてコントロールすればよいだけかと。