加入收藏 | 设为首页 | Life家族 | SCMLife | RMLife | PMLife | SQALife | TESTLife | 企业VIP专区

查看完整版本: 查找符合条件的模块___DXL

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上运行通过,如有需要,请复制下来运行,切勿用于商用。
页: [1]
查看完整版本: 查找符合条件的模块___DXL