Работа с атрибутами
Атрибутом в системе 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>).
Пример на макроязыке к3:
attribute create "Super" "Суперподсказка" string 10 20 enum on default "Пустота" done;
Пример на языке python:
k3.attribute(k3.k_create, "Super", "Суперподсказка", k3.k_string, 10, 20, k3.k_enum, k3.k_on, k3.k_default, "Пустота", k3.k_done)
attribute edit <Name> <Params>
Команда редактирует шаблон атрибута с именем <Name>, позволяя изменять параметры шаблона атрибута <Params>. Возможные значения <Params> представлены в таблице:
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
attribute delete all | <Name>
Команда удаляет шаблон атрибута с именем <Name> или все пользовательские шаблоны атрибутов (all).
Команды редактирования и удаления шаблонов атрибутов работают только с пользовательскими атрибутами. В системе K3 существует множество системных атрибутов, на которые действие описанных выше команд не распространяется.
В командах работы с атрибутами может присутствовать ключ
list(список), который позволяет работать с атрибутами посредством диалоговых окон. В макропрограммах удобнее работать с атрибутами из командной строки.
Работа со значениями атрибутов
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>, может использоваться сценариями группового выбора в выражении, задающем условие выбора по атрибутам.
Пример на макроязыке к3:
select attribute “IsAssign(\”posit\”)”
IsValue
LOGICAL IsValue(STRING <Name> [,VARIANT <Holder>])
Функция проверяет, имеет ли значение атрибут с именем <Name> у владельца <Holder>. То есть, атрибут может быть присвоен объекту, а значение ему не присвоено.
Необязательный параметр <Holder> может быть одним из следующих типов:
OBJECT— владелец — указанный объект;STRING— владелец — блок с именем заданным строкой<Holder>;INT— владелец — рабочая запись.
Без указания владельца <Holder>, может использоваться сценариями группового выбора в выражении, задающем условие выбора по атрибутам.
Пример на макроязыке к3:
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, если произошла ошибка.
Внимание!
Функция attrcopy реализована пока только для числовых атрибутов.
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 — Прочие виды ошибок
Для чтения значений атрибутов у объекта, находящегося внутри группы, используются обычные функции работы с атрибутами.

