webentwicklung-frage-antwort-db.com.de

Erstellen Sie Anmerkungen zu einer Kontaktentität in Microsoft Dynamics CRM über die API

Diese Frage bezieht sich auf Microsoft Dynamics CRM 2015, das ich über die API anrufe.

Ich erstelle Kontaktentität:

POST [organization URI]/api/data/contacts
Content-Type: application/json; charset=utf-8
Accept: application/json
{
    "emailaddress1": "[email protected]",
}

Es funktioniert, ich sehe einen neuen Datensatz, nachdem ich mich im Panel angemeldet habe. Und ich kann es über die API aufrufen:

[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]",
  ....
}

Als nächstes möchte ich einen Anmerkungsdatensatz hinzufügen, der diesem Kontakt zugeordnet ist. Dem guide folgen, den ich anrufe:

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)'
}

Aber es gibt 400 Fehler zurück:

Ein nicht deklarierter Eigenschaftskontakt, der nur Eigenschaftsanmerkungen in der Nutzlast enthält, aber kein Eigenschaftswert in der Nutzlast gefunden wurde. In OData können nur deklarierte Navigationseigenschaften und deklarierte benannte Streams als Eigenschaften ohne Werte dargestellt werden.

Wenn ich anrufe:

POST [organization URI]/api/data/annotations
Content-Type: application/json; charset=utf-8
Accept: application/json
{
    "notetext": "TEST",
}

Eine neue Entität wird erstellt, jedoch ohne Beziehung zum Kontakt.

Wie kompiliere ich diese POST -Anfrage richtig? Was fehlt mir hier? Ich vermute, dass [email protected] etwas anders dargestellt werden sollte, ich habe [email protected], [email protected], [email protected] versucht - aber keine Auswirkungen.

Irgendwelche Ideen?

16
maicher

Ich habe festgestellt, dass dies funktioniert, aber in zwei Anfragen:

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

Bearbeiten:

Der annotation_id_from_first_request-Wert wird aus der Antwort der ersten Anforderung übernommen.

8
maicher

Anstelle von [email protected] müssen Sie [email protected] verwenden. Diese Ergebnisse sind in:

"[email protected]": "/contacts(f76e4e7c-ea61-e511-80fd-3863bb342b00)"

Um die Liste der Eigenschaften zu erhalten, schauen Sie unter den einwertigen Navigationseigenschaften in der Dokumentation nach.

14
Justin

Teil 1:
MSDN-Referenz: Deep Insert

Sie können miteinander verwandte Entitäten erstellen, indem Sie sie als Werte für Navigationseigenschaften definieren. Dies ist als deep insert . Bekannt. Wie bei einem einfachen Anlegen enthält der Response OData-EntityId-Header den Uri der erstellten Entität. Die URIs für die verknüpften Entitäten werden nicht zurückgegeben.

Unter dem folgenden Code werden Konto (1) erstellt, + zugeordneter Kontakt erstellt (2), Opportunity erstellt und zugeordnet (3) und + zugeordnete Aufgabe erstellt (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" }
      ]
  }
 ]
}

Teil 2:
Beim Zuordnen von Annotationen zu Kontakten wird die folgende Syntax verwendet.

note["[email protected]"] = "/contacts(C5DDA727-B375-E611-80C8-00155D00083F)";

Verweisen Sie SO link & blog

Teil 3:
Beantworten Sie Ihren Kommentar zu einer anderen Antwort zu annotation_id_from_first_request:

Um die erstellte Datensatz-ID als Antwort auf die letzte Anforderung zu erhalten, können Sie wie folgt analysieren:

                //get Response from Created Record
                entityIdWithLink = XMLHttpRequest.getResponseHeader("OData-EntityId");

                //get EntityId from ResponseHeader of Created Record  
                getEntityId = entityIdWithLink.split(/[()]/);
                getEntityId = getEntityId[1];

Sie können lesen Sie mehr

Sie können Ihre POST -Anforderung zusammenstellen, sodass Daten aus dem erstellten Datensatz mit dem Status 201 (Erstellt) zurückgegeben werden.
Um dieses Ergebnis zu erhalten, müssen Sie in den Anforderungsheadern die Voreinstellung return=representation verwenden. Um zu steuern, welche Eigenschaften zurückgegeben werden, hängen Sie die Abfrageoption $ select an die URL an den Entitätssatz an.
Die $ expand-Abfrageoption wird ignoriert, wenn sie verwendet wird. Wenn eine Entität auf diese Weise erstellt wird, wird der OData-EntityId-Header mit dem URI des erstellten Datensatzes nicht zurückgegeben

Hinweis : Diese Funktion wurde mit der Aktualisierung für Dezember 2016 für Dynamics 365 hinzugefügt

MSDN-Referenz: Erstellen Sie mit zurückgegebenen Daten

Update :
Wenn jemand auf der Suche nach einer funktionierenden Nutzlastprobe ist, um einen Datensatz und eine Anmerkung einzufügen, stammt der folgende von meinem Projekt:

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,
                }
            ]
    };
7
Arun Vinoth

Ich verwende diesen C # -Code zum Erstellen und Verknüpfen.

        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;

Die JSON sieht so aus:

{"NoteText":"Hello World!",
 "Subject":"Note Subject",
 "ObjectId": {"LogicalName":"account",
              "Id":"003CCFC2-4012-DE11-9654-001F2964595C"}
,"ObjectTypeCode":"account"}
4
Robert Muehsig

Diese Antwort gilt für die Verwendung von Web-APIs: 

Wenn die referenz-Eigenschaft mit Großbuchstaben definiert wurde, müssen Sie beim Aktualisieren und Einfügen in der Eigenschaft Großbuchstaben verwenden. Sehen Sie sich den Schemanamen in der Eigenschaftsliste der primären Entität an.

Nehmen wir an, Sie haben eine Entität namens myprefix_entity mit einem Verweis auf die Kontoentität, und Sie haben sie Account genannt. Der Schemaname wurde myprefix_AccountId.

"[email protected]":"/accounts(f76e4e7c-ea61-e511-80fd-000000000000)"

Das Großbuchstabe A und das Großbuchstabe I in myprefix_AccountId ist wichtig, wenn der Schemaname so definiert wurde.

4
Kjeld Poulsen

Sie können folgendes verwenden.

'[email protected]': '/contacts(f76e4e7c-ea61-e511-80fd-3863bb342b00)'

In den meisten Datensätzen erhalten Sie _contactid_value als Parameternamen. Sie müssen also wie [email protected] als Parameter übergeben und in dem Wert müssen Sie 'EntitySetName' übergeben. Dies wäre Kontakte und GUID. "/EntitysetName(GUID)" _________________Sollte den Wert "/ Kontakte (f76e4e7c-ea61-e511-80fd-3863bb342b00)"

0
Amit Patel

es könnte etwas spät sein, aber die Antwort im folgenden Link erklärt, wie die Bindung wirklich gut funktioniert. 

im Grunde müssen Sie das Schemamann aus field mit dem Suffix @ odata.bind verwenden und den Wert "/ entityschemaname (recordGUID)" good angeben, um sich dies zu merken Das Entitätsschemaname muss ein 's' haben und die recordGUID sollte keine geschweiften Klammern haben.

für weitere Informationen folge diesem Link, wo ich diese Informationen habe

'Eine nicht deklarierte Eigenschaft' beim Versuch, einen Datensatz über die Web-API zu erstellen

0
David Mendes