Tuesday 14 August 2018
Get a list of Security Roles with Duties from Dynamics AX using code X++
Following code can be used to obtain a list of all security roles along with the associated duties from Dynamics AX using X++ code:
static void JZS_ExtractRoleswithDuties(Args _args)
{
CommaIO commaIO;
FileName fileName;
InventTable inventTable;
SecurityRole SecurityRole;
SecurityRoleTaskGrant grantTable;
str DutyName;
SecurityTask securityTask, securityTaskDef;
;
fileName = WINAPI::getTempPath() + "Security Roles" + ".csv";
commaIO = new CommaIO(fileName,'W');
commaIO.write("Security Role","Description","Duty name","Duty AOT name","Duty description");
while select SecurityRole order by Name
join grantTable where grantTable.SecurityRole == SecurityRole.RecId
join securityTask where securityTask.RecId == grantTable.SecurityTask
&& SecurityTask.Type == SecurityTaskType::Duty
{
select securityTaskDef where securityTaskDef.RecId == securityTask.RecId;
DutyName = securityTaskDef.Name ;
// info(strFmt("%1", DutyName ));
commaIO.write(SecurityRole.Name+"("+SecurityRole.AotName+")", SecurityRole.Description, securityTaskDef.Name ,securityTaskDef.AotName, securityTaskDef.Description);
}
WINAPI::shellExecute(fileName);
}
Tuesday 12 June 2018
Get customer contact Information by Type and Purpose
Following job can be used to reterieve customer contact information by type (email/telephone) and purpose (Business/Invoice)
static void JS_CustomerContactbyTypePurpose(Args _args)
{
CustTable custTable = CustTable::find("003764");
LogisticsElectronicAddress electronicAddresslocal;
LogisticsElectronicAddress getelectronicAddress(CustAccount CustAccount, // Customer Account
LogisticsElectronicAddressMethodType contactType = LogisticsElectronicAddressMethodType::Phone,
LogisticsLocationRoleType purpose = LogisticsLocationRoleType::Invoice)
{
LogisticsLocation parentLocation;
DirPartyLocation dirPartyLocation;
LogisticsElectronicAddress electronicAddress;
LogisticsElectronicAddressRole electronicAddressRole;
LogisticsLocationRole locationRole;
custTable _custtable;
select _custtable
where _custtable.accountNum == CustAccount// Specify customer account here
join dirPartyLocation
where dirPartyLocation.Party == custTable.Party
join parentLocation
where dirPartyLocation.Location == parentLocation.RecId
join electronicAddress
where electronicAddress.Location == parentLocation.RecId
&& electronicAddress.Type == contactType
join electronicAddressRole
where electronicAddressRole.ElectronicAddress == electronicAddress.RecId
join locationRole
where electronicAddressRole.LocationRole == locationRole.RecId
&& locationRole.Type == purpose;
{
return electronicAddress;
}
}
electronicAddresslocal = getelectronicAddress(custTable.AccountNum, LogisticsElectronicAddressMethodType::Phone, LogisticsLocationRoleType::Invoice);
info(strFmt("Customer: %1, Description: %2, Information %3", custTable.AccountNum, electronicAddresslocal.Description, electronicAddresslocal.Locator));
electronicAddresslocal = getelectronicAddress(custTable.AccountNum, LogisticsElectronicAddressMethodType::Email, LogisticsLocationRoleType::Invoice);
info(strFmt("Customer: %1, Description: %2, Information %3", custTable.AccountNum, electronicAddresslocal.Description, electronicAddresslocal.Locator));
}
static void JS_CustomerContactbyTypePurpose(Args _args)
{
CustTable custTable = CustTable::find("003764");
LogisticsElectronicAddress electronicAddresslocal;
LogisticsElectronicAddress getelectronicAddress(CustAccount CustAccount, // Customer Account
LogisticsElectronicAddressMethodType contactType = LogisticsElectronicAddressMethodType::Phone,
LogisticsLocationRoleType purpose = LogisticsLocationRoleType::Invoice)
{
LogisticsLocation parentLocation;
DirPartyLocation dirPartyLocation;
LogisticsElectronicAddress electronicAddress;
LogisticsElectronicAddressRole electronicAddressRole;
LogisticsLocationRole locationRole;
custTable _custtable;
select _custtable
where _custtable.accountNum == CustAccount// Specify customer account here
join dirPartyLocation
where dirPartyLocation.Party == custTable.Party
join parentLocation
where dirPartyLocation.Location == parentLocation.RecId
join electronicAddress
where electronicAddress.Location == parentLocation.RecId
&& electronicAddress.Type == contactType
join electronicAddressRole
where electronicAddressRole.ElectronicAddress == electronicAddress.RecId
join locationRole
where electronicAddressRole.LocationRole == locationRole.RecId
&& locationRole.Type == purpose;
{
return electronicAddress;
}
}
electronicAddresslocal = getelectronicAddress(custTable.AccountNum, LogisticsElectronicAddressMethodType::Phone, LogisticsLocationRoleType::Invoice);
info(strFmt("Customer: %1, Description: %2, Information %3", custTable.AccountNum, electronicAddresslocal.Description, electronicAddresslocal.Locator));
electronicAddresslocal = getelectronicAddress(custTable.AccountNum, LogisticsElectronicAddressMethodType::Email, LogisticsLocationRoleType::Invoice);
info(strFmt("Customer: %1, Description: %2, Information %3", custTable.AccountNum, electronicAddresslocal.Description, electronicAddresslocal.Locator));
}
Tuesday 27 February 2018
Batch Job to upload file to FTP Server from Dynamics AX
This summary is not available. Please
click here to view the post.
Tuesday 2 June 2015
Post Sales Invoice by X++ with selected sales line
Sometimes we need to post sales invoice with selected lines below is the code:
SalesFormLetter salesFormLetter = SalesFormLetter::construct(DocumentStatus::Invoice);
SalesTable salesTAble;
SalesParmLine parmLine;
SalesLine salesline;
salesTable = SalesTable::find('AU-027333');
salesFormLetter.salesTable(salesTAble);
salesFormLetter.transDate (systemDateGet());
salesFormLetter.specQty (SalesUpdate::All);
//If you want proforma you can enable the code
salesFormLetter.proforma (true);
salesFormLetter.printFormLetter (true);
salesFormLetter.createParmUpdateFromParmUpdateRecord(salesFormLetter.salesParmUpdate());
salesFormLetter.initParmSalesTable(salesTAble);
salesFormLetter.initParameters(salesFormLetter.salesParmUpdate(),Printout::After);
salesFormLetter.initLinesQuery();
while select forUpdate parmLine where parmLine.ParmId == salesFormLetter.parmId()
{
salesLine = salesline::findInventTransId(parmLine.InventTransId);
if (salesline.ShippingDateRequested > today())
{
ttsBegin;
parmLine.delete();
ttsCommit;
}
}
Saturday 4 May 2013
Insert text qualifier while Importing CSV file by X++
Hi,
When importing CSV file by X++ code in Dynamics AX we may encounter a situation when we need to eliminate extra string from master data . That string may be in form of an extra comma or | or speech mark or any other symbol. To achieve this goal and clean maser data i have written a job. Good Luck
static void Job669(Args _args)
{
str _text,note,cleanText;
int charpos,s1,s2,i,more;
int x;
char RepChar = ',';
char RepCharWith = ' ';
str text(str text)
{
s1 = strFind(text,'"',1,strlen(text));
s2 = strFind(text,'"',s1,strlen(text));
for (i=s1;i<s2+4;i++)
{
charpos = strScan(text,',',s1,s2);
text = strpoke(text,' ',charpos);
s1 = strFind(text,'"',1,strlen(text));
s2 = strFind(text,'"',s1+1,strlen(text));
charpos = strScan(text,',',s1,s2);
if (charpos > s2)
{
break;
}
}
if (s1 || s2)
{
text = strdel(text,s1,1);
text = strdel(text,s2-1,1);
}
return text;
}
;
more = 1;
_text = 'AXT001,"House,42,ENF",Enfield,"U,K"';
while( more !=0)
{
_text = text(_text);
more = strFind(_Text,'"',1,strlen(_Text));
}
info(_text);
}
When importing CSV file by X++ code in Dynamics AX we may encounter a situation when we need to eliminate extra string from master data . That string may be in form of an extra comma or | or speech mark or any other symbol. To achieve this goal and clean maser data i have written a job. Good Luck
static void Job669(Args _args)
{
str _text,note,cleanText;
int charpos,s1,s2,i,more;
int x;
char RepChar = ',';
char RepCharWith = ' ';
str text(str text)
{
s1 = strFind(text,'"',1,strlen(text));
s2 = strFind(text,'"',s1,strlen(text));
for (i=s1;i<s2+4;i++)
{
charpos = strScan(text,',',s1,s2);
text = strpoke(text,' ',charpos);
s1 = strFind(text,'"',1,strlen(text));
s2 = strFind(text,'"',s1+1,strlen(text));
charpos = strScan(text,',',s1,s2);
if (charpos > s2)
{
break;
}
}
if (s1 || s2)
{
text = strdel(text,s1,1);
text = strdel(text,s2-1,1);
}
return text;
}
;
more = 1;
_text = 'AXT001,"House,42,ENF",Enfield,"U,K"';
while( more !=0)
{
_text = text(_text);
more = strFind(_Text,'"',1,strlen(_Text));
}
info(_text);
}
Sunday 24 February 2013
Dilip's blog on DYNAMICS AX: Dynamics AX Salary Report (Detailed Analysis from ...
Dilip's blog on DYNAMICS AX: Dynamics AX Salary Report (Detailed Analysis from ...: 1 - Introduction This global salary survey is the largest completed to date that focuses specifically on the Microsoft Dynamics communit...
Thursday 3 January 2013
Creating a View in Dynamics AX
Hello Everyone,
In this blog i gonna show you how to create a simple view in Dynamics AX that consists of ItemID, Name, Sales ID, Customer Group and Customer Name using the following steps:
1. Right-click on the Views node and select New View. A new view will be created. You can open its properties by right-clicking and selecting Properties.
2. Change the name of the view to InventSalesCust and give it a label that describes the contents of the view.
3. The views can actually use queries that have already been created as a base for the data selection. This is done in the Properties of the view by choosing the query from the Query property. However, in our example, we will create the view from scratch.
4. Under the Metadata node, right-click on the Data Sources node and select New Data Source
5. Select the newly created data source and enter InventTable in the table property. The name of the data source will automatically change to InventTable_1, which is normal.
6. Under the InventTable data source, find the Data Sources node, right-click on it, and select New Data Source. This time, we want to use the SalesLine table so change the table property to SalesLine. Also change the relations property to Yes in order to get the link between the two tables active in the view.
7. Do the same to add the CustTable as a child data source to the SalesLine.
8. The next step is to define the fields that should be made available when this query is executed. Simply drag fields you need to use in the view from the InventTable_1,SalesLine_1, and CustTable_1 data source and drop them onto the Fields node.
9. You should now have a view that looks like the following screenshot:
1. Right-click on the Views node and select New View. A new view will be created. You can open its properties by right-clicking and selecting Properties.
2. Change the name of the view to InventSalesCust and give it a label that describes the contents of the view.
3. The views can actually use queries that have already been created as a base for the data selection. This is done in the Properties of the view by choosing the query from the Query property. However, in our example, we will create the view from scratch.
4. Under the Metadata node, right-click on the Data Sources node and select New Data Source
5. Select the newly created data source and enter InventTable in the table property. The name of the data source will automatically change to InventTable_1, which is normal.
6. Under the InventTable data source, find the Data Sources node, right-click on it, and select New Data Source. This time, we want to use the SalesLine table so change the table property to SalesLine. Also change the relations property to Yes in order to get the link between the two tables active in the view.
7. Do the same to add the CustTable as a child data source to the SalesLine.
8. The next step is to define the fields that should be made available when this query is executed. Simply drag fields you need to use in the view from the InventTable_1,SalesLine_1, and CustTable_1 data source and drop them onto the Fields node.
9. You should now have a view that looks like the following screenshot:
Subscribe to:
Posts (Atom)