Всем привет.

Подскажите, как сделать валидацию полей в inputBox?

Мне нужно сделать проверку на заполненность обязательных полей, как в обычной карточке, и соответственно не давать закрыть окно, если не все обязательные поля заполнены.

Нравится

1 комментарий

Добрый вечер.

При нажатии на кнопку в «inputBox» срабатывает метод «onButtonClick» с класса «Terrasoft.MessageBox» (можно посмотреть в all-combined.js) который запускает событие «stateChanged». На него можно подписаться и в своей реализации, например, не скрывать окно если поля не заполнены.

 

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

Добрый день. 

Следуя инструкции на академии добавил действие на страницу карточки.       

getActions: function() {
	var actionMenuItems = this.callParent(arguments);
	actionMenuItems.addItem(this.getButtonMenuItem({
		Type: "Terrasoft.MenuSeparator",
		Caption: ""
	}));
	actionMenuItems.addItem(this.getButtonMenuItem({
		"Caption": {bindTo: "Resources.Strings.SendTTForApprovalCaption"},
		"Tag": "onSendTTForApprovalClick",
		"Enabled": {bindTo: "isSendTTForApprovalEnabled"}
	}));
	return actionMenuItems;
},
isSendTTForApprovalEnabled: function() {
	return !Ext.isEmpty(this.get("Status")) ?
		this.get("Status").value === JSConstants.Change.Status.WritingTTId :
		false;
}

 Также добавил локализируемую  строку и метод, на который биндится свойство enabled, на страницу раздела

isSendTTForApprovalEnabled: function(activeRowId) {
	activeRowId = this.get("ActiveRow");
	var gridData = this.get("GridData");
	var selectedChange = gridData.get(activeRowId);
	var status = selectedChange.get("Status");
	return status.value === JSConstants.Change.Status.WritingTTId;
}

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

 

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

Нравится

1 комментарий

Наш програмный продукт интегрирован с BpmOnline.



Для получения сущностей, мы используем ссылки:

Для лидов -  /0/ServiceModel/EntityDataService.svc/LeadCollection

Для контактов - /0/ServiceModel/EntityDataService.svc/ContactCollection



Проблема в том что мы не можем создать сущность если пользователь добавил кастомные обязательные поля.

Как получить список обязательных полей и их типы по Контакту, Лиду? Можете отправить ссылку где описан такой сервис?



Спасибо

 

Нравится

1 комментарий

Юрий, через OData такой список получить не удастся. Максимум, при попытке создания записи без обязательных полей будет отображена ошибка с указанием заголовка незаполненного поля, правда не непосредственно названия поля.

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

Всем привет, подскажите как решить задачу:

Воронка строится на основании кейсов конкретного раздела, а мне нужно построить воронку продаж по 3-м сущностям: лид(его стадии)+контрагент(его стадии)+продажа(ее стадии).

Подскажите, можно ли это реализовать?

Нравится

1 комментарий

Добрый день, Роман!

Да, данный функционал сквозной воронки (начиная с лида) уже реализуется в системе и будет готов в релизе к концу этого лета. Вы можете более подробно описать свой кейс и мы учтем пожелание при данной реализации в рамках уже существующей проблемы 4662 (например, какие стадии в контрагенте вы делаете? вы хотите учитывать лиды, которые квалифицируются в контрагенты или лиды, как потребности по определенной базе контрагентов, а потом уже сколько этих потребностей переросло в продажи?).

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

Здравствуйте! Может кто-нибудь объяснить почему не работают следующие команды в конфигураторе:

- Сгенерировать требующих генерации

- Обновить для требующих обновления (Структура БД)

- Установить для требующих установки

И я уверен что они не работают, "Обновить для требующих обновления" уж точно, т.к. начал через пару секунд вышло сообщение о том, что выполнено успешно, НО в БД структура не обновилась, а обновилась оно после того команды "Обновить для выбранных", на выбранном объекте. Неужели нужно каждый объект в ручную выделять и обновлять?



P.S.: пакеты были установлены, точнее обновлены при помощи встроенной утилиты "Установка приложений", и она автоматически почему-то не обновила структуру

Нравится

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

Добрый день!

В коробке функционал этих команд работает. Попробуйте вывести колонку "Текст последней ошибки", вбить в поиск "%" и отсортировать по этой колонке - есть ли в конфигурации объекты с ошибками?

Антон Малий,

нет таких объектов

На community такой вопрос решить сложно. В коробке данный функционал работает корректно. Если вопрос актуален - создайте обращение в поддержку и предоставьте пакеты и копию БД до накатки.

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

Всем доброго времени суток. Версия 7.11.

Можно ли реализовать подобное:

Изображение удалено.

То есть всплывающую подсказку, вроде стандартного title, всплывающего по наводке на заголовок колонки. В идеале ещё по наводке на строку "всплывать" поле Name.

Требуется в связи с большим количеством необходимых колонок - некоторые заголовки не заметны за многоточиями.

Нравится

1 комментарий

Краткая инструкция (как делал я всплывающие окна в редактируемом гриде на проекте):

1) Запилить свой грид с  ̶б̶л̶е̶к̶д̶ж̶е̶к̶о̶м̶  mouseOver-ивентами. Которые выпаливают fireevent. Который отлавливается в diff-описании грида. На который биндится функция, которая вызывает п.6.

2) Сделать свой Listener (наподобие дефолтного. который открывает мини-странички). При инициализации детали загружать его.

3) В listener-е описать ContainerviewModel. Его тоже нужно будет описать в отдельной схеме.

4) Для ContainerviewModel вызвать свой модуль (Не забыть и его создать, вместе со схемой страницы)

5) Вот уже эту страницу наполнять как угодно, реализовывать любую логику.

6) Ну и чтобы это все работало в детали перехватывать сообщение от грида, вызвать

 Terrasoft.MyPageListener.open(...)

 

Ну и ещё отладить весь этот велосипед. Вот. Желательно предварительно запастись недельным запасом чая.

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

Добрый день!

Создал новый список в итогах раздела Активности, и всё бы хорошо, но хочется исключить из списка записи с 0 (подсчитывал кол-во завершённых активностей для сотрудников).

В параметрах отображения выбирал "Активность(по колонке ответственный) количество > 0" но это не помогло.

Вариантов кроме создания представления в БД и соответствующего объекта в конфигурации, чтобы строить аналитику по нему нет?

Нравится

1 комментарий

В SQL за это отвечает инструкция having (условия постобработки выборки), на сколько я понимаю, пока этого в итогах нет

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

Посл создания очереди по обращению(версия 7.12) и нажатия на действие Выполнить наполнение очереди выходит ошибка .

Процесс обработки очереди : БП Обработка обращений из очереди в Едином окне

'OperatorSingleWindow.UpdateQueuesJobTrigger' for 'OperatorSingleWindow.UpdateQueuesJob' job: Invalid column name 'TIME_ZONE_ID'.

где установить часовой пояс?

Нравится

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

Попробуйте выполнить этот скрипт:



IF NOT EXISTS (

    SELECT 1 FROM sys.columns

    WHERE [Name] = N'TIME_ZONE_ID'

    AND [Object_ID] = Object_ID(N'[dbo].[QRTZ_SIMPROP_TRIGGERS]')

)

BEGIN

    ALTER TABLE [dbo].[QRTZ_SIMPROP_TRIGGERS] ADD [TIME_ZONE_ID] [NVARCHAR] (80);

END;

Евгений Манько,

Скрипт выполнил. Помогло.

Но теперь при переходе в Единое окно не отображаются колонки, но записи есть. Скрин.

В консоли ошибка:

file: undefined

 line: undefined

 column: undefined

 message: config.items.filter is not a function 

 date: Thu May 10 2018 08:44:29 GMT+0300 (RTZ 2 (зима))

 moduleId: OperatorSingleWindowModule_SingleWindow_OperatorQueuesModule_QueueModule

 moduleName: QueueModule

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

VladKapitanchyk,

Это не пользовательское замещение. 

Проблема во ViewgeneratorV2

getGridRowColumns: function(config, rowIndex) {

                return config.items.filter(function(column) {

                    var position = column.position;

                    return (position.row === rowIndex);

                });

            },

доработок с очередями вообще не делали еще. в какую сторону капать?

Евгений Волоцкой,

Посмотрите, что приходит в config. Сравните с параметрами которые приходят в других рабочих гридах. Сравните callStack.

VladKapitanchyk,

не приходят колонки в отличие от других разделов, при попытке настроить колонки через мастер раздела та же ошибка в той же ф-ии, но в файле GridSettingsPage.js

Евгений Волоцкой,

Если смотреть по callstack(метод reloadGridColumnsConfig) то можно увидеть, что конфиг подтягивается из профайла. Попробуйте перенастроить отображение колонок.

VladKapitanchyk,

я писал в пред. сообщении, что при настройке колонок аналогичная ошибка. как настроить sysprofiledata для единого окна?

В общем случае надо дебажить. Но был случай когда подтягивались не правильные настройки с профиля, что приводило к похожему результату. В профиле в настройках в «items» хранился объект «{…}», а должен список «[…]»

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

Например, есть запрос на sql такого вида:

declare @DocumentTypeId uniqueidentifier

declare @InvoiceTypeId uniqueidentifier

update I

set

    I.TypeId = @InvoiceTypeId

from Invoice I

    join Document D on D.Id = I.DocumentId

where D.TypeId = @DocumentTypeId

Можно ли его реализовать с помощью класса Update на C#?

Нравится

1 комментарий

Есть 2 процесса, которые запускаются по сигналу изменения некоторого поля в 2х разных сущностях, например, Account и Contact.

В одном процессе при изменении поля A в таблице Account вызывается изменение поля Б в Contact, а в другом при изменении поля Б таблицы Contact вызывается изменение поля A в Account.

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

Но вызов серверного кода более тяжелый и к тому же тогда информация об измененных полях не попадает в лог.

Меня интересует, какие ещё есть 'более правильные' с точки зрения производительности варианты решения такой задачи?

 

Нравится

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

Добрый день!



А можете уточнить в какой лог не попадают данные, а так же показать Ваш ScriptTask?

Евгений Манько,

Не попадают в Change log в Администрировании

В одном процессе код приблизительно такой:

var update = new Update(UserConnection, "Contact")

            .Set("TypeId", Column.Parameter(ContactType))

            .Where("Account").IsEqual(Column.Const(AccountType)).Execute();

А в другом наоборот.

Алла Савельева,



Добрый день! 

Данный скриптаск тяжелый так как он меняет все записи. Как обходное решение, в разделы можно добавить поля куда будет записываться временный признак (достаточно будет текстового поля которое доступного «только для чтения» которое будет меняться процессом). А в рамках процесса реализовать примерно такую схему – скриншот. Если добавить в стартовый сигнал условие что запрещающий временный признак не установлен, то процессы не будут запускать друг друга.

Евгений,

спасибо за совет, как вариант, может быть.

Есть также мысль реализовать вызов процесса не по сигналу, а при сохранении изменений в карточке конкретного объекта.

В любом случае, от существующего варианта нужно отказываться))))

Алла Савельева,



Элемент начальный сигнал несет в себе  несколько вариантов запуска. Можно настроить его на изминение/добавление/удаление записи. С возможностью указать условия запуска по событию с опеределенным полем в карточке. При необходимости можно добавить дополнительные фильтры. Подробнее про этот эллемент можно прочитать тут.

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