Wednesday, July 27, 2016

Using Customer AIF Service in AX 2012

In this post i would be demonstrating how to use out of box Customer Service (CustCustomerService) for the following operations:

  1. Read a Customer
  2. Create a Customer
  3. Update a Customer
  4. Delete a Customer
  5. Find Customers
  6. FindKeys for Customers
CustService is the alias name i used in my code to refer Customer Service;

using CustService = ConsumeAXServices.CustomerServiceRef;

Here is the C# method to Read a Customer:

public  CustService.AxdCustomer  CustomerRead(ref CustService.EntityKey[] entityKeyList, string accNum =  "US-003" , Boolean halt = true)
        {
            CustService.CustomerServiceClient proxy = null;
            CustService.AxdCustomer custDoc = null;
            CustService.CallContext callContext = null;

            try
            {
                custDoc = new CustService.AxdCustomer();                

                CustService.EntityKey[] custKeyList = new CustService.EntityKey[1];
                CustService.EntityKey custKey = new CustService.EntityKey();
                custKey.KeyData = new CustService.KeyField[1];

                CustService.KeyField custAccountNum = new CustService.KeyField();
                custAccountNum.Field = "AccountNum";
                custAccountNum.Value = accNum;

                custKey.KeyData[0] = custAccountNum;
                custKeyList[0] = custKey;

                callContext = new CustService.CallContext() { Company = "usmf" };
                proxy = new CustService.CustomerServiceClient();             

                custDoc = proxy.read(callContext, custKeyList);
                Console.WriteLine("Cust Num - " + custDoc.CustTable[0].AccountNum);
                Console.WriteLine("Cust CreditStatus - " + custDoc.CustTable[0].CreditRating);
                
                if (halt)
                    Console.ReadLine();

                entityKeyList = custKeyList;
                
            }

            catch (Exception ex)
            {
                Console.WriteLine("Error - " + ex.Message);
                proxy.Abort();
                Console.ReadLine();

            }
            finally
            {
                if (proxy != null)
                {
                    proxy.Close();
                    proxy = null;
                }
            }

            return custDoc;
        }


Here is the C# method to Create a Customer:


public void CreateCustomer(string accNum = "SanCus003", string custName = "Santosh Cust 003")
        {
            CustService.CustomerServiceClient proxy = null;
            CustService.AxdCustomer custDoc;
            CustService.CallContext callContext = null;
            CustService.AxdEntity_CustTable custTable = null;
            CustService.AxdEntity_DirParty_DirOrganization dirPartyOrg = null;
            CustService.AxdEntity_OrganizationName orgName = null;           


            try 
            {
                custDoc = new CustService.AxdCustomer();

                custTable = new CustService.AxdEntity_CustTable() { AccountNum = accNum, CustGroup = "20" };
                
                dirPartyOrg = new CustService.AxdEntity_DirParty_DirOrganization() { NumberOfEmployees = 11, NumberOfEmployeesSpecified = true };
                orgName = new CustService.AxdEntity_OrganizationName { Name = custName };
                dirPartyOrg.OrganizationName = new CustService.AxdEntity_OrganizationName[] { orgName };


                custDoc.CustTable = new CustService.AxdEntity_CustTable[] { custTable};
                custTable.DirParty = new CustService.AxdEntity_DirParty_DirPartyTable[] { dirPartyOrg };

                callContext = new CustService.CallContext() { Company = "usmf" };
                proxy = new CustService.CustomerServiceClient();
                var entityKeyList =  proxy.create(callContext, custDoc);

                var keyField = entityKeyList.FirstOrDefault().KeyData.FirstOrDefault();
                Console.WriteLine("Key Field - " + keyField.Field + "Key Value - " + keyField.Value);
                Console.ReadLine();

            }

// removed Catch and finally block to save the space



Here is the C# method to Update a Customer:

public void UpdateCustomer(string accNum = "SanCus002", string CustName = "Santosh Cust 002 - Update3")
        {
            CustService.CustomerServiceClient proxy = null;
            CustService.AxdCustomer custDoc = null;
            CustService.CallContext callContext = null;
            CustService.AxdEntity_CustTable custTable = null;
            CustService.AxdEntity_DirParty_DirOrganization dirPartyOrg = null;
            CustService.AxdEntity_OrganizationName orgName = null;

            CustService.EntityKey[] entityKeyList = null; 


            try
            {
               custDoc = this.CustomerRead(ref entityKeyList, accNum, false);

               custTable = custDoc.CustTable[0];
               custTable.CreditMax = 10000;
               custTable.action = CustService.AxdEnum_AxdEntityAction.update;
               custTable.actionSpecified = true;               
                
               dirPartyOrg = custDoc.CustTable[0].DirParty[0] as CustService.AxdEntity_DirParty_DirOrganization;                               
               dirPartyOrg.NumberOfEmployees = 12;
               dirPartyOrg.NumberOfEmployeesSpecified = true;
               dirPartyOrg.action = CustService.AxdEnum_AxdEntityAction.update;
               dirPartyOrg.actionSpecified = true;                         
               
               orgName =  dirPartyOrg.OrganizationName[0];
               orgName.updateMode = CustService.AxdEnum_ValidTimeStateUpdate.Correction;
               orgName.updateModeSpecified = true;
               orgName.Name = CustName;
               orgName.action = CustService.AxdEnum_AxdEntityAction.update;
               orgName.actionSpecified = true;
                

               callContext = new CustService.CallContext() { Company = "usmf" };
               proxy = new CustService.CustomerServiceClient();
               proxy.update(callContext, entityKeyList, custDoc);
                
               Console.WriteLine("Customer Update Success");
               Console.ReadLine();

            }

// removed Catch and finally block to save the space



Here is the C# method to Delete a Customer (customer shouldn't have any transactions assoicated):

public void DeleteCustomer(string accNum = "US-003")
        {
            CustService.CustomerServiceClient proxy = null;
            CustService.CallContext callContext = null;
            
            try
            {
                CustService.EntityKey[] custKeyList = new CustService.EntityKey[1];
                CustService.EntityKey custKey = new CustService.EntityKey();
                custKey.KeyData = new CustService.KeyField[1];

                CustService.KeyField custAccountNum = new CustService.KeyField();
                custAccountNum.Field = "AccountNum";
                custAccountNum.Value = accNum;

                custKey.KeyData[0] = custAccountNum;
                custKeyList[0] = custKey;

                callContext = new CustService.CallContext() { Company = "usmf" };
                proxy = new CustService.CustomerServiceClient();
                proxy.delete(callContext, custKeyList);

                Console.WriteLine("Customer Delete Success - " + accNum);
                Console.ReadLine();
            }
// removed Catch and finally block to save the space

     


Here is the C# method to Find Customers based on a Criteria

        public void FindCustomers(string custGrp = "10")
        {
            CustService.CustomerServiceClient proxy = null;
            CustService.CallContext callContext = null;
            CustService.QueryCriteria qc = null;
            CustService.AxdCustomer custDoc = null;
            CustService.AxdEntity_CustTable[] custTableList = null;

            try 
            {
                CustService.CriteriaElement criteria = new CustService.CriteriaElement() 
                                                    { DataSourceName = "CustTable", FieldName = "CustGroup", Value1 = custGrp };

                CustService.CriteriaElement[] criteriaList = new CustService.CriteriaElement[] { criteria };
                qc = new CustService.QueryCriteria();
                qc.CriteriaElement = criteriaList;

                callContext = new CustService.CallContext() { Company = "usmf" };
                proxy = new CustService.CustomerServiceClient();
                custDoc = proxy.find(callContext, qc);

                custTableList = custDoc.CustTable;
                foreach (var custTable in custTableList)
                {
                    Console.WriteLine("Customer - {0} , Group - {1}" , custTable.Name, custTable.CustGroup);                    
                }

                Console.ReadLine();                
            }
// removed Catch and finally block to save the space





Here is the C# method to FindKeys of Customers based on a Criteria:

        public void FindKeysCustomer(string custGrp = "10")
        {
            CustService.CustomerServiceClient proxy = null;
            CustService.CallContext callContext = null;
            CustService.QueryCriteria qc = null;
            CustService.EntityKey[] custKeyList = null;            

            try
            {
                CustService.CriteriaElement criteria = new CustService.CriteriaElement() { DataSourceName = "CustTable", FieldName = "CustGroup", Value1 = custGrp };

                CustService.CriteriaElement[] criteriaList = new CustService.CriteriaElement[] { criteria };
                qc = new CustService.QueryCriteria();
                qc.CriteriaElement = criteriaList;

                callContext = new CustService.CallContext() { Company = "usmf" };
                proxy = new CustService.CustomerServiceClient();
                custKeyList  = proxy.findKeys(callContext, qc);

                foreach (var custKey in custKeyList)
                {
                    CustService.KeyField keyField = custKey.KeyData.FirstOrDefault();
                    Console.WriteLine("Key Field - {0} , Key Value - {1}", keyField.Field, keyField.Value);                    
                }

                Console.ReadLine();

            }
// removed Catch and finally block to save the space








No comments:

Post a Comment