Публикация

Формирование и отправка .pdf из заказа, счета, продажи

Часто бывает необходимо отправить клиенту счет, коммерческое предожение и т.д. Как известно, базовая функциональность bpm´online предлагает это решать так:

  • Нажали на кпонку "Печать"
  • Сохранили документ (ну он сам в принципе сохранился)
  • Создали новый E-mail
  • Прицепили к нему этот файл и отправили

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

  • Создали новый заказ
  • Процессно создали событие E-mail
  • Сгерерировали и сохранили печатную форму заказа
  • Открыли окно события с вложением и отправили

Вот скрипт:

var RecordId = GetGuid>("OrderId"); // Id записи, для которой генерируем файл, параметр процесса
var ActivityId = GetGuid>("ActivityId"); // Id активности, к которой его цепляем, параметр процесса
var userConnection = (UserConnection)HttpContext.Current.Session["UserConnection"];
ReportData data = new ReportData();
ReportService reportService = new ReportService();
var ReportSchemaId = "2fcb529e-e3a8-4926-85c6-585f53e25765"; // Id шаблона печатной формы отчета
data = reportService.GenerateMSWordReport(ReportSchemaId, RecordId.ToString(), true); //true - перевод в pdf, false - MS Word
var reportStream = new MemoryStream(data.Data);


var entityFileSchema = userConnection.EntitySchemaManager.GetInstanceByName("ActivityFile");
var entityFile = entityFileSchema.CreateEntity(userConnection);
entityFile.SetDefColumnValues();
entityFile.SetColumnValue("ActivityId", ActivityId.ToString());
entityFile.SetColumnValue("Name", "Poptavka.pdf");
entityFile.SetColumnValue("TypeId", "{529BC2F8-0EE0-DF11-971B-001D60E938C6}"); // - тип вложения файл, не менять
entityFile.SetColumnValue("Size", reportStream.Length);
entityFile.SetStreamValue("Data", reportStream);
entityFile.Save();
return true;

Usings:
Terrasoft.Reports
Terrasoft.Configuration.ReportService
System.IO
System.Web

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

Удачи :)

Нравится

Поделиться

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

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

когда открываете в конфигурации шаблон отчета (в справочнике), то адресная строка выглядит таким образом:

http://<адрес сайта>/0/ViewPage.aspx?Id=41899fab-093e-4808-86db-5794b9836745&recordId=0d8c28ce-9794-42be-8427-3d5d60e60c1f&entitySchemaUId=0a62cd3d-6541-4c5c-903f-e5b0fc665297&treeGridId=PageContainer_TreeGrid&SysModuleEditId=00000000-0000-0000-0000-000000000000&SelectedModuleId=00000000-0000-0000-0000-000000000000&ParentEntitySchemaId=00000000-0000-0000-0000-000000000000&typeColumnUId=%2294f2a9f755c74ecf9b6417583ddc058b%22&closeMessage=ReportEditPageClosed

вас интересует кусок recordId=0d8c28ce-9794-42be-8427-3d5d60e60c1f, где 0d8c28ce-9794-42be-8427-3d5d60e60c1f и есть наш id шаблона

Спасибо. Работает

ну я бы удивился, если бы нет :smile:

:) Ваш код работает, а вот открыть в БП потом письмо не получаеться, так как не корректно отрабатывает елемент "Страница редактирования" - открывает страцицу Задачи, а не письма. В техпотдержке уже взяли в работу

:) Ваш код работает, а вот открыть в БП потом письмо не получаеться, так как не корректно отрабатывает елемент "Страница редактирования" - открывает страцицу Задачи, а не письма. В техпотдержке уже взяли в работу

да не может быть! посмотрите картинку - так у вас? Вы там точно указали карточку email?

очень маленькая картинка. Можна немного больше?

очень маленькая картинка. Можна немного больше?

ну там смысл, что в элементе "Открыть преднастроенную страницу" надо выбрать Страница - Email (не страница Задача)

да так и выбрал. Все равно открывает задачу. Проверял и на других БП - это глюк елемента. Версия 7.8.0.1134

aaaaa....7.8... не проверял

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