Работа с атрибутами
Атрибутов в системе K3 называется дополнительная негеометрическая информация об объекте. Каждый объект может содержать один или несколько атрибутов, а может не содержать их вовсе. Сам атрибут можно условно разделить на две составляющие:
- Шаблон атрибута. Он определяет характеристики той негеометрической информации, которую содержит объект.
- Значение атрибута. Оно определяет величину, значение той информации, которая задана шаблоном атрибута.
Атрибуты в K3 бывают следующих типов:
- Строковый;
- Числовой;
- Логической;
- Текстовый.
Тип того или иного атрибута задается шаблоном атрибута и определяет возможные значения этого атрибута.
Команды работы с атрибутами можно условно разделить на два класса
- Работа с шаблонами атрибутов
- Работа со значениями атрибутов
Шаблон атрибута един для всех объектов системы. Сам же атрибут у каждого объекта может иметь свое значение, а может быть не присвоен объекту вовсе.
Работа с шаблонами атрибутов
Команда attribute имеет несколько режимов работы, которые представлены ниже.
attribute create <Name> <Prompt> <Type> <N1> <N2> [enum [on|off]] [default <Value>] done
Команда создает шаблон атрибута с именем <Name>
, подсказкой <Prompt>
, типом <Type>
. Возможные типы шаблонов атрибутов и параметров <N1>
и <N2>
представлены в таблице:
|
| |||
---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Дополнительные ключи задают перечисляемость атрибута (enum [on|off]
) и значение по умолчанию (default <Value>
).
Пример:
attribute create "Super" "Суперподсказка" string 10 20 enum on default "Пустота" done;
attribute edit <Name> <Params>
Команда редактирует шаблон атрибута с именем <Name>
, позволяя изменять параметры шаблона атрибута <Params>
. Возможные значения <Params>
представлены в таблице:
|
|
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
attribute delete all | <Name>
Команда удаляет шаблон атрибута с именем <Name>
или все пользовательские шаблоны атрибутов (all
).
Работа со значениями атрибутов
attrobj
Команда attrobj имеет несколько режимов работы, которые представлены ниже.
attrobj attach { all | <Name1>, <Name2>, …, <NameN> done | record } [partly|wholly] <Obj> <Value1>, <Value2>, …, <ValueN>
Команда присваивает объекту <Obj>
атрибуты с именами <Name1>
, <Name2>
, …, <NameN>
и значениями <Value1>
, <Value2>
, …, <ValueN>
. Ключ all
позволяет присвоить все имеющиеся атрибуты. Ключ record
позволяет получить список атрибутов для присвоения из рабочей записи. В качестве объекта <Obj>
может выступать объект K3 (<Object>
), несколько объектов (group <Objects>
), рабочая запись (record
), блок (block <Name>
).
Также присвоение атрибутов объектам может осуществляться с перебором (question
). В последнем случае перед присвоением очередному объекту атрибутов выдается запрос, нужно ли данному объекту атрибуты присваивать. При этом текущий объект выделяется. В макропрограммах данный режим работы неудобен.
attrobj edit [partly|wholly] <Obj> {all | <Name1>, <Name2>, …, <NameN> done <Value1>, <Value2>, …, <ValueN>
}
Команда редактирует у объекта <Obj>
атрибуты с именами <Name1>
, <Name2>
, …, <NameN>
и присваивает им новые значения <Value1>
, <Value2>
, …, <ValueN>
. Ключ all
позволяет отредактировать все имеющиеся атрибуты. В качестве объекта <Obj>
может выступать объект K3 (<Object>
), рабочая запись (record
), блок (block <Name>
).
attrobj copy [partly|wholly] <Obj1> {all | <Name1>, <Name2>, …, <NameN>} done <Obj2>
Команда копирует у объекта <Obj1>
атрибуты с именами <Name1>
, <Name2>
, …, <NameN>
и присваивает их объекту <Obj2>
. Ключ all
позволяет копировать все имеющиеся атрибуты. В качестве объектов <Obj1>
и/или <Obj2>
может выступать объект K3 (<Object>
), рабочая запись (record
), блок (block <Name>
). В качестве объектов <Obj2>
может выступать также несколько выбранных объектов (group <Object1> <Object2>
... done
) или несколько выбранных объектов с перебором(question <Object1> <Object2>
... done
).
Если выбран режим копирования с перебором (question
), то перед присвоением очередному объекту атрибутов выдается запрос, нужно ли данному объекту атрибуты присваивать. При этом текущий объект выделяется. В макропрограммах данный режим работы неудобен.
attrobj delete [partly|wholly] <Obj> {all | <Name1>, <Name2>, …, <NameN>} done
Команда удаляет у объекта <Obj>
атрибуты с именами <Name1>
, <Name2>
, …, <NameN>
. Ключ all
позволяет удалить все имеющиеся атрибуты. В качестве объекта <Obj>
может выступать объект K3 (<Object>
), рабочая запись (record
), блок (block <Name>
), несколько выбранных объектов (group <Object1> <Object2>
... done
), несколько выбранных объектов с перебором(question <Object1> <Object2>
... done
).
Если выбран режим удаления с перебором (question
), то перед удалением атрибутов из очередного объекта выдается запрос, нужно ли это делать для выделенного на экране объекта. В макропрограммах данный режим работы неудобен.
attrinfo
attrinfo info [partly|wholly] <Obj>
Команда отображает в диалоговом окне значения атрибутов объекта <Obj>
. В качестве объекта <Obj>
может выступать объект K3 (<Object>
), рабочая запись (record
), блок (block <Name>
). Поскольку данная команда использует диалоговое окно, применять эту команду в макропрограммах не рекомендуется.
Функции работы с атрибутами объектов
За работу с атрибутами объектов отвечают функции: AttrType, IsAttrDef, IsAssign, IsValue, GetAttr, GetAttrText, TextByStr, attrdelete, attrcopy, AttrNmScan.
AttrType
INT AttrType(STRING <Name>)
Функция возвращает тип атрибута c именем <Name>:
- 1 — Строка текста;
- 2 — Числовой;
- 3 — Логический;
- 4 — Многострочный текст;
- 0 — Атрибут не определен
IsAttrDef
LOGICAL IsAttrDef(STRING <Name>)
Функция проверяет, определен ли в данный момент атрибут с именем <Name>
.
Функция возвращает
- 1 — атрибут определен,
- 0 — атрибут не определен.
IsAssign
LOGICAL IsAssign(STRING <Name> [,VARIANT <Holder>])
Проверяет, присвоен ли владельцу <Holder>
атрибут с именем <Name>
.
Необязательный параметр <Holder>
может быть одним из следующих типов:
OBJECT
— владелец — указанный объект;STRING
— владелец — блок с именем заданным строкой<Holder>
;INT
— владелец — рабочая запись.
Без указания владельца <Holder>
, может использоваться сценариями группового выбора в выражении, задающем условие выбора по атрибутам.
Пример:
select attribute “IsAssign(\”posit\”)”
IsValue
LOGICAL IsValue(STRING <Name> [,VARIANT <Holder>])
Функция проверяет, имеет ли значение атрибут с именем <Name>
у владельца <Holder>
. То есть, атрибут может быть присвоен объекту, а значение ему не присвоено.
Необязательный параметр <Holder>
может быть одним из следующих типов:
OBJECT
— владелец — указанный объект;STRING
— владелец — блок с именем заданным строкой<Holder>
;INT
— владелец — рабочая запись.
Без указания владельца <Holder>
, может использоваться сценариями группового выбора в выражении, задающем условие выбора по атрибутам.
Пример:
select attribute “IsValue(\”posit\”)”
GetAttr
VARIANT GetAttr(VARIANT <Holder>, STRING <Name>, VARIANT <Defvalue>)
Функция возвращает значение атрибута с именем <Name>
у владельца <Holder>
. Если атрибут не определен или не присвоен, возвращает значение, заданное параметром <Defvalue>
.
Необязательный параметр <Holder>
может быть одним из следующих типов:
OBJECT
— владелец — указанный объект;STRING
— владелец — блок с именем, заданным строкой<Holder>
;INT
— владелец — рабочая запись.
GetAttrText
INT GetAttrText(VARIANT <Holder>, STRING <Name>, {STRING ARRAY <S> | STRING <ArrayName> })
Если атрибут с именем <Name>
имеет тип «многострочный текст», функция заполняет массив <S>
строками этого текста. Если количество элементов в массиве <S>
меньше количества строк, заполняется весь массив.
Функция возвращает количество заполненных элементов массива.
Для атрибутов других типов возвращает ноль.
OBJECT
— владелец — указанный объект;STRING
— владелец — блок с именем заданным строкой<Holder>
;INT
— владелец — рабочая запись.
Если вместо имени массива <S>
указана строковая переменная <ArrayName>
, то создается массив с таким именем и заполняется строками текстового атрибута. Размерность массива в этом случае равна количеству строк в текстовом атрибуте.
TextByStr
INT TextByStr(VARIANT <Holder>, STRING <Textname>, INT <Num>, STRING ARRAY <Arr>)
Функция формирует текстовый атрибут с именем <Textname>
у владельца <Holder>
по первым <Num>
элементам строкового массива <Arr>
. Шаблон указанного атрибута уже должен существовать.
Функция возвращает количество заполненных строк в текстовом атрибуте.
attrdelete
INTEGER attrdelete(STRING <AttrName1>[, STRING <AttrName2>[, ...]])
Функция удаляет у всех объектов всех уровней атрибуты <AttrName1>
, <AttrName2>
и т.д. и возвращает количество обработанных объектов или -1, если произошла ошибка. Если атрибута с заданным именем не существует, функция игнорирует этот атрибут.
attrcopy
INTEGER attrcopy(STRING <AttrNameSrc>, STRING <AttrNameDst>)
Функция копирует значение атрибута <AttrNameSrc>
в атрибут <AttrNameDst>
у всех объектов всех уровней и возвращает количество обработанных объектов или -1, если произошла ошибка.
Функция реализована пока только для числовых атрибутов. |
AttrNmScan
INT AttrNmScan(VARIANT <ArrayName>[, OBJECT <Object>])
Функция заполняет массив <ArrayName>
именами атрибутов. Если <ArrayName>
имеет тип STRING
, то функция задает имя создаваемого массива, в который будут занесены имена атрибутов. Если <ArrayName>
имеет тип ARRAY
, то в него будут занесены имена атрибутов.
Если задан параметр <Object>
, то в <ArrayName>
будут занесены имена атрибутов, назначенные этому объекту. Если второй параметр не задан, то в <ArrayName>
будут занесены имена все определенных в системе шаблонов атрибутов.
Функция возвращает количество заполненных элементов в массиве <ArrayName>
.
Если размерности массива <ArrayName>
не достаточно, то функция вернет количество заполненных элементов в массиве <ArrayName>
со знаком "минус".
Функции работы с атрибутами в группе
Int SetAttrValG(object <Obj>, string <Name>, variant <Value>)
Функция SetAttrValG присваивает атрибуту с именем <Name>
у объекта <Obj>
, входящего в состав группы значение <Value>
. Функция возвращает:
- 1 — Значение присвоено;
- 2 — У данного объекта
<Obj>
нет атрибута с именем<Name>
; - 3 — Несоответствие типов. Тип атрибута с именем
<Name>
отличается от типа<Value>
; - 0 — Прочие виды ошибок
Int DelAttrValG(object <Obj>, string <Name>)
Функция DelAttrValG удаляет атрибут с именем <Name>
у объекта <Obj>
. Функция возвращает:
- 1 — Удаление прошло успешно;
- 2 — У данного объекта
<Obj>
нет атрибута с именем<Name>
; - 0 — Прочие виды ошибок
Для чтения значений атрибутов у объекта, находящегося внутри группы, используются обычные функции работы с атрибутами. |