7.6
профиль
реестр
Технические вопросы
7.x

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

Нравится

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

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

Опишите, пожалуйста, задачу, которую Вы пытаетесь решить?

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

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

Попробуйте при инициализации Вашего раздела получить значение нужного профиля по коду из базы и установить полученное значение в атрибут "Profile" модели раздела. Далее при инициализации колонок реестра (метод initQueryColumns схемы GridUtilitiesV2) вызывается метод getProfileColumns, который должен получить из данного атрибута корректный набор колонок.

Обратите внимание, что перед установкой значения в атрибут "Profile" его необходимо декодировать в объект с помощью Terrasoft.decode.

"Лабьяк Олег Игоревич" написал:

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

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


Я использую getActiveViewSettingsProfileKey и getProfileKey, которые возвращают нужный мне ключ, и в Profile попадает нужный мне профиль. Метод getProfileColumns возвращает нужные колонки.
Проблема в columnBindings. Это "Объект, описывающий связи колонок реестра со свойствами или методами модели". И там хранятся связи изначальных колонок. Метод getRow() ("Метод получения данных модели через механизм привязки") пытается получить колонки из columnBindings по названиям колонок из профиля, который я подгружаю. Естественно они не совпадают.
Проблему частично решает метод reloadGridColumnsConfig, если вызвать его в getActiveViewGridSettingsProfile. И тогда в columnBindings попадают нужные связи. Но если зайти в настройки колонок и, не сохраняя их, нажать отмену - раздел не грузится, а в columnBindings снова попадают старые связи.

Олег, свойство columnBindings формируется по конфигурации колонок вью-модели схемы раздела, которая генерируется только один раз в момент инициализации. Поэтому для получения актуальных связей придётся перегенерировать вью-модель. Другого решения я, к сожалению, не нашёл:

init: function() {
	if (/* условие, по которому необходимо подменять профиль */) {
		this.viewModel = null;
	}
	this.callParent(arguments);
}

Таким способом решить проблему у меня не вышло. Но благодаря Вам я пошел в нужном направлении (по цепочке генерации вью-модели). В итоге вышел на getProfileKey() в SectionModuleV2, что проблему решило. Спасибо огромное!

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

Проблема при использовании базового функционала, при отправке запроса используя сгенерированую форму приходит в ответ следующее:

The server encountered an error processing the request. Please see the service help page for constructing valid requests to the service. The exception message is 'Элемент коллекции с именем BpmSessionId не найден'. See server logs for more details. The exception stack trace is:

at Terrasoft.Core.MetaItemCollection`1.GetByName(String name) at Terrasoft.Configuration.GeneratedWebFormService.GeneratedWebFormService.SaveWebFormLeadData(FormData formData) at SyncInvokeSaveWebFormLeadData(Object , Object[] , Object[] ) at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs) at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage5(MessageRpc& rpc) at System.ServiceModel.Dispatcher.ImmutableDispatchRuntime.ProcessMessage31(MessageRpc& rpc) at System.ServiceModel.Dispatcher.MessageRpc.Process(Boolean isOperationContextSet)

в cookies запроса в свою очередь sessionid передается, в какую сторону копать?

p.s. sessonid также передается в данных post запроса

Нравится

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

Добрый день!

Предполагается, что у Вас версия приложения 7.7, т.к. элемент SessionID использоуется только в с версии 7.7.
Пожалуйста, уточните, с данной версией был создан новый сайт или было обновление с версии 7.6 на версию 7.7?
В данному случае, предаполагается некорректное обновление с версии 7.6 приложения, в результате которого обновились не все системные настройки.

Для более детального анализа прошу обратиться в службу технической поддержки и предоставить информацию о лендинге и версии приложения, а также о том, был развернут новый сайт на 7.7 либо обновлен сайт версии 7.6.
Спасибо!

sales Версия 7.7.0.2284, какая информация нужна о лендинге? да было обновление с 7.6, как проверить и исправить системные настройки?

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

Без анализа конкретного сайта и конкретного лендинга невозможно предоставить решение по Вашему запросу.
В связи с этим прошу предоставить в службу технической поддержки следущую информацию:
1. Адрес приложения клиента(желателен доступ к сайту с помощью тестового пользователя либо обезличенная бд сайта).
2. Название лендинга в bpm'online и точный адрес расположения самой формы лендинга.
Также прошу прошу продублировать текст ошибки, возникающей при отправке запроса.

Показать все комментарии
7.7
full text search
mssql 2014
полнотекстовый поиск
Технические вопросы
7.x

Коллеги, добрый день!

Существует вопрос с использованием полнотекстового поиска mssql 2014 и bpm 7.x

Вопрос заключается в Задаче:

Необходимо реализовать такую систему поиска, при которой пользователь bpm.online в строке поиска (какая-нибудь кастомная строка поиска) заводит интересующий его запрос.
После запуска поиска пользователем, система должна выдать результаты:
а) по всем соответствующим запросу записям в bpm'online
б) по всем приаттаченым к записям документам(word и т.д.), причем если приложен текстовый документ, поиск должен происходить не только по наименованию, но и по его содержанию.

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

Нравится

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

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

Просто оставлю здесь эту ссылку.

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

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

Просто оставлю здесь эту ссылку.

Алексей, спасибо за ответ, я эту информацию видел.

У меня стоит задача не покупать/использовать партнерское решение, а найти советы для последующей разработки механизма полнотекстового поиска по документам для конкретного проекта-внедрения. Используя при этом компонент sql full-text search.

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

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

Полнотекстовый поиск есть в модуле расширенной работы с файлами, тот же самый что и в PT Docs.

Вот страница на комьюнити.
Вот страница в маркетплейс.

Коллеги, обращайтесь!

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

Добрый день коллеги! Я столкнулся с проблемой при работе с бизнес процессом Bpmonline 7.7.0.2111. Ранне в 7.6 в блоке задачи сценарий была переменная UserConnection. В Bpmonline 7.7 этой переменной нет. когда я хочу передать UserConnection, выдает ошибку что являеть тип а не переменная. Как можно достать UserConnection на с# бизнес процесса Bpmonline 7.7 ? См. фото

Нравится

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

UserConnection фото

Можно использовать context.UserConnection, хотя странно, в базовых процессах используется просто UserConnection.

Добрый день!

В версии 7.7 экземпляр типа UserConnection можно получить через метод Get. Например, var userConnection = Get(“UserConnection”);
Следует отметить, что для обращения к параметрам процесса следует также использовать методы Get и Set.
Пример работы с параметрами:
var parameter1 = Get("Parameter1");
Set("Parameter2", parameter1.ToString());
var parameter2 = Get("Parameter2");

Кроме того можно в свойствах элементе "Задание-сценарий" убрать признак [Для интерпретируемого процесса]. В таком случае можно работать с экземплярами аналогично версии 7.6.

Большое спасибо!

А как в исходном коде указать параметру тип UserConnection? Раньше можно было так:

public methodName(UserConnection userConnection, string stringParam, ...)
{
...
}

Здравствуйте!
В схемах сервисов принять так:

var userConnection = (UserConnection)HttpContext.Current.Session["UserConnection"];

Это уже есть в базовом сервисе, достаточно унаследоваться от BaseService и будет доступно свойство UserConnection:

public class TestDataService : BaseService

В хелпер класах (которые не сервисы) принято передавать в конструктор при создании:

new RightsHelper(userConnection); 

А внутри использовать тот, который передали

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

Подскажите пожалуйста, а как присвоить значение параметру типа Файл? Насколько я понимаю Set("Parameter2", "Parameter2"); работает только для строк..

Добрый день!
Конструкция Set("ProcessParameter", someVariable); подходит для всех типов. ProcessParameter – название параметра процесса. someVariable – переменная, созданная ранее в ScriptTask

Олег, здравствуйте!

Так не получается. Код

var webClient = new WebClient();
byte[] imageBytes = webClient.DownloadData("http://93.158.58.239:3333/someimage.jpg");
MemoryStream ms = new MemoryStream(imageBytes);
Set("scanParam", ms);

выдает ошибку

The best overloaded method match for 'Terrasoft.Core.Process.IProcessParameterStore.SetParameterValue(System.Guid, string, string)' has some invalid arguments

Параметр scanParam - типа Файл

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

Какую задачу Вы решаете? Базовые элементы процесса не умеют работать с файлами.

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

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

Базовые элементы процесса не умеют работать с файлами.

То есть я не смогу записать значение моего файлового параметра в базу, например, с помощью элемента "Изменить данные"?

Элемент "Изменить данные" не умеет работать с типом данных "BLOB". Вы можете добавить файл в бизнес процессе, однако для этого необходимо использовать элемент "Задание сценарий". В нем необходимо реализовать логику добавления файла на деталь. Пример Вы можете найти в схеме ImapClient, метод AddAttachmentToActivity

Показать все комментарии
карточка контакта письмо
7.x

Добрый день!

Подскажите как создать контакт из входящего письма.

1. пришло письмо от не известного контакта
2. создать контакт с этим емаилом и именим

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

Может это уже есть, да я не знаю как этим воспользоваться?

версия bpmonline telecom 7.6

Нравится

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

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

Показать все комментарии
Регистрация в системе
Технические вопросы
7.x

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

Нравится

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

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

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

Добрый день!

Каким образом в БП (используя элемент Edit access rights желательно) установить права на таблицу с деталями такими же, как у основной записи?
Например, на адреса контрагента такие же, как у самого контрагента (может, не лучший пример, но он далеко не единственный)

Нравится

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

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

Процессом не получится. Давайте рассмотрим на Вашем примере. Предположим объект "Контрагент" администрируется по записям. Вся информация о правах хранится в таблице SysAccountRights.

Для реализации Вашей задачи Вам необходимо включить администрирование по записям для объекта "Средство связи контрагента".

Далее, Вам необходимо на событие "после сохранения записи" (процесс на объекте) либо на событие "после добавления записи"/"после изменения записи" создать бизнес процесс, который:

1) Удалит данные из таблицы SysAccountCommunicationRights для записей из таблицы AccountCommunication, у которых в поле AccountId содержится Id добавленной/измененной записи
2) Скопирует права из таблицы SysAccountRights для измененной/созданной записи в таблицу SysAccountCommunicationRights.

Элементом "Изменить права доступа" решить данную задачу не получится.

"Демьяник Алексей" написал:1) Удалит данные из таблицы SysAccountCommunicationRights для записей из таблицы AccountCommunication, у которых в поле AccountId содержится Id добавленной/измененной записи
2) Скопирует права из таблицы SysAccountRights для измененной/созданной записи в таблицу SysAccountCommunicationRights.

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

И еще вопрос - как отследить, что изменились права на запись Контрагента, если это сделано вручную через Actions / Set up access rights? Чтобы сразу же изменить на подчиненные детали

Добрый день!

Раздавать права следует скриптом. Пример можно посмотреть в схеме RightsHelper (методы GetRecordRights, SetRecordRight).
Отследить изменение прав доступа в Account можно используя триггер в базе данных, при помощи sql запроса изменить права доступа на запись в детали.

Пример триггеров, на которых реализовали данную логику:

ALTER TRIGGER [dbo].[SysAccountRight_AI]
ON [dbo].[SysAccountRight]
AFTER INSERT
AS 
BEGIN
SET NOCOUNT ON;
DECLARE @SysAdminUnitId UNIQUEIDENTIFIER
SELECT @SysAdminUnitId = SysAdminUnitId FROM inserted
INSERT INTO [dbo].[SysAccountAddressRight]
( 
[RecordId]
,[SysAdminUnitId]
,[Operation]
,[RightLevel]
,[Position]
,[SourceId])
SELECT [det].[Id], [mast].[SysAdminUnitId], [mast].[Operation], [mast].[RightLevel], [mast].[Position], [mast].[SourceId] 
FROM [SysAccountRight] as [mast]
JOIN [AccountAddress] AS [det] ON [det].[AccountId] = [mast].[RecordId]
WHERE [mast].[SysAdminUnitId] = @SysAdminUnitId
INSERT INTO [dbo].[SysAccountBillingInfoRight]
( 
[RecordId]
,[SysAdminUnitId]
,[Operation]
,[RightLevel]
,[Position]
,[SourceId])
SELECT [det].[Id], [mast].[SysAdminUnitId], [mast].[Operation], [mast].[RightLevel], [mast].[Position], [mast].[SourceId] 
FROM [SysAccountRight] as [mast]
JOIN [AccountBillingInfo] AS [det] ON [det].[AccountId] = [mast].[RecordId]	
WHERE [mast].[SysAdminUnitId] = @SysAdminUnitId
END
ALTER TRIGGER [dbo].[SysAccountRight_FD]
ON [dbo].[SysAccountRight]
FOR DELETE
AS
BEGIN
SET NOCOUNT ON;
DECLARE @AccountID UNIQUEIDENTIFIER
DECLARE @SysAdminUnitUD UNIQUEIDENTIFIER
DECLARE @Operation INT
SELECT @AccountID = [RecordId] FROM deleted
SELECT @SysAdminUnitUD UNIQUEIDENTIFIER
SELECT @Operation = [Operation] FROM deleted
SELECT @SysAdminUnitUD = [SysAdminUnitId] FROM deleted
DELETE
FROM [dbo].[SysAccountAddressRight]
WHERE [RecordId] IN (SELECT [det].[Id]
FROM [AccountAddress] AS [det]
WHERE [det].[AccountId] = @AccountID)
AND [Operation] = @Operation AND [SysAdminUnitId] = @SysAdminUnitUD
DELETE
FROM [dbo].[SysAccountBillingInfoRight]
WHERE [RecordId] IN (SELECT [det].[Id]
FROM [AccountBillingInfo] AS [det]
WHERE [det].[AccountId] = @AccountID)
AND [Operation] = @Operation AND [SysAdminUnitId] = @SysAdminUnitUD
END
ALTER TRIGGER [dbo].[AccountAddress_AI]
ON [dbo].[AccountAddress]
AFTER INSERT
AS 
BEGIN
SET NOCOUNT ON;
DECLARE @RecordId UNIQUEIDENTIFIER
SELECT @RecordId = Id FROM inserted
DECLARE @SysAdminUnitId UNIQUEIDENTIFIER
SELECT @SysAdminUnitId = Id FROM SysAdminUnit WHERE ContactId = (select CreatedById FROM inserted)
INSERT INTO [dbo].[SysAccountAddressRight]
( 
[RecordId]
,[SysAdminUnitId]
,[Operation]
,[RightLevel]
,[Position]
,[SourceId])
SELECT [mast].[Id], [det].[SysAdminUnitId], [det].[Operation], [det].[RightLevel], [det].[Position], [det].[SourceId] 
FROM [AccountAddress] AS [mast]
JOIN [SysAccountRight] AS [det] ON [det].[RecordId] = [mast].[AccountId]
WHERE [det].[SysAdminUnitId] <> @SysAdminUnitId AND [mast].[Id] = @RecordId
END
Показать все комментарии
Технические вопросы
7.x

Добрый день.
Есть страница раздела с несколькими полями и деталью на ней. Деталь связана с объектом раздела, но при создании детали заполняется только то поле, по которому идет привязка. Мне нужно чтобы ещё несколько полей с объекта раздела передавалось в деталь. Как это можно сделать?
В схеме страницы редактирования раздела в поле details добавить что-то или же в карточки схемы самой детали нужно как то брать поля у родителя?

Нравится

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

Павел,

В схеме страницы редактирования при добавлении детали можно добавить блок defaultValues.
Ниже пример:

details: /**SCHEMA_DETAILS*/{
	"SmrPhase": {
		"schemaName": "SmrPhaseDetailV2",
		"entitySchemaName": "SmrPhase",
		"filter": {
			"detailColumn": "SmrContract",
			"masterColumn": "Id"
		},
		"defaultValues": {
			"SmrOrder": { // Поле в объекте детали
				"masterColumn": "SmrOrder" // Поле в родительском объекте
			}
		}
	}
}

Дмитрий, спасибо и с наступающим вас)

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

Здравствуйте! Есть объект (объект раздела), при создании которого нужно чтобы поле UsrNumber заполнялось автоматически. Добавляю событие [перед добавлением записи] по этмоу гайду.
Создал [Задание-сценарий] внутри с:

Entity.SetColumnValue("UsrNumber", "Numberrrrrrr");
return true;

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

Нравится

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

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

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

Павел,

Возможно подойдет вариант, в объекте - в свойствах поля установить значение по умолчанию .


Вообще задача такова - автонумерация полей формата типа "номер - тут зависящие от поля буквы - месяц\дата", поэтому вариант в свойствах установить значение не вариант)

Павел,

Есть несколько подходов по генерации номера. В основном применение того или иного варианта зависит от задачи.

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

Ваш вариант сработает после нажатия кнопки "Сохранить" на уровне объекта. Т.е. пользователь увидит номер уже после сохранения записи.

Отладка серверного кода: http://www.community.terrasoft.ru/blogs/8747

"Толмачев Дмитрий Юрьевич" написал:

Павел,

Есть несколько подходов по генерации номера. В основном применение того или иного варианта зависит от задачи.

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

Ваш вариант сработает после нажатия кнопки "Сохранить" на уровне объекта. Т.е. пользователь увидит номер уже после сохранения записи.

Отладка серверного кода: http://www.community.terrasoft.ru/blogs/8747


Спасибо за разъяснения, понял. Я думал, что событие [перед добавлением записи] срабатывает в тот момент, когда я жму кнопку "добавить".

"Толмачев Дмитрий Юрьевич" написал:Если вы хотите, чтобы пользователь сразу видел новый номер на странице, то логику скорее всего необходимо вешать на странице редактирования в JS коде.

Ваш вариант сработает после нажатия кнопки "Сохранить" на уровне объекта. Т.е. пользователь увидит номер уже после сохранения записи.

А если надо и так, и так (иногда счета создаются автоматически, иногда пользователем), то необходимо делать 2 одинаковые логики - в JS и в процессе?

Владимир,

Если для вас важна последовательность нумерации я бы сделал логику только на уровне объекта в момент сохранения, либо через триггеры (как предлагал Дмитрий тут: http://www.community.terrasoft.ru/forum/topic/14256). Тем более предполагается автоматическое формирование счетов. Неудобство в том, что пользователь сразу не видит номер создаваемого счета.

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

"Толмачев Дмитрий Юрьевич" написал:Если же для вас важно отобразить номер пользователю, то в общем случае могут быть пробелы в нумерации.

А если надо отобразить после сохранения (для ввода продуктов, например, всё равно сохраняется счёт), то как его быстро подчитать из БД?

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

Если нумерация зависит от количества записей, то данная задача решается следующими путями:
1) через ESQ в событии объекта
2) через CustomQuery в событии объекта
3) через БП, запускающийся по событию после добавления записи.

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

"Павел И" написал:Ваш вариант сработает после нажатия кнопки "Сохранить" на уровне объекта. Т.е. пользователь увидит номер уже после сохранения записи.

Дополнительный вопрос:

Стандартный User Task для action = Generate number имеет 2 параметра: ResultCode и EntitySchema.
Необходимо же нумеровать счета в зависимости от типа.

В JS реализовали так (в System Settings задали маски для типов счетов):

getIncrementCode: function(callback, scope) {
	var data = {
		sysSettingName: "ClientInvoice" 
                  + this.get("Resources.Strings.IncrementNumberSuffix"),	
                sysSettingMaskName: "ClientInvoice" 
                  + this.get("Resources.Strings.IncrementMaskSuffix")
	};
	this.callServiceMethod("SysSettingsService", "GetIncrementValueVsMask", function(response) {
		callback.call(this, response.GetIncrementValueVsMaskResult);
	}, 
         data, scope || this); 
},

А как это же реализовать в БП?

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

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

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

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






Нравится

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

Добрый день, Дмитрий. Вам вместо последних 2-х элементов нужно вставить один элемент "Добавление данных" и там выбрать "Добавить результат выборки"
http://clip2net.com/s/3skvbrd
1. Объект в который записываем.
2. Объект с которого считываем.

"Павлюк Роман" написал:

Добрый день, Дмитрий. Вам вместо последних 2-х элементов нужно вставить один элемент "Добавление данных" и там выбрать "Добавить результат выборки"

http://clip2net.com/s/3skvbrd

1. Объект в который записываем.

2. Объект с которого считываем.

Здравствуйте, Роман. Чему должно соответствовать условие? Просто не понял как у вас заказ оказался равен заказу? Значение полей считываться должно из данных файлов и ссылок документа или же активности?

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

Элемент "Изменить данные"/"Добавить данные" не умеет работать с полями типа blob (тип поля, в котором хранятся данные файла).

Если пройтись по процессу, то очень много ошибок. Вероятность того, что в системе созданная активность получит такой же Id, как и Id существующего в системе "Документа" тождественно 0 (скриншоты 3-5).
Последнее изменение данных вообще непонятно. В результате у Вас должно получится две разных записи в разных таблицах с одинаковыми Id?

В комментарии Романа поле объекта "Заказ" сравнивается с параметром процесса Заказ.

Решить Вашу задачу без программирования не получится. К тому же Ваше решение очень сильно увеличит размер базы данных. Представьте, что у Вас есть 1 файл размером 1Мб и Вы создаете 1000 активностей. Размер базы данных вырастет на 1ГБ. Как-то нехорошо...

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

Здравствуйте, Алексей. Для каждого документа будет создана только одна активность. В системе дополнительно интегрирован PT Docs работа с документами и согласование. По логике сначала будет отправляться активность директору и для облегчения системы, в смысле манипуляций с разделами, было принято решение привязывать файлы и к отправленной активности.
Насчёт ссылки идея хорошая. Не могли бы помочь с данной реализацией?

Добрый день!

Решение будет выглядеть следующим образом:
1. Предположим, что файл уже загружен на деталь “Файлы и ссылки” в документ. Нажать на файл правой кнопкой – Копировать адрес ссылки.
2. Элемент добавления данных. Объект “Файл и ссылка активности”. Заполнить поля: Тип – Ссылка, Активность – СтартовыйСигнал. Id, Название – вставить в кавычках адрес ссылки на файл (например “http://localhost:1760/0/rest/FileService/GetFile/7b332db9-3993-4136-ac3…”)

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