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