DOORS DXL求助:实现填充模块列表至对话框的fillModulelist方法
完整修改后的DXL代码
你需要先新增全局存储结构保存遍历到的模块路径,调整遍历逻辑写入存储,再实现fillModuleList方法填充对话框列表,同时补充对话框初始化逻辑即可实现需求,完整代码如下:
// This DXL script iterates through all formal modules of the folder and show in dialog DB dbMain = null DBE dbeModuleList = null DBE dbeExport = null DBE dbeExportPath = null Folder currFolder = null // 新增:全局存储结构,用于保存遍历到的正式模块完整路径 Skip g_moduleList = createString() string startFolder="/Project/Folder"; int moduleCount=0; void forAllModulesInFolder(Folder f) { Item itemRef; string shType; string sItemNameFull; string sItemName; Module moduleReference; for itemRef in f do { shType = type(itemRef); print shType "\t"; sItemNameFull = fullName(itemRef); print sItemNameFull "\t"; sItemName = name(itemRef); print sItemName "\n"; if(shType=="Folder") { string selectedFolder = sItemNameFull; Folder f = folder selectedFolder; forAllModulesInFolder(f); } if(shType=="Formal") { moduleReference = read(sItemNameFull,false,true); filtering off; // 新增:将正式模块完整路径存入全局存储 put(g_moduleList, sItemNameFull, sItemNameFull) close(moduleReference); moduleCount++; } } } void fillModuleList() { // 清空列表原有内容 empty(dbeModuleList) string modPath // 遍历全局存储的所有模块路径,添加到对话框列表控件 for modPath in g_moduleList do { insert(dbeModuleList, modPath) } // 可选:默认选中列表第一项 set(dbeModuleList, 0) } // 主方法 void main(void) { string selectedFolder = startFolder; Folder f = folder selectedFolder; forAllModulesInFolder(f); print "Affected Modules: " moduleCount "\n"; // 初始化主对话框 dbMain = create("项目模块列表", styleCentered) // 创建列表控件:父窗口、控件标签、显示行数、每行字符宽度、是否允许多选 dbeModuleList = list(dbMain, "可选正式模块", 15, 60, false) // 你原有需求的导出相关控件初始化 dbeExportPath = field(dbMain, "导出保存路径", 50) dbeExport = button(dbMain, "执行导出", 12) // 填充模块列表 fillModuleList() // 渲染并显示对话框 realize(dbMain) show(dbMain) // 对话框关闭后销毁全局存储,避免内存泄漏 delete g_moduleList } main()
代码说明
- 新增了全局
Skip类型存储结构g_moduleList,用于保存遍历过程中找到的所有正式模块完整路径 - 调整了遍历逻辑,识别到正式模块时自动将路径写入存储
fillModuleList方法实现了清空列表、遍历存储写入列表控件的完整逻辑- 补充了对话框初始化逻辑,遍历完成后自动弹窗展示所有模块列表
内容的提问来源于stack exchange,提问作者root
相关产品推荐
相关产品推荐

