Управлять как то можно порядком деталей в разделе и в карточке записи? Нигде что то найти не могу.

Нравится

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

Здравствуйте Александр.
Да, можно.
Для этого существуют кнопки "вверх" и "вниз" на детали "Детали" (простите за тавтологию).

Простите, но я их в упор не наблюдаю......
Да и про карточку вопрос остался.

Да, действительно, почему-то пропадают... :cry:
Ну тогда Вам придется "подойти из-за угла с SQL пулеметом" :wink:
В таблице SysModuleDetail есть колонка Position, по которой сортируются детали в разделах. Но с этой таблицей нужно быть аккуратным. На ней завязана куча логики.
Кнопки в реестре деталей в рабочих местах есть, просто они почему-то не показываются.

"Бабуков Андрей Александрович" написал:Ну тогда Вам придется "подойти из-за угла с SQL пулеметом"

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

Как показал честный ms sql колонка position у деталей в этом разделе едина в своем мнении: у всех стоит 0. :confused:

Подождем что скажет саппорт, про то где мои кнопочки?!

Расположение деталей в разделе определяется их заголовком – происходит сортировка заголовков деталей по алфавиту.
Изменить расположение деталей можно только добавлением к заголовку номера, например:
1. Переходим в раздел [Инструменты] – [Рабочие места].
2. Находим нужный раздел, на детали [Детали] добавляем нумерацию для деталей:

/system/files/1_2_4.png
3. После внесения изменений нужно выполнить очистку Redis

Эммм.....кто прав?

Права Наталия. Кнопок-стрелок для деталей нет и никогда не было.

"Maxim Gritsenko" написал: Кнопок-стрелок для деталей нет и никогда не было.

Та невже??? :confused:
Я не говорю, что я прав, но кнопки есть см. скрин
Но, к сожалению, эти кнопки почему-то скрываются, в конфигурации TSBpm :sad: А вот, почему они скрываются, это вопрос, который я поднял в этом топике.

Ааааа, обделили!!! :smile:
Значить ServiceDesk'у дали кнопочки, а нам, простым смертным нет?!! :smile:
Все, буду жаловаться в Гаагу.
Нет, а вообще странно как то, вроде не такой уж и продвинутый прям функционал то, почему в стандартной версии нет?

"Бабуков Андрей Александрович" написал:Та невже???
Я не говорю, что я прав, но кнопки есть см. скрин

Андрей, Вы вероятно не обратили внимание, что необходимо изменить порядок деталей, у Вас на скриншоте отображена закладка [Основные вкладки], а не [Детали].

Показать все комментарии
Получит параметр со значением со странички
Технические вопросы
5.x

Добрый день.
У меня такая проблема в «Страница реестра подчиненных договоров» рисунок process1.png нажимаю кнопку открывается страница «Страница Запрашиваемая сумма транша» process2.png, на этой страничке проводится некая операция и нажимается кнопка «Ок» или «Отмена» после закрывается страничка и передается булевой параметр со значением, значение с булевого параметра я должен получить в «Страница реестра подчиненных договоров», пытался получить следующим образом, выдает ошибку на какой та Key ругается, кусок кода:
string defValuesId = (string)Page.GetParameterValue("defValuesId");
var parameters = UserConnection.UserContext[defValuesId] as Dictionary;
if (parameters.ContainsKey("IsNextRunProcess"))
IsNextRunProcess = Convert.ToBoolean(parameters["IsNextRunProcess"].ToString());
return true;

Заранее спасибо.

Нравится

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

У Вашей страницы есть список значений по умолчанию (это, скорее всего, страница какой-то детали), а при открытии страницы из БП, Этих параметров НЕТ. Вам нужно в скрипте, при установке параметров открытия страницы указать в словаре значение "defValues".

Здравствуйте, Баглан!

Обратите внимание, если Вы находитесь на странице, то вычитывать UserConnection лучше из страницы.

Кроме того, когда Вами получается Dictionary, и вы хотите обращаться к его элементам в формате ключ/значение, это надо явно указывать при приведении типа. Пример кода:

	string defValuesId = Page.Request.QueryString["defValuesId"].ToString();
	var parameters = Page.UserConnection.UserContext[defValuesId] as Dictionary<string, object>;
	if (parameters.ContainsKey("IsNextRunProcess"))
	IsNextRunProcess = Convert.ToBoolean(parameters["IsNextRunProcess"].ToString());
	return true;

Спасибо Коллеги, у меня получилось следующим образом:
var parameters = UserConnection.UserContext[DefValuesKey] as Dictionary;
if (parameters.ContainsKey("IsNextRunProcess")) {
IsNextRunProcess = Convert.ToBoolean(parameters["IsNextRunProcess"].ToString());
};
return true;

Оказывается ошибка выходила из-за того что я забыл включит галочку «Сериализировать значение» в параметре DefValuesKey

Показать все комментарии
Ивенты детали в разделе
Технические вопросы
5.x

Добрый день, Коллеги !!!
При дабл клике на гриде по детали срабатывает какой-то ивент, не могу словить какой. Хотелось бы его отменить. На страници реестра сообщения(ивент) по записи грида даблклик срабатывает после того ивенту который открывает страницу редактирования на детали

Нравится

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

См. функцию GetRegisterTreeGridDblClickScript в BaseGridPage. Если в своей странице детали её переопределить в возвращающую пустое значение, обработчика не будет.
Аналогичный обработчик кнопке "редактировать" задан в GetRegisterEditPageScript.

Спасибо за подсказку, но не помогло =((
сделал вот так, все равно хочет открыть едит пейдж

public override string GetRegisterEditPageScript(Guid editPageUId, Guid sysModuleEditId) {
//base.GetRegisterEditPageScript(editPageUId, sysModuleEditId);
return string.Empty;
}

public override string GetRegisterTreeGridDblClickScript(string defaultScript) {
//base.GetRegisterTreeGridDblClickScript(defaultScript);
return string.Empty ;

Решил проблему в методе: PrepareOpenModuleEditPageParameters

"Ильюша Сергей Николаевич" написал:

Добрый день, а подскажите как решили проблему?

"Илья Т." написал:Добрый день, а подскажите как решили проблему?

BPMOnline Версия 5.2.0.658


В версии 5.2 не уверен если получится но в 5.4 работало. Ищи этот метод не на гриде, а на главной странице, вроде =) точно не помню, давно уже было

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

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

Не понимаю одного: почему, после того как я из второй конфигурации в основную перенес изменения, то их, изменений нет, пользователи их не видят (в дизайнерах объектов, страниц и процессов все видно) и пока я (РУКАМИ!!!) не открою в основной конфигурации хотя бы один измененный элемент не опубликую, никаких изменений никто не увидит....

Так должно быть?

Нравится

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

да, так и должно быть.

После переноса изменений, выполните в основной конфигурации "Сгенерировать исходный код"->"Для выбранных элементов".

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

Есть динамическая папка с условием "Исполнитель = Текущий пользователь", права на папку на чтение есть у всех сотрудников.
У одного пользователя сама папка показывается, но условия нет вообще, соответственно, показываются все записи, вместо того что положено, чистка профиля и кеша браузера не помогла.
Кстати, как чистить профиль, если у пользователя нет таких прав? Или когда я чищу его под системным администратором оно у всех почистится?

Нравится

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

а права доступа к полю Исполнитель у него есть?

конечно, ему же ВСЕ записи показываются, условия в динамической папке нет

Александр, очистите профиль именно для того пользователя, у которого некорректно работает динамическая группа.
Очистить профиль определенным пользователям можно таким запросом:

DELETE  *
FROM tbl_SysProfileData 
WHERE     (ContactID = 'ID контакта')

"Шамуилов Александр" написал:Или когда я чищу его под системным администратором оно у всех почистится?

Только у администратора.

Хм. Интересный пост. Нет, если Вы чистите под админским юзверем, то профиль чистится только для этого пользователя. Так работает система, а вот почему для всех нормально загружается динамический фильтр, а для одного нет, это вопрос интересный.:cry: У этого мега-пользователя нет каких-либо особых разрешений???

"Бондарь Наталия" написал:Очистить профиль определенным пользователям можно таким запросом:

Я сомневаюсь, что это поможет. :sad: Здесь скорее нужно смотреть код страницы.

"Бабуков Андрей Александрович" написал:

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

Когда-нибудь останется работа только для машин и IT'шников :)

Вот и меня это очень сильно заинтересовало, но все именно так все права проверил перепроверил, никак мегаправ у этого "супермена нет".....

"Бондарь Наталия" написал:Александр, очистите профиль именно для того пользователя, у которого некорректно работает динамическая группа.

Помогло, спасибо.

Кстати, вот интересная проблема: как чистить профиль конкретного пользователя, не прибегая к методам "мы подошли из-за угла с SQL пулеметом"?

Можно создать действие в разделе Администрирование:Пользователи, вызов которого будет выполнять запрос по удалению профиля для выделенного в реестре пользователя.
На данный момент профиль очищается только из раздела [Конфигурация] при вызове пользователем соответствующей команды.

Показать все комментарии
вкладки
Технические вопросы
5.x

Доброго времени суток!

Столкнулся с такой проблемой: нужно добавить новые вкладки (!не детали) в карточку контакта.
Добавил, но проблема заключается в том, что их нужно динамически показывать/скрывать в зависимости от типа контакта. Метод SetVisible() не отрабатывает. Если просто присваивать свойству вкладки Visible true/false, то отрабатывает лишь при открытии карточки.

Каким образом можно реализовать данную задачу?

Нравится

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

"Constantine" написал:Если просто присваивать свойству вкладки Visible true/false, то отрабатывает лишь при открытии карточки.

Это если только на OnPrepare поставили, а если еще попробовать на OnDatasetDataChange поставить скрытие или отображение вкладок?

"Сазанов Александр Владимирович" написал:
Constantine пишет:

Если просто присваивать свойству вкладки Visible true/false, то отрабатывает лишь при открытии карточки.

Это если только на OnPrepare поставили, а если еще попробовать на OnDatasetDataChange поставить скрытие или отображение вкладок?


Вопрос по BPMonline, не по 3.X

Да что же со мной такое, почти никогда не замечаю, что для BPM.

Тогда попробуйте вместо SetVisible(true) использовать Hidden.

Page.MainTab.Hidden = false; //сделать видимым

Премного благодарен

Показать все комментарии
изображение
Технические вопросы
5.x

Доброго времени суток!

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

Нравится

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

Constantine, прикрепила во вложенном файле пример реализации.

"Бондарь Наталия" написал:Constantine, прикрепила во вложенном файле пример реализации.

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

controlImage.UsePrimaryImageColumn = false;
controlImage.UsePrimaryImageColumn = true;
controlImage.UsePrimaryImageColumn = false;

Одного раза вполне достаточно, чтобы свойство UsePrimaryImageColumn установилось в false.
Или я что-то неправильно понял???

"Бабуков Андрей Александрович" написал:
Бондарь Наталия пишет:

Constantine, прикрепила во вложенном файле пример реализации.

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

controlImage.UsePrimaryImageColumn = false;

controlImage.UsePrimaryImageColumn = true;

controlImage.UsePrimaryImageColumn = false;

Одного раза вполне достаточно, чтобы свойство UsePrimaryImageColumn установилось в false.

Или я что-то неправильно понял???

Когда-нибудь останется работа только для машин и IT'шников :)

меня тоже интересует этот момент:smile:

Constantine, Андрей,

установите единожды свойство UsePrimaryImageColumn в false.
Код писался давно, поэтому сейчас не могу сказать по какой причине 3 раза вызывается установка свойства.

К сожалению, с кодом оказались проблемы.

При первой загрузке файла - все отлично и прекрасно, но дальше начинаются неприятности....
Если загрузить новый файл - в базе происходит обновление, но файл отображается предыдущий.... Переоткрытие карточки не приносит никаких плодов. При этом, если зайти с другого браузера - файл подтягивается новый. Более того - очищаем поле с картинкой, файл продолжает отображаться....
Переоткрываем карточку - пусто, отлично! Загружаем третье фото - барабанная дробь.... видим самое первое изображение:smile:

По сему родились вопросы: как я понимаю файл висит где-то в кэше, каким образом его оттуда удалять при замене файла, либо вообще заставить туда не ложиться (в идеале); каким образом отображать свежезагруженное фото и соответственно очищать при удалении?

Заранее премного благодарен

Добрый день, Константин!

Если нужно очистить профиль в BPMonline, то это можно сделать в конфигурации:

Но судя по описанию, то профиль нужно очищать в браузере.

"Арсений Белецкий" написал:

Добрый день, Константин!

Если нужно очистить профиль в BPMonline, то это можно сделать в конфигурации:

Но судя по описанию, то профиль нужно очищать в браузере.

С уважением,

Белецкий Арсений

Группа компаний Terrasoft


Арсений, возможно я не совсем правильно разъяснил ситуацию. Проблема именно в том, что я создал поле Фото в карточке Контакта. Обработка отображения и загрузки файла выполнена по аналогии с инструкцией Наталии. Выше я описал поведение этого поля, когда клиент работает с системой. Вопрос в том, каким образом предотвратить такое неадекватное поведение?

Да и оба способа, указанные Вами, не помогли, как отображалась самая первая картинка, так и отображается, хотя в базе храниться уже совершенно другая.

Константин, попробуйте открыть карточку ContactEditPage в дизайнере страниц (в конфигурации), открыть ее процесс, и в событии ParentPageLoadCompleteAfterBaseScript

дописать предпоследней строчку кода InitializeContactPhoto();

В примере, который дала Наталья есть следующая строка

Page.AddScript(string.Format("{0}.setImage({1});", Page.ContactPhotoImage.ClientID, Json.Serialize(controlImage, new ControlImageJsonConverter())));

не понимаю Json-это namespace или класс JsonSerializer

Ольга, Json это формат обмена данными между клиентом и сервером (http://flexjson.sourceforge.net/).

просто компилятор ругается на эту строчку, я подключила Terrasoft.UI.WebControls.Utilities.Json.Converters, Newtonsoft.Json
всё равно пишет "Имя Json отсутствует в текущем контексте", вот и пытаюсь понять, где взять и что ещё подключить

Ольга, а Terrasoft.Common.Json подключен?

подключила, не ругается...спасибо

Показать все комментарии
Технические вопросы
5.x

На сервере ручками сменили часовой пояс, после этого стал ругаться
Часовой пояс вернули: установили как (UTC+03:00) Волгоград, Москва, Санкт-Петербург
Проверила в реестре по пути HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones это Russian Standart Time, в реестре присутствует. В какую сторону рыть

Нравится

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

UTC +3 - это может быть и не Москва(зима), а Москва (без перехода на летнее время), которая сейчас и является Russian Standart Time. Если у вас клиент об этом знает (какое-то там обновление Windows),а сервер нет, или наоборот, то они друг друга плохо понимают

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

Добрый день!

Насколько я понял, вопрос решен, в случае возникновения или актуальности текущего вопроса, прошу сообщать.

Рады будем помочь!

Возникла та же ошибка, когда попытался подключиться к BPM с пк, который и является сервером.

Вообще то мелкомягкие давно (ещё в 2011ом годе) уже для всех своих виндов сделали патч, который выставляет нормальные часовые пояса, то есть Москва это +4 без всяких переходов на лето/зиму и категорически рекомендует его устанавливать.
Думаю все дело в этом.

Вот здесь лежит:
http://support.microsoft.com/kb/2570791/ru

Спасибо! Обновление решило проблему.

Оказалось, что проблема была решена для часового пояса Москва +4. Если часовой пояс Минск +2 ,проблема сохраняется.

Добрый день, Олег!

Как можно прочитать из http://support.microsoft.com/kb/2633952/ru :

Как сообщалось ранее в статье 2625508 базы знаний Майкрософт, Беларусь отказалась от перехода на зимнее время в 2011 г. и теперь постоянно использует летнее время. В этой статье пользователям предлагается обходной путь с переходом на зимнее калининградское время. Это обновление Windows делает переход постоянным и добавляет Минск в отображаемое имя зимнего калининградского времени. Новое отображаемое имя зимнего калининградского времени — "(UTC+03:00) Калининград, Минск".

Надеюсь, это поможет :smile:

Батька всегда шел своим путем! :lol:

Показать все комментарии
Автонумерация
Технические вопросы
5.x

Создала системную переменную, в дизайнере объектов присвоила полю значению по умолчанию из этой переменной.Что ещё нужно сделать? потому как инкремента поля не происходит, при добавлении новой записи выставляется в 0, а в БД эта возможность заблокирована.

Нравится

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

Посмотрите, как это сделано в процессе объекта "Документ".
нумерация документа

Посмотрела,скопировала к себе этот кусок - не работает.Не пойму, как работает это действие "Сгенерировать порядковый номер" - оно использует системные настройки(Текущий номер и Маска)?

Да, нужно создать системные настройки.

Системные настройки уже созданы, я как раз не могу найти, где при создании Действия процесса, нужно указывать конкретные системные настройки?, или это определяется по имени

Да, по имени. В коде схемы "Сгенерировать номер по порядку" есть:

	var entitySchemaName = entitySchema.Name;
	string codeMaskSettingName = entitySchemaName + "CodeMask";
	string lastNumberSettingName = entitySchemaName + "LastNumber";

Сделала ранее по аналогии, как в схеме Документ - не работает, потом так

В скрипт вставила код из схемы "Сгенерировать номер по порядку"

object EntitySchema = Entity.Schema;
if (EntitySchema != null) {
	var entitySchema = EntitySchema as Terrasoft.Core.Entities.EntitySchema;
	var entitySchemaName = entitySchema.Name;
	string codeMaskSettingName = entitySchemaName + "CodeMask";
	string lastNumberSettingName = entitySchemaName + "LastNumber";
 
	var connection = context.UserConnection;
	string sysSettingsCodeMask = (string)SysSettings.GetValue(connection, codeMaskSettingName);
	int sysSettingsLastNumber = (int) SysSettings.GetValue(connection, lastNumberSettingName);
 
	SysSettings.SetValue(connection, UserConnection.RootAdminUnitGroupId, lastNumberSettingName, ++sysSettingsLastNumber);
 
	var code = string.Format(sysSettingsCodeMask,sysSettingsLastNumber);
	var update = new Update(UserConnection, Entity.Schema.Name)
	.Set("Number", Column.Parameter(code))
	.Where("Id").IsEqual(Column.Parameter(Entity.PrimaryColumnValue));
update.Execute();
}

При компиляции ругается

Здравствуйте.

Все-таки рекомендую сделать по аналогии с "Документом". Что именно у Вас не получилось?

Здравствуйте, Дмитрий
Сделала по аналогии с "Документом"

В скрипте SetGenerateParamScript сначала 1 строка идентична как в Документе
но поскольку не работала, добавила код на обновление поля....не работает (((

GenerateNumberUserTask.EntitySchema = Entity.Schema;
string code = "1";
var update = new Update(UserConnection, Entity.Schema.Name)
	.Set("Number", Column.Parameter(code))
	.Where("Id").IsEqual(Column.Parameter(Entity.PrimaryColumnValue));
update.Execute();

Такое ощущение что вообще не происходит наступление этого события, тем не менее Заказ в таблицу добавляется....

А какая у этого объекта PrimaryColumn?
Также, пожалуйста, т.к. у Вас On-Site версия - попробуйте запустить Profiler и посмотреть какие запросы идут на сервер после нажатия на "ОК".

Если я не ошибаюсь, то по умолчанию PrimaryColumn это Id (объект наследован от базового)
В профайлере обязательно посмотрю, пока сделала через триггер: после вставки читаю значение из системной таблицы, обновляю поле Number, потом обновляю значение системной переменной в таблице....Понимаю что не совсем правильно, но так хотя бы работает

Если у Вас On-Site, то триггер - вполне разумное решение. :)

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