Ejemplo n.º 1
0
        public static void Run(ILogger logger)
        {
            OnlineClient client = Bootstrap.Client(logger);

            logger.LogInformation("Executing create test object function to API");

            TestObjectCreate create = new TestObjectCreate()
            {
                Name = "hello world",
            };

            Task <OnlineResponse> createTask = client.Execute(create);

            createTask.Wait();
            OnlineResponse createResponse = createTask.Result;
            Result         createResult   = createResponse.Results[0];

            try
            {
                int recordNo = int.Parse(createResult.Data[0].Element("id").Value);

                Console.WriteLine("Created record ID " + recordNo.ToString());
            }
            catch (NullReferenceException e)
            {
                logger.LogDebug("No response in Data. {0}", e);
            }
            finally
            {
                LogManager.Flush();
            }
        }
Ejemplo n.º 2
0
        public async Task ExecuteTest()
        {
            string xml = @"<?xml version=""1.0"" encoding=""utf-8""?>
<response>
      <control>
            <status>success</status>
            <senderid>testsenderid</senderid>
            <controlid>requestUnitTest</controlid>
            <uniqueid>false</uniqueid>
            <dtdversion>3.0</dtdversion>
      </control>
      <operation>
            <authentication>
                  <status>success</status>
                  <userid>testuser</userid>
                  <companyid>testcompany</companyid>
                  <sessiontimestamp>2015-12-06T15:57:08-08:00</sessiontimestamp>
            </authentication>
            <result>
                  <status>success</status>
                  <function>getAPISession</function>
                  <controlid>func1UnitTest</controlid>
                  <data>
                        <api>
                              <sessionid>unittest..</sessionid>
                              <endpoint>https://unittest.intacct.com/ia/xml/xmlgw.phtml</endpoint>
                        </api>
                  </data>
            </result>
      </operation>
</response>";

            HttpResponseMessage mockResponse1 = new HttpResponseMessage()
            {
                StatusCode = System.Net.HttpStatusCode.OK,
                Content    = new StringContent(xml)
            };

            List <HttpResponseMessage> mockResponses = new List <HttpResponseMessage>
            {
                mockResponse1,
            };

            MockHandler mockHandler = new MockHandler(mockResponses);

            ClientConfig clientConfig = new ClientConfig
            {
                SenderId       = "testsender",
                SenderPassword = "******",
                SessionId      = "testsession..",
                MockHandler    = mockHandler,
            };

            OnlineClient client = new OnlineClient(clientConfig);

            OnlineResponse response = await client.Execute(new ApiSessionCreate("func1UnitTest"));

            Assert.Equal("requestUnitTest", response.Control.ControlId);
        }
        public static bool InvoiceExists(string invoiceNum, out System.Xml.Linq.XElement invoice)
        {
            invoice = null;             //Set this justincase the function explodes
            try
            {
                var query = new ReadByQuery
                {
                    ObjectName = "ARINVOICE",
                    Fields     = { "*" },
                    Query      = new AndCondition {
                        Conditions = { new EqualToString {
                                           Field = "RECORDID", Value = invoiceNum
                                       }, new EqualToString{
                                           Field = "MODULEKEY", Value = "8.SO"
                                       } }
                    }
                    //Query = new EqualToString { Field = "RECORDID", Value = invoiceNum }
                };

                var task = Client.Execute(query);
                task.Wait();
                var response = task.Result;

                if (response.Results.Count == 0 || response.Results[0].Data.Count == 0)
                {
                    ErrorLogger.LogError(invoiceNum, $"No Invoice Exists with Invoice#: {invoiceNum}");
                    return(false);
                }

                invoice = response.Results[0]?.Data[0];
            }
            catch (Exception e)
            {
                ErrorLogger.LogError(invoiceNum, $"Getting Invoice# {invoiceNum} Errored: {e.Message}");
                return(false);
            }

            return(true);
        }
Ejemplo n.º 4
0
        public static void Run(ILogger logger)
        {
            OnlineClient client = Bootstrap.Client(logger);

            Read read = new Read()
            {
                ObjectName = "CUSTOMER",
                Fields     =
                {
                    "RECORDNO",
                    "CUSTOMERID",
                    "NAME",
                },
                Keys =
                {
                    33 // Replace with the record number of a customer in your company
                }
            };

            Task <OnlineResponse> task = client.Execute(read);

            task.Wait();

            OnlineResponse response = task.Result;
            Result         result   = response.Results[0];

            dynamic json = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(result.Data));

            try
            {
                string jsonString = json.ToString();
                logger.LogDebug(
                    "Read successful [ Company ID={0}, User ID={1}, Request control ID={2}, Function control ID={3}, Total count={4}, Data={5}]",
                    response.Authentication.CompanyId,
                    response.Authentication.UserId,
                    response.Control.ControlId,
                    result.ControlId,
                    result.TotalCount,
                    jsonString
                    );
                Console.WriteLine("Success! Found these customers: " + json);
            }
            catch (NullReferenceException e)
            {
                logger.LogDebug("No response in Data. {0}", e);
            }
            finally
            {
                LogManager.Flush();
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Sends a Hours Journal to the Intacct STATISTIC System
        /// </summary>
        /// <param name="client"></param>
        /// <param name="Org"></param>
        /// <param name="lines"></param>
        /// <param name="PostingDate"></param>
        /// <param name="ReferenceNumber"></param>
        /// <param name="JournalSymbol"></param>
        /// <param name="Description"></param>
        /// <param name="HistoryComment"></param>
        /// <param name="AsDraft"></param>
        /// <returns></returns>
        private async Task SendStatHoursJournalCmd(OnlineClient client, int Org, IEnumerable <IntacctStatHours> lines, DateTime PostingDate, string ReferenceNumber, string JournalSymbol, string Description, string HistoryComment, bool AsDraft)
        {
            StatisticalJournalEntryCreate create = new StatisticalJournalEntryCreate();

            create.JournalSymbol   = JournalSymbol;
            create.ReferenceNumber = ReferenceNumber;
            create.PostingDate     = PostingDate;
            create.Description     = Description;
            create.HistoryComment  = HistoryComment;
            if (AsDraft)
            {
                create.CustomFields.Add("STATE", "Draft");
            }
            foreach (var item in lines)
            {
                StatisticalJournalEntryLineCreate line = new StatisticalJournalEntryLineCreate
                {
                    StatAccountNumber = item.Account,
                    Amount            = decimal.Parse(item.Hours.ToString("F2")),
                    Memo = $"Part of Practice Engine Batch #{item.BatchID}"
                };
                if (!String.IsNullOrWhiteSpace(item.EmployeeID))
                {
                    line.EmployeeId = item.EmployeeID;
                }
                if (!String.IsNullOrWhiteSpace(item.ProjectID))
                {
                    line.ProjectId = item.ProjectID;
                }
                if (!String.IsNullOrWhiteSpace(item.IntacctCustomerID))
                {
                    line.CustomerId = item.IntacctCustomerID;
                }
                if (!String.IsNullOrWhiteSpace(item.IntacctDepartment))
                {
                    line.DepartmentId = item.IntacctDepartment;
                }
                if (!String.IsNullOrWhiteSpace(item.IntacctLocation))
                {
                    line.LocationId = item.IntacctLocation;
                }
                create.Lines.Add(line);
            }
            OnlineResponse onlineResponse = await client.Execute(create);

            foreach (var result in onlineResponse.Results)
            {
                result.EnsureStatusSuccess();
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Sends a Journal to the Intacct GL System
        /// </summary>
        /// <param name="client"></param>
        /// <param name="Org"></param>
        /// <param name="lines"></param>
        /// <param name="PostingDate"></param>
        /// <param name="ReferenceNumber"></param>
        /// <param name="JournalSymbol"></param>
        /// <param name="Description"></param>
        /// <param name="HistoryComment"></param>
        /// <param name="AsDraft"></param>
        /// <returns></returns>
        private async Task SendJournalCmd(OnlineClient client, int Org, IEnumerable <JournalExtract> lines, DateTime PostingDate, string ReferenceNumber, string JournalSymbol, string Description, string HistoryComment, bool AsDraft)
        {
            JournalEntryCreate create = new JournalEntryCreate();

            create.JournalSymbol   = JournalSymbol;
            create.ReferenceNumber = ReferenceNumber;
            create.PostingDate     = PostingDate;
            create.Description     = Description;
            create.HistoryComment  = HistoryComment;
            if (AsDraft)
            {
                create.CustomFields.Add("STATE", "Draft");
            }
            foreach (var item in lines)
            {
                JournalEntryLineCreate line = new JournalEntryLineCreate
                {
                    GlAccountNumber   = item.AccountCode,
                    TransactionAmount = decimal.Parse(item.NomAmount.ToString("F2")),
                    Memo = String.IsNullOrWhiteSpace(item.NomTransRef) ? item.NomNarrative : item.NomNarrative + " (" + item.NomTransRef + ")"
                };
                if (!String.IsNullOrWhiteSpace(item.IntacctCustomerID))
                {
                    line.CustomerId = item.IntacctCustomerID;
                }
                if (!String.IsNullOrWhiteSpace(item.IntacctEmployeeID))
                {
                    line.EmployeeId = item.IntacctEmployeeID;
                }
                if (!String.IsNullOrWhiteSpace(item.IntacctProjectID))
                {
                    line.ProjectId = item.IntacctProjectID;
                }
                if (!String.IsNullOrWhiteSpace(item.IntacctDepartment))
                {
                    line.DepartmentId = item.IntacctDepartment;
                }
                if (!String.IsNullOrWhiteSpace(item.IntacctLocation))
                {
                    line.LocationId = item.IntacctLocation;
                }
                create.Lines.Add(line);
            }
            OnlineResponse onlineResponse = await client.Execute(create);

            foreach (var result in onlineResponse.Results)
            {
                result.EnsureStatusSuccess();
            }
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Returns a list of all known Customer Types from Intacct
        /// </summary>
        /// <param name="client"></param>
        /// <returns></returns>
        private async Task <IList <string> > GetCustTypes(OnlineClient client, PerformContext context)
        {
            // Get Types (assume less than 1000 exist)
            ReadByQuery read = new ReadByQuery
            {
                ObjectName = "CUSTTYPE",
                PageSize   = 1000
            };

            context.WriteLine("Loading Customer Types from Intacct");
            var response = await client.Execute(read);

            var xmlResult = response.Results.First();

            xmlResult.EnsureStatusSuccess();

            return(new List <string>(xmlResult.Data.Select(el => el.Element("NAME").Value)));
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Returns a Dictionary of all ProjectID (ClientCode.JobCode) to Intacct Records
        /// </summary>
        /// <param name="client"></param>
        /// <returns></returns>
        private async Task <IDictionary <string, string> > GetProjectIds(OnlineClient client, PerformContext context)
        {
            var         projectMapping = new Dictionary <string, string>();
            ReadByQuery read           = new ReadByQuery
            {
                ObjectName = "PROJECT",
                PageSize   = 1000
            };

            read.Fields.Clear();
            read.Fields.AddRange(new string[] { "RECORDNO", "PROJECTID" });
            context.WriteLine("Loading Project Records from Intacct for comparison");
            var response = await client.Execute(read);

            var xmlResult = response.Results.First();

            xmlResult.EnsureStatusSuccess();

            var details = xmlResult.Data;

            foreach (var detail in details)
            {
                var custid = detail.Element("PROJECTID");
                var rec    = detail.Element("RECORDNO");

                // Ignore Invalid Data
                if (custid == null || rec == null)
                {
                    continue;
                }

                if (!projectMapping.ContainsKey(custid.Value))
                {
                    projectMapping.Add(custid.Value, rec.Value);
                }
            }

            // Get More Data
            int receivedCount = xmlResult.Count;

            while (receivedCount < xmlResult.TotalCount)
            {
                // Read Additional Pages of Data
                ReadMore more = new ReadMore(xmlResult.ControlId)
                {
                    ResultId = xmlResult.ResultId
                };
                context.WriteLine("Loading Additional Customer Records from Intacct for comparison");
                response = await client.Execute(more);

                xmlResult = response.Results.First();
                xmlResult.EnsureStatusSuccess();

                // Process Results
                details = xmlResult.Data;
                foreach (var detail in details)
                {
                    var custid = detail.Element("PROJECTID");
                    var rec    = detail.Element("RECORDNO");

                    // Ignore Invalid Data
                    if (custid == null || rec == null)
                    {
                        continue;
                    }

                    if (!projectMapping.ContainsKey(custid.Value))
                    {
                        projectMapping.Add(custid.Value, rec.Value);
                    }
                }

                // Increment the Counter
                receivedCount += xmlResult.Count;
            }

            // Return the mappings
            context.WriteLine("Found {0} projects in Intacct", projectMapping.Count);
            return(projectMapping);
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Returns a Dictionary of all Contacts (Names) to Intacct Records
        /// </summary>
        /// <param name="client"></param>
        /// <returns></returns>
        private async Task <IList <string> > GetContacts(OnlineClient client, PerformContext context)
        {
            var         nameList = new List <string>();
            ReadByQuery read     = new ReadByQuery
            {
                ObjectName = "CONTACT",
                PageSize   = 1000
            };

            read.Fields.Clear();
            read.Fields.AddRange(new string[] { "CONTACTNAME" });
            context.WriteLine("Loading Contact Records from Intacct for comparison");
            var response = await client.Execute(read);

            var xmlResult = response.Results.First();

            xmlResult.EnsureStatusSuccess();

            var details = xmlResult.Data;

            foreach (var detail in details)
            {
                var contName = detail.Element("CONTACTNAME");

                // Ignore Invalid Data
                if (contName == null)
                {
                    continue;
                }

                if (!nameList.Contains(contName.Value))
                {
                    nameList.Add(contName.Value);
                }
            }

            // Get More Data
            int receivedCount = xmlResult.Count;

            while (receivedCount < xmlResult.TotalCount)
            {
                // Read Additional Pages of Data
                ReadMore more = new ReadMore(xmlResult.ControlId)
                {
                    ResultId = xmlResult.ResultId
                };
                context.WriteLine("Loading Additional Contact Records from Intacct for comparison");
                response = await client.Execute(more);

                xmlResult = response.Results.First();
                xmlResult.EnsureStatusSuccess();

                // Process Results
                details = xmlResult.Data;
                foreach (var detail in details)
                {
                    var contName = detail.Element("CONTACTNAME");

                    // Ignore Invalid Data
                    if (contName == null)
                    {
                        continue;
                    }

                    if (!nameList.Contains(contName.Value))
                    {
                        nameList.Add(contName.Value);
                    }
                }

                // Increment the Counter
                receivedCount += xmlResult.Count;
            }

            // Return the mappings
            context.WriteLine("Found {0} contacts in Intacct", nameList.Count);
            return(nameList);
        }
Ejemplo n.º 10
0
        public async Task ExecuteResultExceptionTest()
        {
            string xml = @"<?xml version=""1.0"" encoding=""utf-8""?>
<response>
      <control>
            <status>success</status>
            <senderid>testsenderid</senderid>
            <controlid>requestUnitTest</controlid>
            <uniqueid>false</uniqueid>
            <dtdversion>3.0</dtdversion>
      </control>
      <operation>
            <authentication>
                  <status>success</status>
                  <userid>testuser</userid>
                  <companyid>testcompany</companyid>
                  <locationid></locationid>
                  <sessiontimestamp>2015-12-06T15:57:08-08:00</sessiontimestamp>
            </authentication>
            <result>
                  <status>failure</status>
                  <function>getAPISession</function>
                  <controlid>func1UnitTest</controlid>
                  <errormessage>
                        <error>
                              <errorno>Get API Session Failed</errorno>
                              <description></description>
                              <description2>Something went wrong</description2>
                              <correction></correction>
                        </error>
                  </errormessage>
            </result>
      </operation>
</response>";

            HttpResponseMessage mockResponse1 = new HttpResponseMessage()
            {
                StatusCode = System.Net.HttpStatusCode.OK,
                Content    = new StringContent(xml)
            };

            List <HttpResponseMessage> mockResponses = new List <HttpResponseMessage>
            {
                mockResponse1,
            };

            MockHandler mockHandler = new MockHandler(mockResponses);

            ClientConfig clientConfig = new ClientConfig
            {
                SenderId       = "testsender",
                SenderPassword = "******",
                SessionId      = "testsession..",
                MockHandler    = mockHandler,
            };

            OnlineClient client = new OnlineClient(clientConfig);

            var ex = await Record.ExceptionAsync(() => client.Execute(new ApiSessionCreate("func1UnitTest")));

            Assert.IsType <ResultException>(ex);
            Assert.Equal("Result status: failure for Control ID: func1UnitTest - Get API Session Failed Something went wrong", ex.Message);
        }
Ejemplo n.º 11
0
        public async Task LoggerTest()
        {
            string xml = @"<?xml version=""1.0"" encoding=""utf-8""?>
<response>
      <control>
            <status>success</status>
            <senderid>testsenderid</senderid>
            <controlid>requestUnitTest</controlid>
            <uniqueid>false</uniqueid>
            <dtdversion>3.0</dtdversion>
      </control>
      <operation>
            <authentication>
                  <status>success</status>
                  <userid>testuser</userid>
                  <companyid>testcompany</companyid>
                  <locationid></locationid>
                  <sessiontimestamp>2015-12-06T15:57:08-08:00</sessiontimestamp>
            </authentication>
            <result>
                <status>success</status>
                <function>readByQuery</function>
                <controlid>func1UnitTest</controlid>
                <data listtype=""customer"" count=""1"" totalcount=""1"" numremaining=""0"" resultId="""">
                    <customer>
                        <CUSTOMERID>C0001</CUSTOMERID>
                        <NAME>Intacct Corporation</NAME>
                    </customer>
                </data>
            </result>
      </operation>
</response>";

            HttpResponseMessage mockResponse1 = new HttpResponseMessage()
            {
                StatusCode = System.Net.HttpStatusCode.OK,
                Content    = new StringContent(xml)
            };

            List <HttpResponseMessage> mockResponses = new List <HttpResponseMessage>
            {
                mockResponse1,
            };
            MockHandler mockHandler = new MockHandler(mockResponses);

            var          guid   = Guid.NewGuid().ToString();
            MemoryTarget target = new MemoryTarget
            {
                Name   = guid,
                Layout = "${message}"
            };

            SimpleConfigurator.ConfigureForTargetLogging(target, LogLevel.Debug);

            ClientConfig config = new ClientConfig
            {
                SenderId       = "testsender",
                SenderPassword = "******",
                SessionId      = "testsession..",
                MockHandler    = mockHandler,
                Logger         = LogManager.GetLogger(guid),
            };

            OnlineClient client = new OnlineClient(config);

            OnlineResponse response = await client.Execute(new ReadByQuery("func1UnitTest"));

            Assert.True(true); // TODO fix this test from randomly failing
            //Assert.Contains("<password>REDACTED</password>", target.Logs[0]);
        }
Ejemplo n.º 12
0
        public static void Run(ILogger logger)
        {
            OnlineClient client = Bootstrap.Client(logger);

            ReadByQuery query = new ReadByQuery()
            {
                ObjectName = "VENDOR",
                PageSize   = 2, // Keep the count to just 2 for the example
                Fields     =
                {
                    "RECORDNO",
                    "VENDORID",
                }
            };

            logger.LogInformation("Executing query to Intacct API");

            Task <OnlineResponse> task = client.Execute(query);

            task.Wait();
            OnlineResponse response = task.Result;
            Result         result   = response.Results[0];

            try
            {
                dynamic json = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(result.Data));

                string jsonString = json.ToString();

                logger.LogDebug(
                    "Query successful - page 1 [ Total count={0}, Data={1} ]",
                    result.TotalCount,
                    jsonString
                    );

                Console.WriteLine("Page 1 success! Number of vendor objects found: " + result.TotalCount + ". Number remaining: " + result.NumRemaining);
            } catch (NullReferenceException e)
            {
                logger.LogDebug("No response in Data. {0}", e);
            }

            LogManager.Flush();
            int i = 1;

            while (result.NumRemaining > 0 && i <= 3 && !string.IsNullOrEmpty(result.ResultId))
            {
                i++;
                ReadMore more = new ReadMore()
                {
                    ResultId = result.ResultId
                };

                Task <OnlineResponse> taskMore = client.Execute(more);
                taskMore.Wait();
                OnlineResponse responseMore = taskMore.Result;
                Result         resultMore   = responseMore.Results[0];

                try
                {
                    dynamic resultMoreJson =
                        JsonConvert.DeserializeObject(JsonConvert.SerializeObject(resultMore.Data));
                    string resultMoreJsonString = resultMoreJson.ToString();

                    logger.LogDebug(
                        "Read More successful - page " + i + " [ Total remaining={0}, Data={1} ]",
                        resultMore.NumRemaining,
                        resultMoreJsonString
                        );

                    Console.WriteLine("Page " + i + " success! Records remaining: " + resultMore.NumRemaining);
                }
                catch (NullReferenceException e)
                {
                    logger.LogDebug("No response in Data. {0}", e);
                }
                finally
                {
                    LogManager.Flush();
                }
            }

            Console.WriteLine("Successfully read " + i + " pages");
        }
Ejemplo n.º 13
0
        public static void Run(ILogger logger)
        {
            OnlineClient client = Bootstrap.Client(logger);

            List <IFilter> filterList = new List <IFilter>();

            filterList.Add((new Filter("CUSTOMERID")).SetLike("c%"));
            filterList.Add((new Filter("CUSTOMERID")).SetLike("1%"));
            OrOperator filter = new OrOperator(filterList);

            OrderBuilder orderBuilder = new OrderBuilder();

            IOrder[] orders = orderBuilder.Descending("CUSTOMERID").GetOrders();

            SelectBuilder selectBuilder = new SelectBuilder();

            ISelect[] fields = selectBuilder.
                               Fields(new[] { "CUSTOMERID", "CUSTOMERNAME" }).
                               Sum("TOTALDUE").
                               GetFields();

            QueryFunction query = new QueryFunction()
            {
                SelectFields    = fields,
                FromObject      = "ARINVOICE",
                Filter          = filter,
                CaseInsensitive = true,
                PageSize        = 100,
                OrderBy         = orders
            };

            logger.LogInformation("Executing query to Intacct API");

            Task <OnlineResponse> task = client.Execute(query);

            task.Wait();
            OnlineResponse response = task.Result;
            Result         result   = response.Results[0];

            dynamic json = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(result.Data));

            if (json != null && json.First != null)
            {
                Console.WriteLine("Success! Number of ARINVOICE objects found: " + result.TotalCount);
                Console.WriteLine("First ARINVOICE result found");
                Console.WriteLine("CUSTOMERID: " + json.First["ARINVOICE"]["CUSTOMERID"].Value);
                Console.WriteLine("CUSTOMERNAME: " + json.First["ARINVOICE"]["CUSTOMERNAME"].Value);
                Console.WriteLine("SUM.TOTALDUE: " + json.First["ARINVOICE"]["SUM.TOTALDUE"].Value);

                Console.WriteLine("See the log file (logs/intacct.log) for the complete list of results.");
            }
            else
            {
                Console.WriteLine("The query executed, but no ARINVOICE objects met the query criteria.");
                Console.WriteLine("Either modify the filter or comment it out from the query.");
                Console.WriteLine("See the log file (logs/intacct.log) for the XML request.");
            }

            try
            {
                string jsonString = json.ToString();

                logger.LogDebug(
                    "Query successful [ Company ID={0}, User ID={1}, Request control ID={2}, Function control ID={3}, Total count={4}, Data={5} ]",
                    response.Authentication.CompanyId,
                    response.Authentication.UserId,
                    response.Control.ControlId,
                    result.ControlId,
                    result.TotalCount,
                    jsonString
                    );
            }
            catch (NullReferenceException e)
            {
                logger.LogDebug("No response in Data. {0}", e);
            }
            finally
            {
                LogManager.Flush();
            }
        }
Ejemplo n.º 14
0
        public static void Run(ILogger logger)
        {
            OnlineClient client = Bootstrap.Client(logger);

            logger.LogInformation("Executing CRUD customer functions to API");

            CustomerCreate create = new CustomerCreate()
            {
                CustomerName = "Joshua Granley",
                Active       = false,
            };

            Task <OnlineResponse> createTask = client.Execute(create);

            createTask.Wait();
            OnlineResponse createResponse = createTask.Result;
            Result         createResult   = createResponse.Results[0];

            string customerId = createResult.Data[0].Element("CUSTOMERID").Value;
            int    recordNo   = int.Parse(createResult.Data[0].Element("RECORDNO").Value);

            Console.WriteLine("Created inactive customer ID " + customerId);

            CustomerUpdate update = new CustomerUpdate()
            {
                CustomerId = customerId,
                Active     = true,
            };

            Task <OnlineResponse> updateTask = client.Execute(update);

            updateTask.Wait();

            Console.WriteLine("Updated customer ID " + customerId + " to active");

            Read read = new Read()
            {
                ObjectName = "CUSTOMER",
                Fields     =
                {
                    "RECORDNO",
                    "CUSTOMERID",
                    "STATUS",
                },
                Keys =
                {
                    recordNo,
                }
            };

            Task <OnlineResponse> readTask = client.Execute(read);

            readTask.Wait();

            Console.WriteLine("Read customer ID " + customerId);

            CustomerDelete delete = new CustomerDelete()
            {
                CustomerId = customerId,
            };

            Task <OnlineResponse> deleteTask = client.Execute(delete);

            deleteTask.Wait();

            Console.WriteLine("Deleted customer ID " + customerId);

            LogManager.Flush();
        }