to add to my question -
we save the letter as BLOB in database
we use View to merge the data
then we save it to temporary location
then we open the file
please let me know if you need any more information.
Protected Sub ExecuteLink_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ExecuteLink.Click
Dim viewName As String = String.Empty
Dim ds1 As DataSet
Dim fileName1() As Byte
Dim viewDataTable As DataTable
Dim viewRow As DataRow
Dim nameIndex As Integer
Dim documentName As String
Dim selectedFormLetterName As String = String.Empty
Dim resourceid As String = String.Empty
ds1 = FormLetterMaintenanceServices.CreateFormLetterData(formLetterIds)
For Each dr1 As DataRow In ds1.Tables("Resources").Rows
resourceid = dr1("resourceid").ToString() 'TG 6538/IPMGR-730
viewName = dr1("DATASOURCE").ToString
selectedFormLetterName = dr1("FORMLETTERNAME").ToString()
If dr1("FORMLETTERFILE").ToString.Length > 0 Then
fileName1 = dr1("FORMLETTERFILE")
Dim srcDocStream As New MemoryStream(fileName1)
' sometimes its failing here to create it as document-** 'System.OutOfMemoryException
templateDocument = New Document(srcDocStream)
End If
Next
keyField = String.Concat(ipTypeName.Remove(ipTypeName.Length - 1, 1), FormLetterConstants.Id)
viewDataTable = FormLetterServices.GetViewData(viewName, keyField, masterID, Session("userID"))
viewRow = viewDataTable.Select(keyField & " = " & masterID)(0)
'Here I merge the data -** 'System.OutOfMemoryException
templateDocument.MailMerge.Execute(viewRow)
documentName = selectedFormLetterName.Split(".doc")(0) & "_" & dateStamp & "_" & masterID & ".doc"
Dim fileName As String = System.IO.Path.Combine(FormLetterServices.GetPath(), "Temporary\" & documentName)
' sometimes its failing here to save -** 'System.OutOfMemoryException
templateDocument.Save(fileName)
If (transferFileToClient) Then
Response.Clear()
Response.Cache.SetCacheability(HttpCacheability.Public)
Response.AppendHeader("content-disposition", "attachment; filename=" & documentName)
Response.CacheControl = "public"
Response.ContentType = "application/vnd.ms-word"
Dim bytes() As Byte
Using fs As New FileStream(fileName, FileMode.Open, FileAccess.Read)
Dim br As New BinaryReader(fs)
bytes = br.ReadBytes(fs.Length)
br.Close()
fs.Close()
End Using
Response.BinaryWrite(bytes)
Response.End()
End If
End Sub