Генерация документов Word,Excel - гибкий вариант с формой

Простейший способ генерации документов - через разметку с as-doc, но в этом случае мы ничего не передаем в процедуру генерации кроме itemID (т.е. данные выводятся по заранее сохраненным в базе данных данным, связанным с itemID).  См. генерация Word Excel по шаблону

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

Как это сделать: 

1. Создаем форму с необходимыми полями и вызываем в SaveItem внешнее действие. 

-- в SaveItem формы 

-- SELECT 1 
select 1 Result, ' ' Msg, '' SuccessUrl, 1 HideFormAfterSubmit, '' RefreshContainer

-- SELECT 2 Вызов внешнего действия
select 'generatedoc' type, 'stageDS' code, cast(@itemID as nvarchar) itemID, '{
    	"companyName" : "'+replace(isnull(@companyName, ''), '"', '')+'",
    	"num" : "'+cast(isnull(@num, 0) as nvarchar)+'",
    	"date" : "'+isnull(@pdate, '')+'",
    	"sum" : "'+cast(isnull(@psum, '') as nvarchar)+'",   
       	"workDays" : "'+isnull(@pworkDays, '')+'",
        "docID": '+cast(@docID as nvarchar)+'
    }' parameters

Что здесь важно: 

  • Пробел в Msg нужен чтобы по умолчанию не возникал alert по операции. 
  • Параметры передаются в механизм генерации документа (в данном случае код stageDS) через JSON в parameters.

 2.  В /doctemplates создаем код генерации документа, загружаем шаблон документа и прописываем процедуру, где можно извлечь параметры. 

CREATE PROCEDURE [dbo].[doc_stageDS_getData]
	@username nvarchar(64),
	@itemID int,
	@urlParameters CRUDFilterParameter READONLY	,
    @parameters ExtendedDictionaryParameter READONLY	
AS
begin
     declare @companyName nvarchar(max)=''
    select @companyName = Value2 from @parameters where [Key]='companyName'
    
    declare @num nvarchar(max)=''
    select @num = Value2 from @parameters where [Key]='num'
    
    declare @date nvarchar(max)=''
    select @date = Value2 from @parameters where [Key]='date'
    
-- ...

end

Обратите внимание, что в процедуре добавлен @parameters ExtendedDictionaryParameter READONLY, из которого мы извлекаем значения (Value2) по ключу. 

 3. В JS коллебке формы мы обрабатываем результат выполенния внешнего действия и получаем URL файла, а затем выдаем его в алерте. 

var f1 = function(data){

    console.log("generateDS_saveItem", data.additionalData)
      var url = JSON.parse(data.additionalData)[0].msg;
        // если нашли URL, то выводим ссылку на скачивание файла.
      	if(url) as.sys.bootstrapAlert("<a href='"+url+"' target="_blank">Скачать файл</a>", {type:"success", delay:0});
 };
 as.formcallbacks["generateDS_saveItem"] = f1;

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

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

Falcon Space - функциональная веб-платформа разработки на узком стеке MS SQL/Bootstrap. Вводная по Falcon Space
Насколько полезной была статья?

Google поиск по нашей документации

Выгода от использования Falcon Space

В 2-3 раза экономнее и быстрее, чем заказная разработка
Более гибкая, чем коробочные решения и облачные сервисы
Используйте готовые решения и изменяйте под свои потребности
Нужна бесплатная консультация?
Планируете делать веб-проект?
Сайт использует Cookie. Правила конфиденциальности OK