UNPKG

@boristype/types

Version:

<h1 align="center">WT Types</h1> <div align="center"> Typescript типы для WebSoft HCM.

901 lines (790 loc) 56.8 kB
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];