9

Ich habe eine benutzerdefinierte Aktion in CRM erstellt, die ich über seine WebAPI auslösen muss. Die benutzerdefinierte Aktion ist aktiviert und ich habe keine Fehler in CRM während der Erstellung.CRM16 - Benutzerdefinierte Aktion von WebApi auslösen

enter image description here

Ich versuche, diese Aktion von einer VB.NET-Anwendung aufgerufen werden wie:

Dim httpch As New HttpClientHandler 
Dim requestUri As String = "contacts(1fcfd54a-15d3-e611-80dc-0050569ea396)/Microsoft.Dynamics.CRM.new_addnotetocontact" 
httpch.Credentials = New NetworkCredential("username", "password", "domain") 
Dim httpClient As New HttpClient(httpch) 
httpClient.BaseAddress = New Uri(CRMWebApiUri) 
httpClient.Timeout = New TimeSpan(0, 2, 0) 
httpClient.DefaultRequestHeaders.Add("OData-MaxVersion", "4.0") 
httpClient.DefaultRequestHeaders.Add("OData-Version", "4.0") 
httpClient.DefaultRequestHeaders.Add("Prefer", "odata.include-annotations='OData.Community.Display.V1.FormattedValue'") 
httpClient.DefaultRequestHeaders.Accept.Add(New MediaTypeWithQualityHeaderValue("application/json")) 
Dim jsonNote As JObject = New JObject(New JProperty("NoteTitle", "'Mails have been deleted'"), New JProperty("NoteText", "This contacts SmarterMail data has been deleted due to inactivity")) 
Dim postData = New StringContent(jsonNote.ToString(), Encoding.UTF8, "application/json") 

Dim retrieveContactResponse As HttpResponseMessage = httpClient.PostAsync(requestUri, postData).Result 

Was ich wieder ein Status 400 mit einer Nachricht:

Request message has unresolved parameters.

I kann andere Anrufe an die gleiche Seite machen und alle Kontakte als Beispiel erhalten

Was bedeutet das und wie repariere ich es?

+0

ein C# Beispiel möchte, das zeigt, wie Daten in eine Aktion innerhalb des Körpers zu führen und wie diese Aktion in CRM 2016 sowie Prozess ‚die Parameter erstellen –

+0

@ L--‚‘‘ '' --------- '' '' '' '' '' '' [Erstellen eigener Aktionen in Dynamics CRM 2016] (https://msdn.microsoft.com/en-us/library/ dn481600.aspx) – Nkosi

+0

@l --'''''--------- '' '' '' '' '' '' [Web-API-Funktionen und Aktionen Beispiel (C#) - Dynamics CRM 2016] (https://msdn.microsoft.com/en-us/library/mt742426.aspx) – Nkosi

Antwort

-1

Ich habe das vor einiger Zeit behoben aber habe nicht die Zeit, um zurück zu antworten.In meinem Fall war, was das Problem war die Art, wie ich die Selbst Anfrage es

Anstatt die folgende Art und Weise hergestellt, die in der Frage heißt:

Dim postData = New StringContent(jsonNote.ToString(), Encoding.UTF8, "application/json") 
Dim retrieveContactResponse As HttpResponseMessage = httpClient.PostAsync(requestUri, postData).Result 

Statt die httpClient.PostAsync Verfahren zur Verwendung und Bereitstellung das StringContent-Objekt direkt, ich habe das HttpRequestMessage-Objekt verwendet und das StringContent-Objekt angegeben und dann das HttpRequestMessage-Objekt der SendAsync-Methode des httpClient bereitgestellt, und das scheint mein Problem gelöst zu haben, da es jetzt funktioniert. Beachten Sie auch, dass ich in der ursprünglichen Frage Anführungszeichen in den Wert der ersten JProperty im JObject hatte, das gepostet werden soll. Ich bin mir nicht sicher, ob das etwas damit zu tun hat, sondern einfach hier, da es sich vom Original unterscheidet Code:

Dim jsonNote As JObject = New JObject(New JProperty("NoteTitle", "Mails have been deleted"), New JProperty("NoteText", "This contact's SmarterMail data has been deleted automatically due to inactivity on their CRM account")) 
... 
Dim reqMsg As New HttpRequestMessage(HttpMethod.Post, CRMWebApiUri + requestUri) 
reqMsg.Content = New StringContent(jsonNote.ToString(), Encoding.UTF8, "application/json") 
Dim retrieveContactResponse As HttpResponseMessage = httpClient.SendAsync(reqMsg).Result 
6

What does this mean and how do i fix it ?

Request message has unresolved parameters.

In CRM when you get this error while calling action. then there may be three reasons behind that

  1. some parameters you are passing wrong. (make sure action name is correctly pass)
  2. your action is not activated
  3. your action name is duplicate and one action is in active mode and other is in draft.(as this is done from CRM side that one has to be in draft only two same name action wont be active at same time.)

No. 2 ist bereits betreut, wie es bereits feststellen, wurde genommen Referenzierung, dass die benutzerdefinierte Aktion aktiviert wird.

Nr. 3 wird im verknüpften Artikel angesprochen und ist plausibel, wenn Sie die Aktionen möglicherweise zweimal in CRM importiert oder versehentlich zwei Aktionen mit demselben Namen erstellt haben.

no.1 zu adressieren, würde ich vorschlagen, ein Objektmodell zu schaffen, die Daten zu halten, um

Public Class Note 
    Public Property NoteTitle As String 
    Public Property NoteText As String 
End Class 

CRM ist sehr pingelig über die richtigen Parameter Formatierung gesendet werden. Bei Parameternamen wird ebenfalls zwischen Groß- und Kleinschreibung unterschieden. Die '' in der NoteTitle wird Probleme beim Serialisieren verursachen. Verwenden Sie auch NewtonSoft.Json, um die JSON-Nutzlast zu erstellen, anstatt sie selbst zu erstellen.

'Handler with credentials 
Dim httpClientHandler As New HttpClientHandler With { 
    .Credentials = New NetworkCredential("username", "password", "domain")} 
'Create and configure HTTP Client 
Dim httpClient As New HttpClient(httpClientHandler) With { 
    .BaseAddress = New Uri(CRMWebApiUri), 
    .Timeout = New TimeSpan(0, 2, 0)} 
httpClient.DefaultRequestHeaders.Add("OData-MaxVersion", "4.0") 
httpClient.DefaultRequestHeaders.Add("OData-Version", "4.0") 
httpClient.DefaultRequestHeaders.Add("Prefer", "odata.include-annotations='OData.Community.Display.V1.FormattedValue'") 
httpClient.DefaultRequestHeaders.Accept.Add(New MediaTypeWithQualityHeaderValue("application/json")) 

'Create and populate data to be sent 
Dim model As New Note With { 
    .NoteTitle = "Mails have been deleted", 
    .NoteText = "This contacts SmarterMail data has been deleted due to inactivity"} 
'Serialize mode to well formed JSON 
Dim json As String = JsonConvert.SerializeObject(model) 
Dim postData = New StringContent(json, Encoding.UTF8, "application/json") 
'invoking action using the fully qualified namespace of action message 
Dim requestUri As String = "contacts(1fcfd54a-15d3-e611-80dc-0050569ea396)/Microsoft.Dynamics.CRM.new_addnotetocontact" 
'POST the data 
Dim retrieveContactResponse As HttpResponseMessage = Await httpClient.PostAsync(requestUri, postData) 

Zusätzliche Referenz Dynamics CRM 2016: Use Web API actions

When invoking a bound function, you must include the full name of the function including the Microsoft.Dynamics.CRM namespace. If you do not include the full name, you will get the following error: Status Code:400 Request message has unresolved parameters.

0

Ändern Sie den Namen new_addnotetocontact in new_AddNoteToContact, wird es funktionieren.

Dim requestUri As String = "contacts(1fcfd54a-15d3-e611-80dc-0050569ea396)/Microsoft.Dynamics.CRM.new_AddNoteToContact" 

Prozessschema ist wie folgt:

<Action Name="new_AddNoteToContact" IsBound="true"> 
    <Parameter Name="entity" Type="mscrm.contact" Nullable="false" /> 
    <Parameter Name="NoteTitle" Type="Edm.String" Nullable="false" Unicode="false" /> 
    <Parameter Name="NoteText" Type="Edm.String" Nullable="false" Unicode="false" /> 
    <ReturnType Type="mscrm.annotation" Nullable="false" /> 
</Action> 

Eindeutiger Name:new_AddNoteToContact

Ref: https://msdn.microsoft.com/en-us/library/mt607600.aspx#Anchor_3

aktualisieren: Wenn Sie die einzigartige bearbeitet hätte Name nach cr Essen Aktion, dann werden Duplikate in Processes Einheit erstellt. Pls lösche die Duplikate von Adv.Find

Verwandte Themen