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

Как реализовать бизнес-процесс, при запуске которого будет открываться страница с проводником. В проводнике на ПК выбирается файл (txt , xls, xml). В результате появляется на странице содержимое файла.

Интересует программная реализация

BPMOnline 7.7

Нравится

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

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

Использование бизнес-процесса для решения данной задачи будет не самым оптимальным варинантом. Рекомендую Вам смотреть в сторону использования JavaScript кода для вызова "окна выбора" файла, саму же обработку файла реализовать в вэб сервисе.

Пример реализации Вы можете посмотреть в коде детали "Файлы и ссылки" (FileDetailV2). Так же обратите внимание на сервис FileApiService и схему FileUploader.

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

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

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

Использование бизнес-процесса для решения данной задачи будет не самым оптимальным варинантом. Рекомендую Вам смотреть в сторону использования JavaScript кода для вызова "окна выбора" файла, саму же обработку файла реализовать в вэб сервисе.

Пример реализации Вы можете посмотреть в коде детали "Файлы и ссылки" (FileDetailV2). Так же обратите внимание на сервис FileApiService и схему FileUploader.

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


Здравствуйте.
Спасибо большое.

Подскажите, в коде детали "Файлы и ссылки" (FileDetailV2) есть строки :
/**
* Обработчик события нажатия кнопки "Добавить файл".
* @private
*/
onAddFileClick: Terrasoft.emptyFn,

Не совсем понятно что здесь происходит. А где конкретно описывается обработчик кнопки "Добавить файл" ? Чтобы я мог использовать листинг обработчика для своей кнопки.

Код onAddFileClick: Terrasoft.emptyFn добавляет заглушку (пустую функцию). Это нужно для того, что бы событие onClick кнопки не отрабатывало.

Обратите внимание на строки

"fileUpload": true,
"filesSelected": {"bindTo": "onFileSelect"},

в описании элемента AddRecordButton.

Первая добавляет окно вызова файла при клике, filesSelected - отрабатывает после выбора файла.

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

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

Пожалуйста, расскажите, как можно реализовать работу следующего механизма:
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…

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

В продукте sales enterprice 7.8 нужно добавить на страницу раздела "Звонки" поле с типом "файл" для сохранения одной записи звонка.
В конфигурации , в объекте раздела "Звонки" я добавила поле с типом "файл". В мастере раздела это поле недоступно для добавления в схему.
Как добавить это поле на страницу редактирования раздела "Звонки"?

Нравится

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

Каким образом можно на карточке Контрагента отобразить все файлы из связанных с ним Активностей, Продаж и некоторых других объектов?

Есть где-то пример подобной реализации?

Нравится

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

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

Файлы хранятся в следующих таблицах:
Контрагенты - AccountFile
Активности - ActivityFile
Продажи - OpportunityFile
Другой объект:
Object - ObjectFile

Все объекты унаследованы от базового объекта File.
Если файлов в системе нет, то Вы можете сделать следующее:
1) Создать объект, унаследовавшись от File (UsrAllObjectsFile)
2) Добавить в него справочные поля интересующих объектов.
3) Удалить деталь "Файлы" во всех разделах.
4) Добавить свою деталь во все разделы (на примере Активностей):

UsrFiles: {
	schemaName: "FileDetailV2",
	entitySchemaName: "UsrAllObjectsFile",
	filter: {
	masterColumn: "Id",
	detailColumn: "UsrActivity"
}
}

(и разместить ее куда-то на страницу)

5) Добавить логику заполнения поля Контрагент при добавлении файла в деталь/изменении значения в поле "Контрагент" основной записи.

Недостатки:

  • Не тестировалось
  • Может замедлить быстродействие

Преимущества:

  • Записи будут отображаться на одной детальке

Другой вариант - заместить FileDetailV2 и тянуть записи из всех связанных объектов через настройки фильтрации. Но с быстродействием есть большие вопросы.

Третий вариант - заместить ObjectFile, добавив в него поле "Контрагент" и организовать логику его заполнения. А дальше сделать несколько деталей, скопировав FileDetailV2 (одну и ту же деталь нельзя использовать несколько раз на странице редактирования), и указать для разных деталей (разные объекты) полем для связи с разделом "Контрагенты".

Алексей, может лучше использовать представление?

"Андросов Дмитрий" написал:

Алексей, может лучше использовать представление?

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

Данная задача может быть решена разными способами - вариант с представлением еще один способ решения.

"Андросов Дмитрий" написал:Алексей, может лучше использовать представление?

Спасибо! Кажется, это самый простой вариант!

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

Здравствуйте.
Нужна помощь, в реализации следующего функционала:
В разделе Счета формируется отчет, и сохраняется в БД на деталь "Файлы в продажах", ID нового файла есть. Нужно открыть новый файл (и подписаться на его изменение) из детали "Файлы в продажах" находясь в разделе Счета, т.е. сразу после формирования и сохранения отчета не переходя в другой раздел.
С открытием проблем нет (wnd_FilesDetailGridArea.grdData.grdDataOnDblClick - тут все понятно), но подписаться не получается нужно "находиться" в scr_FilesGridArea (fnFiles.SubscribeFileEvents(FileName, RecordID);).
Получается нужно послать сообщение детали в другом разделе и обработать в нем код аналогичный grdDataOnDblClick, но как получить wnd_FilesDetailGridArea из другого раздела и в случае если его еще не разу не открывали проинициализировать раздел и деталь?

Возможно есть более простое решение, подскажите.
Спасибо.

Terrasoft CRM 3.4.0.130

Нравится

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

делал что-то похожее, подписывался из совсем другого места так:

var Self = Services.GetNewItemByUSI('wnd_FilesDetailGridArea');
	var fnFiles = Self.ComponentsByName('fnFiles');
	fnFiles.UnsubscribeFileEvents(FileID);
	fnFiles.SubscribeFileEvents(FileName, FileID);	
Показать все комментарии
Реализовать в мастере создания и редактировании раздела возможность добавлять стандартные "Файлы и ссылки" и "Примечания"
2 комментария

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

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

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

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

Нравится

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

"Олейник Дмитрий" написал:

Почитайте тут:

http://www.community.terrasoft.ru/blogs/7372

С уважением,

Олейник Дмитрий


Говорит "У Вас нет доступа к этой странице."

Откройте базовую страницу с файлами (там где кнопка "скачать") и посмотрите пример.
Главное здесь не забыть на Inite для события (к примеру клик кнопки) указать свойство isUpload = true;

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

"Олейник Дмитрий" написал:

Откройте базовую страницу с файлами (там где кнопка "скачать") и посмотрите пример.

Главное здесь не забыть на Inite для события (к примеру клик кнопки) указать свойство isUpload = true;

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

С уважением,

Олейник Дмитрий


Это пример для BPMOnline 5.4. Я же пытаюсь отдать на скачивание файл в BPM 7.4

В JS можно сделать так.

//var params = convertDate(startDate)  + "/" + convertDate(dueDate) + "/" + Ids;
var params = this.get("Id");
var virtualButton = document.createElement("a");
virtualButton.href = "../rest/MyService/MyMethod/" + params;
virtualButton.download = "MyFile.xlsx";
document.body.appendChild(virtualButton);
virtualButton.click();
document.body.removeChild(virtualButton);

MyService - сервис на С#
MyMethod - метод,возвращающий стрим.

"Пащенко Александр Сергеевич" написал:

В JS можно сделать так.

//var params = convertDate(startDate)  + "/" + convertDate(dueDate) + "/" + Ids;

var params = this.get("Id");

var virtualButton = document.createElement("a");

virtualButton.href = "../rest/MyService/MyMethod/" + params;

virtualButton.download = "MyFile.xlsx";

document.body.appendChild(virtualButton);

virtualButton.click();

document.body.removeChild(virtualButton);

MyService - сервис на С#

MyMethod - метод,возвращающий стрим.


Спасибо. Параллельно подсмотрел реализацию для скачивания файлов детали Файлы. Все работает)

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

bpm 7.2 on-site

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

Нравится

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

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

Вам необходимо активировать настройку в используемом Вами браузере:

Google Chrome:

http://i62.fastpic.ru/big/2014/0523/33/6e4b9e46c9a40fe7d09b623db5e6dc33.png

Mozilla Firefox:

http://i62.fastpic.ru/big/2014/0523/33/0ce94959f221827fa4b780f59028e133.png

"Соколов Илья Андреевич" написал:файлы не скачивались, а сразу предлагалось открытие системой

Это абсурд в контексте современных представлений о безопасности браузеров

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

Использую вот такой вот скрипт, где FileID - id нашего файла

EntitySchemaManager esqManager = UserConnection.EntitySchemaManager;
var esqResult = new EntitySchemaQuery(esqManager, "File");
esqResult.AddAllSchemaColumns();
esqResult.AddColumn("Data");
Entity currentFile = esqResult.GetEntity(UserConnection, FileID);
       
//файл должен появиться
while (currentFile == null) {
        currentFile = esqResult.GetEntity(UserConnection, FileID);     
}
var currentFileName = currentFile.GetTypedColumnValuestring>("Name");
var currentFileData = currentFile.GetBytesValue("Data");

var Response = Page.Response;

Response.AddHeader("Content-Disposition", "attachment; filename=\""" + System.Web.HttpUtility.UrlPathEncode(currentFileName) + ""\"""");

Нравится

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

Здравствуйте, Александр!
Думаю, стоит воспользоваться готовым решением из процесса "Скачать шаблон для импорта контрагентов", например:

public virtual bool DownloadTemplateScriptExecute(ProcessExecutingContext context) {
			var entitySchemaManager = UserConnection.EntitySchemaManager;
var entitySchema = entitySchemaManager.GetInstanceByName("File"); 
var entitySchemaQuery = new EntitySchemaQuery(entitySchemaManager, entitySchema.Name);
 
var dataColumn = entitySchemaQuery.AddColumn("Data");
entitySchemaQuery.Filters.Add(
	entitySchemaQuery.CreateFilterWithParameters(
		FilterComparisonType.Equal, "[KnowledgeBaseFile:FileId].KnowledgeBase", new object[] {new Guid("edb71f06-f46b-1410-e980-20cf30b39373")}));
entitySchemaQuery.Filters.Add(
	entitySchemaQuery.CreateFilterWithParameters(
		FilterComparisonType.Equal, "Name", new object[] {FileName.ToString()}));
 
var entityCollection = entitySchemaQuery.GetEntityCollection(UserConnection);
if (entityCollection.Count > 0) {
	var data = entityCollection[0].GetBytesValue(dataColumn.Name)  as byte[];    
	var response = HttpContext.Current.Response; 
	TSConfiguration.PageResponse.Write(response, data, FileName, TSConfiguration.ContentType.XmlType);
}
 
return true;
		}

К сожалению у меня TSConfiguration не знает методов PageResponse и ContentType, и в процессе "Скачать шаблон ..." вместо TSConfiguration стоит скрипт

Response.AddHeader("Content-Disposition", "attachment; filename=\"" + System.Web.HttpUtility.UrlPathEncode(FileName) + ""\"""");

Александр, какая у Вас версия ядра?
Попробую воспроизвести.
По поводу загрузки данных попробуйте перед вызовом LoadRows() установить

Page.DataSource.PageRowsCount = -1; //или заведомо вольшое числ
Показать все комментарии
Идея
Реализована
Мне кажется уже давно очевидно, что необходима возможность добавлять несколько файлов за один раз. Но, к сожалению, это до сих пор не реализовано.Очень часто возникает потребность (это особенно актуально для финансового сектора) добавить несколько файлов к тому или иному объекту. Но пользователь вынужден добавлять каждый файл по отдельности, увеличивая тем самым риск операционной ошибки и затрачиваемое время.
2 комментария

В 3.х в окне выбора файла можно выделить несколько файлов - и они загрузятся одним разом.
В 3.4.1 можно просто перетащить несколько файлов на деталь. А также вставить содержимое буфера обмена (Ctrl+V). К примеру, если там была картинка - автоматом будет добавлен файл *.jpg.

Давно не работал в тройке, поэтому уже точно не помню как там этот механизм реализован.
Но вот в пятерке именно так (можно добавлять файлы только по одному).

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