Добрый день всем.
Столкнулся с такой ошибкой:

core.js:631
user: Supervisor/7f3b869f-34f3-4f20-ab4d-7480a5fdf647
file: undefined
line: undefined
column: undefined
message: Необходимый параметр "name" не найден в объекте
date: Fri Jul 28 2017 12:55:14 GMT+0300 (Беларусь (зима))
moduleId: undefined
moduleName: undefined

Ошибка валиться при попытке сохранение схемы в местере или при переходе на вкладку "Бизнес-правила".
Может кто подсказать где может быть ошибка?

Нравится

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

Разобрался. Проблема в следующем: в схему добавлена кнопка. её доступность зависит от ShowSaveButton. при сохранении схемы выполняется метод flattenObject который Преобразовует объект схемы представления из иерархического вида в плоский. Он то встретив иерархию

{ "bindTo": "ShowSaveButton", "bindConfig": { "converter": function (value) { return !value; } } } 

и спотыкается...

{ "operation": "insert", "parentName": "LeftContainer", "propertyName": "items", "name": "GetOrederReportButton", "values": { itemType: Terrasoft.ViewItemType.BUTTON, caption: resources.localizableStrings.GetOrederReportButtonCaption, click: { bindTo: "onGetOrederReportButtonClick" }, "style": Terrasoft.controls.ButtonEnums.style.BLUE, "classes": { "textClass": "actions-button-margin-right" }, "enabled": { "bindTo": "ShowSaveButton", "bindConfig": { "converter": function (value) { return !value; } } } } }

 

Евгений, а Вы не подскажите, как исправить ошибку? У меня аналогичная проблема, но решение не вижу, спасибо! 

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

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

Добрый день.
В карточке обращения есть группа полей (например, Сроки), мне нужно скрыть\показать группу в зависимости от каких-либо условий (например, показать группу полей Сроки только на стадии "Решено").

Подскажите, как это сделать?

Пробовала сделать через бизнес-правила https://academy.terrasoft.ru/documents/technic-sdk/7-10/pravilo-bindpara... , но не получилось.

Нравится

2 комментария
Лучший ответ

как пример LeadPageV2 группа полей "Регистрационные данные"

attributes: {
...
//атрибут значением которого мы будем контролировать видимость группы полей
	"isLeadPageRegisterInfoVisible": {
		type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
		dataValueType: Terrasoft.DataValueType.BOOLEAN,
                value: false
	},
...
}
diff: {
...
//merge для конфигурационного объекта группы полей
	{
		"operation": "merge",
		"name": "LeadPageRegisterInfo",
		"values": {
                         //"биндинг" (привязка) значения свойства viewModel к атрибуту
                         "visible": {bindTo: "isLeadPageRegisterInfoVisible"}
		}
	},
...
},
methods: {
...
     "onEntityInitialized": function() {
              this.callParent(arguments);
              //сохраним в глобальной области видимости контекст карточки, для удобного доступа из консоли
              document.thisPageScope = this; 
     }
...
}

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

document.thisPageScope.set("isLeadPageRegisterInfoVisible", true);
//наблюдаем появившуюся группу полей
document.thisPageScope.set("isLeadPageRegisterInfoVisible", false);
//наблюдаем как группа полей была скрыта.

вам необходимо определить группу полей в diff секции карточки
и ёё свойство visible забиндить на атрибут (булево) значением которого в последствии управлять из Вашего клиентского кода, в зависимости от значения в атрибуте - группа полей будет скрыта или продемонстрирована.

как пример LeadPageV2 группа полей "Регистрационные данные"

attributes: {
...
//атрибут значением которого мы будем контролировать видимость группы полей
	"isLeadPageRegisterInfoVisible": {
		type: Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN,
		dataValueType: Terrasoft.DataValueType.BOOLEAN,
                value: false
	},
...
}
diff: {
...
//merge для конфигурационного объекта группы полей
	{
		"operation": "merge",
		"name": "LeadPageRegisterInfo",
		"values": {
                         //"биндинг" (привязка) значения свойства viewModel к атрибуту
                         "visible": {bindTo: "isLeadPageRegisterInfoVisible"}
		}
	},
...
},
methods: {
...
     "onEntityInitialized": function() {
              this.callParent(arguments);
              //сохраним в глобальной области видимости контекст карточки, для удобного доступа из консоли
              document.thisPageScope = this; 
     }
...
}

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

document.thisPageScope.set("isLeadPageRegisterInfoVisible", true);
//наблюдаем появившуюся группу полей
document.thisPageScope.set("isLeadPageRegisterInfoVisible", false);
//наблюдаем как группа полей была скрыта.
Показать все комментарии

Есть константа
Terrasoft.core.enums.SysValue.CURRENT_USER
и
Terrasoft.core.enums.SysValue.CURRENT_USER_Contact

Но в моем случае я сделал привязку документа к объекту Сотрудники.
Как мне его использовать чтобы при создании автоматом подставлялось значение сотрудника?

Нравится

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

"Юсупов Марат" написал:Как мне его использовать чтобы при создании автоматом подставлялось значение сотрудника?

Маленький ЛикБез:
Есть Пользователи это определенный тип административных юнитов (SysAdminUnits)
Есть Контакты - это обособленная сущность, но у каждого пользователя есть привязка к контакту, тезис: У каждого пользователя есть один, и только один связанный с ним контакт.

"Юсупов Марат" написал:Но в моем случае я сделал привязку документа к объекту Сотрудники.

я так понимаю речь идет об объекте Employee (Сотрудник)
Это обособленный объект и в нем в свою очередь в виде справочных полей присутствует поле "Контакт"

"Юсупов Марат" написал:Как мне его использовать чтобы при создании автоматом подставлялось значение сотрудника?

Видимо вы имеете в виду кейс, где текущий пользователь, у которого имеется соответствующая запись в объекте Сотрудник (где указан его контакт), автоматически проставлялся в справочном поле ссылающимся на объект Сотрудник в текущей карточке ?
так ?

Да.
Попытался сделать хитрый маневр.

SetManager: function() {
				//debugger;
				var esq = this.Ext.create("Terrasoft.EntitySchemaQuery", {
					rootSchemaName: "Employee"
				});
				esq.addColumn("Id"); //id контакта в Сотрудники
				var filter = this.Terrasoft.createColumnFilterWithParameter(
						this.Terrasoft.ComparisonType.EQUAL, "Contact", Terrasoft.SysValue.CURRENT_USER_CONTACT.value);
				esq.filters.addItem(filter);
 
				esq.getEntityCollection(function(response) {
					if (response && response.success) {
						if (response.collection.getCount() > 0) {
							var result = response.collection.getItems()[0];
							this.set("UsrManager", result.get("Id"));
						}
					}
				}, this);
 
			},

Но UsrManager заполняется undefined.....хотя запрос отрабатывает.

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

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

Добрый день!
В таких разделах bpm, как Контакты, Контрагенты, Лиды, Продажи есть возможность зафиксировать результаты звонка, отправить email, написать сообщение и создать задачу через соответствующие кнопки.
Подскажите пожалуйста, при фиксировании звонка в данных разделах как изменить значение Направление звонка по умолчанию с Входящего на Исходящий (смотреть вложенный файл)?
Заранее благодарю!

Нравится

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

Александр, заместите схему Activity, и в замещенной схеме измените значение по умолчанию для поля CallDirection http://joxi.ru/a2XZV4zh190Y8r

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

Эта настройка хранится в схеме CallMessagePublisherPage, пакета ActionsDashboard, вот функция:

				setDefaultCallDirection: function() {
					var query = this.Ext.create("Terrasoft.EntitySchemaQuery", {
						rootSchemaName: "CallDirection"
					});
					query.addColumn("Name");
					var recordId = ConfigurationConstants.Activity.ActivityCallDirection.Incoming;
					query.getEntity(recordId, function(result) {
						this.setDefaultCallDirectionQueryHandler(result);
					}, this);
				},

Для изменения необходимо заместить и изменить значение в этой схеме.

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

Имеется:
Объект1 у него Раздел1
Объект2 у него Раздел2 и Деталь1 привязанная к Разделу 1

Кейс.

Сотрудник в Разделе1 нажимает у детали1 + чтобы создать запись.
Создается запись О1
Заполняет данные в разделе 2...и запускает БП, который до заполняет поля в разделе 2.
Потом сотрудник нажимает Сохранить-Закрыть.
И тут автоматом создается О2.

У меня вопрос почему происходит автоматическое создание еще записи ?

Этого не происходит если:
Сотрудник в Разделе1 нажимает у детали1 + чтобы создать запись.
Создается запись О1
Заполняет данные в разделе 2...
Потом сотрудник нажимает Сохранить-Закрыть.
Открывает О1 и запускает БП, который до заполняет поля в разделе 2.

Нравится

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

Предположу...т.к. О2 создается из Раздела1 О1 то и при создании система чудит.

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

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

В разделе "Договоры" создали деталь "Счета договора" соответственно это Объект - Счета.

Пользователь создает в детали "Счет договора" , счет нажатием знака + на детали.
Создается новая запись Счет, с привязкой к Счету. С номером 1

Потом у нас есть некие шаблоны Строки счета, с определенными продуктами и кол-во.
Пользователь запускает БП "заполнить строки счета", указывает шаблон и строки счета заполняются.

До заполнив остальные поля, сотрудник сохраняет счет и закрывает.
И тут создается новый счет сразу , С номером 2.

Предположу..что есть заложена логика при создании записи из детали и послед-й возвратом на раздел где нажималась +

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

Добрый день!
Есть ли здесь люди которые могут подробно описать процесс модифицирования локального поиска дублей по Контрагентам (предположим нужно сделать поиск по одному из новых полей и новой детали)?

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

Нравится

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

Здравствуёте!
Реализовать поиск дублей при сохранении достаточно не просто. Но если вкратце:
1. Заместить метод getDataForFindDuplicatesService в DuplicatesSearchUtilitiesV2
2. Унаследоваться от класса SingleRequest из SearchDuplicatesService и добавить своё свойство.
3. Создать свой SingleRequesListener чтобы заменить вызов SingleRequest на свой класс
4. Унаследоваться от DeduplicationProcessing и изменить методы AddElementsToRow и GetPreparedXml из SearchDuplicatesService
5. В хранимкке tsp_FindDuplicate нужно изменить под себя CreatingObjectInfo

На счёт "произвольного вызова" - можно, просто надо вызывать тот же метод, что и при сохранении вызывает поиск дублей.

"Мотков Илья" написал:На счёт "произвольного вызова" - можно, просто надо вызывать тот же метод, что и при сохранении вызывает поиск дублей.

Дело в том что вызывается метод this.findOnSave(callback, scope) со своим скоупом и колбэком, а откуда они берутся не понятно, потому что гуляя так по колбэку внутрь приходишь к all-combined.js и всё, конец..

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

Добрый день. При запуске БП с элементом "изменение данных" получаю ошибку в элементе:
"Превышено ограничение 20000 записей при выгрузке данных объекта"
Как обойти это ограничение?
Нашел системную настройку "Максимальное количество импортируемых записей из Excel" с таким же значением.
Но его изменение не помогло.

Нравится

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

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

Конечно не помогло - ограничение на уровне web.config приложения:smile:, параметр maxEntityRowCount.

Да, поддержка on-demand уже просветила :smile:

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

Всем привет!

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

http://shot.qip.ru/00SkLf-315RJco8hM/

Заранее спасибо за советы.

Нравится

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

"Тёскин Дмитрий Валерьевич" написал:но вкладки отображаются на странице совсем не так как в мастере

Потому что террасофт не смог во вкладки. Более того, постоянно появляется надоедливая "лента" в новых разделах или передвигается в начало в старых. короче говоря - ужас

"Тёскин Дмитрий Валерьевич" написал: перетасовать вкладки через diff вручную?

через move и index сдвигать в нужном порядке. Или у своих собственных задать порядок через index

Данила, привет! Спасибо за ответ.

"Варфоломеев Данила" написал:Потому что террасофт не смог во вкладки.

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

Пытаюсь так делать, но почему-то всё равно не получается.
Попытался также описать merge для всех существующих вкладок и прописать каждому index в том порядке, который нужен (0, 1, 2 и т.д.), предварительно удалив все move, но так тоже пока не получается.
Какая-то мелочь, а столько геморроя.

"Тёскин Дмитрий Валерьевич" написал:Какая-то мелочь, а столько геморроя.

можно провереным способом решить: сделать remove вкладки, а потом insert(перекопировать с базовой страницы при необходимости) с индексом

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

Добрый день!

В бизнес-процессах есть возможность создавать активности с помощью элемента "Выполнить задачу" или "Добавить данные" в объект Activity

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

Спасибо!

Нравится

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

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

1. Визуальные.
При создании задачи через элемент "Выполнить задачу" мы можем четко ограничивать пользователя в выборе предоставляемых результатов завершения активности. При использовании элемента "Добавить данные" при данном кейсе придётся на уровне схемы подменять фильтрацию поля результат, что по факту трудоёмко и необходимо вводить дополнительные флаги к активности, мол, что это за активность открыта и какие результаты нужно в ней показывать, что в свою очередь не применяется для схем миникарточек активности.
Т.е. допустим вы добавили 3 новых варианта, привязали их к категории выполнить и типу Задача, если править только схему карточки Активности то в карточке всё будет гуд отображаться, но при этом в миникарточке активности станут доступны все нововведенные результаты.
Плюс при использовании Выполнить задачу вы ограничиваетесь потоками выполнения в зависимости от выбранного результата, тогда как при "Добавить данные" вам необходимо под каждый тип активностей создавать отдельный БП по обработке результатов активности.

2. При работе с данными колонок Активности и сторонними параметрами БП.
При создании через добавить данные у вас не возникнет проблем с заполнением какой-то кастомной колонки и set'е туда значения из параметра БП.
При создании через Выполнить задачу вы ограничены определенным набором доступных колонок, которые можно посмотреть через расширенные настройки. Если вам потребуется что-то устанавливать в нововведенные колонки значения, то в целом можно использовать С# модуль под названием "После сохранения активности" в этом же элементе. Но есть одно но, context выполнения этого кода ограничен только параметрами самого элемента Выполнить задачу, т.е. простым путём у вас не получится выполнить SetColumnValue со сторонним параметром БП, нужно будет этот сторонний параметр пробрасывать в контекст и потом парсить (если это потребуется).

Вот с чем мы столкнулись в последний месяц при работе с этими элементами.
На мой взгляд лучше всего использовать Выполнить задачу, так как даже на уровне js'a будет проще выполнять иные действия при клике на тот или иной результат, но это сугубо моё мнение.

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

Добрый день! Создала задание :

string schedulerJobGroupName = "AvtoSynchWithLDAPProcessGroup"; //- Любое имя
string jobProcessName = "SynchWithLDAPProcess"; //- Название процесса
string schedulerJobName = "AvtoSynchWithLDAPProcessJob"; //- Любое имя
TimeSpan start = TimeSpan.Parse("08:00");
TimeSpan end = TimeSpan.Parse("10:00");
TimeSpan currentTime = DateTime.Now.TimeOfDay;

if ((currentTime > start) && (currentTime end))
{      
        int startOffset = 900;
        AppScheduler.RemoveJob(schedulerJobName, schedulerJobGroupName);
        var job = AppScheduler.CreateProcessJob(schedulerJobName, schedulerJobGroupName, jobProcessName, UserConnection.Workspace.Name, UserConnection.CurrentUser.Name);
        var trigger = new SimpleTrigger(schedulerJobName, schedulerJobGroupName, DateTime.UtcNow.AddSeconds(startOffset));
        AppScheduler.Instance.ScheduleJob(job, trigger);
       
}
else
{
        int startOffset = 4;
        AppScheduler.RemoveJob(schedulerJobName, schedulerJobGroupName);
        var job = AppScheduler.CreateProcessJob(schedulerJobName, schedulerJobGroupName, jobProcessName, UserConnection.Workspace.Name, UserConnection.CurrentUser.Name);
        var trigger = new SimpleTrigger(schedulerJobName, schedulerJobGroupName, DateTime.UtcNow.AddHours(startOffset));
        AppScheduler.Instance.ScheduleJob(job, trigger);
}
return true;

Но при запуске выходит ошибка:

Date: 25.07.2017 18:40:45
Date (UTC): 25.07.2017 15:40:45

Exception Message: Невозможно получить значение колонки Name, так как она не была загружена
Exception Type: Terrasoft.Common.InvalidObjectStateException
Exception Source: Terrasoft.Core

Exception Stack Trace:
в Terrasoft.Core.Entities.EntityColumnValue.get_Value()
в Terrasoft.Core.Entities.Entity.GetTypedColumnValue[TResult](String valueName)
в Terrasoft.Core.Process.AvtoSynchWithLDAPProcess.AddToSchedulerScriptTaskExecute(ProcessExecutingContext context)
в Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)
в Terrasoft.Core.Process.Process.ProcessQueue(ProcessExecutingContext context)
в Terrasoft.Core.Process.ProcessActivity.Execute(ProcessExecutingContext context)
в Terrasoft.Core.Process.Process.Execute(UserConnection userConnection)
в Terrasoft.WebApp.VwSysProcessListPageEventsProcess`1.RunProcessScriptTaskExecute(ProcessExecutingContext context)
в Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)
в Terrasoft.WebApp.VwSysProcessListPageEventsProcess`1.ProcessQueue(ProcessExecutingContext context)
в Terrasoft.WebApp.VwSysProcessListPageEventsProcess`1.OnExecuted(Object sender, ProcessActivityAfterEventArgs e)
в Terrasoft.Core.Process.ProcessFlowElement.Execute(ProcessExecutingContext context)
в Terrasoft.WebApp.VwSysProcessListPageEventsProcess`1.ProcessQueue(ProcessExecutingContext context)
в Terrasoft.WebApp.BaseGridPageEventsProcess`1.ThrowEvent(ProcessExecutingContext context, String message)
в Terrasoft.WebApp.VwSysProcessListPageEventsProcess`1.ThrowEvent(ProcessExecutingContext context, String message)
в Terrasoft.UI.WebControls.PageSchemaUserControl.ThrowEvent(String message)
в Terrasoft.WebApp.VwSysProcessListPageSchemaUserControl.RunProcessButtonClick(Object sender, EventArgs e)
в Terrasoft.UI.WebControls.Controls.ComponentAjaxEvent.OnEvent(Object sender, AjaxEventArgs e)
в Terrasoft.UI.WebControls.Controls.Observable.FireAsyncEvent(String eventName, ParameterCollection extraParams)
в Terrasoft.UI.WebControls.Controls.ScriptManager.RaisePostBackEvent(String eventArgument)
в Terrasoft.UI.WebControls.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument)
в System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

Form:
submitAjaxEventConfig: {"config":{"viewStateMode":"include","extraParams":{}}}
__EVENTTARGET: ScriptManager
__EVENTARGUMENT: PageContainer_VwSysProcessSectionPage_Grid_RunProcessButton|event|Click
__EVENTVALIDATION: /wEdAAOvVXD1oYELeveMr0vHCmYPrFHW+cRWVtoBd62cCaTjNTaERVpf4hfzb6sOLwCZwG3iwlUNutEg7pkrfiOU+6PFHdO6xQ==
PageContainer$VwSysProcessSectionPage$BaseFolder$TreeGrid_SM: [{"Id":"48ac198d-3dc2-405b-bfd7-5bfd363160fd","Name":"Все процессы","FolderTypeId":"9dc5f6e6-2a61-4de8-a059-de30f4e74f24","FolderTypeName":"Статическая","FolderType_Order":2}]
PageContainer$VwSysProcessSectionPage$Grid$TreeGrid_SM: [{"Id":"5b272b28-60fb-458c-87ef-799e203b6ed7","Caption":"Синхронизировать данные о пользователях с LDAP (автомат)","Name":"AvtoSynchWithLDAPProcess","SysSchemaIsInherited":false,"SysSchemaStateInSolution":0,"SysSchemaFolderId":"26f0ae40-c453-4b43-aab9-74d44fab9515","SysSchemaFolderName":"BPMonline CRM","SysPackageId":"8d3fd2a7-c3e3-42d1-ae09-34167e1cadde","SysPackageName":"CustomPackage","MetaDataModifiedOn":"2017-07-25T18:36:00","SysSchemaManagerName":"ProcessSchemaManager","SysSchemaInSolutionVersion":26}]
PageContainer$VwSysProcessSectionPage$DetailGridContainer9108b52371ec480587413e79ba1bc9f3$TreeGrid_SM: [{"Id":"7acd0d26-2a90-431f-a34d-7b98378e59af","FolderId":"48ac198d-3dc2-405b-bfd7-5bfd363160fd","FolderName":"Все процессы","CreatedOn":"2017-07-25T17:59:17","CreatedById":"df41e401-9385-4e5d-9c4f-42d5e36b9f64","CreatedByName":"Астапеева Анастасия Александровна","ModifiedOn":"2017-07-25T17:59:17","ModifiedById":"df41e401-9385-4e5d-9c4f-42d5e36b9f64","ModifiedByName":"Астапеева Анастасия Александровна","ProcessListeners":0,"VwSysProcessId":"5b272b28-60fb-458c-87ef-799e203b6ed7"}]
customDataField: {tempData:"{MainActiveTabId:\"PageContainer_a44185aa4ca64df9b5473ab4c9eb700d_ff9f207cf36b14104a931c6f65e50343_e6a6bf2d0d784062adc3b1914c85df3a\",PageContainer_VwSysProcessSectionPage_DetailsTabPanel_Collapsed:\"false\",PageContainer_VwSysProcessSectionPage_DetailsTabPanel_ActiveTab:\"0\"}",pageContainers:"[\"PageContainer$CtiPageContainer\",\"PageContainer$VwSysProcessSectionPage\",\"PageContainer$VwSysProcessSectionPage$BaseFolder\",\"PageContainer$VwSysProcessSectionPage$Grid\",\"PageContainer$VwSysProcessSectionPage$analyticsGridPageContainer\",\"PageContainer$VwSysProcessSectionPage$DetailGridContainer9108b52371ec480587413e79ba1bc9f3\",\"PageContainer\"]",instanceId:"6591ba57-65e7-4649-ad94-defe454538ca",pageUId:"5e5f9a9e-aa7d-407d-9e1e-1c24c3f9b59a",SysModule_selectedFolderId:"48ac198d-3dc2-405b-bfd7-5bfd363160fd",SysModule_activeDataSource:"PageContainer_VwSysProcessSectionPage_Grid_DataSource",tempUserContext:"[\"__VIEWSTATE6591ba57-65e7-4649-ad94-defe454538ca\"]"}
PageContainer_VwSysProcessSectionPage_BaseFolder_DataSource_ActiveRowPrimaryColumnValue: 48ac198d-3dc2-405b-bfd7-5bfd363160fd
PageContainer_VwSysProcessSectionPage_BaseFolder_DataSource_SelectedItemPrimaryColumnValues: ["48ac198d-3dc2-405b-bfd7-5bfd363160fd"]
PageContainer_VwSysProcessSectionPage_Grid_DataSource_ActiveRowPrimaryColumnValue: 5b272b28-60fb-458c-87ef-799e203b6ed7
PageContainer_VwSysProcessSectionPage_Grid_DataSource_SelectedItemPrimaryColumnValues: ["5b272b28-60fb-458c-87ef-799e203b6ed7"]
PageContainer_VwSysProcessSectionPage_DetailGridContainer9108b52371ec480587413e79ba1bc9f3_DataSource_ActiveRowPrimaryColumnValue: 7acd0d26-2a90-431f-a34d-7b98378e59af
PageContainer_VwSysProcessSectionPage_DetailGridContainer9108b52371ec480587413e79ba1bc9f3_DataSource_SelectedItemPrimaryColumnValues: ["7acd0d26-2a90-431f-a34d-7b98378e59af"]
PageContainer_Collapsed: false
PageContainer_MultiLevelTabs_ActiveTab: PageContainer_a44185aa4ca64df9b5473ab4c9eb700d_ff9f207cf36b14104a931c6f65e50343_e6a6bf2d0d784062adc3b1914c85df3a
PageContainer_SearchEdit: Поиск>
PageContainer_CtiPageContainer_NumberEdit: Введите номер телефона>
PageContainer_CtiPageContainer_TransferNumberEdit: Введите номер телефона>
ext-comp-1018: true
ext-comp-1007_ActiveTab: ext-comp-1008
ext-comp-1010_ActiveTab: ext-comp-1011
PageContainer_TopControlLayout_Collapsed: false
PageContainer_CtiControlLayout_Collapsed: false
PageContainer_ContentControlLayout_Collapsed: false
PageContainer_TopLeftControlLayout_Collapsed: false
PageContainer_TopRightControlLayout_Collapsed: false
PageContainer_LogoControlLayout_Collapsed: false
PageContainer_NavigationControlLayout_Collapsed: false
PageContainer_NavigationButtonsControlLayout_Collapsed: false
PageContainer_ControlLayout1_Collapsed: false
PageContainer_MultiLevelTabs_tools_Collapsed: false
PageContainer_CtiPageContainer_Collapsed: false
PageContainer_CtiPageContainer_MainControlLayout_Collapsed: false
PageContainer_VwSysProcessSectionPage_Collapsed: false
PageContainer_VwSysProcessSectionPage_MainControlLayout_Collapsed: false
PageContainer_VwSysProcessSectionPage_LeftControlLayout_Collapsed: false
PageContainer_VwSysProcessSectionPage_RightControlLayout_Collapsed: false
PageContainer_VwSysProcessSectionPage_CustomSearchContainer_Collapsed: false
PageContainer_VwSysProcessSectionPage_FolderLayout_Collapsed: false
PageContainer_VwSysProcessSectionPage_FilterEditLayout_Collapsed: false
PageContainer_VwSysProcessSectionPage_BaseFolder_Collapsed: false
PageContainer_VwSysProcessSectionPage_BaseFolder_TreeGrid_Collapsed: false
PageContainer_VwSysProcessSectionPage_FilterEdit_Collapsed: false
PageContainer_VwSysProcessSectionPage_FilterEdit_toolbar_Collapsed: false
PageContainer_VwSysProcessSectionPage_GridTabPanel_Collapsed: false
PageContainer_VwSysProcessSectionPage_GridTabPanel_ActiveTab: 0
PageContainer_VwSysProcessSectionPage_GridTab_Collapsed: false
PageContainer_VwSysProcessSectionPage_GridTab_TabActivated: true
PageContainer_VwSysProcessSectionPage_DetailsTabPanel_Collapsed: false
PageContainer_VwSysProcessSectionPage_DetailsTabPanel_ActiveTab: 0
PageContainer_VwSysProcessSectionPage_DetailTab9108b52371ec480587413e79ba1bc9f3_Collapsed: false
PageContainer_VwSysProcessSectionPage_DetailTab9108b52371ec480587413e79ba1bc9f3_TabActivated: true
PageContainer_VwSysProcessSectionPage_Grid_Collapsed: false
PageContainer_VwSysProcessSectionPage_Grid_ButtonsControlLayout_Collapsed: false
PageContainer_VwSysProcessSectionPage_Grid_TreeGrid_Collapsed: false
PageContainer_VwSysProcessSectionPage_DetailGridContainer9108b52371ec480587413e79ba1bc9f3_Collapsed: false
PageContainer_VwSysProcessSectionPage_DetailGridContainer9108b52371ec480587413e79ba1bc9f3_ButtonsControlLayout_Collapsed: false
PageContainer_VwSysProcessSectionPage_DetailGridContainer9108b52371ec480587413e79ba1bc9f3_TreeGrid_Collapsed: false
PageContainer_VwSysProcessSectionPage_BaseFolder_DataSource_ActiveRow: {"isNew":false,"changes":null}

SessionID: vjhiulo4tqt3g2qjohn3szj5
Request URL: /0/ViewPage.aspx?Id=5e5f9a9e-aa7d-407d-9e1e-1c24c3f9b59a&ActiveTabId=PageContainer_a44185aa4ca64df9b5473ab4c9eb700d_ff9f207cf36b14104a931c6f65e50343_e6a6bf2d0d784062adc3b1914c85df3a
Request Path: /0/ViewPage.aspx
Request UrlReferrer: http://afina.pbank.ru/0/ViewPage.aspx?Id=5e5f9a9e-aa7d-407d-9e1e-1c24c3f...
Request Type: POST
User Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.89 Safari/537.36
User Host Address: 10.1.3.154
User: baal
Is Authenticated: True
Authentication Type: Forms
Is Secure Connection: False

Application Version: 5.4.0.2460
Application Path: C:\WebAppReloaded\App\Terrasoft.WebApp\
Application Virtual Path: /0
Application Trust Level: Full
Machine Name: AFINA
Is Local: False

Process ID: 11108
Process Name: w3wp.exe
Process Account Name: PBANK\adminmts
Thread Account Name: PBANK\adminmts
OS Version: Microsoft Windows NT 6.1.7601 Service Pack 1
Net Framework Version: 4.0.30319.36365
DBExecutor Type: MSSqlExecutor

Нравится

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

Не знаю в чем была ошибка... Но получилось сделать так:

string schedulerJobGroupName = "AvtoSynchWithLDAPProcessGroup"; //- Любое имя
string jobProcessName = "SynchWithLDAPProcess"; //- Название процесса
string schedulerJobName = "AvtoSynchWithLDAPProcessJob"; //- Любое имя
TimeSpan start = TimeSpan.Parse("08:00");
TimeSpan end = TimeSpan.Parse("10:00");
TimeSpan currentTime = DateTime.Now.TimeOfDay;
 
if ((currentTime > start) && (currentTime < end))
{	
	int startOffset = 15;
	AppScheduler.ScheduleMinutelyProcessJob(schedulerJobName, schedulerJobGroupName, jobProcessName, UserConnection.Solution.Name, UserConnection.CurrentUser.Name, startOffset);
 
} 
else
{
	int startOffset = 240;
	AppScheduler.ScheduleMinutelyProcessJob(schedulerJobName, schedulerJobGroupName, jobProcessName, UserConnection.Solution.Name, UserConnection.CurrentUser.Name, startOffset);
}
return true;

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

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

Дело в том, что при запуске из QRTZ_TRIGGERS процесс стартует по заранее определенному расписанию. Рекомендую использовать CRON выражение, с его помощью можете задать необходимый Вам промежуток времени, допустим, каждый день в 3 ночи.

"Мотков Илья" написал:

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

Дело в том, что при запуске из QRTZ_TRIGGERS процесс стартует по заранее определенному расписанию. Рекомендую использовать CRON выражение, с его помощью можете задать необходимый Вам промежуток времени, допустим, каждый день в 3 ночи.


А если мне нужно, каждый день с 8 до 10 каждые 15 минут, а с 10 до 8 каждые 4 часа, при этом ручной запуск не будет выполняться (кроме первого раза) выражение CRON сможет так реализовать?

Анастасия, могут быть разные варианты.

Можно создать по триггеру на каждый запуск в определённое время суток (8:00, 8:15, ..., 10:00, 14:00, ...). А можно при каждом запуске корректировать триггер с вычисленной датой следующего запуска (или удалять и создавать новый).

Посмотреть, какие бывают выражения для триггеров и какое время получится по выражению, можно при помощи калькулятора http://www.cronmaker.com/.

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

Анастасия, могут быть разные варианты.

Можно создать по триггеру на каждый запуск в определённое время суток (8:00, 8:15, ..., 10:00, 14:00, ...). А можно при каждом запуске корректировать триггер с вычисленной датой следующего запуска (или удалять и создавать новый).

Посмотреть, какие бывают выражения для триггеров и какое время получится по выражению, можно при помощи калькулятора http://www.cronmaker.com/.


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

В базе данных вся информация о триггерах кварца расположена в таблицах с названием, начинающимся на QRTZ. Вероятно, название процесса где-то в таблице QRTZ_JOB_DETAILS в поле JOB_DATA. Но там всё нечитаемо, сжато во внутреннем формате Quartz.

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

В базе данных вся информация о триггерах кварца расположена в таблицах с названием, начинающимся на QRTZ. Вероятно, название процесса где-то в таблице QRTZ_JOB_DETAILS в поле JOB_DATA. Но там всё нечитаемо, сжато во внутреннем формате Quartz.


Печаль... Все-равно спасибо большое.

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

Анастасия, могут быть разные варианты.

Можно создать по триггеру на каждый запуск в определённое время суток (8:00, 8:15, ..., 10:00, 14:00, ...). А можно при каждом запуске корректировать триггер с вычисленной датой следующего запуска (или удалять и создавать новый).

Посмотреть, какие бывают выражения для триггеров и какое время получится по выражению, можно при помощи калькулятора http://www.cronmaker.com/.

Кстати вот еще интересная статья :
https://www.ibm.com/developerworks/ru/library/j-quartz/index.html

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