2012-05-08 47 views
2

我想通過PowerShell和SOAP查詢CRM 2011。以下PowerShell腳本應該返回聯繫人的全名,但我什麼都沒有收到。使用PowerShell查詢CRM 2011 SOAP端點

$xml = "<?xml version='1.0' encoding='utf-8'?>" 
$xml += "<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema'>" 
$xml += "<soap:Body>" 
$xml += "<Retrieve xmlns='http://schemas.microsoft.com/xrm/2011/Contracts/Services'>" 
$xml += "<entityName>contact</entityName>" 
$xml += "<id>12345678-1234-1234-1234-123456789012</id>" 
$xml += "<columnSet xmlns:q1='http://schemas.microsoft.com/xrm/2011/Contracts' xsi:type='q1:ColumnSet'>" 
$xml += "<q1:Attributes>" 
$xml += "<q1:Attribute>fullname</q1:Attribute>" 
$xml += "<q1:Attribute>telephone1</q1:Attribute>" 
$xml += "</q1:Attributes>" 
$xml += "</columnSet>" 
$xml += "</Retrieve></soap:Body></soap:Envelope>" 

$url="http://crmserver.company.com/Organization/XRMServices/2011/Organization.svc/web" 
$http_request = New-Object -ComObject Msxml2.XMLHTTP 
$http_request.Open('POST', $url, $false) 
$http_request.setRequestHeader("SOAPAction",  "http://schemas.microsoft.com/xrm/2011/Contracts/Services/IOrganizationService/Retrieve"); 
$http_request.setRequestHeader("Content-Type", "text/xml; charset=utf-8"); 
$http_request.setRequestHeader("Content-Length", $xml.length); 
$http_request.send($xml); 
$http_request.responseText 

這裏是迴應:

$http_request.responseText 

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
<s:Body><RetrieveResponse xmlns="http://schemas.microsoft.com/xrm/2011/Contracts/Services"> 
<RetrieveResult xmlns:a="http://schemas.microsoft.com/xrm/2011/Contracts" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
<a:Attributes xmlns:b="http://schemas.datacontract.org/2004/07/System.Collections.Generic"> 
<a:KeyValuePairOfstringanyType> 
<b:key>accountid</b:key> 
<b:value i:type="c:guid" xmlns:c="http://schemas.microsoft.com/2003/10/Serialization/">12345678-1234-1234-1234-123456789012</b:value> 
</a:KeyValuePairOfstringanyType> 
</a:Attributes> 
<a:EntityState i:nil="true"/><a:FormattedValues xmlns:b="http://schemas.datacontract.org/2004/07/System.Collections.Generic"/> 
<a:Id>12345678-1234-1234-1234-123456789012</a:Id><a:LogicalName>account</a:LogicalName> 
<a:RelatedEntities xmlns:b="http://schemas.datacontract.org/2004/07/System.Collections.Generic"/> 
</RetrieveResult> 
</RetrieveResponse> 

我不知道我做錯了。爲什麼代碼不會返回「fullname」,它在columnSet中?

回答

2

嘗試修改您的要求,這部分是這樣的:

$xml += "<columnSet xmlns:q1='http://schemas.microsoft.com/xrm/2011/Contracts' xsi:type='q1:ColumnSet'>" 
$xml += "<q1:Columns xmlns:c='http://schemas.microsoft.com/2003/10/Serialization/Arrays'>" 
$xml += "<c:string>fullname</c:string>" 
$xml += "<c:string>telephone1</c:string>" 
$xml += "</q1:Columns>" 

您可以在這裏檢查出一些其他的SOAP例子: http://code.msdn.microsoft.com/CRM-Online-2011-WebServices-14913a16

+0

也做到了,謝謝! –