protected String createNewDeviceObject() throws Exception {
    List<MobileObject> beans =
        this.runner.getDeviceDatabase().readByStorage(this.runner.getService());

    // Create the new ticket on the device
    MobileObject bean = null;
    for (MobileObject cour : beans) {
      if (!cour.isProxy() && !cour.isCreatedOnDevice()) {
        bean = cour;
        break;
      }
    }

    MobileObject newTicket = new MobileObject();
    newTicket.setStorageId(bean.getStorageId());

    newTicket.setValue("name", "This new refrigerator is broken");

    // Referenced Nested Properties
    newTicket.setValue("customerInfo.id", bean.getValue("customerInfo.id"));
    newTicket.setValue("customerInfo.customerId", bean.getValue("customerInfo.customerId"));
    newTicket.setValue("customerInfo.name", bean.getValue("customerInfo.name"));
    newTicket.setValue("customerInfo.comments", bean.getValue("customerInfo.comments"));

    // Notes
    for (int i = 0; i < 2; i++) {
      BeanListEntry note = new BeanListEntry();
      note.setProperty("note", "note://" + i + "/added");
      IndexingAPIUtil.addBean(newTicket, "notes", note);
    }

    // Parts
    for (int i = 0; i < 2; i++) {
      BeanListEntry part = new BeanListEntry();
      part.setProperty("name", "part://" + i + "/added");
      IndexingAPIUtil.addBean(newTicket, "parts", part);
    }

    this.runner.create(newTicket);

    return newTicket.getRecordId();
  }
  protected void updateDeviceObject(String objectId) throws Exception {
    List<MobileObject> beans =
        this.runner.getDeviceDatabase().readByStorage(this.runner.getService());
    MobileObject storedBean = null;
    for (MobileObject cour : beans) {
      if (cour.getValue("technician.name") != null && !cour.isProxy()) {
        storedBean = cour;
        break;
      }
    }

    MobileObject bean = this.runner.getDeviceDatabase().read(this.runner.getService(), objectId);

    bean.setValue("name", "name://updated");

    // Referenced Technician
    bean.setValue("technician.id", storedBean.getValue("technician.id"));
    bean.setValue("technician.employeeId", storedBean.getValue("technician.employeeId"));
    bean.setValue("technician.name", storedBean.getValue("technician.name"));
    bean.setValue("technician.status", storedBean.getValue("technician.status"));

    // Notes
    for (int i = 0; i < 2; i++) {
      BeanListEntry note = new BeanListEntry();
      note.setProperty("note", "note://" + i + "/updated");
      IndexingAPIUtil.addBean(bean, "notes", note);
    }

    // Parts
    for (int i = 0; i < 2; i++) {
      BeanListEntry part = new BeanListEntry();
      part.setProperty("name", "part://" + i + "/updated");
      IndexingAPIUtil.addBean(bean, "parts", part);
    }

    this.runner.update(bean);
  }
  protected void printDeviceBean(MobileObject currBean) {
    log.info("Local Bean Id=" + currBean.getRecordId());
    log.info("Remote Bean Id=" + currBean.getServerRecordId());
    log.info("Ticket Id=" + currBean.getValue("ticketId"));
    log.info("Ticket Name=" + currBean.getValue("name"));

    log.info("Customer DB Id=" + currBean.getValue("customerInfo.id"));
    log.info("Customer Id=" + currBean.getValue("customerInfo.customerId"));
    log.info("Customer Name=" + currBean.getValue("customerInfo.name"));
    log.info("Customer Comments=" + currBean.getValue("customerInfo.comments"));

    log.info("Technician Id=" + currBean.getValue("technician.id"));
    log.info("Employee Id=" + currBean.getValue("technician.employeeId"));
    log.info("Technician Name=" + currBean.getValue("technician.name"));
    log.info("Technician Status=" + currBean.getValue("technician.status"));

    log.info("Equipment ID=" + currBean.getValue("equipment.id"));
    log.info("Equipment Name=" + currBean.getValue("equipment.name"));

    // Use better indexing API
    BeanList notes = IndexingAPIUtil.readList(currBean, "notes");
    for (int j = 0; j < notes.size(); j++) {
      BeanListEntry note = notes.getEntryAt(j);
      log.info("Note ID=" + note.getProperty("id"));
      log.info("Note=" + note.getProperty("note"));
    }

    // Use better indexing API
    BeanList parts = IndexingAPIUtil.readList(currBean, "parts");
    for (int j = 0; j < parts.size(); j++) {
      BeanListEntry part = parts.getEntryAt(j);
      log.info("Part ID=" + part.getProperty("id"));
      log.info("Part=" + part.getProperty("name"));
    }

    log.info("-----------------------------------------");
  }