Поиск с выбором объекта в ПОЛИНОМ:MDM
Смотрите пример Polynom/SDK/Samples.Web/polynom-select-demo.
Структуры данных
Перечисление типов объектов ПОЛИНОМ:MDM подлежащих выбору
/**
* Типы данных объектов ПОЛИНОМ:MDM которые можно выбрать.
*/
export enum SelectPolynomObjectTypes {
// Без типа.
None = 0,
// Элемент.
Element = 4,
// Группа.
ElementGroup = 39,
// Каталог.
ElementCatalog = 40,
// Справочник.
Reference = 48,
// Документ.
Document = 71,
// Каталог документов.
DocumentCatalog = 69,
// Группа документов.
DocumentGroup = 70,
// Каталог представлений.
ViewpointCatalog = 91,
// Группа представлений.
ViewpointGroup = 92,
// Представление.
Viewpoint = 93
}
Структура данных справочника, каталога, группы.
/*
* Данные идентифицирующие объект.
*/
export type IIdentifierData = {
/* Идентификатор объекта. */
identifier?: IIdentifiableObject;
/* Строка расположения объекта. */
location?: string;
};
Структура данных понятия.
/*
* Данные идентифицирующие понятие.
*/
export type IConceptIdentifierData = {
/* Идентификатор понятия. */
identifier?: IIdentifiableObject;
/* Абсолютный код понятия. */
absoluteCode?: string;
};
Структура данных опций диалога поиска.
/**
* Параметры диалога поиска объекта.
*/
export type ISearchDialogOption = {
/* Идентификатор хранилища. */
storageId: string | null;
/* Токен доступа. */
accessToken: string | null;
/* Данные фильтра. */
condition: IPropertySearchRequest;
/* Режим только для просмотра. */
readonly: boolean;
/* Режим учета применяемости. */
useApplicability: boolean;
};
Структура данных получаемая при авторизации ПОЛИНОМ:MDM.
/**
* Представляет данные авторизации ПОЛИНОМ:MDM.
*/
export type IPolynomAuthData = {
/** Идентификатор сообщений ПОЛИНОМ:MDM. */
messageId: string;
/** Идентификатор хранилища. */
storageId: string;
/** Жетон доступа к ПОЛИНОМ:MDM. */
accessToken: string;
};
Структура данных получаемая при выборе объекта в дереве классификации ПОЛИНОМ:MDM
/**
* Представляет данные выбранного объекта ПОЛИНОМ:MDM.
*/
export type IPolynomObjectData = {
/** Идентификатор сообщений ПОЛИНОМ:MDM. */
messageId: string;
/** Идентификатор объекта. */
objectId: number;
/** Идентификатор типа. */
typeId: number;
/** Строка расположения объекта. */
location: string;
/** Признак применяемости */
applicability: boolean;
};
Структура данных результата диалога выбора.
/**
* Представляет результата выбора.
*/
export type ISearchDialogResult = {
/**
* Данные выбранного объекта.
*/
polynomObject: IPolynomObjectData | null;
/**
* Данные выбранных объектов.
*/
polynomObjects: IPolynomObjectData[];
};
Настройка проекта перед использованием библиотеки **@ascon/polynom-select**
Создать проект с помощью NX
npx create-nx-workspace polynom-select-demo --preset=angular-standalone
Требуемые зависимости
{
"dependencies": {
"@ascon/polynom-select": "~24.0.30110",
"@ascon/polynom-login": "~24.0.30110"
}
}
Расположение библиотек **@ascon/polynom-select**, polynom-api и их зависимостей
Polynom/SDK/Samples.Web/libs/
Варианты доставки библиотек ASCON
- Вы можете опубликовать библиотеки в собственный локальный репозиторий npm пакетов и выполнить команды установки.
npm install @ascon/polynom-select@24.0.30110
npm install @ascon/polynom-login@24.0.30110
- Вы можете копировать библиотеки в **node_modules/@ascon** своего проекта из Polynom/SDK/Samples.Web/libs/ и установить транзитивные зависимости.
npm install
Подключить активы библиотек к своему проекту
В файл project.json добавить следующее:
{
"targets": {
"build": {
"options": {
"assets": [
{
"glob": "**/*",
"input": "node_modules/@ascon/theme/assets",
"output": "./assets"
},
{
"glob": "**/*",
"input": "node_modules/@ascon/polynom-api/assets",
"output": "/assets"
},
{
"glob": "**/*",
"input": "node_modules/@ascon/polynom-core/assets",
"output": "./assets"
},
{
"glob": "**/*",
"input": "node_modules/@ascon/polynom-ui/assets",
"output": "./assets"
},
{
"glob": "**/*",
"input": "node_modules/@ascon/polynom-trees/assets",
"output": "./assets"
},
{
"glob": "**/*",
"input": "node_modules/@ascon/polynom-login/assets",
"output": "./assets"
},
{
"glob": "**/*",
"input": "node_modules/@ascon/polynom-select/assets",
"output": "./assets"
}
],
"styles": [
{
"input": "node_modules/@ascon/theme/theme.css",
"inject": false,
"bundleName": "theme"
},
{
"input": "node_modules/@ascon/polynom-theme/styles/polynom-theme.css",
"inject": true,
"bundleName": "app-styles"
},
{
"input": "node_modules/@ascon/polynom-trees/styles/polynom-trees.css",
"inject": true,
"bundleName": "app-styles"
},
{
"input": "node_modules/@ascon/polynom-ui/styles/polynom-ui.css",
"inject": true,
"bundleName": "app-styles"
},
{
"input": "node_modules/@ascon/polynom-login/styles/polynom-login.css",
"inject": true,
"bundleName": "app-styles"
}
]
}
}
}
}
В файл index.html добавить следующее:
<html lang="ru">
<head>
<link
href="theme.css"
id="theme-link"
media="all"
onload="this.media='all'"
rel="stylesheet"
type="text/css"
/>
<link
href="app-styles.css"
id="app-link"
media="all"
onload="this.media='all'"
rel="stylesheet"
type="text/css"
/>
</head>
</html>
Импортировать модуль библиотеки PolynomSelectModule
Добавить строку providePolynomSelect() в appConfig.
//app.config.ts
export const appConfig: ApplicationConfig = {
providers: [
provideAnimations(),
provideHttpClient(withInterceptors([jwtInterceptor])),
provideStorages(),
provideLocalization({
availableLangs: ["ru", "en"],
defaultLang: "ru",
prodMode: !isDevMode(),
scopes: [
'polynom/polynom-select-demo',
'polynom/polynom-api',
'polynom/polynom-select',
'polynom/polynom-login',
'polynom/polynom-trees',
'polynom/polynom-ui',
'polynom/polynom-core'
],
}),
providePolynomSelect(),
provideRouter(appRoutes),
],
};
Установить настройки адреса веб сервера ПОЛИНОМ:MDM
Перед запуском диалогового окна нужно установить настройки адреса веб сервера ПОЛИНОМ:MDM (например веб сервер ПОЛИНОМ:MDM работает на 127.0.0.1:5100)
// Параметры WEB API ПОЛИНОМ:MDM
const polynomApiConfig: PolynomApiConfig = inject(PolynomApiConfig);
polynomApiConfig.setHost("http://localhost:5100");
Или в компоненте из которого будет вызываться окно ПОЛИНОМ:MDM.
@Component({
selector: "mdm-select-object",
standalone: true,
imports: [CommonModule],
templateUrl: "./select-object.component.html",
styleUrl: "./select-object.component.scss",
})
export class SelectObjectComponent implements OnInit, OnDestroy {
// Сервис авторизации ПОЛИНОМ:MDM.
private readonly _loginService: LoginService = inject(LoginService);
public ngOnInit(): void {
this._polynomApiConfig.setHost("http://127.0.0.1:5100");
}
}
Примеры вызова поиска ПОЛИНОМ:MDM
Подготовка компонента
Импорт классов, интерфейсов, сервисов.
import {
IPolynomAuthData,
IPolynomObjectData,
SelectDialogs,
SelectPolynomObjectTypes,
} from "@ascon/polynom-select";
import {
LoginService,
PolynomApiConfig,
IPropertySearchRequest
} from "@ascon/polynom-api";
Получить экземпляры глобальных сервисов
// Сервис диалогов PrimeNg.
private readonly _dialogService: DialogService = inject(DialogService);
// Сервис конфигурации Polynom Web Api
private readonly _polynomApiConfig: PolynomApiConfig = inject(PolynomApiConfig);
// Сервис авторизации ПОЛИНОМ:MDM.
private readonly _loginService: LoginService = inject(LoginService);
Поля данных получаемых из диалога выбора объекта ПОЛИНОМ:MDM.
// Данные выбранного объекта ПОЛИНОМ:MDM.
private _polynomObject: IPolynomObjectData | null = null;
// Данные авторизации ПОЛИНОМ:MDM.
private _polynomAuthData: IPolynomAuthData | null = null;
Заполнить условие поиска.
Структура данных условия поиска совпадает с запросом метода /api/v1/search/execute-property-search
Для детального описания посмотрите статью поиск по свойствам.
private getPropertySearchRequest(): IPropertySearchRequest {
return PropertySearchRequest.create({
<Условие поиска>
})
}
Вызов окна выбора объекта ПОЛИНОМ:MDM
accessToken может быть получен из общего сервиса авторизации или из web api ПОЛИНОМ:MDM.
storageId необходим для указания хранилища.
// Сервис авторизации ПОЛИНОМ:MDM.
private readonly _loginService: LoginService = inject(LoginService);
// Список описаний хранилищ ПОЛИНОМ:MDM.
private _storageDefinitions: IStorageDefinition[] = [];
// Запрашивает список описаний хранилищ ПОЛИНОМ:MDM.
requestStorageDefinition(): void {
this._loginService
.getStorageDefinition()
.pipe(take(1))
.subscribe({
next: storageDefinitions => {
this.storageDefinitions = storageDefinitions;
},
error: err => {console.error(err);}
});
}
// Авторизует пользователя в ПОЛИНОМ:MDM
signInByPassword(storageId: string, login: string, password: string): void {
if (!storageId || !login || !password) {
return;
}
const request = SignInRequest.create({
storageId: storageId,
login: login,
password: password,
clientType: this._polynomWebApiConfig.clientType,
moduleName: "Клиент ПОЛИНОМ:MDM" // Опционально
});
this._loginService
.signIn(request)
.pipe(take(1))
.subscribe({
next: () => {
// Действия после успешной авторизации
},
error: err => {console.error(err);}
});
}
// Открывает диалог выбора объекта ПОЛИНОМ:MDM с установлеными значениями **storageId** **accessToken**.
// Окно заблокирует выбор хранилища указанным в **storageId** и попытается авторизоватся с помощью уже существующего **accessToken**.
searchWithCondition($event: MouseEvent): 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 = value;
}
});
}