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

Пожалуйста, расскажите, как можно реализовать работу следующего механизма:
1. При нажатии на какую-либо кнопку (например, выпадающее меню) открывается проводник.
2. Выбор файла на странице для последующей передачи на сервер.

BPMOnline 7.x

Нравится

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

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

А почему не подходит использование детали "Файлы и ссылки" (FileDetailV2)?

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

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

А почему не подходит использование детали "Файлы и ссылки" (FileDetailV2)?


Спасибо. Разбираюсь. А как можно потом использовать загруженный файл для наполнения таблицы в бд ? (например .txt)

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

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

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

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

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


Дело в том, что могут быть файлы с разным форматом и большим объемом. Интересует именно вариант с программированием. Уже есть класс, заполняющий коллекцию из файла.
Пожалуйста, расскажите подробнее о том, как взять файл с детали и распарсить.

"dogfox.tc" написал:как взять файл с детали и распарсить.

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

Файлы деталей лежат в таблицах с названием раздела+file, например, ContactFile, AccoutFile. Сам файл находится в колонке Data в бинарном виде.

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

Вот статья по составлению ESQ запросов: https://academy.terrasoft.ua/documents/technic-sdk/7-6-0/ispolzovanie-r…

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

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

не нашёл в документации информации о структуре данных авторизованного в bpm'online пользователя. Эта информация необходима для реализации API, к которому будет обращаться модуль bpm'online. Т.е. обращение будет идти изнутри наружу.

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

Нравится

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

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

Данные пользователя хранятся в таблице SysAdminUnit, его привязки к ролям в SysAdminunitInRole.

Спасибо

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

Здравствуйте, коллеги, подскажите, пожалуйста, как можно в запустить стандартный элемент процесса в цикле? Например есть коллекция e-mail и для каждого из них нужно выполнить стандартные элемент процесса "Создать задачу" или "Отправить е-mail"

Нравится

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

В таблице этой коллекции делаю некое поле-триггер (или использую имеющееся).
Затем в основном процессе меняю это поле для всех нужных записей.
И дальше есть другой процесс, который стартует при изменении этого триггерного поля. Ну, и в конце этого второго процесса триггерное поле сбрасываю обратно, если нужно

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

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

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

Где правильно это реализовать? В каком скрипте: окна, датасета или грида.

Спасибо.

Нравится

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

Реализовала в обработчике события OnDatasetAfterAppend (на рисунке pic1)

function dlDataOnDatasetAfterAppend(Dataset)
{
например:
Dataset.Values('CreatedByID') = Connector.CurrentUser.ContactID;

но это работает, если CreatedByID существует в Dataset, а если на окне есть поле из другого датасета?

как же ссылатся на это поле, чтобы дать значение ?

edtПоле.Value = значение
Microsoft JScript runtime error: Object doesn't support this property or method
Self.ComponentsByName('edtПоле').Value = значение
Microsoft JScript runtime error: Object doesn't support this property or method

Спасибо.

Не совсем понял.
Объясните подробнее, что именно у Вас в окне, какие поля и датасеты, что Вы хотите сделать.

Задача стоит такая:
Надо, чтобы при открытии окна, некоторые поля окна получили значения.

Данное окно состоит из 3-х датасетов: dltata(это основной датасет), dlDataContactCredit и dlContact.(pic2)
Поле CreatedByID-из датасета dltata(pic3), а поле ContactCreditNumber-из датасета dlDataContactCredit(pic4).

в событии function dlDataOnDatasetAfterAppend(Dataset) // Dataset = dltata (посмотрела по дебаггеру)

данное присвоение
Dataset.Values('CreatedByID') = Connector.CurrentUser.ContactID;
работает, но
Dataset.Values('ContactCreditNumber') = "123";
не работает, выдает ошибку 'DataField ContactCreditNumber' is not assigned, так как в dltata этого поля нет. Оно в dlDataContactCredit.

Как задать значение полю ContactCreditNumber ?

Спасибо.

Вы что-то очень странное делаете.
Основной датасет dlData — при нажатии «ОК» в соответствующей таблице в базе создаётся новая запись и в ней эти поля заполнены значениями по умолчанию, если пользователь на карточке вручную не изменил. А зачем другие датасеты? Там должна добавляться новая запись или просто будет выбираться значение из списка?

Может, прямо обращаться к полям dlDataContactCredit.Dataset?

Другие датасеты только для чтения.
Те поля, которые не из основного датасета(dlData) не будут менятся(они readOnly). И чтобы получить значения из других датасетов, я использовала

function RefreshDetailDataByParentID(ParentID, ChildDataset, ChildFilterName, DoNotDisableAllFilters) из scr_DB
Эта функция делает следующее:
ApplyDatasetFilter(ChildDataset, ChildFilterName, ParentID, true);
ChildDataset.Open(); здесь работает запрос, со всеми полями
которые есть в ChildDataset и поля на окне автомотически заполняются.

Для dlContact этот подход уместен, так как на окне есть много полей из этого датасета.

Но для dlDataContactCredit, на окне лишь одно поле из этого датасета, да и значение которое поле должно получить, в конкретной задаче известно, поэтому не имеет смысла запрашивать данные.

Поэтому я подумала, будет быстрее напрямую дать значение, но не получается.
var ContactCreditDataset = Self.ComponentsByName('dlDataContactCredit').Dataset;
ContactCreditDataset.Values('XXX') = Self.Attributes('NotifyObject').Attributes.Values('Attribute');

Ошибка выполнения метода 'dlDataOnDatasetAfterAppend'. Field 'XXX' not found.

Во всяком случае, с помощью RefreshDetailDataByParentID вопрос решается.

Вам не надо делать вставку новой записи в это поле, а просто устанавливать значение поля.
Или же вовсе отказаться от дополнительных датасетов и заполнять значения контролов программно.

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

Есть несколько способов установки значений по умолчанию (примеры приведу для контрагента):

  1. 1. Создать свою функцию в скрипте окна редактирования (scr_AccountEdit):
    function SetDefValues() {
    	var IsAppendRec = (dlData.Dataset.State == dstInsert);
    	AccountEdit.IsAppendRec = IsAppendRec;
    	if (!IsAppendRec) {
    		return;
    	}
    	edtCode.DataField.Value = '456';
    } 

    После чего функцию SetDefValues вызвать вызвать из события окна wnd_AccountEditOnPrepare:

    function wnd_AccountEditOnPrepare(Window) {
    	Initialize();
       	wnd_BaseDBEditOnPrepare(Window);
     
    	SetDefValues();	
    }
  2. 2. Устанавливать значения по умолчанию для каждого источника данных (датасет) на событии OnDatasetAfterAppend:
    function dlDataOnDatasetAfterAppend(Dataset) {
    	Dataset('EmployeesNumber') = '987';
    	Dataset.DataFields('Name').Value = '654';
    	Dataset.DataFields('OfficialAccountName').ValAsStr = '321';
    	Dataset.ValAsStr('Address') = 'Address';
    }

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

  3. 3. Устанавливать значения по умолчанию для глобального (пример, ds_Account) источника данных (датасет) на событии OnDatasetAfterAppend:
    function SelfOnDatasetAfterAppend(Dataset) {
    	Dataset('EmployeesNumber') = '987';
    	Dataset.DataFields('Name').Value = '654';
    	Dataset.DataFields('OfficialAccountName').ValAsStr = '321';
    	Dataset.ValAsStr('Address') = 'Address';
    }

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

Здравствуйте Александр и Павел.
Спасибо за ответы !

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

Здравствуйте, как можно импортировать в bpm realestate объекты недвижимости с параметрами? если кто сталкивался отпишитесь

Нравится

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

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

В системе есть три объекта:
1) Объект недвижимости
2) Параметр
3) Значение параметра объекта или листинга (развязочная таблица параметров и объектов).

Для решения вашей задачи необходимо последовательно импортировать записи в следующие объекты:
1) Объект недвижимости (для создания объектов)
2) Значение параметра объекта или листинга (для создания связи между объектом, параметром и значением параметра).

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

Дополнительно прикрепляю шаблон для импорта в объект "Значение параметра объекта или листинга"

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

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

В системе есть три объекта:

1) Объект недвижимости

2) Параметр

3) Значение параметра объекта или листинга (развязочная таблица параметров и объектов).

Для решения вашей задачи необходимо последовательно импортировать записи в следующие объекты:

1) Объект недвижимости (для создания объектов)

2) Значение параметра объекта или листинга (для создания связи между объектом, параметром и значением параметра).

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

Дополнительно прикрепляю шаблон для импорта в объект "Значение параметра объекта или листинга"


Спасибо Алексей, буду пробовать

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

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

Нравится

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

Александр, добрый вечер!

Уточните, пожалуйста, какая у вас бизнес-задача? Какую валидацию вы хотите настроить?

Есть деталь "График платежей", в ней нужно сделать поле "Вариант оплаты" обязательным для заполнения. Реализовать с помощью настройки колонок в объекте детали нельзя, т.к к этому объекту привязана другая деталь.

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

В таком случае, Вы можете написать бизнес-правило и использовать свойство REQUIRED правила BINDPARAMETER. Его нужно будет добавить на саму страницу редактирования детали. Примеры реализации:

https://academy.terrasoft.ru/documents/technic-sdk/7-8/biznes-pravila-i…

https://academy.terrasoft.ru/documents/technic-sdk/7-8/pravilo-bindpara…

http://www.community.terrasoft.ru/forum/topic/12990

Виталий Красный,

вы что плохо читаете? вам человек написал, что нужна валидация на ГРИД детали, а не на страницу редактирования. Он же пишет, что валидация для ПОЛЯ не подходит

Демьяник Алексей,

что непонятного, зачем вы переспрашиваете? там же написано на ГРИД детали, значит для детали с реестром. Это тот случай, когда в вашей документации ничего нет по этому поводу. Никакой информации как валидировать детали с реестром нет.

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

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

Нравится

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

Насколько я помню за это отвечает getSimpleFilterColumnList в CustomFilterViewModelV2.
Там все колонки заносятся в коллекцию:

Terrasoft.each(columns, function(column) {
if (column.dataValueType !== Terrasoft.DataValueType.GUID &&....)  //тут стоят фильтры террасофта (а-ля не пихать в коллекцию блобы, гуиды и т.п). сюда же можно надобавлять своих
{
columnNames.push({
	name: column.name,
	caption: column.caption
});
}
})

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

Чтобы не заморачиваться с кодом, то можно:
1) настроить страницу редактирования раздела
2) настроить реестр
3) перейти в конфигурацию и полям, которые не нужно отображать в реестре, установить в поле "Режим использования" значение "Никогда", опубликовать объект.

После очистки кеша поля, измененные в третьем пункте, будут недоступны для выбора в фильтрации.

"Демьяник Алексей" написал:"Режим использования" значение "Никогда"

Вопрос на засыпку: чем вообще отличаются режимы использования поля в объекте?

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

Режим использования "Никогда" - колонка будет видна в конфигурации как системная и будет недоступна для использования в системе.
Режим использования "Расширенный" колонка будет видна как системная.
Режим использования "Обычный" - стандартный для колонок в системе.

Разница между "Расширенный" и "Обычный" на уровне раздела ничем не отличается. Поле будет доступно в фильтре, а также при настройке реестра/страницы редактирования.
Отличие есть только на уровне объекта - поле со свойством "Расширенный" не будет отображаться при открытии объекта. Для его отображения необходимо будет включить в настройках "Показывать системные колонки".

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

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

Есть окно WindowGrid(в деталях WorkSpace-а), которое в скрипте WorkSpace-а получает атрибут 'ID', со значением BaseWorkspace.GridDataset.Values('ID')

SetAttribute(WindowGrid, 'ID', BaseWorkspace.GridDataset.Values('ID'));

Из детали, при добавлении(Add), редактировании(Edit) и копировании(Copy) открывается другое окно WindowEdit, и срабатывает

function wnd_WindowEditOnPrepare(Window)
{
ApplyDatasetFilter(Dataset, 'ID', Value, true);
которое фильтрует и показывает некоторые значения на WindowEdit в зависимости от значения атрибута.

}

Вопрос: как вместо Value получить значение атрибута окно WindowGrid?

Спасибо!

Нравится

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

По идее, из открывшейся карточки окно, которое её открыло, доступно как:

var NotifyObject = Self.Attributes('NotifyObject');

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

Спасибо Александр. Работает!

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

Добрый день.
Поясните пожалуйста что именно значит параметр IsProcessMode на страницах и как можно на него влиять?
Заранее спасибо.

Нравится

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

Добрый день!

С помощью параметра IsProcessMode определяется, что страница открывается в контексте какого-то процесса. На параметр завязана логика, реализованная в ядре приложения. Не рекомендуется изменять параметр, иначе это может привести к некорректному выполнению процесса.

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

Добрый день!

1. Подскажите, кто и как решил проблему по поиску писем?

2. Возможно ли в коммуникационной панели установить строку поиска писем по всем полям как в любом почтовом клиенте?

3. Если создать новый раздел E-MAIL, то как в нем настроить поиск писем по всем полям? Как отображать в этом разделе только письма текущего пользователя?

Нравится

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

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

1. В базовой версии продукта этот функционал не реализован, поскольку bpm'online является CRM+BPMS системой, а не почтовым клиентом. Тем не менее, функционал поиска реализовывался отдельно.

2. Да, это возможно сделать. Для решения требуется реализовать соответствующую логику в схеме CommunicationPanelEmail:
1) Добавить строку поиска
2) Добавить кнопку поиска
3) Добавить логику фильтрации записей при нажатии на кнопку по значению, введенному в строку поиска.

3. Новый раздел на основании объекта Activity можно создать, например, через объект представления, в котором будут только письма. Далее в созданном разделе необходимо настроить доп. фильтрацию по текущему пользователю. Также необходимо реализовать корректное отображение тела письма.
Фильтровать записи (поиск по всем полям) можно использованием фильтров созданного раздела (базовый функционал).

"Новак Руслан" написал:

1. В базовой версии продукта этот функционал не реализован, поскольку bpm'online является CRM+BPMS системой, а не почтовым клиентом. Тем не менее, функционал поиска реализовывался отдельно.

Где можно посмотреть результат отдельной реализации функционала поиска?

Здравствуйте, Евгений!

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

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