webapi services microsoft español dynamics documentacion apis odata dynamics-crm microsoft-dynamics dynamics-crm-webapi microsoft-dynamics-webapi

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?



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)";

Consulte el enlace y blog SO

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 de return=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 encabezado OData-EntityId contiene el URI al registro creado

Nota : 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, } ] };