RSS

Tag Archives: Framework

Image

Using table method on Document Handling generation via COM

Hi Guys,

I just got a chance to work on creating document using word or excel template. in Dynamics AX we have a very good feature in document handling Create Word document via COM or Create Microsoft Office Excel worksheet via COM. Using these features we can create word or excel template, and create and attached the document to the record filling the template fields from the table record.

I don’t want to explain how to setup this type of document, you can read the blow link for that,

http://technet.microsoft.com/EN-US/library/aa548928.aspx

The problem arises when i try to use the the field which is not on the table or don’t have a direct relation with the table i have setup. For example, i have used the SMAServiceOrderTable and i have requirement to fill the “Payment term” on the template, which is on the ProjInvoiceTable. Which has a relation with SMAServiceOrderTable through ProjTable (SMAServiceOrderTable->ProjTabe->ProjInvoiceTable).

The solution i think for this problem is to customize Document handling feature to have the provision of using the method of the table instead of just the fields.

So the problem solved, I added a field on the “DocuField” table for methodName modify some classes. I have provided the link for the XPO for that.

XPO,

https://docs.google.com/file/d/0B7b9JMHh3V2eYnpaSldVNTg0TFE/edit?usp=sharing

I have modified the DocuField table so that method name of the table can be specified.

Then i make changes on the \Classes\DocuActionTrans\insertField  method, to get the value from method using DictTable class.
Thanks for Reading.

Advertisements
 

Tags: , , , , ,

Dynamics AX2012 Fact boxes

Fact boxes in Dynamics AX2012 is another very pretty feature. Before writing anything see the below screenshot of the Customer Listpage.

The area in the red box are the fact boxes, which are new in AX2012. These fact boxes provides extra information of the selected record for example the related information fact box shows the quotation, invoices of the customer selected. By this feature user don’t need to move to other form to get the information. User can get the summarized view of extra information in the fact boxes.

On AOT, there is a new node called “Part”, which holds the fact box objects. The available type of fact boxes are,

  • Form part
  • Info part
  • Cue part
I will provide more detail about how to develop fact boxes and place it to any form. Fact boxes can be placed on on listpage or forms.
Wait for my new post to know more about fact boxes. Keep reading my posts.
 

Tags: , , , , , , , , , , ,

Dynamics AX 2012 EP Session video

Enterprise Portal is one of the most attractive feature of Dynamics AX 2012. Enterprise Portal for Microsoft Dynamics AX provides a Web-based application framework that allows for users to interact with data in Microsoft Dynamics AX through a Web browser.
I shared this video to have the understanding of the development of EP in AX 2012.

see the video by clicking the below link.

http://vimeo.com/26902748

 

Thanks & Regards.

 

 

Tags: , , , , , ,

Delete Action

Cascade

A cascading delete action will delete all records in the related table, where the foreign key is equivalent to the primary key of the current table. That is, deleting the parent record will also delete the child record(s) in the related table. This cascading will take place whether the deletion is performed in code or directly by a user through the user interface.

Restricted

A restricting delete action will raise an error message if the user tries to delete a record, where records exist in the related table where the foreign key is equivalent to the primary key of the current table. This error will only appear if the deletion is performed through the user interface. A deletion from X++ code will be allowed to proceed and will not be cascaded to the related table. In this case the programmer should call .validateDelete() themselves prior to the call to .delete()

Cascade + Restricted

The delete action performs a restricted, if the record of the table will be deleted directly and performs a cascade, if the record of the table will be deleted through a cascade delete action of a other table.

 

Thanks for reading. keep visiting and giving feedback.

 
Leave a comment

Posted by on February 7, 2011 in AX, Basics, X++

 

Tags: , , , ,

RecordSortedList and RecordInsertList

For those who are wondering, Is there any way in AX to reduce the client server call when inserting a bunch of records into the database. With no surprise Yes!, AX provides a way to do that. Two Collection classes are there in AX RecordSortedList and RecordInsertList for this purpose.

The RecordSortedList class inserts multiple records in a single database trip, and can hold a subset of data from a table, in a particular sort order that does not exist as an index. There are built-in methods in RecordSortedList which can be used to perform the insertion to database. You must provide the sort order in order to perform the insertion properly. The following code sample demonstrates how to insert multiple Student records in the same database trip, using RecordSortedList:

 
 

Student student;

RecordSortedList recordSortedList = new RecordSortedList(tablenum(Student));

recordSortedList .sortOrder(fieldname2id(tablenum(Student),’StudentId’));

 
 

student.clear();

student.StudentID=”123″;

student.FirstName=”DOM”;

student.LastName=”FED”;

recordSortedList.ins(student);

 
 

student.clear();

student.StudentID=”456″;

student.FirstName=”TOM”;

student.LastName=”GED”;

recordSortedList.ins(student);

 
 

student.clear();

student.StudentID=”789″;

student.FirstName=”ROM”;

student.LastName=”TED”;

recordSortedList.ins(student);

 
 

recordSortedList.insertDatabase();

 
 

The RecordInsertList class provides array insert capabilities in the kernel. This allows you to insert more than one record into the database at a time, which reduces communication between the application and the database.

RecordInsertList is similar to RecordSortedList, but it has built-in client/server support (it automatically packs data from one tier to another when needed), and it lacks the sort order features available in RecordSortedList.

 
 

The following is an example using RecordInsertList

Student student;

RecordInsertList insertList = new RecordInsertList(student.TableId, True);

int i;

 
 

for ( i = 1; i <= 100; i++ )

{

student.StudentrId = “F”+int2str(i);

insertList.add(student);

}

insertList.insertDatabase();

 
 

Let me know if you guys have any queries. I will appreciate your comments and feedback.

 
2 Comments

Posted by on December 30, 2010 in AX, Basics, Dynamics, Framework, Tables, X++

 

Tags: , , ,

Read XML file in AX

This post will not take your lots of time, just giving you one example to make you understand how can we read XML file. This post will enable you to read a file that is in the same format as the example in the previous post. You can try on your own to create a Job that reads an XML file that uses attributes such as the second example in the

previous post.

 

static
void ReadXml(Args _args)
 

{

XmlDocument xmlDoc;

XmlElement xmlRoot;

XmlElement xmlField;

XmlElement xmlRecord;

XmlNodeList xmlRecordList;

XmlNodeList xmlFieldList;

CarTable carTable;

DictTable dTable = new DictTable(tablenum(CarTable));


int i, j, fieldId;

#CarsXmlTags


// Create an XmlDocument object to hold the


// contents of the xml-file

xmlDoc = new XmlDocument();


// Load the content of the xml-file


// into the XmlDocument object

xmlDoc.load(@”c:\temp\cars.xml”);


// Get the root node

xmlRoot = xmlDoc.getNamedElement(#CarRootNode);


// Get all child nodes (records)

xmlRecordList = xmlRoot.childNodes();


// Loop through the list of records


for (i=0; i<xmlRecordList.length(); i++)

{

carTable.clear();


// Get the current record from the


// record list

xmlRecord = xmlRecordList.item(i);


// Get all child nodes (fields)

xmlFieldList = xmlRecord.childNodes();


// Loop through the list of fields


for (j=0; j<xmlFieldList.length(); j++)

{


// Get the current field from the


// field list

xmlField = xmlFieldList.item(j);


// Set the matching field in the carTable


// to be equal to the inner text


// (the text between the tag and end tag).

carTable.(dTable.fieldName2Id(xmlField.name())) =

xmlField.innerText();

}


// Insert the record into the carTable

carTable.insert();

}

}


 
Leave a comment

Posted by on December 27, 2010 in AX, Basics, Dynamics, Tables, X++, XML

 

Tags: , ,

Creating simple table and data entry form

We will be experiencing the simplest example of creating a simple data entry form. And you will know how easy is to work on AX. I will let you guys know how to create table, what properties need to be set, what methods need to be created, how to define indexes, etc. After creating the table, I will create a simple form with the datasource of the table that we will create. So, lets start by creating a table having data of “Students”. To create a table open the AOT in the development environment of DAX by clicking the AOT button or by short cut key Ctl+D.

Expand the “Data Dictionary” node of the AOT, you will find the “Tables” node. Right click Tables node and click “New table”.


 
 

Now, name the table as “Student”. To add fields to the table, expand the “Student” table, right click and add fields. I am adding these fields.


The properties of fields that must be defined are, “ExtendedDataType” (for FirstName I am defining “Name” as EDT), “Label” & “HelpText” (if different from EDT selected). And The optional properties that’s depends upon requirement are “AllowEdit”, “AllowEditOnCreate”, “Visible” etc. I think the name of the property explains its use, so I am not going into details of defining the use of the property.

 
 

In AX, every table has field RecId which is the Surrogate Key which is being used as a Primary key of the table. If you see the property of the table you will find the Primary Key property and this property is set as “SurrogateKey”. You can define alternate key by creating an Index. To do this, right click the Index node of the “Student” table and add the index. Name the index and set the “AllowDuplicate” property to “No”. Right click this index and add field(s) that you want to make as alternate key. In my case I am adding only the “RegNo” on the index. You can define more indexes as well.

Other properties that need to be set of the tables are “Label”, “TitleField1”, “TitleField2”, “ConfigurationKey”, “TableGroup”. If you want to know the detail of these properties, ask me question, I will answer it.

There is also a “method” node on the table, you can define methods at table level as well. The standard methods that must be there in every tables are “find”, “exists”, “checkExists”. You can find the example of these methods in any of the table present in the DAX. There are also override-able methods of tables, like “validateWrite”, “validateField”, “insert”, “update” and so on. Right click the method node and see override method>.

So, you have created a simple table, now you can use this table as a datasource of a form. To create a form, go to AOT>Forms node and right click to add a new form. Name the new form as “Student”. Expand the form you will find these nodes.


 
 

To add the datasource you can do by dragging the table to the “Data sources “node of the form or by right click and add the table. I am dragging “Student” table on the datasource of the form. Now, the datasource has been added, its time to design the form. Expand the Designs node, and right click the design to add controls, you will have following list of controls.


 
 

In AX 6.0 we have a control “Action pane”, you can use the Action pane as an “Action pane strip” by setting the style property of “Action pane” as “strip”. On that you can add buttons and its looks like the following,


 
 

The controls I am adding in our case are, Action pane strip with command button “New” and “Delete Record”, Two tab pages “Overview” which contains grid and “General” which contains fields.

On the grid you can drag fields from datasource node of the form. Same for other controls, you can drag fields from datasource to any group control or tab page.

After all this you can open the form, and you can add or remove records. The form will look like this.

 
 


 

Thanks guys for reading the post. Any suggestion or question will be highly appreciated.

 
1 Comment

Posted by on April 27, 2010 in AX, Dynamics, Forms, Tables, Uncategorized

 

Tags: , , , ,