2016-04-05 26 views
0

Dynamics CRM'yi güncellemek için bir istek isteği kullanmaya çalışıyorum. Aşağıdaki python kodunu çalıştırdığımda 204 cevabı alıyorum, ancak bir değeri güncellemek yerine onu temizler. Örneğin, firstname "WebApiUpdate" yerine null olarak güncellenir.Microsoft Dynamics CRM 2016 Web API Talep isteği temizler

import adal 
import json 
import urllib2 
import requests 

endpoint = "https://login.microsoftonline.com/00000000-0000-0000-0000-000000000002" 
username = "[email protected]" 
password = "password" 
resource_uri = "https://orgname.crm.dynamics.com" 

token_response = adal.acquire_token_with_username_password(endpoint,username,password,resource= resource_uri) 
print token_response['accessToken'] 




payload = { "value": "WebApiUpdate"} 
url = "http://xxxxx.crm.dynamics.com/api/data/v8.0/contacts(00000000-0000-0000-0000-000000000001)/firstname" 
headers = {"Authorization":"Bearer "+token_response['accessToken']} 
r = requests.put(url,data=payload,headers=headers) 
print r.content 
+2

bulunan istek yöntemine here ilgili belgeleri okuyun. Temasa karşı kayıtlı herhangi bir eklentiniz veya senkronize iş akışınız var mı? Soruşturma için başka bir yol: sistem seviyesinde denetimi açın, ardından temas için denetimi açın, talebinizi yeniden yayınlayın, daha sonra kayıt için denetim günlüğünü inceleyin. "WebApiUpdate" in bunu kayıt yaptığını ve sonra sildiğini gösteriyor mu? – Polshgiant

cevap

1

Çözüm:

  1. istekte json = payload için data = payload set https:// yerine
  2. http:// olması url ayarlayın. örn:

r = requests.put(url,json=payload,headers=headers) 
Ne yanlış gidiyordu:

  1. (olursa olsun veri veya json olarak ayarlandı eğer) yükü dahil ilk aramayı bir yanıt aldı HTTP/1.0 301 Moved Permanently. Bu yanıtta yeni konum ile bir başlık oldu. Bu konum, URL'de https://'u içermiştir. Sonra benim kod doğru https url gitti, doğru başlık parametreleri vardı, ancak yükü içermeyen ikinci bir istek gönderdi. Bu, benim istek isteğimin güncellenecek değeri içermemesine neden oldu, bu yüzden Microsoft Dynamics CRM değeri null olarak ayarladı.

  2. Microsoft Dynamics CRM, istek isteği yükünün json olarak biçimlendirilmesini gerektirir. Bağlantıyı https:// olarak güncelledikten ve yük yüklendikten sonra, x-www-form-urlencoded olarak biçimlendirildi. Bu, yükün isteğe bağlı olarak value=WebApiUpdate olarak eklendiği anlamına gelir. Bu, HTTP/1.1 400 Bad Request cevabına neden oldu. Json olarak biçimlendirilecek olan yükün değiştirilmesi, yükün {"value": "WebApiUpdate"} olarak isteğe ekleneceği anlamına gelir.

ben onu çözdüm nasıl

  1. Ben http ben bu stack overflow question bulunamadı aşağıdaki kodu ekleyerek çıkıyordu çağrı koymak çıkışına Programımı ayarlayın. Sonra iki aynı olmayan aramalar olduğunu fark ettim ve oradan gittim.

    import logging 
    
    try: 
        import http.client as http_client 
    except ImportError: 
        # Python 2 
        import httplib as http_client 
    http_client.HTTPConnection.debuglevel = 1 
    logging.basicConfig() 
    logging.getLogger().setLevel(logging.DEBUG) 
    requests_log = logging.getLogger("requests.packages.urllib3") 
    requests_log.setLevel(logging.DEBUG) 
    requests_log.propagate = True 
    
  2. Ben Bu istek bana iyi göründü bu stack overflow question