Как создать выгрузку документа в Excel через форму с последующей загрузкой на Google Disk и скачиваем в формате PDF

Операция реализуется через цепочку вызовов Внешних действий.  

Генерация Excel-> Загрузка файла на google drive -> Экспорт в PDF

1. Создаем форму с настройками параметров выгрузки и вызываем внешнее действие generatedoc, также указываем spCallback для вызова после генерации документа.

-- SELECT 2 в SaveItem
-- SELECT 1 (Result, Msg, SuccessUrl, HideFormAfterSubmit, RefreshContainer)
	select 1 Result, ' ' Msg, '' SuccessUrl, 1 HideFormAfterSubmit, '.stageDocs' RefreshContainer

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

2. Создаем процедуру загрузки созданного документа на сервер
В ней извлекаем нужные нам параметры и вызываем через внешнее действие upload на Google Drive, а также указываем spCallback для обработки пришедшего fileID.

Параметры url и docID извлекаются из parameters (они туда попадают из внешнего действия generatedoc).

ALTER PROCEDURE [dbo].[outer_generatedoc_uploadGD]
	@parameters ExtendedDictionaryParameter readonly,
	@data nvarchar(128) = '',
	@username nvarchar(128) = ''
AS
BEGIN
	-- SELECT 1 ReesultModel
	select 1 Result, '' Msg


	declare @path nvarchar(256)
	select @path = Value2 from @parameters where lower([key]) = 'url'

	declare @docID nvarchar(256)
	select @docID = Value2 from @parameters where lower([key]) = 'docid'

	declare @folderId nvarchar(128)

	select top 1 @folderId = docFolderGoogleID from fin_contragents where id in (select contragentID from rudenas2x.dbo.doc_documents where id = @docID )

	declare @s nvarchar(256) = 'outer_generatedoc_uploadGD = ' +isnull(@path, '') +'    '+  isnull(@folderId, '')
	exec as_print @str = @s


	if(isnull(@path, '')<>'' and isnull(@folderId, '') <>'') begin
		-- SELECT 2 Outer actions
		select 'gd' type, 'upload' action, doc_getDocName(cast(@docID as int)) filename, @path filepath,
			@folderId folderId, 'generatedoc_uploadGD_saveFileID' spCallback, @docID docID
	end

3. Реализуем обработку по сохранению файла и вызову экспорта в PDF

ALTER PROCEDURE [dbo].[outer_generatedoc_uploadGD_saveFileID]
	parameters ExtendedDictionaryParameter readonly,
	@data nvarchar(128) = '',
	@username nvarchar(128) = ''
AS
BEGIN
	-- SELECT 1 ReesultModel
	select 1 Result, '' Msg


	declare @fileId nvarchar(256)
	select @fileId = Value2 from @parameters where lower([key]) = 'fileid'

	declare @docID nvarchar(256)
	select @docID = Value2 from @parameters where lower([key]) = 'docid'

	declare @s nvarchar(256)= 's='+ isnull(@fileId, '')

	if(isnull(@fileId, '')<>'') begin
		update doc_documents set gdfileId = @fileId where id = @docID
	end

	@declare @path nvarchar(128) = '/uploads/e1.pdf'

	-- SELECT 2 Внешнее действие по экспорту
	-- select 'gd' type, 'export' action, @fileId fileId, 'pdf' exportType, @path path

END	

4. На стороне JS в коллбеке формы saveItem вы можете по необходимости обработать созданный @path (должен быть передан в data.additionalData)

as.formcallbacks.[formCode]_saveItem = function(data){
    console.log(data)
    // location.href= ...
}

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

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

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

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