[SAP®の自動化] SAP WinGUI 自動化難関「ツリー構造」を制覇

[SAP®の自動化]

はじめに

UiPathの劉です。

最近、UiPathを使ってSAP製品のオペレーションの自動化をしたいと考えていますが、どうやって始めれば良いのか、どういう業務で使えるのか、どのように使うのか・・・分からないといった声を多く耳にします。

本連載では、こういった課題を解消するために、SAPにまつわる業務の自動化に取り組まれる方を対象に、 SAPの基礎から、筆者も現場で活用しているSAP連携ソリューションの概要および開発ノウハウまで、幅広くお届けいたします。

今回は、SAP WinGUI の「ツリー構造」の自動化をテーマに記事を書かせていただきます。

本文

SAPの日常オペレーションの中で、ツリーと出会う機会が多くあります。簡単なツリー構造は良いですが、深い階層を持っているようなツリー構造が出てきた場合、必要な項目を探すのもかなり面倒なはずです。RPAで自動化しようとしても、「実装が面倒くさい」、「やり方が分からない」と諦めたケースもしばしばあります。

この記事では、SAP WinGUIクライアントに良くあるツリー構造の自動化の方法をご紹介させていただきます。

SAP WinGUIの中に様々なツリー構造を持っています。

例えば、以下のようなツリー構造があります。

  1. シンプルツリー:ログインした直後のホーム画面にあるSAPメニューツリー

    sap-wingui-tree-structure_01

  2. カラムツリー:テーブルの中にカラムを展開できるようなツリー

    sap-wingui-tree-structure_02

  3. その他のツリー階層構造:例⇒標準階層(利益センターグループ)変更:構造

    sap-wingui-tree-structure_03

以上3つの例について、外見は同様のツリー構造に見えますが、内部的な動作が異なる場合もあります。

例えば、上記の例1と2については、SAP内部的にもツリー構造を持っています。一方で、例3は内部的にツリー構造になっていません。

この理由について説明する前に、まずツリー構造について説明させていただきます。

一般的にツリー構造と言われるのは、下図のように、Node(四角形)とBranch(線)から成っています。一番トップのNodeは「Root Node」、一番末端のNodeは「Leaf Node」(葉っぱノード)と言います。それ以外はInternal Node(中間ノード)と言います。

内部的に、各ノードは親子の関係を持っています。たとえば、Bノードは内部的に、自分の親がAノードだという情報を持っています。各ノードが持っているこの親子関係の情報を元にツリーが構成されます。

sap-wingui-tree-structure_04

では、上記例の1と3のセレクター情報を取り出してみます。まず例1の「財務会計」のセレクター情報をUI Explorerで取得した内容が下図となります。下記の図の左側の欄上でツリーの構造になっているのが分かりましたでしょうか。左側の欄はビジュアルツリーと呼び、ビジュアルツリー上にInternal Nodeおよび、 Leaf Node(例:item 財務会計)もあります。セレクター情報にも自分の親情報も入っています。

  • シンプルツリーのセレクター情報

sap-wingui-tree-structure_05

一方で、例3の「製品」ノードのセレクター情報を見てみましょう。特に左側のビジュアルツリーに注目してみてください。すでに気づいたかと思いますが、この例でいうと、画面上がツリー構造になっているにも関わらず、内部的にツリー構造ではないです。さらにセレクター情報にも自分の親情報が入っていないです。入っているのが「id」 情報のみです。これだと画面上でツリー構成するのができないはずですが、「id」プロパティに列と行の情報("[18,4]"の部分)が含まれているため、こちらをもとにSAP画面上でツリーを構成できたわけです。

  • その他のツリー階層構造のセレクター情報

sap-wingui-tree-structure_06

この二つの例を比較してみると、それぞれ違うアプローチでツリー構成しているのが明らかです。一つは親子情報をしっかり持っています。もう一つは親子情報を持っておらず、業との情報しか持っていません。

では、この2種類のツリー構造に関して、UiPathでどのように自動化していくのかを見ていきましょう。

親子情報を持つツリー:シンプルツリーとカラムツリーなど

UiPathは、SAP画面のツリー構造でも簡易に自動化できるアクティビティ「ツリーを展開」(Expand Tree)を提供しています。こちらを利用すれば、ツリーのRoot NodeからLeaf Nodeまで順番にたどり着く必要がないです。以下の図が示したように、アクティビティからすべてのLeaf Nodeを選択できるようになっています。また、ツリー項目の入力フィールドに文字列の変数を入れることも可能です。

sap-wingui-tree-structure_07

親子情報を持たないツリー:ALV ツリーなど

一方で例3のようなツリー構造に関しては、アクティビティが使えない場合もあり、実装する手間が掛かりますが、自動化できないことはないです。

ALVツリーなら、「ALVツリーを展開」アクティビティを利用

朗報です!!!

UiPath21.10からSAP WinGUI専用の「ALVツリーを展開」(Expand ALV Tree List)アクティビティをリリースしました。SAPのALVツリーであれば、こちらを利用することで、指定したツリーのノートまで展開してくれます。

注意点として、「ALVツリーを展開」アクティビティを利用する際に、すべてのノートをあらかじめ展開する必要があります。ノートが展開された状態で、選択したいノートのセレクター情報を取得し、アクティビティのパスに該当ノートまでのパスが表示されます。

sap-wingui-tree-structure_08

また、UiPath21.10からこういったツリー構造のセレクター情報に「text」プロパティ情報も追加されています。ツリー展開した後の処理として、「text」プロパティの情報を利用し、クリックなどのアクティビティを利用することができます。

sap-wingui-tree-structure_09

SAPの機能を存分に活用しましょう

UiPathを使って開発する中で、自動化可否についてUiPathの製品単体で検討されることが多いですが、自動化対象のアプリケーションが持っている機能も考慮しながら検討することにより、自動化範囲の拡大にも繋がると考えております。

例えば、SAPには豊富な機能が取り揃えられております。UiPath製品単体の機能のみで自動化が難しい場合、まず自動化対象となるSAPシステムの中で活用可能な機能の有無を確認することが良いと考えております。

例3の画面でいうと、メニューバーにすべてのツリーノードを展開したり、圧縮したり、同レベルのノードにノードを追加したりするような機能があります。ツリーを展開した後に、文字列でツリー項目のポジションを特定することができます。たとえば、例3の画面でツリーを展開した後に、ノートの名称を元に「クリック」アクティビティ(UiPath21.10以降、その前のバージョンの場合、「テキスト位置を探す」といったアクティビティを利用する必要がある)を利用し、該当ツリー項目に対して操作できます。

ただ、こちらの操作に制限があります。一つは、検索するツリー項目名が一意であることです。一意でない場合、セレクター情報に「idx='何番目'」プロパティを追加してあげる必要があります。

もう一つは、検索するツリー項目が画面上に表示されていることです。特に例3のようなツリー構造に関して、かならずしもすべてのツリー項目が画面上にロードされているとはかぎらないです。親が展開されてはじめてロードされるケースがほとんどです。なので、画面スクロールしながら、ツリー項目を探す必要性も出てくるかもしれません。

SAP画面のスクロール方法はいろいろあります。例えば、UiPathの「Send Hotkey」アクティビティで、「Up」、「Down」、「Page Down」、「Page Up」といった方向キーを送ってページスクロールさせることができます。ほかに、UiPathが提供しているUiPath Foundation pack for Accelerators for SAP S4HANA\SRCCommonにSRCGetGuiVerticalScrollbar.xamlとSRCSet_GuiVerticalScrollbar.xamlがありますので、そちらを利用してSAP画面を簡単にスクロールできます。

また、「追加」メニューに「検索」といった項目を検索できる機能もあります。選択するツリー項目名を検索してから選択するのが効率よくできるかもしれません。

sap-wingui-tree-structure_10

ショートカットキーの活用

私がSAP画面のツリー操作する時に、良く利用しているのが「Tabキー」、「方向キー」、Ctrl + 方向キー、Shift + Tabキー、Shift + 方向キーがあります。画面や設定によって異なる可能性もありますので、何回試してそこから規則を身につけると良いです。

まとめ

以上、UiPathを利用し、SAP画面の「ツリー構造」の自動化の仕方を紹介させていただきました。皆様の自動化開発にご参考になれれば、大変嬉しく思います。

また、SAPの自動化、S/4HANAへの移行、会社全体のDXなどについてもっと知りたい方は、ぜひUiPathまでご連絡ください。

Binyang Liu
Binyang Liu

Senior Sales Engineer, UiPath