DISM /online /Set-Edition:ServerDatacenter /AcceptEula /productkey:HXH7V
Friday, July 15, 2016
Wednesday, March 23, 2016
get default dimension with Attribute name and Value
container conAttr = ["ICO"];
DimensionAttribute dimensionAttribute;
DimensionAttributeValue dimensionAttributeValue;
DimensionAttributeValueSetStorage valueSetStorage = new DimensionAttributeValueSetStorage();
DimensionDefault result;
str dimValue = "APOL";
dimensionAttribute = dimensionAttribute::findByName("ICO");
dimensionAttributeValue = dimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute,dimValue,false,true);
valueSetStorage.addItem(dimensionAttributeValue);
result = valueSetStorage.save();
print result;
pause;
DimensionAttribute dimensionAttribute;
DimensionAttributeValue dimensionAttributeValue;
DimensionAttributeValueSetStorage valueSetStorage = new DimensionAttributeValueSetStorage();
DimensionDefault result;
str dimValue = "APOL";
dimensionAttribute = dimensionAttribute::findByName("ICO");
dimensionAttributeValue = dimensionAttributeValue::findByDimensionAttributeAndValue(dimensionAttribute,dimValue,false,true);
valueSetStorage.addItem(dimensionAttributeValue);
result = valueSetStorage.save();
print result;
pause;
Tuesday, December 29, 2015
Get Voucher balance in AX 2012
ledgerJournalTrans ledgerJournalTrans;
ledgerJournalEngine ledgerJournalEngine = new ledgerJournalEngine();
ledgerJournalTable ledgerJournalTable;
tmpVoucherSum tmpVoucherSum;
;
ledgerJournalTrans = ledgerJournalTrans::findRecId(5638439934,false);
ledgerJournalTable = ledgerJournalTable::find(ledgerJournalTrans.JournalNum);
ledgerJournalEngine.newJournalActive(ledgerJournalTable,true);
print ledgerJournalEngine.voucherDebit(ledgerJournalTrans);
tmpVoucherSum = LedgerJournalEngine_Server::createVoucherBalance(ledgerJournalTrans.Voucher,
ledgerJournalTable.JournalNum);
print tmpVoucherSum.debit;
print tmpVoucherSum.Credit;
pause;
ledgerJournalEngine ledgerJournalEngine = new ledgerJournalEngine();
ledgerJournalTable ledgerJournalTable;
tmpVoucherSum tmpVoucherSum;
;
ledgerJournalTrans = ledgerJournalTrans::findRecId(5638439934,false);
ledgerJournalTable = ledgerJournalTable::find(ledgerJournalTrans.JournalNum);
ledgerJournalEngine.newJournalActive(ledgerJournalTable,true);
print ledgerJournalEngine.voucherDebit(ledgerJournalTrans);
tmpVoucherSum = LedgerJournalEngine_Server::createVoucherBalance(ledgerJournalTrans.Voucher,
ledgerJournalTable.JournalNum);
print tmpVoucherSum.debit;
print tmpVoucherSum.Credit;
pause;
Sunday, April 26, 2015
Hot fix installation error
An error occurred in writing to the event log on machine DBSERVER: The source was not found, but some or all event logs could not be searched. Inaccessible logs: Security.
Error updating model database: Microsoft.Dynamics.Setup.AxSetupException: AxUtil call returned errors:The model contains a customization of a configuration key. The model cannot be imported because you can overlayer a configuration key from the patching layer only.
Error updating model database: Microsoft.Dynamics.Setup.AxSetupException: AxUtil call returned errors:The model contains a customization of a configuration key. The model cannot be imported because you can overlayer a configuration key from the patching layer only.
Solution:
Uninstall DMF for CU6 from Control panel / axutil
axutil delete /model:"Data Import Export Framework" from CMD .
Reinstall CU8
If you Need a Filter In a Form
//Add this to Class Declaration of a Form
public class FormRun extends ObjectRun
{
QueryBuildRange rangeTenant;
QueryBuildRange rangeAgreementId;
QueryBuildRange rangeAgreementJournalId;
QueryBuildRange rangeBuildingId;
QueryBuildRange rangeRentTransId;
QueryBuildRange rangePaymentDate;
QueryBuildRange qbr,qbr1,qbr2,qbr3;
public class FormRun extends ObjectRun
{
QueryBuildRange rangeTenant;
QueryBuildRange rangeAgreementId;
QueryBuildRange rangeAgreementJournalId;
QueryBuildRange rangeBuildingId;
QueryBuildRange rangeRentTransId;
QueryBuildRange rangePaymentDate;
QueryBuildRange qbr,qbr1,qbr2,qbr3;
}
//Add this to Datasource Execute Query(Eg :- NetPaymentHistory_ds)
public void executeQuery()
{
//Add this to Datasource Execute Query(Eg :- NetPaymentHistory_ds)
public void executeQuery()
{
rangeTenant.value(TenantId.text() ? queryValue(TenantId.text())
:SysQuery::valueUnlimited());
rangeAgreementId.value(AgreementId.text() ? queryValue(AgreementId.text())
: SysQuery::valueUnlimited());
rangeAgreementJournalId.value(AgreementJournalId.text() ? queryValue(AgreementJournalId.text())
: SysQuery::valueUnlimited());
rangeBuildingId.value(BuildingId.text() ? queryValue(BuildingId.text())
: SysQuery::valueUnlimited());
rangeRentTransId.value(RentTransId.text() ? queryValue(RentTransId.text())
: SysQuery::valueUnlimited());
rangePaymentDate.value(PaymentDate.valueStr() ? queryValue(PaymentDate.valueStr())
: SysQuery::valueUnlimited());
:SysQuery::valueUnlimited());
rangeAgreementId.value(AgreementId.text() ? queryValue(AgreementId.text())
: SysQuery::valueUnlimited());
rangeAgreementJournalId.value(AgreementJournalId.text() ? queryValue(AgreementJournalId.text())
: SysQuery::valueUnlimited());
rangeBuildingId.value(BuildingId.text() ? queryValue(BuildingId.text())
: SysQuery::valueUnlimited());
rangeRentTransId.value(RentTransId.text() ? queryValue(RentTransId.text())
: SysQuery::valueUnlimited());
rangePaymentDate.value(PaymentDate.valueStr() ? queryValue(PaymentDate.valueStr())
: SysQuery::valueUnlimited());
super();
}
//Add this to Datasource init method (Eg :- NetPaymentHistory_ds)
}
//Add this to Datasource init method (Eg :- NetPaymentHistory_ds)
public void init()
{
{
super();
this.query().dataSourceTable(tablenum(NetPaymentHistory)).clearDynalinks();
rangeTenant = this.query().dataSourceTable(tablenum(NetPaymentHistory))
.addRange(fieldnum(NetPaymentHistory, TenantId));
rangeAgreementId = this.query().dataSourceTable(tablenum(NetPaymentHistory))
.addRange(fieldnum(NetPaymentHistory, AgreementId));
rangeAgreementJournalId = this.query().dataSourceTable(tablenum(NetPaymentHistory))
.addRange(fieldnum(NetPaymentHistory, AgreementJournalID));
rangeBuildingId = this.query().dataSourceTable(tablenum(NetPaymentHistory))
.addRange(fieldnum(NetPaymentHistory, BuildingId));
rangeRentTransId = this.query().dataSourceTable(tablenum(NetPaymentHistory))
.addRange(fieldnum(NetPaymentHistory, RentTransId));
rangePaymentDate = this.query().dataSourceTable(tablenum(NetPaymentHistory))
.addRange(fieldnum(NetPaymentHistory, PaymentDate));
// Enable caching of the document handling and note it display fields
//purchRFQTable_ds.cacheAddMethod(tablemethodstr(PurchRFQTable, showDocHandIcon));
.addRange(fieldnum(NetPaymentHistory, TenantId));
rangeAgreementId = this.query().dataSourceTable(tablenum(NetPaymentHistory))
.addRange(fieldnum(NetPaymentHistory, AgreementId));
rangeAgreementJournalId = this.query().dataSourceTable(tablenum(NetPaymentHistory))
.addRange(fieldnum(NetPaymentHistory, AgreementJournalID));
rangeBuildingId = this.query().dataSourceTable(tablenum(NetPaymentHistory))
.addRange(fieldnum(NetPaymentHistory, BuildingId));
rangeRentTransId = this.query().dataSourceTable(tablenum(NetPaymentHistory))
.addRange(fieldnum(NetPaymentHistory, RentTransId));
rangePaymentDate = this.query().dataSourceTable(tablenum(NetPaymentHistory))
.addRange(fieldnum(NetPaymentHistory, PaymentDate));
// Enable caching of the document handling and note it display fields
//purchRFQTable_ds.cacheAddMethod(tablemethodstr(PurchRFQTable, showDocHandIcon));
}
// Add this to Each of the String Control Field
public boolean modified()
{
boolean ret;
// Add this to Each of the String Control Field
public boolean modified()
{
boolean ret;
ret = super();
NetPaymentHistory_ds.executeQuery();
return ret;
}
}
Parent Form Refresh using x++
//Add this Method in Parent Form
void Form_doRefresh()
{
;
{
;
NetBuildings_ds.reread(); // Parent Form and Child Form Datasource Name
NetBuildings_ds.executeQuery();
NetBuildings_ds.refresh();
NetBuildings_ds.executeQuery();
NetBuildings_ds.refresh();
NetUnitDetails_ds.reread();
NetUnitDetails_ds.executeQuery();
NetUnitDetails_ds.refresh();
}
NetUnitDetails_ds.executeQuery();
NetUnitDetails_ds.refresh();
}
//Add this Method in Child Form where you need to Refresh the Parent Form
public void close()
{
if(formHasMethod(element.args().caller(), identifierStr(Form_doRefresh)))//Form_doRefresh is Parent Method Name
{
element.args().caller().Form_doRefresh();
}
{
element.args().caller().Form_doRefresh();
}
super();
}
.................................................................................................................................................................
}
.................................................................................................................................................................
void bookrefresh()
{
}
{
}
In the child form, you can do this –
void bookRefresh()
{
FormRun callerForm = element.args().caller();
{
FormRun callerForm = element.args().caller();
if (callerForm)
{
if (callerForm.name() == formstr(
{
callerForm.bookRefresh();
}
}
}
{
if (callerForm.name() == formstr(
{
callerForm.bookRefresh();
}
}
}
Backup SQL DB using code
DECLARE @name VARCHAR(100) — database name
DECLARE @path VARCHAR(256) — path for backup files
DECLARE @fileName VARCHAR(256) — filename for backup
DECLARE @fileDate VARCHAR(20) — used for file name
DECLARE @path VARCHAR(256) — path for backup files
DECLARE @fileName VARCHAR(256) — filename for backup
DECLARE @fileDate VARCHAR(20) — used for file name
SET @path = ‘G:\BACKUP\11-09-2012_2300Hrs\’
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112)
DECLARE db_cursor CURSOR FOR
SELECT name
FROM master.dbo.sysdatabases
WHERE name NOT IN (‘master’,’model’,’msdb’,’tempdb’)
SELECT name
FROM master.dbo.sysdatabases
WHERE name NOT IN (‘master’,’model’,’msdb’,’tempdb’)
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @name
FETCH NEXT FROM db_cursor INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @fileName = @path + @name + ‘_’ + @fileDate + ‘.BAK’
BACKUP DATABASE @name TO DISK = @fileName
BEGIN
SET @fileName = @path + @name + ‘_’ + @fileDate + ‘.BAK’
BACKUP DATABASE @name TO DISK = @fileName
FETCH NEXT FROM db_cursor INTO @name
END
END
CLOSE db_cursor
DEALLOCATE db_cursor
DEALLOCATE db_cursor
MANAGEMENT REPORTER ERROR
ERROR – UNABLE TO CONTACT THE SERVER, DO YOU WANT TO CHANGE THE SERVER SETTINGS (TEST CONNECTION)
SOLUTION –
Go to SQL SERVER MANAGEMENT STUDIO> SECURITY > LOGINS> NT AUTHORITY(CHECK WHICH LOGIN YOU HAVE GIVEN WHILE INSTALLING MR) > PROPERTIES>SERVER ROLES> CHECK BOX SHOULD BE ENABLED FOR Management reporter for that particular login – ASSIGN PUBLIC + SERVER ADMIN + SYSTEM ADMIN.
How to Publish AX Reports for a specific AOS Instance
If you are running multiple
instances of AX on a single environment, you have more than likely gone through
the instructions as per this URL http://technet.microsoft.com/en-us/library/hh389760.aspx.
One of the steps identified in this URL talks about publishing reports using the following AX Powershell command: publish-axreports.
What isn’t perhaps obvious from the examples shown on the Deploy reports to the new Reporting Services Instance [AX 2012] page is – How do I publish reports for a specific AOS instance? (The examples shown is for the default instance)
When you look at the full syntax of the Publish-AxReports powershell command:

You will notice two optional parameters that are of interest, namely:
These two parameters are used to “tell” the Publish-AXReports powershell command, which AOS to connect to when publishing reports.
The syntax used for these two parameters are as follow:
Now that we understand the
syntax, the Publish-AXReports command would look like this:
Publish-AXReport –ReportName * -id AXSSRS –servicesAOSname AXServer –servicesAOSWSDLPort 8102
Note – If you are running the Publish-AxReport command using the –servicesAOSName parameter you’ll also need to specify the –servicesAOSWSDLPort. They are both required to ensure that command executes correctly.
One of the steps identified in this URL talks about publishing reports using the following AX Powershell command: publish-axreports.
What isn’t perhaps obvious from the examples shown on the Deploy reports to the new Reporting Services Instance [AX 2012] page is – How do I publish reports for a specific AOS instance? (The examples shown is for the default instance)
When you look at the full syntax of the Publish-AxReports powershell command:

You will notice two optional parameters that are of interest, namely:
- ServicesAOSName
- ServicesAOSWSDLPort
These two parameters are used to “tell” the Publish-AXReports powershell command, which AOS to connect to when publishing reports.
The syntax used for these two parameters are as follow:
- ServicesAOSName
This
parameter contains the name of the server that runs the AOS instance that you
want to connect to e.g. AXServer
- ServicesAOSWSDLPort
This
parameter contains the WSDL Port number that has been setup for your AOS
instance e.g. 8102
Publish-AXReport –ReportName * -id AXSSRS –servicesAOSname AXServer –servicesAOSWSDLPort 8102
Note – If you are running the Publish-AxReport command using the –servicesAOSName parameter you’ll also need to specify the –servicesAOSWSDLPort. They are both required to ensure that command executes correctly.
AX Service start error,
Error ---
SQL diagnostics: [Microsoft][SQL Native Client][SQL Server]Login failed for user 'NT AUTHORITY\NETWORK SERVICE'.. Connect information was: Userid = [], Database = [CN_Dev1], Server = [MDT753], DSN = [], Other = []
Object Server 01: Server main session is being destroyed.
Object Server 01: Fatal SQL condition during login. Error message: "[Microsoft][SQL Native Client][SQL Server]Login failed for user 'NT AUTHORITY\NETWORK SERVICE'."
Login failed for user 'NT AUTHORITY\NETWORK SERVICE'. Reason: Failed to open the explicitly specified database. [CLIENT:]
Resolution /Cause --
If it is a new database then check the user in security node, there must be some user that is missing from the list.Usually the users that syatem should add are network service & the machine-name$. If the users are not there, add these users in security node and in schema list.
While adding user in the user list, In new user window -> Securables page add two Stored procedures "CREATESERVERSESSIONS" & "CREATEUSERSESSIONS" that is responsible for Server session and User Session. These can be found using search option and adding the two. Also provide execute permission on them. If this step is not taken then the AOS will not start.
SQL diagnostics: [Microsoft][SQL Native Client][SQL Server]Login failed for user 'NT AUTHORITY\NETWORK SERVICE'.. Connect information was: Userid = [], Database = [CN_Dev1], Server = [MDT753], DSN = [], Other = []
Object Server 01: Server main session is being destroyed.
Object Server 01: Fatal SQL condition during login. Error message: "[Microsoft][SQL Native Client][SQL Server]Login failed for user 'NT AUTHORITY\NETWORK SERVICE'."
Login failed for user 'NT AUTHORITY\NETWORK SERVICE'. Reason: Failed to open the explicitly specified database. [CLIENT:
Resolution /Cause --
If it is a new database then check the user in security node, there must be some user that is missing from the list.Usually the users that syatem should add are network service & the machine-name$. If the users are not there, add these users in security node and in schema list.
While adding user in the user list, In new user window -> Securables page add two Stored procedures "CREATESERVERSESSIONS" & "CREATEUSERSESSIONS" that is responsible for Server session and User Session. These can be found using search option and adding the two. Also provide execute permission on them. If this step is not taken then the AOS will not start.
Friday, April 24, 2015
To find total number of Column and Row in a DB
QUERY FOR FINDING NO OF COLUMN, NO OF ROWS IN EACH TABLE IN DB:
USE Dev_MicrosoftDynamicsAX
GO
CREATE TABLE #temp (
table_name sysname ,
row_count INT,
reserved_size VARCHAR(50),
data_size VARCHAR(50),
index_size VARCHAR(50),
unused_size VARCHAR(50))
SET NOCOUNT ON
INSERT #temp
EXEC sp_msforeachtable 'sp_spaceused ''?'''
SELECT a.table_name,
a.row_count,
COUNT(*) AS col_count,
a.data_size
FROM #temp a
INNER JOIN information_schema.columns b
ON a.table_name collate database_default
= b.table_name collate database_default
GROUP BY a.table_name, a.row_count, a.data_size
ORDER BY table_name asc,CAST(REPLACE(a.data_size, ' KB', '') AS integer) DESC
drop table #temp;
Delete a specific Batch Job
The sql script to only delete a specific entry would be:
declare @BatchJobRecId bigint select top 1 @BatchJobRecId = RECID from BATCHJOB where CAPTION = 'Workflow message processing' and COMPANY = 'dat' delete from BATCHJOB where RECID = @BatchJobRecId delete from BATCH where BATCHJOBID = @BatchJobRecId if (exists(select top 1 RECID from BATCHJOB where CAPTION = 'Data upgrade')) begin print '' print 'There are still other btch jobs registered in AX with this name. Run again this script' end |
Tuesday, March 24, 2015
Change table field property
static void TableFieldUpdate(Args _args)
{
TreeNode vendFldsRoot = treeNode::findNode(@"\Data Dictionary\Tables\ScobTopVendors\Fields");
TreeNodeIterator vendFldsIterator;
TreeNode vendFlds;
NoYes visibleProp;
Table1 table1;
Name name;
str property;
;
vendFldsIterator = vendFldsRoot.AOTiterator();
vendFlds = vendFldsIterator.next();
while(vendFlds)
{
name = vendFlds.treeNodeName();
select * from table1 where table1.Companyname == name;
Property = vendFlds.AOTgetProperties();
Property = SetProperty(Property, "name",table1.label);
vendFlds.AOTsetProperties(Property);
vendFlds.AOTcompile();
vendFlds.AOTsave();
vendFlds = vendFldsIterator.next();
}
}
{
TreeNode vendFldsRoot = treeNode::findNode(@"\Data Dictionary\Tables\ScobTopVendors\Fields");
TreeNodeIterator vendFldsIterator;
TreeNode vendFlds;
NoYes visibleProp;
Table1 table1;
Name name;
str property;
;
vendFldsIterator = vendFldsRoot.AOTiterator();
vendFlds = vendFldsIterator.next();
while(vendFlds)
{
name = vendFlds.treeNodeName();
select * from table1 where table1.Companyname == name;
Property = vendFlds.AOTgetProperties();
Property = SetProperty(Property, "name",table1.label);
vendFlds.AOTsetProperties(Property);
vendFlds.AOTcompile();
vendFlds.AOTsave();
vendFlds = vendFldsIterator.next();
}
}
Tuesday, March 3, 2015
project list in ax 2012
static void listAllObjectosFromProject(Args _args)
{
#define.Shared("private")
ProjName projName = "userlayer";
ProjectListNode list = infolog.projectRootNode().AOTfindChild(#Shared);
TreeNodeIterator ir = list.AOTiterator();
ProjectNode pnProj;
ProjectNode pn = list.AOTfindChild(projName);
void searchAllObj(projectNode rootNode)
{
#TreeNodeSysNodeType
TreeNode childNode;
TreeNodeIterator rootNodeIterator;
;
if (rootNode)
{
rootNodeIterator = rootNode.AOTiterator();
childNode = rootNodeIterator.next();
while (childnode)
{
if (childNode.treeNodeType().id() == #NT_PROJECT_GROUP)
{
searchAllObj(childNode);
}
else
{
//info(strfmt("Group :%1 - Object: %2", rootNode.AOTname(), childNode.AOTname()));
info(strfmt("%1$%2", rootNode.name(),childNode.AOTname()));
}
childNode = rootNodeIterator.next();
}
}
}
;
if (pn)
{
//info(strFmt("Project %1:", projName));
pnProj = pn.loadForInspection();
searchAllObj(pnProj);
pnproj.treeNodeRelease();
}
else
{
info("Projet objects");
}
}
{
#define.Shared("private")
ProjName projName = "userlayer";
ProjectListNode list = infolog.projectRootNode().AOTfindChild(#Shared);
TreeNodeIterator ir = list.AOTiterator();
ProjectNode pnProj;
ProjectNode pn = list.AOTfindChild(projName);
void searchAllObj(projectNode rootNode)
{
#TreeNodeSysNodeType
TreeNode childNode;
TreeNodeIterator rootNodeIterator;
;
if (rootNode)
{
rootNodeIterator = rootNode.AOTiterator();
childNode = rootNodeIterator.next();
while (childnode)
{
if (childNode.treeNodeType().id() == #NT_PROJECT_GROUP)
{
searchAllObj(childNode);
}
else
{
//info(strfmt("Group :%1 - Object: %2", rootNode.AOTname(), childNode.AOTname()));
info(strfmt("%1$%2", rootNode.name(),childNode.AOTname()));
}
childNode = rootNodeIterator.next();
}
}
}
;
if (pn)
{
//info(strFmt("Project %1:", projName));
pnProj = pn.loadForInspection();
searchAllObj(pnProj);
pnproj.treeNodeRelease();
}
else
{
info("Projet objects");
}
}
Tuesday, February 24, 2015
Read odata service in ax 2012 + vs.net c#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Services.Client;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
try
{
Uri url = new Uri("http://win-nc3sculi90s:8101/DynamicsAx/Services/ODataQueryService/");
var container = new productservice.ODataQueryService(url);
//productservice.ODataQueryService context = new productservice.ODataQueryService(url);
container.Credentials = System.Net.CredentialCache.DefaultCredentials;
var ibnTable = from p in container.IBN_table
select p;
foreach (var data in ibnTable)
{
Console.WriteLine(data.IBN_table_1_Name);
}
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine(ex.InnerException);
Console.ReadLine();
}
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Services.Client;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
try
{
Uri url = new Uri("http://win-nc3sculi90s:8101/DynamicsAx/Services/ODataQueryService/");
var container = new productservice.ODataQueryService(url);
//productservice.ODataQueryService context = new productservice.ODataQueryService(url);
container.Credentials = System.Net.CredentialCache.DefaultCredentials;
var ibnTable = from p in container.IBN_table
select p;
foreach (var data in ibnTable)
{
Console.WriteLine(data.IBN_table_1_Name);
}
Console.ReadLine();
}
catch (Exception ex)
{
Console.WriteLine(ex.InnerException);
Console.ReadLine();
}
}
}
}
Monday, February 9, 2015
Query in AX 2012
How to create Query in AX 2012 through X ++ code
With the following job we can create and execute the query :
Static void Querytest(Args _Args)
{
Query query;
QueryBuildDataSource queryBuildDataSource;
QueryBuildDataSource queryBuildDataSource1;
QueryBuildRange queryBuildRange;
QueryRun queryRun;
CustTable custTable;
DirPartyTable DirPartyTable;
;
query=new query(); //Initialize Query
queryBuildDataSource=query.addDataSource(tableNum(CustTable)); //Add Query
queryBuildDataSource.addSortField(fieldNum(custTable,AccountNum),SortOrder::Descending); //Add sorting
queryBuildRange=queryBuildDataSource.addRange(fieldNum(CustTable,AccountNum)); // Add Range
queryBuildRange.value(queryValue('11')+('*')); // Add Query Value
queryBuildRange=queryBuildDataSource.addRange(FieldNum(CustTable,AccountNum));
queryBuildRange.value(queryValue('22')+('*'));
//queryBuildDataSource1=queryBuildDataSource.addDataSource(tableNum(CustTrans)); //Add other Data Source for Joining
//queryBuildDataSource1.relations(true);// Enable Relation
// queryBuildDataSource1.joinMode(JoinMode::InnerJoin);//Define Join Mode
queryRun= new QueryRun(query); //Pass query to run it
while(queryRun.next())
{
custTable=queryRun.get(tableNum(CustTable));
print(strFmt("Customer Name, Account num and Currency are %1 , %2 and %3",DirPartyTable::findRec(CustTable.Party).Name,CustTable.AccountNum,CustTable.Currency));
pause;
}
}
Static void Querytest(Args _Args)
{
Query query;
QueryBuildDataSource queryBuildDataSource;
QueryBuildDataSource queryBuildDataSource1;
QueryBuildRange queryBuildRange;
QueryRun queryRun;
CustTable custTable;
DirPartyTable DirPartyTable;
;
query=new query(); //Initialize Query
queryBuildDataSource=query.addDataSource(tableNum(CustTable)); //Add Query
queryBuildDataSource.addSortField(fieldNum(custTable,AccountNum),SortOrder::Descending); //Add sorting
queryBuildRange=queryBuildDataSource.addRange(fieldNum(CustTable,AccountNum)); // Add Range
queryBuildRange.value(queryValue('11')+('*')); // Add Query Value
queryBuildRange=queryBuildDataSource.addRange(FieldNum(CustTable,AccountNum));
queryBuildRange.value(queryValue('22')+('*'));
//queryBuildDataSource1=queryBuildDataSource.addDataSource(tableNum(CustTrans)); //Add other Data Source for Joining
//queryBuildDataSource1.relations(true);// Enable Relation
// queryBuildDataSource1.joinMode(JoinMode::InnerJoin);//Define Join Mode
queryRun= new QueryRun(query); //Pass query to run it
while(queryRun.next())
{
custTable=queryRun.get(tableNum(CustTable));
print(strFmt("Customer Name, Account num and Currency are %1 , %2 and %3",DirPartyTable::findRec(CustTable.Party).Name,CustTable.AccountNum,CustTable.Currency));
pause;
}
}
Wednesday, January 14, 2015
list of table name and field name
Dictionary Dictionary;
TableId tableid;
tableName tablename;
;
Dictionary = new Dictionary();
tableid = Dictionary.tableNext(0);
tablename = Dictionary.tableName(tableid);
while(tableid)
{
info(strFmt("%1 - %2",tableid,tablename));
tableid = Dictionary.tableNext(0);
tablename = Dictionary.tableName(tableid);
}
TableId tableid;
tableName tablename;
;
Dictionary = new Dictionary();
tableid = Dictionary.tableNext(0);
tablename = Dictionary.tableName(tableid);
while(tableid)
{
info(strFmt("%1 - %2",tableid,tablename));
tableid = Dictionary.tableNext(0);
tablename = Dictionary.tableName(tableid);
}
Sunday, July 20, 2014
get values of base enums using code in x++
Question: How to get values of base enums using code in x++
static void getEnumValues(Args _args)
{
EnumId enumId = enumNum(LedgerDimensionType);
DictEnum dictEnum = new DictEnum(enumId);
int count = dictEnum.values();
int counter
for(counter = 0; counter < count; counter ++)
{
// You can use the number of method exposed by DictEnum class
// dictEnum.name(counter)
// dictEnum.index2Value(counter)
// dictEnum.index2Symbol(counter)
// dictEnum.index2Label(counter)
}
}
Tuesday, December 10, 2013
Limiting user sessions(Set Timeout For User Session)
Limiting user sessions
Our company has a limited number of AX user licenses, as most companies will. Some people like to open multiple sessions (and eat up licenses) while they're working. We wanted some way for the system to prevent this from happening.To achieve this I created a table called UserSessionLimits. It has a field called UserID (extended data type is userId) and this is a mandatory field. It has another field called MaxSessions (this is an integer) and it also is mandatory. The index is UserIDx, it contains userid and it is unique.
The code that accesses this table is written so that if a user is not in this table, then they are limited to one session, so add users to this table if they are exceptions and you want them to be able to have more than one session open.
Add code to the "Info" class, in the startup() method. The Info class can only be accessed by going to the System Documentation area of the AOT.
In the startup method, at the top, I placed this code:
select count(recid) from sysClientSessions
where sysClientSessions.userId == curuserid() &&
sysClientSessions.Status == 1 &&
sysClientSessions.clientType == 0;
if(sysClientSessions.RecId > UserSessionLimits::getMaxSessions(curUserid()))
{
box::stop(strfmt("You have exceeded your session limit of %1, the application will now close",
UserSessionLimits::GetMaxSessions(curUserid())));
appl.globalcache().set(classstr(info),identifierStr(AutoLogoff), true);
this.shutDown(true);
}
By searching only for clientType = 0, you will only be looking for "User" sessions. Web sessions or worker sessions (batches that are running) will not be affected.
There have been times that people have gotten around this. They quickly opened two sessions immediately one after the other. If they are simultaneously opened, it's hard to catch. Also, sometimes this locks people out. If they were doing something and AX shut down on them or their system froze, sometimes it takes some time for the session to end for them to get back in again. Your network administrator can control when inactive sessions time out.
We also set automatic shutdown (in user options) to 60 minutes. So if their session is inactive for 60 minutes, it will close.
Monday, November 25, 2013
Create location using X++
void CreateLocation(WMSAisleId aisleNo)
{
WMSAisle WMSaisle;
wmslocation _wmslocation;
;
try
{
select forupdate WMSaisle where WMSaisle.aisleId == aisleNo && WMSaisle.inventLocationId == inventLocationId ;
if(WMSaisle.RecId==0)
{
WMSaisle.clear();
WMSaisle.initValue();
WMSaisle.inventLocationId= inventLocationId;
WMSaisle.aisleId= aisleNo;
WMSaisle.name= strfmt("%1,aisle%2",inventLocationId,aisleNo);
WMSaisle.insert();
}
}
catch
{
Error(strfmt("Isle already exist %1,%2", inventLocationId,aisleNo));
}
select firstonly _wmslocation where _wmslocation.inventLocationId ==inventLocationId && _wmslocation.wMSLocationId == wmsLocationId;
if(_wmslocation.RecId== 0)
{
_wmslocation.clear();
_wmslocation.initValue();
_wmslocation.aisleId=aisleNo;
_wmslocation.wMSLocationId= wmsLocationId;
_wmslocation.inventLocationId = inventLocationId;
_wmslocation.insert();
}
}
{
WMSAisle WMSaisle;
wmslocation _wmslocation;
;
try
{
select forupdate WMSaisle where WMSaisle.aisleId == aisleNo && WMSaisle.inventLocationId == inventLocationId ;
if(WMSaisle.RecId==0)
{
WMSaisle.clear();
WMSaisle.initValue();
WMSaisle.inventLocationId= inventLocationId;
WMSaisle.aisleId= aisleNo;
WMSaisle.name= strfmt("%1,aisle%2",inventLocationId,aisleNo);
WMSaisle.insert();
}
}
catch
{
Error(strfmt("Isle already exist %1,%2", inventLocationId,aisleNo));
}
select firstonly _wmslocation where _wmslocation.inventLocationId ==inventLocationId && _wmslocation.wMSLocationId == wmsLocationId;
if(_wmslocation.RecId== 0)
{
_wmslocation.clear();
_wmslocation.initValue();
_wmslocation.aisleId=aisleNo;
_wmslocation.wMSLocationId= wmsLocationId;
_wmslocation.inventLocationId = inventLocationId;
_wmslocation.insert();
}
}
Tuesday, November 12, 2013
How to print PDF Order Confirmation report from Enterprise Portal?
How to print PDF Order Confirmation report from Enterprise Portal?
Content Id: 2028630
Status: Approved
Version: 1.0
Language: en-US
Author: EUROPE\czlangow
Modified: 6/3/2010
Confidentiality: Partner
SR/Case No.: 110031755639381
Symptoms
How to print PDF Order Confirmation report from Enterprise Portal?
Cause
NA
Resolution
The example in application where PDF report is printed is printing invoices:
The toolbar (Dynamics Toolbar WebPart) EPCustInvoiceJournalInfoToolbar is called which you can find in AOT under Web -> Web Menus when you go further you will see that action menu "Show invoice copy" is connected to Url (AOT \ Web \ Web Menu Item \ Url) MenuItemName EPPurchInvoice.
EPPurchInvoice item is referring to: _layouts/ep/downloaddocument.aspx.
DownloadDocument.aspx you can find in AOT \ Web \ Web Files \ Static Files where you can find that it is connected with EPDocuGetWebLet class.
In class EPDocuGetWebLet in method runDocument you can see that it used EPSendDocument class.
EPSendDocument class is the clue here, actually it is method new of this class.
So if you want to print document for Order Information
What you need to do is:
Create new report based on SalesOrder and SalesLine tables.
Create new url in AOT \ Web \ Web Menu Items \ URLs
This new menu item in URL property you need to specify: _layouts/ep/downloaddocument.aspx.
In Web \ Web menus \ EPSalesTableInfoToolbar \ Actions create new “Menu item” and in property MenuItemName specify menu item created in step 2
In method init of class EPSendDocument you need to add new block in case section ie:
case tablenum(SalesTable):
mailAddress = SalesTable::find(record.(fieldnum(SalesTable,SalesId))).Email;
custAccountNum = record.(fieldnum(SalesTable,CustAccount));
documentTitle = fileName("DocumentTitle");
reportName = reportstr(your new report name created in step);
break;
Go to EP and refresh AOT
You will be able to see document after selecting new menu as PDF.
The reason why I do not recommend to use SalesConfirm report and writing or new one is following:
As you see in EPSendDocument class the records taken to report are from context (session). In Order information site you have in context SalesTable site so you would need to create custConfirmJournal table to give it to SalesConfirm report which is based on this table. So what you would have to do is similar to what is going on in class SalesFormLetter_Confirm. This is why I believe approach to create new report would be easier here.
Content Id: 2028630
Status: Approved
Version: 1.0
Language: en-US
Author: EUROPE\czlangow
Modified: 6/3/2010
Confidentiality: Partner
SR/Case No.: 110031755639381
Symptoms
How to print PDF Order Confirmation report from Enterprise Portal?
Cause
NA
Resolution
The example in application where PDF report is printed is printing invoices:
The toolbar (Dynamics Toolbar WebPart) EPCustInvoiceJournalInfoToolbar is called which you can find in AOT under Web -> Web Menus when you go further you will see that action menu "Show invoice copy" is connected to Url (AOT \ Web \ Web Menu Item \ Url) MenuItemName EPPurchInvoice.
EPPurchInvoice item is referring to: _layouts/ep/downloaddocument.aspx.
DownloadDocument.aspx you can find in AOT \ Web \ Web Files \ Static Files where you can find that it is connected with EPDocuGetWebLet class.
In class EPDocuGetWebLet in method runDocument you can see that it used EPSendDocument class.
EPSendDocument class is the clue here, actually it is method new of this class.
So if you want to print document for Order Information
What you need to do is:
Create new report based on SalesOrder and SalesLine tables.
Create new url in AOT \ Web \ Web Menu Items \ URLs
This new menu item in URL property you need to specify: _layouts/ep/downloaddocument.aspx.
In Web \ Web menus \ EPSalesTableInfoToolbar \ Actions create new “Menu item” and in property MenuItemName specify menu item created in step 2
In method init of class EPSendDocument you need to add new block in case section ie:
case tablenum(SalesTable):
mailAddress = SalesTable::find(record.(fieldnum(SalesTable,SalesId))).Email;
custAccountNum = record.(fieldnum(SalesTable,CustAccount));
documentTitle = fileName("DocumentTitle");
reportName = reportstr(your new report name created in step);
break;
Go to EP and refresh AOT
You will be able to see document after selecting new menu as PDF.
The reason why I do not recommend to use SalesConfirm report and writing or new one is following:
As you see in EPSendDocument class the records taken to report are from context (session). In Order information site you have in context SalesTable site so you would need to create custConfirmJournal table to give it to SalesConfirm report which is based on this table. So what you would have to do is similar to what is going on in class SalesFormLetter_Confirm. This is why I believe approach to create new report would be easier here.
Monday, October 28, 2013
Quarantine Orders – Start, Report as finished, End using X++ Code [Dynamics AX]
static void SR_QO_post_Started(Args _args)
{
InventQuarantineMultiStartUp inventQuarantineMultiStartup;
ParmBuffer parmBuffer;
ParmUpdate parmUpdate;
InventQuarantineOrder inventQuarantineOrder = InventQuarantineOrder::find(‘QO-10005′);
;
inventQuarantineMultiStartup = InventQuarantineMultiStartUp::construct();
{
InventQuarantineMultiStartUp inventQuarantineMultiStartup;
ParmBuffer parmBuffer;
ParmUpdate parmUpdate;
InventQuarantineOrder inventQuarantineOrder = InventQuarantineOrder::find(‘QO-10005′);
;
inventQuarantineMultiStartup = InventQuarantineMultiStartUp::construct();
parmBuffer = inventQuarantineMultiStartup.defaultParmBuffer();
parmUpdate = inventQuarantineMultiStartup.defaultParmUpdate();
parmUpdate = inventQuarantineMultiStartup.defaultParmUpdate();
RunBaseMultiParm::initParm(inventQuarantineMultiStartup); //sets the parm id
//init and insert update parameters that goes for all updates.
inventQuarantineMultiStartup.insertParmUpdate(parmUpdate);
parmBuffer.Linenum++;
inventQuarantineMultiStartup.insertParmUpdate(parmUpdate);
parmBuffer.Linenum++;
inventQuarantineMultiStartup.insert(inventQuarantineOrder,parmBuffer);
inventQuarantineMultiStartup.run();
}
inventQuarantineMultiStartup.run();
}
In order to post the started QO to Report as finished. Use the same logic but use the class
InventQuarantineMultiReportFinished
static void SR_QO_post_started_RAF(Args _args)
{
InventQuarantineMultiReportFinished
static void SR_QO_post_started_RAF(Args _args)
{
InventQuarantineMultiReportFinished inventQuarantineMultiReportFinished;
ParmBuffer parmBuffer;
ParmUpdate parmUpdate;
InventQuarantineOrder inventQuarantineOrder = InventQuarantineOrder::find(‘QO-10005′);
;
inventQuarantineMultiReportFinished = InventQuarantineMultiReportFinished::construct();
ParmBuffer parmBuffer;
ParmUpdate parmUpdate;
InventQuarantineOrder inventQuarantineOrder = InventQuarantineOrder::find(‘QO-10005′);
;
inventQuarantineMultiReportFinished = InventQuarantineMultiReportFinished::construct();
parmBuffer = inventQuarantineMultiReportFinished.defaultParmBuffer();
parmUpdate = inventQuarantineMultiReportFinished.defaultParmUpdate();
parmUpdate = inventQuarantineMultiReportFinished.defaultParmUpdate();
RunBaseMultiParm::initParm(inventQuarantineMultiReportFinished); //sets the parm id
//init and insert update parameters that goes for all updates.
InventQuarantineMultiReportFinished.insertParmUpdate(parmUpdate);
parmBuffer.Linenum++;
InventQuarantineMultiReportFinished.insertParmUpdate(parmUpdate);
parmBuffer.Linenum++;
InventQuarantineMultiReportFinished.insert(InventQuarantineOrder,parmBuffer);
InventQuarantineMultiReportFinished.run();
}
InventQuarantineMultiReportFinished.run();
}
To end the QO – use InventQuarantineMultiEnd class
static void SR_QO_post_End(Args _args)
{
static void SR_QO_post_End(Args _args)
{
InventQuarantineMultiEnd inventQuarantineMultiEnd;
ParmBuffer parmBuffer;
ParmUpdate parmUpdate;
InventQuarantineOrder inventQuarantineOrder = InventQuarantineOrder::find(‘QO-10005′);
;
;
ParmBuffer parmBuffer;
ParmUpdate parmUpdate;
InventQuarantineOrder inventQuarantineOrder = InventQuarantineOrder::find(‘QO-10005′);
;
;
inventQuarantineMultiEnd = InventQuarantineMultiEnd::construct();
parmBuffer = inventQuarantineMultiEnd.defaultParmBuffer();
parmUpdate = inventQuarantineMultiEnd.defaultParmUpdate();
parmUpdate = inventQuarantineMultiEnd.defaultParmUpdate();
RunBaseMultiParm::initParm(inventQuarantineMultiEnd); //sets the parm id
//init and insert update parameters that goes for all updates.
inventQuarantineMultiEnd.insertParmUpdate(parmUpdate);
parmBuffer.Linenum++;
inventQuarantineMultiEnd.insertParmUpdate(parmUpdate);
parmBuffer.Linenum++;
inventQuarantineMultiEnd.insert(InventQuarantineOrder,parmBuffer);
inventQuarantineMultiEnd.run();
}
inventQuarantineMultiEnd.run();
}
Tuesday, October 22, 2013
AX2012 AXUTIL commands to Import,Export,Delete Models
// creating the Model in the Layer
AxUtil create /model:"TestModel" /Layer:CUS
// exporting the model to file
AxUtil export /model:"TestModel" /file:TestModel.axmodel
// importing the model from file
AxUtil import /file:TestModel.axmodel
// delete the model
AxUtil delete /model:"TestModel"
//delete the layer
AxUtil delete /layer:ISV
// if you have multiple instances running
//delete the layer from the database and AXserver.
Axutil delete /layer:ISV /db: /s:
AxUtil create /model:"TestModel" /Layer:CUS
// exporting the model to file
AxUtil export /model:"TestModel" /file:TestModel.axmodel
// importing the model from file
AxUtil import /file:TestModel.axmodel
// delete the model
AxUtil delete /model:"TestModel"
//delete the layer
AxUtil delete /layer:ISV
// if you have multiple instances running
//delete the layer from the database and AXserver.
Axutil delete /layer:ISV /db:
Friday, September 20, 2013
Email and PDF
static void sendabsenceEmailmail(Payperiod _Payperiod)
{
SysMailer mailer = new SysMailer();
SysEmailParameters parameters = SysEmailParameters::find();
str 500 String;
HRMParameters HRMParameters;
MSCpayperiod mscpayperiod;
;
select * from MSCpayperiod where MSCpayperiod.Payperiod == _Payperiod;
if (parameters.SMTPRelayServerName)
{
mailer.SMTPRelayServer(parameters.SMTPRelayServerName,
parameters.SMTPPortNumber,
parameters.SMTPUserName,
SysEmailParameters::password(),
parameters.NTLM);
}
else
{
mailer.SMTPRelayServer(parameters.SMTPServerIPAddress,
parameters.SMTPPortNumber,
parameters.SMTPUserName,
SysEmailParameters::password(),
parameters.NTLM);
}
mailer.subject(mscpayperiod.Description + " 2013 payroll needs to have approval");
HRMParameters = HRMParameters::find();
mailer.fromAddress(parameters.MSCSMTPEmail);//"somanna@msc-consulting.com.sg");
mailer.ccs().appendAddress(Parameters.MSCSMTPEmail);
//mailer.ccs().appendAddress(HRMParameters.AccountEmail);
//mailer.ccs().appendAddress(CCemail);
mailer.tos().appendAddress(HRMParameters.MSCHRMCIO);
String = "Approved payroll ";
mailer.htmlBody(String);
mailer.attachments().add("c:\\mscpayroll\\SR_paysReport.pdf");
if(HRMParameters.MSCHRMCIO == "")
{
info(strFmt("Email can't be sent as Email Address for the CIO is not set in HRM parameters"));
}
else
{
mailer.sendMail();
info(strFmt("Email is sent to CIO -> %1",HRMParameters.MSCHRMCIO));
}
}
...............................................................................................................................................................
static void SR_SaveReportToPDFFromController(Payperiod _payperiod)
{
MSCpayrollApprovalController MSCpayrollApprovalController;
mscPayrollApprovalContract mscPayrollApprovalContract;
Args args = new Args();
SrsReportRunImpl srsReportRun;
CustInvoiceJour custInvoiceJour;
ReportName reportName = "mscpayrollApprove.AutoDesign";
;
select firstOnly custInvoiceJour;
args.record(custInvoiceJour);
MSCpayrollApprovalController = new MSCpayrollApprovalController();
MSCpayrollApprovalController.parmReportName(reportName);
mscPayrollApprovalContract = MSCpayrollApprovalController.parmReportContract().parmRdpContract();
mscPayrollApprovalContract.parmPayPeriod(_payperiod);
//mscPayrollApprovalContract.parmHcmWorkerRecId(5637144576);
srsReportRun = MSCpayrollApprovalController.parmReportRun() as SrsReportRunImpl;
MSCpayrollApprovalController.parmReportRun(srsReportRun);
MSCpayrollApprovalController.parmReportContract().parmPrintSettings().printMediumType(SRSPrintMediumType::File);
MSCpayrollApprovalController.parmReportContract().parmPrintSettings().overwriteFile(true);
MSCpayrollApprovalController.parmReportContract().parmPrintSettings().fileFormat(SRSReportFileFormat::PDF);
MSCpayrollApprovalController.parmReportContract().parmPrintSettings().fileName("c:\\mscpayroll\\SR_paysReport.pdf");
MSCpayrollApprovalController.runReport();
}
...................................................................................................................................................................
{
SysMailer mailer = new SysMailer();
SysEmailParameters parameters = SysEmailParameters::find();
str 500 String;
HRMParameters HRMParameters;
MSCpayperiod mscpayperiod;
;
select * from MSCpayperiod where MSCpayperiod.Payperiod == _Payperiod;
if (parameters.SMTPRelayServerName)
{
mailer.SMTPRelayServer(parameters.SMTPRelayServerName,
parameters.SMTPPortNumber,
parameters.SMTPUserName,
SysEmailParameters::password(),
parameters.NTLM);
}
else
{
mailer.SMTPRelayServer(parameters.SMTPServerIPAddress,
parameters.SMTPPortNumber,
parameters.SMTPUserName,
SysEmailParameters::password(),
parameters.NTLM);
}
mailer.subject(mscpayperiod.Description + " 2013 payroll needs to have approval");
HRMParameters = HRMParameters::find();
mailer.fromAddress(parameters.MSCSMTPEmail);//"somanna@msc-consulting.com.sg");
mailer.ccs().appendAddress(Parameters.MSCSMTPEmail);
//mailer.ccs().appendAddress(HRMParameters.AccountEmail);
//mailer.ccs().appendAddress(CCemail);
mailer.tos().appendAddress(HRMParameters.MSCHRMCIO);
String = "Approved payroll ";
mailer.htmlBody(String);
mailer.attachments().add("c:\\mscpayroll\\SR_paysReport.pdf");
if(HRMParameters.MSCHRMCIO == "")
{
info(strFmt("Email can't be sent as Email Address for the CIO is not set in HRM parameters"));
}
else
{
mailer.sendMail();
info(strFmt("Email is sent to CIO -> %1",HRMParameters.MSCHRMCIO));
}
}
...............................................................................................................................................................
static void SR_SaveReportToPDFFromController(Payperiod _payperiod)
{
MSCpayrollApprovalController MSCpayrollApprovalController;
mscPayrollApprovalContract mscPayrollApprovalContract;
Args args = new Args();
SrsReportRunImpl srsReportRun;
CustInvoiceJour custInvoiceJour;
ReportName reportName = "mscpayrollApprove.AutoDesign";
;
select firstOnly custInvoiceJour;
args.record(custInvoiceJour);
MSCpayrollApprovalController = new MSCpayrollApprovalController();
MSCpayrollApprovalController.parmReportName(reportName);
mscPayrollApprovalContract = MSCpayrollApprovalController.parmReportContract().parmRdpContract();
mscPayrollApprovalContract.parmPayPeriod(_payperiod);
//mscPayrollApprovalContract.parmHcmWorkerRecId(5637144576);
srsReportRun = MSCpayrollApprovalController.parmReportRun() as SrsReportRunImpl;
MSCpayrollApprovalController.parmReportRun(srsReportRun);
MSCpayrollApprovalController.parmReportContract().parmPrintSettings().printMediumType(SRSPrintMediumType::File);
MSCpayrollApprovalController.parmReportContract().parmPrintSettings().overwriteFile(true);
MSCpayrollApprovalController.parmReportContract().parmPrintSettings().fileFormat(SRSReportFileFormat::PDF);
MSCpayrollApprovalController.parmReportContract().parmPrintSettings().fileName("c:\\mscpayroll\\SR_paysReport.pdf");
MSCpayrollApprovalController.runReport();
}
...................................................................................................................................................................
Wednesday, September 11, 2013
lastpart interview Questions
- What’s new in Dynamics AX 2012
- OOPs concepts
- Definition of AOT elements
- Layers & their usage.
- Differences:
- AX 4.0 & AX 2009
- MorphX & Intellimorph
- RunBase & RunBaseBatch
- Element & this
- COM & .NET Business Connector
- Concurrent user & Named user
- Primary key & Foreign key
- Construct & New methods
- Normal, field fixed & related field fixed relations
- Table & View in AOT
- Auto design & Generated design in reports
- Business connector & External Connector
- VSS & TFS
- Refresh(),reread(),research() & executeQuery()-(http://kashperuk.blogspot.com/2010/03/tutorial-reread-refresh-research.html)
- formDataSource.queryRun().query() & formDataSource.query()-(http://kashperuk.blogspot.com/2010/03/tutorial-reread-refresh-research.html)
- Delete actions & its types
- Table groups & its types
- Creation of PO & SO thru code
- Flow of SSRS report generation in Dynamics AX-
AX
menu item from rich client->Report viewer opens->Issues request
to report server-> Report server connects Dynamics AX(.NET
BC)->Fetches the data->Return to client
- AOS Load balancer concept/Clustering
- Dynamics AX security hierarchy
- AX 2009 Workflow configuration
- AIF in Dynamics AX 2009
- Web Services concept
- Version Control System in AX 2009
- Reverse Engineering tool
- MS Visio UML(Data & Object),ERD
- Unit test framework
- Visual Form & Report designer
- AX 2009 Debugger concepts
- Cross reference tool
- Document Management
- Print Management
- Types of joins in AX
- Containers and its functions
- Data Crawler
- Intrinsic functions
- Application Hierarchy Tree
- Optimistic Concurrency Control
- Concept of cubes & MDX queries in SQL.
- Integration from .NET
- Caching mechanism in AX
- Events on a form & report
- Purpose of following methods in AX
- Init(),run(),validatewrite(),write(),close(),canClose() etc.
- What is cloud computing? How it is configured in AX?
Data
dictionary
1.What is an EDT, Base Enum, how can we use array elements of an EDT,
2.Definition and use of Maps, how AddressMap (with methods) is used in standard AX
3.What is the difference between Index and Index hint?
Utility and use of find method.
4.How many types of data validation methods are written on table level?
5.How many types of relations are available in Axapta, Explain each of them.
6.When the recid is generated, what is its utility, what are the different types of Table groups defined on table properties.
7.Difference between Primary & Cluster index.
8.How many kind of lookups can be made and how.
9.How can we utilize field groups in forms
10.How many types of Delete Actions are there in Standard Ax and define the use of each
11.If any record is created in table I want to fetch the date & time stamp, how will you do that
12.What is the function of super()Classes
1. What is an abstract class, what is the utility of an abstract method
2. Multiple inheritance possible or not, if not how can we overcome that.
3. What is an interface, Why do we implement it
4. Do we need to write main method, give reasons
5. What is difference between new & construct method
6. What is the utilty of the RunOn property
7. What is main class used in batch process OR which class will you inherit to make a batch job
8. How can we make a batch job occur at regular interval
9. What is the main utility of classes in standard Ax
10. Which class is called when we create a SO/PO.
11. What are classes used to write query.
12. What is a static method, why do we make static methods and where can we write it.
13. When do we make methods private or protected.Forms
1. What is the basic structure of a form
2. Utility of init(), run(), wait() methods
3. What are different types of Link Types available in a form datasource, justify each of them
4. Properties of a form datasource
5. validateWrite() method can be written in form datasource as well as table level, when should we write it in form DS and when in table. Similar in case of write() method
6. How can we call table level methods from form DS (similar methods)
7. What is the difference between form init() & DS init()
8. When a form opens what are the sequential methods called.
9. Where is the best place to write code to perform filter in a form
10. What are the different types of menu items available, explain each of them
11. A action type menu item is attached to a form but in the drop down the menu item is not appearing, what could be the problemReports
1. What are the two most important methods
2. When do block the super() method of fetch
3. Can we make a report from wizard, if yes from where
4. What is a Programmable Section, how we use it in reports
5. What is the difference between Auto Design Spec & Generated Design
6. How can we sort the DS, what facility we can get in by placing fields in Ranges
7. What is the role of executeSection
8. What are Queries, how do we use themMenu Items
1. What is the use of Parameter, Enum TypeParameter/Enum Parameter properties of display
2. Why do we provide Configuration key & Security key
3. Normally what do we attach in Output
4. Normally what do we attach in ActionGeneral Questions
1. What is difference between select & select firstonly statements
2. What are the keywords used to access data from "multiple companies" and "one company to another company".
3. How can we override a lookup
4. How do the following methods work in a form DS.
ds.refresh(), ds.research(), ds.reread(), in what situation we should these methods
5. On closing a form name the methods which are invoked
6. What are security key/configuration keys, how do we use it in Ax
7. How can we provide user level/user group level security
8. What is a virtual company
9. What is Visual MorphXplorer, what do we do with that?(Reverse engineering tool has replaced Visual MorphXplorer)
10. What is the function of Application Hierarchy Tree
11. If you want to monitor the database activity, where can you get that
12. Where can we find the Label log and what is its utility
13. What are the tools you will use to upgrade any object
14. What is the difference between display() and edit() methods, how do we use each
15. What is the use of System Documentation/Application Developer Documentation/Application DocumentationFew More Questions on DAX
1.What are the classes, Tables, Forms and Methods used to post the sales orders.
2. What are the classes, Tables, Forms and Methods used to post the purchase orders.
3. What are the classes, Tables, Forms and Methods used to post the Ledgers.
4. What are the classes, Tables, Forms and Methods used to post the Inventory.
5. What is the base class to send the on-boad E-mailing.
6. What are the storage Dimensions?
7. What are the Item Dimensions?
8. What is the difference between RunBase and RunBaseBatch?
9. How do you create a NumberSequence for existing Module and also fro new Module.
10.What is the difference between Insert and doinsert.
11.What is the Runbase Stack?
1.What is an EDT, Base Enum, how can we use array elements of an EDT,
2.Definition and use of Maps, how AddressMap (with methods) is used in standard AX
3.What is the difference between Index and Index hint?
Utility and use of find method.
4.How many types of data validation methods are written on table level?
5.How many types of relations are available in Axapta, Explain each of them.
6.When the recid is generated, what is its utility, what are the different types of Table groups defined on table properties.
7.Difference between Primary & Cluster index.
8.How many kind of lookups can be made and how.
9.How can we utilize field groups in forms
10.How many types of Delete Actions are there in Standard Ax and define the use of each
11.If any record is created in table I want to fetch the date & time stamp, how will you do that
12.What is the function of super()Classes
1. What is an abstract class, what is the utility of an abstract method
2. Multiple inheritance possible or not, if not how can we overcome that.
3. What is an interface, Why do we implement it
4. Do we need to write main method, give reasons
5. What is difference between new & construct method
6. What is the utilty of the RunOn property
7. What is main class used in batch process OR which class will you inherit to make a batch job
8. How can we make a batch job occur at regular interval
9. What is the main utility of classes in standard Ax
10. Which class is called when we create a SO/PO.
11. What are classes used to write query.
12. What is a static method, why do we make static methods and where can we write it.
13. When do we make methods private or protected.Forms
1. What is the basic structure of a form
2. Utility of init(), run(), wait() methods
3. What are different types of Link Types available in a form datasource, justify each of them
4. Properties of a form datasource
5. validateWrite() method can be written in form datasource as well as table level, when should we write it in form DS and when in table. Similar in case of write() method
6. How can we call table level methods from form DS (similar methods)
7. What is the difference between form init() & DS init()
8. When a form opens what are the sequential methods called.
9. Where is the best place to write code to perform filter in a form
10. What are the different types of menu items available, explain each of them
11. A action type menu item is attached to a form but in the drop down the menu item is not appearing, what could be the problemReports
1. What are the two most important methods
2. When do block the super() method of fetch
3. Can we make a report from wizard, if yes from where
4. What is a Programmable Section, how we use it in reports
5. What is the difference between Auto Design Spec & Generated Design
6. How can we sort the DS, what facility we can get in by placing fields in Ranges
7. What is the role of executeSection
8. What are Queries, how do we use themMenu Items
1. What is the use of Parameter, Enum TypeParameter/Enum Parameter properties of display
2. Why do we provide Configuration key & Security key
3. Normally what do we attach in Output
4. Normally what do we attach in ActionGeneral Questions
1. What is difference between select & select firstonly statements
2. What are the keywords used to access data from "multiple companies" and "one company to another company".
3. How can we override a lookup
4. How do the following methods work in a form DS.
ds.refresh(), ds.research(), ds.reread(), in what situation we should these methods
5. On closing a form name the methods which are invoked
6. What are security key/configuration keys, how do we use it in Ax
7. How can we provide user level/user group level security
8. What is a virtual company
9. What is Visual MorphXplorer, what do we do with that?(Reverse engineering tool has replaced Visual MorphXplorer)
10. What is the function of Application Hierarchy Tree
11. If you want to monitor the database activity, where can you get that
12. Where can we find the Label log and what is its utility
13. What are the tools you will use to upgrade any object
14. What is the difference between display() and edit() methods, how do we use each
15. What is the use of System Documentation/Application Developer Documentation/Application DocumentationFew More Questions on DAX
1.What are the classes, Tables, Forms and Methods used to post the sales orders.
2. What are the classes, Tables, Forms and Methods used to post the purchase orders.
3. What are the classes, Tables, Forms and Methods used to post the Ledgers.
4. What are the classes, Tables, Forms and Methods used to post the Inventory.
5. What is the base class to send the on-boad E-mailing.
6. What are the storage Dimensions?
7. What are the Item Dimensions?
8. What is the difference between RunBase and RunBaseBatch?
9. How do you create a NumberSequence for existing Module and also fro new Module.
10.What is the difference between Insert and doinsert.
11.What is the Runbase Stack?
some more interview Questions
1. Difference between following
condel :- Use condel to delete one or more items from a container.
confind :- Use confind to locate a sequence of items in a container.
conins :- Use conins to insert some items into a container.
conlen :- Use conlen to find out how many items there are in a container.
connull :- Use connull to explicitly dispose of the contents of a container.
conpeek :- Use conpeek to extract an item from a container, and to convert it into another data type
conpoke :- Use conpoke to replace (poke) an item in a container.
2. Difference between edit and display method
Display Indicates that the method's return value is to be displayed on a form or a report.
The value cannot be altered in the form or report
Edit Indicates
that the method's return type is to be used to provide information for a
field that is used in In a form. The value in the field can be
edited.
3. Difference between perspectives and table collection
Perspectives can organize information for a report model in the Application Object Tree (AOT).
A perspective is a collection of tables. You use a report model to create reports.
Table collection is a collection of table, which sharing across all the virtual companies.
4.What are the 4 types of files we need to copy to the standard folder?
*.aod, *.ahd, *.ald, *.add, *.khd
5. Why we use virtual companies?
Virtual
company accounts contain data in certain tables that are shared by any
number of company accounts. This allows users to post information in one
company that will be available to another company.
6. How can we restrict a class to be further extended?
using Final Keyword for ex: public final class
7.Which are classes are used for data import export?
SysDataImport and SysDataExport
8. From which table u can get the user permissions stored in Ax?
AccessRightList table.
9.What should we do if we need last record to be active when a form is opened?
In properties of datasource table set the StartPosition property as last.
10. What is the sequence of events while a report is generated?
Init, Run, Prompt, Fetch, Print
11. Name few X++ classes/Coreclasses related to Queries?
Query, QueryRun, QueryBuildRange, QueryBuildDataSource, QueryBuildLink
Query, QueryRun, QueryBuildRange, QueryBuildDataSource, QueryBuildLink
12. What is an index?
An
index is a table-specific database structure that speeds the retrieval
of rows from the table. Indexes are used to improve the performance of
data retrieval and sometimes to ensure the existence of unique records
QUES:Define IntelliMorph
QUES:Define IntelliMorph
IntelliMorph is the technology that
controls the user interface in Microsoft Dynamics AX. The user interface
is how the functionality of the application is presented or displayed
to the user.
IntelliMorph controls the layout of the user interface and makes it easier to modify forms, reports, and menus.
QUES:Define MorphX
The
MorphX Development Suite is the integrated development environment
(IDE) in Microsoft Dynamics AX used to develop and customize both the
Windows interface and the Web interface.
QUES:Define X++
X++ is the object-oriented programming language that is used in the MorphX environment .
QUES:Differenciate refresh(),reread(),research(),executequery()
refresh() will not reread the record from the database. It basically just refreshes the screen with whatever is stored in the form cache.
reread() will only re-read the CURRENT record from the DB so you should not use it to refresh the form data if you have added/removed records. It's often used if you change some values in the current record in some code, and commit them to the database using .update() on the table, instead of through the form datasource. In this case .reread() will make those changes appear on the form.
research() will rerun the existing form query against the data source, therefore updating the list with new/removed records as well as updating existing ones. This will honour any existing filters and sorting on the form.
executeQuery() is another useful one. It should be used if you have modified the query in your code and need to refresh the form. It's like
research() except it takes query changes into account.
reread() will only re-read the CURRENT record from the DB so you should not use it to refresh the form data if you have added/removed records. It's often used if you change some values in the current record in some code, and commit them to the database using .update() on the table, instead of through the form datasource. In this case .reread() will make those changes appear on the form.
research() will rerun the existing form query against the data source, therefore updating the list with new/removed records as well as updating existing ones. This will honour any existing filters and sorting on the form.
executeQuery() is another useful one. It should be used if you have modified the query in your code and need to refresh the form. It's like
research() except it takes query changes into account.
QUES:Define AOT
The
Application Object Tree (AOT) is a tree view of all the application
objects within Microsoft Dynamics AX. The AOT contains everything you
need to customize the look and functionality of a Microsoft Dynamics AX
application
QUES:Define AOS
The
Microsoft Dynamics AX Object Server (AOS) is the second-tier
application server in the Microsoft Dynamics AX three-tier architecture.
The 3-tier environment is divided as follows:
• First Tier – Intelligent Client • Second Tier – AOS • Third Tier – Database Server
In
a 3-tier solution the database runs on a server as the third tier; the
AOS handles the business logic in the second tier. The thin client is
the first tier and handles the user interface and necessary program
logic.
QUES: Difference between Index and Iindex hint
Adding
the "index" statement to an Axapta select, it does NOT mean that this
index will be used by the database. What it DOES mean is that Axapta
will send an "order by" to the database.
Adding the "index hint" statement to an Axapta select, it DOES mean that this index will be used by the database (and no other one).
Adding the "index hint" statement to an Axapta select, it DOES mean that this index will be used by the database (and no other one).
QUES: Difference between temp table and container.
1.Data
in containers are stored and retrieved sequentially, but a temporary
table enables you to define indexes to speed up data retrieval.
2. Containers
provide slower data access if you are working with many records.
However, if you are working with only a few records, use a container.
3.
Another important difference between temporary tables and containers is
how they are used in method calls. When you pass a temporary table into
a method call, it is passed by reference. Containers are passed by
value. When a variable is passed by reference, only a pointer to the
object is passed into the method. When a variable is passed by value, a
new copy of the variable is passed into the method. If the computer has a
limited amount of memory, it might start swapping memory to disk,
slowing down application execution. When you pass a variable into a
method, a temporary table may provide better performance than a
container
Data dictionary
1.What is an EDT, Base Enum, how can we use array elements of an EDT,
2.Definition and use of Maps, how AddressMap (with methods) is used in standard AX
3.What is the difference between Index and Index hint?
Utility and use of find method.
4.How many types of data validation methods are written on table level?
5.How many types of relations are available in Axapta, Explain each of them.
6.When the recid is generated, what is its utility, what are the different types of Table groups defined on table properties.
7.Difference between Primary & Cluster index.
8.How many kind of lookups can be made and how.
9.How can we utilize field groups in forms
10.How many types of Delete Actions are there in Standard Ax and define the use of each
11.If any record is created in table I want to fetch the date & time stamp, how will you do that
12.What is the function of super()
Classes
1. What is an abstract class, what is the utility of an abstract method
2. Multiple inheritance possible or not, if not how can we overcome that.
3. What is an interface, Why do we implement it
4. Do we need to write main method, give reasons
5. What is difference between new & construct method
6. What is the utilty of the RunOn property
7. What is main class used in batch process OR which class will you inherit to make a batch job
8. How can we make a batch job occur at regular interval
9. What is the main utility of classes in standard Ax
10. Which class is called when we create a SO/PO.
11. What are classes used to write query.
12. What is a static method, why do we make static methods and where can we write it.
13. When do we make methods private or protected.Forms
14. What is the basic structure of a form
15. Utility of init(), run(), wait() methods
16. What are different types of Link Types available in a form datasource, justify each of them
17. Properties of a form datasource
18. validateWrite() method can be written in form datasource as well as table level, when should we write it in form DS and when in table. Similar in case of write() method
19. How can we call table level methods from form DS (similar methods)
20. What is the difference between form init() & DS init()
21. When a form opens what are the sequential methods called.
22. Where is the best place to write code to perform filter in a form
23. What are the different types of menu items available, explain each of them
24. A action type menu item is attached to a form but in the drop down the menu item is not appearing, what could be the problem
Report
1. What are the two most important methods
2. When do block the super() method of fetch
3. Can we make a report from wizard, if yes from where
4. What is a Programmable Section, how we use it in reports
5. What is the difference between Auto Design Spec & Generated Design
6. How can we sort the DS, what facility we can get in by placing fields in Ranges
7. What is the role of executeSection
8. What are Queries, how do we use them
Menu Items
1. What is the use of Parameter, Enum TypeParameter/Enum Parameter properties of display
2. Why do we provide Configuration key & Security key
3. Normally what do we attach in Output
4. Normally what do we attach in Action
General Questions
1. What is difference between select & select firstonly statements
2. What are the keywords used to access data from "multiple companies" and "one company to another company".
3. How can we override a lookup
4. How do the following methods work in a form DS.
ds.refresh(), ds.research(), ds.reread(), in what situation we should these methods
5. On closing a form name the methods which are invoked
6. What are security key/configuration keys, how do we use it in Ax
7. How can we provide user level/user group level security
8. What is a virtual company
9. What is Visual MorphXplorer, what do we do with that?(Reverse engineering tool has replaced Visual MorphXplorer)
10. What is the function of Application Hierarchy Tree
11. If you want to monitor the database activity, where can you get that
12. Where can we find the Label log and what is its utility
13. What are the tools you will use to upgrade any object
14. What is the difference between display() and edit() methods, how do we use each
15. What is the use of System Documentation/Application Developer Documentation/Application Documentation
Few More Questions on DAX
1.What are the classes, Tables, Forms and Methods used to post the sales orders.
2. What are the classes, Tables, Forms and Methods used to post the purchase orders.
3. What are the classes, Tables, Forms and Methods used to post the Ledgers.
4. What are the classes, Tables, Forms and Methods used to post the Inventory.
5. What is the base class to send the on-boad E-mailing.
6. What are the storage Dimensions?
7. What are the Item Dimensions?
8. What is the difference between RunBase and RunBaseBatch?
9. How do you create a NumberSequence for existing Module and also fro new Module.
10.What is the difference between Insert and doinsert.
11.What is the Runbase Stack?
DIFFERENCE
SELECT-
1.Table buffer on the FROM in x++ clause ,not the table as in SQL
2.ORDER BY clause precedes the WHERE clause
3.! for negation ,not NOT as in SQL
4.&& and || for logical operator ,not AND or OR as in SQL.
5.* and ? for like wildcards ,not % and _ as in SQL.
JOIN CLAUSE-
1.Join clause has no ON keyword in x++,use WHERE instead
2.Defauld JOIN direction is left .
3.there are no LEFT and RIGHT keyword for JOIN in x++
4.The FROM clause is optional when:
-No column is listed or
-Only one table is listed in the SELECT in x++
select * FROM CustTable;
select CustTable;
both are same.
OTHERS-
1.The WHILE SELECT statement provides an automatic cursor for return rows in x++
2.There is no HAVING keyword in x++
3.No null values are return in x++
LEARN SHORT CUT AND MAKE YOUR SELF MORE FASTER.....
Viewing/Navigation options
Accelerator Keys
|
Task Description
|
Alt+F1
|
Show Navigation Pane (if it is not in auto-hide mode)
This shortcut works from both MDI & SDI windows, so it is a good shortcut to get back to the main workspace.
|
Shift+Alt+F1
|
Enable/Disable auto-hide for the Navigation Pane
|
Ctrl+Shift+D
|
Toggles
the Content Pane between Developer and Content modes. Developer mode
makes the content frame (where Area pages & List pages are viewed)
restorable/minimizable so it is easier to work with developer windows.
|
Ctrl+F1
|
Open global search pane
|
Alt+F5
|
Toggle the docking status of a docking window
|
Alt+F6
|
Move to the next docked window
|
Alt+Shift+F6
|
Move to the previous docked window
|
Ctrl+F6
|
Move to the next MDI window
|
Ctrl+Shift+F6
|
Move to the previous MDI window
|
Ctrl+Shift+V
|
Open “Version control parameters” form
|
Ctrl+W
|
Open a new workspace
|
F11
|
Focus the Address Bar in edit mode (works from anywhere)
|
Alt+Left Arrow
|
Shortcut for the Back button on the Address bar
|
Alt+Right Arrow
|
Shortcut for the Forward button on the Address bar
|
From AreaPage, ListPage or developer (MDI) window
| |
Alt+M
|
Show the Microsoft Dynamics AX Command Bar
|
Alt+W
|
Show Windows menu
Hint: do this then press “a” to close all windows.
|
Alt+V
|
Show View menu
|
Alt+H
|
Show Help menu
|
Alt
|
Show Keytips
Press the corresponding key to navigate directly to ActionPaneTab/Group/Button
There
may be one or more ActionPaneTabs/Groups/Buttons with the same letter
for a Keytip. To execute a duplicate Keytip, keep pressing the letter
until focus is on the one you want and then hit Enter.
|
Accelerator Keys
|
Task Description
|
Ctrl+N
|
Create a new record
|
Ctrl+S
|
Save current record
|
Alt+F9
|
Delete record(s)
|
Ctrl+F4
|
Close the active window (saving changes)
|
Esc
or
Ctrl+Q
|
Close the active window (cancelling changes)
|
Alt+F4
|
Close the active window from SDI form (saving changes), Close the application from the main window
|
Ctrl+P
|
Print auto-report associated with current form
|
Ctrl+A
|
Select all rows in the currently active data source (works regardless of whether you are in a grid or not)
|
Alt+Down Arrow
|
Drops down a lookup field or drop-down-list
|
Ctrl+Alt+F4
or
|
Go to Main Table Form
|
F10
|
Activate the form’s menu bar (File, Edit, etc.)
|
Enter or Tab
|
Move to the next field
Enter will skip over buttons and will move to fields across tabs.
Tab will navigate to buttons and will always stay on the same tab page.
|
Shift+Enter or Shift+Tab
|
Move to the previous field (same caveats as previous row)
|
Ctrl+Shift+Home
|
Go to the first entry field in the form
|
Ctrl+Shift+End
|
Go to the last entry field in the form
|
Ctrl+Page Up
|
Go to the previous field group
|
Ctrl+Page Down
|
Go to the next field group
|
Shift+F10
|
Open context menu for current field
|
Page Up
|
Move to the previous page of records
|
Page Down
|
Move to the next page of records
|
Ctrl+Home
|
Move to the first record
|
Ctrl+End
|
Move to the last record
|
F5
|
Refresh all data sources on the current form
|
Ctrl+F5
|
Restore only the active record
|
Accelerator Keys
|
Task Description
|
Ctrl+F
|
Find by Field (clears previously applied filters)
|
Ctrl+K
|
Filter by Field (appends to previously applied filters)
|
Alt+F3
|
Filter by Selection
|
Ctrl+F3
|
Open Advanced Filter window
|
Ctrl+Shift+F3
|
Clear all filters
|
Within a Grid
| |
Ctrl+G
|
Enable/Disable Filter by Grid
|
Ctrl+Up Arrow
|
From a grid cell, move focus to the Filter by Grid input cell for that column (Filter by Grid must be enabled)
|
On a ListPage
| |
Shift+F3
|
Focus the Quick Filter (“Type to filter” area)
|
Focus in Quick Filter
| |
Enter
|
Execute/Clear Quick Filter
|
Down Arrow
|
Drop down the Quick Filter’s Field Chooser menu
|
Actions Specific to Grids
Accelerator Keys
|
Task Description
|
Ctrl+E
|
Export to Excel (only contents of grid)
|
Ctrl+C
|
Copy:
1) If Single cell is selected, copies just that cell contents
2) If
the entire row is selected or multiple rows are selected, copies values
for ALL fields on all the rows (including those off the grid)
|
Up/Down Arrow
|
Move focus to the next/previous record, unselecting the current record
|
Ctrl+Up/Down Arrow
|
Move focus to the previous/next record, leaving the current record marked and not marking the newly focused record
|
Shift+Up/Down Arrow
|
Move focus to the previous/next record, leaving the current record marked and marking the newly focused record
|
Ctrl+Shift+Home/End
|
Mark all records between the currently selected record and the first/last record
|
Editable Grids
| |
Shift+Space
|
Mark the current record, leaving previously marked records marked.
|
Read-only Grids
(such as on a ListPage)
| |
Enter
|
Execute default action (only on ListPage grids, usually opens the corresponding details form for selected record)
For, Non-ListPage forms, Enter will move to the next field
|
Left Arrow
|
Move focus one field to the left. If focus is already in the left-most column, hitting Left Arrow will “mark” the row.
|
Right Arrow
|
Move focus one field to the right.
|
Ctrl+Space
|
Mark the current record, leaving previously marked records marked.
|
Shift+Space
|
Mark
all records between the current record and the top-most marked record
(or the top record if none are marked), leaving previously marked
records marked.
|
Shift+Page Up/Page Down
|
Mark all records between the currently selected record and the previous/next page of records.
|
Subscribe to:
Posts (Atom)
How to identify the user that was used to change an object from AOT in AX2012
Get the object name for which we need to track these (user and date&time) information's. Login to SQL Server Management Studio an...
-
I've recently found an interesting feature of DAX4 Object Server: it can run not only as a service, but also as a console application st...
-
static void CreateTransferOrderLine(Args _args) { InventTransferTable inventTransFerTable; InventTransferLine inventTransFerLine; ...
-
Settlement feature allows you to select the open transactions(Vendor / customer) and then you can post the payment journal for the same. I...