Article

Configuring the printing of several different printing forms at the click of a button

This article explains how to bind two different printables together and use one click to print.

Case description:

For example, the first part of the printable should be generated as a word file and the second  printable should be generated as a PDF file. It contains information from the opportunity, which the users are not allowed to change it.

Algorithm of realization:

  1.  We need to bind two printing forms. You should create an object that will contain links to the root printable form, and additional printable.

  2. You should to create and configure two printables or use existing. You should create a lookup for printables binding and bind two printables, which will be printed together.



     
  3. You should create client replacing module for "OpportunityPageV2" and "OpportunitySectionV2" from NUI package 
  4. Insert following code in OportunityPageV2 and OpportunitySectionV2 

    define("OpportunitySectionV2", [], function() {
        return {
            entitySchemaName: "Opportunity",
            methods: {
                generatePrintForm: function(printForm) {
                    this.callParent(arguments);
                    this.generateAdditionalReports(printForm.getTemplateId(), this.getPrintRecordId() || Terrasoft.GUID_EMPTY);
                },
                getAdditionalReportsESQ: function(mainReportId) {
                    var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
                        rootSchemaName: "GlbAdditionalReport"
                    });
                    esq.addColumn("GlbAdditReport.Id", "AdditionalReportId");
                    esq.addColumn("GlbAdditReport.ConvertInPDF", "CToPdf");
                    esq.filters.add("OpportunityFilter", this.Terrasoft.createColumnFilterWithParameter(
                        this.Terrasoft.ComparisonType.EQUAL, "GlbMainReport", mainReportId));
     
                    return esq;
                },
                generateAdditionalReports: function(rootReportId, recordId) {
                    this.showBodyMask();
                    var esq = this.getAdditionalReportsESQ(rootReportId);
                    esq.getEntityCollection(function(result) {
                        if (result.success && result.collection.getCount() > 0) {
                            result.collection.each(function(item) {
                                var data = {
                                    templateId: item.get("AdditionalReportId"),
                                    convertInPDF: item.get("ConvertInPDF"),
                                    recordId: recordId || Terrasoft.GUID_EMPTY
                                };
     
                                var serviceConfig = {
                                    serviceName: "ReportService",
                                    methodName: "CreateReport",
                                    data: data,
                                    timeout: 20 * 60 * 1000
                                };
                                var callback = function(response) {
                                    var key = response.CreateReportResult;
                                    this.downloadReport(item.get("AdditionalReportId"), key);
                                };
                                this.callService(serviceConfig, function(response) {
                                    callback.call(this, response);
                                }, this);
                            }, this);
                        } else {
                            return;
                        }
                    }, this);
                    this.hideBodyMask();
                }
            }
        };
    });



    !!! IMPORTANT. You should allow multiply download files in your browser.

Like 0

Like

Share

4 comments

Does it works?

Dear,

 

The provided code works properly. Please don’t forget to replace the “&&” symbols with “&&” symbols and the “>” symbols with the “>” symbol.

 

Best regards,

Norton

Would it be possible to merge these reports into one big report? instead of multiple downloads?

Gary Singh,

Unfortunately, no. Since the document's structure has to be changed and absolutely new macros created, there is no known way of the printable's auto-creating.

In the described method, we configure two printables, which were manually created with their own connections between macro tags and columns. 

Show all comments