簡體   English   中英

通過WCF數據服務僅更新CRM中的一個屬性

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM