Get APEX Report column value to a page item - oracle

I have an APEX page with a static region and a report region (not interactive report).
Report will always display 30 questions (rows), with 10 rows per pagination.
So, Row Set "1" looks as follows.
Q.No__________Q.Description________Rating
01_____________AAAAAAAA________5
02_____________BBBBBBBB________3
XX ____________XXXXXXXX________N
10_____________CCCCCCC_________2
When next button is clicked in the report, row Set "2" looks as follows.
Q.No__________Q.Description________Rating
11_____________AAAAAAAA________5
12_____________BBBBBBBB________3
XX ____________XXXXXXXX________N
20_____________CCCCCCC_________2
And last row Set (3) looks as follows.
Q.No__________Q.Description________Rating
21_____________AAAAAAAA________5
22_____________BBBBBBBB________3
XX ____________XXXXXXXX________N
30_____________CCCCCCC_________2
My requirement is as follows.
In the static region above the report, I need to show different content based on the row set.
For first row set (questions 1 to 10), I have to show in the static region "This questions are related to AAA".
Similarly, for second row set (questions 11 to 20), I have to show in the static region "This questions are related to BBB"... and so on
For this, I was trying to get the value of the first row, first column (Q.No) of the report to a hidden page item. Based on this, I am planning to change the display text.
If it is 1, then static content will be "This questions are related to AAA"
If it is 11, then static content will be "This questions are related to BBB"
If it is 21, then static content will be "This questions are related to CCC"
I am not able to find a way to pass the value of the first row, first column of the report to a hidden page item.
Another approach would be to get the "row_set" number of the report to a hidden page item ... don't know if there is any APEX variable that gives APEX report "row_set" / "cursor" number...
Any help / suggestions / ideas please...

There isn't an easy way to do this, as far as I know. It would be possible to write Javascript to interrogate the pagination section of the report and see what it says is being displayed. However, given your apparently very specific 30 rows of data with associated headings, it might be easier to not use pagination at all, but instead to add your own Next and Previous buttons that set a hidden item to control pagination and then use the hidden item in the report's SQL:
... and question_no between :p123_que_no_hidden and :p123_que_no_hidden+9

Related

Adding tables at run time in Telerik Reporting

I've been reading Telerik's documentation and I'm not sure if this is possible: I'm being asked to add tables to a report at run time, without doing so programmatically. A query is run that fetches hierarchical data, and the report owner would like to add a new table to the report for each member of the topmost parent, so that each topmost parent has their own table, with a text box title on top of the table containing the parent's name, in the following pattern:
TopParent1
[Parent1's table]
TopParent2
[Parent2's table]
...
Does anyone know how I could go about doing that without doing so programmatically? Every example and/or bit of documentation I've seen pertains to programmatically adding tables.
It is possible to add tables to a report at run time, without doing
so programmatically?
R: It's not possible to add table with out saying programmatically : the size of each element , the exact position , etc .. .. ..
HowTo create a 'hierachical' report with conditional display ?
1/. Hierachical Report.
Read the telerik official tutorial on How to: Create a Master-Detail Report Using a SubReport Item
Using the SubReport report item you can display one report within another report. The data for each SubReport can be completely different.
But You can achiev Parent/chield relation by Passing Parameters to a SubReport.
/!\ Caution /!\
Page sections are not related to the report itself, but are relative to the paper or screen. Thus page sections of nested/detail reports are ignored and only the page sections of the main report are visible.
In order to have sections that repeat on every page similar to page sections, consider using an unbound group (no grouping criteria specified) and set the PrintOnEveryPage property of its sections to True. Be aware that you cannot use PageCount and PageNumber global objects in group sections.
2/. Conditional Display
You will need to hide Report if subreport have no result.
If you want the user to choose if he want some sub report.
You can do it by passing parameter from your calling application to your report constructor.
And use Something like a Bitfield or an enum to choose what to display.
And What about a C# controler in the master report code behind ?
public myReportConstructor(int SubreportToDisplay)
{
InitializeComponent();
Hiden_Display(SubreportToDisplay);
}
private void Hiden_Display(int _code)
{
if ((_code & (int)myEnum.InfoClient) != (int)myEnum.InfoClient)
HideNShrink(SUBREPORT_CLIENT);
if ((_code & (int)myEnum.Item) != (int)myEnum.Item)
{
HideNShrink(SUBREPORT_Product.Item1);
HideNShrink(SUBREPORT_Product.ItemTWO);
}
}
private void HideNShrink(ReportItem target)
{// http://www.telerik.com/support/kb/reporting/details/collapse-the-container-when-hiding-child-report-items-
target.Visible = false;
target.Height = Telerik.Reporting.Drawing.Unit.Pixel(1);
}
I use a little trick here in my designer every subreport item is set to public:
private Telerik.Reporting.TextBox textBox17;
public Telerik.Reporting.SubReport SubReport_Client;
public Sub_Client sub_CLI1;
When hidding Client I will use the SubReport_Client.
That is the SubReport item, the container of my SubReport Sub_Client ;
(Yes they name the container and the containt are the same name, thats confusing at First, but it's Vs/Telerik choice)
When hidding a Sub Report That is in an other Sub Report.
I use the ContaintSubReport, Container of the nested-nested SubReport.
like: sub_CLI1.nested-nested_SubReport
I was able to answer my own question as follows:
Create two blank reports.
On the report chosen to use for the detail report, remove the report header and footer.
Add data source and parameter/s to the detail report (in my case, an SQL data source) and set report data source to the data source created here.
Add group to report with the value of groupings set to the top-most result in query bound to report. (Groupings = Fields.Parent)
Create text box with the value set to the field for the top result (textbox1.Value = Fields.Parent) or use data explorer to drag and drop Fields.Parent into the group header.
Create text boxes to mimic table column heads (one text box for each title of the columns) and place them into the group header with the text box containing the topmost result (or Fields.Parent).
Drag or create text fields for the rest of the fields in the query (Fields.Child1, Fields.Child2, Fields.Child3, etc) in the detail section of the report, aligned vertically with their column header. Preview the report--it should contain a table-like structure that repeats on each top result.
Switch to other report.
Add same parameter/s to that report.
Add subreport item to the detail section of that report.
Set subreport report source to Type and report document, then select the name of the detail report (the first one created here).
Set parameter/s for subreport to the same parameter/s used in the subreport.
Using that, I was able to essentially add a table per item in the first column of the query. The report created first serves as a wrapper for the query, and because it's being placed in the other report as a subreport item with the grouping I created, it is allowed to repeat as much as it needs to in order to display all the rows in the query.
I used the Telerik documentation for master-detail reports and report structures for this.

Show tablix total outside of table

I have a weekly report which totals anywhere from 200 - 1000 rows of data. For my accounting people, the total is the only value of import as they simply use it for accrual purposes. I would like to either have the total appear at the top of the report or in a separate text box indicating this is the total for the report. Does anyone have a good idea on how to accomplish this?
If I understand correctly you need to get the result of some aggregate function on a tablix shown in a textbox outside the tablix.
That can be achieved by placing a textbox anywhere on the report, and in the expression for that textbox add a reference to the dataset you need to aggregate, e.g.:
=Sum(Fields!SomeValue.Value, "myDataSet")
Where SomeValue is the name of the field you need to aggregate, and myDataSet is the name of the DataSet that fieldis in.
Your question has already been answered by the other answer. Just as an alternative, you could try one more thing.
On the "details" row group(which appears by default), right click and choose "Add Total".
This will appear in a separate text box outside the report.

BIRT Reports column not spanding the whole row as desired

I am fairly new to BIRT reports.
In the BIRT reports designer I have added a 2nd row to my table which is binded to a data set. In this 2nd row I want 1 column from my data set to take up the whole row.
So what I did was to add the second row and merge all the columns in that row to form one column. I then added a text field with Dynamic HTML Text.
<VALUE-OF>row["ITEMDESCRIPTION"]</VALUE-OF>
The problem I have is that the data is not taking the whole row. It is being wrapped into only a small section of the row. I must be missing something. Can someone help me with this pls.
I'm attaching both the way the end report looks like and also the screenshot of the set up in the designer.
End Result
Designer (you can see all the rows merged in the second row of the table and in the properties i can see a colspan of 10 for that single column)
thanks
I've found out that the asnwer to this question is to make the field element inline style rather than block and also to check the No Wrapping check box for this field int he designer.

Different layout for 1st and rest pages of report

I currently have a detailed report to design:
A report which has different header-footer-detail for the first and rest of the pages. I tried to overcome the challange by using 2 Master Pages (not quite achieved anything yet) but I am stuck at the point which row count of 1st and rest of the pages... 1st page has 20 rest of the pages have 35 rows. Namely the question is:
"How can I set different pagebreak intervals for the table for each page?"
PS: BIRT version: 3.7
Edit: I've tried to create a group on row number and put a filter on row number to maintain flow between 2 different tables but no luck. (It didnt make real sense to put row filter but tried anyway :))
What you may need to do in the body section of your report is create a grid of one column and two rows. In the advanced properties for the upper cell, look under the section property for the Master Page setting, set that value equal to the name of your first master page. Place your report contents in that cell and set the master page references to your first master page as well. Repeat this for the second cell and references to the second page. Your table(s) have an advanced property for page break interval that you can adjust to control how many rows go on a page.
However if you want your table data to flow continuously from the first page into the second page and onward, I am not sure if this is possible but will update my answer if I find a way.

Creating a Form in APEX to set Variables in a Query for an Interactive Report

I am a relative APEX noob.
I'm running APEX 4.0 against a 10gR2 database.
I've written a query that takes a few inputs (two date fields, for start and end, and a text field for further filtering) and created a dynamic report out of it that works when I pull the input variables (:START_DATE, :END_DATE, :OFFICE) out of it or replace them with static values.
I want to create a form on a page that submits those values to the dynamic report page for use in the query to filter the results the user sees when he or she hits the report.
I'm not having much luck finding a good step-by-step example of this. I created a blank page with two Date Pickers and a LOV select dropdown, but am unsure how to best translate those values into the dynamic report.
Can somebody point me at the right documentation for this?
The following was developed using Apex 4.1 but apart from some cosmetic changes the principles should be the same.
The data comes from the standard scott.emp schema.
Overview
This is page 1, the user can enter an empno and\or a hiredate.
When submit is pressed the following report on a different page is displayed:
How it works
On page 1 I have created the three items shown. The text items are called them P1_EMPNO, and P1_HIREDATE. The action for the button is "Submit Page"
Still on page 1, create a branch with the following values:
This branch navigates to page 2 (which is yet to be developed) and sets the values of items on page 2 with the values from page 1.
Create a new page, in this example this will be referred to page 2.
On page 2 create a new interactive report using the following query:
select e.*
from emp e
Next create two text items in the same region as the report and call these :P2_EMPNO and :P2_HIREDATE. I have found it useful to show these items during development so you can see that the correct values are being passed through to the page. You can always set them as hidden once you happy with the report.
Finally amend the query used by the interactive report to use the values supplied by page 1
Run the application.
You want to reference your page items in your query, which means you'll have to submit your page before your query will pick up the session state of them. What I do when I provide a small parameter form, is to put a button up there as well (i.e. labeled 'Query'), which does a submit.
In your report you can then reference your items. If for example you have 2 items P1_DATE_START and P1_DATE_END, your query could look like:
SELECT firstname, lastname, job
FROM employees
WHERE employment_start BETWEEN to_date(:P1_DATE_START) AND to_date(:P1_DATE_END);

Resources