From cdabc3f40bea2237168391817aa683658ffbdb86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A2=D0=B8=D0=BC=D1=83=D1=80=20=D0=93=D0=BE=D1=80=D0=BE?= =?UTF-8?q?=D0=B4=D0=B5=D1=86=D0=BA=D0=B8=D0=B9?= Date: Fri, 9 Oct 2026 12:18:15 +0500 Subject: [PATCH] =?UTF-8?q?fix:=20=D1=81=D0=B2=D0=B5=D0=B6=D0=B8=D0=B5=20?= =?UTF-8?q?=C2=AB=D1=81=D0=B2=D0=BE=D0=B8=C2=BB=20=D0=B7=D0=B0=D1=8F=D0=B2?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=BF=D1=80=D0=B8=20=D0=BE=D1=82=D0=BB=D0=B0?= =?UTF-8?q?=D0=B4=D0=BE=D1=87=D0=BD=D0=BE=D0=B9=20=D0=BF=D0=BE=D0=B4=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=B5=20=D0=BB=D0=B8=D1=87=D0=BD=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Search искал заявки подменённого сотрудника, а REST-довесок свежих черновиков — заявки реальной учётки, поэтому только что созданные черновики под подменой не находились нигде. Довесок теперь берёт Id подменённого сотрудника. Co-Authored-By: Claude Opus 5.5 (1M context) --- .../features/myRequests/myRequests.service.ts | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/webparts/requestPortal/features/myRequests/myRequests.service.ts b/src/webparts/requestPortal/features/myRequests/myRequests.service.ts index 0fbaa17..9419c35 100644 --- a/src/webparts/requestPortal/features/myRequests/myRequests.service.ts +++ b/src/webparts/requestPortal/features/myRequests/myRequests.service.ts @@ -22,7 +22,7 @@ import { REQUEST_STATUS, siteOrigin, } from '../../shared/approval'; -import { effectiveUserEmail } from '../../shared/impersonation'; +import { effectiveUserEmail, getImpersonatedEmail } from '../../shared/impersonation'; import { DATA_SITE_URL } from '../../shared/config'; import { IAssignee, IExecutedStep, IMyRequest } from './models/IMyRequest'; import { parseAuthorOwsUser } from './parseAuthorOwsUser'; @@ -115,6 +115,17 @@ export function currentUserEmail(context: WebPartContext): string { return effectiveUserEmail(context).toLowerCase(); } +// Id автора «своих» заявок на сайте — для REST-довесков (фильтр AuthorId). По той +// же причине, что currentUserEmail: при отладочной подмене это подменённый +// сотрудник — иначе Search искал бы его заявки, а довесок — заявки реальной +// учётки, и его свежие черновики не находились бы нигде (индекс их ещё не видит). +// Без подмены — реальный пользователь через currentuser (без лишнего ensureUser). +async function ownAuthorIdFor(context: WebPartContext, siteUrl: string): Promise { + const impersonatedEmail = getImpersonatedEmail(); + if (!impersonatedEmail) return currentUserIdFor(context, siteUrl); + return ensureUserIdFor(context, siteUrl, `i:0#.f|membership|${impersonatedEmail.toLowerCase()}`); +} + function normalizeSiteUrl(url: string): string { return url.replace(/\/+$/, '').toLowerCase(); } @@ -1195,7 +1206,7 @@ async function getOwnRowsForType(context: WebPartContext, type: IRequestType): P // Кешированный Id (см. shared/approval/siteUser.ts): эта функция зовётся в // цикле по типам заявок, и без кеша тот же GET /_api/web/currentuser уходил // бы столько раз, сколько у портала типов. - const myId = await currentUserIdFor(context, target.siteUrl); + const myId = await ownAuthorIdFor(context, target.siteUrl); const rows = (await sp.web .getList(target.listId) @@ -1247,7 +1258,7 @@ async function getRecentlyChangedOwnRowsForType(context: WebPartContext, type: I try { const sp = spForSite(target.siteUrl, context); - const myId = await currentUserIdFor(context, target.siteUrl); + const myId = await ownAuthorIdFor(context, target.siteUrl); const cutoffIso = new Date(Date.now() - RECENT_MS).toISOString(); const rows = (await sp.web