Table Methods in D365 FO
Whenever records are changed , inserted or deleted from a table , various default method are executed .
Create A table (CustomerTable ) with some fields :
- CustId
- CustomerName
- Description
- FromDate
- ToDate
- Qty
- Status
- UnitPrice
- TotalAmount
- initvalue() : * If we create a new record from the table browser or a form , the table method initvalue() is executed.
* It is also used to set a default value for fields.
Example:
let's override initvalue for CustomerTable(tablename) and set default value for CustId(fieldname)
public void initvalue()
{
super();
this.CustId = "10";
}
after adding this method , open table CustomerTable through Open table Browser and press Ctrl+N to create new record, field CustId will have default value 10.
2. modifiedField() : value of field is changed.
Example : override modifiedField method for CustomerTable (tablename) and target to set Description to null when CustId is modified
public void modifiedField(fieldId _fieldId)
{
switch(_fieldId)
{
case fieldnum(CustomerTable, CustId):
this.Description = "";
break;
super(_fieldId);
}
}
modifiedField() receives field number of active field (as parameter) , switch statement is used to check which field is active.
if none of checked field are active super() calls is executed instead.
3. validateField(): * used for validation only and will return true and false.
Example :
let's override for CustomerTable to verify the condition that CustomerName must be more than 3 characters.
public boolean validateField (fieldId _fieldIdToCheck)
{
boolean ret;
ret = super(_fieldIdToCheck);
if(ret)
{
switch(_fieldIdToCheck)
{
case fieldNum(CustomerTable, CustomerName):
if(strlen(this.CustomerName)<=3)
{
ret = checkfailed("Customer Name should be more than 3 character");
}
}
return ret;
}
If we try to enter less than 3 character of CustomerName Field , AX will throw warning message.
4. validatewrite() :
when a record is written to db, before the date change is committed in db.
Example :
The ToDate always be larger than StartDate.
public boolean validatewrite()
{
boolean ret;
ret = super;
if (this.ToDate < this.FromDate)
{
ret = ret && checkfailed("ToDate should be greater") ;
}
return ret;
}
5. validateDelete():
executed when record is deleted.
Example:
public boolean validateDelete()
{
boolean ret;
ret = super();
info(this.Description);
return ret;
}
6. find() :
All tables should have atleast one find method that select and return one record from table.
It uses select statement to retreive the data , but it requires parameter to search , if that exist , it will be search otherwise , it skips.
It accepts one more parameter i.e. boolean update which is false by default , if true , record should be select for update.
Example :
static CustomerTable find(CustId _custId , boolean update = false)
{
CustomerTable CustomerTable;
CustomerTable.Selectforupdate(update);
if(CustId)
{
select firstonly CustomerTable
index hint PrimaryIdx
where CustomerTable.CustId == CustId;
}
return CustomerTable;
}
7. Exists()
As with find method , there should also exists method,
same as find method , except that it just returns true if a record with unique index specified by input parameter is found.
Example :
static boolean exist(CustId CustId)
{
return CustId && (select RecId from CustomerTable index hint PrimaryIdx
where CustomerTable.CustId == CustId).RecId ! = 0;
}
Enjoy 😊
No comments:
Post a Comment