Вопрос

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

Например, если это был раздел Контакты , то должна быть октрыта та же самая страница реестра контактов , ну например 7-я. Курсор в реестре должен стоять на том же самом контакте что и при закрытии. Если Контакт был отфильтрован при переходе с детали Контакты какого-либо Контрагента , то должен открывался тот же самый Контакт (с тем же самым фильтром) и т.д.

Если это был раздел Контрагенты, то должна быть октрыта та же самая страница реестра контрагентов, допустим 17-я , курсор должен стоять на том же самом контрагенте на котором стоял при выходе а курсор групп соответственно на последней выбранной статической(динамической) группе. Ну и т.д. для других разделов.

А вообще, где сохраняется последнее состояние окон и курсоров?

С уважением, Дмитрий
ТS CRM 3.2.0.83

У меня такой же вопрос

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

Здравствуйте, Дмитрий!

Последнее состояние окон сохраняется в профиле пользователя - в зависимости от настроек хранится либо в папке Profile (%AppData%\Terrasoft\<Ваша версия>\Profile), либо в базе данных.

В главном окне wnd_Main сохранение настроек происходит в обработчике события OnClose. В более поздних версиях появилась такая пользовательская настройка, которая позволяет пользователю указывать, какой раздел открывать при старте: по умолчанию, последний активный или указанный. Не уверенна, что такая функциональность есть в версии 3.2.0.83.

Вот код обработчика этого события:

function wnd_MainOnClose(Window) {
if (Assigned(Main.UserSettingsWindow) &&
!Main.UserSettingsWindow.Attributes('DenySerializeToProfile')) {
var UserSettings = Main.UserSettingsWindow.Attributes('UserSettings');
var ActiveWorkspaceItem = GetActiveWorkspaceItem();
if (Assigned(ActiveWorkspaceItem)) {
if (UserSettings.StartMenuItemAction == 'rbLastActive') {
UserSettings.StartMenuItemTag =
ActiveWorkspaceItem ? ActiveWorkspaceItem.Tag : '';
}
if (UserSettings.StartMenuItemAction != 'rbByDefault') {
if (!IsEmptyValue(UserSettings.StartMenuItemTag)){
var StartedActionMenu =
GetActionMenuItemByTag(amWorkspace,
UserSettings.StartMenuItemTag);
var GroupCode = StartedActionMenu.ParentItems.Tag;
UserSettings.StartMenuGroupTag =
StartedActionMenu ? GroupCode : '';
} else {
UserSettings.StartMenuItemAction = 'rbLastActive';
}
}
}
Services.SerializeItemToProfile(Main.UserSettingsWindow, EmptyStr);
}
CloseMainForm();
}

Насчет сохранения страницы и позиции в реестре - это тоже можно доработать и сохранять эту информацию в профиль пользователя при вызове обработчика OnProfileSerialize окна. В таком случае нужно ещё реализовать обработчик события OnProfileDeserialize, который будет эту информацию вычитывать из профиля пользователя и обрабатывать.
Однако, с точки зрения производительности работы приложения при старте не рекомендуется реализовывать переход на n-ю страницу с m-ной позицией.

Добрый день, Алла!
Спасибо за пост!

"Савельева Алла" написал:хранится либо в папке Profile (%AppData%\Terrasoft\<Ваша версия>\Profile)

Такой папки у меня вообще нет.
Есть папка AppData\Roaming\Terrasoft CRM\3.2.0\Profile\F714003C6A014E0187CDFBA4B89B2D13
Там много файлов с расширением .dat , но это , кажется Cache.

"Савельева Алла" написал:В более поздних версиях появилась такая пользовательская настройка, которая позволяет пользователю указывать, какой раздел открывать при старте: по умолчанию, последний активный или указанный. Не уверенна, что такая функциональность есть в версии 3.2.0.83.

К сожалению, нет такой функциональности нет, по крайней мере в процессе работы не сталкивался. Где это сидит?

Моя коробочная функция лишь:
function wnd_MainOnClose(Window) {
CloseMainForm();
}

Вставил новую функцию , при закрытии приложения выдается ошибка(Предполагается наличие объекта) на строке:
var ActiveWorkspaceItem = GetActiveWorkspaceItem();

Что нужно изменить сделать?

"Кудинов Дмитрий Станиславович" написал:Есть папка AppData\Roaming\Terrasoft CRM\3.2.0\Profile\F714003C6A014E0187CDFBA4B89B2D13

Это и есть папка, в которой хранятся профили пользователей.
Cache хранится здесь же, но в папке Cache :smile:

"Кудинов Дмитрий Станиславович" написал:К сожалению, нет такой функциональности нет, по крайней мере в процессе работы не сталкивался. Где это сидит?

Эта функциональность реализована в версии 3.4.1 и находится она в настройках пользователя на вкладке [Общие].

"Кудинов Дмитрий Станиславович" написал:Вставил новую функцию , при закрытии приложения выдается ошибка(Предполагается наличие объекта) на строке:
var ActiveWorkspaceItem = GetActiveWorkspaceItem();

Что нужно изменить сделать?

Ошибка возникает из-за того, что у Вас не реализована функция GetActiveWorkspaceItem().
Её код ниже:
function GetActiveWorkspaceItem() {
for (var i = 0; i < amWorkspace.Count; i++) {
var GroupActionMenuItem = amWorkspace.Items(i);
if ((GroupActionMenuItem.IsVisible) && (GroupActionMenuItem.IsChecked)) {
for (var j = 0; j < GroupActionMenuItem.Count; j++) {
var ActionMenuItem = GroupActionMenuItem.Items(j);
if ((ActionMenuItem.IsVisible) && (ActionMenuItem.IsChecked)) {
return ActionMenuItem;
}
}
}
}
return null;
}

Также обратите внимание на то, что, если Вы хотите использовать этот функционал в таком виде, в котором он есть в коробке, Вам нужно ещё реализовать интерфейсную часть.

Алла, покорнейше благодарю за новую порцию кода!

Да, когда вставил GetActiveWorkspaceItem() ошибка исчезла.
Поведение приложения не изменилось - все по старому, отрывает только с раздела Контрагент.

"Савельева Алла" написал:Также обратите внимание на то, что, если Вы хотите использовать этот функционал в таком виде, в котором он есть в коробке, Вам нужно ещё реализовать интерфейсную часть.


Очень хочу реализовать функционал! Как и с какой целью реализовать интерфейсную часть?

(P.S. : Иногда, для визуальной информативности хотелось бы вставить рисунок, но у меня что-то не получается. Когда нажимаю на иконку *Вставить\изменить изображение* появляется окно со странной геометрией(буква Г упала вперед). Там три позиции для ввода , но названия полей обрезаны. Раньше такого бага не было , вставлял без проблем. У Вас получится отправить рисунок? Видимо в какое-то из трех (сверху вниз) необходимо вводить путь к рисунку на жестком? В какое? )

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

Логично, так как для того, чтобы данная функциональность работала нужно:
1) указывать настройки того, какой раздел отображать (для этого нужно реализовать интерфейсную часть в окне пользовательских настроек);
2) в обработчике события OnPrepare для wnd_Main вызывать функцию InitializeUserSettings, которая выполняет десериализацию настроек пользователя:
function InitializeUserSettings(InitializeWhenMainWindowPrepare) {
Main.UserSettingsWindow = Services.GetNewItemByUSI('wnd_UserSettings');
Main.UserSettingsWindow.Attributes('InitializeWhenMainWindowPrepare') =
InitializeWhenMainWindowPrepare;
Main.UserSettingsWindow.Prepare();
Services.DeserializeItemFromProfile(Main.UserSettingsWindow, '');
}

"Кудинов Дмитрий Станиславович" написал:Очень хочу реализовать функционал! Как и с какой целью реализовать интерфейсную часть?

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

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

"Кудинов Дмитрий Станиславович" написал:(P.S. : Иногда, для визуальной информативности хотелось бы вставить рисунок, но у меня что-то не получается. Когда нажимаю на иконку *Вставить\изменить изображение* появляется окно со странной геометрией(буква Г упала вперед). Там три позиции для ввода , но названия полей обрезаны. Раньше такого бага не было , вставлял без проблем. У Вас получится отправить рисунок? Видимо в какое-то из трех (сверху вниз) необходимо вводить путь к рисунку на жестком? В какое? )

Информацию передала в отдел, который занимается поддержкой работы Community.

!!!

Здравствуйте, Дмитрий!

Для решения проблемы попробуйте очистить содержимое папки Profile (где она находится я писала в этом посте выше).

"Кудинов Дмитрий Станиславович" написал:Пытался восстановить последнюю backUp - копию , тоже не удается . Выдается ошибка что база используется, хотя проверил в диспетчере - запущенных террасофтовских файлов нет.

Бекап базы данных не относится к 'террасофтовским файлам' - это часть, за работу которой отвечает СУБД (например, MS SQL).

Вот что оказывается произошло :biggrin:. После того как я поставил галочку в чекбокс, в окне входа вместо supervisor встало мое имя пользователя в моей машине. Я был невнимателен и только потом увидел такое безобразие...:idea:

В Terrasoft есть 2 способа авторизации в базу: по логину и паролю и из-под пользователя домена, под которым работаете в Windows. В окне логина это определяет соответствующая галочка.

У меня на событие OnPrepare уже вызывается функция:

function wnd_MainOnPrepare(Window) {
ReadSystemSettings();
InitializeUserSettings();
InitializeCallCentreClientWindow();
Initialize();

FillReferencesDictionary();
CheckAnniversary();
var WorkspaceUSI = GetGroupAllowedWorkspaceUSI();
try {
if(IsEmptyValue(WorkspaceUSI)) {
var Message = "Текущий пользователь не имеет достаточно прав для просмотра данных";
throw Message;
}
}
catch (e) {
CatchException(e);
return;
}
IntitializeTimer();
PrepareTimer();
ShowTimerWindow();
}

А функция InitializeUserSettings в моем варианте похожа ту которую прислали Вы , но покороче и без аргумента в круглых скобках. Имеет вид:

function InitializeUserSettings() {
Main.UserSettingsWindow = Services.GetNewItemByUSI('wnd_UserSettings');
Main.UserSettingsWindow.Prepare();
Services.DeserializeItemFromProfile(Main.UserSettingsWindow, '');
}

Как быть?

И что?

"Зверев Александр" написал:

И что?


Пожалуйста, конкретезируйте свой вопрос:smile:

Эти отличия в коде могут быть вызваны более старой версией конфигурации. У Вас 3.2, а интересующие Вас механизмы появились в более поздних. Если хотите перенести все доработки новой версии в старую, придётся приобрести лицензии на 3.3.2 (а скорее всего, 3.4.0, 3.4.1), где есть нужная логика, развернуть рядом и сравнивать содержимое одинаковых функций. Или же заказать такие работы в качестве проекта.

Можно и без лицензии:) если просто раздобыть дистрибутив демо или боевой дистрибутив соответствующих версий. Админка прекрасно работает под супервизором и система послужит донором
Дистрибутив думаю не откажется дать поддержка ;)

Ну, или под Supervisor. Судя по инструкции, в 3.4.0 уже есть такое окно.
user settings

"Зверев Александр" написал:

Если хотите перенести все доработки новой версии в старую, придётся приобрести лицензии на 3.3.2 (или 3.4.0, 3.4.1), где есть нужная логика, развернуть рядом и сравнивать содержимое одинаковых функций. Или же заказать такие работы в качестве проекта.


У меня рабочая 3.2.0.83 . Сделано много доработок. Есть ли смысл покупать лицензию на 3.4 чтобы сравнивать содержимое одинаковых функций ? Перенести все новое из 3.4 в 3.2 может быть и возможно, но будет затратно, хотя бы даже по времени... уж тогда лучше сразу на 7-ку переходить.
Но пока не хочу. А в 3.2 есть некоторые критичные вещи которые уже просто достали.

Сейчас мало у кого есть версия 3.2. У большинства пользователей 3.Х — либо 3.3.2, либо 3.4.
Специально переносить все новые доработки в 3.2 уже никто не будет. Кроме того, часть из пожеланий в самом верхнем сообщении (выбранная запись на непервой странице) нет вообще нигде, это нужно делать с нуля.

Смысла переходить действительно больше уже на 7.Х, но она полностью другая. Есть бесплатный триал на 2 недели, можете зарегистрироваться и посмотреть.

"Александр Кудряшов" написал:

Можно и без лицензии:) если просто раздобыть дистрибутив демо или боевой дистрибутив соответствующих версий. Админка прекрасно работает под супервизором и система послужит донором
Дистрибутив думаю не откажется дать поддержка ;)

Даст ли дистрибутив поддержка, это еще вопрос.
Главные преимущества и недостатки 3.Х против 7.Х мы уже обсуждили в созданной мной теме.
*Есть ли какие-нибудь плюсы у Terrasoft CRM 3.xxx по сравнению с BPMonline 7.x *?

"Кудинов Дмитрий Станиславович" написал:Даст ли дистрибутив поддержка, это еще вопрос

Дистрибутив не тайна за семью печатями. Обязательно предоставят. Или партнеров просите :)
Кстати будьте морально готовы, что на бинарниках 3.2 у вас желаемый функционал может даже после все сравнений и переносов кода не заработать. Такая вероятность увы есть.

Здравствуйте, Дмитрий!

Если есть необходимость переноса описанной выше функциональности в используемую Вами версию, то это, действительно, можно сделать, запросив дистрибутив более поздней версии 3.4.1, в которой данная функциональность реализована.

После этого путем сравнения сервисов перенести нужные Вам доработки, хотя риск того, что это сделать физически может не получится, всё-таки есть, и гарантировать 100% результат мы не можем.

Служба поддержки сможет предоставить нужную версию по согласованию с менеджером по работе с клиентами Террасофт, который ответственный по Вашей компании.

"Савельева Алла" написал: можно сделать, запросив дистрибутив более поздней версии 3.4.1, в которой данная функциональность реализована

Добрый день, Алла!

Код который Вы опубликовали в этой теме из какой версии?

"Савельева Алла" написал: можно сделать, запросив дистрибутив более поздней версии 3.4.1, в которой данная функциональность реализована

Добрый день, Алла!

Код который Вы опубликовали в этой теме из какой версии?

Я Вам показал какой код у меня. Он расходится с вашим кодом cущественно.
Функции сериализации\десериализации у меня пустые.

function wnd_MainOnProfileDeserialize(Window, Node) {
}

function wnd_MainOnProfileSerialize(Window, Node) {
}
Чего мне на данный момент не хватает чтобы открытие, хотя-бы, было в раздел из которого был выход?
Мне даже не нужно в настройках пользователя опции выбора стартого раздела. Мне было бы достаточно
захардкодить.Примерно в каком направлении двигаться? Видимо в этих функциях что-то прописать? Для входа в последний открытый раздел эти функции задействуются? Можете пример кода который есть у Вас? Что означает второй параметр Node? Сообщие , пожалуйста, в тех.службу, пусть проверят скрипт уведомления опубликования нового поста. Приходит сразу от 2 до 4 писем.:exclaim:

Да, запросите версию 3.4.1.

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

Добрый день!
Есть такой процесс в ITIL - процесс наполнения очередей единого окна,
который запускается автоматически ( когда пользователь в системе) каждые 5 минут ( в соответствии с указанным интервалом-системной настройкой "интервал обновления очередей единого окна")

Подскажите, пожалуйста, где собственно (в какой схеме или быть может справочнике) прописывается сам автоматический запуск процесса - то, что именно этот процесс запускается автоматически через определенный интервал времени

У меня такой же вопрос

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

Здравствуйте, Дарья!

Эта логика прописана в самом процессе - перед завершением он записывает время своего следующего выполнения в планировщик, предварительно "посмотрев" на системную настройку.

Вот такой он бессмертный!

Добрый день, Александр!
Спасибо за секрет бессмертия))
Видела элемент в процессе "актуализировать задание планировщика"
UserConnection userConnection = context.UserConnection;
Terrasoft.Configuration.QueuesUtilities.UpdateQueuesTrigger(userConnection);
return true;

Но не поняла до конца, где находится сам планировщик, что он собой представляет в bpm? - (хотела бы записывать туда время выполнения еще одного процесса)

Здравствуйте, Дарья!
Александр Вам в этом случае не поможет - будет помогать Алексей.:smile:

Добавьте в задание-сценарий код:

string schedulerJobGroupName = "MyProcessGroup";//- Любое имя
string jobProcessName = "ProcessingEmail"; //- Название процесса
string schedulerJobName = "MyJobName"; //- Любое имя
int startOffset = 30; //- Количество секунд до старта
AppScheduler.RemoveJob(schedulerJobName, schedulerJobGroupName);
var job = AppScheduler.CreateProcessJob(schedulerJobName, schedulerJobGroupName, jobProcessName, UserConnection.Workspace.Name, UserConnection.CurrentUser.Name);
var trigger = new SimpleTriggerImpl(schedulerJobName + "Trigger", schedulerJobGroupName, DateTime.UtcNow.AddSeconds(startOffset));
AppScheduler.Instance.ScheduleJob(job, trigger);
return true;

Укажите в Usings Quartz.Impl.Triggers (с пустым псевдонимом), Quartz (с псевдонимом Quartz ), Terrasoft.Core.Scheduler (с пустым псевдонимом).

спасибо, Алексей))

Добрый день!
Попробовала так и сделать..
Процесс состоит из задачи и задания-сценарий, в котором прописан указанный код, перезапускающий данный процесс
Но почему-то перезапуска не происходит, просто процесс завершается

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

спасибо, все получилось)

Добрый день, при использовании следующего кода

string schedulerJobGroupName = "MyProcessGroup";//- Любое имя
string jobProcessName = "ProcessingEmail"; //- Название процесса
string schedulerJobName = "MyJobName"; //- Любое имя
int startOffset = 30; //- Количество секунд до старта
AppScheduler.RemoveJob(schedulerJobName, schedulerJobGroupName);
var job = AppScheduler.CreateProcessJob(schedulerJobName, schedulerJobGroupName, jobProcessName, UserConnection.Workspace.Name, UserConnection.CurrentUser.Name);
var trigger = new SimpleTriggerImpl(schedulerJobName + "Trigger", schedulerJobGroupName, DateTime.UtcNow.AddSeconds(startOffset));
AppScheduler.Instance.ScheduleJob(job, trigger);
return true;

В 7.5 все работает нормально, в 7.7 выдает следующую ошибку
1
В чем может быть ошибка и как ее исправить?

Добрый день!

Пример добавления триггера в планировщик для версии 7.7:
var userConnection = Get("UserConnection");
string schedulerJobGroupName = "MyProcessGroup";//- Любое имя
string jobProcessName = "UsrTestScheduler"; //- Название процесса
string schedulerJobName = "MyJobName"; //- Любое имя
int startOffset = 20; //- Количество секунд до старта
AppScheduler.RemoveJob(schedulerJobName, schedulerJobGroupName);
var job = AppScheduler.CreateProcessJob(schedulerJobName, schedulerJobGroupName, jobProcessName, userConnection.Workspace.Name, userConnection.CurrentUser.Name);
var trigger = new SimpleTriggerImpl(schedulerJobName + "Trigger", schedulerJobGroupName, DateTime.UtcNow.AddSeconds(startOffset));
AppScheduler.Instance.ScheduleJob(job, trigger);
return true;

Добрый день!
При попытке использовать следующий код, который привел Олег

var userConnection = Get("UserConnection");
string schedulerJobGroupName = "MyProcessGroup";//- Любое имя
string jobProcessName = "UsrTestScheduler"; //- Название процесса
string schedulerJobName = "MyJobName"; //- Любое имя
int startOffset = 20; //- Количество секунд до старта
AppScheduler.RemoveJob(schedulerJobName, schedulerJobGroupName);
var job = AppScheduler.CreateProcessJob(schedulerJobName, schedulerJobGroupName, jobProcessName, userConnection.Workspace.Name, userConnection.CurrentUser.Name);
var trigger = new SimpleTriggerImpl(schedulerJobName + "Trigger", schedulerJobGroupName, DateTime.UtcNow.AddSeconds(startOffset));
AppScheduler.Instance.ScheduleJob(job, trigger);
return true;

Выдает следующую ошибку:
1

Олег,

Извиняюсь, глаз замылился;) Текст в треугольных скобках в комментах опускается.

Добрый день,
Подскажите реально ли поставить в планировщик БП передавая попутно параметры?

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

Нет ничего нереального.

"Зарицкий Олег" написал:Пример добавления триггера в планировщик для версии 7.7:

Пора в документацию вставлять

Владимир, скоро появится.

"Зарицкий Олег" написал:

Владимир, скоро появится.

Здравствуйте! Каким образом можно в бизнес-процессе не только создавать триггер в планировщик, но и во всех активностях, где Завершение < DateTime.Now, устанавливать “Просроченная активность” = true?
(чекбокс “Просроченная активность” - пользовательское поле, созданное нами)

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

Используйте элемент "Изменить данные". В элементе "Изменить данные" Вам необходимо в поле "Просроченная активность" установить значение true.

В фильтре укажите "Завершение" <= "Текущий час" и "Завершение" <= "Сегодня".

"Демьяник Алексей" написал:

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

Используйте элемент "Изменить данные". В элементе "Изменить данные" Вам необходимо в поле "Просроченная активность" установить значение true.

В фильтре укажите "Завершение" <= "Текущий час" и "Завершение" <= "Сегодня".

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

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

"Демьяник Алексей" написал:

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

Планировщик на каждые, допустим, 5 минут + описанный вами процесс - единственно возможное решение кейса, Алексей? Или можете подсказать еще какое-то решение?

Здравствуйте!
Не получается в sales team 7.8 реализовать в бизнес-процессе, чтобы активности отмечались просроченными, если Завершение <= Текущие дата и время.

Бизнес-процесс состоит из элемента "Задание-сценарий" (там размещен код планировщика) и из элемента "Изменить данные активности", где Данные какого объекта изменить: Активность, а в фильтре указано, что менять нужно активности, у которых Состояние не равно "Завершена" И Завершение <=Текущие дата и время (Текущие дата и время - это параметр процесса со значением "[#Системная переменная.Текущее значение даты и времени#]").

Проблема: планировщик запускается с нужным интервалом, но меняет все незавершенные активности, игнорируя фильтр по дате завершения в элементе "Изменить данные активности". Что делаю неправильно?
Предложенный Алексеем вариант условия "Завершение" <= "Текущий час" и "Завершение" <= "Сегодня" также не работает.

Также пробовали в элементе "Изменить данные активности" в фильтре указывать условия:

Состояние не равно Завершена
И
Завершение<Текущие дата и время (где Текущие дата и время - параметр процесса со значением "[#Системная переменная.Текущее значение даты и времени#]").

С данными настройками процесс вообще перестал менять активности.

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

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

Реализация - в прикрепленном в файле

У меня такой же вопрос

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

Используемый метод showGrafInfo должен выглядеть следующим образом:

showGrafInfo: function() {
var processArgs = {
sysProcessName: "ProcessGrafShip",
parameters: {
}
};
ProcessModuleUtilities.executeProcess (processArgs);
},

Спасибо, получилось

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

Добрый день!
Подскажите, как можно настроить запуск БП после получения сообщения? Например, пришел отклик с сайта на e-mail. После этого должен запуститься БП, который должен создать нов лида.

У меня такой же вопрос

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

Здравствуйте, Дарья.

Вам необходимо настроить бизнес-процесс, стартовым сигналом которого будет сигнал добавления новой записи в объект "Активность" с типом "E-mail":

[URL=http://fastpic.ru/][IMG]http://i65.fastpic.ru/big/2014/1118/ef/2a5b6648…]

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

Наверное, вопрос будет смешной для гуру BPM, но рискну задать его. Итак, вопрос "чайника".
Подскажите, есть ли способ создать ярлык/ссылку/etc. для входа в строго определенную конфигурацию BPM без выбора конфигурации, переключения между полями и долгим вводом логина/пароля?

У меня такой же вопрос

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

Как Вариант, Вы можете сохранить закладку на "Панели закладок" но после того, как уже войдете в систему

Все равно авторизацию требует после попытки повторно открыть закладку. Google Chrome

Попробуйте в настройках Google Chrome сохранить логин и пароль для входа на сайт.

Не предлагается мне сохранение пароля при входе... Галка в хроме предлагать сохранение стоит
Файрфокс аналогично, не предлагает

"Александр Кудряшов" написал:Не предлагается мне сохранение пароля при входе...

У меня тоже пароль не предлагает сохранить, причем не только в хроме

1) зайти на сайт BPMonline
2) ввести логин, пароль
3) дождаться полной загрузки стартовой страницы
4) после этого, сохранить в панели закладок.

"Sergey Karpenko" написал:1) зайти на сайт BPMonline
2) ввести логин, пароль
3) дождаться полной загрузки стартовой страницы
4) после этого, сохранить в панели закладок.

Такой порядок не меняет сути - при повтором открытии страницы из закладок все равно открывается страница логина

Ребята, как бы там не складывались "танцы с бубном", каждый наш клиент требует безопасности данных в системе и автологин изначально противоречит правилам, вы должны это понимать. Что касается сохранения паролей, вы всегда можете узнать у наших коллег из google или подобных.

"Sergey Karpenko" написал:Ребята, как бы там не складывались "танцы с бубном", каждый наш клиент требует безопасности данных в системе и автологин изначально противоречит правилам, вы должны это понимать. Что касается сохранения паролей, вы всегда можете узнать у наших коллег из google или подобных.

В данной ситуации безопасность клиента меня в принципе не интересует.
Вопрос был лишь удобства для разработчика - мне не интересно при повторных входах тестировать авторизацию и ввод логина/пароля.
Тему думаю можно закрыть полностью, Google действительно полезнее. Всем спасибо

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

В файлике RunSettings.xml есть некоторые полезные параметры, которые могут быть полезными при работе:

GlobalSettingsDirectory=""

Параметр появился в версии 3.4.0. Используется для указания положения глобальных настроек пользователя (файла GlobalConfigs.xml). Он может находится на локальной машине, либо в сети. В случае использования этого параметра с параметром UserSettingsDirectory, в списке конфигураций будут отображаться конфигурации из обоих файлов.

UserSettingsDirectory=""

Указание пути к каталогу пользовательских настроек. Используется для настройки планировщика заданий и web-сервисов.

UserAppDataDirectory=""

Путь к настройкам пользовательских данных. Если не указано, то используется путь по умолчанию %appdata%\Terrasoft\!Version!\
К пользовательским данным относятся кэш, профиль, логи, список конфигураций.

SessionUserName=""

Имя пользователя от имени которого запускается TS

SessionPassword=""

Пароль пользователя от имени которого запускается TS

Поделиться

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

SessionPassword криптуется? или хранится в открытом виде?

"Владимир Соколов" написал:

SessionPassword криптуется? или хранится в открытом виде?


В открытом.

Также добавлю описание макросов, которые можно использовать:

1) {win} – каталог где установлена ОС
2) {sys} – системный каталог ОС
3) {tmp} – временный каталог ОС
4) {pf} – каталог «Program Files»
5) {usertscrmappdata} – каталог пользователя с данными CRM
6) {userdesktop} – путь к «Рабочему столу»
7) {userstartup} – «домашний» каталог пользователя
8) {tscrm} – каталог где установлена CRM
9) {userprofile} – профиль пользователя CRM
10) {userappdata} – каталог з данными о настройке ПО пользователя.

Замена макросов происходит для следующих параметров:
1) GlobalSettingsDirectory
2) UserSettingsDirectory
3) UserAppDataDirectory

Игорь, спасибо, полезная информация.

Немного поправлю, атрибут GlobalSettingsDirectory появился в последних сборках 3.3.2 и во всех старших версиях.

Здравствуйте, в связи с необходимостью массового развертывания клиента Террасофт, необходимо обеспечить автоматическое задание параметров связи с базой данных на SQL сервере. Прошу предоставить описание полей файла настроек соединения %AppData%\Terrasoft\3.4.0\Settings\Configs.xml с пояснением алгоритмов генерации или показать иной способ автоматической генерации настроек для конкретного пользователя.

Особенно интересует как получаются поля:
UID и ConnectionString (в случае если везде используется доменная авторизация)

Здравствуйте, Антон!

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

ConnectionString - это запакованные параметры подключения к базе данных, информация о пользователе и пароле в них не содержится.

таким образом, можно воспользоваться параметром GlobalSettings и указать путь к файлу Configs.xml на сетевом диске, и задать параметры подключения там.

Либо же, если вариант с сетевым файлом не подходит, достаточно скопировать строки элемента конфигурации всем пользователям, либо (если нет подключений, которые можно было бы перезатереть) - просто поместить файл в папку %AppData%\Terrasoft\3.4.0\Settings\Configs.xml

В результате у пользователя подключение уже будет настроено, и достаточно будет установить галочку "доменная авторизация" для входа

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

Добрый день!

Есть проблема с запуском клиента 3.3.1.124 на 64-битной Windows 7. Проблему с ошибкой ORA-12154 решил копированием клиента из папки "C:\Program Files (x86)\..." в папку "C:\Program Files\..." http://community.terrasoft.ru/blogs/5472. Но теперь после ввода пароля клиентское приложение стартует минут 20-25. Где искать корень зла?

У меня такой же вопрос

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

А в Windows Вы под администратором залогинены?

Запуск из под администратора, само собой + файрволл и антивирусное все попробовать отключить.
Еще бы предложил посмотреть что происходит на сервере - идут ли туда какие запросы и с какой интенсивностью

Запуск осуществляется под администратором, файервол и антивирус отрубил. На сервер запросы приходят, но как-то медленно (редко: один в несколько секунд). SQLMonitor ничего вообще не хочет показывать.

Во, вроде получилось победить отключением в службах "Защитника Windows" и "Брендмауэра". Но скорее всего виноват был планировщик пакетов на сетевом интерфейсе "Планировщик пакетов QoS". После перезагрузки клиент зашуршал.

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

Хочу сэмулировать данную ситуацию у себя на виртуалке и попробовать разобраться в проблеме.
Для этого хотелось бы получить больше информации:
1) Клиент
1.1) версия Win7 (Home, Enterprise...), язык, билд, сервис-пак...
1.2) Полная версия и тип (Runtime, Administrative, Instance...) клиента Oracle
2) Сервер
2.1) Полная информация об ОС (Win\Linux, битность, язык, SP, билд и т.д.)
2.2) Полная версия СУБД Oracle.

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

Terrasoft Support Team.

Клиенты использовались разные: ultimate, русский, 32-бита и home русский 64 бита. Эффект один и тот же. Оракл на клиенте 10.2.0.1, custom (+odbc, ole db, .net, oci). К сожалению, пользовательская машина с Win7 недоступна, экспериментировать не могу больше.

На сервере: win2k3 server EE 32bit, Oracle EE 10.2.0.3.0

Нашел возможное решение вашей проблемы.
Причина медленного соединения Win7 машин связана с тем, что в них внедрена возможность автонастройки некоторых параметров TCP/IP протокола.
Иногда при некоторых непонятных обстоятельствах этот механизм работает неправильно из-за чего может создавать большие задержки при передачи данных по сети.

Выполните в командной строке на клиентских машинах под правами администратора следующий скрипт:

netsh interface tcp set heuristics disabled
netsh interface tcp set global rss=disabled
netsh interface tcp set global autotuninglevel=disabled

P.S. проблема описана тут

Ок, спасибо, Сергей, попробую

После установки на Windows 7 32bit при запуске возникала ошибка:
"Ошибка открытия конфигурации. TCP Provider: Timeout error [258]."
Настройка UAC, брэндмауэра, антивирусного ПО не помогли.
Помогла рекомендация Филимоненко Сергея:

netsh interface tcp set heuristics disabled
netsh interface tcp set global rss=disabled
netsh interface tcp set global autotuninglevel=disabled

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

Спасибо за обратную информацию. Если будут возникать проблемы - обращайтесь. Постараемся помочь.

Terrasoft Support Team.

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

Добрый день,

в версии 3.1 необходимо настроить отображение реестра Котрагенты раздела Продажи при запуске TSCRM.

Не удалось найти решение самостоятельно и на форуме.

У меня такой же вопрос

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

Найдите сервис wnd_Main, в невизуальных сдвиньте необходимый раздел вверх.

Спасибо.
А нет ли способа отобразить нужный раздел, не меняя их порядка?

Можно, как вариант:
scr_Main, функция wnd_MainOnPrepare(Window)
добавляем в нее две строки в конце

amiSales.IsChecked = true;
amiSalesAccounts.IsChecked = true;

ООО "Лайнсервис"
www.ls-crm.ru

Спасибо огромное. то, что надо :)

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

Для того, чтобы запустить БП при условиях, например, Состояние = Выполнена, Результат = Требует изменений, Вам необходимо сделать некоторые доработки конфигурации:

В скрипте scr_TaskEdit реализовать следующую функцию:

function StartWFByTaskResultAndStatus(CompareStatusID, CompareResultID) {
         var Dataset = dlData.Dataset;
         var ResultID = Dataset.Values('ResultID');        
         var StatusID = Dataset.Values('StatusID');
         if (IsEmptyValue(ResultID) || IsEmptyValue(StatusID)) {
                   return;
         }
         if (StatusID != CompareStatusID || ResultID != CompareResultID) {
                   return;
         }
         var WorkflowID = '{9F1762FC-A82B-4807-B2C7-CA83CEF06690}';                 //указать ID нужного БП
         WFStartByID(WorkflowID, null, null);
}

Далее на событие OnDatasetAfterPost для DlData в функцию дописать следующий код:

var CompareStatusID = '{F598ECDB-4EEF-4FA8-9E69-A36B053501E5}';                       // указать ID необходимого состояния задачи из tbl_TaskStatus
         var CompareResultID = '{092822D2-4471-44BC-94D4-0BF272D81D47}';                     //указать ID необходимого результата задачи из tbl_TaskResult

         StartWFByTaskResultAndStatus(CompareStatusID, CompareResultID);
Обратите внимание, что у Вас к данному скрипту (scr_TaskEdit) должен быть добавлен скрипт scr_WorkflowUtils.

Поделиться

0 комментариев
Войдите или зарегистрируйтесь, чтобы комментировать