This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
import { AadHttpClient, HttpClientResponse } from '@microsoft/sp-http';
|
||||
import { WebPartContext } from '@microsoft/sp-webpart-base';
|
||||
import {
|
||||
DATAVERSE_API_VERSION,
|
||||
DATAVERSE_DEMANDLINE_ENTITY_SET,
|
||||
DATAVERSE_DEMANDLINE_LINK_FIELD,
|
||||
DATAVERSE_RESOURCE_URL
|
||||
} from '../config';
|
||||
|
||||
/**
|
||||
* Обратная связь во внешнюю систему: записать ссылку на заявку портала в
|
||||
* строку-источник таблицы Dataverse «Строка заявки» (cree9_demandline).
|
||||
*
|
||||
* positionId — GUID первичного ключа строки (приходит в URL как positionId, см.
|
||||
* shared/routing). Адресуем строку напрямую: <entitySet>(<guid>). PATCH пишет
|
||||
* URL в колонку cree9_portalrequesturl.
|
||||
*
|
||||
* Заголовок If-Match: * ОБЯЗАТЕЛЕН: без него PATCH в Dataverse — это upsert (нет
|
||||
* строки с таким id → СОЗДАЁТ новую). Нам нужно строго обновление существующей
|
||||
* строки-источника; If-Match: * это гарантирует — если строки нет, вернётся 404,
|
||||
* а не появится «пустая» запись.
|
||||
*
|
||||
* Авторизация — AadHttpClient с ресурсом среды Dataverse (SSO текущего
|
||||
* пользователя); заголовки OData — как в stroy-bot-report/DataverseService.
|
||||
*/
|
||||
export async function writeDemandLinePortalLink(
|
||||
context: WebPartContext,
|
||||
positionId: string,
|
||||
portalRequestUrl: string
|
||||
): Promise<void> {
|
||||
const client = await context.aadHttpClientFactory.getClient(DATAVERSE_RESOURCE_URL);
|
||||
const url =
|
||||
`${DATAVERSE_RESOURCE_URL}/api/data/${DATAVERSE_API_VERSION}/` +
|
||||
`${DATAVERSE_DEMANDLINE_ENTITY_SET}(${positionId})`;
|
||||
|
||||
const response: HttpClientResponse = await client.fetch(url, AadHttpClient.configurations.v1, {
|
||||
method: 'PATCH',
|
||||
headers: {
|
||||
'Accept': 'application/json',
|
||||
'Content-Type': 'application/json;odata.metadata=minimal',
|
||||
'OData-MaxVersion': '4.0',
|
||||
'OData-Version': '4.0',
|
||||
// Только обновление существующей строки, без upsert-создания.
|
||||
'If-Match': '*'
|
||||
},
|
||||
body: JSON.stringify({ [DATAVERSE_DEMANDLINE_LINK_FIELD]: portalRequestUrl })
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
let errBody = '';
|
||||
try {
|
||||
errBody = await response.text();
|
||||
} catch {
|
||||
// тело ошибки прочитать не удалось — оставляем пустым
|
||||
}
|
||||
throw new Error(`Dataverse PATCH ${DATAVERSE_DEMANDLINE_ENTITY_SET}: ${response.status} — ${errBody}`);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user