Я пытаюсь закрыть цитату в MSCRM с помощью C # CloseQuoteRequest.

CloseQuoteRequest closeQuoteRequest = new CloseQuoteRequest()
{
    QuoteClose = new QuoteClose()
    {
        QuoteId = quote.ToEntityReference(),
        Subject = "Quote Close " + DateTime.Now.ToString(),
    },
    Status = new OptionSetValue(-1),
    RequestName = "CloseQuote",
};
Service.Execute(closeQuoteRequest);

Я получаю сообщение об ошибке;

Форматировщик выдал исключение при попытке десериализации сообщения: При попытке десериализации параметра произошла ошибка http://schemas.microsoft.com/xrm/2011/Contracts/Services: просить. Сообщение InnerException было «Ошибка в строке 1 позиции 711. Элемент http://schemas.datacontract.org/2004/07/System .Collections.Generic : значение » содержит данные из типа, который отображается на имя ' CRM.Entities.Entities : QuoteClose . Десериализатор не знает любого типа, который сопоставляется с этим именем. Рассмотрите возможность изменения реализация метода ResolveName в вашем DataContractResolver вернуть ненулевое значение для имени «QuoteClose» и пространства имен ' CRM.Entities.Entities '. ' . Пожалуйста, смотрите InnerException для более подробности.

Для меня нет внутреннего исключения.

0
Tom Hanson 21 Авг 2018 в 01:25

3 ответа

Лучший ответ

Я не знаю, почему это так, но добавление .ToEntity () к объекту QuoteClose сработало.

CloseQuoteRequest closeQuoteRequest = new CloseQuoteRequest()
{
    QuoteClose = new QuoteClose()
    {
        QuoteId = quote.ToEntityReference(),
        Subject = "Quote Close " + DateTime.Now.ToString(),
    }.ToEntity<Entity>(),
    Status = new OptionSetValue(-1),
    RequestName = "CloseQuote",
};
Service.Execute(closeQuoteRequest);
0
Tom Hanson 21 Авг 2018 в 03:10

Пример кода из MSDN не задано свойство RequestName = "CloseQuote", так как оно не нужно. Убери это.

// Close the quote
CloseQuoteRequest closeQuoteRequest = new CloseQuoteRequest()
{
    QuoteClose = new QuoteClose()
    {
        QuoteId = closeQuote.ToEntityReference(),
        Subject = "Quote Close " + DateTime.Now.ToString()
    },
    Status = new OptionSetValue(-1)
};
_serviceProxy.Execute(closeQuoteRequest);

< Сильный > RequestName
Получает или задает имя запроса. Требуется, но предоставляется производными классами. (Унаследовано от OrganizationRequest.)

< Сильный > Статус
Свойство Status соответствует атрибуту Quote.StatusCode. Он отображается как «Причина состояния» в приложении Microsoft Dynamics 365. Если для этого свойства установлено значение -1, система устанавливает соответствующее соответствующее значение состояния.

0
Arun Vinoth 21 Авг 2018 в 02:20
WinQuoteRequest winQuoteRequest = new WinQuoteRequest();
Entity wonQuoteClose = new Entity("quoteclose");
wonQuoteClose.Attributes["quoteid"] = new EntityReference("quote", id);
wonQuoteClose.Attributes["subject"] = "Quote Close" + DateTime.Now.ToString();
winQuoteRequest.QuoteClose = wonQuoteClose;
winQuoteRequest.Status = new OptionSetValue(-1);
service.Execute(winQuoteRequest);
0
DaFois 4 Окт 2019 в 10:16
51939270