【SAP自动化】(3)遍历Tree控件中的节点

点下面,不迷路

前言

SAP操作时,经常会遇到如 CJ20N 事务中的Tree型结果,为了方便操作其中节点,实现了Tree结构中,节点的遍历操作。

代码实现

class SapGuiTree:
    class TreeType(enum.Enum):
        SIMPLE = 0
        LIST = 1
        COLUMN = 2

    @classmethod
    def show(cls, tree, node, indention):
        print(indention, node,
              [
                  tree.GetItemText(node, column_name) for column_name in tree.GetColumnNames()
              ],
              {
                  'isFolder': tree.isFolder(node),
                  'IsFolderExpandable': tree.IsFolderExpandable(node),
                  'IsFolderExpanded': tree.IsFolderExpanded(node)
              }
        )

    @classmethod
    def expand_all_nodes(cls, session):
        tree = session.findById("wnd[0]/shellcont/shellcont/shell/shellcont[0]/shell/shellcont[1]/shell")

        def _expand_all(node, indention=''):
            if tree.IsFolderExpandable(node) and (not tree.IsFolderExpanded(node)):
                tree.ExpandNode(node)
            SapGuiTree.show(tree, node, indention=indention)
            all_sub_nodes = tree.GetSubNodesCol(node)
            for sub_node in all_sub_nodes or []:
                _expand_all(sub_node, indention= indention + ' ' * 2)

        node = tree.GetNodesCol()
        if node.Count > 0:
            _expand_all(node[0])

    @classmethod
    def collapse_all_node(cls, session):
        tree = session.findById("wnd[0]/shellcont/shellcont/shell/shellcont[0]/shell/shellcont[1]/shell")

        def _collapse_node(node, indention=''):
            all_sub_nodes = tree.GetSubNodesCol(node)
            reversed_all_sub_nodes = reversed([ sub_node for sub_node in all_sub_nodes or []])
            for sub_node in reversed_all_sub_nodes:
                _collapse_node(sub_node, indention= indention + ' ' * 2)
            if tree.IsFolderExpandable(node) and tree.IsFolderExpanded(node):
                tree.CollapseNode(node)
            SapGuiTree.show(tree, node, indention= indention)

        node = tree.GetNodesCol()
        if node.Count > 0:
            _collapse_node(node[0])


def test02(session):
    SapGuiTree.expand_all_nodes(session)
    print('------------------------------------------')
    SapGuiTree.collapse_all_node(session)
    pass

运行结果:

展开与折叠
以上代码仅一个参考实现,后面有时间再尝试其他的实现方法。

总结

实现了Tree控件的遍历展开和折叠功能。以后将实现节点的查找功能。

仅供参考,如有帮助不胜荣幸,请关注,点赞。
如需转载请注明出处。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值