簡體   English   中英

使用LINQ更新CRM 2011中的記錄

[英]Update Records in CRM 2011 using LINQ

我正在嘗試使用LINQ更新OpportunitySet中的記錄。 現在,我正在拉下所有數據,它們正被數據綁定到網格中的字段。 這是我到目前為止的內容:

        Uri organizationUri = new Uri("http://servername/XRMServices/2011/Organization.svc");
    Uri homeRealmUri = null;
    ClientCredentials credentials = new ClientCredentials();
    credentials.Windows.ClientCredential = new System.Net.NetworkCredential("user", "pass", "domain");
    OrganizationServiceProxy orgProxy = new OrganizationServiceProxy(organizationUri, homeRealmUri, credentials, null);
    // Get the IOrganizationService
    IOrganizationService orgService = (IOrganizationService)orgProxy;
    //Get OrganizationServiceContext -the organization service context class implements the IQueryable interface and
    //a .NET Language-Integrated Query (LINQ) query provider so we can write LINQ queries against Microsoft Dynamics CRM data.
    OrganizationServiceContext orgServiceContext = new OrganizationServiceContext(orgService);


    var linqQuery = (from r in orgServiceContext.CreateQuery("opportunity")
                     join a in orgServiceContext.CreateQuery("account") on ((EntityReference)r["accountid"]).Id equals a["accountid"]
                     join c in orgServiceContext.CreateQuery("contact") on ((EntityReference)r["new_contact"]).Id equals c["contactid"]
                     where ((EntityReference)r["new_channelpartner"]).Id.Equals(new Guid("c55c2e09-a3be-e011-8b2e-00505691002b"))
                     select new
                     {
                         OpportunityId = !r.Contains("opportunityid") ? string.Empty : r["opportunityid"],
                         CustomerId = !r.Contains("customerid") ? string.Empty : ((EntityReference)r["customerid"]).Name,
                         Priority = !r.Contains("opportunityratingcode") ? string.Empty : r.FormattedValues["opportunityratingcode"],
                         ContactName = !r.Contains("new_contact") ? string.Empty : ((EntityReference)r["new_contact"]).Name,
                         Source = !r.Contains("new_source") ? string.Empty : r["new_source"],
                         CreatedOn = !r.Contains("createdon") ? string.Empty : r["createdon"],
                         State = !a.Contains("address1_stateorprovince") ? string.Empty : a["address1_stateorprovince"],
                         Zip = !a.Contains("address1_postalcode") ? string.Empty : a["address1_postalcode"],
                         Eval = !r.Contains("new_colderevaluation") ? string.Empty : r.FormattedValues["new_colderevaluation"],
                         EvalVal = !r.Contains("new_colderevaluation") ? string.Empty :((OptionSetValue)r["new_colderevaluation"]).Value.ToString(),
                         DistributorName = !r.Contains("new_channelpartner") ? string.Empty : ((EntityReference)r["new_channelpartner"]).Name,
                         ContactStreetAddress = !c.Contains("address1_line1") ? string.Empty : c["address1_line1"],
                         ContactCity = !c.Contains("address1_city") ? string.Empty : c["address1_city"],
                         ContactState = !c.Contains("address1_stateorprovince") ? string.Empty : c["address1_stateorprovince"],
                         ContactZip = !c.Contains("address1_postalcode") ? string.Empty : c["address1_postalcode"],
                         ContactPhone = !c.Contains("telephone1") ? string.Empty : c["telephone1"],
                         ContactMobilePhone = !c.Contains("mobilephone") ? string.Empty : c["mobilephone"],
                         ContactEmail = !c.Contains("emailaddress1") ? string.Empty : c["emailaddress1"],
                         Notes = !r.Contains("new_rsmnotes") ? string.Empty : r["new_rsmnotes"],
                         EstimatedCloseDate = !r.Contains("estimatedclosedate") ? string.Empty : r["estimatedclosedate"],
                         MaturityValue = !r.Contains("estimatedvalue") ? string.Empty : ((Money)r["estimatedvalue"]).Value.ToString()
                     });

    grdLeadList.DataSource = linqQuery;

    grdLeadList.DataBind();

這段代碼將我的所有信息下拉,然后使用類似以下內容的方法將其分配給控件:

<asp:TestBox ID="Label1" runat="server" Text='<%# DataBinder.Eval( Container, "DataItem.ContactEmail" ) %>' />

但是現在我正在嘗試這樣做,因此當您單擊保存按鈕時,它將在文本框中保存所有更改。 我將如何使用LINQ做到這一點?

謝謝!

如果您還不了解某些體系結構,建議您使用MVVM之類的成熟模式,或者看看Microsoft的MVC項目。 您正在使用Linq生成的匿名類與UI進行通信,因此UI與您的數據訪問層之間存在直接鏈接。 換句話說,沒有關注點分離。 這是很成問題的。 例如,您在哪里編程驗證邏輯? 這可能會發展成為具有大量復制和粘貼程序的大型整體程序。

總是需要大量的努力和學習,因此需要花費時間來建立基本的體系結構,但是推遲它最終將耗費更多的時間並且肯定會減少樂趣! 因此,我希望時間和先決條件能讓您走這條路。 在我的團隊中,即使對於試點項目,我也鼓勵人們總是首先決定體系結構,因為試點項目具有發展為您永遠不會擺脫的討厭的持久性項目的方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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