12

द्वारा माइक्रोसॉफ्ट डायनेमिक्स सीआरएम में एक संपर्क इकाई को एनोटेशन बनाएं, यह प्रश्न माइक्रोसॉफ्ट डायनेमिक्स सीआरएम 2015 से संबंधित है, जिसे मैं एपीआई के माध्यम से कॉल कर रहा हूं।एपीआई

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

यह काम करता है, मैं नया रिकार्ड देखते हैं, के बाद मैं कक्ष में प्रवेश करें:

मैं संपर्क इकाई बनाने। और मैं एपीआई के माध्यम से यह कॉल कर सकते हैं:

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

अगला बात मैं करना चाहता हूँ, एनोटेशन कि संपर्क से संबंधित रिकॉर्ड जोड़ने के लिए है। निम्नलिखित guide मैं फोन:

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

लेकिन यह 400 त्रुटि देता है:

An undeclared property 'contact' which only has property annotations in the payload but no property value was found in the payload. In OData, only declared navigation properties and declared named streams can be represented as properties without values.

जब मैं फोन:

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

नई इकाई बनाई गई है, लेकिन एक संबंध के बिना संपर्क करने के लिए।

इस POST अनुरोध को सही तरीके से कैसे लिखें? मुझे यहां क्या समझ नहीं आ रहा है? मुझे संदेह है कि [email protected] किसी भी तरह से अलग किया जाना चाहिए, मैंने [email protected], [email protected], [email protected] - लेकिन कोई प्रभाव नहीं देखा है।

कोई विचार?

+0

कारण है कि आप वेब एपीआई पूर्वावलोकन और नहीं REST एंडपॉइंट उपयोग कर रहे हैं? –

+0

कोड '[email protected] "होना चाहिए:"/संपर्क (f76e4e7c-ea61-e511-80fd-3863bb342b00) "' '' 'संपर्क से पहले'/'नोट करें और उद्धरण चिह्न (केवल मामले में) –

+0

@ गुइडोप्रेट I कोशिश की है और त्रुटि संदेश है: 'एक संपत्ति 'ऑब्जेक्टिड' जिसमें केवल पेलोड में संपत्ति एनोटेशन है लेकिन कोई संपत्ति मान 'Edm.Guid' प्रकार के रूप में घोषित नहीं किया जाता है। ओडाटा में, केवल नेविगेशन गुणों और नामित धाराओं को मूल्यों के बिना गुणों के रूप में दर्शाया जा सकता है। – maicher

उत्तर

5

मैं इस काम के मिल गया है, लेकिन दो अनुरोधों में:

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

संपादित करें:

annotation_id_from_first_request मूल्य लिया जाता है प्रपत्र पहले अनुरोध की प्रतिक्रिया।

+1

आप annotation_id_from_first_request ???? को कैसे जानते हैं ???? पहले अनुरोध की प्रतिक्रिया से –

+0

। – maicher

11

[email protected] का उपयोग करने के बजाय, आपको [email protected] का उपयोग करना होगा।

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

, संपत्तियों की सूची प्राप्त करने के documentation में एकल मूल्यवान नेविगेशन गुण के नीचे देखें: इस परिणाम में हैं।

+1

यह स्वीकार्य प्रतिक्रिया से बेहतर है क्योंकि यह केवल 1 कॉल का उपयोग करता है। मैं "_contact" (या कुछ समान) के अतिरिक्त अनुमान लगा रहा हूं कि वर्तमान रिकॉर्ड माता-पिता या बच्चा है या नहीं। – zabby

+1

मेरा मानना ​​है कि ऐसा इसलिए है क्योंकि यह नोट्स पर संबंधित क्षेत्र के लिए विशिष्ट है, जो विभिन्न संस्थाओं को देख सकता है। इसलिए, _contact इस इकाई पर निर्भर है कि आप किस इकाई को इसके बारे में सेट करना चाहते हैं (हमेशा क्षेत्र के संबंध में नोट्स के लिए objectid_entityname)। – Justin

4

मैं बनाने और जोड़ने के लिए इस सी # कोड का उपयोग कर रहा (Task.Await सामान बहुत चालाक नहीं है, इसलिए ... सावधान रहना):

 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; 

JSON इस तरह देख रहा है:

संदर्भ संपत्ति बड़े अक्षरों का उपयोग कर परिभाषित किया गया है, तो आप अद्यतन पर संपत्ति में बड़े अक्षरों का उपयोग और डालने के लिए है:

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

इस उत्तर वेब API उपयोग के लिए लागू होता है। प्राथमिक इकाई की संपत्ति सूची में स्कीमा नाम देखें।

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

अपरकेस:

चलें कहते हैं कि तुम खाते इकाई के लिए एक संदर्भ के साथ myprefix_entity नामक संस्था है, और आप इसे Account नाम दिया, और स्कीमा नाम myprefix_AccountId बन गया है, आप के रूप में यह उल्लेख करना होगा 0 और myprefix_AccountId मामलों में अपरकेस I, यदि स्कीमा नाम परिभाषित किया गया है तो यह मायने रखता है।

4

भाग 1:
MSDN संदर्भ: Deep Insert

You can create entities related to each other by defining them as navigation properties values. This is known as deep insert. As with a basic create, the response OData-EntityId header contains the Uri of the created entity. The URIs for the related entities created aren’t returned.

कोड नीचे खाता बनाने के लिए है (1), + सहयोगी प्राथमिक संपर्क बनाने के (2), & एसोसिएट अवसर बनाने के (3) और बनाने + सहयोगी कार्य (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" } 
     ] 
    } 
] 
} 

भाग 2:
संपर्क करने के लिए एनोटेशन संबद्धता नीचे दिए गए वाक्यविन्यास का उपयोग करता है। annotation_id_from_first_request के बारे में एक और जवाब पर
जवाब अपनी टिप्पणी के लिए:

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

SO link देखें & blog

भाग 3

अंतिम अनुरोध से प्रतिक्रिया में बनाया रिकॉर्ड क्रमांक पाने के लिए, आप कर सकते हैं नीचे की तरह पार्स:

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

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

आप कर सकते हैं read more

You can compose your POST request so that data from the created record will be returned with a status of 201 (Created).
To get this result, you must use the return=representation preference in the request headers. To control which properties are returned, append the $select query option to the URL to the entity set.
The $expand query option will be ignored if used. When an entity is created in this way the OData-EntityId header containing the URI to the created record is not returned

Note: This capability was added with December 2016 update for Dynamics 365

MSDN संदर्भ: Create with data returned