2013-12-09 53 views
5

我希望使用Microsoft CRM Web服務,我想這樣的代碼:連接到Dynamics CRM中使用Python肥皂水

wsdl_url = 'http://crm-test:5555/CRMDeveleopment/XRMServices/2011/Organization.svc?wsdl' 
username = 'user' 
password = 'pass' 

from suds.transport.https import WindowsHttpAuthenticated 
from suds.client import Client 

import logging 
logging.basicConfig(level=logging.INFO) 
logging.getLogger('suds.client').setLevel(logging.DEBUG) 
logging.getLogger('suds.transport').setLevel(logging.DEBUG) 

ntlmTransport = WindowsHttpAuthenticated(username=username, password=password) 
metadata_client = Client(wsdl_url, transport=ntlmTransport, cache=None) 

,我得到這個錯誤:

Traceback (most recent call last): 
    File "crm.py", line 15, in <module> 
    metadata_client = Client(wsdl_url, transport=ntlmTransport) 
    File "/usr/lib/python2.7/site-packages/suds/client.py", line 112, in __init__ 
    self.wsdl = reader.open(url) 
    File "/usr/lib/python2.7/site-packages/suds/reader.py", line 152, in open 
    d = self.fn(url, self.options) 
    File "/usr/lib/python2.7/site-packages/suds/wsdl.py", line 157, in __init__ 
    self.open_imports() 
    File "/usr/lib/python2.7/site-packages/suds/wsdl.py", line 202, in open_imports 
    imp.load(self) 
    File "/usr/lib/python2.7/site-packages/suds/wsdl.py", line 314, in load 
    d = Definitions(url, options) 
    File "/usr/lib/python2.7/site-packages/suds/wsdl.py", line 159, in __init__ 
    self.build_schema() 
    File "/usr/lib/python2.7/site-packages/suds/wsdl.py", line 220, in build_schema 
    self.schema = container.load(self.options) 
    File "/usr/lib/python2.7/site-packages/suds/xsd/schema.py", line 95, in load 
    child.dereference() 
    File "/usr/lib/python2.7/site-packages/suds/xsd/schema.py", line 323, in dereference 
    midx, deps = x.dependencies() 
    File "/usr/lib/python2.7/site-packages/suds/xsd/sxbasic.py", line 469, in dependencies 
    raise TypeNotFound(self.ref) 
suds.TypeNotFound: Type not found: '(ManagedPropertyAttributeRequiredLevel, http://schemas.microsoft.com/xrm/2011/Contracts,)' 

輸出組織

from suds import WebFault 
from suds.client import * 
from suds.transport.https import WindowsHttpAuthenticated 

user = r'domain.net\username' 
password = "password" 
url = "http://crm-test:5555/XRMServices/2011/Organization.svc?wsdl" 


ntlm = WindowsHttpAuthenticated(username = user, password = password) 
client = Client(url, transport=ntlm) 
print client 

錯誤:

$ python organization.py 
DEBUG:suds.transport.http:opening (http://crm-test.kavatelecom.net:5555/XRMServices/2011/Organization.svc?wsdl) 
DEBUG:suds.transport.http:opening (http://crm-test.kavatelecom.net:5555/XRMServices/2011/Organization.svc?wsdl=wsdl0) 
Traceback (most recent call last): 
    File "organization.py", line 15, in <module> 
    client = Client(url, transport=ntlm) 
    File "/usr/lib/python2.7/site-packages/suds/client.py", line 112, in __init__ 
    self.wsdl = reader.open(url) 
    File "/usr/lib/python2.7/site-packages/suds/reader.py", line 152, in open 
    d = self.fn(url, self.options) 
    File "/usr/lib/python2.7/site-packages/suds/wsdl.py", line 157, in __init__ 
    self.open_imports() 
    File "/usr/lib/python2.7/site-packages/suds/wsdl.py", line 202, in open_imports 
    imp.load(self) 
    File "/usr/lib/python2.7/site-packages/suds/wsdl.py", line 314, in load 
    d = Definitions(url, options) 
    File "/usr/lib/python2.7/site-packages/suds/wsdl.py", line 159, in __init__ 
    self.build_schema() 
    File "/usr/lib/python2.7/site-packages/suds/wsdl.py", line 220, in build_schema 
    self.schema = container.load(self.options) 
    File "/usr/lib/python2.7/site-packages/suds/xsd/schema.py", line 95, in load 
    child.dereference() 
    File "/usr/lib/python2.7/site-packages/suds/xsd/schema.py", line 323, in dereference 
    midx, deps = x.dependencies() 
    File "/usr/lib/python2.7/site-packages/suds/xsd/sxbasic.py", line 469, in dependencies 
    raise TypeNotFound(self.ref) 
suds.TypeNotFound: Type not found: '(ManagedPropertyAttributeRequiredLevel, http://schemas.microsoft.com/xrm/2011/Contracts,)' 
+0

你認爲你可以跟進這篇文章嗎?切換到SOAP 1.1是否解決了您的問題? –

+0

你的意思是我必須使用舊版本的泡沫? – nim4n

+0

您可以發佈從http輸出:// CRM測試:5555/CRMDeveleopment/XRMServices/2011/Organization.svc WSDL –

回答

2

finnally我連接到CRM網絡service.but我得到「」 400,請求u'Bad'‘’錯誤,當我執行我的reques!

我的代碼是:

from suds import WebFault 
from suds.client import * 
from suds.transport.https import WindowsHttpAuthenticated 
import logging 
logging.basicConfig(level=logging.INFO) 
logging.getLogger('suds.transport.http').setLevel(logging.DEBUG) 
user = r'domain\username' 
password = "pass" 
url = "http://domain:5555/XRMServices/2011/Discovery.svc?wsdl" 

ntlm = WindowsHttpAuthenticated(username = user, password = password) 
client = Client(url, transport=ntlm) 
print client 
req = client.factory.create('ns3:RetrieveOrganizationsRequest') 

accessTypes = client.factory.create('ns3:EndpointAccessType') 
orgRel = client.factory.create('ns3:OrganizationRelease') 

req.AccessType = accessTypes.Default 
req.Release = orgRel.Current 

headers = dict() 
headers['Content-Type'] = 'application/soap+xml' 
client.set_options(headers=headers) 
resp = client.service.Execute(req) 

打印客戶機的輸出:

$ python newcrm.py 

Suds (https://fedorahosted.org/suds/) version: 0.4 GA build: R699-20100913 

Service (DiscoveryService) tns="http://schemas.microsoft.com/xrm/2011/Contracts" 
    Prefixes (4) 
     ns0 = "http://schemas.datacontract.org/2004/07/System.Collections.Generic" 
     ns1 = "http://schemas.microsoft.com/2003/10/Serialization/" 
     ns2 = "http://schemas.microsoft.com/xrm/2011/Contracts" 
     ns3 = "http://schemas.microsoft.com/xrm/2011/Contracts/Discovery" 
    Ports (1): 
     (CustomBinding_IDiscoveryService) 
     Methods (1): 
      Execute(ns3:DiscoveryRequest request,) 
     Types (24): 
      BaseServiceFault 
      ns3:DiscoveryRequest 
      ns3:DiscoveryResponse 
      DiscoveryServiceFault 
      ns3:EndpointAccessType 
      ns3:EndpointCollection 
      ns3:EndpointType 
      ErrorDetailCollection 
      ns0:KeyValuePairOfEndpointTypestringztYlk6OT 
      ns0:KeyValuePairOfstringanyType 
      ns3:OrganizationDetail 
      ns3:OrganizationDetailCollection 
      ns3:OrganizationRelease 
      OrganizationServiceFault 
      ns3:OrganizationState 
      ns3:RetrieveOrganizationRequest 
      ns3:RetrieveOrganizationResponse 
      ns3:RetrieveOrganizationsRequest 
      ns3:RetrieveOrganizationsResponse 
      ns3:RetrieveUserIdByExternalIdRequest 
      ns3:RetrieveUserIdByExternalIdResponse 
      ns1:char 
      ns1:duration 
      ns1:guid 

和錯誤,我得到:

DEBUG:suds.transport.http:sending: 
URL:http://crm-test.kavatelecom.net:5555/XRMServices/2011/Discovery.svc 
HEADERS: {'SOAPAction': u'"http://schemas.microsoft.com/xrm/2011/Contracts/Discovery/IDiscoveryService/Execute"', 'Content-Type': 'application/soap+xml', 'Content-type': 'application/soap+xml', 'Soapaction': u'"http://schemas.microsoft.com/xrm/2011/Contracts/Discovery/IDiscoveryService/Execute"'} 
MESSAGE: 
<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:ns0="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://schemas.microsoft.com/xrm/2011/Contracts/Discovery" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Header/><ns0:Body><ns1:Execute><ns1:request xsi:type="ns1:RetrieveOrganizationsRequest"><ns1:AccessType>Default</ns1:AccessType><ns1:Release>Current</ns1:Release></ns1:request></ns1:Execute></ns0:Body></SOAP-ENV:Envelope> 
ERROR:suds.client:<?xml version="1.0" encoding="UTF-8"?> 
<SOAP-ENV:Envelope xmlns:ns0="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://schemas.microsoft.com/xrm/2011/Contracts/Discovery" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> 
    <SOAP-ENV:Header/> 
    <ns0:Body> 
     <ns1:Execute> 
     <ns1:request xsi:type="ns1:RetrieveOrganizationsRequest"> 
      <ns1:AccessType>Default</ns1:AccessType> 
      <ns1:Release>Current</ns1:Release> 
     </ns1:request> 
     </ns1:Execute> 
    </ns0:Body> 
</SOAP-ENV:Envelope> 
Traceback (most recent call last): 
    File "newcrm.py", line 32, in <module> 
    resp = client.service.Execute(req) 
    File "/usr/lib/python2.7/site-packages/suds/client.py", line 542, in __call__ 
    return client.invoke(args, kwargs) 
    File "/usr/lib/python2.7/site-packages/suds/client.py", line 602, in invoke 
    result = self.send(soapenv) 
    File "/usr/lib/python2.7/site-packages/suds/client.py", line 649, in send 
    result = self.failed(binding, e) 
    File "/usr/lib/python2.7/site-packages/suds/client.py", line 708, in failed 
    raise Exception((status, reason)) 
Exception: (400, u'Bad Request') 
+0

嗨nim4n,你是否得到了這個問題的答案,我的意思是我也面臨同樣的問題,例外:(400,u'Bad請求'),並沒有得到任何解決方案。 – sandeep

+1

我用REST類型的端點insted的肥皂 – nim4n

4

看起來你被配置爲使用SOAP 1.2。你能用肥皂1.1試試你的要求嗎?

我這樣說是因爲我在看這個穿行:http://msdn.microsoft.com/en-us/library/gg594434.aspx

請求中提到有符合較早標準(由MIME類型所示)

至於怎麼做這與泡沫圖書館:閱讀了一些文件後,我傾向於撕毀我自己的眼睛。 (開個玩笑,我只是習慣於閱讀不同類型的文檔,我想的)。我敢肯定,你更習慣瀏覽它比我,並能夠很快弄明白:http://jortel.fedorapeople.org/suds/doc/

+0

TNX爲你的答案,我檢查皁液文檔,但我找不到改變的肥皂 – nim4n

+2

的版本什麼我會說實話,經過進一步的研究,這是絕對不平凡的連接到CRM組織服務。我已經嘗試了這個週末來重現你的環境,但新的在線版本是2013版本,並且他們已經改變了很多。一個可能有用的資源是這樣的:http://code.msdn.microsoft.com/CRM-Online-2011-WebServices-14913a16/sourcecode?fileId=60240&pathId=1778283709這是一個項目,作者設置一個純粹的soap調用連接到組織服務。它在C#中。我無法測試,因爲我再次無法訪問CRM 2011. –

+0

我認爲最初我需要連接到Discovery服務,然後我可以使用組織服務。 – nim4n