Dynamics AX Blog - Dynamics AX 4.0 - Seite 3

Momentan angezeigt werden nur Beiträge, welche für die Dynamics AX-Version »Dynamics AX 4.0« relevant sind. Filter entfernen

RSS-Feed dieser Version

Praktisches Beispiel für die Verwendung des runBaseBatch-Frameworks

Vor einiger Zeit habe ich schon einmal einen Eintrag über das runBaseBatch-Framework geschrieben, damals ging's hauptsächlich um die Aufrufreihenfolge der einzelnen Methoden und wofür einige von diesen Methoden verwendet werden können bzw. verwendet werden sollten.

Nun habe ich mir basierend auf diesem Eintrag und vor allem aufgrund von Erfahrungswerten eine eigene Klasse namens tutorial_ClassWithQueryRun geschrieben, die einige oft benötigte Anforderungen vereinigt.

Diese Klasse vereint folgende Fähigkeiten:

  • Stapelfähigkeit
  • Arbeiten mit einem Query
  • Arbeiten mit den Nutzungsdaten
  • Schreiben einer Datei via textIo
  • Arbeiten mit Fortschrittsanzeigen (progress)

Screenshot


 
 

Fehler beim Aufrufen des ActiveX-Controls NETRONIC VARCHART XGantt in Dynamics AX

Ich habe mich schon seit längerem über zahlreiche Fehlermeldungen gewundert, die immer dann aufgetreten sind, wenn ich ein Formular geöffnet habe wo das ActiveX-Control NETRONIC VARCHART XGantt eingebettet war, z.B. das Formular Simultanplanungslauf.

Folgende Fehlermeldungen hatte ich da am Bildschirm:

ActXBaseControl::Open failure

D\Work\Projects\Ganft
4.O\NewGanttChart\NewGanttC ha rt_ActiveXsettings\GanttReqTransExplosioniFD

Loading the interface with identifier GanttReqTransExplosion failed

This is an unlicensed version of NETRONIC VARCHART XGantt. 1 Please contact NETRONIC for a Iicensed version.

Eigentlich ist die Lösung ganz einfach! Ich arbeite natürlich auf einer Entwickler-Maschine, wo unterschiedlichste Versionen von Dynamcs AX/Axapta parallel installiert sind. Und die zuerst installierte und somit älteste Version bestimmt die aktuell verwendete Version der ActiveX-Komponente.

Also ist folgendes zu tun: Deinstallieren der "veralteten" Version und installieren bzw. registrieren einer neueren Version z.B. über die Kommandozeile.

REM Uninstall old version
regsvr32.exe /u "C:\Program Files\Microsoft Business Solutions\Axapta\Client\Bin\vcgantt.ocx"

REM Install new version
regsvr32.exe "C:\Program Files\Microsoft Dynamics AX\Common\vcgantt.ocx"

 


 
 

Shared Project mit X++ erstellen II

In einem früheren Beitrag habe ich ja hier schon einen Job veröffentlicht, mit dessen Hilfe man sich per X++ ein Shared Project erstellen kann. Basierend auf der neu entdeckten Funktion selectMultiple habe ich diesen nun etwas erweitert, der Benutzer hat mit dessen Hilfe nun die Möglichkeit, ein Shared Project zu erstellen und dabei für die aktuell benötigten Datentypen eigene Gruppenknoten innerhalb dieses Projektes zu erstellen.

static void CreateSharedProjectUsingSelectMultiple(Args _args)
{
    DictEnum            DictEnum;
    container           conValues;
    container           conSelectedValues;
    container           conSelectMultiple;
    int                 i;
    projectNode         projectNode;
    projectGroupNode    projectGroupNode;
    projectNode         myProjectNode;
    treeNodeName        nameOfProject;
    groupNodeType       groupNodeType;
    treeNodeName        groupNodeName;
    dialog              dialog;
    dialogField         dfProjectName;
    #AOTExport
    ;
    // Create dialog
    dialog = new dialog();
    dfProjectName = dialog.addFieldValue(typeId(treeNodeName), "NameOfproject", "Name of project");
    if( !dialog.run())
    {
        return;
    }
    nameOfProject = dfProjectName.value() ? dfProjectName.value() : "Unknown";
    
    // Add available values to container
    DictEnum = new DictEnum(enumName2Id(identifierStr(GroupNodeType)));
    for(i=1;i<DictEnum.values();i++)
    {
        conValues = conIns(conValues, conLen(conValues)+1, [DictEnum.index2Label(i), i, false]);
    }
   
    // Call selectMultiple
    conSelectMultiple = selectMultiple("Please select", "Please select the needed project-groups", conValues);
    conSelectedValues = conPeek(conSelectMultiple, 2);
    if( !conPeek(conSelectMultiple, 1))
    {
        return;
    }

    // Create shared project
    projectNode    = infolog.projectRootNode();
    projectNode    = projectNode.AOTfindChild(#expProjectShared);
    myProjectNode  = projectNode.AOTfindChild(nameOfProject);

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

    myProjectNode     = myProjectNode.getRunNode();

    if(conPeek(conSelectMultiple, 1))
    {
        for (i=1; i<=conLen(conSelectedValues); i++)
        {
           
            groupNodeName = DictEnum.index2Label(conPeek(conSelectedValues, i));
            projectGroupNode = myProjectNode.AOTfindChild(groupNodeName);
            if( !projectGroupNode)
            {
                myProjectNode.AOTadd(groupNodeName);
                projectGroupNode = myProjectNode.AOTfindChild(groupNodeName);
                projectGroupNode.projectGroupType(DictEnum.name2Value(groupNodeName));
                myProjectNode.AOTsave();
            }
        }
    }

    projectGroupNode.AOTsave();

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

Obiger Code funktioniert meines Wissens nach in Dynamics AX 4.0 und Dynamics AX 2009.

 

 


 
 

Palette verlagern per X++

Folgend etwas X++ Code, mit dessen Hilfe man eine Palette verlagern kann, also genau das, was die Schaltfläche "Palette verlagern" in Formular Palette tut.

WMSPalletMove wmsPalletMove = new wmsPalletMove();
wmsPalletMove.parmWMSPalletId('00000022_117');
wmsPalletMove.parmToInventLocationId('300');
wmsPalletMove.parmToLocationId('01');
if(wmsPalletMove.validate())
{
   wmsPalletMove.run();
}

 


 
 

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());
}

 
 

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

 
 

Unterschied zwischen update und doUpdate u.ä.

Mir persönlich dreht sich ja immer der Magen um, wenn ich in einer Produktivumgebung einen Stückchen Code mit doUpdate() oder Konsorten entdecke, trotzdem verwende ich solcherart Methoden auch gerne für den einen oder anderen Aktualisierungsjob. Wer den Unterschied zwischen dem Aufruf von update() und doUpdate() nicht kennt, kann diesen in der MSDN nachlesen...oder aber auch in der nachstehenden Tabelle.

Methode Bemerkung
insert vs. doInsert Bei Verwendung von doInsert wird die insert-Methode der Tabelle nicht aufgerufen
delete vs. doDelete Bei Verwendung von doDelete wird eine überschriebene delete-Methode der Tabelle nicht aufgerufen, sondern nur die delete-Methode des xRecord. D.h. DeleteActions werden dennoch ausgeführt
update vs. doUpdate Bei Verwendung von doUpdate wird die update-Methode der Tabelle nicht aufgerufen

 


 
 
Seiten « 1 2 3 4 5 6 ... 8 » 

 

 
 
 
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