<?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>Google Base Help</title>
    <para>The google base component provide to export products feed up to google base.</para>
    <para>
        <orderedlist>
           <listitem>
               <para>Go to Google Base Component.</para>
               <para>There are 3 main menus including Google Base Configurations, Export to Google Base and Auto Update Options.</para>
           </listitem>
        </orderedlist>
    </para>
    <section>
        <title>How to add the Google Base Configurations?</title>
        <para>First of all, you must add the google base configuration to each product store.</para>
        <para>
            <orderedlist>
                <listitem>
                    <para>At 'Add Google Base Configuration' screen.</para>
                    <para>Appropriately insert all field of the google base configuration.</para>
                    <para>Select the Product Store Id.</para>
                    <para>The Authentication Url is "https://www.google.com/accounts/ClientLogin".</para>
                    <para>The Post Items Url is "http://www.google.com/base/feeds/items/batch".</para>
                    <para>The Web Site Id is "GOOGLEBASE" (default).</para>
                    <para>Lastly, click 'Add'.</para>
                </listitem>
            </orderedlist>
        </para>
        <para>Notice: The Developer Key is got from google base according to your google's account.</para>
    </section>
    <section>
        <title>How to export product feed to google base?</title>
        <para>You can export the selected products up to google base, this function generates the feed for google base.</para>
                <para>Addition: Filter Product Status Description.</para>
        <orderedlist>
            <listitem>
                <para>"Active Product" is the product which is active in OFBiz, not in Google Base. There use "thruDate" field to check what is active or not.</para>
                <para>"Product not currently synced with Google Base" is the product which hasn't exported to Google Base yet.</para>
            </listitem>
        </orderedlist>
        <para>Addition: Discontinued Description.</para>
        <para>If you check "Exclude sending discontinued product and stock is zero" box, the search result will only has the product which is not discontinued and is available in stock.</para>
        <para>
            <orderedlist>
                <listitem>
                    <para>At 'Export To Google Base' screen.</para>
                    <para>Choose the product store, you can fill in any search option.</para>
                    <para>Click 'Find'.</para>
                    <para>Select any products, then click 'Export to Google Base'.</para>
                    <para>Fill in the configurations including "Country Code", "Web Site Url". For example; Country Code = "US", Web Site Url = "http://ofbizdemo2.antwebsystems.com", Web Site Mount Point = "ecommerce", Action Type = "insert", Status ID = "Publish Draft", Test Mode = "No".</para>
                    <para>You can select 'GoogleBaseRecommended' for add more detail of google base feed elements.</para>
                    <para>Click 'Export to Google Base', the system will exports product feed to Google Base.</para>
                </listitem>
            </orderedlist>
        </para>
    </section>
    <section>
        <title>How to use the auto update to google base?</title>
        <para>The auto update function repeats to export feed according to the frequency of scheduled job. So don't forget to add the scheduled job to run "autoUpdateToGoogleBase" service.</para>
        <para>
            <orderedlist>
                <listitem>
                    <para>Set the Auto Update to Google Base at "autoUpdateToGoogleBase.properties".</para>
                    <para>You can see that config at Google Base Auto Update Config section.</para>
                    <para>Add the scheduled job to run "autoUpdateToGoogleBase" service.</para>
                </listitem>
            </orderedlist>
        </para>
        <para>Notice: After you once created the scheduled job of "autoUpdateToGoogleBase" service, you can start/stop scheduled at 'Start/Stop Auto Update to Google Base Scheduled' section.</para>
    </section>
</section>
