AXForum  
Вернуться   AXForum > Microsoft Dynamics CRM > Dynamics CRM: Разработка
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 26.11.2007, 16:25   #1  
Likefire is offline
Likefire
Заноза в заднице
Аватар для Likefire
MCBMSS
Лучший по профессии 2009
 
547 / 50 (3) ++++
Регистрация: 22.10.2007
Адрес: Москва
Записей в блоге: 1
Простая задача нумерации элементов
В связи с особенностями ведения документооброта компании есть потребность назначения уникального номера каждому клиенту, будь-то организация либо контакт. Значит, мыслю так, что нужно создать новый объект "Нумератор", в атрибуте которого будет храниться значение номера. После присвоения номера текущее значение изменяется и сохраняется.
Условия такие, а вот с реализацией что-то не очень... то есть пока совсем никак. К тому же есть сомнения по поводу обсепечения уникальности: ну например, есть опасность, что два пользователя одновременно прочитают один номер и присвоят его разным элементам.
Вопросы собсна такие: 1. Как вообще подходить к решению подобных задач?
2. Если возможно - приведите пример скрипта, который в момент открытия формы нового элемента получает значение номера из другого объекта?
3. Как избежать дублирования и обеспечить такое чтение объекта пользователем, в момент которого остальные пользователи запросив это значение, смогут прочесть лишь после того, как первый пользователь запишет новое значение?
Старый 27.11.2007, 08:16   #2  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Думаю, что объект тут точно не нужен. Задача получения уникального ключа записи до момента ее сохранения в БД записи, во всех субд решается созданием Sequence, но Microsoft и тут идет своей дорогой упрямо напирая на отсуствие такой необходимости. Сиквенс - просто счетчик. Читаешь его - он возвращает текущее значение и тут же перещелкивается на новое. Счетчик нетранзкционен и используется в монопольном редиме (один пользователь за раз) - короче то что доктор прописал! Жаль что в случае с Microsoft SQL Server он отсутствует. Есть только Work Around:
http://blogs.msdn.com/sqlcat/archive...ce-number.aspx
Мое видение: на событие загрузки формы ставим скрипт который получает номер такого "псевдо сиквенса" и вставляет его в поле доступное только для чтения...
Старый 27.11.2007, 14:07   #3  
Lida is offline
Lida
Участник
 
21 / 12 (1) ++
Регистрация: 26.06.2007
Можно использвать preCreateCallout, который получит последний номер, прибавит 1 и присвоит номер. Где-то проходила информация от майкрософт, что callout блокирует работу crm до своего выполнения, т.е. уникальность обеспечивается.
Старый 27.11.2007, 15:16   #4  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
А где preCreateCallout возьмет последний номер? Предлогаете каждый раз перебирать все записи чтобы найти его значение? В данном случае просто взять количество записей не прокатит, так как необходима уникальность: сдалали 5 записей, 3ю удалили, осталось 4; при сохранении новой две последнии окажутся 5ыми.
Кроме того, я так понял, необходимо сразу же показать пользователю какой номер будет у нового клиента?
Вообще говоря странно что разработчики не поделились с нами этой функциональностью, так как подобный механизм уже работает при создании заказов и статей забы знаний - там мы до сохранения объекта видим какой код он получит.
Старый 27.11.2007, 20:48   #5  
Lida is offline
Lida
Участник
 
21 / 12 (1) ++
Регистрация: 26.06.2007
Нет, зачем же перебирать. Можно использовать дополнительную сущность, запись которой хранит последний номер.
Если нужно сразу показывать номер на форме, можно попробовать вызвать свою страницу, которая произведет те же действия, что и callout, из скрипта с помощью ActiveX объекта
Код:
var oXmlDoc = new ActiveXObject("Microsoft.XMLDOM");
oXmlDoc.async = false;
oXmlDoc.load("url страницы");
.....
Только это ненадежно, скрипт можно отключить.
Старый 28.11.2007, 08:23   #6  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Складывается впечатление, что нам эта тема уже интереснее чем ее создателю. Где значение хранить не важно, в общем-то. Интересно как это реализовано в самой CRM и можно ли ей "упасть на хвост"? Есть же настройки даже - префиксы счеткика заказов, статей, еще чего-то там. Где-то в системе должна быть закодирована эта функциональность!
Старый 29.11.2007, 14:59   #7  
sam is offline
sam
Участник
 
160 / 25 (1) +++
Регистрация: 04.08.2003
Адрес: Красноярск
Вообще то там на конце номера для заказов\ счетов\ и т.д. случайно комбинируемая последовательность букв, поэтому думаю они эту проблему не решили : ).
Старый 29.11.2007, 15:53   #8  
Артем Enot Грунин is offline
Артем Enot Грунин
Moderator
Аватар для Артем Enot Грунин
MCBMSS
Злыдни
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,912 / 623 (28) +++++++
Регистрация: 16.08.2007
Адрес: Пермь!
Записей в блоге: 151
Это да. А еще я заметил, что до момента сохранения заказа код-то и не показывают! Так что, думаю, можно особо и не париться - берем дату создания: new Date().dateVal - количество милисекунд в текущей дате и не паримся.
Конечно, остается вероятность дублирования, но она исчезающе мала.
Старый 03.12.2007, 16:20   #9  
Likefire is offline
Likefire
Заноза в заднице
Аватар для Likefire
MCBMSS
Лучший по профессии 2009
 
547 / 50 (3) ++++
Регистрация: 22.10.2007
Адрес: Москва
Записей в блоге: 1
Цитата:
Сообщение от Enot Poloskun Посмотреть сообщение
Складывается впечатление, что нам эта тема уже интереснее чем ее создателю.
Это только впечатление. ;-) На самом деле тема очень интересна и я даже нашел один примерчик в книге. Я попробую, как он вообще работает и тогда обязательно отчитаюсь, как и чего.
Старый 14.03.2008, 07:52   #10  
ShurikEv is offline
ShurikEv
CRM
 
213 / 28 (1) +++
Регистрация: 25.04.2006
Адрес: г. Новосибирск
Likefire
Ну и как примерчик?
За это сообщение автора поблагодарили: Likefire (1).
Старый 18.03.2008, 15:19   #11  
Likefire is offline
Likefire
Заноза в заднице
Аватар для Likefire
MCBMSS
Лучший по профессии 2009
 
547 / 50 (3) ++++
Регистрация: 22.10.2007
Адрес: Москва
Записей в блоге: 1
Цитата:
Сообщение от ShurikEv Посмотреть сообщение
Likefire
Ну и как примерчик?
Вот: Разбор кода примеров SDK, а также разных прочих
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков!
За это сообщение автора поблагодарили: ShurikEv (1).
Старый 18.03.2008, 15:49   #12  
ShurikEv is offline
ShurikEv
CRM
 
213 / 28 (1) +++
Регистрация: 25.04.2006
Адрес: г. Новосибирск
Пример познователен. В виду того, что callout'ы синхронны, действительно можно так делать. У Вас реально прошит GUID пользователя, от имени которого необходимо выполнить веб-сервис (CallerId)? Не совсем правильно, но не в этом суть, т.к. это легко обходится
Старый 18.03.2008, 16:25   #13  
Likefire is offline
Likefire
Заноза в заднице
Аватар для Likefire
MCBMSS
Лучший по профессии 2009
 
547 / 50 (3) ++++
Регистрация: 22.10.2007
Адрес: Москва
Записей в блоге: 1
Ну в книге пример построен таким образом, и кажется в предисловии я должен был отметить, что (цитата): "...Данный пример демонстрирует мощь и эффективность метода работы от имени другого пользователя." В моем примере GUID зашит жёстко, но Вы прекрасно знаете методы, как получить нужный Вам (в примере книги, кстати, тоже подставляется конкретный GUID).
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков!
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Регламентная задача Ti1 Dynamics CRM: Разработка 6 06.03.2009 13:11
Повторное создание элементов электронной почты (e-mail) после перезагрузки сервера Likefire Dynamics CRM: Функционал 6 30.01.2009 10:59
Действие типа Задача. Давайте поразмышляем вместе Dissident Dynamics CRM: Функционал 7 26.11.2008 17:11
Создание новых элементов Paolo Dynamics CRM: Разработка 6 25.09.2007 11:46
Есть задача...... Jul_Sol Dynamics CRM: Прочие вопросы 0 19.05.2006 14:37

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 04:43.