Мониторинг: в логах заявок — вид, код и название заявки
Tests / frontend-test (pull_request) Successful in 1m23s
Tests / frontend-test (pull_request) Successful in 1m23s
«Создана заявка: Заявка на прием · TNS-… · Инженер — Проект X», «Заявка отправлена на согласование: …», «Заявка согласована: TNS-… · …» — заявку видно прямо в списке логов; те же данные — в полях request.*. Отправка на согласование пишется при сохранении заявки с отправленным статусом (там известно, что за заявка), из writeRoute лог убран. Код и название для решения дочитываются, сбой чтения решение не ломает. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -345,14 +345,7 @@ export class ApproverService {
|
||||
const rows = await this.approval.getForRequest(requestId);
|
||||
const requestStatus = this.computeRequestStatus(rows);
|
||||
await this.updateRequestStatus(requestId, requestStatus);
|
||||
log.info(DECISION_MESSAGE[decision], {
|
||||
'request.id': requestId,
|
||||
'request.list': this.dataListRef,
|
||||
'request.status': requestStatus,
|
||||
'approval.decision': decision,
|
||||
'approval.rowId': rowId,
|
||||
'approval.comment': comment.slice(0, 500),
|
||||
});
|
||||
await this.logDecision(requestId, rowId, decision, comment, requestStatus);
|
||||
emitRequestsChanged();
|
||||
return requestStatus;
|
||||
}
|
||||
@@ -381,6 +374,42 @@ export class ApproverService {
|
||||
return REQUEST_STATUS.execution;
|
||||
}
|
||||
|
||||
/**
|
||||
* Решение — в логи мониторинга, с кодом и названием заявки, чтобы её было видно прямо в списке логов.
|
||||
* Код и название дочитываются отдельно; не получилось — пишем без них: решение уже применено.
|
||||
*/
|
||||
private async logDecision(
|
||||
requestId: number,
|
||||
rowId: number,
|
||||
decision: ApproverDecision,
|
||||
comment: string,
|
||||
requestStatus: string
|
||||
): Promise<void> {
|
||||
let code = '';
|
||||
let title = '';
|
||||
try {
|
||||
const item = (await this.dataList().items.getById(requestId).select('Title', 'RequestUniqueCode')()) as {
|
||||
Title?: string;
|
||||
RequestUniqueCode?: string;
|
||||
};
|
||||
code = item.RequestUniqueCode || '';
|
||||
title = item.Title || '';
|
||||
} catch {
|
||||
// без кода и названия — лог всё равно нужен
|
||||
}
|
||||
const what = [code, title].filter(Boolean).join(' · ') || `№${requestId}`;
|
||||
log.info(`${DECISION_MESSAGE[decision]}: ${what}`, {
|
||||
'request.id': requestId,
|
||||
'request.code': code,
|
||||
'request.title': title,
|
||||
'request.list': this.dataListRef,
|
||||
'request.status': requestStatus,
|
||||
'approval.decision': decision,
|
||||
'approval.rowId': rowId,
|
||||
'approval.comment': comment.slice(0, 500),
|
||||
});
|
||||
}
|
||||
|
||||
private dataList(): IList {
|
||||
return this.dataListRef.startsWith('/')
|
||||
? getSP().web.getList(this.dataListRef)
|
||||
|
||||
Reference in New Issue
Block a user