Search code examples
c#odatadynamics-navsimple.odata

Microsoft Dynamics NAV - create new entry of SalesOrder (Simple.OData.Client)


I'm trying to post a new entry of SalesOrder via OData web services using Simple.OData.Client in Microsoft Dynamics NAV.

This works:

        ODataClientSettings settings = new ODataClientSettings();
        settings.BaseUri = new Uri(Constants.ODataServiceEndpoint);
        settings.Credentials = new NetworkCredential(Constants.SecureUserName, Constants.SecureUserPassword);
        client = new ODataClient(settings);

        var items = await client
            .For("SalesOrder")
            .FindEntriesAsync();

Unfortunately, this doesn't work and I don't have an idea why:

        var product = await client
                .For<SalesOrder>("SalesOrder")
                .Set(CreateDummyOrder())
                .InsertEntryAsync();

I get this exception:

     Exception caught : Simple.OData.Client.WebRequestException: Internal Server Error
     at Simple.OData.Client.RequestRunner.PostExecute(HttpResponseMessage responseMessage)
     at Simple.OData.Client.RequestRunner.ExecuteRequestAsync(ODataRequest request, CancellationToken cancellationToken)
     at Simple.OData.Client.ODataClient.ExecuteRequestWithResultAsync[T](ODataRequest request, CancellationToken cancellationToken, Func`2 createResult, Func`1 createEmptyResult, Func`1 createBatchResult)
     at Simple.OData.Client.ODataClient.InsertEntryAsync(FluentCommand command, Boolean resultRequired, CancellationToken cancellationToken)
     at Simple.OData.Client.BoundClient`1.InsertEntryAsync(Boolean resultRequired, CancellationToken cancellationToken)

Solution

  • Finally, I figure out the problem.

    For everyone who's gonna deal with it, it's necessary to use OData V4 URL. Although I'm not sure why is the posting not working with OData V3 URL. After that, you have to enabled Manual Nos.