Saltar al contenido

Cree una lista de clientes Tutoriales para desarrolladores de SAP

Ahora tienes que copiar el código dentro de la definición de clase del ProductsTableViewController.swift clasifica tu clase de cuerpo CustomersTableViewController.
Pon todo dentro del CustomersTableViewController sonó desde:

class CustomersTableViewController: UITableViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Uncomment the following line to preserve selection between presentations
        // self.clearsSelectionOnViewWillAppear = false

        // Uncomment the following line to display an Edit button in the navigation bar for this view controller.
        // self.navigationItem.rightBarButtonItem = self.editButtonItem
    }

    // MARK: - Table view data source

    override func numberOfSections(in tableView: UITableView) -> Int {
        // #warning Incomplete implementation, return the number of sections
        return 0
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of rows
        return 0
    }

    /*
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "reuseIdentifier", for: indexPath)

        // Configure the cell...

        return cell
    }
    */

    /*
    // Override to support conditional editing of the table view.
    override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
        // Return false if you do not want the specified item to be editable.
        return true
    }
    */

    /*
    // Override to support editing the table view.
    override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCell.EditingStyle, forRowAt indexPath: IndexPath) {
        if editingStyle == .delete {
            // Delete the row from the data source
            tableView.deleteRows(at: [indexPath], with: .fade)
        } else if editingStyle == .insert {
            // Create a new instance of the appropriate class, insert it into the array, and add a new row to the table view
        }    
    }
    */

    /*
    // Override to support rearranging the table view.
    override func tableView(_ tableView: UITableView, moveRowAt fromIndexPath: IndexPath, to: IndexPath) {

    }
    */

    /*
    // Override to support conditional rearranging of the table view.
    override func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool {
        // Return false if you do not want the item to be re-orderable.
        return true
    }
    */

    /*
    // MARK: - Navigation

    // In a storyboard-based application, you will often want to do a little preparation before navigation
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        // Get the new view controller using segue.destination.
        // Pass the selected object to the new view controller.
    }
    */

}

A:

//
//  CustomersTableViewController.swift
//  MySampleAppCatalyst
//
//  Created by Muessig, Kevin on 3/12/20.
//  Copyright © 2020 SAP. All rights reserved.
//

import UIKit
import SAPFiori
import SAPFoundation
import SAPOData
import SAPFioriFlows
import SAPCommon

class CustomersTableViewController: UITableViewController, SAPFioriLoadingIndicator {
    var loadingIndicator: FUILoadingIndicatorView?

    let destinations = FileConfigurationProvider("AppParameters").provideConfiguration().configuration["Destinations"] as! NSDictionary

    var dataService: ESPMContainer<OfflineODataProvider>? {
      guard let odataController = OnboardingSessionManager.shared.onboardingSession?.odataControllers[destinations["com.sap.edm.sampleservice.v2"] as! String] as? Comsapedmsampleservicev2OfflineODataController, let dataService = odataController.espmContainer else {
          AlertHelper.displayAlert(with: NSLocalizedString("OData service is not reachable, please onboard again.", comment: ""), error: nil, viewController: self)
          return nil
      }
      return dataService
}

    private let appDelegate = UIApplication.shared.delegate as! AppDelegate
    private let logger = Logger.shared(named: "ProductsTableViewController")

    private var customers = [Customer]()

    private var searchController: FUISearchController?
    private var searchedCustomers = [Customer]()

    override func viewDidLoad() {
        super.viewDidLoad()

        tableView.register(FUIObjectTableViewCell.self, forCellReuseIdentifier: FUIObjectTableViewCell.reuseIdentifier)
        tableView.estimatedRowHeight = 120
        tableView.rowHeight = UITableView.automaticDimension

        loadData()
        setupSearchBar()
    }

    private func loadData() {
        showFioriLoadingIndicator()
        fetchCustomers {
            self.tableView.reloadData()
            self.hideFioriLoadingIndicator()
        }
    }

    private func fetchCustomers(completionHandler: @escaping () -> Void) {
        dataService?.fetchCustomers() { [weak self] result, error in
            if let error = error {
                AlertHelper.displayAlert(with: NSLocalizedString("Failed to load list of products!", comment: ""), error: error, viewController: self!)
                self?.logger.error("Failed to load list of products!", error: error)
                return
            }
            self?.customers = result!
            completionHandler()
        }
    }

    // MARK: - Table view data source

    override func numberOfSections(in tableView: UITableView) -> Int {
        return 1
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return isSearching() ? searchedCustomers.count : customers.count
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let customer = isSearching() ? searchedCustomers[indexPath.row] : customers[indexPath.row]
        let customerCell = tableView.dequeueReusableCell(withIdentifier: FUIObjectTableViewCell.reuseIdentifier) as! FUIObjectTableViewCell
        customerCell.accessoryType = .none

        let customerName = "(customer.firstName ?? "") (customer.lastName ?? "")"
        customerCell.headlineText = customerName

        customerCell.detailImageView.image = FUIIconLibrary.system.me
        customerCell.detailImageView.isCircular = true

        if let customerDOB = customer.dateOfBirth {
            let dateFormatter = DateFormatter()
            dateFormatter.dateStyle = .medium
            customerCell.subheadlineText = "(dateFormatter.string(from: customerDOB.utc()))"
        }
        return customerCell
    }

    // MARK: - Search Bar

    private func setupSearchBar() {
        // Search Controller setup
        searchController = FUISearchController(searchResultsController: nil)
        searchController!.searchResultsUpdater = self
        searchController!.hidesNavigationBarDuringPresentation = true
        searchController!.searchBar.placeholderText = NSLocalizedString("Search for customers...", comment: "")
        searchController!.searchBar.isBarcodeScannerEnabled = false

        self.tableView.tableHeaderView = searchController!.searchBar
    }

    // verify if the search text is empty or not
    private func searchTextIsEmpty() -> Bool {
        return searchController?.searchBar.text?.isEmpty ?? true
    }

    // actual search logic for finding the correct products for the term the user is searching for
    private func searchProducts(_ searchText: String) {
        searchedCustomers = customers.filter({( customer : Customer) -> Bool in
            let customerName = "(customer.firstName ?? "") (customer.lastName ?? "")"
            return customerName.lowercased().contains(searchText.lowercased())
        })

        tableView.reloadData()
    }

    // verify if the user is currently searching or not
    private func isSearching() -> Bool {
        return searchController?.isActive ?? false && !searchTextIsEmpty()
    }
}

// MARK: - UISearchResultsUpdating extension

extension CustomersTableViewController: UISearchResultsUpdating {
    func updateSearchResults(for searchController: UISearchController) {
        if let searchText = searchController.searchBar.text {
            searchProducts(searchText)
            return
        }
    }
}

Si compila ahora, no debería haber errores de tiempo de compilación, si obtiene un error de tiempo de compilación para el odataController recuerda el import SAPOfflineOData declaración de importación. Usaste casi el mismo código que en el ProductsTableViewController.swift class y modificarlo. Solo tenía que reemplazar el producto y el cliente con todas las definiciones de producto. tableView(_:cellForRowAt:) un método para usar los detalles del producto similar a la pantalla de descripción general.

También el loadProductImages() el método ya no es necesario, así que lo eliminó.