Setting up the Excel Import / Export
This is technical documentation for system integrators
This article presents some sample code from this file:
Open the table of contents of the samples via this URL: _plugins/LABS_EXAMPLE_EXPORTEXCEL/page/examples.jspz
Introduction
The WXM_EIEXCEL plugin allows:
the integration of a simplified data export button to an Excel 2007 file in a datalist, not intended to be re-imported.
performing exports or imports of data to or from an Excel 2007 file
The Excel Import / Export can be used as a translation tool, to export and reimport strings that need to be exported by an external tool. you may use the dedicated plugin here:
https://drive.google.com/file/d/1PBjiqItJ2jsI4v9BXNX1Eq8PQoo03l8A/view
Plugin Configuration
tempdir
Working directory: indicates the temp of the directory to store temporary files created by the plugin. If the path is relative, it is relative to the SAN directory.
defaultVariation
Default variation: name of the default variation for exporting resource files.
Possible values (case insensitive):
No value here means the binary file is exported as is;
NATIVE: means the binary file is exported as is;
NONE: means no file will be exported;
BIG (or thumbnailBig): means we export the big type variation;
SMALL (or thumbnailSmall): means we export the small type variation;
TINY (or thumbnailTiny): means we export the tiny type variation;
FULL, (or REAL, or thumbnailReal): means we export the full type variation;
WXML: means we export the WXML type variation
PDF: means we export the PDF type variation
ZIP: means we export the ZIP type variation
HTML: means we export the HTML type variation
autosizeEnabled
Automatic column width calculation enabled: this option activates the autosize export parameter.
Warning: this feature requires the use of Java's graphical classes, which under certain conditions may be absent (headless mode), or which may cause memory overflows (perm_gen_space) under certain conditions. This is why this option is disabled by default.
Datalist export: Enabling the export button on object lists
The export button is set up using structure tags.
The button appears as soon as the exportxls tag is placed on an object.
Fields marked "in list", except technical fields (child, parent), are exported as soon as the button is clicked in the datalist. The export takes into account the context of the request and full text search.
It is possible to add fields, or to remove them, and to partially modify the way the value is exported.
Fields are exported in the order of position.
The export is always localized, relative to the locale of the surfer: if an i18n field is part of the exported fields, the corresponding master field is not localized if it is exported. If a master field is exported, and the localized field corresponding to this field and to the export locale is not exported, the master field is localized when exported.
The exported file is either :
an xlsx file (Excel 2007);
a zip file if resource files are also exported.
This is the list of the supported tags, with the reference below the table :
Type | Tags |
object tag | exportxls |
object tag | exportxls_exclude |
object tag | importxls/new |
object tag | importxls/append |
object tag | exportxls_locked |
property tag | exportxls_hidden |
property tag | exportxls_asId |
property tag | exportxls_asName |
property tag | exportxls_asIdName |
property tag | exportxls_tree |
property tag | exportxls_norender |
property tag | exportxls_include |
property tag | exportxls_exclude |
property tag | exportxls_variation/* |
Object Tags
exportxls
To activate the appearance of the export to Excel button in a datalist, place the exportxls tag on the object.
exportxls_exclude
Excludes all fields by default, allowing only those specified by exportxls_include to be included.
importxls/new
Uses the creation callback.
importxls/append
Allows the addition of instances.
exportxls_locked
All locking options are disabled by default. This tag reactivates the default Excel document locking behavior.
Property Tags
exportxls_include
By default, a field is exported if and only if:
the object it belongs to has the exportxls tag;
the field is "on list";
the field does not have an arbo_field tag, and is not a "technical" field (parent, child...);
if the field is a localization field and its locale is the same as the surfer's.
To export a property that does not meet all these conditions, add the exportxls_include tag to the field.
A "password" type field is never exported, regardless of the settings.
exportxls_exclude
Regardless of the other options, if a field has this tag, it will not be exported.
exportxls_hidden
To hide a column, add the exportxls_hidden tag to the field.
Exporting 'child' and 'multiple child' type fields.
You can choose the presentation of the values of 'child' or 'multiple child' type fields:
the exportxls_asName tag displays the name;
the exportxls_asId tag displays the id;
the exportxls_asIdName tag displays the id and the name, separated by a hyphen.
By default, the name is displayed. If 2 tags, or more, are present, priority is applied in the above order.
Binary export (file or image) and variations
When exporting a binary type field, the file is also exported. You can indicate the variation you want to export. It is not possible to export two different variations for the same propery. In the case of multiple tags, the exported variation will be undetermined among those requested.
To indicate the variation, add the exportxls_variation tag followed by a sub-tag, which characterizes the variation.
none
To not export any binary at all, apply the exportxls_variation/none tag.
native
To export the binary, apply the exportxls_variation/native tag (or none)
big
To export the thumbnailBig variation, apply the exportxls_variation/big or exportxls_variation/thumbnailBig tag
small
To export the thumbnailSmall variation, apply the exportxls_variation/small or exportxls_variation/thumbnailSmall tag
tiny
To export the thumbnailTiny variation, apply the exportxls_variation/tiny or exportxls_variation/thumbnailTiny tag
full
To export the thumbnailReal variation, apply the exportxls_variation/full or exportxls_variation/real or exportxls_variation/thumbnailReal tag
To export the pdf variation, apply the exportxls_variation/pdf tag
wxml
To export the wxml variation, apply the exportxls_variation/wxml tag
zip
To export the zip variation, apply the exportxls_variation/zip tag
html
To export the html variation, apply the exportxls_variation/html tag.
Tree Export
When an object has a field marked arbo_field and it is marked with the exportxls_tree label, its name is exported as a path and the field with the "arbo_field" label is never exported. The paths are the names from the root, separated by // (double-slash).
HTML Field Export
HTML fields are exported as plain text (removal of HTML tags). To export the field in its native HTML form, add the exportxls_norender label.
Triggering Export
By Plugin Invocation
The method is called exportTo. Several signatures are available:
Refer to the example JSP: EXAMPLE_EXPORTEXCEL/page/exampleExportByPlugin.jsp
By Forward
You can perform an export by forward on the jsp page/exportexcel.jsp which can be included to perform a parameterized export that generates a file that can be intended for import. To set the export, simply pass a parameter object via the request attribute exportxls_cfg, or by a parameter of the same name.
The value of the attribute can be
a org.json.JSonObject object
a java.lang.String object that contains a parsable JSon
the path of a file, or a File, relative to the SAN, which contains a JSon
the name of an object (the configuration will be automatically generated according to pre-established rules)
a url whose flow is a JSon type content
Refere to the example JSP: EXAMPLE_EXPORTEXCEL/page/exampleExportByForward.jsp
By API
exportexcel.jar is an API that you can use directly in your plugin code.
The jar can be retrieved in the lib folder of the EXAMPLE_EXPORTEXCEL plugin.
Different examples of invocation can be seen in the fr.wedia.excel.exporter.examples.ExportExamples class.
JSon Configuration Object
The configuration object is a json object, whose properties are object names. It is therefore possible to export several objects in the same file.
For example :
{“rubrique”: null}
Global Configuration
By default, files will be exported in ZIP containing an XLSX and the associated binaries, or in XLSX if there are no binaries exported. The name of the file is always “wedia”.
You just need to add a $global property to the configuration json to modify these parameters.
Example :
{“$global”={ “fileType”: “zip”, “filename”:”wedia_activated” }, “activated”: null }
fileType
A file type among:
zipx: the exported file is always a zip with an xlsx inside
zip: the exported file is always a zip with an xls inside
xlsx: the exported file is an xlsx, included in a zip if and only if resource files are also exported
xls: the exported file is an xls, included in a zip if and only if resource files are also exported
fileName
The name of the exported file (be careful not to put forbidden characters (/, :, etc). Do not put the extension, except in case of double extension. For example, if you want to have wedia.assets.zip or wedia.assets.xlsx depending on whether you have resources or not, you will have to put:
“fileName”:”wedia.assets.zip” (regardless of the final extension, it will be replaced by the appropriate extension.
JSON Configuration Object for the Export of an Object
If no configuration object is associated with an object, a default configuration will be established. Otherwise, simply provide a json object, with the following fields, all optional.
{“rubrique”: {
“where”: “pstatus=6”,
“orderby”: “pname ASC”,
“properties”: {
“name”: null,
“created”: null
}
}}
where
The SQL Wedia clause to be used for selecting the instances to export. fulltext The full text clause to be used for selecting the instances to export. order The SQL sorting clause to be used for sorting the instances to export.
secure
A boolean indicating whether to apply security or not. properties The list of properties to export: the value of this property must be a JSON object, whose properties are field identifiers to export.
skipFieldException A boolean which, if set to true, allows to ignore the exceptions generated during the interpretation of the field configuration (for example, field not existing in the object). This parameter is useful during automatic configuration, to prevent the exported fields without explicit configuration from causing errors that prevent complete export (the columns are simply ignored in this case). locked The spreadsheet is locked (by default, true) password Lock password, or null to disable. By default, enabled.
freezePane
freezeColumnUntil
JSON Object Configuration of a Propery to Export
In the JSON object value of the properties field, the identifier of the field to export is indicated as a property name. It can be:
a field name of the object, or an integer corresponding to its position
a calculated field identifier
either in the form of an Excel formula (dynamic)
or in the form of a calculated field in Java (static)
The value of the corresponding property is a JSON object, or null for default configuration.
Properties that don't have an object for a field type are ignored.
Default values of unspecified properties depend on the position and type of the field, and the locale, as applicable.
hidden
This property allows you to hide a column
choice
This property indicates whether the validation/choice list is generated or not
childType
This property indicates how a child type field, or multiple child, is exported.
id: the identifier is exported
name: the name is exported
id_name: the id and name are exported
label
This property allows you to indicate a personalized title to the column.
variation
This property allows you to indicate which variation you want for a binary.
Variation Codes
big, or thumbnailBig
small, or thumbnailSmall
tiny, or thumbnailTiny
full, real or thumbnailReal
pdf
zip
wxml
html
native
none
tree
This property allows you to activate the export in tree mode of a property name of an object having a field with the arbo_field label.
formula
This property allows you to indicate the Excel formula for a formula type field
computedField
This property allows you to indicate the calculated field identifier for a computed field type field
targetField
This property allows you to indicate the name of the destination field for the import of a formula or a calculated field
raw
This property allows you to indicate if the exported value should not be localized
labelLocked
This property allows you to lock the column title (by default, true)
locked
This property allows you to lock the content of each cell (by default, false)
ignoreIfNull
ignore
width
tag
matches
Styles
Styles may be applied with the following options:
fillForegroundColor
fillBackgroundColor
fillPattern
fontColor
fontHeight
fontStyle
fontEscapement
underlineType
borderBottomColor
borderBottom
borderTopColor
borderTop
borderDiagonalColor
borderDiagonal
borderLeftColor
borderLeft
borderRightColor
borderRight
Values
$global
auto
pw:
Matcher expressions
field
configuration
choice
tree
formula
computedField
rendered
locked
ignore
ignoreIfNull
tags
localized
wrapped
tagged
listable
editable
hasLocale
locales
i18nFor
i18nFields
types
attachment
mandatory
viewable
i18n
Exporting a field with an Excel formula
Only English language for formulas is accepted. You can reference a column in the row of the concerned cell by the following pattern: ${identifier} where identifier is a column identifier.
Exporting a calculated field
(TBD)
Excel Automatic Import
Documents exported by the button are not normally intended to be imported. However, under certain conditions, and with reduced performance, this is possible.
Documents exported by the export feature can be imported.
By request
The import URL is /_plugins/WXM_EIEXCEL/page/importexcel.jspz
Parameters:
reporting
dryRun
failfast/diehard
append
create => use of the default callback
Attributes (use by include)
importxls_reporting
importxls_callback
Example
Example JSP: EXAMPLE_EXPORTEXCEL/page/exampleImportByRequest.jsp
By tag:
importxls: adds a button that displays a standard import page that uses the standard system (configuration comes from the file)
importxls_append: allows the addition of an instance
By API
exportexcel.jar is an API that you can use directly in your plugin code.
The jar is retrievable in the lib folder of the plugin EXAMPLE_EXPORTEXCEL.
Different examples of invocation are visible in the class fr.wedia.excel.importer.examples.ImportExamples.
Callback
General operation
During import, it is possible to respond to import errors and conflicts through a callback. This is a reflection implementation of an interface.
Creation of the callback
By API:
IImportCallback callback = new IImportCallback() {
public int callback(int code, CallbackContext context, Throwable exception) throws Throwable {
return IImportCallback.EXCEPTION;
}
public boolean canImport(CTSurfer surfer, String objectName) {
return !”activated”.equalsIgnoreCase(objectName);
}
public boolean canImport(CTSurfer surfer, String objectName, String fieldName) {
if ( “status”.equalsIgnoreCase(fieldName) ) {
return IMPORT_FIELD_IGNORE;
}
else if ( “parent”.equalsIgnoreCase(fieldName) ) {
return IMPORT_FIELD_FALSE; // interdit
}
return IMPORT_FIELD_TRUE;
}
}
By reflection, in a JSP for example:
Context
The context is a set of properties (in the form of Map<String, Object>) containing information related to the context of the code.
The properties are:
LOCALE: the locale (java.util.Locale)
FILENAME: the name of the file (java.lang.String)
FILE: the file (java.io.File)
APPEND_MODE: the import mode (Boolean)
OBJECT_NAME: the object name (java.lang.String)
FIELD_NAME: the object field name (java.lang.String)
CELL_VALUE: the value read in an Excel cell (java.lang.Object)
VALUE: a value (java.lang.Object)
FIELD: a field (wsnoheto.engine.IObjectField)
ACTION: the localized name of a workflow action (java.lang.String) input, output can be an action (noheto.workflow.IAction)
OBJECT: an object (wsnoheto.engine.IObjectReadOnly)
OBJECT_ID: an object identifier (java.lang.String)
Callback Codes
Return codes
EXCEPTION: -4
throws an exception (and thus stops the import as it is, without rollback)
STOP: -3
immediately stops the import as it is (without rollback)
SKIP_ROW: 4
ignores the spreadsheet row, or the object instance, or action
SKIP_SHEET: 5
ignores the spreadsheet, or object, or action
SKIP_COLUMN: 3
ignores the column, or object, or action
DEFAULT: 1
attempts a default action when possible
CHANGE_VALUE = 2
indicates a replacement value (via the context)
Reports
Simulate an import without modifying the database
This mode allows you to perform the import without making any changes to the database. When combined with a report, it allows you to see potential results and conflicts and debug the callback without modifying object data in the database or creating unnecessary objects. The simulation does not operate in fail-fast mode: in case of exception, the exception is ignored, and the import tries to go to the end, except for insurmountable exceptions (unreadable file for example).
Fail-fast / diehard mode
During the simulation, by default, as soon as the first exception occurs, the process is stopped (fail-fast mode). It is possible to force the simulation to go to the end by using diehard mode.
Import a document that has not been exported
During export, tags are added to the document to allow an import. It is possible to manually tag a document to take advantage of the automatic import.
It is useful to simulate the import to check that the tagging is complete before attempting a definitive import.
The tagging uses Excel names.
Metadata
Global tagging uses a special spreadsheet that must be called __metadata.
The first cell at the top left must be called __DOCUMENT.
The first cell below __DOCUMENT contains the import locale. If the cell is empty, the surfer's locale is used.
The second column contains the version (1.0) (or nothing for version 1.0).
Spreadsheet tagging (object)
For a spreadsheet to target an object,
either the sheet is tagged: the header line is named by the tag _objectname followed by the object's name (for example __objectname_damelement for the object damelement. The name of the sheet can then be anything.
if no object in the database corresponds to the tag, the callback is called with the code UNKNOWN_OBJECT (5)
during import, if the object is not determinable by tag, the callback is called:
if no object tag is found, first the code NO_OBJECT_NAMES (4)
then if there are sheets that are not tagged, the code REMAINING_SHEETS (7)
then for each untagged sheet, the sheet name is used as the object name
if no object corresponds, we call the callback with the code UNKNOWN_OBJECT_IN_SHEET (6).
Column tagging (property)
For a column to target a field:
either the column title is tagged: the cell is named by the tag _fieldname followed by the field name
if the field does not exist the callback is called with the code UNKNOWN_FIELD (10).
during import, if the field corresponding to a column is not determinable, the callback is called
if no field tag is found, first the code NO_FIELD_NAMES (11)
then if there are columns that are not tagged, the code REMAINING_COLUMNS (8)
then for each column, the value in the cell is used as the field name
if no field corresponds, we call the callback with the code UNKNOWN_FIELD_IN_SHEET (12).
Import functionality by template
Problems during import, errors, conflicts, disputes: understanding how we report “issues”.
Introduction
When a problem occurs during the import, an exception is raised. It is possible to intercept this exception in order to indicate to the import process an alternative to solve the problem. This allows:
to stop the process silently (without exception)
to ignore objects, object instances, fields, etc.
to propose replacement values in case of erroneous values, or to activate auto-correction procedures
etc.
Every problem is characterized by an issue. An issue is:
an identification code
an exception
a context that allows knowing and/or modifying certain information
The resolution of the issues is done by a callback method which will be invoked for any issue. The return value of the callback determines how the process will handle the conflict:
the value -4 (EXCEPTION) indicates that the planned exception is raised. The process then stops, except in diehard simulation mode, where the process will continue as much as it can;
the value -3 (STOP) indicates that the process is stopped without raising the exception
the value 4 (SKIP_ROW) indicates that the import of the current object instance is cancelled
the value 5 (SKIP_SHEET) indicates that the import of the current object (of all instances of the object) is cancelled
the value 3 (SKIP_COLUMN) indicates that the import of the current field is cancelled
the value 2 (CHANGE_VALUE) indicates that a replacement value is proposed for a problematic value, or a lack of mandatory value, or any hindrance. If the proposed value continues to cause trouble, the original exception will be raised.
the value 1 (DEFAULT) allows to select a default automatic operation
any other value corresponds to a default behavior depending on the issue. Generally, it is EXCEPTION or DEFAULT.
List of issues
NO_METADATA_LOCALE
Use the API in your own plug-in