17.07.2007, 11:35 | #1 |
Участник
|
Динамический picklist
Добрый день!
Суть проблемы в следующем. У сущности "Интерес" имеется атрибут ownerid, в котором хранится имя пользователя, создавшего интерес. При этом имеется возможность переназначить интерес кому-то другому. Согласно бизнес-процессу компании, требуется в сущность "Интерес" добавить еще 2 подобных поля - Исполнитель и Руководитель, в которых можно было бы выбрать пользователя. Как я понимаю, системный тип данных owner использовать нельзя, тогда остается только picklist. Подскажите, как динамически заполнить Picklist тменами пользователей, заведенных в системе. |
|
17.07.2007, 13:09 | #2 |
Участник
|
Вам нужно через объект XMLHttpRequest на событии onLoad обращаться к сторонней aspx странице или веб сервису которые вернут вам список пользователей. А дальше заполняете им список.
пример с веб страницей Валюты в CRM пример с веб сервисом Динамическое заполнение из выбранного атрибута lookup |
|
17.07.2007, 16:07 | #3 |
Участник
|
Цитата:
Сообщение от sam
Вам нужно через объект XMLHttpRequest на событии onLoad обращаться к сторонней aspx странице или веб сервису которые вернут вам список пользователей. А дальше заполняете им список.
пример с веб страницей Валюты в CRM пример с веб сервисом Динамическое заполнение из выбранного атрибута lookup Код: using System; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] publicclassService : System.Web.Services.WebService { public Service () { //Uncomment the following line if using designed components //InitializeComponent(); } [WebMethod] publicstring GetUsers() { string result = ""; CrmSdk.CrmService srv = new CrmSdk.CrmService(); srv.Credentials = System.Net.CredentialCache.DefaultCredentials; srv.Url = http://crm-test/mscrmservices/2006/crmservice.asmx; CrmSdk.QueryExpression query = new CrmSdk.QueryExpression(); query.EntityName = CrmSdk.EntityName.systemuser.ToString(); CrmSdk.ColumnSet cols = new CrmSdk.ColumnSet(); cols.Attributes = newstring[] {"fullname"}; CrmSdk.OrderExpression order = new CrmSdk.OrderExpression(); order.OrderType = CrmSdk.OrderType.Descending; order.AttributeName = "fullname"; query.ColumnSet = cols; query.Orders = new CrmSdk.OrderExpression[] { order }; CrmSdk.BusinessEntityCollection returned = srv.RetrieveMultiple(query); for (int i = 0; i < returned.BusinessEntities.Length; i++) { CrmSdk.systemuser user = (CrmSdk.systemuser)returned.BusinessEntities[i]; result += user.fullname; result += " "; } return result; } } |
|
18.07.2007, 06:03 | #4 |
Участник
|
Ну используйте какой нибудь сепаратор в строке, в jscript потом делите строку обратно в массив.
Код: string[] usrnames = new string[returned.BusinessEntities.Length] ; for (int i = 0; i < returned.BusinessEntities.Length; i++) usrnames[i] = ((CrmSdk.systemuser)returned.BusinessEntities[i]).fullname; result = string.Join(usrnames); Код: var str = new String(result); var arr = str.split("$"); for(var i=0; i<mar.length; i++) alert(mar[i]); |
|
18.07.2007, 11:07 | #5 |
Участник
|
Что-то у меня метод Join не хочет работать, хотя делаю все в точности как в MSDN. Ну да ладно, сделал объединение ручками. Теперь сервис возвращает вот это:
Код: <?xml version="1.0" encoding="utf-8" ?> <string xmlns="http://tempuri.org/">SYSTEM$Sergey Konnov$INTEGRATION$First name Last name$Eugene Ponomarev$Elena Nasonova$Alexey Velichko$Alexander Balabanov</string> |
|
18.07.2007, 12:23 | #6 |
Участник
|
Вроде сервис работает нормально, но... ответ не приходит от него. в обработчик OnLoad добавил код:
Код: var serverUrl = "http://crm-test"; var serviceLocation = "/MyService.asmx/GetUsers"; var startTag = "<string xmlns=\"http://tempuri.org/\">"; var endTag = "</string>"; var rval = ""; var valueStart = ""; var valueEnd = ""; var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); xmlhttp.open("get", serverUrl + serviceLocation, false); xmlhttp.send(); // Parse the returned XML string. valueStart = xmlhttp.responseXML.xml.indexOf(startTag, valueEnd) + startTag.length; valueEnd = xmlhttp.responseXml.xml.indexOf(endTag, valueEnd+1); rval = xmlhttp.responseXML.xml.substring(valueStart, valueEnd); var str = new String(rval); var arr = str.split("$"); if(str == null) { alert("Нет ответа!"); } alert(xmlhttp.responseXML.xml); |
|
18.07.2007, 13:43 | #7 |
Участник
|
А alert(str) что возвращает?
|
|
18.07.2007, 15:03 | #8 |
Участник
|
Ничего - пустой алерт... Как вообще, правильно интегрировать свою веб-службу в CRM? В IIS что-то нужно настраивать?
При попытке вызвать службу через IE вылезает вот это: Microsoft CRM Unhandled Error Details: Ошибка сервера в приложении '/'. Ошибка синтаксического анализатора Описание: Ошибка при разборе ресурса, требуемого для обслуживания этого запроса. Изучите следующие подробные сведения о данной ошибке разбора и измените исходный файл. Сообщение об ошибке синтаксического анализатора: Не удалось создать тип 'MyService.Service'. Ошибка источника: Строка 1: <%@ WebService Language="C#" CodeBehind="~/bin/App_Code.dll" Class="MyService.Service" %> Исходный файл: c:\inetpub\wwwroot\Service.asmx Строка: 1 Причем отладка в VS2005 проходит совершенно нормально, сервис возвращает то что нужно. Последний раз редактировалось Lithium; 18.07.2007 в 17:33. |
|