Codeunit 9108 SharePoint Operation Response
- App
- System Application
- Namespace
- System.Integration.Sharepoint
- Versions
- 21-28
Versions171819202122232425262728
Source in 29
src/System Application/App/SharePoint/src/helpers/SharePointOperationResponse.Codeunit.al128 lines, Copyright (c) Microsoft Corporation. MIT
// ------------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
// ------------------------------------------------------------------------------------------------
namespace System.Integration.Sharepoint;
using System.Utilities;
codeunit 9108 "SharePoint Operation Response"
{
Access = Internal;
InherentEntitlements = X;
InherentPermissions = X;
[TryFunction]
internal procedure GetResultAsText(var Result: Text);
var
ResultInStream: InStream;
begin
TempBlobContent.CreateInStream(ResultInStream);
ResultInStream.ReadText(Result);
end;
[TryFunction]
internal procedure GetResultAsStream(var ResultInStream: InStream)
begin
TempBlobContent.CreateInStream(ResultInStream);
end;
internal procedure SetHttpResponse(HttpResponseMessage: HttpResponseMessage)
var
ContentOutStream: OutStream;
ContentInStream: InStream;
begin
TempBlobContent.CreateOutStream(ContentOutStream);
HttpResponseMessage.Content().ReadAs(ContentInStream);
CopyStream(ContentOutStream, ContentInStream);
HttpHeaders := HttpResponseMessage.Headers();
SharepointDiagnostics.SetParameters(HttpResponseMessage.IsSuccessStatusCode, HttpResponseMessage.HttpStatusCode, HttpResponseMessage.ReasonPhrase, GetRetryAfterHeaderValue(), GetErrorDescription());
end;
internal procedure SetHttpResponse(ResponseContent: Text; ResponseHttpHeaders: HttpHeaders; ResponseHttpStatusCode: Integer; ResponseIsSuccessStatusCode: Boolean; ResponseReasonPhrase: Text)
var
ContentOutStream: OutStream;
begin
TempBlobContent.CreateOutStream(ContentOutStream);
ContentOutStream.WriteText(ResponseContent);
HttpHeaders := ResponseHttpHeaders;
SharepointDiagnostics.SetParameters(ResponseIsSuccessStatusCode, ResponseHttpStatusCode, ResponseReasonPhrase, GetRetryAfterHeaderValue(), GetErrorDescription());
end;
internal procedure GetHeaderValueFromResponseHeaders(HeaderName: Text): Text
var
Values: array[100] of Text;
begin
if not HttpHeaders.Contains(HeaderName) then
exit('');
if not HttpHeaders.GetValues(HeaderName, Values) then
exit('');
exit(Values[1]);
end;
internal procedure GetRetryAfterHeaderValue() RetryAfter: Integer;
var
HeaderValue: Text;
begin
HeaderValue := GetHeaderValueFromResponseHeaders('Retry-After');
if HeaderValue = '' then
exit(0);
if not Evaluate(RetryAfter, HeaderValue) then
exit(0);
end;
local procedure GetErrorDescription(): Text
var
Result: Text;
JObject: JsonObject;
JToken: JsonToken;
begin
GetResultAsText(Result);
if Result = '' then
exit('');
if not JObject.ReadFrom(Result) then
exit('');
// OData (v3 verbose / v4) error format: { "error": { "message": ... } }
if JObject.Get('error', JToken) then begin
if JToken.IsObject() then
exit(GetODataErrorMessage(JToken.AsObject()));
if JToken.IsValue() then
exit(JToken.AsValue().AsText());
end;
// OAuth / STS token endpoint format: { "error_description": "..." }
if JObject.Get('error_description', JToken) then
if JToken.IsValue() then
exit(JToken.AsValue().AsText());
end;
local procedure GetODataErrorMessage(ErrorObject: JsonObject) ErrorText: Text
var
MessageToken: JsonToken;
ValueToken: JsonToken;
begin
if ErrorObject.Get('message', MessageToken) then
case true of
// OData v3 verbose: "message": { "lang": "...", "value": "..." }
MessageToken.IsObject():
if MessageToken.AsObject().Get('value', ValueToken) then
if ValueToken.IsValue() then
ErrorText := ValueToken.AsValue().AsText();
// OData v4: "message": "..."
MessageToken.IsValue():
ErrorText := MessageToken.AsValue().AsText();
end;
end;
internal procedure GetDiagnostics(): Interface "HTTP Diagnostics"
begin
exit(SharepointDiagnostics);
end;
var
TempBlobContent: Codeunit "Temp Blob";
SharepointDiagnostics: Codeunit "SharePoint Diagnostics";
HttpHeaders: HttpHeaders;
}