Skip to content

Conversation

@vasvlad
Copy link
Contributor

@vasvlad vasvlad commented Dec 21, 2023

Fixed problem with using type of request

@vbkunin
Copy link
Member

vbkunin commented Dec 24, 2023

Привет! Что за проблему ты пытаешься решить этим коммитом?

@vasvlad
Copy link
Contributor Author

vasvlad commented Dec 27, 2023

Привет. Мне надо создавать разные типы инцидентов. Например Incident или UserRequest. Соответсвенно в этом патче это сделано параметром. Параметр не обязательный, по умолчанию будет создан Incident.

@vbkunin
Copy link
Member

vbkunin commented Dec 27, 2023

Теперь понял. Передавать ответственность и знания о типе тикета на сторону клиента не лучшая идея по нескольким причинам. Во-первых, тут передаётся не тип тикета, а класс объекта. В различных комплектациях системы тип инцидента и запроса может обеспечиваться как двумя разными классами Incident и UserRequest, так и одним UserRequest с параметром request_type: [incident, service_request]. Кроме того, возможен вариант, когда система вообще не имеет модуля инцидентов или запросов. Во-вторых, передавая клиенту возможность выбора типа тикета, нужно как-то согласовывать получаемое значение с тем классом тикета, который указан в ticket_oql. Иначе может возникнуть ситуация, когда для создания будет использоваться передаваемый клиентом класс UserRequest, а поиск тикетов для дальнейшего обновления будет идти по классу Incident. Собственно, такая несогласованность и сейчас есть, но она вызвана плохим дизайном, а не действиями клиента.

На самом деле клиент уже косвенно задаёт тип тикета, когда выбирает context. В контексте через ticket_oql указывается, с тикетами какого класса он работает, и это место для выбора класса тикета должно быть единственным. Предлагаю использовать ticket_oql для обновления MonitoringContext::$sTicketClass при вызове MonitoringContext::InitTicketFromOql(), если тикет не был найден, а также в сеттере ‎MonitoringContext.SetTicket()‎, если тикет уже существует. Вроде бы это должно решить твою проблему и не создать новых.

@vbkunin
Copy link
Member

vbkunin commented Dec 27, 2023

Получить класс из OQL можно через DBObjectSearch, например, как тут:

{
$oFilter = DBObjectSearch::FromOQL($sOql, $aParams);
$sFilterClass = $oFilter->GetClass();
if (!MetaModel::IsParentClass($sClass, $sFilterClass))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants