@boristype/types
Version:
<h1 align="center">WT Types</h1> <div align="center"> Typescript типы для WebSoft HCM.
901 lines (790 loc) • 56.8 kB
TypeScript
interface XmElem<T, ForeignElem = never> {
/**
* Возвращает массив названий атрибутов элемента.
* Элемент должен быть динамическим, поскольку для статических элементов атрибуты не поддерживаются.
*/
AttrNames: string[];
/**
* Идет вверх по иерархии элементов, и возвращает первый с атрибутом `MULTIPLE=1`.
* Если такого элемента нет, возвращается ошибка.
*/
BaseMultipleElem: XmlElem<T> | never;
/**
* Возвращает индекс текущего элемента внутри родительского элемента, начиная с `0`.
* Если родительского элемента нет - возвращается ошибка.
*/
ChildIndex: number | never;
/**
* Возвращает документ, в состав которого входит текущий элемент.
* Если документа нет - возвращает ошибку.
*/
Doc: XmlDocument | never;
/**
* Возвращает основное отображаемое значение элемента для внешнего использования,
* например, для внешних ссылок. Обычно используется для элементов каталога.
* Для простых элементов совпадет с {@link PrimaryDispName}, если элемент иерархический -
* возвращает всю цепочку имен по иерархии.
*/
ExternalDispName: string;
/**
* Возвращает целевой массив (вычисляет выражение, описанное в атрибуте `FOREIGN-ARRAY`).
* Если атрибут `FOREIGN-ARRAY` в форме элемент не описан, возвращается ошибка.
*/
ForeignArray: unknown[];
/**
* Возвращает значение атрибута `FOREIGN-ARRAY` в том виде,
* в котором оно был описан в форме.
*/
ForeignArrayCodeStr: string;
/**
* Возвращает внешнее первичное отображаемое значение того объекта, на который ссылается атрибут `FOREIGN-ELEM`.
* Для обычных элементов конструкция `person.org_id.ForeignDispName`
* эквивалентна `person.org_id.ForeignElem.ExternalDispName`
* Для элементов типа `MULTIPLE` результат составляется из всех значений одиночных элементов,
* разделенных через запятую.
* Таким образом конструкция `candidate.profession_id.ForeignDispName`
* эквивалентна `ArrayMerge(candidate.profession_id, 'ForeignElem.ExternalDispName', ', ')`.
*/
ForeignDispName: string;
/**
* Возвращает соответствующий элемент целевого массива (описанного в атрибуте `FOREIGN-ARRAY`).
* Если элемент не найден - возвращает ошибку.
*/
ForeignElem: ForeignElem | never;
/**
* Атрибут возвращает `URL` объекта, на который ссылается атрибут ForeignElem из текущего элемента.
* Целевой массив должен быть каталогом.
* В новой объектной модели конструкция `person.org_id.ForeignObjectUrl`
* эквивалентна `person.org_id.ForeignElem.ObjectUrl`
* но, в отличие от последней, не осуществляет поиск целевого элемента,
* а только использует имя каталога из `FOREIGN-ELEM`.
* В старой объектной модели конструкция `person.org_id.ForeignObjectUrl`
* эквивалентна `UrlFromDocID(person.org_id)`.
*/
ForeignObjectUrl: string;
/**
* Атрибут аналогичен {@link ForeignObjectUrl}, но, в случае, если от целевого объекта
* могут существовать наследуемые объекты, пытается найти конечный элемент в цепочке наследования,
* и возвращает его объектный `URL`.
* @example
* ```
* event.person_id.ForeignPrimaryObjectUrl == "x-db-obj://data/person/0x4D59AF5E5947A89.xml"
* // если целевой объект является кандидатом
* event.person_id.ForeignPrimaryObjectUrl == "x-db-obj://data/candidate/0x4D59AF5E5947A89.xml"
* ```
*/
ForeignPrimaryObjectUrl: string;
/**
* Возвращает ссылку на форму, по которой был открыт документ.
* Если документ открыт без формы, возвращается ошибка.
*/
Form: XmlForm | never;
/**
* Возвращает ссылку на элемент формы текущего элемент.
* Причем такая ссылка возвращается независимо от того,
* был документ открыт по форме или нет.
* Если элемент был создан по форме, выдается ссылка на элемент формы,
* по которой он был открыт. Если нет - на динамический элемент формы,
* созданный специально для данного элемента.
*/
FormElem: XmlFormElem;
/**
* Возвращает полный путь до текущего элемента относительно корня формы.
*/
FormPath: string;
/**
* Возвращает `true`, если элемент содержит значение, и `false`, если не содержит.
* Этот универсальный атрибут позволяет создавать единый код для всех типов элементов.
* Так, например, если элемент имеет тип `string`, то при отсутствии значения
* элемент будет равен пустой строке. Если же элемент имеет тип, например,
* `integer`, то при отсуствии значения элемент будет равен `null`.
* Атрибут {@link HasValue} работает с элементами любого типа, в т.ч. `variant`.
*/
HasValue: boolean;
/**
* Возвращает `URL` картинки элемента.
* Атрибут доступен для записей в каталоге или для корневых элементов документа,
* и вычисляет значение атрибутов элемента `IMAGE-URL` или `IMAGE-URL-EXPR`,
* описанных в `XMD`-форме.
*/
ImageUrl: string;
/**
* Возвращает массив всех соответствующих множественных элементов.
* Сам по себе данный метод не несет особого смысла, поскольку объект
* {@link XmlMultiElem} сам является массивом, но, в сочетании с одноименным
* методом объекта {@link XmlElem} позволяет создавать универсальный код для
* работы как с обычными так и множественными элементами.
* @example
* ```
* // Возвращает массив из всех элементов profession_id
* const array = candidate.profession_id.Instances;
* Возвращает массив из единственного элемента location_id
* const array = candidate.location_id.Instances;
* ```
*/
Instances: T[];
/**
* Возвращает true, если элемент является динамическим, и false, если он построен по форме.
*/
IsDynamic: boolean;
/**
* Проверяет, является ли данный элемент первым среди дочерних элементов
* своего родительского элемента.
*/
IsFirstSibling: boolean;
/**
* Проверяет, является ли данный элемент последним среди дочерних элементов
* своего родительского элемента.
*/
IsLastSibling: boolean;
/**
* Содержит значение `true`, если элемент является вторичным
* (т.е. Элемент формы, по которой был открыт текущий элемент,
* содержит атрибут `SECONDARY=1`). Вторичный элемент не вводится пользователем,
* а вычисляется, как правило при выполнении метода OnSave.
*/
IsSecondary: boolean;
/**
* Всегда возвращает `false`.
* Аналогичный метод объекта {@link XmlMultiElem} всегда возвращает `true`.
* Это позволяет по конструкции вида `candidate.profession_id.IsMultiElem` определять
* был ли элемент `profession_id` описан c атрибутом `MULTIPLE=1`.
*/
IsMultiElem: boolean;
/**
* Содержит значение `true`, если элемент является временным
* (т.е. Элемент формы, по которой был открыт текущий элемент,
* содержит атрибут `TEMP=1`).
*/
IsTemp: boolean;
/**
* Возвращает `true`, если элемент является корневым элементом документа.
*/
IsTopElem: boolean;
/**
* Возвращает имя элемента.
* Для динамических элементов атрибут доступен на запись.
*/
Name: string;
/**
* Возвращает элемент, следующий по порядку за текущим в списке
* дочерних элементов родительского элемента. Если текущий элемент
* является последним, возвращается ошибка.
*/
NextSibling: XmlElem<T> | never;
/**
* Работает только для записей в каталоге, или корневых элементов объектных документов.
* Возвращает `URL` объекта.
* Использование этого атрибута позволяет применять быстрые конструкции, например
* `OpenDoc(record.ObjectUrl)`. Атрибут берет элемент `id` от данной записи,
* имя объекта, и формирует правильный `URL` автоматически.
* Атрибут также работает в старой объектной модели.
*/
ObjectUrl: string;
/**
* Возвращает документ, в состав которого входит текущий элемент.
* Если элемента не относится к документу - возвращает `undefined`.
*/
OptDoc: XmlDocument | undefined;
/**
* Возвращает соответствующий элемент целевого массива, описанного в атрибуте `FOREIGN-ARRAY`.
* Если элемент не найден - возвращает `undefined`.
*/
OptForeignElem: ForeignElem | undefined;
/**
* В случае если элемент находится в документе, открытом в экране, возвращает ссылку на экран, иначе - `undefined`.
* Смотри также атрибут {@link Screen}.
*/
OptScreen: typeof Screen | undefined;
/**
* Возвращает родительский элемент текущего элемента, если таковой есть.
* Если родительского элемента нет, возвращает ошибку.
*/
Parent: XmlTopElem | never;
/**
* Возвращает предыдущий относительно текущего элемент в списке дочерних элементов родительского элемента.
* Если элемент является первым, возвращает ошибку.
*/
PrevSibling: XmlElem<T> | never;
/**
* Возвращает первичное отображаемое имя объекта.
* Метод доступен для записей в каталоге, либо для корнвых элементов объектных документов.
*/
PrimaryDispName: string;
/**
* Возвращает элемент - первичный ключ текущего элемента.
* Первичный ключ должен быть описан в форме как `PRIMARY-KEY`.
* Для записи в каталоге первичным ключом автоматически считается элемент `<id>`.
*/
PrimaryKey: XmlElem<string | number>;
/**
* Атрибут работает аналогично {@link ObjectUrl}, но учитывает возможность наследования.
* Атрибут проверяет наличие наследуемого элемента, и, если таковой есть,
* возвращает последний объект в цепочке наследования.
* Например, в `E-staff` `candidate` наследуется от `person`. Если в этом случае
* применить атрибут {@link PrimaryObjectUrl} к объекту `candidate`, то будет
* возвращен `URL` объекта `candidate`. Если применить атрибут {@link PrimaryObjectUrl}
* к объекту `person`, и `person` является кандидатом, то будет возвращен `URL` объекта `candidate`.
*/
PrimaryObjectUrl: string;
/**
* Флаг, обозначающей, что элемент доступен только на чтение.
* Если данные элемент установить в `true`, то последующие попытки изменить
* содержимое элемента или его дочерних элементов вызовут ошибку.
* При помещении ссылки на какой-либо элемент в объект `web-сервера` {@link Session},
* у такого элемента флаг {@link ReadOnly} автоматически устанавливается в `true`,
* для предотвращения возможных одновременных изменений элемента из разных потоков,
* что является не `thread-safe` операцией.
*/
ReadOnly: boolean;
/**
* В случае если элемент находится в документе, открытом в экране,
* возвращает ссылку на {@link Screen}, иначе - выдает ошибку.
* Смотри также атрибут {@link OptScreen}.
*/
Screen: typeof Screen | never;
/**
* Атрибут применим только к элементам типа `string`.
* Возвращает длину строки в байтах.
* Конструкция `elem.Size` возвращает тот же результат, что и {@link StrLen}(elem) но, в отличие от последней,
* не загружает в память содержимое элемента с внешним хранением `BLOB`.
*/
Size: number;
/**
* Возвращает описание местоположения элемента формы в исходном коде,
* например "x-local://data/static/global_settings.xml, line 11".
* Обычно используется в отладочных целях, либо для выдачи сообщения об ошибке.
*/
SourceDesc: string;
/**
* Возвращает заголовок элемента, который был описан в `XMD`-форме атрибутом
* `TITLE` или `TITLE-EXPR`.
*/
Title: string;
/**
* Возвращает тип данных элемента: `string`, `integer` и т.д.
*/
Type: string;
/**
* Означает, что текущий элемент будет сохраняться не как обычный `XML`-элемент,
* а как `CData`. Этот атрибут может быть использован, например,
* при экспорте атрибута во внешние системы.
* Атрибут доступен только на запись.
*/
UseCData: boolean;
/**
* Значение элемента.
* Явно вызывать его не обязательно, так как это свойство по умолчанию,
* то есть при чтении значения элемента выражения `elem.Value` и просто `elem` тождественны.
* Однако, при записи значения иногда требуется вызывать этот атрибут в явном виде.
* Если вызывается функция или метод, которая возвращает элемент, например, метод {@link AddChild},
* то для установки значения нужно в явном виде указывать атрибут `Value`.
* @example
* ```
* entries.AddChild().Value = 10;
* ```
*/
Value: T;
/**
* Возвращает содержимое текущего элемента, включая дочерние элементы, если они есть, в виде строки в формате `XML`.
* Смотри также {@link XmlValue}.
*/
Xml: string;
/**
* Возвращает значение текущего элемента, оформленное по правилам `XML`,
* в том виде, в котором оно включается между тэгами.
* Строка `string` будет замаскирована знаками <&, число `integer` останется без изменений,
* логическое значение `boolean` будет представлено как `0` или `1`, дата будет
* записана в виде даты в формате `XML`.
*/
XmlValue: string;
/**
* Формирует константу в языке {@link XQuery} со значением текущего элемента, в зависимости от типа значения.
* Действует аналогично функции {@link XQueryLiteral}.
*/
XQueryLiteral: string;
/**
* Добавляет атрибут к текущему элементу.
* Метод работает только для динамических элементов.
* @param {string} name - Имя атрибута.
* @param {string} value - Значение атрибута.
*/
AddAttr(name: string, value: unknown): void;
/**
* Добавляет дочерний элемент и возвращает указатель на него.
* Если текущий элемент создан по форме, то он должен быть простым массивом.
* При этом аргументы для вызова функции не требуются.
* Если текущий элемент является динамическим (то есть построенным без формы),
* то добавляется дочерний динамический элемент с именем и типом, указанных
* в качестве аргументов.
* @param {string} name - Имя дочернего элемента.
* @param {string} type - Тип дочернего элемента.
* Смотрите также {@link InsertChild}.
*/
AddChild(name?: string, type?: string): XmlElem<T>;
/**
* Добавляет уже созданный элемент в качестве в качестве дочернего по отношению к текущему элементу.
* Аргументом может быть элемент, уже созданный каким-либо образом, например, через функцию {@link CrateElem}.
* @param {XmlElem<T>} element - Созданный заранее элемент.
*/
AddChildElem(element: XmlElem<T>): void;
/**
* Добавляет динамический дочерний элемент к текущему элементу и возвращает
* ссылку на вновь созданный элемент. Текущий элемент при этом не обязан быть динамическим.
* По умолчанию создается обычная структура - составной элемент.
* @param {string} name - Имя элемента.
* @param {string} type - Тип элемента.
*/
AddDynamicChild(name: string, type?: string): XmlElem<T>;
/**
* Копирует в текущий элемент данные из другого элемента, включая дочерние элементы.
* Значения всех совпадающим по имени элементов копируются,
* элементы с атрибутом `MULTIPLE` при этом синхронизируются по количеству.
* Если присваиваемый и текущий элементы были созданы по разным формам -
* присваивются значения только по совпадающим полям.
* @param {K} element - Присваиваемый элемент.
*/
AssignElem<K = XmlElem<unknown>>(element: K): void;
/**
* Действует аналогично {@link AssignElem}, но текущему элементу присваиваются значения
* только по тем полям, которые в текущем элементе не заполнены.
* @param {K} element - Присваиваемый элемент.
*/
AssignExtraElem<K>(element: K): void;
/**
* Возвращает специальный псевдо-объект, позволяющий одновременно читать и
* записывать значение атрибута динамического элемента (например в SOURCE).
* Значение псевдо-объекта по умолчанию является значением атрибута,
* если атрибут с заданным именем присутствует, и пустая строка,
* если такого атрибута нет.
* При попытке установить непустое значение псевдо-объекта запишется
* соответствующее значение атрибута.
* При попытке установить пустое значение псевдо-объекта атрибут удалится.
* @param {string} attrName - Имя атрибута.
* @param {string} [attrType] - Тип атрибута (поддерживается "string" либо "bool"). Для "bool" функция вернет true или false вместо строки.
*/
Attr(attrName: string, attrType?: string): string | boolean;
/**
* Возвращает дочерний элемент по имени.
* Если элемента с заданным именем нет, выдает ошибку.
* Смотри также методы {@link OptChild} и {@link EvalPath}.
* @param {string} name - Имя дочернего элемента.
*/
Child(name: string): XmlElem<T> | never;
/**
* Возвращает дочерний элемент по индексу.
* Если элемента с заданным индексом нет, выдает ошибку.
* Смотри также методы {@link OptChild} и {@link EvalPath}.
* @param {index} index - Индекс дочернего элемента.
*/
Child(index: number): XmlElem<T> | never;
/**
* Проверяет, существует ли дочерний элемент с заданным значением ключевого поля.
* Смотри также {@link ChildByKeyExistsRec}.
* @param {K} value - Значение ключа.
* @param {string} name - Имя элемента, являющегося ключом.
* Необязательный аргумент.
* Если имя ключа не указано, используется первичный ключ.
*/
ChildByKeyExists<K>(value: K, name?: string): boolean;
/**
* Специализированный аналог также {@link ChildByKeyExists} с поддержкой рекурсивных массивов.
* Позволяет искать только по первиному ключу.
* @param {K} value - Значение ключа.
*/
ChildByKeyExistsRec<K>(value: K): boolean;
/**
* Проверяет, существует ли дочерний элемент с заданым значением.
* @param {K} value - Значение элемента.
*/
ChildByValueExists<K>(value: K): boolean;
/**
* Проверяет, существует ли дочерний элемент с заданым именем.
* @param {string} name - Имя элемента.
*/
ChildExists(name: string): boolean;
/**
* Если аргумент - обычный дочерний элемент, то метод просто возвращает его значение.
* Если аргумент - метод или атрибут с таким наименованием, то метод вычисляет его
* и возвращает вычисленное значение.
* @param {string} name - Имя дочернего элемента, метода или атрибута.
*/
ChildValue(name: string): T;
/**
* Очищает значение данного элемента и его дочерних элементов.
* Поля типа `string` становятся пустыми строками,
* поля других основных типов - становятся равны `null`.
* Если у полей есть значения по умолчанию - присваиваются значения по умолчанию.
* Элементы типа `MULTIPLE` удаляются.
*/
Clear(): void;
/**
* Создает клон текущего элемента и возвращает ссылку на него.
* Новый элемент не имеет родительского элемента.
*/
Clone(): this;
/**
* Создает динамический (отвязанный от формы) клон текущего элемента и
* возвращает ссылку на него.
* Новый элемент не имеет родительского элемента.
*/
CloneWithoutForm(): this;
/**
* Удаляет элемент.
* Элемент должен либо иметь атрибут `MULTIPLE`, либо быть динамическим элементом.
*/
Delete(): void;
/**
* Удаляет атрибут с заданным именем. Метод работает только для динамических элементов.
* Если атрибута с зданным именем нет, функция возвращает ошибку.
* Смотри также {@link DeleteOptAttr}.
* @param {string} name - Имя атрибута.
*/
DeleteAttr(name: string): void;
/**
* Удаляет первый найденный дочерний элемент с заданным значением ключевого поля.
* Если дочерний элемент не найден, возвращается ошибка.
* @param {K} value - Значение ключа.
* @param {string} name - Имя элемента, являющегося ключом. Если имя ключа не указано, используется первичный ключ.
*/
DeleteChildByKey<K>(value: K, name: string): void;
/**
* Удаляет все дочерние элементы, удовлетворяющие заданому условию.
* @param {string} expression - Строка, содержащая выражение/условие,
* вычисляемое относительно каждого значения элемента.
* Если выражение не указано, удаляются все дочерние элементы.
*/
DeleteChildren(expression: string): void;
/**
* Удаляет все дочерние элементы с заданным значением.
* @param {T} value - Заданное значение.
*/
DeleteChildrenByValue<T>(value: T): void;
/**
* Удаляет атрибут с заданным именем. Метод работает только для динамических элементов.
* Если атрибута с зданным именем нет, метод не производит никаких действий.
* Смотри также {@link DeleteAttr}.
* @param {string} name - Имя атрибута.
*/
DeleteOptAttr(name: string): void;
/**
* Удаляет первый найденный дочерний элемент с заданным значением ключевого поля,
* если такой элемент существует.
* @param {T} value - Значение ключа.
* @param {string} name - Имя элемента, являющегося ключом.
* Если имя ключа не указано, используется первичный ключ.
*/
DeleteOptChildByKey<T>(value: T, name: string): void;
/**
* Выполняет поэлементное, рекурсивное сравнение текущего элемента с другим заданным элементом.
* Возвращает `true`, если все поля всех подэлементов совпадают, `false` - если не совпадают.
* Сравнение производится по тем же правилом, по которым работает метод {@link AssignElem},
* то есть элементы, которые есть в форме одного элемент, но которых нет в форме другого, в сравнении не участвуют.
* Массивы сравниваются поэлементно, при этом требуется совпадение как количества лементов в массиве,
* так и порядка их следования.
* @param {K} element - Cравниваемый элемент.
*/
EqualToElem<K>(element: K): boolean;
/**
* Выполняет код, содержащийся в атрибуте XML-элемента.
* В отличие от обычных функций eval(), ExtEval() и пр.,
* выполнение кода в атрибуте дает лучшую диагностику ошибок,
* поскольку вместо "Unknown source, line xxx" будет выдаваться сообщение
* с правильным источником исходного кода.
* @experimental
* Узкоспециализированный метод. Используется в автоматических генераторах экранных форм.
* @param {string} attributeName - Имя атрибута. Если атрибут с данным именем отсутствует, возвращается ошибка.
* @param {unknown[]} [envsArray] - Массив объектов, формирумых окружение (по аналогии с конструкцией with{}).
*/
EvalCodeAttr(attributeName: string, envsArray?: unknown[]): void;
/**
* Возвращает все подчиненные (ниже лежащий по иерархии относительно текущего элемента)
* элементы, у которых путь относительно текущего элемента совпадает с заданным.
* @param path - Путь от текущего до целевого элемента,
* с разделением имен узлов точками.
*/
EvalMultiPath(path: string): unknown[];
/**
* Метод возвращает элемент вниз по иерархии с заданным
* путем относительно текущего элемента.
* Если элемент не найден, возвращает undefined.
* @param {string} path - Путь к элементу (через "." ).
*/
EvalOptPath<T extends XmlElem<unknown>>(path: string): T | undefined;
/**
* Возвращает внутренний (т.е. Ниже лежащий по иерархии относительно текущего элемента)
* элемент по заданному пути.
* Если путь неверный, возвращается ошибка.
* @param {string} path - Путь от текущего до целевого элемента, с разделением имен узлов точками.
*/
EvalPath<T>(path: string): T;
/**
* Проверяет, существует ли в форме текущего элемента дочерний элемент с таким именем,
* не являющийся методом.
* @param {string} name - Имя дочернего элемента.
* @example elem.FormChildExists("xxx") ↔ elem.Form.ChildExists("xxx") && !elem.Form.Child("xxx").IsMethod
*/
FormChildExists(name: string): boolean;
/**
* Находит дочерний элемент с заданным значением определенного атрибута.
* Если такой элемент не найден - возвращается ошибка.
* @param {string} name - Имя атрибута.
* @param {string} value - Значение атрибута.
*/
GetChildByAttrValue(name: string, value: unknown): XmlElem<unknown>;
/**
* Возвращает дочерний элемент с заданным значением ключевого поля.
* Если дочерний элемент не найден, возвращает ошибку.
* Смотри также {@link GetOptChildByKey}.
* @param {K} value - Значение ключа.
* @param {string} name - Имя элемента, являющегося ключом. Необязательный аргумент.
* Если имя ключа не указано, используется первичный ключ.
*/
GetChildByKey<K>(value: K, name?: string): XmlElem<T>;
/**
* Находит дочерний элемент с заданным значением и возвращает его порядковый индекс.
* Если элемент не найден, возвращает -1.
* @param {S} value - Значение.
*/
GetChildIndexByValue<S, T extends XmlElem<unknown> = XmlElem<unknown>>(value: S): T | -1;
/**
* Возвращает содержимое внутренних элементов текущего элемента,
* в виде строки в формате XML.
* @param {string} options - набор опций в виде конструктора JSON,
* или строки вида "name1=value1,name2=value2"
* inline-ext-objects - включать данные элементов с внешним хранением данных (EXT-DATA="1") в выводимый текст в base64
* tabs - использовать форматирование отступов при помощи символа табуляции. По умолчанию используется настройка из параметра конфигурационного файла XML-EXPORT-TABS.
* ForceDecimal - выводить большие десятичные значения (больше 2^32), обычно являющиеся идентификаторами объектов, в десятичном виде, а не в шестнадцатеричном, используемом по умолчанию.
*/
GetInnerXml(options?: string): string;
/**
* Метод {@link GetOptBoolAttr}() возвращает значение булевого ("0" или "1")
* атрибута в динамическом XML-элементе.
* Возвращаемое значение: true или false.
* Если атрибут отсутствует, функция возвращает undefined.
* @param {string} name - Имя атрибута.
*/
GetOptBoolAttr(name: string): boolean | undefined;
/**
* Возвращает дочерний элемент с заданным значением ключевого поля.
* Если дочерний элемент не найден, возвращает undefined.
* @param {K} value - Значение ключа.
* @param {string} name - Имя элемента, являющегося ключом. Необязательный аргумент.
* Если имя ключа не указано, используется первичный ключ.
*/
GetOptChildByKey<K>(value: K, name?: string): XmlElem<T> | undefined;
/**
* Метод GetOptChildValue() возвращает значение дочернего элемента,
* либо значение по умолчанию, если дочерний элемент отсутствует,
* либо имеет не тот тип.
* Метод позволяет работать с динамическими данными,
* про которые заранее не известно, соответствуют ли они форме.
* @param {string} childName - Имя дочернего элемента.
* @param {string} [type=string] - Тип дочернего элемента.
* @param defaultValue - Значение по умолчанию.
* Если не указано, то возвращаемое значение зависит от типа (пустая строка либо false).
*/
GetOptChildValue(childName: string, type?: string, defaultValue?: string): unknown;
/**
* Возвращает текстовое прдставление значения элемента.
*/
GetStr(): string;
/**
* Возвращает содержимое текущего элемента, включая дочерние элементы, если они есть, в виде строки в формате XML.
* Действие метода аналогично действию атрибута Xml, но позволяет задать дополнительные опции вывода.
* @param {string} options - Набор опций в виде конструктора JSON, или строки вида `name1=value1,name2=value2`
* Возможные опции:
* `inline-ext-objects` - включать данные элементов с внешним хранением данных `EXT-DATA=1`
* в выводимый текст в `base64`
* `tabs` - использовать форматирование отступов при помощи символа табуляции.
* По умолчанию используется настройка из параметра конфигурационного файла `XML-EXPORT-TABS`.
* DocHeader - включать заголовок вида `<?xml version="1.0" encoding="windows-1251"?>` в начало выводимого текста
* `ForceDecimal` - выводить большие десятичные значения (больше 2^32), обычно являющиеся идентификаторами объектов,
* в десятичном виде, а не в шестнадцатеричном, используемом по умолчанию.
*/
GetXml(options?: Object): string;
GetXml(options?: string): string;
/**
* Добавляет новый дочерний элемент перед существующим дочерним элементом и
* возвращает указатель на него.
* Если текущий элемент создан по форме, то он должен быть простым массивом.
* При этом аргументы для вызова функции не требуются.
* Если текущий элемент является динамическим (т.е. Построенным без формы),
* то добавляется дочерний динамический элемент с именем итипом, указанных
* в качестве аргументов.
* @param {number} index - Позиция в списке дочерних элементов, в которую необходимо
* встаить новый элемент.
* @param {string} name - Имя дочернего элемента.
* @param {string} type - Тип дочернего элемента.
*/
InsertChild(index: number, name?: string, type?: string): XmlElem<unknown>;
/**
* Добавляет новый элемент перед непосредственно перед текущим элементом
* на том же уровне иерархии и возвращает указатель на него.
* Если текущий элемент создан по форме, то он должен быть простым массивом.
* При этом используется аргументы не используются.
* Если текущий элемент является динамическим (т.е. построенным без формы),
* то добавляется дочерний динамический элемент с именем и типом,
* указанных в аргументах.
* @param {string} [name] - Имя дочернего элемента.
* @param {string} [type] - Тип дочернего элемента.
*/
InsertPrevSibling(name?: string, type?: string): unknown;
/**
* Загружает значение элемента и его дочерних элементов из строки,
* содержащей данные в формате XML.
* Из строки подгружаются только те данные, которые присутствуют в исходном XML.
* Если необходимо полностью синхронизировать элемент с данными из строки,
* перед вызовом данного метода необходимо вызывать метод {@link Clear}.
* @param {string} data - Строка, содержащая данные в формате XML.
*/
LoadData(data: string): void;
/**
* Загружает значение элемента и его дочерних элементов из `URL`, содержащего данные в формате `XML`.
* Из строки подгружаются только те данные, которые присутствуют в исходном `XML`.
* Если необходимо полностью синхронизировать элемент с данными из строки,
* перед вызовом данного метода необходимо вызывать метод {@link Clear}.
* @param {string} url - `URL`, содержащий данные в формате `XML`.
* Смотрите также {@link LoadData}.
*/
LoadDataFromUrl(url: string): void;
/**
* Загружает содержимое элемента из `URL`.
* Метод работает только для элементов типа `string`.
* @param {string} url - `URL` файла, из которого будут загружены данные.
*/
LoadFromFile(url: string): void;
/**
* @deprecated
* Устаревший метод, использововшийся когда элементы `binary` и `string` были разными элементами.
* В настоящий момент можно использовать обычное присваивание.
* Загружает содержимое элемента из строки.
* Работате только для элементов типа `string`.
* @param {string} data - Строка.
*/
LoadFromStr(data: string): void;
/**
* Добавляет атрибут к текущему элементу, если его в элементе не существует.
* Если атрибут с таким именем существует, то просто заменяет его значение на новое.
* Метод работает только для динамических элементов.
* @param {string} name - Имя элемента.
* @param {K} value - Значение элемента.
*/
ObtainAttr<K>(name: string, value: K): void;
/**
* Ищет дочерний элемент с заданным ключевым элементом. Если не находит,
* то добавляет новый дочерний элемент, и его ключевому полю присваивает заданное значение.
* Возвращает ранее существовавший или вновь созданный дочерний элемент.
* @param {K} value - Значение ключа.
* @param {string} name - Имя элемента, являющегося ключом. Если имя ключа не указано, используется первичный ключ.
*/
ObtainChildByKey<K>(value: K, name?: string): XmlElem<T>;
/**
* Метод пытается найти среди дочерних элементов элемент с заданным значением
* определенного поля, если находит - возвращает ссылку на найденный элемент.
* Если не находит - добавляет новый дочерний элемент, присваивает ему заданное значение,
* и возвращает вновь созданный элемент.
* @param {K} value - Значение поля.
*/
ObtainChildByValue<K>(value: K): XmlElem<unknown>;
/**
* Возвращает значение атрибута текущего элемента. Если атрибута с заданным именем нет,
* возвращает значенеи второго аргумента, если втрой аргумент
* не указан - возвращает пустую строку.
* @param {string} name - Имя атрибута.
* @param {string} defaultValue - Строка, возвращаемая при отсутствии заданного атрибута.
*/
OptAttrValue(name: string, defaultValue?: string): string;
/**
* Возвращает дочерний элемент. Находит дочерний элемент по имени.
* Если элемента с заданным именем нет, выдает `undefined`.
* Смотри также метод {@link Child}.
* @param {string} name - Имя дочернего элемента.
*/
OptChild<T>(name: string): T | undefined;
/**
* Метод находит (среди дочерних элементов текущего элемента) элемент, имеющий атрибут с заданным именем,
* и возвращает значение другого заданного атрибута у найденного элемент.
* Если такого элемент или такого атрибута нет, возвращается пустая строка.
* Редко используемый метод.
* @param {string} name - Имя атрибута, по значению которого ищется дочерний элемент.
* @param {string} value - Значение атрибута, по значению которого ищется дочерний элемент.
* @param {string} targetValue - Требуемое значение атрибута найденного дочернего элемента.
*/
OptChildAttrValue(name: string, value: string, targetValue: string): string;
/**
* Проверяет существует ли вложенный (т.е. Ниже лежащий по иерархии относительно текущего элемента)
* элемент по заданному пути относительно текущего.
* @param {string} path - Путь от текущего до целевого элемента, с разделением имен узлов точками.
*/
PathExists(path: string): boolean;
/**
* Проверяет, существует ли у текущего элемента атрибут/метод с таким именем.
* @param {string} name - Имя атрибута/метода.
*/
PropertyExists(name: string): boolean;
/**
* Возвращает путь до заданного элемента, относительно заданного базового элемента,
* находящегося на один или несколько уровней выше.
* Если заданный базовый элемент не является вышестоящим для текущего элемента, возвращается ошибка.
*/
RelativePath(): boolean;
/**
* Сохраняет содержимое элемента в файл по заданному `URL`. Метод работает только для элементов типа `string`.
* @param {string} url - `URL`, в который будет сохранено содержимое элемента.
*/
SaveToFile(url: string): void;
/**
* Устанавливает значение атрибута у текущего элемента.
* Метод работает только для динамических элементов.
* @param {string} attrName - Имя атрибута.
* @param {T} attrValue - Значение атрибута.
*/
SetAttr<T>(attrName: string, attrValue: T): void;
/**
* Переставляет данный элемент на другую позицию среди дочерних элементов его родительского элемента.
* Элемент должен либо иметь атрибут `MULTIPLE`, либо быть динамически созданным элементом.
* @param {number} newPositionIndex - Новый порядковый индекс элемента, начиная с нуля.
*/
SetChildIndex(newPositionIndex: number): void;
/**
* Устанавливает значение атрибута с заданным именем,
* если значение атрибута отличается от его требуемого значения по умолчанию.
* Метод работает только для динамических элементов.
* Если атрибут с заданным именем существует, то,
* если новое значение не совпадает со значением по умолчанию, устанавливает новое значение атрибута.
* Если новое значение совпадает со значением по умолчанию, атрибут удаляется.
* Если атрибут не существует, то он добавляется, если новое значение не совпадает со значением по умолчанию.
* @param {string} name - Имя атрибута.
* @param {string} value - Значение атрибута.
* @param {string} [defaultValue=""] - Значение атрибута по умолчанию.
*/
SetOptAttrValue(name: string, value: string, defaultValue?: string): void;
/**
* Очищает содержимое элемента и загружает новое из строки, содержащей XML.
* Имя корневого элемента в XML должно совпадать с именем текущего элемента.
* {@link SetInnerXml}.
* @param {string} xml - Xml строка.
*/
SetXml(xml: string): void;
/**
* Сортирует дочерние элементы в заданном порядке.
* Метод должен содержать четное число аргументов.
* Каждая пара аргументов соответствует параметрам сортировки.
* @param {string} argsAndOrders - Поочередно выражения, относительно которых производится сортировка, и направления сортировки: `+` или `-`.
*/
Sort(...argsAndOrders: string[]): void;
/**
* Вызывает принудительный пересчет всех подэлементов текущего элемента.
* Пересчет производится по полям, имеющим атрибут `EXPR` или `EXPR-INIT`.
*/
UpdateValues(): void;
/** Iterator */
[Symbol.iterator](): IterableIterator<XmlElem<unknown, never>>;
}
type XmlElem<T, ForeignElem = never> = XmElem<T, ForeignElem> & T;
type XmlElemUnknown = XmlElem<unknown>;
type XmlElemNonMethodsKeys = {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
[K in keyof XmlElemUnknown]: XmlElemUnknown[K] extends (...args: any) => any ? never : K;
}[keyof XmlElemUnknown];