protected override void RunScenario()

in sdk/SdkSamples/Invoice/GetInvoiceLineItems.cs [39:145]


        protected override void RunScenario()
        {
            var partnerOperations = this.Context.UserPartnerOperations;
            string invoiceId = this.Context.Configuration.Scenario.DefaultInvoiceId;

            if (string.IsNullOrWhiteSpace(invoiceId))
            {
                // prompt the user the enter the invoice ID
                invoiceId = this.Context.ConsoleHelper.ReadNonEmptyString("Please enter the ID of the invoice to retrieve ", "The ID can't be empty");
            }
            else
            {
                Console.WriteLine("Found Invoice ID: {0} in configuration.", invoiceId);
            }

            this.Context.ConsoleHelper.StartProgress("Retrieving Invoice Line Items");

            // Retrieve the invoice 
            var invoiceOperations = partnerOperations.Invoices.ById(invoiceId);
            var invoice = invoiceOperations.Get();

            this.Context.ConsoleHelper.StopProgress();

            if ((invoice.InvoiceDetails == null) || (invoice.InvoiceDetails.Count() <= 0))
            {
                this.Context.ConsoleHelper.Warning(string.Format(CultureInfo.InvariantCulture, "Invoice {0} does not have any invoice line items", invoice.Id));
            }
            else
            {
                foreach (var invoiceDetail in invoice.InvoiceDetails)
                {
                    this.Context.ConsoleHelper.StartProgress(string.Format("Getting invoice line item for product {0} and line item type {1}", invoiceDetail.BillingProvider, invoiceDetail.InvoiceLineItemType));

                    if (invoiceDetail.BillingProvider.ToString().Equals(BillingProvider.Marketplace.ToString()))
                    {
                        var seekBasedResourceCollection = invoiceOperations.By(invoiceDetail.BillingProvider.ToString(), invoiceDetail.InvoiceLineItemType.ToString(), invoice.CurrencyCode, "current", null).Get();

                        var fetchNext = true;

                        ConsoleKeyInfo keyInfo;

                        var itemNumber = 1;

                        Console.Out.WriteLine("\tRecon line items count: " + seekBasedResourceCollection.Items.Count());
                        
                        if (seekBasedResourceCollection.Items.Count() > 0)
                        {
                            while (fetchNext)
                            {
                                seekBasedResourceCollection.Items.Take(2).ToList().ForEach(i =>
                                {
                                    Console.Out.WriteLine("\t----------------------------------------------");
                                    Console.Out.WriteLine("\tLine Item # {0}", itemNumber);

                                    PrintProperties(i);
                                    itemNumber++;
                                });

                                Console.Out.WriteLine("\tPress any key to fetch next data. Press the Escape (Esc) key to quit: \n");
                                keyInfo = Console.ReadKey();

                                if (keyInfo.Key == ConsoleKey.Escape)
                                {
                                    break;
                                }

                                fetchNext = !string.IsNullOrWhiteSpace(seekBasedResourceCollection.ContinuationToken);

                                if (fetchNext)
                                {
                                    if (seekBasedResourceCollection.Links.Next.Headers != null && seekBasedResourceCollection.Links.Next.Headers.Any())
                                    {
                                        seekBasedResourceCollection = invoiceOperations.By(invoiceDetail.BillingProvider.ToString(), invoiceDetail.InvoiceLineItemType.ToString(), invoice.CurrencyCode, "current", null).Seek(seekBasedResourceCollection.ContinuationToken, SeekOperation.Next);
                                    }
                                }
                            }
                        }
                    }
                    else {
                        var invoiceLineItemsCollection = (this.invoicePageSize <= 0) ? invoiceOperations.By(invoiceDetail.BillingProvider, invoiceDetail.InvoiceLineItemType).Get() : invoiceOperations.By(invoiceDetail.BillingProvider, invoiceDetail.InvoiceLineItemType).Get(this.invoicePageSize, 0);
                        var invoiceLineItemEnumerator = partnerOperations.Enumerators.InvoiceLineItems.Create(invoiceLineItemsCollection);

                        this.Context.ConsoleHelper.StopProgress();
                        int pageNumber = 1;

                        while (invoiceLineItemEnumerator.HasValue)
                        {
                            this.Context.ConsoleHelper.WriteObject(invoiceLineItemEnumerator.Current, string.Format(CultureInfo.InvariantCulture, "Invoice Line Item Page: {0}", pageNumber++));
                            Console.WriteLine();
                            Console.Write("Press any key to retrieve the next invoice line items page");
                            Console.ReadKey();

                            this.Context.ConsoleHelper.StartProgress("Getting next invoice line items page");

                            // Get the next list of invoice line items
                            invoiceLineItemEnumerator.Next();

                            this.Context.ConsoleHelper.StopProgress();
                            Console.Clear();
                        }
                    }

                    this.Context.ConsoleHelper.StopProgress();
                    Console.Clear();
                }
            }
        }