diff options
author | Lionel Elie Mamane <lionel@mamane.lu> | 2013-03-12 17:57:57 +0100 |
---|---|---|
committer | Lionel Elie Mamane <lionel@mamane.lu> | 2013-03-12 18:16:45 +0100 |
commit | 4178806bb010129f3b13b62825476666fe48ddcd (patch) | |
tree | 26f68a3eb4891945ee06f3630dcf93960de7b3ac /reportdesign | |
parent | 36caac0e029a3caf50cb27af339efd69008d414e (diff) |
reportbuilder: make "Group on" not-"Each Value" actually work
Change-Id: Id5d73f9aac48ebfb6987e5bf0df37e62f1817bdc
Diffstat (limited to 'reportdesign')
-rw-r--r-- | reportdesign/source/filter/xml/xmlEnums.hxx | 1 | ||||
-rw-r--r-- | reportdesign/source/filter/xml/xmlExport.cxx | 15 | ||||
-rw-r--r-- | reportdesign/source/filter/xml/xmlfilter.cxx | 1 |
3 files changed, 14 insertions, 3 deletions
diff --git a/reportdesign/source/filter/xml/xmlEnums.hxx b/reportdesign/source/filter/xml/xmlEnums.hxx index 53df992246ea..1d98a4d92eff 100644 --- a/reportdesign/source/filter/xml/xmlEnums.hxx +++ b/reportdesign/source/filter/xml/xmlEnums.hxx @@ -60,6 +60,7 @@ namespace rptxml XML_TOK_START_NEW_COLUMN , XML_TOK_RESET_PAGE_NUMBER , XML_TOK_PRINT_HEADER_ON_EACH_PAGE , + XML_TOK_SORT_EXPRESSION , XML_TOK_GROUP_EXPRESSION , XML_TOK_GROUP_HEADER , XML_TOK_GROUP_GROUP , diff --git a/reportdesign/source/filter/xml/xmlExport.cxx b/reportdesign/source/filter/xml/xmlExport.cxx index ba25f5e15e0e..781c71304269 100644 --- a/reportdesign/source/filter/xml/xmlExport.cxx +++ b/reportdesign/source/filter/xml/xmlExport.cxx @@ -1078,7 +1078,8 @@ sal_Bool ORptExport::exportGroup(const Reference<XReportDefinition>& _xReportDef if ( xGroup->getResetPageNumber() ) AddAttribute(XML_NAMESPACE_REPORT, XML_RESET_PAGE_NUMBER, XML_TRUE ); - ::rtl::OUString sExpression = xGroup->getExpression(); + const ::rtl::OUString sField = xGroup->getExpression(); + ::rtl::OUString sExpression = sField; if ( !sExpression.isEmpty() ) { static ::rtl::OUString s_sQuote(RTL_CONSTASCII_USTRINGPARAM("\"\"")); @@ -1097,6 +1098,7 @@ sal_Bool ORptExport::exportGroup(const Reference<XReportDefinition>& _xReportDef sFormula += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("\")")); sExpression = sFormula; } + AddAttribute(XML_NAMESPACE_REPORT, XML_SORT_EXPRESSION, sField); AddAttribute(XML_NAMESPACE_REPORT, XML_GROUP_EXPRESSION,sExpression); sal_Int16 nRet = xGroup->getKeepTogether(); ::rtl::OUStringBuffer sValue; @@ -1525,6 +1527,7 @@ void ORptExport::exportGroupsExpressionAsFunction(const Reference< XGroups>& _xG ::rtl::OUString sFunction,sPrefix,sPostfix; ::rtl::OUString sExpression = xGroup->getExpression(); ::rtl::OUString sFunctionName; + ::rtl::OUString sInitialFormula; switch(nGroupOn) { case report::GroupOn::PREFIX_CHARACTERS: @@ -1558,14 +1561,18 @@ void ORptExport::exportGroupsExpressionAsFunction(const Reference< XGroups>& _xG { sFunction = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("INT")); uno::Reference< XFunction> xCountFunction = xFunctions->createFunction(); - xCountFunction->setInitialFormula(beans::Optional< ::rtl::OUString>(sal_True,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("rpt:1")))); + xCountFunction->setInitialFormula(beans::Optional< ::rtl::OUString>(sal_True,::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("rpt:0")))); ::rtl::OUString sCountName = sFunction + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("_count_")) + sExpression; xCountFunction->setName(sCountName); xCountFunction->setFormula(::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("rpt:[")) + sCountName + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("] + 1"))); exportFunction(xCountFunction); sExpression = sCountName; - sPrefix = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" / ")) + ::rtl::OUString::valueOf(xGroup->getGroupInterval()); + // The reference to sCountName in the formula of sFunctionName refers to the *old* value + // so we need to expand the the formula of sCountName + sPrefix = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(" + 1) / ")) + ::rtl::OUString::valueOf(xGroup->getGroupInterval()); sFunctionName = sFunction + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("_")) + sExpression; + sFunction = sFunction + ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("(")); + sInitialFormula = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("rpt:0")); } break; default: @@ -1580,6 +1587,8 @@ void ORptExport::exportGroupsExpressionAsFunction(const Reference< XGroups>& _xG sFunctionName = sFunctionName.replace(pReplaceChars[j],'_'); xFunction->setName(sFunctionName); + if ( !sInitialFormula.isEmpty() ) + xFunction->setInitialFormula(beans::Optional< ::rtl::OUString>(sal_True, sInitialFormula)); sFunction = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("rpt:")) + sFunction; sFunction += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("([")); sFunction += sExpression; diff --git a/reportdesign/source/filter/xml/xmlfilter.cxx b/reportdesign/source/filter/xml/xmlfilter.cxx index 22fbd1550575..71c8e679c577 100644 --- a/reportdesign/source/filter/xml/xmlfilter.cxx +++ b/reportdesign/source/filter/xml/xmlfilter.cxx @@ -797,6 +797,7 @@ const SvXMLTokenMap& ORptFilter::GetGroupElemTokenMap() const { XML_NAMESPACE_REPORT, XML_RESET_PAGE_NUMBER , XML_TOK_RESET_PAGE_NUMBER }, { XML_NAMESPACE_REPORT, XML_PRINT_HEADER_ON_EACH_PAGE , XML_TOK_PRINT_HEADER_ON_EACH_PAGE }, { XML_NAMESPACE_REPORT, XML_RESET_PAGE_NUMBER , XML_TOK_RESET_PAGE_NUMBER }, + { XML_NAMESPACE_REPORT, XML_SORT_EXPRESSION , XML_TOK_SORT_EXPRESSION }, { XML_NAMESPACE_REPORT, XML_GROUP_EXPRESSION , XML_TOK_GROUP_EXPRESSION }, { XML_NAMESPACE_REPORT, XML_GROUP_HEADER , XML_TOK_GROUP_HEADER }, { XML_NAMESPACE_REPORT, XML_GROUP , XML_TOK_GROUP_GROUP }, |