[英]Update just one property in CRM via WCF Data Services
我有一些代碼可以從CRM獲取對象,然后更新一個屬性,然后將其推回CRM。 我基於組織數據服務(OData)生成了WCF數據服務上下文。
但是,當我嘗試發送更新時,它將發送所有已加載的屬性,而不僅僅是一個更改,因此我獲得了訪問拒絕異常,因為我的帳戶無法更改對象中的所有屬性。
我的示例代碼:
Guid guid = new Guid("aaa4f83e-0017-e261-9ba4-001517264c77");
Contact contact = context.ContactSet.Where(c => c.ContactId == guid).ToList().First();
contact.New_SomeField = "SomeData";
context.UpdateObject(contact);
DataServiceResponse response = context.SaveChanges();
我檢查了它通過Fiddler發送的請求,並發送了該對象具有的所有屬性,而不僅僅是更改了。 有沒有辦法發送剛剛更改的財產?
如果我手動發送這樣的請求,那么它就像一個超級按鈕一樣工作並且僅更新一個屬性,但是如何通過WCF數據服務發送類似的請求呢?
我的樣本手冊要求:
<?xml version="1.0" encoding="utf-8"?>
<entry xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
<id>http://SomeUrl/XRMServices/2011/OrganizationData.svc/ContactSet(guid'aaa4f83e-0017-e261-9ba4-001517264c77')</id>
<category term="Microsoft.Crm.Sdk.Data.Services.Contact" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
<title type="text">Some Name</title>
<updated>2014-07-15T17:49:06Z</updated>
<author>
<name />
</author>
<content type="application/xml">
<m:properties>
<d:ContactId m:type="Edm.Guid">aaa4f83e-0017-e261-9ba4-001517264c77</d:ContactId>
<d:New_SomeField>
Some Data
</d:New_SomeField>
</m:properties>
</content>
</entry>
謝謝!
UPDATE1
當我嘗試創建一個新的內存中聯系人時,填寫id和所需的屬性,然后發送,它為未指定的屬性發送空值,並且CRM清除了除指定對象以外的所有屬性,因此該對象幾乎被擦除之后。
我的代碼:
var guid = new Guid("D866D2A0-1706-E111-845F-001517264C77");
Contact contact = new Contact();
contact.ContactId = guid;
contact.New_SomeField = "SomeData"
context.AttachTo("ContactSet", contact);
context.ChangeState(contact, EntityStates.Modified);
DataServiceResponse newResponse = context.SaveChanges();
要求此代碼(我切掉了一部分,因為它很大):
<?xml version="1.0" encoding="utf-8"?>
<entry xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
<id>http://SomeServer/SomeOrganization/XRMServices/2011/OrganizationData.svc/ContactSet(guid'd866d2a0-1706-e111-845f-001517264c77')</id>
<category term="Microsoft.Crm.Sdk.Data.Services.Contact" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
<title type="text"></title>
<updated>2014-07-15T19:31:57Z</updated>
<author>
<name />
</author>
<content type="application/xml">
<m:properties>
<d:AccountId m:type="Microsoft.Crm.Sdk.Data.Services.EntityReference">
<d:Id m:type="Edm.Guid" m:null="true" />
<d:LogicalName m:null="true" />
<d:Name m:null="true" />
</d:AccountId>
<d:AccountRoleCode m:type="Microsoft.Crm.Sdk.Data.Services.OptionSetValue">
<d:Value m:type="Edm.Int32" m:null="true" />
</d:AccountRoleCode>
<d:Address1_AddressId m:type="Edm.Guid" m:null="true" />
<d:Address1_AddressTypeCode m:type="Microsoft.Crm.Sdk.Data.Services.OptionSetValue">
<d:Value m:type="Edm.Int32" m:null="true" />
</d:Address1_AddressTypeCode>
<d:Address1_City m:null="true" />
<d:Address1_Country m:null="true" />
<d:Address1_County m:null="true" />
<d:Address1_Fax m:null="true" />
<d:Address1_FreightTermsCode m:type="Microsoft.Crm.Sdk.Data.Services.OptionSetValue">
<d:Value m:type="Edm.Int32" m:null="true" />
</d:Address1_FreightTermsCode>
<d:Address1_Latitude m:type="Edm.Double" m:null="true" />
<d:Address1_Line1 m:null="true" />
<d:Address1_Line2 m:null="true" />
<d:EducationCode m:type="Microsoft.Crm.Sdk.Data.Services.OptionSetValue">
<d:Value m:type="Edm.Int32" m:null="true" />
</d:EducationCode>
<d:EMailAddress1 m:null="true" />
<d:FamilyStatusCode m:type="Microsoft.Crm.Sdk.Data.Services.OptionSetValue">
<d:Value m:type="Edm.Int32" m:null="true" />
</d:FamilyStatusCode>
<d:Fax m:null="true" />
<d:FirstName m:null="true" />
<d:FtpSiteUrl m:null="true" />
<d:FullName m:null="true" />
<d:GenderCode m:type="Microsoft.Crm.Sdk.Data.Services.OptionSetValue">
<d:Value m:type="Edm.Int32" m:null="true" />
</d:GenderCode>
<d:GovernmentId m:null="true" />
<d:HasChildrenCode m:type="Microsoft.Crm.Sdk.Data.Services.OptionSetValue">
<d:Value m:type="Edm.Int32" m:null="true" />
</d:HasChildrenCode>
<d:JobTitle m:null="true" />
<d:LastName m:null="true" />
<d:New_SomeField>
Some Data
</d:New_SomeField>
</m:properties>
</content>
</entry>
在內存聯系人中創建一個新聯系人,填充ID和要更新的字段,將其添加到上下文中,並讓上下文對其進行更新。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.