Showing posts with label Document Inbound AIF Services. Show all posts
Showing posts with label Document Inbound AIF Services. Show all posts

Monday, 9 March 2015

Document Inbound AIF Service in Microsoft Dynamics AX 2012

Overview

Application Integration Framework (AIF) services are used to communicate with external systems or applications. Microsoft Dynamics AX 2012 has the following types of services:
  1. Document services
  2. Custom services
  3. System services
An AIF service can be Inbound or Outbound. An Inbound service is used to send data to an external system while Outbound services are used to retrieve data.
This tutorial will guide you in creating Document Inbound AIF services for Microsoft Dynamics AX 2012.
Document services are XML documents that initiate transfer of data into or out of Dynamics AX. Any entity in AX can be represented as Documents, such as Customers or Sales Orders.
Document services are used when we have to execute complex CRUD (Create, Read, Update, Delete) operations on an entity.

Pre-requisites

  1. Microsoft Dynamics AX 2012
  2. AIF services must be installed and configured on IIS

Scenario

As part of this tutorial, the service will return the list of Item IDs in Dynamics AX

Steps

  1. Document service uses an AOT query to generate related artifacts. For this tutorial, InventTable query will be used

  2. Open Microsoft Dynamics AX Development workspace. Go to Tools à Application Integration FrameworkàCreate document service

  3. This will open the AIF Document Service Wizard. Click Next to proceed

  4. In this step, specify the Document parameters. Select the Query for which service has to be created. TheDocument name will default to Query name. Modify it as required and give a suitable Document label as shown below. Click Next

  5. Now specify the Code generation parameters. The wizard will use this to create the respective classes. Check the required Service operations you want to be automatically created by the wizard. Click Next
    Note: To allow Update/Delete/Create Service operations, the Update property must be set to Yes

  6. In the Generate code window, review the artifacts that will be generated. Click Generate to proceed

  7. The wizard will now generate all the artifacts. In the end, a Completed screen will display the list of artifacts it created. Click Finish to exit the wizard

  8. The next step is to create a service group and deploy the service to an Inbound Port

  9. Go to Service Groups, right click on it, and select New Service Group

  10. Name it InventServiceDemoGroup

  11. Set AutoDeploy to Yes (so the service will start automatically when AOS is started) and set the Description to Item Id service

  12. Right click the newly created service group and select New Service Node Reference

  13. In the newly created service node, set the Service property to InventTableDemoService. The Name property will automatically default to the Service name

  14. Now right click the service group and select Deploy Service Group

  15. A success message will appear if the service group is successfully deployed

  16. To verify, go to System administration à Setup à Services and Application Integration Framework à Inbound ports

  17. The Service group name InventServiceDemoGroup will appear here as Port name with a green tick mark. This shows that the service group is deployed and active. If a red cross mark is present, select Activate from the action pane to activate the port

  18. The WSDL URI is the URL of the service which can be used by external systems to access the service

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 ViewCode


  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 variable
    NumberSeqModuleCustomer 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