Нет полезной нагрузки JSON при использовании генератора клиентского кода OData V4 и вызове Save Change с PostOnlySetProperties - PullRequest
0 голосов
/ 02 ноября 2018

Я сгенерировал клиентский код OData с помощью Генератора клиентского кода OData V4 для Visual Studio 2017. При вызове сохранения изменений значения полей не включаются в полезную нагрузку JSON. Может ли кто-нибудь помочь мне понять, почему?

Код клиента генерируется из конечной точки веб-API Dynamics CRM https: //.api.crm.dynamics.com/api/data/v9.1/.

Полная полезная нагрузка генерируется, когда я вызываю context.SaveChanges (); без установки параметра SaveChangesOptions.PostOnlySetProperties, однако это устраняет другие проблемы, такие как ownerid, не может быть нулевым.

Ниже приведен снимок экрана с полезной нагрузкой запроса фидлера и исходным кодом. OData Request with SaveChangesOptions.PostOnlySetProperties

class Program
{
    public static void Main(string[] args)
    {
        Poc.D365Crm.OData.Microsoft.Dynamics.CRM.Contact contact = null;
        try
        {
            var context = new Poc.D365Crm.OData.Microsoft.Dynamics.CRM.System(new Uri("https://<domain>.api.crm.dynamics.com/api/data/v9.1/"));
            context.SendingRequest2 += new EventHandler<SendingRequest2EventArgs>(delegate (object sender, SendingRequest2EventArgs e)
            {
                e.RequestMessage.SetHeader("Authorization", CreateAuthenticationHeader());
            });

            var accounts = context.Accounts.Take(1).ToList();

            contact = new Poc.D365Crm.OData.Microsoft.Dynamics.CRM.Contact()
            {
                Firstname = "Fred",
                Lastname = "Flintstone",
                Birthdate = DateTime.Now.AddYears(-13),
                //Parentcustomerid_account = accounts[0],
                Emailaddress1 = "ff@ff.com",
                Contactid = Guid.NewGuid()
            };

            var contactCollection = new DataServiceCollection<Contact>(context);
            contactCollection.Add(contact);

            var response = context.SaveChanges(SaveChangesOptions.PostOnlySetProperties);

            Log("Success!", ConsoleColor.Green);
        }
        catch (Exception ex)
        {

        }
    }

    public static void Log(string message, ConsoleColor colour)
    {
        var originalColour = Console.ForegroundColor;

        Console.ForegroundColor = colour;

        Console.WriteLine(message);

        Console.ForegroundColor = originalColour;
    }

    public static string CreateAuthenticationHeader()
    {
        string aadTenant = "https://login.windows.net/<domain>"; 
        string aadClientAppId = "app id guid";
        string aadClientAppSecret = "secret";
        string aadResource = "https://<domain>.crm.dynamics.com";

        AuthenticationContext authenticationContext = new AuthenticationContext(aadTenant, false);

        var creadential = new ClientCredential(aadClientAppId, aadClientAppSecret);
        var authenticationResult = authenticationContext.AcquireTokenAsync(aadResource, creadential).Result;

        return authenticationResult.CreateAuthorizationHeader();
    }
}

}

...