Showing posts with label Number Sequence Generation – AX 2012. Show all posts
Showing posts with label Number Sequence Generation – AX 2012. Show all posts

Tuesday, 26 July 2016

Create Number Sequence on Sales Module, custInvoiceJour

Create Number Sequence on Sales Module, custInvoiceJour

My case is to create number sequence on Sales Module,
so i had to modify some code on there..
on table SalesParameters.
static client server NumberSequenceReference AI_numRefPackingListId()
{
    return NumberSeqReference::findReference(extendedTypeNum(AI_PackingListId));
}
add this code to class NumSeqModuleSalesOrder\LoadModule
//AIFD_ seq packingListId
datatype.parmDatatypeId(extendedTypeNum(AI_packingListId));
datatype.parmReferenceHelp(literalStr("Packing List Id setiap create Invoice"));
datatype.parmReferenceLabel(literalStr("Packing List Id"));
datatype.parmWizardIsManual(NoYes::No);
datatype.parmWizardIsChangeDownAllowed(NoYes::No);
datatype.parmWizardIsChangeUpAllowed(NoYes::No);
datatype.parmWizardHighest(999999);
datatype.parmSortField(66);
datatype.addParameterType(NumberSeqParameterType::DataArea, true, false);
this.create(datatype);
//END
and modify the code on job
static void AIFD_JobSequence(Args _args)
{
   NumberSeqModuleSalesOrder NumberSeqModuleSalesOrderLoc = new NumberSeqModuleSalesOrder();
   NumberSeqModuleSalesOrderLoc.load();
}
then run wizard number sequence and run this job
static void AIFD_TestRunSeqNum(Args _args)
{
   NumberSeq numberSeq;
   AI_PackingListId num;
   ;
   numberSeq = NumberSeq::newGetNum(SalesParameters::AI_numRefPackingListId());
   num = numberSeq.num();
   info(num);
}
done.. voila, i need to add my newly added number sequence to my customize CustInvoiceJour,
so when sales Invoice is created, my newly added number sequence is generated and automatically save in table CustInvoiceJour..
how i did this :
1. add new field on custInvoiceJour, i named it AI_PackingListId and set the extended data type to my new data type.
2. modify some code on class SalesInvoiceJournalCreateBase\initJournalHeader
NumberSeq numberSeqLoc;
AI_PackingListId numPackingListId;

numberSeqLoc = NumberSeq::newGetNum(SalesParameters::AI_numRefPackingListId());
numPackingListId = numberSeqLoc.num();

//add this code below custInvoiceJour.initFromSalesParmTable(salesParmTable);
custInvoiceJour.AI_PackingListId = numPackingListId;
//END
3. Last, Generate Incremental CIL , dont forget that:)
Voila.. done !!
happy Daxing !!

Wednesday, 21 May 2014

Number Sequence Generation – AX 2012


Number Sequence Generation – AX 2012

How to Create/Add a New Number Sequence in AX 2012.


Step1:  Create a new Extended Data Type. As shown in the below screen shot


Step2:  Add the Created EDT in the table.
Create a new table and add the create EDT from the step1 to the table


Step 3: Add the numRef<name> method in which module this belongs to.
For example, let say this belongs to Account Receivable Module, so add it the CustParameters table.
Following is the method needs to be added.


Step 4: Need to add the code in the class “NumberSeqModule<Module Name> “method “loadModule”.
So in our case the class is “NumberSeqModuleCustomer” à load Module ().

Step 5:  Create a new form with the data source in the step 2, as shown in the below.

As shown in the above screen shot the following methods needs to be included in the form.
Below is the code that needs to added ..

Forms\ExampleNumSeq\Methods\numberSeqFormHandler()
NumberSeqFormHandler numberSeqFormHandler()
{
    if (!numberSeqFormHandler)
    {
        numberSeqFormHandler = NumberSeqFormHandler::newForm(CustParameters::numRefNumSeqId().NumberSequenceId,
                                                             element,
                                                             ExampleNumSequence_DS,
                                                             fieldNum(ExampleNumSequence, NumSeqId)
                                                            );
    }
    return numberSeqFormHandler;
}

Forms\ExampleNumSeq\Data Sources\ExampleNumSequence\Methods\create()
public void create(boolean _append = false)
{
    element.numberSeqFormHandler().formMethodDataSourceCreatePre();
   
    super(_append);
   
    element.numberSeqFormHandler().formMethodDataSourceCreate();
}
  
Forms\ExampleNumSeq\Data Sources\ExampleNumSequence\Methods\write()
public void write()
{
    super();
    element.numberSeqFormHandler().formMethodDataSourceWrite();
}

Forms\ExampleNumSeq\Data Sources\ExampleNumSequence\Methods\validateWrite()
public boolean validateWrite()
{
    boolean ret;

    ret = super();
    ret = element.numberSeqFormHandler().formMethodDataSourceValidateWrite(ret) && ret;

    return ret;
}

Forms\ExampleNumSeq\Data Sources\ExampleNumSequence\Methods\delete
public void delete()
{
    element.numberSeqFormHandler().formMethodDataSourceDelete();
    super();
}

Forms\ExampleNumSeq\Data Sources\ExampleNumSequence\Methods\linkActive
public void linkActive()
{
    element.numberSeqFormHandler().formMethodDataSourceLinkActive();
    super();
}
  
Step 6:
Go to Account Receivable à setup àAccounts Receivable parameters, open the form and go to number sequence, over there check Number Sequence Id is listing or not.


In AX 2009, after doing with the above 4 steps it list in the parameters of the accounts receivable.
But in AX 2012 a job needs to run to show in the parameters of the accounts receivable.
Below is the job needs to run…


After running the job, go to Account Receivable à setup àAccounts Receivable parameters form, it show the newly created one as below.



Step7: Once In the parameters form, it is shown need to assign the number sequence code. To assign the number sequence code need to generate the code for it by wizard or it can be created manually.
Go to Organization Administration à Number Sequence àNumber Sequence

A wizard will be opened, click on next button over there, it show the number sequence code for the one which create in the above, below is the screen shot


Click next and Finish button to complete wizard.

Open the forms which created in the step 5 and create the new record in the form it will generate the new number sequence, below is the screen shot.



static void pnumseqid(Args _args)
{
    NumberSeqModuleCustomer  NumberSeqModuleCustomer = new NumberSeqModuleCustomer();
    ;
    NumberSeqModuleCustomer.loadModule();
    print("Load Successfully");
    pause;
}





static void pknum(Args _args)
{
    NumberSeq  numberSeq;
    S3Numberseq num;
    ;
    numberSeq = NumberSeq::newGetNum(CustParameters::numRefNumSeqId());
    num = numberSeq.num();
    info(num);
}

Creating Number Sequence for a New Module

Say you want to create a new module called Pre Purchase, and for simplicity, we will create just 1 new Number sequence.
Here’s what to do:-
1. //Creating Base Enum
    Create a Base Enum and then Right click and Create a New Element which will be used as Reference for the New Module yet to create
   // Create a New Menu Item
Menu Items > Display > Create  a form and then drag and drop it here
  //Adding a Menu
Menus> NewMenu>Drag and Drop Form MenuItem here
   //Adding Menu to Main Menu
Menus>MainMenu> Right click and Select Menu Reference Drag and Drop the Menu in this Main Menu

2. Create a new EDT say PurchaseRequisitionId which will be used in the module

3. Create new class NumberSeqReference_PrePurchase that extends NumberSeqReference
Add 3 methods to that class
public class NumberSeqReference_PrePurchase extends NumberSeqReference
{
}
———————————————————————
protected void loadModule()
{
NumberSequenceReference numRef;
;
/* Setup PurchaseRequisitionId */
numRef.dataTypeId = typeid2extendedtypeid (typeid (PwC_PurchaseRequisitionId));//Your EDT Here
numRef.referenceHelp = literalStr(“Unique key for Purchase Requisition identification. The key is used when creating new Purchase Requisitions.”); // Use Labels here
numRef.wizardContinuous = true;
numRef.wizardManual = NoYes::No;
numRef.wizardAllowChangeDown = NoYes::No;
numRef.wizardAllowChangeUp = NoYes::No;
numRef.sortField = 1;
this.create(numRef);
}
———————————————————————
static NumberSeqModule numberSeqModule()
{
return NumberSeqModule::PrePurchase;
}
4. Modify the NumberSeqReference Class for the following methods
Classes > NumberSeqReference >moduleList
Add the following code
// PrePurchase Begin
moduleList += NumberSeqReference_PrePurchase::numberSeqModule();
// PrePurchase End
———————————————————————
Classes> NumberSeqReference >construct
Add the following code
// Pre Purchase addition begin
case (NumberSeqReference_PrePurchase::numberSeqModule()):
return new NumberSeqReference_PrePurchase(_module);
// Pre Purchase addition end
———————————————————————

5. Create a parameters table and form

You should create a parameters table and form for your new module. The easiest way is generally to duplicate an existing Parameters table and modify it as required.
The important elements on the new parameter table are the numberSeqModule() and numberSeqReference() methods.
client server static NumberSeqModule numberSeqModule()
{
//Your Class name Here
return NumberSeqReference_ PrePurchase::numberSeqModule();
}
---------------------------------------------------------------------
client server static NumberSeqReference numberSeqReference()
{
//Your Parameters Table name here
return NumberSeqReference::construct(NSParameters::numberSeqModule());
}
 //Optional
In the parameters form, you must ensure that the code in the numberSeqPreInit(), numberSeqPostInit() and NumberSequenceType.executeQuery() methods correctly reflect your new number sequence elements.
 //Optional ends
 
6. Calling a number sequence   Add this code into this TableParameters
//where numRefSomeMethodID is your new method name
static client server NumberSequenceReference numRefSomeMethodID()
{
return NumberSeqReference::findReference(typeId2ExtendedTypeId(typeid(Your EDT)));
}
7. Add this methods to the form where you want Number sequences 
//form ClassDeclaration
public class FormRun extends ObjectRun
{
NumberSeqFormHandler numberSeqFormHandler;
}
//Method Formhandler
NumberSeqFormHandler numberSeqFormHandler()
{
if(!numberSeqFormHandler)
{
numberSeqFormHandler=
NumberSeqFormHandler::newForm(YourTableParameters::numRefSomeMethodID().NumberSequence,
element,
YourTable_DS, //Your Table Datasource
fieldnum(YourTable,YourField));
}
return numberSeqFormHandler;
}
8. Add Create, Write and Delete methods to the Data source in the Form:

void create(boolean append = false)
{
    ;
    element.numberSeqFormHandler().formMethodDataSourceCreatePre();
    super(append);
    element.numberSeqFormHandler().formMethodDataSourceCreate();
}
Write:
void write()
{
    ttsbegin;
    element.numberSeqFormHandler().formMethodDataSourceWrite();
    super();
    ttscommit;
}
Delete:
void delete()
{
    ttsbegin;
    element.numberSeqFormHandler().formMethodDataSourceDelete();
    super();
    ttscommit;
}

9. Create a new Number Sequence in BASIC module and Run Wizard 
Basic -> Setup -> NumberSequences -> Number Sequences Create New Number Sequence code and assign the format. Click "Wizard" Button

Generate Next Number Sequence by x++ code in axpta

// This is one way
static void Nextnumseq(Args _args)
{
         NumberSeq num;
        kanhaNum _kanhaNum; //Table Buffer
        ;

        ttsbegin;
           num = NumberSeq::newGetNum(HrmParameters::numRefJournalNum()); // Parameters Table
          _kanhaNum.NextNumseq = num.num(); // Next NumberSeq generated
          _kanhaNum.insert();
          num.used(); // Mark the Number as Used
      ttscommit;
}
//The other Way is

static void testnumseq(Args _args)
{
     kanhaNum _kanhaNum;
     ExtendedTypeId id = TypeID2ExtendedTypeId(TypeId(kanhaNumber));//EDT NAME

     NumberSeq num = NumberSeq::newGetNum(NumberSequenceReference::find(id));
     ;
     //_kanhaNum.NextNumseq = num.num();//NEXT NUM SEQ
     num.used(); // mark the number as used
     info(num.num()); // NEXT NUM SEQ
}

Monday, 19 August 2013

Creating Custom Number Sequences in Microsoft Dynamics AX 2012

Overview

Number sequences are unique identifiers that can be associated with a master record so that they can be individually distinguished. They can be either formatted as alpha-numeric strings or simply as numbers.
Microsoft Dynamics AX 2012 provides an easy to implement framework to generate custom number sequences.

Scenario

As part of this tutorial, a custom number sequence will be generated for the Customer Groups setup form (Accounts receivable à Setup à Customers à Customer groups)

Steps

  1. First create a new Extended Data Type (EDT). Open AOT àData Dictionary à Extended Data Types
  2. Right Click on Extended Data Types and create a new EDT NumSeqDemoCustGroupNum of type String
  3. Set the properties as shown below

  4. Now go to AOT à Classes and open the NumberSeqModuleCustomer class by right clicking it and selecting View Code

  5. In the loadModule method, add the following code after the last line of code
  6. //customer group number
    //define the EDT
    datatype.parmDatatypeId(extendedTypeNum(NumSeqDemoCustGroupNum));
    //define its default propertiesdatatype.parmReferenceHelp(literalStr(“Unique number for customer group”));datatype.parmWizardIsContinuous(true);datatype.parmWizardIsManual(NoYes::No);datatype.parmWizardIsChangeDownAllowed(NoYes::No);datatype.parmWizardIsChangeUpAllowed(NoYes::No);datatype.parmWizardHighest(999999);datatype.parmSortField(27);
    //define its scope
    datatype.addParameterType(NumberSeqParameterType::DataArea, truefalse);this.create(datatype);

  7. Now, go to AOT à Jobs and create a new job loadNumSeqCustDemo
  8. Write the following code in the job and then run it
    static void loadNumSeqCustDemo(Args _args){
    //define the class variableNumberSeqModuleCustomer seqMod = new NumberSeqModuleCustomer();
    //load the number sequences that were not generatedseqMod.load();}

  9. Now, go to Organization administration à Common à Number sequences à Number sequences
  10. Click on Generate button in the New button group
  11. In the Setup number sequences wizard, Press Next
  12. In the Setup set different values for the number sequence like the format, highest value and lowest value
  13. Click Next
  14. In the last step, Click Finish to generate the number sequences
  15. The number sequence is generated and can be used on the Customer Groups form
  16. Open AOT à Data Dictionary à Tables à CustGroup
  17. Add a new String field and set the properties as follows
  18. Add the newly added field in the Overview field group
  19. Now go to Forms àCustGroup and restore the form. It will add the newly added field in the grid
  20. Write the following code on the Class declaration node
     NumberSeqFormHandler numberSeqFormHandler;

  21. Create a new method on the form and write the following code
    NumberSeqFormHandler numberSeqFormHandler(){
    if (!numberSeqFormHandler){
    //create a reference of number sequence form handler class specifying the         EDT, Data source name and the field of the table
    numberSeqFormHandler =NumberSeqFormHandler::newForm(NumberSeqReference::findReference(extendedtypenum(NumSeqDemoCustGroupNum)).NumberSequenceId, element,CustGroup_DS,fieldnum(CustGroup,CustGroupNumber));}return numberSeqFormHandler;
    }

  22. Override the close method of the form and write the following code
    public void close(){
    if (numberSeqFormHandler)
    {numberSeqFormHandler.formMethodClose();}
    super();}

  23. Override the create method on the CustGroup data source and add the following code
    public void create(boolean _append = false){
    element.numberSeqFormHandler().formMethodDataSourceCreatePre();
    super(_append);
    element.numberSeqFormHandler().formMethodDataSourceCreate(true);}

  24. Override the write method on the CustGroup data source and add the following code
    public void write(){
    super();
    element.numberSeqFormHandler().formMethodDataSourceWrite();}

  25. Override the validateWrite method on the CustGroup data source and add the following code
    public boolean validateWrite(){
    boolean ret;
    ret = super();
    ret = element.numberSeqFormHandler().formMethodDataSourceValidateWrite(ret) && ret;
    return ret;}

  26. Override the delete method on the CustGroup data source and add the following code
    public
    void delete()
    {
    element.numberSeqFormHandler().formMethodDataSourceDelete();
    super();}

  27. Override the linkActive method on the CustGroup data source and add the following code
    public
    void linkActive()
    {
    element.numberSeqFormHandler().formMethodDataSourceLinkActive();
    super();}

  28. Now go to Accounts receivable à Setup à Customers à Customer groups
  29. Create a new record. The number sequence is generated according to the format defined as shown below

Labels

#veryusefulcode (1) AIF (8) AOT Maps (1) Args (1) Ax 2009 Reports (2) AX 2012 navigation (1) Ax 2012 Interview Questions (1) AX 7 (2) AX Architecture (1) Ax Backup (1) AX Workflow (2) AX2012 (1) AX2012 R2 (1) Ax2012R3 (1) AX2012R3 Dynamics Connector Step by Step Installation and Configuration (1) AX2012R3 EP Step by Step Installation and Configuration EP R3 (1) AX2012R3 HelpServer Step by Step Installation and Configuration (1) AX2012R3 Rapid Start Connector Step by Step Installation and Configuration (1) AX2012R3 Report Server and Analysis Server Step by Step Installation and Configuration (1) AX7 (1) Best practices (1) Blocking user to enter (1) Collection Classes (1) Container (1) D365FO (3) Data Migration Frame Work ax 2012R3 (1) Deleting duplicate Record from Table – Ax2012 (1) Delivery due date notification workflow in Ax 2012 (1) Development Steps EP (1) Dimensions (1) DIXF (1) DMF in Ax 2012 R3 (1) Dynamics Ax 2012 Interview Questions (1) DYNAMICS AX 2012 INTERVIEW QUESTIONS PART 2 (1) DYNAMICS AX 7 (1) EDT relation Migration Tool (1) EP AX 2012 (1) Ep Lookup (1) Error (1) Event Handler (1) F5 (1) File Handling (4) Filter on AX2012 Listpage (1) filtering (2) financial dimensions in AX 2012 (3) form (1) images (1) Installation and Configration (4) Installation and Configuration (11) Installation of Management Reporter 2012 for AX 2012 (1) Interaction class in ax 2012 (1) Interview Question (1) Interview Questions For Ax 2012 (1) Invent DIm (1) Jobs (2) license (1) List page and form menuitem enable code (1) Methods (1) microsoft Dynamics AX 365FO (1) Number Sequence Generation – AX 2012 (5) Number Sequence2012 (1) OLTP-OLAP (1) Passing Args (1) Passing form caller and menu item caller in ax 2012 (1) Passing Multiple Records Args (1) Posting in Ax 2012 (1) POSTING PURCHASE ORDER (1) Query (1) Query Filter Form (2) Query Ranges in X++ (1) Question and Answer (1) Report (1) Reports Controller class (1) RLS in ax 2009 (1) SALES ORDER IMPORT/EXPORT FRAMEWORK BY DMF (1) Security (1) security roles (1) Security Sysqueryrangeutil (1) Sharepoint 2016 (1) SQL SERVER (1) SSRS (2) SSRS Reports Controller class (2) Table collections & Virtual company (1) Time (1) TIPS AND TRICKS (1) Web service AIF (3) Web Services on IIS (AIF) Step by Step Installation and Configuration (1) workflow ax2012 (1) Workflow installation (1) Workflow Method (3) X++ (1)