odata - services - Crear una anotación a una entidad de contacto en Microsoft Dynamics CRM por API
web service dynamics (7)
Esta pregunta está relacionada con Microsoft Dynamics CRM 2015, que estoy llamando a través de la API.
Creo entidad de contacto:
POST [organization URI]/api/data/contacts
Content-Type: application/json; charset=utf-8
Accept: application/json
{
"emailaddress1": "[email protected]",
}
Funciona, veo un nuevo registro, después de iniciar sesión en el panel. Y puedo llamarlo a través de la API:
[organization URI]/api/data/contacts(f76e4e7c-ea61-e511-80fd-3863bb342b00)
{
"@odata.context":"[organization URI]/api/data/$metadata#contacts/$entity",
"@odata.etag":"W//"460199/"",
...
"contactid":"f76e4e7c-ea61-e511-80fd-3863bb342b00",
"emailaddress1":"[email protected]",
....
}
Lo siguiente que quiero hacer es agregar un registro de anotación asociado con ese contacto. Siguiendo la guide que llamo:
POST [organization URI]/api/data/annotations
Content-Type: application/json; charset=utf-8
Accept: application/json
{
"notetext": "TEST",
''[email protected]'': ''contacts(f76e4e7c-ea61-e511-80fd-3863bb342b00)''
}
Pero devuelve 400 errores:
Un ''contacto'' de propiedad no declarada que solo tiene anotaciones de propiedad en la carga útil, pero no se encontró ningún valor de propiedad en la carga útil. En OData, solo las propiedades de navegación declaradas y las secuencias con nombre declaradas se pueden representar como propiedades sin valores.
Cuando llamo:
POST [organization URI]/api/data/annotations
Content-Type: application/json; charset=utf-8
Accept: application/json
{
"notetext": "TEST",
}
Se crea una nueva entidad, pero sin relación con el contacto.
¿Cómo componer correctamente esta solicitud POST? ¿Que me estoy perdiendo aqui? Sospecho que [email protected]
debería presentarse de alguna manera diferente, lo he intentado [email protected]
, [email protected]
, [email protected]
, pero no hay efectos.
¿Algunas ideas?
En lugar de usar [email protected]
, tiene que usar [email protected]
. Estos resultados se encuentran en:
"[email protected]": "/contacts(f76e4e7c-ea61-e511-80fd-3863bb342b00)"
Para obtener la lista de propiedades, busque en las propiedades de navegación de un solo valor en la documentation .
Esta respuesta se aplica para el uso de la API web:
Si la propiedad de referencias se ha definido usando letras mayúsculas, debe usar letras mayúsculas en la propiedad al actualizar e insertar. Mire el nombre del esquema en la lista de propiedades de la entidad primaria.
Digamos que usted tiene una entidad llamada myprefix_entity
con una referencia a la entidad de la cuenta, y la nombró Account
, y el nombre del esquema se convirtió en myprefix_AccountId
, tendría que referirlo como:
"[email protected]":"/accounts(f76e4e7c-ea61-e511-80fd-000000000000)"
La mayúscula A y la mayúscula I en myprefix_AccountId
importantes, si así es como se ha definido el nombre del esquema.
Estoy usando este código de C # para crear y vincular (la tarea. Esperar no es muy inteligente, así que ... ten cuidado):
dynamic testAno = new ExpandoObject();
testAno.NoteText = "Hello World!";
testAno.Subject = "Note Subject";
dynamic refAccount = new ExpandoObject();
refAccount.LogicalName = "account";
refAccount.Id = "003CCFC2-4012-DE11-9654-001F2964595C";
testAno.ObjectId = refAccount;
testAno.ObjectTypeCode = refAccount.LogicalName;
var demo = JsonConvert.SerializeObject(testAno);
HttpContent content = new StringContent(demo, Encoding.UTF8, "application/json");
var handler = new HttpClientHandler { UseDefaultCredentials = true };
HttpClient client = new HttpClient(handler);
var test = client.PostAsync(new Uri("http://crm/.../XRMServices/2011/OrganizationData.svc/AnnotationSet"), content).Result;
El JSON se ve así:
{"NoteText":"Hello World!",
"Subject":"Note Subject",
"ObjectId": {"LogicalName":"account",
"Id":"003CCFC2-4012-DE11-9654-001F2964595C"}
,"ObjectTypeCode":"account"}
He encontrado esto funcionando, pero en dos solicitudes:
POST [organization URI]/api/data/annotations
Content-Type: application/json; charset=utf-8
Accept: application/json
{
"notetext": "TEST"
}
POST [organization URI]/api/data/contacts(f76e4e7c-ea61-e511-80fd-3863bb342b00)/Contact_Annotation/$ref
Content-Type: application/json; charset=utf-8
Accept: application/json
{
"@odata.id": "[organization URI]/annotations(annotation_id_from_first_request)"
}
Editar:
annotation_id_from_first_request
valor de annotation_id_from_first_request
se toma de la respuesta de la primera solicitud.
Puede que sea un poco tarde para esto, pero la respuesta en el siguiente enlace explica cómo funciona realmente el enlace.
Básicamente, debe usar el nombre del esquema de campo con el sufijo @ odata.bind y el valor es "/ entityschemaname (recordGUID)". Recuerde que el entityschemaname debe tener una ''s'' y el recordGUID no debe tener los corchetes. .
Para obtener más información, siga este enlace a continuación, de donde obtuve esta información.
''Una propiedad no declarada'' al intentar crear un registro a través de la API web
Puedes usar lo siguiente.
''[email protected]'': ''/contacts(f76e4e7c-ea61-e511-80fd-3863bb342b00)''
En la mayor parte del registro obtendrá _contactid_value como nombre de parámetro. Por lo tanto, debe pasar como [email protected] como un parámetro y en el valor que debe pasar ''EntitySetName'', que sería contactos y GUID. ''/ EntitysetName (GUID)'' Entonces el valor será ''/ contacts (f76e4e7c-ea61-e511-80fd-3863bb342b00)''
Parte 1:
Referencia de MSDN: inserción profunda
Puede crear entidades relacionadas entre sí definiéndolas como valores de propiedades de navegación. Esto se conoce como inserción profunda . Al igual que con una creación básica, el encabezado
OData-EntityId
la respuesta contiene el Uri de la entidad creada. Los URI para las entidades relacionadas creadas no se devuelven.
El siguiente código es crear una cuenta (1), crear + asociar contacto principal (2), crear y asociar oportunidad (3) y crear + asociar tarea (4)
POST [Organization URI]/api/data/v8.2/accounts HTTP/1.1
Content-Type: application/json; charset=utf-8
OData-MaxVersion: 4.0
OData-Version: 4.0
Accept: application/json
{
"name": "Sample Account",
"primarycontactid":
{
"firstname": "John",
"lastname": "Smith"
},
"opportunity_customer_accounts":
[
{
"name": "Opportunity associated to Sample Account",
"Opportunity_Tasks":
[
{ "subject": "Task associated to opportunity" }
]
}
]
}
Parte 2:
La asociación de anotaciones al contacto utiliza la siguiente sintaxis.
note["[email protected]"] = "/contacts(C5DDA727-B375-E611-80C8-00155D00083F)";
Parte 3:
Responda a su comentario sobre otra respuesta sobre annotation_id_from_first_request
:
Para obtener el Id. De registro creado en respuesta a la última solicitud, puede analizar como a continuación:
//get Response from Created Record
entityIdWithLink = XMLHttpRequest.getResponseHeader("OData-EntityId");
//get EntityId from ResponseHeader of Created Record
getEntityId = entityIdWithLink.split(/[()]/);
getEntityId = getEntityId[1];
Puedes leer mas
Puede redactar su solicitud POST para que los datos del registro creado se devuelvan con un estado de 201 (Creado).
Para obtener este resultado, debe utilizar la preferencia dereturn=representation
en los encabezados de solicitud. Para controlar qué propiedades se devuelven, agregue la opción de consulta $ select a la URL al conjunto de entidades.
La opción de consulta $ expand se ignorará si se usa. Cuando se crea una entidad de esta manera,OData-EntityId
encabezadoOData-EntityId
contiene el URI al registro creadoNota : Esta capacidad se agregó con la actualización de diciembre de 2016 para Dynamics 365
Referencia de MSDN: Crear con datos devueltos
Actualización :
Si alguien que busca una muestra de carga útil para insertar una anotación de registro +, la siguiente información es de mi proyecto:
data = {
"new_attribute1": "test attribute 1",
"new_attribute2": "test attribute 2",
"new_comments": "test comments",
"new_recordurl": recordURL,
"new_feedback_Annotations":
[
{
"notetext": "Screenshot attached",
"subject": "Attachment",
"filename": file.name,
"mimetype": file.type,
"documentbody": base64str,
}
]
};