Dynamics AX Blog - Seite 23

AX 2012: Synchronisationsfehler werden angezeigt, obwohl diese bereits gelöst wurden

Vor kurzem hatte ich das Problem, daß beim Synchronisieren der Datenbank im Formular Datenbank synchronisieren Fehler und/oder Warnungen ausgegeben wurden, bei denen ich mir sicher war, daß diese bereits behoben wurden.

Eine einfache Lösung dafür ist den Inhalt der Tabelle SqlSyncInfo zu löschen.

Die Tabelle selbst findet man im AOT unter System Documentation > Tables > SqlSyncInfo.

Übrigens gibt es im AOT auch das Formular SysSqlSync, welches man jederzeit öffnen kann und sich dort das Ergebnis der jeweils letzten Synchronisierung ansehen kann.

Screenshot
 


 
 

Einen (einfachen) SSRS-Bericht in einer bestimmten Sprache aufrufen

Am Beispiel des Berichtes CustTransList (Debitorenkonten > Berichte > Buchungen > Debitor > Buchungen) möchte ich zeigen, wie es möglich ist einen Bericht in einer beliebigen Sprache aufzurufen.

Für diesen Bericht gibt es keinerlei Klassen in AX, also habe ich mir folgende Klasse selbst erstellt: 

class CustTransListController extends SrsReportRunController
{
}

 

public static str getReportName(Args _args)
{
    str reportName = ssrsReportStr(CustTransList, Report);
    return reportName;
}

 

public static void main(Args _args)
{
    CustTransListController  controller = new CustTransListController();
    controller.parmReportName(CustTransListController::getReportName(_args));
    controller.parmArgs(_args);
    controller.parmReportContract().parmRdlContract().parmLanguageId('en-us');
    
    controller.startOperation();
}

Mit dieser Klasse kann der Bericht nun in englischer Sprache aufgerufen werden (bzw. in jener Sprache, die man der Methode parmLanguageId() übergibt).


 
 

AX 2012: Finanzdimension als Display-Methode anzeigen

Folgende Display-Methode in der Datasource einer Form zeigt beispielsweise die Finanzdimension Costcenter eines Debitoren an.

public display DimensionValue showCostCenter(CustTable _custTable)
{
    DimensionAttributeValueSet dimensionAttributeValueSet;
    DimensionAttributeValueSetItem dimensionAttributeValueSetItem;
    DimensionAttributeValue dimensionAttributeValue;
    DimensionAttribute dimensionAttribute;

    #define.CostCenterDimensionName("CostCenter");
 
    if( !_custTable || !_custTable.DefaultDimension)
    {
        return '';
    } 

    dimensionAttributeValueSet = DimensionAttributeValueSet::find(_custTable.DefaultDimension); 

    select firstOnly RecId
    from dimensionAttributeValueSetItem
        where dimensionAttributeValueSetItem.DimensionAttributeValueSet == dimensionAttributeValueSet.RecId
    join DimensionAttributeValue
        where DimensionAttributeValue.RecId == dimensionAttributeValueSetItem.DimensionAttributeValue
    join RecId from dimensionAttribute
    where dimensionAttribute.RecId == DimensionAttributeValue.DimensionAttribute
       && dimensionAttribute.Name  == #CostCenterDimensionName
    

    if(dimensionAttributeValue && dimensionAttribute)
    {
        return dimensionAttributeValue.getValue();
    }

    return '';
}

Einfachere Variante (siehe Kommentare)

public display DimensionValue showCostCenter(CustTable _custTable)
{
    #define.CostCenterDimensionName("CostCenter");
 
    return ((select firstOnly DisplayValue from DefaultDimensionView
             where DefaultDimensionView.Name == #CostCenterDimensionName
                && DefaultDimensionView.DefaultDimension == _custTable.DefaultDimension).DisplayValue);
}

 
 

AX 2012: Finanzdimension auf Basis einer Formulareingabe eintragen

Oftmals hat man die Anforderung, daß auf Basis einer Eingabe in einem Formular auch eine bestimmte Finanzdimension eingetragen werden soll.

Mit folgendem Code-Beispiel ist so etwas relativ einfach zu realisieren. Im Beispiel wird, wann immer ein bestimmtes Feld geändert wird - abgefragt über die Methode modified() des Feldes einer Datasource, die Finanzdimension Kostenstelle mit dem Wert 25 befüllt. Ist der einzutragende Wert ein ungültiger, passiert nichts (Fehlermeldung oder ähnliches).

public void modified()
{
    DimensionAttribute DimensionAttribute = DimensionAttribute::findByName("Kostenstelle");
    DimensionValue newValue = '25';    // New dimension value
    
    super();
    
    dimensionDefaultingController.setDimensionAttributeValue(
        DimensionAttribute, 
        DimensionAttributeValue::findByDimensionAttributeAndValue(DimensionAttribute, newValue).RecId, 
        newValue);
}

Im Beispiel wird eine existierende Instanz von DimensionDefaultingController verwendet.
 


 
 

Makro innerhalb eines SELECT-Statements verwenden

Das Beispiel listet beispielsweise nur aktive Stücklistenpositionen (Tabelle BOM) auf (aktiv über die Felder FromDate und ToDate). Lässt man den zweiten Parameter des Makros leer (dateNull()), so werden alle Stücklistenpositionen gelistet.

static void useMacroInSelectStatement(Args _args)
{
    bom bom;
    date emptyDate;
    
    // parameters: %1 = table instance, %2 date, %3 empty date value
    #localmacro.bomDateFilter
        && ( %2 == dateNull() || (
            ((%1.FromDate <= %2) && (%1.ToDate >= %2)) ||
            ((%1.FromDate == %3) && (%1.ToDate == %3)) ||
            ((%1.FromDate <= %2) && (%1.ToDate == %3)) ||
            ((%1.FromDate == %3) && (%1.ToDate >= %2))
            ))
    #endMacro
    ;
    
    while select bom
    where bom.ItemId == '123'
    #bomDateFilter(bom, systemDateGet(), emptyDate)
    {
        info(bom.bomid);
    }
}

 
 

Welche Felder werden in einem automatisch generierten Lookup angezeigt?

Mir wurde diese Frage vor kurzem selbst gestellt und konnte diese allerdings nur zum Teil beantworten.

Ich wusste aber noch, daß ich schon einmal eine Seite gesehen hatte, wo dies genau erklärt wird. Aber ich wusste weder noch wo, noch konnte ich sie über diverse Suchmaschinen finden.

Aber in alten Unterlagen fand ich die Quelle dann doch, der Trick um die Quelle auch mit Google und Konsorten zu finden ist, mit dem altem Namen von Microsoft Dynamics AX - Axapta danach zu suchen!

Tut man dies, so findet man rasch folgende Seite:

http://www.axaptapedia.com/index.php?title=Lookups


 
 

Verwenden einer Assembly/DLL in Dynamics AX

Um eine DLL in Dynamics AX verwenden zu können, muss diese im References-Knoten des AOT hinzugefügt werden.

Dazu per rechter Maustaste auf den Knoten klicken und  Referenz hinzufügen auswählen. Dadurch öffnet sich ein Dialog, wo abhängig vom "Speicherort" der DLL wie folgt vorgegangen werden muss:

  • Wurde die DLL bereits im Global Assembly Cache (GAC) registriert, sollte sie bereits in der Liste aufscheinen wo sie nun über das Kontrollkästchen links selektiert und mit Auswählen ausgewählt werden kann.

    Um eine DLL im GAC zu registrieren ist es notwendig, daß die DLL signiert wurde.
    Registriert werden kann sie über die Kommandozeile mit folgendem Befehl
    "gacutil /i myClassLibrary.dll"
  • Wurde die DLL beispielsweise im BIN-Verzeichnis des Clients abgelegt, muss man zuerst über die Durchsuchen-Schaltfläche die DLL aus dem BIN-Verzeichnis auswählen. Nun sollte sie in der Liste aufscheinen wo sie über das Kontrollkästchen links selektiert und mit Auswählen ausgewählt werden kann.

In beiden Fällen muss nun der Dialog mit OK bestätigt werden.


 
 
Seiten « 1 ... 20 21 22 23 24 25 26 ... 53 » 

 

 
 
 
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