summaryrefslogtreecommitdiff
path: root/sw
diff options
context:
space:
mode:
authorJan-Marek Glogowski <glogow@fbihome.de>2014-09-15 00:13:06 +0200
committerJan-Marek Glogowski <glogow@fbihome.de>2014-10-01 10:32:42 +0200
commit9835bb562cfe3a5d386c24d86176ba7bb5ab26d2 (patch)
tree4f799aae7b90d8b23e487765d67243b00a205131 /sw
parent0a5cd87e591d7f87bfab92716079af719259f143 (diff)
MM: export the SwDocShell mail merge via UNO
This saves the loading time for large document. Use it if you want to present the generated document to the user or write a mail merge unit tests. This includes: * renaming "only" to "shell" at multiple occurences * dropping the DBMGR_MERGE_SINGLE_FILE special type for the mail merge wizard in favour of an additional SwMergeDescriptor boolean * cleanup and renaming of the internal merge type enums, so these actually match the diffferent merge targets: printer, email, file and shell Change-Id: I33c6773972195193687ba9c3e12b562310d330c1
Diffstat (limited to 'sw')
-rw-r--r--sw/inc/dbmgr.hxx13
-rw-r--r--sw/inc/swabstdlg.hxx2
-rw-r--r--sw/source/ui/dbui/mailmergewizard.cxx2
-rw-r--r--sw/source/ui/dialog/swdlgfact.cxx4
-rw-r--r--sw/source/ui/dialog/swdlgfact.hxx2
-rw-r--r--sw/source/ui/envelp/mailmrge.cxx7
-rw-r--r--sw/source/uibase/dbui/dbmgr.cxx58
-rw-r--r--sw/source/uibase/inc/mailmrge.hxx6
-rw-r--r--sw/source/uibase/uno/unomailmerge.cxx172
9 files changed, 141 insertions, 125 deletions
diff --git a/sw/inc/dbmgr.hxx b/sw/inc/dbmgr.hxx
index 61eb74027c6e..797e64ce7832 100644
--- a/sw/inc/dbmgr.hxx
+++ b/sw/inc/dbmgr.hxx
@@ -77,11 +77,10 @@ class SwCalc;
enum DBManagerOptions
{
DBMGR_MERGE, ///< Data records in fields.
- DBMGR_MERGE_MAILMERGE, ///< Print mail merge.
- DBMGR_MERGE_MAILING, ///< Send mail merge as email.
- DBMGR_MERGE_MAILFILES, ///< Save mail merge as files.
- DBMGR_MERGE_SINGLE_FILE, ///< Save merge as single file.
- DBMGR_MERGE_ONLY ///< Create merge doc w/o save/print.
+ DBMGR_MERGE_PRINTER, ///< Print mail merge.
+ DBMGR_MERGE_EMAIL, ///< Send mail merge as email.
+ DBMGR_MERGE_FILE, ///< Save mail merge as files.
+ DBMGR_MERGE_SHELL ///< Create merge doc and keep the doc shell.
};
// Administration of (new) logical databases.
@@ -154,6 +153,7 @@ struct SwMergeDescriptor
bool bPrintAsync;
bool bCreateSingleFile;
+ bool bSubjectIsFilename;
SwMailMergeConfigItem* pMailMergeConfigItem;
@@ -167,6 +167,7 @@ struct SwMergeDescriptor
bSendAsAttachment( false ),
bPrintAsync( false ),
bCreateSingleFile( false ),
+ bSubjectIsFilename( false ),
pMailMergeConfigItem(0)
{}
@@ -277,7 +278,7 @@ public:
/// check if a data source is open
bool IsDataSourceOpen(const OUString& rDataSource,
- const OUString& rTableOrQuery, bool bMergeOnly);
+ const OUString& rTableOrQuery, bool bMergeShell);
/// open the source while fields are updated - for the calculator only!
bool OpenDataSource(const OUString& rDataSource, const OUString& rTableOrQuery,
diff --git a/sw/inc/swabstdlg.hxx b/sw/inc/swabstdlg.hxx
index daf8ad6246b5..f5542757bfa6 100644
--- a/sw/inc/swabstdlg.hxx
+++ b/sw/inc/swabstdlg.hxx
@@ -145,7 +145,7 @@ public:
virtual const OUString& GetSaveFilter() const = 0;
virtual const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > GetSelection() const = 0;
virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet> GetResultSet() const = 0;
- virtual bool IsSaveIndividualDocs() const = 0;
+ virtual bool IsSaveSingleDoc() const = 0;
virtual bool IsGenerateFromDataBase() const = 0;
virtual OUString GetColumnName() const = 0;
virtual OUString GetPath() const = 0;
diff --git a/sw/source/ui/dbui/mailmergewizard.cxx b/sw/source/ui/dbui/mailmergewizard.cxx
index d2ac379d7668..ced4c6e98c4c 100644
--- a/sw/source/ui/dbui/mailmergewizard.cxx
+++ b/sw/source/ui/dbui/mailmergewizard.cxx
@@ -277,7 +277,7 @@ void SwMailMergeWizard::CreateTargetDocument()
aDescriptor[ svx::daCommand ] <<= m_rConfigItem.GetCurrentDBData().sCommand;
aDescriptor[ svx::daCommandType ] <<= m_rConfigItem.GetCurrentDBData().nCommandType;
- SwMergeDescriptor aMergeDesc( DBMGR_MERGE_ONLY, GetSwView()->GetWrtShell(),
+ SwMergeDescriptor aMergeDesc( DBMGR_MERGE_SHELL, GetSwView()->GetWrtShell(),
aDescriptor);
aMergeDesc.pMailMergeConfigItem = &m_rConfigItem;
aMergeDesc.bCreateSingleFile = true;
diff --git a/sw/source/ui/dialog/swdlgfact.cxx b/sw/source/ui/dialog/swdlgfact.cxx
index b62e4223ccda..3b79a38c69dd 100644
--- a/sw/source/ui/dialog/swdlgfact.cxx
+++ b/sw/source/ui/dialog/swdlgfact.cxx
@@ -497,9 +497,9 @@ uno::Reference< sdbc::XResultSet> AbstractMailMergeDlg_Impl::GetResultSet() cons
return pDlg->GetResultSet();
}
-bool AbstractMailMergeDlg_Impl::IsSaveIndividualDocs() const
+bool AbstractMailMergeDlg_Impl::IsSaveSingleDoc() const
{
- return pDlg->IsSaveIndividualDocs();
+ return pDlg->IsSaveSingleDoc();
}
bool AbstractMailMergeDlg_Impl::IsGenerateFromDataBase() const
diff --git a/sw/source/ui/dialog/swdlgfact.hxx b/sw/source/ui/dialog/swdlgfact.hxx
index 1a037f71f160..0a4021993f71 100644
--- a/sw/source/ui/dialog/swdlgfact.hxx
+++ b/sw/source/ui/dialog/swdlgfact.hxx
@@ -286,7 +286,7 @@ class AbstractMailMergeDlg_Impl : public AbstractMailMergeDlg
virtual const OUString& GetSaveFilter() const SAL_OVERRIDE;
virtual const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Any > GetSelection() const SAL_OVERRIDE ;
virtual ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XResultSet> GetResultSet() const SAL_OVERRIDE;
- virtual bool IsSaveIndividualDocs() const SAL_OVERRIDE;
+ virtual bool IsSaveSingleDoc() const SAL_OVERRIDE;
virtual bool IsGenerateFromDataBase() const SAL_OVERRIDE;
virtual OUString GetColumnName() const SAL_OVERRIDE;
virtual OUString GetPath() const SAL_OVERRIDE;
diff --git a/sw/source/ui/envelp/mailmrge.cxx b/sw/source/ui/envelp/mailmrge.cxx
index b452f4e3cf74..693bebab1be5 100644
--- a/sw/source/ui/envelp/mailmrge.cxx
+++ b/sw/source/ui/envelp/mailmrge.cxx
@@ -139,7 +139,7 @@ SwMailMergeDlg::SwMailMergeDlg(vcl::Window* pParent, SwWrtShell& rShell,
pImpl (new SwMailMergeDlg_Impl),
rSh (rShell),
- nMergeType (DBMGR_MERGE_MAILING),
+ nMergeType (DBMGR_MERGE_EMAIL),
m_aDialogSize( GetSizePixel() )
{
get(m_pBeamerWin, "beamer");
@@ -495,11 +495,10 @@ bool SwMailMergeDlg::ExecQryShell()
SwDBManager* pMgr = rSh.GetDBManager();
if (m_pPrinterRB->IsChecked())
- nMergeType = DBMGR_MERGE_MAILMERGE;
+ nMergeType = DBMGR_MERGE_PRINTER;
else
{
- nMergeType = m_pSaveSingleDocRB->IsChecked() ?
- DBMGR_MERGE_SINGLE_FILE : DBMGR_MERGE_MAILFILES;
+ nMergeType = DBMGR_MERGE_FILE;
SfxMedium* pMedium = rSh.GetView().GetDocShell()->GetMedium();
INetURLObject aAbs;
if( pMedium )
diff --git a/sw/source/uibase/dbui/dbmgr.cxx b/sw/source/uibase/dbui/dbmgr.cxx
index 13bcbcd39bd9..9103a1a0dac9 100644
--- a/sw/source/uibase/dbui/dbmgr.cxx
+++ b/sw/source/uibase/dbui/dbmgr.cxx
@@ -430,11 +430,10 @@ bool SwDBManager::MergeNew( const SwMergeDescriptor& rMergeDesc )
bRet = Merge(&rMergeDesc.rSh);
break;
- case DBMGR_MERGE_MAILMERGE: // printing merge from 'old' merge dialog or from UNO-component
- case DBMGR_MERGE_MAILING:
- case DBMGR_MERGE_MAILFILES:
- case DBMGR_MERGE_SINGLE_FILE:
- case DBMGR_MERGE_ONLY:
+ case DBMGR_MERGE_PRINTER:
+ case DBMGR_MERGE_EMAIL:
+ case DBMGR_MERGE_FILE:
+ case DBMGR_MERGE_SHELL:
// save files and send them as e-Mail if required
bRet = MergeMailFiles(&rMergeDesc.rSh,
rMergeDesc);
@@ -875,9 +874,8 @@ bool SwDBManager::MergeMailFiles(SwWrtShell* pSourceShell,
//check if the doc is synchronized and contains at least one linked section
bool bSynchronizedDoc = pSourceShell->IsLabelDoc() && pSourceShell->GetSectionFmtCount() > 1;
bool bNoError = true;
- const bool bEMail = rMergeDescriptor.nMergeType == DBMGR_MERGE_MAILING;
- const bool bAsSingleFile = rMergeDescriptor.nMergeType == DBMGR_MERGE_SINGLE_FILE;
- const bool bMergeOnly = rMergeDescriptor.nMergeType == DBMGR_MERGE_ONLY;
+ const bool bEMail = rMergeDescriptor.nMergeType == DBMGR_MERGE_EMAIL;
+ const bool bMergeShell = rMergeDescriptor.nMergeType == DBMGR_MERGE_SHELL;
::rtl::Reference< MailDispatcher > xMailDispatcher;
OUString sBodyMimeType;
@@ -936,9 +934,9 @@ bool SwDBManager::MergeMailFiles(SwWrtShell* pSourceShell,
OSL_ENSURE(xSourceDocProps.is(), "DocumentProperties is null");
}
- if( !bMergeOnly && pSourceDocSh->IsModified() )
+ if( !bMergeShell && pSourceDocSh->IsModified() )
pSfxDispatcher->Execute( pSourceDocSh->HasName() ? SID_SAVEDOC : SID_SAVEASDOC, SFX_CALLMODE_SYNCHRON|SFX_CALLMODE_RECORD);
- if( bMergeOnly || !pSourceDocSh->IsModified() )
+ if( bMergeShell || !pSourceDocSh->IsModified() )
{
const SfxFilter* pStoreToFilter = SwIoSystem::GetFileFilter(
pSourceDocSh->GetMedium()->GetURLObject().GetMainURL( INetURLObject::NO_DECODE ), ::aEmptyOUStr );
@@ -982,7 +980,7 @@ bool SwDBManager::MergeMailFiles(SwWrtShell* pSourceShell,
if (!IsMergeSilent()) {
pSourceWindow = &pSourceShell->GetView().GetEditWin();
- if( bMergeOnly )
+ if( bMergeShell )
pProgressDlg = new CreateMonitor( pSourceWindow );
else {
pProgressDlg = new PrintMonitor( pSourceWindow, PrintMonitor::MONITOR_TYPE_PRINT );
@@ -995,7 +993,7 @@ bool SwDBManager::MergeMailFiles(SwWrtShell* pSourceShell,
Application::Reschedule();
}
- if(bAsSingleFile || rMergeDescriptor.bCreateSingleFile)
+ if(rMergeDescriptor.bCreateSingleFile)
{
// create a target docshell to put the merged document into
xTargetDocShell = new SwDocShell( SFX_CREATE_MODE_STANDARD );
@@ -1003,7 +1001,7 @@ bool SwDBManager::MergeMailFiles(SwWrtShell* pSourceShell,
if (nMaxDumpDocs)
lcl_SaveDoc( xTargetDocShell, "MergeDoc" );
SfxViewFrame* pTargetFrame = SfxViewFrame::LoadHiddenDocument( *xTargetDocShell, 0 );
- if (bMergeOnly) {
+ if (bMergeShell && pSourceWindow) {
//the created window has to be located at the same position as the source window
vcl::Window& rTargetWindow = pTargetFrame->GetFrame().GetWindow();
rTargetWindow.SetPosPixel(pSourceWindow->GetPosPixel());
@@ -1052,7 +1050,7 @@ bool SwDBManager::MergeMailFiles(SwWrtShell* pSourceShell,
sal_Int32 nDocNo = 1;
sal_Int32 nDocCount = 0;
- if( !IsMergeSilent() && bMergeOnly &&
+ if( !IsMergeSilent() && bMergeShell &&
lcl_getCountFromResultSet( nDocCount, pImpl->pMergeData->xResultSet ) )
static_cast<CreateMonitor*>( pProgressDlg )->SetTotalCount( nDocCount );
@@ -1079,7 +1077,7 @@ bool SwDBManager::MergeMailFiles(SwWrtShell* pSourceShell,
}
// create a new temporary file name - only done once in case of bCreateSingleFile
- if( 1 == nDocNo || (!rMergeDescriptor.bCreateSingleFile && !bAsSingleFile) )
+ if( 1 == nDocNo || !rMergeDescriptor.bCreateSingleFile )
{
INetURLObject aEntry(sPath);
OUString sLeading;
@@ -1093,7 +1091,7 @@ bool SwDBManager::MergeMailFiles(SwWrtShell* pSourceShell,
OUString sExt(comphelper::string::stripStart(pStoreToFilter->GetDefaultExtension(), '*'));
aTempFile.reset(
new utl::TempFile(sLeading, true, &sExt, &sPath));
- if( bAsSingleFile )
+ if( rMergeDescriptor.bSubjectIsFilename )
aTempFile->EnableKillingFile();
}
@@ -1107,7 +1105,7 @@ bool SwDBManager::MergeMailFiles(SwWrtShell* pSourceShell,
{
INetURLObject aTempFileURL(aTempFile->GetURL());
if (!IsMergeSilent()) {
- if( bMergeOnly )
+ if( bMergeShell )
static_cast<CreateMonitor*>( pProgressDlg )->SetCurrentPosition( nDocNo );
else {
PrintMonitor *pPrintMonDlg = static_cast<PrintMonitor*>( pProgressDlg );
@@ -1162,7 +1160,7 @@ bool SwDBManager::MergeMailFiles(SwWrtShell* pSourceShell,
pEvtSrc->LaunchMailMergeEvent( aEvt );
}
- if(rMergeDescriptor.bCreateSingleFile || bAsSingleFile )
+ if(rMergeDescriptor.bCreateSingleFile)
{
OSL_ENSURE( pTargetShell, "no target shell available!" );
// copy created file into the target document
@@ -1206,7 +1204,7 @@ bool SwDBManager::MergeMailFiles(SwWrtShell* pSourceShell,
pTargetShell->CalcLayout();
if ( (nMaxDumpDocs < 0) || (nDocNo <= nMaxDumpDocs) )
lcl_SaveDoc( xTargetDocShell, "MergeDoc" );
- if (bMergeOnly)
+ if (bMergeShell)
{
SwDocMergeInfo aMergeInfo;
aMergeInfo.nStartPageInTarget = nStartPage;
@@ -1332,7 +1330,7 @@ bool SwDBManager::MergeMailFiles(SwWrtShell* pSourceShell,
// Freeze the layouts of the target document after the first inserted
// sub-document, to get the correct PageDesc.
- if(!bFreezedLayouts && (rMergeDescriptor.bCreateSingleFile || bAsSingleFile))
+ if(!bFreezedLayouts && (rMergeDescriptor.bCreateSingleFile))
{
std::set<SwRootFrm*> aAllLayouts = pTargetShell->GetDoc()->GetAllLayouts();
std::for_each( aAllLayouts.begin(), aAllLayouts.end(),
@@ -1346,7 +1344,7 @@ bool SwDBManager::MergeMailFiles(SwWrtShell* pSourceShell,
Application::Reschedule();
// Unfreeze target document layouts and correct all PageDescs.
- if(rMergeDescriptor.bCreateSingleFile || bAsSingleFile)
+ if(rMergeDescriptor.bCreateSingleFile)
{
std::set<SwRootFrm*> aAllLayouts = pTargetShell->GetDoc()->GetAllLayouts();
std::for_each( aAllLayouts.begin(), aAllLayouts.end(),
@@ -1357,17 +1355,16 @@ bool SwDBManager::MergeMailFiles(SwWrtShell* pSourceShell,
DELETEZ( pProgressDlg );
// save the single output document
- if (bMergeOnly)
+ if (bMergeShell)
{
rMergeDescriptor.pMailMergeConfigItem->SetTargetView( pTargetView );
}
- else if(rMergeDescriptor.bCreateSingleFile || bAsSingleFile)
+ else if(rMergeDescriptor.bCreateSingleFile)
{
- if( rMergeDescriptor.nMergeType != DBMGR_MERGE_MAILMERGE )
+ if( rMergeDescriptor.nMergeType != DBMGR_MERGE_PRINTER )
{
OSL_ENSURE( aTempFile.get(), "Temporary file not available" );
- OUString sSub(sSubject);
- INetURLObject aTempFileURL(bAsSingleFile ? sSub : aTempFile->GetURL());
+ INetURLObject aTempFileURL( rMergeDescriptor.bSubjectIsFilename ? sSubject : aTempFile->GetURL());
SfxMedium* pDstMed = new SfxMedium(
aTempFileURL.GetMainURL( INetURLObject::NO_DECODE ),
STREAM_STD_READWRITE );
@@ -1432,7 +1429,7 @@ bool SwDBManager::MergeMailFiles(SwWrtShell* pSourceShell,
}
// Leave docshell available for caller (e.g. MM wizard)
- if (!bMergeOnly)
+ if (!bMergeShell)
xTargetDocShell->DoClose();
}
@@ -1829,7 +1826,7 @@ OUString SwDBManager::GetDBField(uno::Reference<XPropertySet> xColumnProps,
// checks if a desired data source table or query is open
bool SwDBManager::IsDataSourceOpen(const OUString& rDataSource,
- const OUString& rTableOrQuery, bool bMergeOnly)
+ const OUString& rTableOrQuery, bool bMergeShell)
{
if(pImpl->pMergeData)
{
@@ -1840,7 +1837,7 @@ bool SwDBManager::IsDataSourceOpen(const OUString& rDataSource,
&&
pImpl->pMergeData->xResultSet.is();
}
- else if(!bMergeOnly)
+ else if(!bMergeShell)
{
SwDBData aData;
aData.sDataSource = rDataSource;
@@ -2642,7 +2639,8 @@ void SwDBManager::ExecuteFormLetter( SwWrtShell& rSh,
SwMergeDescriptor aMergeDesc( pImpl->pMergeDialog->GetMergeType(), pView->GetWrtShell(), aDescriptor );
aMergeDesc.sSaveToFilter = pImpl->pMergeDialog->GetSaveFilter();
- aMergeDesc.bCreateSingleFile = !pImpl->pMergeDialog->IsSaveIndividualDocs();
+ aMergeDesc.bCreateSingleFile = pImpl->pMergeDialog->IsSaveSingleDoc();
+ aMergeDesc.bSubjectIsFilename = aMergeDesc.bCreateSingleFile;
if( !aMergeDesc.bCreateSingleFile && pImpl->pMergeDialog->IsGenerateFromDataBase() )
{
aMergeDesc.sAddressFromColumn = pImpl->pMergeDialog->GetColumnName();
diff --git a/sw/source/uibase/inc/mailmrge.hxx b/sw/source/uibase/inc/mailmrge.hxx
index 143e06b08cef..f3d67eeb831f 100644
--- a/sw/source/uibase/inc/mailmrge.hxx
+++ b/sw/source/uibase/inc/mailmrge.hxx
@@ -115,8 +115,8 @@ class SwMailMergeDlg : public SvxStandardDialog
bool ExecQryShell();
public:
- SwMailMergeDlg(vcl::Window* pParent, SwWrtShell& rSh,
- const OUString& rSourceName,
+ SwMailMergeDlg(vcl::Window* pParent, SwWrtShell& rSh,
+ const OUString& rSourceName,
const OUString& rTblName,
sal_Int32 nCommandType,
const ::com::sun::star::uno::Reference< ::com::sun::star::sdbc::XConnection>& xConnection,
@@ -125,7 +125,7 @@ public:
inline DBManagerOptions GetMergeType() { return nMergeType; }
- bool IsSaveIndividualDocs() const { return m_pSaveIndividualRB->IsChecked(); }
+ bool IsSaveSingleDoc() const { return m_pSaveSingleDocRB->IsChecked(); }
bool IsGenerateFromDataBase() const { return m_pGenerateFromDataBaseCB->IsChecked(); }
OUString GetColumnName() const { return m_pColumnLB->GetSelectEntry();}
OUString GetPath() const { return m_pPathED->GetText();}
diff --git a/sw/source/uibase/uno/unomailmerge.cxx b/sw/source/uibase/uno/unomailmerge.cxx
index 9787a01957ba..f54a9df40155 100644
--- a/sw/source/uibase/uno/unomailmerge.cxx
+++ b/sw/source/uibase/uno/unomailmerge.cxx
@@ -661,9 +661,10 @@ uno::Any SAL_CALL SwXMailMerge::execute(
DBManagerOptions nMergeType;
switch (nCurOutputType)
{
- case MailMergeType::PRINTER : nMergeType = DBMGR_MERGE_MAILMERGE; break;
- case MailMergeType::FILE : nMergeType = DBMGR_MERGE_MAILFILES; break;
- case MailMergeType::MAIL : nMergeType = DBMGR_MERGE_MAILING; break;
+ case MailMergeType::PRINTER : nMergeType = DBMGR_MERGE_PRINTER; break;
+ case MailMergeType::FILE : nMergeType = DBMGR_MERGE_FILE; break;
+ case MailMergeType::MAIL : nMergeType = DBMGR_MERGE_EMAIL; break;
+ case MailMergeType::SHELL : nMergeType = DBMGR_MERGE_SHELL; break;
default:
throw IllegalArgumentException("Invalid value of property: OutputType", static_cast < cppu::OWeakObject * > ( this ), 0 );
}
@@ -678,87 +679,98 @@ uno::Any SAL_CALL SwXMailMerge::execute(
boost::scoped_ptr< SwMailMergeConfigItem > pMMConfigItem;
uno::Reference< mail::XMailService > xInService;
- if (MailMergeType::PRINTER == nCurOutputType)
+ switch (nCurOutputType)
{
- IDocumentDeviceAccess* pIDDA = rSh.getIDocumentDeviceAccess();
- SwPrintData aPrtData( pIDDA->getPrintData() );
- aPrtData.SetPrintSingleJobs( bCurSinglePrintJobs );
- pIDDA->setPrintData( aPrtData );
- // #i25686# printing should not be done asynchronously to prevent dangling offices
- // when mail merge is called as command line macro
- aMergeDesc.bPrintAsync = false;
- aMergeDesc.aPrintOptions = aPrintSettings;
+ case MailMergeType::PRINTER:
+ {
+ IDocumentDeviceAccess* pIDDA = rSh.getIDocumentDeviceAccess();
+ SwPrintData aPrtData( pIDDA->getPrintData() );
+ aPrtData.SetPrintSingleJobs( bCurSinglePrintJobs );
+ pIDDA->setPrintData( aPrtData );
+ // #i25686# printing should not be done asynchronously to prevent dangling offices
+ // when mail merge is called as command line macro
+ aMergeDesc.bPrintAsync = false;
+ aMergeDesc.aPrintOptions = aPrintSettings;
+ aMergeDesc.bCreateSingleFile = true;
+ }
+ break;
+ case MailMergeType::SHELL:
aMergeDesc.bCreateSingleFile = true;
- }
- else /* FILE and MAIL*/
- {
- INetURLObject aURLObj;
- aURLObj.SetSmartProtocol( INET_PROT_FILE );
-
- if (!aCurDocumentURL.isEmpty())
+ pMMConfigItem.reset(new SwMailMergeConfigItem);
+ aMergeDesc.pMailMergeConfigItem = pMMConfigItem.get();
+ break;
+ case MailMergeType::FILE:
+ case MailMergeType::MAIL:
{
- // if OutputURL or FileNamePrefix are missing get
- // them from DocumentURL
- aURLObj.SetSmartURL( aCurDocumentURL );
- if (aCurFileNamePrefix.isEmpty())
- aCurFileNamePrefix = aURLObj.GetBase(); // filename without extension
- if (aCurOutputURL.isEmpty())
+ INetURLObject aURLObj;
+ aURLObj.SetSmartProtocol( INET_PROT_FILE );
+
+ if (!aCurDocumentURL.isEmpty())
+ {
+ // if OutputURL or FileNamePrefix are missing get
+ // them from DocumentURL
+ aURLObj.SetSmartURL( aCurDocumentURL );
+ if (aCurFileNamePrefix.isEmpty())
+ aCurFileNamePrefix = aURLObj.GetBase(); // filename without extension
+ if (aCurOutputURL.isEmpty())
+ {
+ aURLObj.removeSegment();
+ aCurOutputURL = aURLObj.GetMainURL( INetURLObject::DECODE_TO_IURI );
+ }
+ }
+ else // default empty document without URL
{
- aURLObj.removeSegment();
- aCurOutputURL = aURLObj.GetMainURL( INetURLObject::DECODE_TO_IURI );
+ if (aCurOutputURL.isEmpty())
+ throw RuntimeException("OutputURL is not set and can not be obtained.", static_cast < cppu::OWeakObject * > ( this ) );
}
- }
- else // default empty document without URL
- {
- if (aCurOutputURL.isEmpty())
- throw RuntimeException("OutputURL is not set and can not be obtained.", static_cast < cppu::OWeakObject * > ( this ) );
- }
- aURLObj.SetSmartURL( aCurOutputURL );
- OUString aPath = aURLObj.GetMainURL( INetURLObject::DECODE_TO_IURI );
+ aURLObj.SetSmartURL( aCurOutputURL );
+ OUString aPath = aURLObj.GetMainURL( INetURLObject::DECODE_TO_IURI );
- const OUString aDelim( "/" );
- if (!aPath.isEmpty() && !aPath.endsWith(aDelim))
- aPath += aDelim;
- if (bCurFileNameFromColumn)
- pMgr->SetEMailColumn( aCurFileNamePrefix );
- else
- {
- aPath += aCurFileNamePrefix;
- pMgr->SetEMailColumn( OUString() );
- }
- pMgr->SetSubject( aPath );
- if(MailMergeType::FILE == nCurOutputType)
- {
- aMergeDesc.sSaveToFilter = sSaveFilter;
- aMergeDesc.sSaveToFilterOptions = sSaveFilterOptions;
- aMergeDesc.aSaveToFilterData = aSaveFilterData;
- aMergeDesc.bCreateSingleFile = bSaveAsSingleFile;
- }
- else
- {
- pMgr->SetEMailColumn( sAddressFromColumn );
- if(sAddressFromColumn.isEmpty())
- throw RuntimeException("Mail address column not set.", static_cast < cppu::OWeakObject * > ( this ) );
- aMergeDesc.sSaveToFilter = sAttachmentFilter;
- aMergeDesc.sSubject = sSubject;
- aMergeDesc.sMailBody = sMailBody;
- aMergeDesc.sAttachmentName = sAttachmentName;
- aMergeDesc.aCopiesTo = aCopiesTo;
- aMergeDesc.aBlindCopiesTo = aBlindCopiesTo;
- aMergeDesc.bSendAsHTML = bSendAsHTML;
- aMergeDesc.bSendAsAttachment = bSendAsAttachment;
-
- aMergeDesc.bCreateSingleFile = false;
- pMMConfigItem.reset(new SwMailMergeConfigItem);
- aMergeDesc.pMailMergeConfigItem = pMMConfigItem.get();
- aMergeDesc.xSmtpServer = SwMailMergeHelper::ConnectToSmtpServer(
- *pMMConfigItem,
- xInService,
- sInServerPassword, sOutServerPassword );
- if( !aMergeDesc.xSmtpServer.is() || !aMergeDesc.xSmtpServer->isConnected())
- throw RuntimeException("Failed to connect to mail server.", static_cast < cppu::OWeakObject * > ( this ) );
+ const OUString aDelim( "/" );
+ if (!aPath.isEmpty() && !aPath.endsWith(aDelim))
+ aPath += aDelim;
+ if (bCurFileNameFromColumn)
+ pMgr->SetEMailColumn( aCurFileNamePrefix );
+ else
+ {
+ aPath += aCurFileNamePrefix;
+ pMgr->SetEMailColumn( OUString() );
+ }
+ pMgr->SetSubject( aPath );
+ if(MailMergeType::FILE == nCurOutputType)
+ {
+ aMergeDesc.sSaveToFilter = sSaveFilter;
+ aMergeDesc.sSaveToFilterOptions = sSaveFilterOptions;
+ aMergeDesc.aSaveToFilterData = aSaveFilterData;
+ aMergeDesc.bCreateSingleFile = bSaveAsSingleFile;
+ }
+ else
+ {
+ pMgr->SetEMailColumn( sAddressFromColumn );
+ if(sAddressFromColumn.isEmpty())
+ throw RuntimeException("Mail address column not set.", static_cast < cppu::OWeakObject * > ( this ) );
+ aMergeDesc.sSaveToFilter = sAttachmentFilter;
+ aMergeDesc.sSubject = sSubject;
+ aMergeDesc.sMailBody = sMailBody;
+ aMergeDesc.sAttachmentName = sAttachmentName;
+ aMergeDesc.aCopiesTo = aCopiesTo;
+ aMergeDesc.aBlindCopiesTo = aBlindCopiesTo;
+ aMergeDesc.bSendAsHTML = bSendAsHTML;
+ aMergeDesc.bSendAsAttachment = bSendAsAttachment;
+
+ aMergeDesc.bCreateSingleFile = false;
+ pMMConfigItem.reset(new SwMailMergeConfigItem);
+ aMergeDesc.pMailMergeConfigItem = pMMConfigItem.get();
+ aMergeDesc.xSmtpServer = SwMailMergeHelper::ConnectToSmtpServer(
+ *pMMConfigItem,
+ xInService,
+ sInServerPassword, sOutServerPassword );
+ if( !aMergeDesc.xSmtpServer.is() || !aMergeDesc.xSmtpServer->isConnected())
+ throw RuntimeException("Failed to connect to mail server.", static_cast < cppu::OWeakObject * > ( this ) );
+ }
}
+ break;
}
// save document with temporary filename
@@ -812,7 +824,13 @@ uno::Any SAL_CALL SwXMailMerge::execute(
if(aMergeDesc.xSmtpServer.is() && aMergeDesc.xSmtpServer->isConnected())
aMergeDesc.xSmtpServer->disconnect();
- return makeAny( sal_True );
+ if (DBMGR_MERGE_SHELL == nMergeType)
+ {
+ SwXTextDocument *xTextDoc = new SwXTextDocument( aMergeDesc.pMailMergeConfigItem->GetTargetView()->GetDocShell() );
+ return makeAny( Reference< XComponent >( xTextDoc->queryInterface( XComponent::static_type() ), css::uno::UNO_QUERY) );
+ }
+ else
+ return makeAny( sal_True );
}
void SAL_CALL SwXMailMerge::cancel() throw (com::sun::star::uno::RuntimeException, std::exception)