Showing posts with label edt. Show all posts
Showing posts with label edt. Show all posts

Friday, June 16, 2017

Extended Data Types (EDTs) : EDT IN AX: MICROSOFT DYNAMICS 365:DYNAMICS AX 2012

Extended Data Types (EDTs) 

Extended data types (EDTs) are user-defined types, based on the primitive data types boolean, integer, real, string, and date, and the composite type container. You can also base EDTs on other EDTs.
This feature is not implemented as a language construct. EDTs are defined in the Application Object Tree (AOT).
An EDT is a primitive data type or container with a supplementary name and some additional properties. For example, you could create a new EDT called Name and base it on a string. Thereafter you can use the new EDT in variable and field declarations in the development environment.

Benefits of EDTs

The benefits of EDTs are as follows:
·         Code is easier to read because variables have a meaningful data type. For example, Name instead of string.
·         The properties you set for an EDT are used by all instances of that type, which reduces work and promotes consistency. For example, account numbers (AccountNum data type) have the same properties throughout the system.
·         You can create hierarchies of EDTs, inheriting the properties that are appropriate from the parent and changing the other properties. For example, the ItemCode data type is used as the basis for the MarkupItemCode and PriceDiscItemCode data types.

Declaration of EDT Variables

In the AOT, the Data Dictionary > Extended Data Types node is used to create EDTs. The range of an EDT is identical to that of the base type it is based on. When you declare a variable in X++, use the syntax shown in the following table.
Extended declaration
=
Extendedtype Variable { , Variable } ;
Variable
=
Identifier [ option ]
Option
=
arrayoptions | initialization
where Extendedtype is the name of the extended data type in the AOT.
X++
// A UserGroupID (integer) variable is declared and initialized to 1.
UserGroupID groupID = 1;
 
// An Amount (real) variable is declared.
Amount currency;

Automatic Conversion


EDTs are standard data types, but with a specific name and additional properties. EDTs undergo the same value and type conversions as do the standard data types they are based on.

Thursday, November 10, 2016

DIALOG AND GET VALUE FROM DIALOG BOX USING AXAPTA X++ DYNAMICS AX

DIALOG AND GET VALUE FROM DIALOG BOX USING AXAPTA
Below is a Code how  to add dialog and get value from dialog box in dynamics Axapta. This is very simple you just need to create one method which is overridden method is dialog. Dialog method used to initialized dialog box for your form or report but without using get from dialog method you can not get value of dialog control.

So both method is important dialog and getfromdialog.

 public Object dialog(Object _dialog)
 {
 DialogRunbase dialog = _dialog;
 DialogGroup dateGroup;
 ;
 dateGroup = dialog.addGroup("");
 dateGroup.frameType(1);
 dateGroup.columns(2);
 fromdate = LedgerPeriod::findOpeningDate(systemdateget());
 toDate= systemdateget();
 dialog.addGroup("@SYS4083",dateGroup);
 dialogFromDate = dialog.addFieldValue(typeid(FromDate),fromDate,'',"@SYS67");
 dialog.addGroup("@SYS8828",dateGroup) ;
 dialogToDate = dialog.addFieldValue(typeid(ToDate),toDate,'',"@SYS67");
 dialog.addGroup("@SYS24500");
 dialogPageChange = dialog.addFieldValue(typeid(NoYes),pageChange,"@SYS15349","@SYS24755");
 dialogResetPage = dialog.addFieldValue(typeid(NoYes),resetPage,"@SYS9358","@SYS24756");
 dialog.addGroup("@SYS12608");
 dialogDetailSummary = dialog.addFieldValue(typeid(DetailSummary),detailSummary,'',"@SYS24757");
 dialogNoneBeginTransEnd = dialog.addFieldValue(typeid(NoneBeginTransEnd),noneBeginTransEnd,
 "@SYS1046","@SYS69638");
 dialogIncludeOpening = dialog.addFieldValue(typeid(NoYes),includeOpening,"@SYS23250","@SYS54008");
 dialogIncludeClosing = dialog.addFieldValue(typeid(NoYes),includeClosing,"@SYS14844","@SYS82258");
 dialog.addGroup("Opening Balance Account");
 dialogOpeningBalance = dialog.addField(typeId(LedgerAccount)
 ,"Opening Balance Account");
 return dialog;
 }
 public boolean getFromDialog()
 {
 ;
 fromDate = dialogFromDate.value();
 toDate = dialogToDate.value();
 detailSummary = dialogDetailSummary.value();
 pageChange = dialogPageChange.value();
 resetPage = dialogResetPage.value();
 noneBeginTransEnd = dialogNoneBeginTransEnd.value();
 includeOpening = dialogIncludeOpening.value();
 includeClosing = dialogIncludeClosing.value();
 OpLedgerAccount = dialogOpeningBalance.value();
 return true;
 }  

DYNAMICS AX CREATE CUSTOM NUMBER SEQUENCE X++ CODE SAMPLE

|| DYNAMICS AX NUMBER SEQUENCE ||

Suppose we want create number sequence for Test field on form in General  ledger module
Consideration: EDT-Test, Table-NumSeqTable and Form- NumSeqTable

Step1. Create new EDT with name Test
Step 2. Modify load module() method on  NumberSeqModuleLedger class

{
     datatype.parmDatatypeId(extendedTypeNum(Test));
     datatype.parmReferenceHelp(literalStr("Test"));
     datatype.parmWizardIsManual(NoYes::No);
     datatype.parmWizardIsChangeDownAllowed(NoYes::No);
     datatype.parmWizardIsChangeUpAllowed(NoYes::No);
     datatype.parmWizardHighest(999);
     datatype.parmSortField(30);
     datatype.addParameterType(NumberSeqParameterType::DataArea, truefalse);
     this.create(datatype);
}

Step 3.Create a method on LedgerParameters Table

     client server static NumberSequenceReference numRefTest()
{
     return NumberSeqReference::findReference(extendedTypeNum(Test));
}

Step 4.Write and run following job

static void NumberSeqLoadAll(Args _args)
{
         NumberSeqApplicationModule::loadAll();
}


Step 5.Then run the wizard

Organization Administration -> CommonForms -> Numbersequences->Numbersequences-> Generate -> run the wizard.

Step 6.Now we have to check the number sequence  is correctly working  for that write a job:

static void NumSeq(Args _args)
{
    NumberSeq  numberSeq;
    Test num;
    ;
    numberSeq = NumberSeq::newGetNum(ProjParameters:: numRefTest ());
    num = numberSeq.num();
    info(num);
}


Step 7.Now we want that Number Sequence in form level(Test Table):


 Write below code in class declaration  
public class FormRun extends ObjectRun
{
    NumberSeqFormHandler numberSeqFormHandler;

}

 Step 8.Write the NumberSeqFormHandler() in form methods node.

NumberSeqFormHandler numberSeqFormHandler()
{
    if (!numberSeqFormHandler)
    {
       numberSeqFormHandler = NumberSeqFormHandler::newForm(LedgerParameters:: numRefTest ().NumberSequenceId,
                                                             element,
                                                             NumSeqTable_DS,
                                                             fieldNum(NumSeqTable, Test)
                                                            );
    }
    return numberSeqFormHandler;
}


Step 9.Write the  Create(),Delete(),Write() , Validate Write(),Link Active() on the Data source methods node.
 Create() Method
void create(boolean append = false,
            boolean extern = false
{
    element.numberSeqFormHandler().formMethodDataSourceCreatePre();

    super(append);

    if (!extern)
    {
        element.numberSeqFormHandler().formMethodDataSourceCreate(true);
    }
}

Delete() Method

public void delete()
{
    element.numberSeqFormHandler().formMethodDataSourceDelete();
    super();
}

Write()Method

public void write()
{
    super();
    element.numberSeqFormHandler().formMethodDataSourceWrite();
}



Validate Write() Method

public boolean validateWrite()
{
    boolean         ret;
    ret = super();
    ret = element.numberSeqFormHandler().formMethodDataSourceValidateWrite(ret) && ret;
    if (ret)
    {
        NumSeqTable.validateWrite();
    }
    return ret;
}

Link Active() Method

public void linkActive()
{
    ;
    element.numberSeqFormHandler().formMethodDataSourceLinkActive();
    super();
}
Step 10.Finally add Close() method on form 
void close()
{
    if (numberSeqFormHandler)
    {
        numberSeqFormHandler.formMethodClose();
    }
    super();
}


Related Posts Plugin for WordPress, Blogger...