Quantcast
Channel: SmartClient Forums
Viewing all articles
Browse latest Browse all 4756

Export PDF via exportContent makes 2 calls for a ListGrid

$
0
0
If I call RPCManager.exportContent passing in a ListGrid, 2 rpc calls are made to the server for operation getPdfObject and as a result I get 2 requests to save the pdf output. However, if I pass in a Layout that contains the ListGrid, then only a single request to the server is made for operation getPdfObject.

Below is sample code to reproduce it.

"Download PDF - 1" passes in the layout and results in 1 request as expected.
"Download PDF - 2" passes in the listgrid and results in 2 requests.

Code:

public class Sandbox1 implements EntryPoint {
    DataSource dataSource;
    ListGrid grid;
    int counter = 0;
    ListGridRecord[] cacheData = new ListGridRecord[3];

    @Override
    public void onModuleLoad() {

        cacheData[0] = new ListGridRecord();
        cacheData[0].setAttribute("fldId", 1);
        cacheData[0].setAttribute("fld1", "val 1");
        cacheData[0].setAttribute("fld2", 10);
        cacheData[0].setAttribute("fld3", new Date());
        cacheData[1] = new ListGridRecord();
        cacheData[1].setAttribute("fldId", 2);
        cacheData[1].setAttribute("fld1", "val 2");
        cacheData[1].setAttribute("fld2", 20);
        cacheData[1].setAttribute("fld3", new Date());
        cacheData[2] = new ListGridRecord();
        cacheData[2].setAttribute("fldId", 3);
        cacheData[2].setAttribute("fld1", "val 3");
        cacheData[2].setAttribute("fld2", 30);
        cacheData[2].setAttribute("fld3", new Date());

        final VLayout appLayout = new VLayout();
        appLayout.setWidth100();
        appLayout.setHeight100();

        buildDataSource();
        buildGrid();

        IButton downloadPdf1 = new IButton("Download PDF - 1");
        downloadPdf1.addClickHandler(new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {
                DSRequest reqProps = new DSRequest();
                reqProps.setAttribute("skinName", "Enterprise");
                reqProps.setAttribute("pdfName", "export");
                RPCManager.exportContent(appLayout, reqProps);
            }
        });

        IButton downloadPdf2 = new IButton("Download PDF - 2");
        downloadPdf2.addClickHandler(new ClickHandler() {
            @Override
            public void onClick(ClickEvent event) {
                DSRequest reqProps = new DSRequest();
                reqProps.setAttribute("skinName", "Enterprise");
                reqProps.setAttribute("pdfName", "export");
                RPCManager.exportContent(grid, reqProps);
            }
        });

        appLayout.setMargin(5);
        appLayout.setMembersMargin(5);
        appLayout.addMembers(downloadPdf1, downloadPdf2, grid);
        appLayout.draw();

    }

    private void buildGrid() {
        grid = new ListGrid();
        grid.setWidth100();
        grid.setHeight100();

        grid.setDataFetchMode(FetchMode.PAGED);
        grid.setDataPageSize(100);
        // Experimenting with some tweaks to draw ahead ratios.
        grid.setDrawAheadRatio(1.5F);
        grid.setQuickDrawAheadRatio(3.0F);

        grid.setTitle("Test Grid");
        grid.setAutoFitFieldsFillViewport(Boolean.TRUE);
        grid.setAutoFitWidthApproach(AutoFitWidthApproach.BOTH);
        grid.setAutoFitFieldWidths(Boolean.TRUE);
        grid.setCanFreezeFields(Boolean.FALSE);
        grid.setCanGroupBy(Boolean.FALSE);
        grid.setRecordComponentPoolingMode(RecordComponentPoolingMode.RECYCLE);
        grid.setAlternateRecordStyles(Boolean.TRUE);
        grid.setWidth100();
        grid.setAutoFetchData(true);
        // Disable roll over on grid, consider exposing properties for these later.
        grid.setShowRollOver(Boolean.FALSE);
        grid.setUseAdvancedFieldPicker(Boolean.TRUE);
        // Always use advanced field picker
        grid.setAdvancedFieldPickerThreshold(0);

        grid.setSelectionType(SelectionStyle.MULTIPLE);
        grid.setSelectionAppearance(SelectionAppearance.ROW_STYLE);

        grid.addRecordClickHandler(new RecordClickHandler() {
            @Override
            public void onRecordClick(RecordClickEvent event) {
                ListGridRecord[] selectedRecords = grid.getSelectedRecords();
                if (selectedRecords != null && selectedRecords.length == 1) {
                    GWT.log("1 row selected");
                } else {
                    GWT.log(selectedRecords.length + " rows selected");
                }
            }
        });

        grid.addHoverHandler(new HoverHandler() {
            @Override
            public void onHover(HoverEvent event) {
                event.cancel();
            }
        });

        grid.addDrawHandler(new DrawHandler() {
            @Override
            public void onDraw(DrawEvent event) {
                GWT.log("Draw event ");
            }
        });

        grid.addFetchDataHandler(new FetchDataHandler() {
            @Override
            public void onFilterData(FetchDataEvent event) {
                GWT.log("FetchDataEvent event ");
            }
        });

        grid.addRowContextClickHandler(new RowContextClickHandler() {
            @Override
            public void onRowContextClick(RowContextClickEvent event) {
                GWT.log("RowContextClickEvent event ");
            }
        });

        grid.addDataArrivedHandler(new DataArrivedHandler() {
            @Override
            public void onDataArrived(DataArrivedEvent event) {
                GWT.log("DataArrivedEvent event ");
            }
        });

        grid.addFieldStateChangedHandler(new FieldStateChangedHandler() {
            @Override
            public void onFieldStateChanged(final FieldStateChangedEvent event) {
                GWT.log("FieldStateChangedEvent event ");
            }
        });

        ListGridField gfld1 = new ListGridField("fld1", "Field 1");
        ListGridField gfld2 = new ListGridField("fld2", "Field 2");
        ListGridField gfld3 = new ListGridField("fld3", "Field 3");

        grid.setFields(gfld1, gfld2, gfld3);

        grid.setDataSource(dataSource, grid.getAllFields());
    }

    private void buildDataSource() {
        dataSource = new DataSource();
        dataSource.setClientOnly(true);
        dataSource.setDataFormat(DSDataFormat.JSON);
        DataSourceField fldId = new DataSourceField("fldId", FieldType.INTEGER);
        fldId.setPrimaryKey(true);
        DataSourceField fld1 = new DataSourceField("fld1", FieldType.TEXT);
        DataSourceField fld2 = new DataSourceField("fld2", FieldType.INTEGER);
        DataSourceField fld3 = new DataSourceField("fld3", FieldType.DATE);
        dataSource.setFields(fldId, fld1, fld2, fld3);

        dataSource.setCacheData(cacheData);

    }

}

Using: SmartClient Version: v9.1p_2014-09-20/Pro Deployment (built 2014-09-20)

Viewing all articles
Browse latest Browse all 4756

Trending Articles