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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 13.03.2009, 17:32   #1  
BSvetlana is offline
BSvetlana
Участник
 
27 / 10 (1) +
Регистрация: 13.03.2009
Формат времени
Здравствуйте!
Кто-нибудь знает, как изменить заполнение времени? Мне нужно, чтобы вместо 00:00 00:30 01:00 01:30 и т.д. получились только целочисленные значения с 9 до 18. Спасибо
Старый 14.03.2009, 10: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
Я думаю надо использовать Java Script. Контрол времени - обычный пиклист. Надо просто удалить из него соответствующие опции в событии OnLoad формы.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 15.03.2009, 19:22   #3  
Dissident is offline
Dissident
Вопрошающий
Аватар для Dissident
 
210 / 24 (1) +++
Регистрация: 07.06.2006
Адрес: Тюмень
Если речь идет о полях типа DateTime ( вторая часть поля, отвечающая за время), то как вариант:

1) во всех формах необходимо для этих полей установить режим отображения "только дата"

2) для каждого объекта создать атрибут типа picklist, минимальное значение для него установить 9, максимальное соответственно 18.

3) Опубликовать его на всех формах и представлениях для нужных объектов

4) На загрузку формы повешать JavaScript, который бы при создании новой записи устанавливал значение данного атрибута равное кол-ву полных часов (если речь идет о рабочем времени с 9 до 18)

4 пункт нужен для того чтобы система САМА могла правильно сотрировать данные при отображении в пердставлениях, при выбранной сортировке по полю Дата

5) на событие onChange созданного атрибута повешать скрипт (для корректности поведения записей определенного типа в системе) который бы устанавливал время в поле DateTime соответственно значению Вашего атрибута (09:00... 18:00)
__________________
Победивший противника - силен, победивший себя - величественнен
За это сообщение автора поблагодарили: BSvetlana (1).
Старый 16.03.2009, 09:32   #4  
BSvetlana is offline
BSvetlana
Участник
 
27 / 10 (1) +
Регистрация: 13.03.2009
Спасибо, Dissident!
Интересное решение. Мне нравится. Честно
Старый 16.03.2009, 10:09   #5  
Dissident is offline
Dissident
Вопрошающий
Аватар для Dissident
 
210 / 24 (1) +++
Регистрация: 07.06.2006
Адрес: Тюмень
Цитата:
Сообщение от BSvetlana Посмотреть сообщение
Спасибо, Dissident!
Интересное решение. Мне нравится. Честно
да чего уж там... стандартное решение вообще-то :-) подбную вещь мы применяли еще тогда, когда интегрировали CRM и Галактику-ERP. Как раз в части синхронизации полей типа "DateTime" CRM с полями типа Date и Time в галактике... так что все новое - это хорошщо забытое старое
__________________
Победивший противника - силен, победивший себя - величественнен
Старый 16.03.2009, 19:14   #6  
Гуревич Денис is offline
Гуревич Денис
Участник
Лучший по профессии 2009
 
228 / 67 (3) ++++
Регистрация: 04.08.2008
Адрес: Москва
Цитата:
Сообщение от Артем Enot Грунин Посмотреть сообщение
Я думаю надо использовать Java Script. Контрол времени - обычный пиклист. Надо просто удалить из него соответствующие опции в событии OnLoad формы.
Ну там не совсем обычный пиклист...
Вообщем, взяв за основу код отсюда http://www.stunnware.com/crm2/topic.aspx?id=JS7, можно состряпать вот такой код для поля "Дата начала" в Задаче (вставляется в OnLoad):
Код:
var timeField = crmForm.all.scheduledstart.all.time;
timeField.allowValueEdit = false;
var tables = timeField.getElementsByTagName("table");
if ((tables != null) && (tables.length > 0)) {
            var table = tables[1];
            while (table.firstChild != null) {
                table.removeChild(table.firstChild);
            }
            for (hour = 9; hour <= 18; hour++) {
                var row = table.insertRow();
                var cell = row.insertCell();
                var time = hour + ":00";
                cell.setAttribute("val", time);
                cell.innerText = time;
            }
}

Останется маленькая неприятность - когда значение в поле не указано, то после выбора даты время будет указано "0:00". Но это можно вылечить, вставив в OnChange нашего поля такой код:
Код:
if(crmForm.all.scheduledstart.DataValue != null) {
  if(crmForm.all.scheduledstart.DataValue.getHours() == 0) {
    crmForm.all.scheduledstart.DataValue = crmForm.all.scheduledstart.DataValue.setHours(9);
  }
}
За это сообщение автора поблагодарили: Dissident (1), Артем Enot Грунин (4).
Старый 16.03.2009, 22:07   #7  
Артем 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
Да я тоже уже убедился, что там, к сожалению, не простой пиклист. Моих знаний DOM не хватило, что бы сделать универсальный код. Идея сотояла в том, чтобы просто изменить innerHtml элемента table, но данный подход значительно лучше. Спасибо. Осталось параметризовать и пользоваться!
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
Старый 20.03.2009, 11:42   #8  
BSvetlana is offline
BSvetlana
Участник
 
27 / 10 (1) +
Регистрация: 13.03.2009
Решение было следующим:

var timeField = crmForm.all.scheduledstart.all.time;
timeField.allowValueEdit = false;
var tables = timeField.getElementsByTagName("table");
if ((tables != null) && (tables.length > 0)) {
var table = tables[1];
while (table.firstChild != null) {
table.removeChild(table.firstChild);
}
for (hour = 9; hour <= 18; hour++) {
var row = table.insertRow();
var cell = row.insertCell();
var time = hour + ":00";
cell.setAttribute("val", time);
cell.innerText = time;
}
}

Но после добавления своего кода и скрытия различных кнопок перестали работать бизнес правила на завершение задач
Старый 20.03.2009, 12:41   #9  
Артем 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
А чего вы хотели, если теперь никто не может нажать кнопку "сохранить как завершенную"? Бизнесс правила никак не связаны с кастомизациями формы. Они выполняются на сервере, код формы - на клиенте. Очевидно, что у вас перестало происходить само событие.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия.

MS Certified Dirty Magic Professional
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Учёт рабочего времени сотрудников в MSCRM 4.0 Antonf Dynamics CRM: Функционал 1 12.01.2009 17:03
Формат документа "Задание на разработку" Paolo Dynamics CRM: Прочие вопросы 0 07.09.2006 11:49
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

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

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

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