14.08.2006, 17:37 | #1 |
Участник
|
Дублированные названия
Задача: как обеспечить проверку имени на наличие в базе при повторном вводе организации? как вариант - то же самое для персон
Что делать, если при этом пользователь не имеет доступа ко всей базе?
__________________
тел. 8(916) 411-4006 |
|
15.08.2006, 09:35 | #2 |
Microsoft CRM Certified Professional
|
Организационные мтоды:
Попробуйте ввести единые правила наимнования организаций, это сократит количество дубликатов. Если, например, контакт есть в базе, но пользователь его не видит, то вполне нормально, что он его создаёт, поскольку ему нужно фиксировать в системе взаимодействия с контактом и иного пути, роме создания дубликата, у него увы нет. Как вариант - представить доступ ко всем контактам, но не показывать действия, произведённые другими пользователями. Другой вариант - если контакты разделены логически правильно, то они не будут повторяться (например, контакт поставщика врядли попадёт в базу продавца, а если и попадёт, то здесь дубликат допустим и даже желателен, поскольку этот контакт выполняет разные роли (например, со стороны поставщика он маркетолог, а для продавцо он покупатель) ). Кроме того целесообразно переодически провдить аудит базы. Если всё-таки проблема дубликатов встала для Вас костью в горле посмотрите на сайте с360.com компонент поиска дубликатов. |
|
17.08.2006, 06:31 | #3 |
Участник
|
А пример из SDK не подходит, по поиску дубликатов? Если использовать credentials пользователя который должен видеть всю базу.
|
|
13.12.2007, 11:45 | #4 |
Заноза в заднице
|
Цитата:
Решил воспользоваться примером из SDK по поиску дубликатов. Сразу скажу: пока не удалось мне заставить его работать. По нескольким причинам. 1. В файле-описании сказано о создании некой библиотеки с помощью командной строки Visual Studio. Бог с ним, что мне не понятно, что это за манипуляции но тем не менее - какая-то библиоткеа с нужным именем у меня создалась, а вот куда её положить - я так и не понял. В readme-файле сказано, что это должна быь некая папка, цитирую: "bin directory under the Microsoft CRM Web directory". То есть получается, что это должна быть bin Web-папка в папке установки системы. Предположительно, это якобы должна быть папка: "Program Files\Microsoft CRM\CRMWeb\bin". У меня такой папки нет в принципе. Я что-то не так понимаю, или надо что-то сделать дополнительное прежде чем воспользоваться SDK? Я скопировал полученную библиотеку в папку bin сервера CRM. 2. Решил я отдебажить используемые компоненты и для начала сгенерил строку вызова, которая генерится на клиенте при сохранении формы организации и выглядит примерно так: "http://crmserver/isv_duplicatedetection/CheckForDuplicateAccount.aspx?name=%D0%90%D1%80%D0%B5", скопировал строку в адресную строку броузера и попытался открыть, но броузер выкинул мне ошибку, по которой следует, что требуется Microsoft.Crm.MetadataService. Ну тут я уже вообще пока не догоняю, где именно там требуется эта хрень (извините за выражение). Подскажите, как отдебажить aspx-страничку и понять, на каком именно месте ей требуется ткнуть ссылку Microsoft.Crm.MetadataService? |
|
13.12.2007, 12:15 | #5 |
Участник
|
В 4.0 сделан хороший механизм поиска дубликатов, может проще дождаться 4.0 и проапгрейдиться? русская должна выйти в Q1 2008
|
|
13.12.2007, 12:56 | #6 |
Заноза в заднице
|
Да уж, в ответ на постановку простейшей задачи предложить руководству купить новую систему или проапгрейдиться - очень профессионально! Да и с задачей хочется разобраться, всё-таки.
|
|
13.12.2007, 15:07 | #7 |
Moderator
|
Вам надо почитать про физиологию веб сервисов. WDSL (Web Service Description Language) - XLM основаный язык описания методов и возможностей веб сервиса. Утилита wsdl.exe позволяет автоматом генерировать в студии класс посредник, котрый предоставляет вам прозрачный интерфейс с сервисом (класс на нужном вам языке). Его-то вы и компилируете и добавляете сборку на сайт CRM, после чего создаете в IIS виртуальную директорию для доступа к этой странице. Всю эту беду можно порделать и другим способом - студия умеет создавать всеб сервисы самостоятельно, но я, если честно, тоже не лучший специалист в этой области.
|
|
13.12.2007, 19:25 | #8 |
Участник
|
Скорее всего CRM покупали с Software Assuarance - это подписка на обновление на 2 года, если с ней, то за лицензии на 4.0 платить не придется. Если мало модификаций делали, то переход вряд ли будет тяжелым.
А переходить рано или поздно на новую версию заставят. |
|
13.12.2007, 21:35 | #9 |
Злыдни
|
>>Задача: как обеспечить проверку имени на наличие в базе при повторном вводе организации?
1. На сохранении делаем запрос через XmlHttpRequest к службе црм, указав имя и пароль пользователя, который имеет право на чтение всех записей. Правда я ни разу этого не делал, не знаю будет ли это работать и любой пользователь при наличии желания сможет этот пароль подсмотреть. 2. Создаем веб-службу, которая будет выполнять проверку наличия дубликата, и делаем запрос к ней. Это 100% будет работать, пароль никто не украдет, но придется научиться писать Web службы. |
|
14.12.2007, 07:24 | #10 |
Moderator
|
Цитата:
Сообщение от Черничкин Станислав
>>Задача: как обеспечить проверку имени на наличие в базе при повторном вводе организации?
1. На сохранении делаем запрос через XmlHttpRequest к службе црм, указав имя и пароль пользователя, который имеет право на чтение всех записей. Правда я ни разу этого не делал, не знаю будет ли это работать и любой пользователь при наличии желания сможет этот пароль подсмотреть. |
|
14.12.2007, 11:09 | #11 |
Заноза в заднице
|
Разобрался я с примером SDK. Правда, пришлось его, родимого слегка модифицировать - создать полноценный проект в VS, подтянуть туда необходимые ссылки, ну и так далее и тому подобное. В процессе столкнулся с другими багами стандартной службы Crmservice. Вот тока незнаю, уместно ли делать разбор кода в ветке об администрировании? Если кому-то необходим положительный опыт разгребания подобных багов - обращайтесь.
|
|
14.12.2007, 11:26 | #12 |
Злыдни
|
Вот эта фигня обращается к службе MS CRM через fetchXml (наиболее удобный метод при работе со службой из скриптов) при смене идентификатора продукта, чтобы подгрузить некоторые дополнительные данные. Она немного громоздкая, но это только потому, что данных много, сам запрос формируется в первых 80 строках дальше идет обезьянкин код. Для твоей задачи нужно:
1. перенести этот код в OnSave (ну это и так понятно), 2. переписать XmlTemplate, чтобы запрашивалась сущность contact или account, возвращался только contact(account)id, а фильтр был по полю name. link-entity стереть. 3. добавить имя и пароль в xmlhttp.open (вот тут самый спорный момент. во-первых я не знаю, будет ли это работать, во-вторых этот пароль сможет украсть любой cool-hacker 4. после выполнения запроса нужно просто проверить наличие узла 'result', если он есть, значит есть записи, удовлетворяющие критерию фильтра, значит говорим пользователю alert('Организация с таким именем уже есть в базе. Как же быть? Наверно, просто приписать к имени "1" и сохранить, как обычно делают в таких ситуациях...') и ставим event.returnValue = false; Последний раз редактировалось Черничкин Станислав; 14.12.2007 в 11:28. |
|
14.12.2007, 14:30 | #13 |
Заноза в заднице
|
Жесткач! Со студией и aspx страничкой всё много проще: и кода на клиентской части чуть и отладку можно осуществить в сторонке и по безопасности никаких проблем. Хотя, для опыта - очень полезное приобретение! Спасибо за пример!
|
|
17.12.2007, 08:57 | #14 |
Moderator
|
Как обратится к веб службе через SOAP все мы знаем, примеры прямо на mscrmservices/2006/CrmService.asmx лежат. А вот где обещаная подмена Credentials? Где явки-пароли которые должны открыть нам доступ к базе от имени привелегированного пользователя?
|
|
17.12.2007, 12:32 | #15 |
Злыдни
|
в xmlhttp.open после false вписываем имя и пароль.
|
|
17.12.2007, 17:39 | #16 |
Moderator
|
Действительно. Не подскажете ссылочку на хороший справочник по xmlHttp и сопряженным темам. Несколько минут искал на сайте Microsoft синтаксис команды open, однако версию с паролем нашел только в примере по работе с аутлук.
|
|
18.12.2007, 12:55 | #18 |
Moderator
|
Спасибо!
|
|