<?xml version="1.0" encoding="UTF-8"?>
<!--
    Licensed to the Apache Software Foundation (ASF) under one or more
    contributor license agreements. See the NOTICE file distributed with
    this work for additional information regarding copyright ownership.
    The ASF licenses this file to you under the Apache License, Version
    2.0 (the "License"); you may not use this file except in compliance
    with the License. You may obtain a copy of the License at
    http://www.apache.org/licenses/LICENSE-2.0 Unless required by
    applicable law or agreed to in writing, software distributed under the
    License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
    CONDITIONS OF ANY KIND, either express or implied. See the License for
    the specific language governing permissions and limitations under the
    License.
-->
<section xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    version="5.0" xmlns:xl="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude"
    xsi:schemaLocation="http://docbook.org/ns/docbook ../../../content/dtd/docbook.xsd"
    xmlns="http://docbook.org/ns/docbook">
    <title>Search Products in category screen.</title>
    <para>
This screen allows the user to find products for export from ofbiz store to Ebay site. First you must select product store, catalogs and category at products located. Then find products and select product you want to export to category on ebay site.
    </para>
    <section>
        <title>How to search products?</title>
        <orderedlist>
            <listitem><para>select  products store you want to export products example : OFBiz E-Commerce [9000]</para></listitem>
        <listitem><para>select catalog 'eBay Catalog'</para></listitem>
        <listitem><para>select category in example you can use 'Ebay E-Commerce ... [eBay_ECom_Category]'</para></listitem>
        <listitem><para>select the other condition if you want</para></listitem>
        <listitem><para>Press 'Find' button at the below of page to find products</para></listitem>
        </orderedlist>
    </section>
</section>
