//=========================================================
#include cfg_all.inc // константы для использования конфигуратора
#include cfg_err.inc
end;
//=========================================================
table struct cfsObjects
(
NRec : comp,
Npp : longInt,
Name : string,
objType : string
)
with index
(
cfsObjects0 = NRec(unique, surrogate)
);
//---------------------------------------------------------
table struct cfsProps
(
NRec : comp,
object : comp,
Npp : longInt,
Name : string,
Value : string
)
with index
(
cfsProps0 = NRec(unique, surrogate),
cfsProps1 = object
);
//=========================================================
interface ApiConfTest 'Тест API конфигуратора' escclose;
show at(1,1,79,30);
//---------------------------------------------------------
create view
as select
*
from
cfsObjects, cfsProps
where
((
cfsObjects.NRec == cfsProps.object
))
;
//---------------------------------------------------------
procedure ShowResult(retcod: longInt; msg: string);
/*
* Процедура переводит код retcod в идентификатор соответствующей
* константы, добавляет ее к строке msg и выводит полученное сообщение.
*/
{
var errmsg: string;
case retcod of
cfErrContainerObjectNotExist:
errmsg := 'cfErrContainerObjectNotExist';
cfErrObjectNotExist:
errmsg := 'cfErrObjectNotExist';
cfErrPropNotExist:
errmsg := 'cfErrPropNotExist';
cfErrPropValueError:
errmsg := 'cfErrPropValueError';
cfErrBadFieldType:
errmsg := 'CfErrBadFieldType';
cfOk:
errmsg := 'cfOk';
else
errmsg := 'ошибка сервисной функции свойства= ' + retcod;
end;
Message(msg + ': ' + errmsg);
}
//---------------------------------------------------------
function Fill_cfsProps(objName : string) : boolean; forward;
//---------------------------------------------------------
function Fill_cfsObjects: boolean;
/*
* Функция заполняет таблицу cfsObjects объектами интерфейса ApiConfTest.
* Для каждого объекта вызывается функция Fill_cfsProps.
* Возвращает true, если ошибок не было, и false в противном случае.
*/
{
var aList: array [1..1] of string;
var i, n, rc, self: longInt;
var fullName, cont, objType: string;
SetLimit(aList, 0); // очистить массив
rc := cfsEnumObjects('ApiConfTest', aList, true);
if (rc <> cfOK)
{
ShowResult(rc, 'Ошибка получения списка объектов для контейнера "ApiConfTest"');
Fill_cfsObjects := false;
exit;
}
n := Count(aList);
for (i := 1; i <= n; i := i + 1)
{
ClearBuffer(#cfsObjects);
cfsObjects.Npp := i;
cfsObjects.Name := aList[i];
rc := cfsGetObjInfo(aList[i], fullName, self, cont, objType);
if (rc = cfOK)
cfsObjects.objType := objType;
else
cfsObjects.objType := 'Error';
if (insert current cfsObjects <> tsOk)
{
message('Ошибка добавления записи в таблицу cfsObjects');
Fill_cfsObjects := false;
break;
}
// заполнить таблицу cfsProps свойствами текущего объекта.
Fill_cfsObjects := Fill_cfsObjects AND Fill_cfsProps(aList[i]);
}
}
//---------------------------------------------------------
function Fill_cfsProps(objName : string) : boolean;
/*
* Функция заполняет таблицу cfsProps свойствами объекта objName.
* Возвращает true, если ошибок не было, и false в противном случае.
*/
{
var aList: array [1..1] of string;
var fullName: string;
var i, n, rc, propType, flags: longInt;
var sValue: string;
var wValue: word;
SetLimit(aList, 0); // очистить массив
rc := cfsEnumProps(objName, aList);
if (rc <> cfOK)
{
ShowResult(rc, 'Ошибка получения списка свойств для объекта ' + aList[i]);
}
else
{
i := 1;
n := Count(aList);
Fill_cfsProps := true;
while (i <= n)
{
ClearBuffer(#cfsProps);
cfsProps.Npp := i;
cfsProps.Name := aList[i];
case cfsProps.Name of
'Title':
{
rc := cfsGetProp(objName, aList[i], sValue);
cfsProps.Value := sValue;
}
'TextAlign':
{
rc := cfsGetProp(objName, aList[i], wValue);
cfsProps.Value := wValue;
}
else
cfsProps.Value := 'unknown';
end;
if (insert current cfsProps <> tsOk)
{
message('Ошибка добавления записи в таблицу Props');
Fill_cfsProps := false;
break;
}
i := i + 1;
}
}
}
//---------------------------------------------------------
browse brObjects;
show at(,1,,7);
table cfsObjects;
fields
cfsObjects.Npp #3'N п/п' ('Порядковый номер объекта',,) : [5], protect;
cfsObjects.Name #3'Объект' ('Имя объекта',,) : [20], protect;
cfsObjects.objType #3'Тип объекта' ('Тип объекта',,) : [20], protect;
end;
//---------------------------------------------------------
browse brProps;
show at(,8);
table cfsProps;
fields
cfsProps.Npp #3'N п/п' ('Порядковый номер объекта',,) : [5], protect;
cfsProps.Name #3'Свойство' ('Свойство',,) : [20], protect;
cfsProps.Value #3'Значение свойства' ('Значение свойства',,) : [10], noProtect;
end;
//---------------------------------------------------------
handleEvent
cmInit:
Fill_cfsObjects;
cmUpdateRecord:
{
var sValue: string;
var wValue: word;
var rc : longInt;
case cfsProps.Name of
'Title':
{
sValue := cfsProps.Value;
rc := cfsSetProp(cfsObjects.Name, cfpTitle, sValue);
if (update current cfsProps <> tsOK) {};
}
'TextAlign':
{
wValue := cfsProps.Value;
rc := cfsSetProp(cfsObjects.Name, cfpTextAlign, wValue);
if (update current cfsProps <> tsOK) {};
}
end;
}
end // handleEvent
end.