Pass dataset through API

Posted by: Robert.Putnam on 11 January 2019, 3:57 am EST

  • Posted 11 January 2019, 3:57 am EST

    Hello, I am trying to see if AR server supports some things, and one thing I am currently stuck on is I have a few reports that I have created using AR developer. I would like to generate these report through the API while passing it the dataset to use for generation. Is this supported in any way? I do not see any methods looking at http://help.grapecity.com/activereports/webhelp/AR12ServerAPI/index.html that appears to do what I am looking for.

    Thank you for your time
  • Replied 14 January 2019, 4:43 pm EST

    Hello Robert,

    Sorry to mention that I have not understood your requirement. Could you please elaborate your requirement in a little bit detail so that I can provide you the correct solution. Could you please explain how do you want to use the ARS in your application.

    This will be very helpful for us.

    Thanks.

  • Replied 15 January 2019, 3:16 am EST

    What I would like to do is have a design-able report on the Server that I don't have to expose a data set to. After the report is designed, the report can be called by a different application through the API with different data sets to make the report multiple times with different data.
  • Replied 16 January 2019, 12:07 am EST

    Hello Robert,


    As per our understanding, you want to create the report through AR Server Designer. After the report is created, you want to call the report through an application using ARS rest API( I am assuming that you are previewing the report in HTML5 viewer). Also, I understand that Data in the report are coming from some external source like Web API that you want to set at runtime. You want to change the data according to some parameter like "Country". When "Country" = USA, you want to show different data and when "Country" = Australia, you want to show some different data according to the name of the country.


    You can use the ActiveReports Server for the creation of the report. You can create the repository of reports on the server. However, You need datasource and dataset to add the fields on the report while creating the report.


    If my understanding is the correct, then you need to do the following steps:

    Create a parametric json datasource(https://help.grapecity.com/activereports/webhelp/AR12Server/ManagingDataSources.html) on the server. You can refer to the following to add datasource on the server. I have used the public API "https://jsonplaceholder.typicode.com/posts?userId=" to create json datasource with the following connection string(img_DataSource):
    ="jsondoc=https://jsonplaceholder.typicode.com/posts?userId="+Parameters!ReportParameter1.Value+";schemadata={ 'definitions': {}, '$schema': 'http://json-schema.org/draft-07/schema#', '$id': 'http://example.com/root.json', 'type': 'array', 'title': 'The Root Schema', 'items': { '$id': '#/items', 'type': 'object', 'title': 'The Items Schema', 'required': [ 'userId', 'id', 'title', 'body' ], 'properties': { 'userId': { '$id': '#/items/properties/userId', 'type': 'integer', 'title': 'The Userid Schema', 'default': 0, 'examples': [ 2 ] }, 'id': { '$id': '#/items/properties/id', 'type': 'integer', 'title': 'The Id Schema', 'default': 0, 'examples': [ 11 ] }, 'title': { '$id': '#/items/properties/title', 'type': 'string', 'title': 'The Title Schema', 'default': '', 'examples': [ 'et ea vero quia laudantium autem' ], 'pattern': '^(.*)$' }, 'body': { '$id': '#/items/properties/body', 'type': 'string', 'title': 'The Body Schema', 'default': '', 'examples': [ 'delectus reiciendis molestiae occaecati non minima eveniet qui voluptatibus\naccusamus in eum beatae sit\nvel qui neque voluptates ut commodi qui incidunt\nut animi commodi' ], 'pattern': '^(.*)$' } } }}"

    Here, value of "parameters!ReportParameter1" is given through report

    Create a dataset(https://help.grapecity.com/activereports/webhelp/AR12Server/ManagingDataSets.html) using the above datasource(img_DataSet).

    Create the report using WebDesigner(https://help.grapecity.com/activereports/webhelp/AR12WebDesigner/webframe.html#Tutorial3CreateParameterizedReport.html).

    Here, you can choose the above created dataset and create a parameter with name "ReportParameter1" and set the "Hidden" to "True"

    Save the report

    Now, you can preview or export the report using ARS Rest API

    You can refer the following link to preview the above report with HTMl5 Viewer with ARS report service:
    https://help.grapecity.com/activereports/webhelp/AR12Server/webframe.html#WorkHTML5ViewerUsingJavascript.html
    You can give the different value of parameter to see the report according to different User ID using the following code:
    report: {
    id: 'CustomersList',
    parameters: [
    {
    name: 'ReportParameter1',
    value: '1'
    }]
    };

    You can export the report using the following API:
    https://help.grapecity.com/activereports/webhelp/AR12ServerAPI/index.html#!/rendering_requests/post_api_reports_id_jobs_render

    If this is not your requirement, then could you please explain the following things:
    From which type of application(HTML, MVC, WinForms), you are calling the report?
    From where the data is coming?
    Could you please explain the workflow and complete use case of your application in detail?
    Are you previewing the report or exporting the report?



    Thanks.
  • Replied 16 January 2019, 2:57 am EST

    I think this is enough information for me to get started. I will give these steps a try and will come back with any questions. Thank you for your time.
  • Replied 17 January 2019, 3:31 am EST

    So after giving these steps a try all I am getting back from the server is an internal server error. I have added the same dataSets as above for example purposes. I have designed a very simple report I am calling the report as suggested, but I believe the issue is a confusion on how the reports work. I am hoping to pass the report the whole dataset for it to populate the report. To me these setup steps appear to be creating a call that hits the json api in order to get its values. Is this correct?
  • Replied 17 January 2019, 5:29 pm EST

    Hello,

    I have created the sample datasource, dataset, report and html5 viewer application for you.
    Could you please check at your end with attached resources:
    Steps:
    1: Upload the "TestJson.rdsx" on "Data Sources" page of the admin site
    2: Upload the "testJsonDataSet.rsdx" on "Data Sets" page of the admin site
    3: Upload the "test_Report.rdlx" on "Reports" page of the admin site
    4: Extract the "HTML5" sample
    5: Please change the AR references, Viewer.HTML files and version in Web.config if the version of AR is different
    6: Change the ARS Credential in "HtmlPage1"
    7: Run the sample

    To Export the report through API:
    1: Get the "Test_Report" report Id through "http://localhost:8080/api/reports"
    2: Use the following Post API to get Export request using the above report ID
    http://localhost:8080/api/reports/{ReportID}/Jobs/render
    {
    "ReportParameters": [
    {
    "Name": "ReportParameter1",
    "Domain": "SpecifiedValues",
    "Values": [
    "1"
    ]
    }
    ],
    "ExtensionName": "pdf",
    "ExtensionSettings": {},
    "Timeout": 0,
    "UseCache": true
    }
    3: Get the Export files use above generted Request ID with folloiwng get API:
    http://localhost:8080/api/reports/jobs/render/{Request ID}

    For more information, you can refer the following links:
    https://help.grapecity.com/activereports/webhelp/AR12ServerAPI/index.html#!/reports/get_api_reports
    https://help.grapecity.com/activereports/webhelp/AR12ServerAPI/index.html#!/rendering_requests/post_api_reports_id_jobs_render
    https://help.grapecity.com/activereports/webhelp/AR12ServerAPI/index.html#!/rendering_requests/get_api_reports_jobs_render_request_id

    >>To me these setup steps appear to be creating a call that hits the json api in order to get its values
    Yes, ARS hit the "https://jsonplaceholder.typicode.com/posts?userId="json api to get the data.

    Hope it helps.

    Thanks.

    ARS Data.zipHTML5.zip
  • Replied 18 January 2019, 3:58 am EST

    I think that is where my confusion is, and the question I am looking to answer is slightly different. I am looking for a way to either pass the dataset or change the connection so that I can have a report with a defined data set but with data coming from potentially quite a few different areas. Right now we have an application that uses active reports developer to design them. These reports are shared across many different data Sources, but they all return some variation on the dataset. These are passed to the report using C# dataset objects, and the report is generated from there. I am trying to replicate this kind of behavior with these reports.
  • Replied 20 January 2019, 6:28 pm EST

    Hello Robert,

    As per my understanding, you want to upload the report layout on the server(ARS) and after that, you want to change dataset at the runtime and preview the report in the different application.
    To achieve the same:
    1: I have created the report layout as per "To use the DataSet Provider" in the following link:
    https://help.grapecity.com/activereports/webhelp/AR12/webframe.html#BindPageReportstoaData%20Source.html(refer attached test_ProductReport.rdlx report)
    2: Upload the above report to the server
    3: Get the report content from the server using the following API
    https://help.grapecity.com/activereports/webhelp/AR12ServerAPI/index.html#!/reports/get_api_reports_id_content
    4: Save the report content into PageReport object

    RestClient restClient = new RestClient();
    private void Form1_Load(object sender, EventArgs e)
    {
    restClient.ArsUrl = new Uri("http://10.64.1.182:8080");
    restClient.Login("admin", "admin");
    string reportconent= restClient.GetReportContent("5c45685c6d34ce29483ec910");
    GrapeCity.ActiveReports.PageReport rpt = new GrapeCity.ActiveReports.PageReport();
    using (StringReader reader = new StringReader(reportconent))
    {
    rpt.Load(reader);
    }
    GrapeCity.ActiveReports.Document.PageDocument runtime = new GrapeCity.ActiveReports.Document.PageDocument(rpt);
    runtime.LocateDataSource += Runtime_LocateDataSource;
    viewer1.LoadDocument(rpt.Document);

    }

    5: Change the dataset of the report at runtime using "LocateDataSource" event(Please refer to the attached sample for implementing the same)

    private void Runtime_LocateDataSource(object sender, GrapeCity.ActiveReports.LocateDataSourceEventArgs args)
    {
    DataLayer dl = new DataLayer();
    args.Data = dl.DataSetData.Tables["Products"];
    }


    Note:
    1: Change the ARS URL and credential in "Form1.cs" class

    2: Change the connection string in "DataLayer.cs" class
    3: Change the report ID in the following line of code.

    string reportconent= restClient.GetReportContent("5c45685c6d34ce29483ec910");

    You can get the report id of the above uploaded report through following api
    https://help.grapecity.com/activereports/webhelp/AR12ServerAPI/index.html#!/reports/get_api_reports


    You can also refers the "Rest API" samples of ARS located at "C:\ActiveReports 12 Server\SDK\Samples"

    If still, I am missing something, could you please explain the following things in detail,
    =>From which type of application(HTML, MVC, WinForms), you are calling the report?
    =>From where the data is coming?
    =>The workflow and complete use case of your application?

    Thanks.

    test_ProductReport.zipprj_ReportDataSet.zip
  • Replied 22 January 2019, 6:55 am EST

    So this is looking really close to what I was hoping to accomplish. I have taken those examples and done a slight bit of modification. I used the server to design a simple report. I am getting an error when generating it.

    Exception details:
    GrapeCity.ActiveReports.InvalidReportDefinitionException: The aggregate '=First(Fields!TranId)' must specify a data set.
    at GrapeCity.ActiveReports.ReportDataProcessor.#4r0(Report def, IDataSet[] dataSets, IList`1 finalizers, BuildCommand buildCommand, CancellationToken token)
    at GrapeCity.ActiveReports.ReportDataProcessor.<>c__DisplayClassc.#3p2(Report def, IExpressionContext expressionContext, DataParameter[] parameters)
    at GrapeCity.Enterprise.Data.DataEngine.DataProcessing.DataProcessor.Run(Report report, ReportContextFn makeContext, IExpressionContext ctx, InteractiveSortState sortState)
    at GrapeCity.ActiveReports.ReportDataProcessor.FetchData(PageReport report, IExpressionContext evaluationContext, ReportStore reportStore, #ja0 makeDocument, Func`3 getCommandBuilder, CancellationToken token, InteractiveSortState sortState, Boolean handleEmptyGroups)
    at GrapeCity.ActiveReports.ReportsCore.Rendering.ReportProcessor.#Tol(Boolean skipValidation, CancellationToken token)
    at GrapeCity.ActiveReports.ReportsCore.Rendering.ReportProcessor.#fn(Boolean forceDataRefresh, Boolean forceParameterDataRefresh, CancellationToken token, Boolean skipValidation)
    at GrapeCity.ActiveReports.Document.PageDocument.#0Kf(Boolean forceDataRefresh, Boolean forceParameterDataRefresh, CancellationToken token, Boolean skipValidation)
    at GrapeCity.ActiveReports.Document.PageDocument.Render(IRenderingExtension renderingExtension, StreamProvider streams, NameValueCollection settings, Boolean forceDataRefresh, Boolean forceParameterDataRefresh, CancellationToken token)
    at GrapeCity.ActiveReports.Viewer.Win.Rdlx.RdlReport.<>c__DisplayClass13.<LoadImpl>b__e()
    at System.Threading.Tasks.Task.InnerInvoke()
    at System.Threading.Tasks.Task.Execute()

    This is the report design on the server.


    This is the dataset generation.

    private void Runtime_LocateDataSource(object sender, GrapeCity.ActiveReports.LocateDataSourceEventArgs args)
    {
    DataTable tranIdDataTable = new DataTable();
    tranIdDataTable.Columns.Add("Id");
    DataRow row = tranIdDataTable.NewRow();
    row["Id"] = 100;
    tranIdDataTable.Rows.Add(row);
    row = tranIdDataTable.NewRow();
    row["Id"] = 101;
    tranIdDataTable.Rows.Add(row);
    DataSet tranIdDataSet = new DataSet()
    {
    Tables = {tranIdDataTable}
    };

    args.Data = tranIdDataSet;
    }


    For the calling of the report I used the sample solution that you provided me with. The error appears to be an issue with a server report being unable to load data without a dataset specified in the design, but I do not want to do that as I would like to be able to load the sets dynamically from any location. Does it only support .rdlx reports?
  • Marked as Answer

    Replied 22 January 2019, 7:13 pm EST

    Hello Robert,

    Actually, ActiveReports Server needs the dataset/datasource to design the report at the server. Without the dataset/datasource, you can't preview the report on the server. Because the server needs all the resources of the report the time of execution(preview). That's why you have faced the "The aggregate '=First(Fields!TranId)' must specify a data set." error while previewing the report to the server. Through ARS, you can't change the datasource/dataset at runtime.

    To achieve your requirement, you need the set all the value of report items manually(like in the attached report ("rpt_Runtime"). Due to the absent of dataset, you don't have the ability to drag and drop the fields directly to report or select from the list while binding to the Table or any other report items. You have to write the value and dataset related properties of report items manually. Also, please refer to the attached image"img_Runtime"

    After that, you can access the report content as mentioned in the previous reply and set the datasource and dataset at the run time. Please refer to the following lines of code:

    string reportconent= restClient.GetReportContent("5c4801256d34ce29483ec914");
    GrapeCity.ActiveReports.PageReport rpt = new GrapeCity.ActiveReports.PageReport();
    using (StringReader reader = new StringReader(reportconent))
    {
    rpt.Load(reader);
    }
    //rpt.Load(new FileInfo("test.rdlx"));
    GrapeCity.ActiveReports.PageReportModel.DataSource myDataSource = new GrapeCity.ActiveReports.PageReportModel.DataSource();
    myDataSource.Name = "Example Data Source";
    myDataSource.ConnectionProperties.DataProvider = "DATASET";

    GrapeCity.ActiveReports.PageReportModel.DataSet myDataSet = new GrapeCity.ActiveReports.PageReportModel.DataSet();
    GrapeCity.ActiveReports.PageReportModel.Query myQuery = new GrapeCity.ActiveReports.PageReportModel.Query();
    myDataSet.Name = "DataSetRuntime";
    myQuery.DataSourceName = "Example Data Source";
    myQuery.CommandType = GrapeCity.ActiveReports.PageReportModel.QueryCommandType.Text;
    myDataSet.Query = myQuery;
    // add fields
    GrapeCity.ActiveReports.PageReportModel.Field _field = new
    GrapeCity.ActiveReports.PageReportModel.Field("ProductID", "ProductID", null);
    myDataSet.Fields.Add(_field);
    _field = new GrapeCity.ActiveReports.PageReportModel.Field("ProductName", "ProductName", null);
    myDataSet.Fields.Add(_field);
    _field = new GrapeCity.ActiveReports.PageReportModel.Field("UnitPrice", "UnitPrice", null);
    myDataSet.Fields.Add(_field);
    //bind the data source and the dataset to the report
    rpt.Report.DataSources.Add(myDataSource);
    rpt.Report.DataSets.Add(myDataSet);

    GrapeCity.ActiveReports.Document.PageDocument runtime = new GrapeCity.ActiveReports.Document.PageDocument(rpt);
    runtime.LocateDataSource += Runtime_LocateDataSource;
    viewer1.LoadDocument(rpt.Document);



    Again, you can set the data through the "LocateDataSource" event like below:

    private void Runtime_LocateDataSource(object sender, GrapeCity.ActiveReports.LocateDataSourceEventArgs args)
    {
    DataLayer dl = new DataLayer();
    args.Data = dl.DataSetData.Tables["Products"];
    }


    Please refer to the attached sample "prj_ReportDataSetModified" for implementing the same.

    Also, you can directly set the sql,oledb etc datasource directly to the report without using the "DataSet" datasource provider. You can refer to "To connect to an OleDB data source" topic in the following link:
    https://help.grapecity.com/activereports/webhelp/AR12/webframe.html#BindPageReportstoaData%20Source.html

    There is also an alternate way to achieve the same. You can use the "ClickOnce End User Designer" instead of "Web Designer". To know more about the "ClickOnce End User Designer", you can refer to the following link:
    https://help.grapecity.com/activereports/webhelp/ARS12ServerDesigner/webframe.html#GetStartedwithClickOnceEndUserDesigner.html

    To enable the "ClickOnce End User Designer", you need to check the "Disable HTML5 Web Designer" option in "Site Settings" of Admin site. Please refer to the attached image "img_SiteSettings". Also, you need to open report portel in IE/Edge to use "ClickOnce End User Designer". You can also use it in Chrome/Firefox. However, you need to install the corresponding extension to use click once application in the respective browsers.

    You can use the "ClickOnce End User Designer" same as EUD and save the report to the server. You can refer the same topic "To use the Dataset Provider" in the following link to create the report and upload the report to the server.
    https://help.grapecity.com/activereports/webhelp/AR12/webframe.html#BindPageReportstoaData%20Source.html

    After that, you can use the same sample given in the previous reply to change the dataset at the runtime.

    >>Does it only support .rdlx reports?
    Yes, Web Designer only supports the ".rdlx" reports. you can create only ".rdlx" report through "Web Desginer". However, you can also upload the ".rpx" , ".rdl" and Section report code-based report on the sever.

    Hope the above solution helps you in achieving your requirements.

    Thanks.



    rpt_Runtime.zip
    prj_ReportDataSetModified.zip
  • Replied 28 January 2019, 3:17 am EST

    I believe this has answered most of my questions about the designer, the main one being there is no direct way to accomplish this use case. My only other question is there any documentation about using report parameters to update a documents datasource sql select?
  • Replied 28 January 2019, 7:53 pm EST

    Hello Robert,

    As per my understanding, you want to change the select query through the report parameter like below:
    If the value of the report parameter is "Customers" then "select * from Customers" SQL query should be generated.
    And if the value of the report parameter is "Products" then "select * from Products" SQL query should be generated.

    However, it is not possible through ARS or AR. Because fields in ARS/AR does not generate automatically at run time. They are created automatically at design time on validating the query or you could add them at runtime. Also, It is not possible to change the fields name at the time of execution.

    It is only possible to use the expression in the query field when the resultant query gives the same type and number of column always. So that, we can add them at runtime or design time.

    If my understanding is wrong, please explain in detail so that I will help you accordingly.

    Also, could you please give try with the "Templates" feature of ARS. This feature allows users to use templates while creating reports in the Web Designer. You can create different templates for the different type of dataset/layout which can be used in the "Web Designer" for the report generation. Please refer to the following link:
    https://help.grapecity.com/activereports/webhelp/AR12Server/webframe.html#ManagingTemplates.html
    https://help.grapecity.com/activereports/webhelp/AR12WebDesigner/webframe.html#Templates.html

    ARS also supports the "Custom Security Provider" feature to filter the data at runtime on the basis of user context. To know more about "Custom Security Provider", Please refer to the following link:
    https://help.grapecity.com/activereports/webhelp/AR12Server/webframe.html#UsingLDAPandActiveDirectory.html
    https://help.grapecity.com/activereports/webhelp/AR12Server/webframe.html#UserContext%20in%20Multi-Tenant%20Reports.html
    https://help.grapecity.com/activereports/webhelp/AR12Server/webframe.html#ManagingSecurityFilters.html

    Hope it clarifies.

    Thanks.
  • Replied 29 January 2019, 3:48 am EST

    That is pretty close, I was more looking to do something along the lines of SELECT * FROM Customers WHERE CustomerName = Parameter. Or a similar thing using the json api request, adding in parameters for the api call based on the parameters sent to the report.
  • Replied 29 January 2019, 11:38 pm EST

    Hello Robert,

    >>I was more looking to do something along the lines of SELECT * FROM Customers WHERE CustomerName = Parameter
    1: Please create a new dataset on the admin site
    2: Write the following query in the field:
    select * from Customers Where Country = @Parameter1
    3: Create a Parameter with the same name as shown in the image.

    4: Now add the above dataset in the newly created report
    Observe: parameter1 is automatically added in the report
    5: Bind the dataset filed with table
    6: Preview the Report
    7: Enter the parameter value
    8: Click on the "Preview Report" button
    Observe: Data is shown in the report according to the parameter given

    >> Or a similar thing using the json api request, adding in parameters for the api call based on the parameters sent to the report.
    Please follow the same approach as mentioned at the following topic:
    https://www.grapecity.com/en/forums/ar-server/pass-dataset-through-api#hello-robertas-per-our-und

    Thanks.
  • Replied 30 January 2019, 3:35 am EST

    So I have been trying some stuff around the procedure connection, and it appears to be working well. However, when I add parameters and give them a type, it reverts to string when I click validate. Is this intentional?
    I get "Error converting data type nvarchar to decimal" With a stack trace of
    at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
    at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
    at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
    at System.Data.SqlClient.SqlDataReader.TryConsumeMetaData()
    at System.Data.SqlClient.SqlDataReader.get_MetaData()
    at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption, Boolean shouldCacheForAlwaysEncrypted)
    at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest)
    at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)
    at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
    at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
    at GrapeCity.BI.Data.DataProviders.SysCommandAdapter.ExecuteReader(CommandBehavior behavior)
    at GrapeCity.ActiveReports.ReportsCore.Tools.DataSourceHelper.ExecuteQuery(ConnectionProperties connectionProperties, Query query, String userName, String password, CommandBehavior commandBehavior, Int32 previewLimit, Boolean wrapException)
    at #RU0.#ze1.#aV0(DataSetQueryTask task)
  • Replied 30 January 2019, 5:50 pm EST

    Hello Robert,

    Yes, this behavior is by design. When you validate the stored procedure, it automatically created the parameter for the stored procedure and delete all the existing parameter in the dataset. However, the only parameter name is retrieved not the parameter datatype. Hence, the string datatype is set as default for the automatically created parameter.
    Please click on the "Finish" button instead of "Validate" after changing the datatype of the parameter in the DataSet. It retains the datatype of the parameter after clicking the "Finish" button.

    >>I get "Error converting data type nvarchar to decimal" With a stack trace of
    I have checked with multiple datatype parameters. However, I am unable to reproduce the issue at our end. Could you please recheck at our end after following the above solution.

    Thanks.
Need extra support?

Upgrade your support plan and get personal unlimited phone support with our customer engagement team

Learn More

Forum Channels