How do I DISPLAY on multiple lines? - openedge

I'm trying to display the current time every second, but the current time shows up on only 1 row and it seems to delete the last result.
I tried doing it like this, but this only sets the width and height for the box that contains the information.
DISPLAY currentDate + currentTime FORMAT "x(50)" WITH 5 DOWN 5 col.
Here's what I would like:

do while true:
display now with 5 down.
pause.
down.
end.
The DOWN command forces the frame to move to the next iteration. Whether or not you need it depends on the nature of the block that the frame is scoped to. (DO blocks need it.)

Related

how to implement a counter with AngularJS inside a ng-repeat?

I've got an app, where I get a bunch of data from the API, this data rapresents activities done on a given
day in a given month, and they are displayed in a table.
I can have different tables (let s say one for working activities, one for school and so on).
In the tables, <TH> are the days of the month, and the first TD of each row is the month.
The table only generates a row for any given month only if there is data in that month.
A first ng-repeat will create X number of tables depending on the different activities, and
a second nested ng-repeat will fill the rows of the table for the months with data in it.
Everything works fine, but I have an issue.
There is a specific print view for these tables, before it was one table per page (I used a css rule to break page after every table)
but now I wanna implement something better, as a table could have only one row
(let s say you have activities only in january, and none in other months)
it's pretty ugly when it breaks the page and prints just one table with one row in a new page.
So I wanna implement a counter that let's say after 15 rows it will break the page.
By 15 rows I mean global rows, so it could be a full table with 12 rows (12 months with data) followed
by a table with 3rows only, and then it would break page for the next table.
What's the best way to achieve something like this in angularJS?
with: p.presences.length I get in return the number of months each table in the ng-repeat will have.
So my idea is to have a counter that adds p.presences.length at each iteration of the ng-repeat, then I would use that counter in a ng-class to break the page,
Currently to break pages I'm using this code:
<div class="breakPagePrint" ng-class="p.print ? 'showTablePrint' : 'noDisplay'"> </div>
with this css code:
.breakPagePrint {
page-break-before: always;
}
p.print is a Boolean that is given by a checkbox on every table, so if the user wants a given table to be included in the print page, he ll check the box.
so my idea is to put in this ng-class an expression with the counter, something like
ng-class= "tableCounter > 15 && p.print ? 'showTablePrint' : 'noDisplay'"
but in this case the counter should get reset after 15 otherwise it won't break page again after another 15counts (at 30).
If anyone has some ideas on how to nicely implement a counter and how to use it at best in my case.
Thank you
Use the $index of your ng-repeat to check to see when it has covered a multiple 15 records or use the p.presences.length if that gives the property you need (i.e. the counter for each row). Then insert the div at each multiple.
Assuming your div above currently works (but only for 15 at the moment) then just add the following code to that div. This uses the modulus of 15.
<div ng-class="{'breakPagePrint':(p.presences.length%15==0),'noDisplay':(p.presences.length%15!=0)}"></div>
(I'm para-coding so not 100% sure of the syntax) But give that a try and see if it works. But basically it adds the breaking div whenever the p.presences.length is a multiple of 15, or every 15 records.

XSLT - Table to continue in 3 columns on the same page

Hopefully someone has done this - I need a 3 column page (side-by-side) with a two column table (with the headers) to fill the three columns. The table is fairly long and I need it to wrap/continue from the first column on the page to the second column and on to the third and then continue to the next page in the same fashion. Right now I can only get the table to show in one column on the page and it continues on the next page. The final output is a printed PDF page.
Using span="all" is the way to cause some in flow content to span all the columns of a multi-column document. For brevity in answering, I am posting a picture of the XSL FO for something like this.

Changing the tooltip dynamically for each record

In forms I have a block that contains name of tables.
The column is narrow so I want to add a tooltip that contains the value for each row.
I tried to put this code in post_query
:set_item_property('block1.value',tooltip_text, :block1.value);
but the tooltip always contains the last row's value and shows
it for all the rows. What could be the problem here?
set_item_instance_property is the ideal way to affect a column for just specific rows of data. But, tooltip_text is not available for setting via set_item_instance_property.
What you could do, though, is put your call to set_item_property into a when-new-record-instance trigger on the block. That way it should change the tooltip each time a new record becomes the focus.

RDLC report footer with value from "Current Record"

I don't know if its possible or not, but thought I'd ask. Many times reports need data grouping to have anchored to the bottom of the report some summary information, such as invoices. You don't want the totals shifting UPwards based on only 2 detail lines vs another with 20. I've tried working with using the Tablix bound to the data source for the output but couldn't get it quite right... It would either shift up, or force break and appear at top of following page.
So, if anyone has some ideas to help resolve that, that too would be great.
My second approach was to just use a simple report page footer. However, the overall "Report" page is not technically "BOUND" to any datasource. So, if I put a textbox in the footer and want it to show something, I can't pick "the most recent row from the datasource associated with the Tablix", it always requires an aggregate, such as
=First(Fields!SomeField.Value, "SomeDataSource" )
=Sum( ...
=Last( ...
etc...
I just want it to have whatever was the most recent... so I tried to use report variables to create one and was thinking to have it get updated per row being processed, so it always had whatever the "latest" value was and I could just dump that value at the bottom of the report.
Any suggestions to either would be great. Thanks.
I know this is an old question, but I had a very similar problem and came up with a unique solution. I had a statement that needed to have the payment slip print at the bottom of the page even if the statement line items wrapped over to another page. I solved it by:
Making all rows in the report a uniform height.
Calculating how many rows were required to fill the page (minus the height of my payment slip.
Getting the number of line items in the statement.
Calculating the remaining number of rows needed to push my payment slip to the bottom of the page.
Adding a sub-report with the calculated number of blank rows to pad out the necessary space between the line items and the payment slip.
The advantage of that approach was that I could generate bills for multiple customers, and since the padding is part of the group it would be customized for each customer's bill and bottom-justify the pay slip for each of them.
You can use a similar approach to push your "footer" info to the bottom of your page. Since it is still inside of your data group you'll have access to the data values you need as well.
In the footer you can refer to report item from report body, like this:
=ReportItems!myFooterValueTextBox.Value
The catch is that you can refer to only one report item in your footer, so you may need to add invisible footer row in your table and concatenate all your totals into one cell (myFooterValueTextBox) in that row:
=First(Fields!SomeField.Value, "SomeDataSource") + "|" +
Sum(...) + "|" + .... +
Last(...)
I used pipe as deliminator in my example, so then in the footer, I would split the string and place values in appropriate containers, like this:
=Split(ReportItems!myFooterValueTextBox.Value,"|")(0)

How can i create a Flex list component with the 0 rowIndex starting at the bottom instate of the top

Does anybody know how i can create a stacking list component (just like photoshop) where the first row starts at the bottom and the second on above the bottom and so on.
Normally the list component works like this.
0
1
2
3
what i need is a list component that works like this
3
2
1
0
To illustrated my question i have uploaded a picture of the component i need to build.
The rowindex of the inverted list component must start at the bottom.
meaning that the lowest row in the list is always zero.
Does anybody know how i can accomplish this?
Thanks
DJ
one way of doing this is to always add the row in the container using this.addChildAt(0);
by doing this every new row will be added to zero index and its order will be reverted from default order
Define a new layout to do this. This answer has some starting links.
Make sure you get the virtual layout working as well for the list control (I suggest just grabbing the VerticalLayout and changing the updateDisplayListReal.
obviously you are storing the layers information in array or something like this. just revers the the array before assigning it to list control.
that is
var a:Array = ["1","2","3"];
a.reverse();
now it will look like
// 3 2 1 when assigned to list control as data provider.

Resources