Dynamics AX Blog - Seite 39
Auslesen von HTML-Quelltext in Dynamics AX 2009
12.08.2010Microsoft Dynamics AX (Axapta)
Vor kurzem wurde ich gefragt, wie man denn in Dynamics AX 2009 den HTML-Quelltext einer Webseite ausliest. Bitteschön... static void GetHTMLSourceCode(Args _args) { CLRObject castObject = null; System.Net.HttpWebRequest request = null; System.Net.HttpWebResponse response = null; System.IO.StreamReader streamReader = null; System.Text.Encoding encoding = null; url url = "http://www.yourdomain.com/yoursite.html"; ; new InteropPermission(InteropKind::ClrInterop).assert(); castObject = System.Net.WebRequest::Create(url); request = castObject; response = request.GetResponse(); encoding = System.Text.Encoding::get_UTF8(); streamReader = new System.IO.StreamReader(response.GetResponseStream(), encoding); info(streamReader.ReadToEnd()); } |
selectMultiple und selectSingle
05.08.2010Microsoft Dynamics AX (Axapta)
Beim Stöbern in den vorgefertigten Methoden in der global-Klasse bin ich auf zwei Funktionen gestossen, die ich schon früher das eine oder andere Mal gebraucht hätte: selectMultiple und selectSingle. Was können diese Funktionen? Man übergibt Ihnen einen Container mit möglichen Werten und als Rückgabewert erhält man ebenfalls einen Container mit den vom Benutzer ausgewählten Werten. Dazwischen wird ein Dialog generiert, der nicht benutzerfreundlicher sein könnte, wie ich finde. |
Shared Project mit X++ erstellen II
05.08.2010Microsoft Dynamics AX (Axapta)
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(); }
|
Liste aller Felder einer Tabelle ausgeben
24.07.2010Microsoft Dynamics AX (Axapta)
Unlängst benötigte ich eine Liste aller Felder einer Tabelle mit deren Datentypen. Dafür habe ich mir den folgenden Job - im Beispiel für die Tabelle custGroup - geschrieben: static void listAllFields4Table(Args _args) { dictTable dictTable = new dictTable(tableNum(custGroup)); int currFieldId = 0; counter c = 0; dictField dictField; counter a = 0; common common; str enumName; ; common = DictTable.makeRecord(); setPrefix(strFmt("Fields of table %1", tableId2name(common.TableId))); currFieldId = 0; c = 0; do { currFieldId = dictTable.fieldNext(currFieldId); if(currFieldId != 0) { dictField = new dictField(common.TableId, currFieldId); if(dictField.arraySize() == 1) { info( strFmt("%1: %2 [%3%4]", dictTable.fieldName(currFieldId), dictField.label(), dictField.baseType(), dictField.enumId() ? strFmt(" %1", enumId2Name(dictField.enumId())) : "") ); } else if(dictField.arraySize() > 1) { for(a=1;a<=dictField.arraySize();a++) { info( strFmt("%1 [%2]: %3 [%4]", dictTable.fieldName(currFieldId), a, dictField.label(), dictField.baseType()) ); } } } c++; } while (c < dictTable.fieldCnt()); } |
Prüfungen durchführen beim/vor dem Schliessen eines Formulares
20.07.2010Microsoft Dynamics AX (Axapta)
Möchte/muß man beim bzw. vor dem Schliessen eines Formulares etwas tun, z.B. Prüfungen durchführen, so stellt Dynamics AX dafür einige Methoden zur Verfügung, die in einer bestimmten Reihenfolge abgearbeitet werden. Da ich selbst mir diese Reihenfolge nicht merke, habe ich sie hier kurz notiert. Beim Schliessen eines Formulares über einen OK-Commandbutton:
Beim Schliessen eines Formulares über einen CANCEL-Commandbutton:
Beim Schliessen eines Formulares über "das rote X" bzw. der ESC-Taste:
|
|
|
|
|
|
|
Um in X++ ein Label in einer ganz bestimmten Sprache auszugeben, nutzt man am besten die Methode labelId2String2 der SysLabel-Klasse: