--- title: "Tutorial - Lasernet Module - Lasernet FO Connector User Guide" slug: "fo-user-guide-tutorial" description: "The Tutorial section of the Lasernet Module includes Query based reports and SSRS reports. On this page, you will also find the respective Tutorial Models. " tags: ["Menu item run", "Query", "Resend report", "Silent resend", "SSRS"] updated: 2026-03-04T09:33:56Z published: 2026-03-04T09:33:56Z canonical: "kb.lasernetgroup.com/fo-user-guide-tutorial" --- > ## Documentation Index > Fetch the complete documentation index at: https://kb.lasernetgroup.com/llms.txt > Use this file to discover all available pages before exploring further. # Tutorial ## Tutorial The **Tutorial** setup group includes two functionalities (query-based and SSRS reports), which enable the user to learn how to call a Lasernet report from its code. By accessing these functionalities through the Dynamics 365 Finance and Operations interface, the user can also view the code in Visual Studio. To this end, a model file must be applied to the environment. The model file is zipped and available for download from the Lasernet Support Portal. As a result, the user can create and further manage a Query-based report, an SSRS report, or both report types from the GUI, and then open Visual Studio to view the code. ### Tutorial Model - How to Start Query-Based Lasernet Reports from X++ per Code The Lasernet Tutorial Model contains code examples (source code) on how to use Lasernet FO Connector through code, such as how to execute reports, including the destinations, initialize ranges, prepare the report dialog/dialog fields, etc. The examples are included in both the AOT package (binary) and within the Lasernet Tutorial Model, which contains the source code. The AOT package (binary) is for the UI, and the Lasernet Tutorial Model contains the source code. Upon installing the Lasernet Tutorial Model, you can access the code for tutorial classes and forms. Note The tutorial classes and forms contain examples of how to execute Lasernet Connector's reports from code and how to use context code. Classes: ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-1MNRVS2F.png) Forms: ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-AEFCW26I.png) #### How to Call Lasernet Print Options from Code on Lasernet Query Report The **LACTutorialStartReport** class contains an example of how you can call a query report from code. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-LVB8UWS9.png) It is preferred that we use the predefined destination in the code, but any options are available through the lacDestinationSettings, such as the following: `lacDestinationSettings.destTypes4Print(LACDestTypes4Print::UsePredefinedDest); //` Indicates that the report should be executed to the predefined destination. `lacDestinationSettings.defaultDestTypes4Print(LACDestTypes4DefaultPrint::None); //` Indicates that if no predefined destination meets the criteria, no fallback destination should be used if a fallback destination is used. Use regular methods for fallback destination specification. For example, if the fallback destination is LACDestTypes4DefaultPrint::Email, then the fallback email is specified, lacDestinationSettings.emailTo('fallbackemail@company.com'), etc. `lacDestinationSettings.skipDestinations(NoYes::Yes); //` This would mean that no report destination processing will be performed. The report will still be archived, but if used without returnFileData(true), it will not be processed in Lasernet (basically, only XML files will be archived without PDF processing). `lacDestinationSettings.skipDelivery(NoYes::Yes); //` Instructs report rendering process to skip file saving in storage. Normally, this can be used in connection with returnFileData(true) to force synchronous file processing. `lacDestinationSettings.returnFileData(NoYes::Yes); //` Indicates to process the report file synchronously, and read the file data into the LACResultSet provided by the SRSReportExecutionInfo object. #### Various Permissions for Report Print Settings Dialog `lacDestinationSettings.allowCustomProperties(NoYes::Yes);` - Indicates that the **Custom properties** button is shown on the **Printer settings** dialog, allowing specification of custom properties on the report **Printer settings** dialog directly. `lacDestinationSettings.allowForcedReRun(NoYes::Yes);` - Indicates whether the report should be fully reprocessed (true), or if it is already in the Lasernet Archive, no reprocessing is required (false). `lacDestinationSettings.allowLanguageEnforce(NoYes::Yes);` - Indicates whether to show the **Language ID** field on the dialog, which can overwrite the default report language. `lacDestinationSettings.allowManualArchive(NoYes::Yes);` - Indicates whether to show the **Save report to archive?** checkbox in the **Printer settings** dialog. If not set, automatic configuration is used from the report. `lacDestinationSettings.allowManualDocuRef(NoYes::Yes);` - Enables modification of attachment rules for report execution, by showing controls for report attachments in the **Printer settings** dialog. `lacDestinationSettings.allowManualOverlay(NoYes::Yes);` - Enables modification of overlay directly in **Printer settings** dialog. `lacDestinationSettings.allowManualPreviewFormat(NoYes::Yes);` - Enables the dialog field for specification of report preview format. `lacDestinationSettings.disableUserDefined(NoYes::Yes);` - Removes **UsePredefinedDestionation** and **CustomPort** from available Lasernet destination settings on the dialog. `lacDestinationSettings.forceEnabled(NoYes::Yes);` - Lasernet settings are normally shown only if the report is found and configured for Lasernet. This property ensures that the Lasernet destination settings are always shown in the dialog, regardless of the report (for example, **reportName** is not available at the time, report is not activated, or generic settings are specified). `lacDestinationSettings.onlyLaserNetDestinations(NoYes::Yes);` - Indicates whether to show only Lasernet destinations in the **Printer settings** dialog. All standard SSRS destinations will be hidden. Normally, this should be used with all query-based reports. `lacDestinationSettings.manualArchive(NoYes::Yes);` - Manual indicator for whether the report needs to be archived. This overwrites settings in the report and can be used with **allowManualArchive(NoYes::Yes)**. `lacDestinationSettings.manualDocuRefType(LACManualOverwriteType::Disabled);` - Manual indicator to force attachments on report to be disabled, overwritten, etc. `lacDestinationSettings.manualLanguageId('en-us');` - Manual value to overwrite the report language. `lacDestinationSettings.manualOverlayType(LACManualOverwriteType::Disabled);` - Manual indicator to overwrite/disable append overlay to report. `lacDestinationSettings.manualPreviewFormat('.DOC');` - Manual indicator for preview the format. This value should be present in **LACFileFormats** table. #### How to Resend an SSRS Report from Code to Lasernet Destination 1. Ensure the report's **Resend menu item** field is populated, as in the following image: ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-QFC8LPQC.png) 1. Use the following code to run the report: ```Code class FPPrintReport {    public static void main(Args   _args)    {        WHSContainerTable   containerTable;        WHSContainerId      containerId = 'CONT-000000002';        // =================================== Lasernet specific printer destination settings ================================================================        SRSPrintDestinationSettings destinationSettings = newSRSPrintDestinationSettings(); // Creating print destination object        destinationSettings.printMediumType(SRSPrintMediumType::LAC); // Specifying that destination must be Lasernet (another option LACScreen)        // Configuring Lasernet specific properties        LACDestinationSettings lacDestinationSettings = destinationSettings.lacDestinationSettings();        //  ==== Report Delivery settings ====        lacDestinationSettings.destTypes4Print(LACDestTypes4Print::UsePredefinedDest);  // Indicates that report should be executed to predefined destination        lacDestinationSettings.defaultDestTypes4Print(LACDestTypes4DefaultPrint::None); // Indicates that if no predefined destination meets criteria, no fall back destination should be used        lacDestinationSettings.allowForcedReRun(NoYes::Yes);                            // indicator if report should be fully reprocessed (true), or if it is already in Lasernet archive, no reprocessing is required) (false)        select firstonly * from containerTable         where containerTable.containerId == containerId;        LACReport report =LACReport::find(ssrsReportStr(WHSContainerContents, Report));        LACResendReport::resendReportFromRecord(report.ReportName, containerTable, destinationSettings, true);    } } ``` ### Tutorial Model - How to Start Class-Based Lasernet Reports from X++ per Code On each FO download page, the Lasernet Tutorial Model is available for download. Visit the [download section](https://support.formpipe.com/downloads) of our portal. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-F5M24ZV6.png) To locate the Tutorial reports in Lasernet FO Connector, navigate to **Lasernet** > **Setup** > **Tutorial** > **Query based reports**. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-XKO4WAEQ.png) The **OData** button illustrates how to initialize and set the ranges for a class/OData report (UI). The **LACTutorialQueryBasedReportCode** form contains the code (VS). The source code is available after installing the Lasernet tutorial model. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-SSNBM03N.png) ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-1SY2HTCW.png) ## Query-Based Reports To access the **Query based reports** page, navigate to **Lasernet** > **Setup** > **Tutorial** > **Query based reports**. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-H2Y4IES6.png) When opening the **Query based reports** page for the first time, click the **Create report** button on the top menu of the page. As a result, a query report is added to the list of Lasernet reports. Any settings for this report are created from code. The procedure is illustrated in the tutorial. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-35066MJ4.png) Once you click the **Create report** button, the following notification message appears: ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-E9PSFM1O.png) The report you have just created is now available in the list on the **Reports** page (**Lasernet** > **Common** > **Reports**). ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-JGZIYGUG.png) To proceed, add a destination type to the report: 1. Select the report you have created in the list on the **Query based reports** page. 2. Define the required destination type. To this end, click **Change** in the left-hand panel. 3. Select the required value and click **OK** on the panel that appears. As a result, the value is added to the **Destination type** field. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-CG8B8KX4.png) Afterward, you can run the report in three different ways, and the code can be found in Visual Studio. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-PORLVN4N.png) ### Report Run (Multi Select) 1. Select multiple records in the list on the **Query based reports** page. 2. Click the **Report run (multi select)** button in the top menu on the page to print based on your settings (destination type). ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-HYGXS5I5.png) ### Menu Item Run 1. Select multiple records in the list on the **Query based reports** page. 2. Click the **Menu item run** button in the top menu on the page to open the print menu. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-5R6I2V47.png) ### Generic Report Run To run a generic report, you cannot select records in the list and include all of them at a time in the print menu. Each of them needs to be added to the print menu manually. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-WBAAD4FE.png) ## SSRS Reports To access the SSRS reports page, navigate to **Lasernet** > **Setup** > **Tutorial** > **SSRS reports**. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-U71MN64X.png) On this page, you can reprint an SSRS report to Lasernet. You can select multiple records belonging to the **Sales Confirmation Journal** at a time, then print them using the print dialog (**Resend report**) or the **Silent resend** button. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-H5KBRT6C.png) ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-77AIC6OJ.png) This way, the confirmation is resent according to the settings you define in the right panel of the SSRS reports page. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-4B9OCWFG.png) ### Resend Report To resend a report, follow these steps: 1. Select one or several records in the list. 2. Click the **Resend report** button on the Action pane of the **SSRS reports** page. 3. In the right panel that appears, set the print destination settings, then click **OK**. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-PORRZVS4.png) ### Silent Resend Clicking the **Silent resend** button in the Action pane of the **SSRS reports** page runs the selected reports according to the settings you define in the right panel of the screen. No print menu is available. ![](https://cdn.document360.io/c831ef63-c6b3-48ee-b443-3e33644e4e2e/Images/Documentation/image-77GQDQVW.png)