Поиск с выбором объекта
См. пример SDK/Web/Samples/Client/polynom-select-demo.
Окно поиска открывается функцией SearchDialog.show() из библиотеки @ascon/polynom-select.
Оно представляет собой то же окно ПОЛИНОМ:MDM, что и SelectDialog,
но с включённым режимом поиска (searchMode: true).
Общий каталог структур данных (SelectPolynomObjectTypes, IFilterContainer, IIdentifierData,
IPolynomObjectData, IAuthDataResponse и других) приведён в статье
Выбор объекта из ПОЛИНОМ:MDM. Ниже описаны типы, специфичные для поиска.
Структуры данных
Структура данных опций диалога поиска (пакет @ascon/polynom-select):
/**
* Параметры диалога поиска объекта.
*/
export type ISearchDialogOption = {
/* Идентификатор хранилища. */
storageId: string | null;
/* Токен доступа. */
accessToken: string | null;
/* Данные фильтра. */
condition: IPropertySearchRequest;
/* Режим только для просмотра. */
readonly: boolean;
/** Признак режима множественного выбора. */
multiselectMode: boolean;
/* Режим учета применяемости. */
useApplicability: boolean;
};
Тип IPropertySearchRequest объявлен в библиотеке @ascon/polynom-api-client. Структура условия
поиска совпадает с телом запроса метода /api/v1/search/property-search-result; полное описание
приведено в статье Поиск по свойствам.
Структура данных результата диалога поиска:
/**
* Представляет результата выбора.
*/
export type ISearchDialogResult = {
/**
* Данные выбранного объекта.
*/
polynomObject: IPolynomObjectData | null;
/**
* Данные выбранных объектов.
*/
polynomObjects: IPolynomObjectData[];
};
Настройка проекта
Зависимости:
{
"dependencies": {
"@ascon/core": "24.1.126",
"@ascon/polynom-api": "~24.1.14404",
"@ascon/polynom-api-client": "~24.1.14404",
"@ascon/polynom-integration": "~24.1.14404",
"@ascon/polynom-login": "~24.1.14404",
"@ascon/polynom-select": "~24.1.14404",
"@ascon/primeng": "24.0.2",
"@ascon/qwebchannel-bridge": "^6.8.3",
"@ascon/ui": "24.1.126"
}
}
Провайдер providePolynomSelect(), настройка адреса web-сервера и подключение активов описаны
в разделе «Настройка проекта перед использованием библиотеки @ascon/polynom-select» статьи
Выбор объекта из ПОЛИНОМ:MDM.
Примеры вызова поиска
Подготовка компонента
import { ChangeDetectionStrategy, Component, inject, signal } from "@angular/core";
import { LoginService } from "@ascon/polynom-api";
import { IPropertySearchRequest } from "@ascon/polynom-api-client";
import { ISearchDialogResult, SearchDialog } from "@ascon/polynom-select";
import { DialogService } from "@ascon/primeng/dynamicdialog";
import { UiModule } from "@ascon/ui";
import { take } from "rxjs";
// Сервис диалогов.
private readonly _dialogService: DialogService = inject(DialogService);
// Сервис авторизации ПОЛИНОМ:MDM.
private readonly _loginService: LoginService = inject(LoginService);
// Результат поиска.
searchObjectResult = signal<ISearchDialogResult | null>(null);
Поиск без предварительного условия
Если условие не задано, окно открывается в режиме поиска по дереву классификации:
search(): void {
SearchDialog.show(this._dialogService, {
accessToken: this._loginService.accessToken
})
.pipe(take(1))
.subscribe({
next: (value) => {
if (!value?.polynomObject) {
return;
}
this.searchObjectResult.set(value);
}
});
}
Поиск с условием
Условие поиска задаётся в свойстве condition и повторяет структуру запроса
/api/v1/search/property-search-result (см. Поиск по свойствам):
searchWithCondition(): void {
SearchDialog.show(this._dialogService, {
accessToken: this._loginService.accessToken,
condition: this.getPropertySearchRequest()
})
.pipe(take(1))
.subscribe({
next: (value) => {
if (!value?.polynomObject) {
return;
}
this.searchObjectResult.set(value);
}
});
}
private getPropertySearchRequest(): IPropertySearchRequest {
return {
pageNumber: 1,
pageSize: 100,
ownerScope: {
objectId: 10,
typeId: 48
},
condition: {
enabled: true,
intersectionType: 0,
complexConditions: [],
elementConditions: [],
propValueConditions: [],
simpleConditions: [
{
enabled: true,
searchConditionTargetQualifier: {
objectId: 37,
typeId: 54
},
definition: null,
operation: 3,
options: 0,
value: {
typeId: 0,
objectId: 0
}
}
]
},
values: {
stringProperties: [
{
objectId: 0,
typeId: 9,
value: "Рым-болт"
}
],
tableProperties: []
}
};
}
Множественный выбор
Для включения множественного выбора укажите multiselectMode: true; результат доступен в поле
polynomObjects:
searchMultiple(): void {
SearchDialog.show(this._dialogService, {
accessToken: this._loginService.accessToken,
condition: this.getPropertySearchRequest(),
multiselectMode: true
})
.pipe(take(1))
.subscribe({
next: (value) => {
if (value.polynomObjects.length === 0) {
return;
}
this.searchObjectsResult.set(value.polynomObjects);
}
});
}
Вызов окна поиска с предварительной авторизацией
accessToken может быть получен из общего сервиса авторизации или из web api ПОЛИНОМ:MDM. storageId необходим для указания хранилища. Окно зафиксирует указанное хранилище и попытается авторизоваться с помощью уже существующего accessToken.
searchWithConditionAuthorized(): void {
SearchDialog.show(this._dialogService, {
storageId: this._loginService.storageId,
accessToken: this._loginService.accessToken,
condition: this.getPropertySearchRequest()
})
.pipe(take(1))
.subscribe({
next: (value) => {
if (!value?.polynomObject) {
return;
}
this.searchObjectResult.set(value);
}
});
}