When making a request to the 7Pace Reporting API I am receiving a 500. The API seems to be complaining about a null value in 'System_AreaId' property.
Endpoint
https://<company>.timehub.7pace.com/api/odata/v3.2
Error Message
originalMessage: "The property 'System_AreaId[Nullable=False]' of type 'Edm.Int32' has a null value, which is not allowed."
Stacktrace:
' at Microsoft.OData.WriterValidationUtils.ValidateNullPropertyValue(IEdmTypeReference expectedPropertyTypeReference, String propertyName, IEdmModel model)\r\n' +
' at Microsoft.OData.WriterValidator.ValidateNullPropertyValue(IEdmTypeReference expectedPropertyTypeReference, String propertyName, Boolean isTopLevel, IEdmModel model)\r\n' +
' at Microsoft.OData.JsonLight.ODataJsonLightPropertySerializer.WriteNullProperty(ODataPropertyInfo property)\r\n' +
' at Microsoft.OData.JsonLight.ODataJsonLightPropertySerializer.WriteProperties(IEdmStructuredType owningType, IEnumerable`1 properties, Boolean isComplexValue, IDuplicatePropertyNameChecker duplicatePropertyNameChecker, ODataResourceMetadataBuilder metadataBuilder)\r\n' +
' at Microsoft.OData.JsonLight.ODataJsonLightWriter.StartResource(ODataResource resource)\r\n' +
' at Microsoft.OData.ODataWriterCore.InterceptException(Action action)\r\n' +
' at Microsoft.OData.TaskUtils.GetTaskForSynchronousOperation(Action synchronousOperation)\r\n' +
'--- End of stack trace from previous location ---\r\n' +
' at Microsoft.AspNet.OData.Formatter.Serialization.ODataResourceSerializer.WriteResourceAsync(Object graph, ODataWriter writer, ODataSerializerContext writeContext, IEdmTypeReference expectedType)\r\n' +
' at Microsoft.AspNet.OData.Formatter.Serialization.ODataResourceSerializer.WriteComplexAndExpandedNavigationPropertyAsync(IEdmProperty edmProperty, SelectItem selectItem, ResourceContext resourceContext, ODataWriter writer)\r\n' +
' at Microsoft.AspNet.OData.Formatter.Serialization.ODataResourceSerializer.WriteComplexPropertiesAsync(SelectExpandNode selectExpandNode, ResourceContext resourceContext, ODataWriter writer)\r\n' +
' at Microsoft.AspNet.OData.Formatter.Serialization.ODataResourceSerializer.WriteResourceAsync(Object graph, ODataWriter writer, ODataSerializerContext writeContext, IEdmTypeReference expectedType)\r\n' +
' at Microsoft.AspNet.OData.Formatter.Serialization.ODataResourceSetSerializer.WriteResourceSetAsync(IEnumerable enumerable, IEdmTypeReference resourceSetType, ODataWriter writer, ODataSerializerContext writeContext)\r\n' +
' at Microsoft.AspNet.OData.Formatter.Serialization.ODataResourceSetSerializer.WriteObjectAsync(Object graph, Type type, ODataMessageWriter messageWriter, ODataSerializerContext writeContext)\r\n' +
' at Microsoft.AspNet.OData.Formatter.ODataOutputFormatterHelper.WriteToStreamAsync(Type type, Object value, IEdmModel model, ODataVersion version, Uri baseAddress, MediaTypeHeaderValue contentType, IWebApiUrlHelper internaUrlHelper, IWebApiRequestMessage internalRequest, IWebApiHeaders internalRequestHeaders, Func`2 getODataMessageWrapper, Func`2 getEdmTypeSerializer, Func`2 getODataPayloadSerializer, Func`1 getODataSerializerContext)\r\n' +
' at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeResultAsync>g__Logged|22_0(ResourceInvoker invoker, IActionResult result)\r\n' +
' at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResultFilterAsync>g__Awaited|30_0[TFilter,TFilterAsync](ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)\r\n' +
' at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResultExecutedContextSealed context)\r\n' +
' at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.ResultNext[TFilter,TFilterAsync](State& next, Scope& scope, Object& state, Boolean& isCompleted)\r\n' +
' at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeResultFilters()\r\n' +
'--- End of stack trace from previous location ---\r\n' +
' at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)\r\n' +
' at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)\r\n' +
' at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)\r\n' +
' at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeFilterPipelineAsync>g__Awaited|20_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)\r\n' +
' at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Logged|17_1(ResourceInvoker invoker)\r\n' +
' at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Logged|17_1(ResourceInvoker invoker)\r\n' +
' at Microsoft.AspNetCore.Builder.RouterMiddleware.Invoke(HttpContext httpContext)\r\n' +
' at AspNetCoreRateLimit.RateLimitMiddleware`1.Invoke(HttpContext context)\r\n' +
' at Dynatrace.OneAgent.Introspection.Shared.CloudEventsHelper.InvokeNext[Context](Context context, IHttpContext requestContext, OperationReference operation, Func`2 invokeNext)\r\n' +
' at Dynatrace.OneAgent.Introspection.Shared.NewAspNetCoreTracingMiddlewareBase`1.InvokeAspMethod(Context context, IHttpContext requestContext)\r\n' +
' at Dynatrace.OneAgent.Introspection.Shared.NewAspNetCoreTracingMiddlewareBase`1.Invoke(Context context)\r\n' +
' at Timetracker.Web.Middleware.ApiMiddleware.ApiErrorWrapperMiddleware.InvokeCore(HttpContext context, IApiErrorWrapper errorWrapper) in C:\\a\\1\\s\\TimetrackerOnline\\TimetrackerOnline.Web\\Middleware\\ApiMiddleware\\ApiErrorWrapperMiddleware.cs:line 49
-
Hello Russ,
I have replied to you on ticket #47126 that you submitted, however I am going to post the same reply here as well for future reference in case anyone from our community finds the answer helpful.
You are encountering this error because your API call is returning fields that have null values, and this is not allowed in the response.
For this reason you will have to filter your API call for the system area ID to not be null in the following way:
&$filter=System_AreaId ne null
You can even see the same error in our tutorial video on composing API calls here: How to compose a 7pace Timetracker API call.
Best regards,
Vanja
Please sign in to leave a comment.
Comments
2 comments