Showing posts with label Read data using OData service in D365. Show all posts
Showing posts with label Read data using OData service in D365. Show all posts

Friday, 25 October 2019

Create, Read data using OData service in D365 F&O

Hello all,

I will show you, How to create sales order from external using OData service.

Below is the snippet to just create and read the data.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ODataUtility.Microsoft.Dynamics.DataEntities;
using Microsoft.OData.Client;
using Newtonsoft.Json;

namespace ODataConsoleApplication
{
    class SalesOrderCRUD
    {
        public static void createSalesOrder(Resources context)
        {
            try
            {
                //Header
                SalesOrderHeader salesOrder = new SalesOrderHeader();
                DataServiceCollection<SalesOrderHeader> salesOrderCollection = new DataServiceCollection<SalesOrderHeader>(context);
                salesOrderCollection.Add(salesOrder);

                salesOrder.CurrencyCode = "USD";
                salesOrder.InvoiceCustomerAccountNumber = "US-001";
                salesOrder.OrderingCustomerAccountNumber = "US-001";
                salesOrder.LanguageId = "en-us";
                salesOrder.DataAreaId = "USMF";

                context.MergeOption = MergeOption.OverwriteChanges;
                context.SaveChanges(SaveChangesOptions.PostOnlySetProperties | SaveChangesOptions.BatchWithSingleChangeset); // Auto generate number sequence

                //Lines
                SalesOrderLine salesOrderLine = new SalesOrderLine();
                DataServiceCollection<SalesOrderLine> salesOrderLineCollection = new DataServiceCollection<SalesOrderLine>(context);
                salesOrderLineCollection.Add(salesOrderLine);

                salesOrderLine.SalesOrderNumber = salesOrder.SalesOrderNumber;
                salesOrderLine.ItemNumber = "1000";
                salesOrderLine.OrderedSalesQuantity = 1;
                salesOrderLine.ShippingSiteId = "2";
                salesOrderLine.ShippingWarehouseId = "24";
                salesOrderLine.DataAreaId = "USMF";

                context.SaveChanges(SaveChangesOptions.PostOnlySetProperties | SaveChangesOptions.BatchWithSingleChangeset); // Batch with Single Changeset ensure the saved changed runs in all-or-nothing mode.

                Console.WriteLine(string.Format("Sales order {0} is created.", salesOrder.SalesOrderNumber));

            }
            catch (DataServiceRequestException e)
            {
                Console.WriteLine("Error {0}", e.InnerException.Message);
            }
        }


        public static void readSalesOrder(Resources context)
        {
            string company = "USMF";

            //var salesOrderRead = context.SalesOrderHeadersV2.Where(x => x.DataAreaId == company).First();

            //To read all fields information in a record
            //Console.WriteLine(JsonConvert.SerializeObject(salesOrderRead));

            //To read field by field information in a record
            //Console.WriteLine("Sales order {0} Customer {1}", salesOrderRead.SalesOrderNumber, salesOrderRead.OrderingCustomerAccountNumber);

            //To read all records
            var salesOrderRead = context.SalesOrderHeadersV2.Where(x => x.DataAreaId == company).ToList();

            for (int i = 0; i <= salesOrderRead.Count; i++)
            {
                Console.WriteLine("Sales order {0} Customer {1}", salesOrderRead[i].SalesOrderNumber, salesOrderRead[i].OrderingCustomerAccountNumber);
            }

            Console.ReadLine();
        }
    }

}


        public static void updateSalesOrder(Resources context)
        {
            try
            {
                string salesId = "000812";
                string company = "usmf";

                // Read
                var salesOrder = context.SalesOrderLines.Where(x => x.DataAreaId == company && x.SalesOrderNumber == salesId).First();

                DataServiceCollection<SalesOrderLine> salesOrderCollection = new DataServiceCollection<SalesOrderLine>(context);
                salesOrderCollection.Add(salesOrder);

                // Update
                salesOrder.SalesPrice = 169;
                context.UpdateObject(salesOrder);
                context.SaveChanges(SaveChangesOptions.PostOnlySetProperties | SaveChangesOptions.BatchWithSingleChangeset); 

                Console.WriteLine("Updated successfully for Sales order {0} Item id {1}", salesOrder.SalesOrderNumber, salesOrder.ItemNumber);
            }
            catch (DataServiceRequestException e)
            {
                Console.WriteLine("Error {0}", e.InnerException.Message);
            }

        }