Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
function nullToDash() {
    var nr = arguments[0];
    if(nr == null)
        return '-';
    return nr;
}

function dashToNull() {
    var nr = arguments[0];
    if(nr == '-')
        return null;
    return nr;
}

 Configuring the UI converter of field 'fldAge' format property:

Code that tests the actual/UI value:

Code Block
/** @type {JSRecord<db:/example_data/employees>}*/
var rec = foundset.getSelectedRecord();
if(rec.age == null) {
	application.output('Actual data: null')
	application.output('UI data:' + elements.fldAge)
}

The image below shows how data is displayed in the UI:

Image Added

UI Converter from java code (plugin)

...

  • convertFromObject()
    Convert from UI value to dataprovider value
  • convertToObject()
    Converts from dataprovider value to UI value
  • type (one of TEXT, INTEGER, NUMBER, DATETIME or MEDIA)
    The UI data type (so the resulting type of the convertToObject()).

Java Code Example

 

This is an example of a plugin that delivers a converter from joda time (which has support for time persiods) to java-util-date (which is supported by Servoy UI elements) time.
The dataprovider type will be MEDIA because Servoy does not natively support.

 

 

 

Code Block
private static final IUIConverter[] UI_CONVERTERS = new IUIConverter[] { JodaToDateConverter.INSTANCE };
 
public IUIConverter[] getUIConverters()
{
    return UI_CONVERTERS;
}
 
static class NrToJodaConverter implements ITypedColumnConverter
{
    static final NrToJodaConverter INSTANCE = new NrToJodaConverter();
 
    public Object convertToObject(Map<String, String> props, int column_type, Object dbvalue) throws Exception
    {
        if (dbvalue == null)
        {
            return null;
        }
        return new DateTime(Utils.getAsLong(dbvalue));
    }
 
    public Object convertFromObject(Map<String, String> props, int column_type, Object obj) throws Exception
    {
        if (obj instanceof DateTime)
        {
            return Long.valueOf(((DateTime)obj).getMillis());
        }
        return obj; // or throw an exception??
    }
 
    public Map<String, String> getDefaultProperties()
    {
        return null;
    }
 
    public int[] getSupportedColumnTypes()
    {
        return new int[] { IColumnTypes.INTEGER };
    }
 
    public String getName()
    {
        return getClass().getSimpleName();
    }
 
    public int getToObjectType(Map<String, String> props)
    {
        // Servoy does not understand joda time natively.
        return IColumnTypes.MEDIA;
    }
}
 
static class JodaToDateConverter implements IUIConverter
{
    static final JodaToDateConverter INSTANCE = new JodaToDateConverter();
 
    public Object convertFromObject(Map<String, String> props, int input_type, Object converted) throws Exception
    {
        if (converted instanceof Date)
        {
            return new DateTime(((Date)converted).getTime());
        }
        return converted; // or return null or throw an exception??
    }
 
    public Object convertToObject(Map<String, String> props, int input_type, Object input) throws Exception
    {
        if (input instanceof DateTime)
        {
            return new Date(((DateTime)input).getMillis());
        }
        return input; // or return null or throw an exception??
    }
 
    public Map<String, String> getDefaultProperties()
    {
        return null;
    }
 
    public int[] getSupportedDataproviderTypes()
    {
        // Servoy does not understand joda time natively.
        return new int[] { IColumnTypes.MEDIA };
    }
 
    public String getName()
    {
        return getClass().getSimpleName();
    }
 
    public int getToObjectType(Map<String, String> props)
    {
        return IColumnTypes.DATETIME;
    }
}

 

 

 

Solution model

UI converters are currently not supported by the solution model.

...