2017-07-12 1 views
1

Nous avons une entité appelée Question et qui a des réponses multiples, c'est-à-dire qu'il existe une relation 1: N entre les entités Question et Réponse.Dynamics 365 Web API - Créer plusieurs JSON d'enregistrements enfants?

Nous avons un enregistrement Question existant. Ce que nous devons être en mesure de réaliser est de mettre à jour l'enregistrement Question et en même temps, ajouter plusieurs enregistrements de réponses liés à la même question (le champ new_QuestionId de la table Response doit être rempli dans le cadre de la création de réponse).

Ma logique était de

  1. Mise à jour du dossier de la question (à savoir, une opération de PATCH). Avoir une structure en boucle et, dans la boucle, créer des enregistrements de réponse liés à l'enregistrement Question.

Exemple de code

Donc, ici j'ai donné un échantillon où nous créons un enregistrement de réponse qui est liée à la question (avec enregistrement Id 4B5461DB-7061-E711-8124-E0071B66C0A1).

POST [Organization URI]/api/data/v8.2/new_responses HTTP/1.1 
Content-Type: application/json; charset=utf-8 
OData-MaxVersion: 4.0 
OData-Version: 4.0 
Accept: application/json 
{ 
    "new_questionTitle": "This is the question from my console app", 
    "new_score": 100, 
    "new_nativelanguage": "This is in native language", 
    "new_englishtranslation": "This is in english", 
    "[email protected]": "/new_questions(4B5461DB-7061-E711-8124-E0071B66C0A1)", 
    "new_name": "This is the primary attribute" 
} 

Ma question est quel serait le JSON si je veux être en mesure de créer de multiples réponses, tous ayant trait à la même question Id de 4B5461DB-7061-E711-8124-E0071B66C0A1

Nous sommes sur la dynamique 365 en ligne.

Répondre

0

Le WebAPI a la capacité de faire des demandes de traitement par lots, comme documenté ici: Execute batch operations using the Web API

Et this blog post par échelonnable Solutions contiennent les exemple de code pour un lot créé:

function BulkCreate() { 
    var body = ""; 
    var entityCollection = new Array(); 

    var entity1 = {}; 
    entity1["name"] = "dummy account 1"; 
    var body = JSON.stringify(entity1); 
    entityCollection.push(body); 

    body = ""; 
    var entity2 = {}; 
    entity2["name"] = "dummy account 2"; 
    body = JSON.stringify(entity2); 
    entityCollection.push(body); 

    var data = []; 
    data.push('--batch_123456'); 
    data.push('Content-Type: multipart/mixed;boundary=changeset_BBB456'); 
    data.push(''); 

    for (var i = 0; i < entityCollection.length; i++) { 
     data.push('--changeset_BBB456'); 
     data.push('Content-Type:application/http'); 
     data.push('Content-Transfer-Encoding:binary'); 
     var id = i + 1; 
     data.push('Content-ID:' + id); 
     data.push(''); 
     data.push('POST ' + parent.Xrm.Page.context.getClientUrl() + '/api/data/v8.1/accounts HTTP/1.1'); 

     data.push('Content-Type:application/json;type=entry'); 
     data.push(''); 
     data.push(entityCollection[i]); 
    } 

    data.push('--changeset_BBB456--'); 
    data.push('--batch_123456--'); 
    var payload = data.join('\r\n'); 
    $.ajax(
    { 
     method: 'POST', 
     url: parent.Xrm.Page.context.getClientUrl() + '/api/data/v8.1/$batch', 
     headers: { 
      'Content-Type': 'multipart/mixed;boundary=batch_123456', 
      'Accept': 'application/json', 
      'Odata-MaxVersion': '4.0', 
      'Odata-Version': '4.0' 
     }, 
     data: payload, 
     async: false, 
     success: function (data, textStatus, xhr) { 
      alert("Record has been successfully Created"); 
     }, 
     error: function (xhr, textStatus, errorThrown) { 
      alert(textStatus + " " + errorThrown); 
     } 
    }); 
} 
+0

Merci! Mais, les opérations par lots indiquent explicitement 'La valeur que les requêtes par lots fournissent est qu'elles peuvent inclure des ensembles de modifications, qui fournissent un moyen de regrouper un certain nombre d'opérations qui réussissent ou échouent en tant que groupe.» Malheureusement, nous ne voulons pas cela. – Kanini