.. This work is licensed under a Creative Commons Attribution 4.0 International License.
.. SPDX-License-Identifier: CC-BY-4.0
.. Copyright (C) 2020 highstreet technologies and others

.. contents::
   :depth: 3
..

Inventory
=========

The application offers basic inventory management of devices supporting
ONF-TR-512 and ietf-hardware.

The view displays the inventory data of the network element – for
example, serial-numbers and part-numbers according to the containment of
the equipment.

Inventory Export:
-----------------

The '︙' button in the upper right corner of the table allows exporting
the inventory data as a CSV file.

Only the currently viewed table data is exported. As the default
pagination is set to 10, only the first 10 rows or filtered rows would
be exported. To increase the number of exported rows change the
pagination.

The behavior of the export can vary based on different browsers:

a) Some browsers allow you to save the file with the predefined name
   export.csv. In case your browser does not offer this function please
   use the 'Save as...' option and define the filename with extension
   csv.

b) Some browsers save the file automatically with the alphanumeric name
   but without an extension. In such a case navigate to the downloaded
   file location and rename the file. The extension (csv) must be
   appended to the name. The result should look like export\_file.csv.
