前言
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控件的遍历展开和折叠功能。以后将实现节点的查找功能。
仅供参考,如有帮助不胜荣幸,请关注,点赞。
如需转载请注明出处。