Dynamics AX Blog - Beiträge von 2010 - Seite 4

Momentan angezeigt werden nur Beiträge von »2010«.

Druckoptionen von Berichten können nicht geändert werden

In Dynamics AX 2009 scheint es einen kleinen Bug zu geben, der bei Reports, welche über eine von RunBaseReport abgeleitete Klasse gestartet werden, dazu führt, daß sich die Druckoptionen nicht ändern lassen.

Um diesen Bug zu umgehen, kann man die Methode dialogUpdatePrinterSettings, wie in nachstehendem Beispiel beschrieben, überschreiben.

public void dialogUpdatePrinterSettings(Dialog dialog)
{
    ;
    // --> (1) Workaround to update printJobSettings and dialog
    this.printJobSettings().unpackPrintJobSettings(this.reportRun().packPrintJobSettings());
    // <-- (1)

    super(dialog);
}

Update 27.12.2010
Mittlerweile gibt es einen funktionierenden Fix von Microsoft, siehe http://blogs.msdn.com/b/emeadaxsupport/archive/2010/12/20/print-medium-change-in-dialog-not-working-on-certain-reports.aspx


 
 

AxInventTable: Artikel per Code anlegen in Dynamics AX 2009

Um einen Artikel in Dynamics AX 2009 anzulegen kann man sich - wie schon in früheren Versionen - der Klasse axInventTable bedienen. Dies Klasse hat den grossen Vorteil, daß sie sich auch um jene Tabellen kümmert, die neben der inventTable befüllt werden müssen, also die drei Datensätze in der inventTableModule und jenen in der InventItemLocation, sodaß der Artikel sofort in der Form InventTable aufscheint.

static void createItemUsingAxInventTable(Args _args)
{
    axInventTable axInventTable;
    ;
    axInventTable = axInventTable::construct();
    axInventTable.parmItemId('NewItemId');
    axInventTable.save();
}

Etwas sollte man bei Verwendung der Klasse allerdings berücksichtigen: Obiger Job erstellt den Artikel, ohne eventuelle Pflichtfelder wie z.B. die Artikelgruppe zu befüllen. Das aber auch nur, wenn es keine Datensatzvorlage vom Typ Unternehmensvorlage gibt. Gibt es eine solche Standardvorlage für den Artikelstamm, so nutzt AX diese!

 


 
 

Start- und Enddatum des aktuellen Geschäftsjahres ermitteln

Um das Start- und Enddatum des aktuellen Geschäftsjahres zu ermitteln, kann man sich nachstehender Methode bedienen. Diese liefert einen Container zurück, dessen erstes Element das Start- und dessen zweites Element das Enddatum des Geschäftsjahres enthält.

ledgerPeriod::findFiscalYearDates(systemdateget());

 
 

Shared Project mit X++ erstellen

Nachstehend ein Beispiel, mit dem man in Dynamics AX 2009 per X++ ein Projekt erstellen, und Elemente zu diesem Projekt hinzufügen kann.

static void CreateSharedProject(Args _args)
{
    projectNode         projectNode;
    projectGroupNode    projectGroupNode;
    projectNode         myProjectNode;
    treeNodeName        nameOfProject;
    groupNodeType       groupNodeType;
    treeNodeName        groupNodeName;
    #AOT
    ;

    nameOfProject = 'MyProject';

    // Create shared project
    projectNode    = infolog.projectRootNode();
    projectNode    = projectNode.AOTfindChild('Shared');
    myProjectNode  = projectNode.AOTfindChild(nameOfProject);

    if( !myProjectNode)
    {
        myProjectNode = projectNode.AOTadd(nameOfProject);
        myProjectNode.AOTsave();
    }

    myProjectNode     = myProjectNode.getRunNode();

    // Add groupnode 'Tables'
    groupNodeName = 'Tables';
    projectGroupNode = myProjectNode.AOTfindChild(groupNodeName);
    if( !projectGroupNode)
    {
        myProjectNode.AOTadd(groupNodeName);
        projectGroupNode = myProjectNode.AOTfindChild(groupNodeName);
        projectGroupNode.projectGroupType(GroupNodeType::Tables);
        myProjectNode.AOTsave();
    }

    // Add some tables to groupnode 'Tables'
    if( !projectGroupNode.findGroupMember('SalesTable', UtilElementType::Table))
    {
        projectGroupNode.addUtilNode(UtilElementType::Table, 'SalesTable');
    }
    if( !projectGroupNode.findGroupMember('SalesLine', UtilElementType::Table))
    {
        projectGroupNode.addUtilNode(UtilElementType::Table, 'SalesLine');
    }
    projectGroupNode.AOTsave();

    // Add groupnode 'Forms'
    groupNodeName = 'Forms';
    projectGroupNode = myProjectNode.AOTfindChild(groupNodeName);
    if( !projectGroupNode)
    {
        myProjectNode.AOTadd(groupNodeName);
        projectGroupNode = myProjectNode.AOTfindChild(groupNodeName);
        projectGroupNode.projectGroupType(GroupNodeType::Forms);
        myProjectNode.AOTsave();
    }

    // Add form 'SalesTable' to groupnode 'Forms'
    if( !projectGroupNode.findGroupMember('SalesTable', UtilElementType::Form))
    {
        projectGroupNode.addUtilNode(UtilElementType::Form, 'SalesTable');
    }
    projectGroupNode.AOTsave();

    myProjectNode.AOTsave();
    myProjectNode.AOTrefresh();
    myProjectNode.AOTrun();
}

Das im Beispiel erstellte Projekt sähe wie folgt aus:

my Project


 
 

Zugriff auf die Zwischenablage per X++

In Dynamics AX kann man selbstverständlich auch auf die Zwischenablage zugreifen, ein kurzes Codebeispiel dazu im folgenden. Funktioniert übrigens zumindest seit Axpata 2.5.

static void useClipboard(Args _args)
{
    textBuffer  textBuffer = new textBuffer();
    ;    
    // Write to clipboard

    textBuffer.appendText('Hello world!');
    textBuffer.toClipboard();

    // Read from clipboard
    textBuffer.fromClipboard();
    info(textBuffer.getText());
}

 
 

Buchen von Lieferschein und Rechnung per Code

Mit Hilfe der salesFormLetter-Klasse(n) von Dynamics AX ist es möglich, Auftragsbestätigung, Lieferschein und/oder Rechnung für einen Auftrag mit nur wenigen Zeilen Code zu buchen. Nachstehend ein Beispiel, in dem für einen Auftrag alle drei auf einmal gebucht werden:

static void postSalesFormLetter(Args _args)
{
    SalesFormLetter salesFormLetter;
    salesTable      salesTable = salesTable::find('01234');
    ;    

    ttsBegin
;

    // Bestätigung buchen
    salesFormLetter = SalesFormLetter::construct(DocumentStatus::Confirmation); 
    salesFormLetter.update( salesTable,
                            systemDateGet(),
                            SalesUpdate::All,
                            AccountOrder::None,
                            NoYes::No,
                            NoYes::No); 

    // Lieferschein buchen
    salesFormLetter = SalesFormLetter::construct(DocumentStatus::PackingSlip);    
    salesFormLetter.update( salesTable,
                            systemDateGet(),
                            SalesUpdate::All,
                            AccountOrder::None,
                            NoYes::No,
                            NoYes::No);    

    // Rechnung buchen

    salesFormLetter = SalesFormLetter::construct(DocumentStatus::Invoice);    
    salesFormLetter.update( salesTable,
                            systemDateGet(),
                            SalesUpdate::All,
                            AccountOrder::None,
                            NoYes::No,
                            NoYes::No);

    ttsCommit;
}

Getestet in Dynamics AX 2009.


 
 

Notizen zur RecId

Die RecId ist die mehr oder weniger eindeutige Kennung eines Datensatzes in Dynamics AX. Mehr oder weniger deshalb, weil es auf die verwendete Version von Dynamics AX bzw. Axapta ankommt:

Version Bemerkung
3.0 RecId pro Mandant eindeutig (über alle Tabellen)
4.0 RecId pro Tabelle eindeutig (über alle Mandanten)
D.h. die selbe RecId kann in zwei oder mehreren Tabellen vorkommen, das ist auch der Grund, warum ein Feld einer Tabelle vom Typ RefRecId als EDT mit einer Relation abgebildet werden muss!
2009 Wie bei Version 4.0
2012 Wie bei Version 4.0

 
 
Seiten « 1 2 3 4 5 » 

 

 
 
 
Beiträge des aktuellen Monats
Juni 2010
MoDiMiDoFrSaSo
 123456
78910111213
14151617181920
21222324252627
282930 
© 2006-2026 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