|
| |
|
Перенос поддерева отчетов между пользовательскими базами данных ClearQuest
Аннотация |
      
В задачу администрирования дерева отчетов в пользовательской базе данных довольно часто входит элемент клонирования отчетов. Например, потребовалось для нескольких проектов иметь идентичные поддеревья отчетов. Существует несколько способов клонирования отчетов, каждый из которых применим при некоторых ограничениях.
|
Способы клонирования |
|
| Клонирование отчетов в одной пользовательской базе не составляет труда - отчеты копируются в раздел "Personal Queries", настраиваются, а затем вновь копируются в раздел "Public Queries". |
| Клонирование отчетов посредством механизма "Export" - требуемые для копирования отчеты экспортируются в файлы, а затем на другой пользовательской базе данных импортируются и перенастраиваются. Данный способ пригоден только при небольшом количестве копируемых отчетов. |
| Клонирование отчетов при помощи утилиты "bkt_tool" - самый мощный механизм, предназначенный для копирования большого числа отчетов. |
|
|
Применение утилиты bkt_tool |
   Использование стандартной утилиты ClearQuest для выгрузки дерева отчетов является оптимальным вариантом при операциях с большим числом отчетов. Однако, возникает серьезная проблема при импорте в другую пользовательскую базу данных части из исходного числа отчетов. Стандартных механизмов для такой операции нет, поэтому необходимо воспользоваться дополнительным сценарием перенумерования файлов отчетов (см. ниже).
|
Экспорт файлов отчетов: |
|
bkt_tool -e -b ESavitsky
-dbset CMS.INIKEV.INITS -us ESavitsky
-P ******* -db NPPM e:\temp\cq\buckets
|
|
-e - экспорт |
-b - имя пользователя, чьи персональные отчеты будут выгружены |
|
|
|
|
|
|
|
|
Импорт файлов отчетов: |
|
bkt_tool -i
-dbset CMS.INIKEV.INITS -us ESavitsky
-P ******* -db SAMPL e:\temp\cq\buckets
|
|
|
|
|
|
|
|
|
|
Сценарий перенумеровки файлов |
   Проблема с импортом только части отчетов заключается в нумерации файлов отчетов (формат - bkt####.dat). Импортироваться будут только файлы, начиная с нулевого индекса - bkt0000.dat.
| 1. Необходимо отредактировать файл "config.dat" - удалить ссылки на лишние отчеты, предварительно запомнив номера первой и последней строк выделяемой части отчетов; |
| 2. Запустить сценарий перенумерации, который удалит лишние файлы отчетов и перенумерует оставшиеся файлы в порядке сквозной нумерации начиная с 0. |
|   |
|
======================================== renumber.vbs ===========================================
' Параметры запуска:
' 1 - путь к каталогу с файлами отчетов,
' 2 - номер первой строки (по файлу config.dat) выделяемой части за вычетом единицы (нумерация с нуля),
' 3 - номер последней строки (по файлу config.dat) выделяемой части за вычетом единицы.
'
'
Set objArgs = WScript.Arguments
If objArgs.Count < 3 Then
WScript.Echo("parameters: <buckets path> <first bucket> <last bucket>")
WScript.Quit(-1)
End If
' путь к файлам
'
szPath = objArgs(0)
firstBucket = CInt(objArgs(1))
lastBucket = CInt(objArgs(2))
set fso = WScript.CreateObject("Scripting.FileSystemObject")
set fls = fso.getFolder(szPath).Files
' удаляем лишние файлы
for each file in fls
if UCase(Mid(file.name, 1, 3)) = "BKT" then
' номер текущего файла
curindex = CInt(mid(file.name, 4, 4))
' определим минимальный номер
if curindex < firstBucket or curindex > lastBucket then
file.Delete
end if
end if
next
index = 0
curindex = 0
' перенумеруем файлы
for i=1 to fls.count
minindex = 1000
Set chfile = Nothing
for each file in fls
if UCase(Mid(file.name, 1, 3)) = "BKT" then
' номер текущего файла
curindex = CInt(mid(file.name, 4, 4))
' определим минимальный номер
if curindex < minindex and curindex >= index then
minindex = curindex
Set chfile = file
end if
end if
next
If not chfile is Nothing then
if UCase(Mid(chfile.name, 1, 3)) = "BKT" then
if Mid(chfile.name, 4, 4) <> Format(index) then
chfile.name = "bkt" & Format(index) & ".dat"
end if
index = index + 1
end if
end if
next
WScript.Echo "All .bkt-files have been renumbered successfully !"
Function Format(num)
if num < 10 then
Format = "000" & CStr(num)
elseif num < 100 then
Format = "00" & CStr(num)
elseif num < 1000 then
Format = "0" & CStr(num)
else
Format = CStr(num)
end if
End Function
=================================================================================================
|
|
|
|