Обновление записей в CRM 2011 с использованием LINQ - PullRequest
0 голосов
/ 28 августа 2011

Я пытаюсь обновить записи в OpportunitySet с помощью LINQ.Прямо сейчас я собираю все данные, и они привязываются к полям таблицы.Это то, что у меня есть:

        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?

Спасибо!

1 Ответ

1 голос
/ 29 августа 2011

Если вы еще не привязаны к какой-либо архитектуре, я бы посоветовал вам использовать проверенный шаблон, такой как MVVM, или взглянуть на проект Microsoft MVC. Вы используете анонимный класс, сгенерированный Linq, для взаимодействия с пользовательским интерфейсом, поэтому существует прямая связь между пользовательским интерфейсом и уровнем доступа к данным. Другими словами, нет разделения интересов. Это очень проблематично. Например, где вы программируете свою логику проверки? Вероятно, это превратится в большие монолиты с большим количеством программ копирования и вставки.

Всегда требуется много усилий и обучения и, следовательно, времени на настройку базовой архитектуры, но ее откладывание в конечном итоге будет гораздо более трудоемким и, конечно, менее веселым! Поэтому я надеюсь, что время и предпосылки позволят вам пойти по этому пути. В моей команде, даже для пилотных проектов, я призываю людей всегда в первую очередь выбирать архитектуру, потому что пилотные проекты позволяют превратиться в неприятные постоянные проекты, от которых вы никогда не избавитесь.

...