Dynamics AX Blog - ssrs

Momentan angezeigt werden nur Beiträge, bei denen das Schlagwort »ssrs« eingetragen wurde. Filter entfernen

Abfragen von Informationen zu SSRS-Berichten über die Microsoft Dynamics AX 2012 Management Shell

Microsoft Dynamics AX 2012 Management ShellMit der Microsoft Dynamics AX 2012 Management Shell kann man zahlreiche Informationen über seine Dynamics AX 2012-Instanz in Erfahrung bringen.

Beispielsweise kann man sich über das nachstehende Kommando eine Liste aller SSRS-Berichte oder auch nur einem bestimmten Bericht (z.B. SalesInvoice) ausgeben lassen.

get-AXReport -reportname *
get-AXReport -reportname salesinvoice

 
 
 

Debuggen von SSRS-Dataprovider die von SrsReportDataProviderPreProcess abgeleitet sind

In diesem Beitrag habe ich schon einmal beschrieben, wie man einen DataProvider "debuggen" kann, der von SRSReportDataProviderBase abgeleitet ist. 

Der folgende Job macht prinzipiell das gleiche, allerdings für vorverarbeitete Reports, also welche wo der DataProvider von SrsReportDataProviderPreProcess abgeleitet ist. Im Beispiel verwende ich den DataProvider einer Ausgangsrechnung (SalesInvoice).

static void testSSRSDataProvider_SalesInvoice(Args _args)
{
    SalesInvoiceTmp salesInvoiceTmp;
    SalesInvoiceDP dataProvider = new SalesInvoiceDP();
    SalesInvoiceContract contract;
    CustInvoiceJour CustInvoiceJour = CustInvoiceJour::findRecId(35637191172);
    UserConnection UserConnection;

    try
    {
        ttsBegin;

        UserConnection = new UserConnection();

        contract = new SalesInvoiceContract();
        contract.parmFormLetterRecordId(CustInvoiceJour.RecId);
        contract.parmRecordId(CustInvoiceJour.RecId);

        dataProvider = new SalesInvoiceDP();
        dataProvider.parmDataContract(contract);
        dataProvider.parmUserConnection(UserConnection);
        dataProvider.processReport();

        salesInvoiceTmp = dataProvider.getSalesInvoiceTmp();
        
        while select salesInvoiceTmp
            where SalesInvoiceTmp.createdTransactionId == appl.curTransactionId()
        {
            info(strFmt("%1 %2", SalesInvoiceTmp.InvoiceId, SalesInvoiceTmp.ItemId));
        }

        ttsCommit;
    }
    catch (Exception::Break)
    {
        info("Aborted");
    }
}

 


 
 
 

SSRS-Report per Code aufrufen

Eine häufige Anforderung ist es, daß zu einem bestimmten Zeitpunkt ein Bericht/Report vollautomatisch ausgedruckt werden soll.

Dabei gilt es meist, dem auszudruckenden Bericht bestimmte Parameter mitgeben zu können und je nachdem wie der Bericht entwicklungsseitig aufgebaut ist, kann dies mehr oder weniger aufwendig sein.

Der folgende Code ruft einen relativ einfachen Dataprovider-basierten Bericht auf:

TutorialMyReportDataContract dataContract;
SrsReportDataContract srsReportDataContract;

controller = new SrsReportRunController();
controller.parmReportName(ssrsReportStr(TutorialMyReport, MyDesign)); 
controller.parmShowDialog(false);    
controller.parmLoadFromSysLastValue(false);  

srsReportDataContract =
controller.parmReportContract();

dataContract = srsReportDataContract.parmRdpContract();

dataContract.parmSalesId("S1000"); 

Das nächste Beispiel ruft den Standardbericht Buchungen (Debitorenkonten > Berichte > Buchungen > Debitor) auf. Die Besonderheit dieses Berichtes ist es, daß hier ein Query innerhalb des Dataproviders verwendet wird. Auf diesen zuzugreifen war die Herausforderung:


 
 
 

Designs eines SSRS-Berichtes auslesen

Wer einmal die Notwendigkeit hat, die verfügbaren Designs eines SSRS-Reports auslesen zu müssen, dem kann der nachstehende Job als Beispiel dienen.

static void listDesignsOfSSRSReport(Args _args)
{
    TreeNode treeNode;
    TreeNode treeNodeDesign;
    #aot
  
    treeNode = TreeNode::findNode(#SSRSReportsPath + #AOTRootPath);
    treeNode = treeNode.AOTfindChild("SalesPackingSlip");
    treeNodeDesign = treeNode.AOTfindChild("Designs");
  
    treeNodeDesign =
    treeNodeDesign.AOTfirstChild();
    while(treeNodeDesign)
    {
        info(treeNodeDesign.AOTname());   
      
        treeNodeDesign = treeNodeDesign.AOTnextSibling();
    }
}

 
 
 

Debuggen von SSRS-Dataprovider

Bei der Entwicklung bzw. Anpassung von Dataprovidern eines SSRS-Reports hatte ich in der Vergangenheit immer wieder das Thema, daß das Aufrufen/Testen des SSRS-Reports  oft mehr Zeit beansprucht, als die eigentliche Anpassung im Code.

Deshalb ist folgender Job entstanden, der mir lediglich den Inhalt der vom Dataprovider erstellten (temporären) Tabelle als einfaches Infolog ausgibt.

Das ist vor allem dann hilfreich, wenn man den Dataprovider (abgeleitet von SRSReportDataProviderBase) zur Fehleranalyse debuggen möchte, das aber aufgrund seiner Programmierung aber vielleicht nicht so ohne weiteres möglich ist. Im Beispiel handelt es sich um den Bericht "Arbeitsbeschreibung" aus dem Service-Modul.

static void testSSRSDatProvider(Args _args)
{
    SMAWorkNoteTmp      tempTable;
    SMAWorkNoteDP       dataProvider = new SMAWorkNoteDP();
    SMAWorkNoteContract contract = new SMAWorkNoteContract();
    Query               query = new Query(identifierStr(SMAWorkNote));

    try
    {
        SysQuery::findOrCreateRange(
            query.dataSourceTable(
                tableNum(SMAServiceOrderTable)),
                fieldNum(SMAServiceOrderTable, ServiceOrderId)).value("00018");

        contract.parmItemConsumption(true);
        contract.parmItemRequirement(true);
        contract.parmExpense(true);
        contract.parmFee(true);
        contract.parmAdditionalNotes(true);
        contract.parmLineText(true);

        if( !contract.validate())
        {
            throw error(error::missingParameter(contract));    
        }

        dataProvider.parmDataContract(contract);
        dataProvider.parmQuery(query);
        dataProvider.processReport();

        tempTable = dataProvider.getSMAWorkNoteTmp();

        while select tempTable
        {
            info(tempTable.otServiceOrderId);
        }
    }
    catch (Exception::Break)
    {
        info("Aborted");
    }
}

 
 
 

AX 2012: SSRS: Einen Parameter einrichten

In einem anderen Beitrag habe ich beschrieben, wie man beispielsweise einen SSRS-Report auf Basis eines Dataproviders erstellt. Dieser Beitrag ist quasi eine Fortsetzung in dem im demonstrieren möchte, wie man einen Parameter erstellt.

Ein solcher Parameter ist einerseits notwendig, wenn man den Bericht als Subreport verwenden möchte oder aber auch wenn man Funktionalitäten abbilden möchte, die über den Dataprovider nicht abgebildet werden können.

Im folgenden Beispiel soll der Bericht auf Basis eines Parameters so eingeschränkt werden können, sodaß Zeilen ohne Relevanz (im konkreten Fall Artikel, die noch nicht innerhalb einer Auftragsposition verwendet wurden) ausgeblendet werden können.

 

Schritt 1: Erstellen des Parameters

Screenshot


 
 
 

AX 2012: SSRS: Einen Bericht auf Basis eines Dataproviders erstellen

Ein Dataprovider ist eine Klasse, die dazu verwendet wird um Daten für die Verwendung durch die SQL Reporting Services (SSRS) aufzubereiten. Ein solcher Dataprovider ist in jenen Fällen sehr hilfreich, wenn die anzuzeigenden Daten nicht - oder nur sehr mühsam - über einen Query ermittelt werden können.

Im folgenden eine Schritt-für-Schritt Anleitung, wie man einen solchen Dataprovider erstellt und in den SSRS verwendet.

 

Schritt 1: Klasse erstellen, abgeleitet von SRSReportDataProviderBase

class DmoSalesLineCountDataProvider extends SRSReportDataProviderBase
{
    DmoSalesLineCountTmp DmoSalesLineCountTmp;
}

Screenshot


 
 
Seiten 1 2 » 

 

 
 
 
Beiträge des aktuellen Monats
März 2024
MoDiMiDoFrSaSo
 123
45678910
11121314151617
18192021222324
25262728293031
 
© 2006-2024 Heinz Schweda | Impressum | Kontakt | English version | Mobile Version
Diese Webseite verwendet Cookies, um Benutzern einen besseren Service anzubieten. Wenn Sie weiterhin auf der Seite bleiben, stimmen Sie der Verwendung von Cookies zu.  Mehr dazu