Products Setup

Last Updated 20230719

Notes: https://cwiki.apache.org/confluence/display/OFBENDUSER/Product+Features

Create New Product

Product ID:

Can not be modified once created.  Has to be unique.  Probably a good idea to use product part numbers.

Product Type:

(Fixed) Asset Usage:  Could be associated with Asset Rental
Asset Rental:
Configurable Good:  Customer selects the sub items to make up the product.
Configurable Good Configuration:
Configurable Service Configuration:
Configurable Service using inventory:
Digital Good: Do not require tracking of inventory.  No shipping charges are charged.
Finished Good:  A simple basic product on it's own such as a box of paperclips.  A Virtual product such as a Tee Shirt with no feature options and no inventory requirement.  A Variant product of the Tee Shirt which has features such as color and size and inventory availability needs to be maintained.
Finished/Digital Good:
Good:  This looks to be a rollup  parentTypeId associated with  RAW_MATERIAL, SUBASSEMBLY, FINISHED_GOOD, DIGITAL_GOOD, FINDIG_GOOD, AGGREGATED, MARKETING_PKG, WIP
Marketing Package: Pre-configured product bundle business puts together I believe.  I also believe that it only shows 1 line on the invoice for the product but not the sub-products. Note:  Open issue with returns: https://issues.apache.org/jira/browse/OFBIZ-12394
Marketing Package Auto Manufactured:  Based on a production run:  Automatically assembled each time it's ordered.
Marketing Package Pick Assembly:  For those who want "assembly" by picking multiple items instead of one (ie: a set of products grouped for marketing purposes.  A charm bracelet with 5 different charms) Note: Check and see if this is business pre-configured or customer selection.  I read for customer selection you should use Configurable Good.
Product From Scrum:
Raw Material:
Service: An inventory item is used but no inventory needs to be maintained.
Service a product using inventory: Inventory has to be maintained
Subassembly:
Work In Process:

Internal Name:

Short description used internally within the OFBiz backend.

Product Name:

Short description used for public facing views.

Brand Name:

Typically the holding company or principal company brand.  Allrecipes is a brand.  Rubbermaid is a brand.  

Comments:

Internal comments, not for public viewing.

Virtual Product: 

Is VIRTUAL Product?  The public will see a tee shirt that is selling on your website but it's not real, you don't maintain inventory for it.   You maintain inventory and sell the small, medium, large tee in blue, black, and orange color.  The public will see a virtual item on your website.  They will then select features such as size, color, pocket or no pocket.    The variant product is what they will actually purchase.
Is VARIANT Product?  A tee shirt size small, medium, and large with colors grey, black, blue, navy etc...  All of these you will keep detailed inventory for.  This is also known as a matrix based inventory.
Virtual Variant Method:  Feature Tree Generation does not create actual items to track inventory where as Variant Tree Generation does.   I read somewhere the FEATURE options are unlimited whereas variant options are limited to 200.

Primary Category:

Primary Category=A product can be associated with several categories.  One of those can be made a primary.  Not sure why there should be a primary.  Note: Click on "Categories" Tab first and add categories that product is associated with.  The dropdown Primary Category will then be populated.

Dates:

Introduction Date=Self Explanatory

Release Date=Self Explanatory

Sales Discontinuation Through Date=Need to figure out.

Support Through Date=Self Explanatory

Inventory:


Parent Type View - The indented items have a Parent Type.  Initial review on AGGREGATED it appears OFBiz goes out and adds up the price on all the sub-items in one process.  So I am assuming that the different Parent Types cause branching in the source code to run or not to run.

ASSET_USAGE - Fixed Asset Usage

ASSET_USAGE_OUT_IN - Fixed Asset Usage For Rental of an asset which is shipped from and returned to inventory

GOOD - Good

     RAW_MATERIAL - Raw Material

     SUBASSEMBLY - Subassembly

     FINISHED_GOOD - Finished Good

     DIGITAL_GOOD - Digital Good

     FINDIG_GOOD - Finished/Digital Good

     AGGREGATED - Configurable Good - Note: Source Code - Returns the Id of an AGGREGATED_CONF product having exact configId.  * If AGGREGATED_CONF product do not exist, creates one, associates it to the AGGREGATED product, and copy its production run template.

           AGGREGATED_CONF - Configurable Good Configuration

           AGGREGATEDSERV_CONF - Configurable Service Configuration

     MARKETING_PKG - Marketing Package

           MARKETING_PKG_AUTO - Marketing Package: Auto Manufactured

           MARKETING_PKG_PICK - Marketing Package: Pick Assembly

WIP - Work In Process

SERVICE - Service

SERVICE_PRODUCT - Service a product using inventory

       AGGREGATED_SERVICE - Configurable Service using inventory

Select Catalog

Select Products

Click on New Product

Type Product  ID: 40-06-0021

Select Product Type: Finished Good

Type Internal Name: Ladder Guide

Type Brand Name: Ruffian Specialties

Is Virtual Product = N 

Note we will cover Virtual/Variant products shortly.

Misc Returnable = Y, Promotions = Y, Taxable = Y, AutoCreateKeywords = Y

Click

Create Product

Select Categories

Click on the IndexCard

Type Other

Click Find

Select RS_FGDS_NAV_OTHER

Product Category ID is updated

Click

Add

Select 

Content

Scroll Down to Override Simple Fields

Product Description: Max 256 Characters

Type: New and improved Ladder Guide with the Neodymium Magnet Base.

Long Description: Text only.  No HTML. No Formating.

Type: Fire Engine Ladder Guide Pebble Beach Style. 


The The Ruffian Ladder guide is the perfect length to guide the ladder to it's mark.  


Ladder Guide Features: 

Heavy Pull Neodymium Magnet Base 

Dimensions: 5l x 3w 18oz Vinyl 

3-Bar Reflective Tape 


Call 951-487-0909 if you have any questions.  


Ruffian Specialties is a small Made in America company. If you like our products please tell your friends or ring our bell @RuffianBags or #RuffianBags on social media. Thank you.

Click

Update

Select Content - Not shown

Scroll to Upload Image

Select Browse

Select Full Size Product Image

Select Original

Select Upload Image

After upload image will be sized for small, medium, large, detail, and original.

Images are located in Drive:\ofbiz\themes\common-theme\webapp\images\products\item number

Additional images are located in a subfolder called additional1...2...3...4...

Automatic image sizing is not optimal in my opinion.

I will have to do a seperate section on images later.

Type

https://localhost:8443/ecomseo/

Notice that with first product you have Other under Categories.

The home page of Featured Products still does not display any products because we haven't added anything to that category yet.

Click on Other and you have your first product.

Advanced Tip

Import data with the Web Tools as detailed in OFBiz Facility Setup.

I kind of stopped with the individual ads and started figuring out to export from Quickbooks and import to OFBiz.  So the following will hopefully give you some ideas how that works.

Using Google Drive I started making import files so I could blow out and restart at any point in the process.

FGDS Stage 2 is to create all the import fields

I setup and imported these fields:

productId=Spreadsheet Calculation
productTypeId=Manually Set Cut & Paste
internalName=Data from Quickbooks
brandName=All my items are Ruffian Specialties
productName=Data from Quickbooks
description=Data from Quickbooks
facilityId=Manually set. We only have one facility.
price=Data from Quickbooks
returnable=Manually set.
taxable=Manually set.
includeInPromotions=Manually set.
isVirtual=Went through these one by one manually.
isVariant=Went through these one by one manually.
virtualVariantMethodEnumId=Manually set.
salesDiscWhenNotAvail=Manually set.
primaryProductCategoryId=Manually set.

To get key data like virtualVariantMethodEnumId I used the OFBizDatamodelBook_Combined_20171001.pdf

This is the best data model that I have found available.  It can be found here:

https://cwiki.apache.org/confluence/display/OFBIZ/Data+Model+Diagrams

I also use the Web Tools - Entity Data Maintenance 

There are several very good tools in that section to assist you.

Stage 3 is pulling the data together in the correct format.

This is the Product table.

File Name=30 Finished Goods Import

File Name=30 Finished Goods Import Sample Data


<Product productId="00-00-Repair" productTypeId="SERVICE" internalName="Repair / Re-Work" brandName="Ruffian Specialties" productName="Repair / Re-Work" description="Repair / Re-Work" facilityId="F_CA_MAIN" returnable="N" taxable="N" includeInPromotions="Y" isVirtual="N" isVariant="N" virtualVariantMethodEnumId="PRODRQM_NONE" salesDiscWhenNotAvail="N" primaryProductCategoryId="RS_FGDS_NAV_OTHER"/>

<Product productId="00-00-Repair-M" productTypeId="SERVICE" internalName="Repair Main Zipper on Trauma Bag" brandName="Ruffian Specialties" productName="Repair Main Zipper on Trauma Bag" description="Repair Main Zipper on Trauma Bag" facilityId="F_CA_MAIN" returnable="N" taxable="N" includeInPromotions="Y" isVirtual="N" isVariant="N" virtualVariantMethodEnumId="PRODRQM_NONE" salesDiscWhenNotAvail="N" primaryProductCategoryId="RS_FGDS_NAV_OTHER"/>

<Product productId="00-00-Repair-S" productTypeId="SERVICE" internalName="Repair Side Zipper on Trauma Bag" brandName="Ruffian Specialties" productName="Repair Side Zipper on Trauma Bag" description="Repair Side Zipper on Trauma Bag" facilityId="F_CA_MAIN" returnable="N" taxable="N" includeInPromotions="Y" isVirtual="N" isVariant="N" virtualVariantMethodEnumId="PRODRQM_NONE" salesDiscWhenNotAvail="N" primaryProductCategoryId="RS_FGDS_NAV_OTHER"/>

<Product productId="10-02-0000" productTypeId="SERVICE" internalName="Name Patch (1 Lines) -" brandName="Ruffian Specialties" productName="Name Patch (1 Lines) -" description="Name Patch (1 Lines) -" facilityId="F_CA_MAIN" returnable="N" taxable="Y" includeInPromotions="Y" isVirtual="N" isVariant="N" virtualVariantMethodEnumId="PRODRQM_NONE" salesDiscWhenNotAvail="N" primaryProductCategoryId="RS_FGDS_NAV_ORGAN"/>

Stage 4 is pulling the cells together in the correct order.  I had a problem on my import and the only thing I can think of that might have caused it is the order of the columns.  In this step I set the column order the same as some Demo data imports and it worked.

This is the ProductPrice table.

File Name=35 Product List Price Import

File Name=35 Product List Price Import Sample Data


<ProductPrice productId="00-00-Repair" productPricePurposeId="PURCHASE" productPriceTypeId="LIST_PRICE" currencyUomId="USD" productStoreGroupId="_NA_" fromDate="2023-01-01 00:00:00.0" price="0" createDate="2023-01-01 00:00:00.0"/>

<ProductPrice productId="00-00-Repair-M" productPricePurposeId="PURCHASE" productPriceTypeId="LIST_PRICE" currencyUomId="USD" productStoreGroupId="_NA_" fromDate="2023-01-01 00:00:00.0" price="27.5" createDate="2023-01-01 00:00:00.0"/>

<ProductPrice productId="00-00-Repair-S" productPricePurposeId="PURCHASE" productPriceTypeId="LIST_PRICE" currencyUomId="USD" productStoreGroupId="_NA_" fromDate="2023-01-01 00:00:00.0" price="23.5" createDate="2023-01-01 00:00:00.0"/>

<ProductPrice productId="10-02-0000" productPricePurposeId="PURCHASE" productPriceTypeId="LIST_PRICE" currencyUomId="USD" productStoreGroupId="_NA_" fromDate="2023-01-01 00:00:00.0" price="8.95" createDate="2023-01-01 00:00:00.0"/>

<ProductPrice productId="10-02-0001" productPricePurposeId="PURCHASE" productPriceTypeId="LIST_PRICE" currencyUomId="USD" productStoreGroupId="_NA_" fromDate="2023-01-01 00:00:00.0" price="10.95" createDate="2023-01-01 00:00:00.0"/>

<ProductPrice productId="10-02-0002" productPricePurposeId="PURCHASE" productPriceTypeId="LIST_PRICE" currencyUomId="USD" productStoreGroupId="_NA_" fromDate="2023-01-01 00:00:00.0" price="9.95" createDate="2023-01-01 00:00:00.0"/>

<ProductPrice productId="10-02-0003" productPricePurposeId="PURCHASE" productPriceTypeId="LIST_PRICE" currencyUomId="USD" productStoreGroupId="_NA_" fromDate="2023-01-01 00:00:00.0" price="8" createDate="2023-01-01 00:00:00.0"/>

Then I used Notepad to do a find and replace all on LIST_PRICE to DEFAULT_PRICE 

File Name=40 Product Default Price Import Sample Data

<ProductPrice productId="00-00-Repair" productPricePurposeId="PURCHASE" productPriceTypeId="DEFAULT_PRICE" currencyUomId="USD" productStoreGroupId="_NA_" fromDate="2023-01-01 00:00:00.0" price="0" createDate="2023-01-01 00:00:00.0"/>

<ProductPrice productId="00-00-Repair-M" productPricePurposeId="PURCHASE" productPriceTypeId="DEFAULT_PRICE" currencyUomId="USD" productStoreGroupId="_NA_" fromDate="2023-01-01 00:00:00.0" price="27.5" createDate="2023-01-01 00:00:00.0"/>

<ProductPrice productId="00-00-Repair-S" productPricePurposeId="PURCHASE" productPriceTypeId="DEFAULT_PRICE" currencyUomId="USD" productStoreGroupId="_NA_" fromDate="2023-01-01 00:00:00.0" price="23.5" createDate="2023-01-01 00:00:00.0"/>

<ProductPrice productId="10-02-0000" productPricePurposeId="PURCHASE" productPriceTypeId="DEFAULT_PRICE" currencyUomId="USD" productStoreGroupId="_NA_" fromDate="2023-01-01 00:00:00.0" price="8.95" createDate="2023-01-01 00:00:00.0"/>

<ProductPrice productId="10-02-0001" productPricePurposeId="PURCHASE" productPriceTypeId="DEFAULT_PRICE" currencyUomId="USD" productStoreGroupId="_NA_" fromDate="2023-01-01 00:00:00.0" price="10.95" createDate="2023-01-01 00:00:00.0"/>

<ProductPrice productId="10-02-0002" productPricePurposeId="PURCHASE" productPriceTypeId="DEFAULT_PRICE" currencyUomId="USD" productStoreGroupId="_NA_" fromDate="2023-01-01 00:00:00.0" price="9.95" createDate="2023-01-01 00:00:00.0"/>

<ProductPrice productId="10-02-0003" productPricePurposeId="PURCHASE" productPriceTypeId="DEFAULT_PRICE" currencyUomId="USD" productStoreGroupId="_NA_" fromDate="2023-01-01 00:00:00.0" price="8" createDate="2023-01-01 00:00:00.0"/>


Stage 5 was importing ProductCategoryMember data.

File Name=45 Primary NAV Catagory Import

<ProductCategoryMember productCategoryId="RS_FGDS_NAV_OTHER" productId="00-00-Repair" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_NAV_OTHER" productId="00-00-Repair-M" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_NAV_OTHER" productId="00-00-Repair-S" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_NAV_ORGAN" productId="10-02-0000" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_NAV_ORGAN" productId="10-02-0001" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_NAV_ORGAN" productId="10-02-0002" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_NAV_ORGAN" productId="10-02-0003" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_NAV_ORGAN" productId="10-02-0004" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_NAV_ORGAN" productId="10-02-0005" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_NAV_ORGAN" productId="10-02-0008" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_NAV_ORGAN" productId="10-02-0009" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_NAV_ORGAN" productId="10-02-0010" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_NAV_ORGAN" productId="10-02-0011" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_NAV_ORGAN" productId="10-03-0005" fromDate="2023-01-01 00:00:00.0"/>

Stage 6 was more ProductCategoryMember data but this time was RS_FGDS_SRCH.

This would make all items searchable.

File Name=50 Primary SRCH Category Import Sample Data

<ProductCategoryMember productCategoryId="RS_FGDS_SRCH" productId="00-00-Repair" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_SRCH" productId="00-00-Repair-M" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_SRCH" productId="00-00-Repair-S" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_SRCH" productId="10-02-0000" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_SRCH" productId="10-02-0001" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_SRCH" productId="10-02-0002" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_SRCH" productId="10-02-0003" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_SRCH" productId="10-02-0004" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_SRCH" productId="10-02-0005" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_SRCH" productId="10-02-0008" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_SRCH" productId="10-02-0009" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_SRCH" productId="10-02-0010" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_SRCH" productId="10-02-0011" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_SRCH" productId="10-03-0005" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_SRCH" productId="10-03-0100" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_SRCH" productId="10-04-0020" fromDate="2023-01-01 00:00:00.0"/>

Then I used Notepad to do a find and replace all on _SRCH to _VIEW  so all items could be viewable.

File Name=55 Primary VIEW Category Import Sample Data

<ProductCategoryMember productCategoryId="RS_FGDS_VIEW" productId="00-00-Repair" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_VIEW" productId="00-00-Repair-M" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_VIEW" productId="00-00-Repair-S" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_VIEW" productId="10-02-0000" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_VIEW" productId="10-02-0001" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_VIEW" productId="10-02-0002" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_VIEW" productId="10-02-0003" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_VIEW" productId="10-02-0004" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_VIEW" productId="10-02-0005" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_VIEW" productId="10-02-0008" fromDate="2023-01-01 00:00:00.0"/>

Then I used Notepad to do a find and replace all on _VIEW to _PRCH so all items could be viewable.

File Name=60 Primary PRCH Category Import Sample Data

<ProductCategoryMember productCategoryId="RS_FGDS_PRCH" productId="00-00-Repair" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_PRCH" productId="00-00-Repair-M" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_PRCH" productId="00-00-Repair-S" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_PRCH" productId="10-02-0000" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_PRCH" productId="10-02-0001" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_PRCH" productId="10-02-0002" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_PRCH" productId="10-02-0003" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_PRCH" productId="10-02-0004" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_PRCH" productId="10-02-0005" fromDate="2023-01-01 00:00:00.0"/>

<ProductCategoryMember productCategoryId="RS_FGDS_PRCH" productId="10-02-0008" fromDate="2023-01-01 00:00:00.0"/>

Stop Here.  The following are just some notes.  Not sure what to do with them yet.

<Product productId="40-06-0021" 

productTypeId="FINISHED_GOOD" 

internalName="Ladder Guide"

productName="Fire Engine Ladder Guide Pebble Beach Style" 

description="New and improved Ladder Guide with the Neodymium Magnet Base.  " 

longDescription="Fire Engine Ladder Guide Pebble Beach Style. 


The The Ruffian Ladder guide is the perfect length to guide the ladder to it's mark.  


Ladder Guide Features:

Heavy Pull Neodymium Magnet Base 

Dimensions: 5l x 3w 18oz Vinyl 

3-Bar Reflective Tape 


Call 951-487-0909 if you have any questions.  


Ruffian Specialties is a small Made in America company. If you like our products please tell your friends or ring our bell @RuffianBags or #RuffianBags on social media. Thank you." 

isVirtual="N" isVariant="N"/>

Not formated import:

<Product productId="40-01-0200" productTypeId="FINISHED_GOOD" internalName="Airlock Belt" brandName="Ruffian Specialties" productName="Firefighters Belt with the Quick Release Airlock Buckle" description="" facilityId="RS_F_CA_MAIN" primaryProductCategoryId="RS_FGDS_NAV_BELTS" returnable="Y" taxable="Y" includeInPromotions="Y" isVirtual="N" isVariant="N" virtualVariantMethodEnumId=""/>

<entity-engine-xml>

<ProductPrice productId="40-01-0200" productPriceTypeId="DEFAULT_PRICE" productPricePurposeId="PURCHASE" currencyUomId="USD" productStoreGroupId="_NA_" fromDate="2023-05-01 00:00:00.0" price="49.95" taxInPrice="N"/>

</entity-engine-xml>