Добрый день!

Есть задача: своевременно убирать из списка необработанных звонков те, по которым состоялся разговор. Можно было бы подписаться на событие окончания разговора в cti, но это событие придет только оператору, выполнившему звонок, а у остальные операторы не узнают об этом своевременно.

Было бы замечательно, если бы можно было в разделе "Звонки" подписаться на событие от бизнес-процесса (например), который бы следил за окончанием звонков, и своевременно оповещал бы об этом всех подписавшихся клиентов. Есть ли такая возможность?

Нравится

2 комментария

Иван, здравствуйте!

Есть возможность отправить сообщение из процесса в клиентский модуль с помощью веб сокетов, подробно вопрос рассмотрен в посте.

При реализации добавьте в using процесса Terrasoft.Configuration .

Для обновления наполнения реестра можете воспользоваться this.reloadGridData()

Логвин Андрей Витальевич,

Огромное спасибо!

Показать все комментарии

Компонент ITextDataControl не видит нажатой клавиши Enter в событие KeyPress. Окно то же не видит в событие KeyPress нажатого Enter. Зато где то в глубинах террасофта есть биндинг нажатия Enter и клика на кнопку OK. Какое событие обрабатывает нажатой клавиши Enter в ITextDataControl? Как не вызывать клик на OK по нажатию Enter в ITextDataControl?

Нравится

5 комментариев

Здравствуйте, Михаил!
О какой версии идет речь?
Я проверил на 3.4.0.96 - обработчик срабатывает:

Здесь можно посмотреть коды клавиш.

3.4.0.141 Вы Enter жали в контроле ITextDataControl? Например в IMemoDataControl у меня работает KeyPress уровня форма.

Михаил, действительно, не на том контроле пробовал.
Для решения задачи используйте событие "OnKeyDown" или "OnKeyUp". Чтобы не срабатывала кнопка "Ок" в свойствах кнопки установите "IsDefault" = false.

Спасибо.
Наконец то вернулся к задаче. Да в KeyDown Enter отрабатывает, а вот Tab нет? В принципе через событие OnExit я получил, почти тот же эффект, что и от Tab, но это несколько не то.

Михаил - обработчик нажатия Tab вроде бы вообще заложен в Windows, поэтому сомневаюсь, что можно будет переопределить на что-то свое.
На OnExit, думаю, подходящий вариант.

Показать все комментарии

Необходимо добавить колонки в таблицу в "гриде" карточки редактирования "Выбор 'Платежные реквизиты'" (сейчас только две колонки), которая открывается по щелчку левой кнопкой мыши на объекте LookupDateControl пользовательской ("кастомной") карточки редактирования.

Не могу найти соответствующий обработчик события.

Не могу найти саму форму "Выбор 'Платежные реквизиты'", которая открывается.

Нравится

3 комментария

"Алейник Алексей Вадимович" написал:Не могу найти саму форму "Выбор 'Платежные реквизиты'"

Потому что там наверняка используется wnd_SelectData
Чтобы отобразились какие-то другие колонки - установите для них признак "Колонка для отображения" в сервисе датасета.

Спасибо, Вы были правы.

Однако, всё равно интересно где указывается обработчик события, которое открывает форму wnd_SelectData по щелчку левой кнопкой мыши на объекте LookupDateControl?

окно указывается в свойстве SelectWindowUSI для элемента ILookupDataControl
SDK

Показать все комментарии

Здравствуйте!
Помогите, пожалуйста, решить проблему.

Пытаюсь сделать так: при изменении ответственного задачи, проверяется, не в отпуске ли новоустановленный ответственный, и если он в отпуске - вместо него подставляется заместитель.

Как пытаюсь реализовать: в обработчике dlDataOnDatasetDataChange(DataField) на изменение поля OwnerID

В итоге не работает.

...
switch (DataFieldName){
                case ('OwnerID'):
                        var TaskDataset = dlData.Dataset;
                        var OwnerID     = dlData.Dataset.Values('OwnerID');
                        var NewOwner = getAssistanteIfExist(OwnerID);
                        dlData.Dataset('OwnerID') = NewOwnerID; // не присваивает!!!
                        //edtOwner.DataField.Value = NewOwnerID; // так тоже не присваивает
                        //DataField.Value = OwnerID; // и так не присваивает
                        break;
...

NewOwnerID получаю правильный.
При дебаге показывает, что оно, вроде бы, присваивается, но при этом в лукапконтроле не отображается.

Подскажите, где копать ошибку.

Нравится

6 комментариев

Ошибка вызвана тем, что заполняя значение поля "Ответственный" ('OwnerID') в блоке case ('OwnerID') Вы вызываете зацикливание.
Попробуйте модифицировать Ваш код подобным образом:

case ('OwnerID'):		
 if (TaskEdit.EditOwner != true) {  
	var OwnerID = dlData.Dataset.Values('OwnerID');
        var NewOwnerID = getAssistanteIfExist(OwnerID);                        
              if (!IsEmptyValue(NewOwnerID)){
                           TaskEdit.EditOwner = true;
                            edtOwner.DataField.Value = NewOwnerID; 
                            return;
             }
    	} 
 TaskEdit.EditOwner = false; 
 break;
switch (DataFieldName){
   case ('OwnerID'):
   var OwnerID     = dlData.Dataset('OwnerID');
   var NewOwner = getAssistanteIfExist(OwnerID);
   if (!IsEmptyValue(NewOwnerID)){
      dlData.Dataset.DisableEvents();
      dlData.Dataset('OwnerID') = NewOwnerID;
      dlData.Dataset.EnableEvents();
   }
   break;

или так:)

"Бондарь Наталия" написал:Ошибка вызвана тем, что заполняя значение поля "Ответственный" ('OwnerID') в блоке case ('OwnerID') Вы вызываете зацикливание.

Увы, ваши варианты не очень подходят, поскольку надо проверить, не находится ли новоявленный заместитель сам в отпуске.
Немного исправил, зацикливание не при чём. При таком коде зацикливания не происходит, но значение не сохраняется.

...
switch (DataFieldName){
                case ('OwnerID'): 
                        var TaskDataset = dlData.Dataset;
                        var OwnerID     = dlData.Dataset.Values('OwnerID');
                        if(IsNotActive(OwnerID))
                        {
                                                var NewOwner = getAssistanteIfExist(OwnerID);
                                                dlData.Dataset('OwnerID') = NewOwnerID; // не присваивает!!!
                        }
                        break;
...

"netlander" написал:NewOwnerID получаю правильный.
При дебаге показывает, что оно, вроде бы, присваивается, но при этом в лукапконтроле не отображается.

Если NewOwnerID получаете правильно и его значение присваивается полю 'OwnerID', но не отображается, следовательно значение поля перезаписывается в каком-то другом месте/событии.
Попробуйте пройтись отладчиком и отловить в какой момент перезаписывается значение поля 'OwnerID'.

Новое значение просто не записывается.
Попробуйте вот такой код:

скрипт scr_TaskEdit

...
switch (DataFieldName){
                case ('OwnerID'): 
                              dlData.Dataset.DisableEvents();
                              dlData.Dataset('OwnerID') = <ID ЛЮБОГО КОНТАКТА>;
                              dlData.Dataset.EnableEvents();
                              break;
}
...

Значение тупо не меняется.
Хххеееелп.

Может вам подойдет вариант замены ответственного не в момент его простановки, а в момент перед сохранением записи на событие OnBeforePost?

Показать все комментарии

Здравствуйте, господа.

Подскажите, пожалуйста, как в скрипте для поля датасета можно на лету выставить атрибут "Обязательное поле".
Увы, сам не смог найти имя свойства, которое за это отвечает.

Заранее благодарен.

Нравится

2 комментария
    Dataset.DataFields.ItemsByName('AccountID').IsRequired = true;

Спасибо, Валерий.
У меня в конце рабочего дня голова не варит уже совсем.

Показать все комментарии