// List Link Counts per Linkset
/*
Recursively scan the current folder or project and generates a
count of Links per Linkset.
Output is to a CSV file.
Tony Goodman.
*/
pragma runLim,0 /* turn off timeout dialog */
DB dbMain = null
DBE dbeExport = null
DBE dbeExportPath = null
Folder currFolder = null
Buffer outBuf = null
/******************************************************************************
scanLinkModule
******************************************************************************/
void scanLinkModule(Item itm)
{
Module lm = null
Module sm = null
Object o = null
string lmn = ""
string src = ""
string tgt = ""
int count = 0
ModuleVersion mv = null
Link l = null
lmn = fullName(itm)
// read the link module
lm = read(lmn, false)
for o in lm do
{
// get names of source and target modules
src = o."source" ""
tgt = o."target" ""
// read the source module
sm = read(src, false)
filtering off
for o in all(sm) do
{
for l in all(o->lmn) do
{
// check for target module for matching name
mv = targetVersion(l)
if (fullName(mv) == tgt)
{
count++
}
}
}
close(sm)
// output count for this linkset
outBuf += lmn "," src "," tgt "," count "\n"
}
close(lm)
}
/******************************************************************************
scanFolder
******************************************************************************/
void scanFolder(Folder f)
{
Item itm
if (null f) return
for itm in f do
{
if (null itm) continue
if (isDeleted(itm)) continue
if (type(itm) == "Link")
{
scanLinkModule(itm)
}
else if ((type (itm) == "Project") || (type (itm) == "Folder"))
{
scanFolder(folder(itm))
}
}
}
/******************************************************************************
doClose
******************************************************************************/
void doClose(DB db)
{
release(dbMain)
}
/******************************************************************************
doList
******************************************************************************/
void doList(DB db)
{
outBuf = create
outBuf = ""
string fName = get(dbeExportPath)
Stream outfile = write(fName)
outfile << "Link Module, Source Module, Target Module, No.Links\n"
scanFolder(currFolder)
outfile << outBuf
close(outfile)
delete(outBuf)
doClose(db)
}
/******************************************************************************
MAIN
******************************************************************************/
currFolder = current Folder
dbMain = create("List Link Counts")
label(dbMain, "This utility exports a count of all links per linkset.\n" //-
"Output is to a CSV file as follows:\n" //-
"Link Module, Source Module, Target Module, No.Links\n")
dbeExport = field(dbMain, "Folder", fullName(currFolder), 50, true)
dbeExportPath = fileName(dbMain, "Report File", "C:/Temp/" name(currFolder) " LinkCounts.csv")
ok(dbMain, "OK", doList)
close(dbMain, true, doClose)
realize dbMain
block(dbMain)
destroy(dbMain)
dbMain = null
sitemap