26.12.2011, 12:32 | #1 |
Участник
|
Запрос FetchXML
Здравствуйте.
Ребята, подскажите, пожалуйста. Мне надо выполнить запрос по организациям удовлетворяющий какому-то условию. У меня есть код который работает т.е выводит результат на консоль, а мне необходимо чтоб создавался представление, но не создается. Подскажите что я делаю не так. Заранее спасибо !! =============================================== using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel.Description; using System.Net; using Microsoft.Xrm.Sdk.Client; using Microsoft.Xrm.Sdk; namespace teset { class Fetch { static void Main(string[] args) { // userquery q = new userquery(); ClientCredentials Credentials = new ClientCredentials(); Credentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials; //This URL needs to be updated to match the servername and Organization for the environment. Uri OrganizationUri = new Uri("http://192.168.57.50:80/NoName/XRMServices/2011/Organization.svc"); Uri HomeRealmUri = null; using (Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy serviceProxy = new Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy(OrganizationUri, HomeRealmUri, Credentials, null)) { serviceProxy.ServiceConfiguration.CurrentServiceEndpoint.Behaviors.Add(new ProxyTypesBehavior()); IOrganizationService service = (IOrganizationService)serviceProxy; //fetch example string contactt = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'> <entity name='account'> <attribute name='name' /> <attribute name='primarycontactid' /> <attribute name='telephone1' /> <attribute name='accountid' /> <order attribute='name' descending='false' /> <filter type='and'> <condition attribute='name' operator='eq' value='qwe' /> </filter> </entity> </fetch>"; // EntityCollection contact_count_result = service.RetrieveMultiple(new Microsoft.Xrm.Sdk.Query.FetchExpression(opportunity_count)); EntityCollection result = service.RetrieveMultiple(new Microsoft.Xrm.Sdk.Query.FetchExpression(contactt)); //Create loop of the result foreach (var c in result.Entities){ System.Console.WriteLine(c.Attributes["name"]); System.Console.WriteLine(c.Attributes["accountid"]); } //end fetch example} Console.WriteLine("====================="); Console.ReadLine(); //This code will clear the textboxes after the contact is created. } } } } |
|
26.12.2011, 12:55 | #2 |
Moderator
|
Думаю что вы сами ответили на свой вопрос - надо сохранить представление в базе, а не выводить на консоль результат опроса:
Код: SavedQuery view = new SavedQuery(); view.Name = "qwe accounts"; view.FetchXML = contactt; serviceProxy.Create(view); Для создания представлений такой вот сложности, проще использовать стандартные средства. Так же вам нужно будет задать LayoutXML, чтобы представление корректно работало. Словом, совет один: создайте представление с пустым запросом и нужными полями, после чего обновите его нужным FetchXML при помощи метода Update.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
26.12.2011, 17:00 | #3 |
Участник
|
VStudio выдает ошибку что "SavedQuery" не найден.
Хотя включил библиотеки. |
|
26.12.2011, 18:40 | #4 |
Moderator
|
Думаю нужно разыскать в каком он неймспейсе. Если его нет в стандартной сборке, можно подключить сервис референс, или сгенерировать этот класс при помощи утилиты в составе SDK (CrmSvcUtil.exe ).
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
26.12.2011, 18:45 | #5 |
Moderator
|
А вообще замечательный пример работы с представлениями есть в \sdk\samplecode\cs\customizations\views\workwithviews
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
|
За это сообщение автора поблагодарили: Aliwer (1). |
28.12.2011, 00:05 | #6 |
Участник
|
Подскажите пожалуйста, из за чего ошибка.
Компилятору не нравиться последняя строка -> proxy.Create(sq); и выдает такую ошибку: An unhandled exception of type 'System.ServiceModel.FaultException`1' occurred in Microsoft.Xrm.Sdk.dll Additional information: The expected returnedTypeCode 3 did not match the return type 1 on fetchXml Вот код: X++: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; using System.ServiceModel.Description; using System.Runtime.Serialization; // These namespaces are found in the Microsoft.Xrm.Sdk.dll assembly // found in the SDK\bin folder. using Microsoft.Xrm.Sdk; using Microsoft.Xrm.Sdk.Client; using Microsoft.Xrm.Sdk.Query; namespace CreateView { class Program { static void Main(string[] args) { // Подключаемся к CRM ClientCredentials credentials = new ClientCredentials(); credentials.Windows.ClientCredential = new System.Net.NetworkCredential("Администратор", "12345", "crm.dev"); Uri uri = new Uri("http://192.168.57.50:80/NoName/XRMServices/2011/Organization.svc"); OrganizationServiceProxy proxy = new OrganizationServiceProxy(uri, null, credentials, null); proxy.ServiceConfiguration.CurrentServiceEndpoint.Behaviors.Add(new ProxyTypesBehavior()); IOrganizationService service = (IOrganizationService)proxy; // Create the view. string layoutXml = @"<grid name='resultset' object='1' jump='accountid' select='1' preview='1' icon='1'> <row name='result' id='accountid'> <cell name='name' width='150' /> <cell name='customerid' width='150' /> <cell name='primarycontactid' width='150' /> <cell name='telephone1' width='150' /> </row> </grid>"; //fetch example string fetchXml = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'> <entity name='account'> <attribute name='name' /> <attribute name='primarycontactid' /> <attribute name='telephone1' /> <attribute name='accountid' /> <order attribute='name' descending='false' /> <filter type='and'> <condition attribute='name' operator='eq' value='qwe' /> </filter> </entity> </fetch>"; SavedQuery sq = new SavedQuery(); sq.Name = "A New Custom Public View"; sq.Description = "A Saved Query created in code"; sq.ReturnedTypeCode = "opportunity"; sq.FetchXml = fetchXml; sq.LayoutXml = layoutXml; sq.QueryType = 0; Console.WriteLine("A new view"); proxy.Create(sq); } } } |
|
28.12.2011, 00:40 | #7 |
Участник
|
У Вас fetch и layout для сущности
SavedQuery для Надо бы определиться
__________________
Читайте SDK!!! |
|
|
За это сообщение автора поблагодарили: Aliwer (1). |