zuipangxie1984 2008-6-23 17:38
查找符合条件的模块___DXL
大家好:
今天写了一些代码,遇到了几个问题,请大家讨论一下,问题请见代码中的“遗留问题”的第1、2点。
代码如下:
//======================================================
/*
作者:***
公司;***
功能描述:
1、 搜索符合条件的模块
2、 搜索条件如下:
1) 模块的创建日期 "Created On"
2) 模块的创建者 "Created By"
基本思路:
1. 用户选择需要搜索的Project. (当前阶段只提供Project级别的搜索)
2. 选择 "创建日期" (必要的搜索条件)
3. 选择 "创建者" (可选的搜索条件)
说明: "创建日期" 与 "创建者"
修改记录:
修改内容 修改人 修改日期
1、新建 ***** 20080623
2、完成按照日期搜索功能 ***** 20080623
遗留问题:
1、查找模块的 "日期"与"创建者"属性时,需不显示的打开模块,影响查找效率,需改进.
2、日期比较大小,方法未经验证,需改进.
(现在的处理办事是:将日期转换成字符串,在进行比较大小.日期形式如:2008年6月23日)
3、按照创建者搜索尚未完成
*/
//======================================================
pragma runLim,0
//=====================全局变量区=====================
DB dbSerMod = centered "查找模块"
DBE dbeStartDate // 开始日期 date
DBE dbeEndDate // 结束日期 date
DBE dbeResultList // 符合搜索条件的模块 list "符合搜索条件的模块如下:"
DBE dbeSearchButton // 模块搜索按钮 button "搜索模块"
DBE dbeProjctPath // 用户选择的Project的展示 field "工程夹"
DBE dbeProPathBut // 选择Project的按钮 button "浏览"
DBE dbeProjectList // 系统Project的列表 list 子窗体的"系统工程夹如下,请选择:"
//=====================功能函数区=====================
/*
函数名称:void selectedProject ( DBE dbe )
功能描述:将用户选定的Project信息,写入dbeProjctPath控件
*/
void selectedProject ( DBE dbe )
{
string projectPath = get dbeProjectList
set ( dbeProjctPath , projectPath )
}
/*
函数名称:void searchProjectPath ( DBE dbe )
功能描述:列出当前用户可见的、未删除的Project,供用户选择搜索范围
*/
void searchProjectPath ( DBE dbe )
{
// 获取当前用户可见的、未删除的Project的个数
int proCount = 0
Project pRef
for pRef in database do
{
proCount ++
}
// 将当前用户可见的、未删除的Project插入数组中,以便于初始化list
string initStr[proCount] = ""
int count = 0
Project p
for p in database do
{
string s = fullName p
initStr[count++] = s
}
DB dbProject = centered "当前系统工程夹"
dbeProjectList = list ( dbProject , "*系统工程夹如下,请选择:" , 200 , 15 , initStr )
DBE dbeSelectedBut = button ( dbProject , "选择" , selectedProject )
realize dbProject
}
/*
函数名称:string getModAttr ( Module tarM , string attrNames )
功能描述:获取当前模块的模块属性值,并以字符串行式返回属性值
输入: Module tarM: 模块 string attrNames :属性名称
输出: 字符串行式的属性值
*/
string getModAttr ( Module tarM , string attrNames )
{ //tarM 模块必须处于打开状态,否则无法获取模块属性
string resultStr = ""
AttrDef ad = find ( tarM , attrNames )
if ( ad.module )
{
AttrType at = ad.type
string attrTypeStr = at.name
if ( attrTypeStr == "String")
{
resultStr = tarM.attrNames
return resultStr
}
if ( attrTypeStr == "Date" )
{
Date resultDate = tarM.attrNames
resultStr = stringOf resultDate
return resultStr
}
}
else
{
return resultStr
}
return resultStr
}
/*
函数名称:string searchByDate ( Module tarM , string strModDateRef )
功能描述:按照日期搜索模块
输入:Module tarM :模块 string strModDateRef : 模块的日期属性名称(Created On)
输出:符合日期搜索条件的模块的全路径
*/
string searchByDate ( Module tarM , string strModDateRef )
{
string strStartDate = get dbeStartDate
string strEndDate = get dbeEndDate
string strModDate = getModAttr ( tarM , strModDateRef )
string modFullName = ""
if ( ( strStartDate <= strModDate ) and ( strModDate <= strEndDate ) )
{
modFullName = fullName tarM
return modFullName
}
return modFullName // null
}
/*
函数名称:bool checkSelectedDate ()
功能描述:校验用户选择的日期是否符合标准
输出:符合标准返回true,否则返回false
*/
bool checkSelectedDate ()
{
string strStartDate = get dbeStartDate
string strEndDate = get dbeEndDate
if ( strStartDate > strEndDate )
return false
return true
}
/*
函数名称:bool checkProjectPath ()
功能描述:校验用户是否选择了需要查找的Project范围
输出:未选择Project,返回 false ,否则返回 true
*/
bool checkProjectPath ()
{
string projectStr = get dbeProjctPath
if ( null projectStr )
return false
return true
}
/*
函数名称:void searchMain ( DBE dbe )
功能描述:在特定的Project中查找符合条件的模块
*/
void searchMain ( DBE dbe )
{
if ( ! checkProjectPath() )
{
ack "尚未选择需要搜索的工程夹,请选择!"
halt
}
if ( ! checkSelectedDate() )
{
ack "搜索日期不符合查询条件,请重新设置!"
halt
}
empty dbeResultList
Project selectedPro = project ( get dbeProjctPath )
Item itemRef
for itemRef in selectedPro do
{
if ( type(itemRef) == "Formal" )
{
Module m = read ( fullName itemRef , false ) // 影响效率的语句
string matchDateMod = searchByDate ( m , "Created On")
if ( matchDateMod != null )
insert ( dbeResultList , 0 , matchDateMod )
close m
}
}
}
//=====================界面实现区======================
dbeProjctPath = field ( dbSerMod, "*工程夹:" , "" , 45 , true)
dbeProPathBut = button ( dbSerMod, "浏览" , searchProjectPath )
dbeProPathBut -> "left" -> "flush" -> dbeProjctPath
dbeProPathBut -> "top" -> "aligned" -> dbeProjctPath
separator dbSerMod
DBE dbeStartLabel = label ( dbSerMod, "*开始日期:" )
dbeStartDate = date( dbSerMod , 20 , today , true )
dbeStartDate -> "left" -> "flush" -> dbeStartLabel
dbeStartDate -> "top" -> "aligned" -> dbeStartLabel
DBE dbeEndLabel = label ( dbSerMod, "*结束日期:" )
dbeEndLabel -> "left" -> "flush" -> dbeStartDate
dbeEndLabel -> "top" -> "aligned" -> dbeStartDate
dbeEndDate = date( dbSerMod , 20 , today , true )
dbeEndDate -> "left" -> "flush" -> dbeEndLabel
dbeEndDate -> "top" -> "aligned" -> dbeEndLabel
dbeSearchButton = button( dbSerMod , "搜索模块" , searchMain )
separator dbSerMod
string initResultStr[] = ""
dbeResultList = list ( dbSerMod, "符合搜索条件的模块如下:" , 200 , 10 , initResultStr )
separator dbSerMod
string descInfo = " 注意:1、搜索模块前,请关闭当前打开的所有模块! 2、带*号的选项为必选项! "
DBE dbeDescLael = label ( dbSerMod , descInfo )
//realize dbSerMod
show dbSerMod
大家可以积极讨论,此代码已在Doors82上运行通过,如有需要,请复制下来运行,切勿用于商用。