Dynamics AX Blog

Schau auf dich, bleib zu Hause
 

Kommissionierliste für einzelne Positionen eines Verkaufauftrages erfassen

Das nachstehende Code-Beispiel zeigt, wie man per Code eine Kommissionieriste erfassen kann und dabei nur Teilmengen verarbeitet.

Dabei verfolge ich den Ansatz, für die benötigte Menge eine eigene Zeile in der Tabelle WMSOrderTrans zu erstellen (über die Teilen-Funktion) und die aktuell nicht benötigte Menge zu stornieren.

Screenshot

static void pickingListRegistrationPartly(Args _args)
{
    WMSPickingRouteID pickingRouteID = "00066";    // Route id to be picked
    Map inventTransMap = new Map(Types::String, Types::Real);
    MapEnumerator me;
    InventTransId inventTransId;
    Qty pickQty;
    List list = new List(Types::String);
    WmsOrderTrans wmsOrderTrans;
    WmsOrderTrans wmsOrderTransNew;

    list.addEnd(pickingRouteID);

    // Build map containing the lot-ids and quantity to pick
    inventTransMap.insert("014023", 7);
    inventTransMap.insert("014026", 3);
    
    // Change quantity
    me = inventTransMap.getEnumerator();
    while (me.moveNext())
    {
        inventTransId = me.currentKey();    
        pickQty = me.currentValue();
        
        ttsBegin;
        select forupdate wmsOrderTrans
            where wmsOrderTrans.RouteId == pickingRouteID &&
                  wmsOrderTrans.inventTransId == inventTransId &&
                  wmsOrderTrans.FullPallet == NoYes::No &&
                 (wmsOrderTrans.ExpeditionStatus == WMSExpeditionStatus::Registered ||
                  wmsOrderTrans.ExpeditionStatus == WMSExpeditionStatus::Activated  ||
                  wmsOrderTrans.ExpeditionStatus == WMSExpeditionStatus::Started);        
        
        // Split line
        wmsOrderTransNew = wmsOrderTrans.split(pickQty);        
        ttsCommit;
        
        ttsBegin;
        // Cancel remaining line
        wmsOrderTrans.cancel();
        ttsCommit;
    }
    
    // Update
    WMSPickingRoute::finishMulti(list.pack()); 

    wmsDeliverPickedItems::checkDeliverPickedItems(pickingRouteID, list.pack());
}

 
 
 

Kontextmenü des X++-Editors in Dynamics AX 2012 erweitern

Voreinigen Jahren hatte ich schon mal einen Beitrag über die Klasse EditorScripts geschrieben. Das ist nämlich jene, mit deren Hilfe man die Funktionalität des X++-Editors recht einfach erweitern kann.

Beispielsweise kann man das Kontextmenü des Editors einfach erweitern, in dem man in der Klasse Methoden erstellt.

Diese Methoden müssen lediglich einige Kriterien erfüllen, das sind u.a.:

  • Der erste und einzige Parameter muss vom Typ Editor sein
  • Die Methode muss public sein
  • Die Methode darf nichts retournieren (void)

X++-Editor


 
 
 

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

 
 
 

Aufträge an Lagerort freigeben

Um für einen oder mehrere Aufträge per Code die Funktion "Für Lagerort freigeben" aufzurufen, kann man sich des folgende Codes bedienen.
Screenshot
static void releaseToWareHouse(Args _args)
{
    SalesTable salesTale = SalesTable::find('002162');
    CustCreditMaxCheck creditMaxCheck;
    List listSalesTable = new List(Types::Record);
    container packedData;
    
    // Release to warehouse
    creditMaxCheck = WHSParameters::getCreditMaxCheck();
    listSalesTable.addEnd(salesTale);

    // Must use value of enum when going through IL
    packedData = [enum2int(creditMaxCheck), listSalesTable.pack()];

    WHSWarehouseRelease::salesFormReleaseCallCIL(packedData);
}

 


 
 
 

Eintrag "RPC exception 1702 occurred" im Eventlog

Object Server 01:  RPC error: RPC exception 1702 occurred in session 4 process is Ax32Serv.exe thread is 8788(User: admin, ClientType: Worker)

Dieser Eintrag kann auf die Verwendung von client-seitigem Code am Server hindeuten, beispielsweise den Aufruf einer WinApi-Funktion aus einem Stapeljob heraus.

Sie kann aber auch durch den Aufruf von info(), Warning() oder error() innerhalb eines Stapeljobs ausgelöst werden, wenn am jeweiligen AOS die Option "Enable global breakpoint" aktiviert ist.

Screenshot AX 2012 Server Configuration Utility


 
 
 

SQL-Fehler beim Synchronisieren nach Update von AX 2012 auf CU13

Während des Upgrades einer AX 2012 R3 CU9-Instanz auf CU13 (February Release) hatte ich beim Punkt Datenbank synchronisieren der Upgrade-Checklist folgenden Fehler:

SQL error description: [Microsoft][SQL Server Native Client 11.0][SQL Server]The CREATE UNIQUE INDEX statement terminated because a duplicate key was found for the object name 'dbo.LEDGERPERIODMODULEACCESSCONTROL' and the index name 'I_7375LEDGERFISCALCALENDARPERIODIDX'. The duplicate key value is (5637144576, 22565421332).

SQL statement: CREATE UNIQUE  INDEX I_7375LEDGERFISCALCALENDARPERIODIDX ON "DBO".LEDGERPERIODMODULEACCESSCONTROL (PARTITION,LEDGERFISCALCALENDARPERIOD)

Die Lösung ist, diesen fehler fürs erste so zu belassen und mit dem nächsten Schritt der Checklist, dem Data upgrade zu starten. Einer der auszuführenden Jobs bereinigt nämlich jene Datensätze, die zu dem genannten Fehler führen.

Nach dem Datenupgrade kann man nun die Datenbank fehlerfrei synchronisieren.

Screenshot
 


 
 
 

SysOperation-Framework: ExecutionMode und auszuführende Servermethode über das MenuItem steuern

Wenn man in einem SysOperation-Konstrukt den SysOperationExecutionMode und/oder die auszuführende Servermethode über das MenuItem steuern möchte, kann man dies über die Eigenschaften des MenuItems steuern.

Szenario: Ohne eigenen Controller

Die folgenden beiden MenuItems zeigen, wie man dafür die Eigenschaften setzen kann:

Dieses MenuItem ruft die Methode runService() einer Serviceklasse auf und setzt den SysOperationExecutionMode auf Synchronous:

Screenshot


 
 
Seiten 1 2 3 4 ... 53 » 

 

 
 
 
Beiträge des aktuellen Monats
April 2020
MoDiMiDoFrSaSo
 12345
6789101112
13141516171819
20212223242526
27282930 
 
© 2006-2020 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