1. SmartClient Version: SNAPSHOT_v9.1d_2014-01-14/LGPL Development Only (built 2014-01-14)
2. Firefox 26.0
3.
4.
5.
6. sample code if applicable
This is just slightly modified showcase "ExcelToGridSample":
in CountryXmlDS.class countryCodeField.setValueXPath("countryCode/code")
in country.data.xml <countryCode><code>XX</code></countryCode>
EntryPoint:
	CountryXmlDS:
	country.data:
	Select any cell in Country column and paste changed value - it works and changed value is indicated in blue.
Now select any cell in Code column and paste changed value - this is NOT working.
The problem lays in datasource.recordsFromText() method, backed with JavaScript function with the same name. That one is using dataSource.validateJSONRecord(). Unfortunately it tries to process as follows:
validateJSONRecord : function (record) {
...
if (field.valueXPath) {
fieldValue = isc.xml.selectObjects(record, field.valueXPath, true);
} else {
fieldValue = record[fieldName];
}
and finds always "undef" value in case of valueXPath field.
MichalG
					2. Firefox 26.0
3.
4.
5.
6. sample code if applicable
This is just slightly modified showcase "ExcelToGridSample":
in CountryXmlDS.class countryCodeField.setValueXPath("countryCode/code")
in country.data.xml <countryCode><code>XX</code></countryCode>
EntryPoint:
Code:
	
	package pl.com.tech4.client;
import java.util.ArrayList;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.DOM;
import com.smartgwt.client.data.Record;
import com.smartgwt.client.data.RecordList;
import com.smartgwt.client.data.DataSource;
import com.smartgwt.client.data.TextImportSettings;
import com.smartgwt.client.data.DSCallback;
import com.smartgwt.client.data.DSRequest;
import com.smartgwt.client.data.DSResponse;
import com.smartgwt.client.types.Autofit;
import com.smartgwt.client.types.Alignment;
import com.smartgwt.client.types.Visibility;
import com.smartgwt.client.types.EscapingMode;
import com.smartgwt.client.util.SC;
import com.smartgwt.client.widgets.Button;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.Dialog;
import com.smartgwt.client.widgets.layout.VLayout;
import com.smartgwt.client.widgets.form.DynamicForm;
import com.smartgwt.client.widgets.grid.ListGrid;
import com.smartgwt.client.widgets.grid.ListGridField;
import com.smartgwt.client.widgets.grid.ListGridRecord;
import com.smartgwt.client.widgets.grid.CellSelection;
import com.smartgwt.client.widgets.events.ClickEvent;
import com.smartgwt.client.widgets.events.ClickHandler;
import com.smartgwt.client.widgets.form.fields.FormItem;
import com.smartgwt.client.widgets.form.fields.ButtonItem;
import com.smartgwt.client.widgets.form.fields.TextAreaItem;
import com.smartgwt.client.widgets.form.fields.StaticTextItem;
public class MainEntryPoint implements EntryPoint, ClickHandler {
    private ListGrid countryList;
    private class MyDialog extends Dialog implements
        com.smartgwt.client.widgets.form.fields.events.ClickHandler {
        private DynamicForm form;
        private TextAreaItem textArea;
        public void onClick(com.smartgwt.client.widgets.form.fields.events.ClickEvent event) {
            String text = (String) this.textArea.getValue();
            MainEntryPoint.this.pasteText(text);
            this.removeItem(this.form);
            this.markForDestroy();
            this.hide();
        };
        public MyDialog() {
           
            final int WIDTH = 525;
            final int HEIGHT = 300;
            final String GUIDANCE = "Press Ctrl-V (Command-V on Mac) or right click (Option-click on Mac) to paste values, then hit \"Apply\"";
            StaticTextItem label = new StaticTextItem();
            label.setName("label");
            label.setShowTitle(false);
            label.setValue(GUIDANCE);
            TextAreaItem area = new TextAreaItem();
            area.setName("textArea");
            area.setShowTitle(false);
            area.setCanEdit(true);
            area.setHeight("*");
            area.setWidth("*");
            this.textArea = area;
            ButtonItem button = new ButtonItem();
            button.setName("apply");
            button.setAlign(Alignment.CENTER);
            button.setTitle("Apply");
            button.addClickHandler(this);
       
            DynamicForm form = new DynamicForm();
            form.setNumCols(1);
            form.setWidth(WIDTH);
            form.setHeight(HEIGHT);
            form.setAutoFocus(true);
            form.setFields(new FormItem[]{ label, this.textArea, button });
            this.form = form;
            this.setAutoSize(true);
            this.setShowToolbar(false);
            this.setCanDragReposition(true);
            this.setTitle("Paste Cells");
            this.setShowModalMask(true);
            this.setIsModal(true);
            this.addItem(form);
        }
    };
    public void onClick(ClickEvent event) {
        this.new MyDialog().draw();     
    };
    private void pasteText(String text) {
        ArrayList<String> fieldNames = new ArrayList<String>();
        int[][] cells = this.countryList.getCellSelection().getSelectedCells();
        if (cells.length == 0) {
            countryList.getCellSelection().selectCell(0, 0);
            cells = countryList.getCellSelection().getSelectedCells();
        }
        int firstCol = cells[0][1];
        ListGridField[] fields = this.countryList.getFields();
        for (int col = firstCol; col < fields.length; col++) {
            fieldNames.add(this.countryList.getFieldName(col));
        }
        TextImportSettings settings = new TextImportSettings();
        settings.setFieldList(fieldNames.toArray(new String[0]));
        settings.setFieldSeparator("\t");
        settings.setEscapingMode(EscapingMode.DOUBLE);
        DataSource dataSource = this.countryList.getDataSource();
        Record[] records = dataSource.recordsFromText(text, settings);
        this.countryList.applyRecordData(new RecordList(records));
    };
   
    public void onModuleLoad() {
        DOM.getElementById("loadingPicture").removeFromParent();
        SC.showConsole();
       
        DataSource dataSource = CountryXmlDS.getInstance();
        final ListGrid grid = new ListGrid();
        grid.setCanEdit(true);
        grid.setAutoFetchData(true);
        grid.setCanDragSelect(true);
        grid.setCanSelectCells(true);
        grid.setDataSource(dataSource);
        grid.setAutoFitData(Autofit.VERTICAL);
        grid.fetchData(null, new DSCallback() {
            @Override
            public void execute(DSResponse dsResponse, Object data,
                    DSRequest dsRequest) {
                grid.getCellSelection().selectCell(0, 0);
            }
        });
        this.countryList = grid;
        Button button = new Button();
        button.setTitle("Paste Cells");
        button.addClickHandler(this);
        VLayout layout = new VLayout(15);
        layout.setWidth100();
        layout.addMember(grid);
        layout.addMember(button);
        layout.draw();
    }
};
Code:
	
	package pl.com.tech4.client;
import com.smartgwt.client.data.DataSource;
import com.smartgwt.client.data.fields.*;
public class CountryXmlDS extends DataSource {
    private static CountryXmlDS instance = null;
    public static CountryXmlDS getInstance() {
        if (instance == null) {
            instance = new CountryXmlDS("countryDS");
        }
        return instance;
    }
    public CountryXmlDS(String id) {
        setID(id);
        setRecordXPath("/List/country");
        DataSourceIntegerField pkField = new DataSourceIntegerField("pk");
        pkField.setHidden(true);
        pkField.setPrimaryKey(true);
        DataSourceTextField countryCodeField = new DataSourceTextField("countryCode", "Code");
        countryCodeField.setRequired(true);
        countryCodeField.setValueXPath("countryCode/code");
        DataSourceTextField countryNameField = new DataSourceTextField("countryName", "Country");
        countryNameField.setRequired(true);
        DataSourceTextField capitalField = new DataSourceTextField("capital", "Capital");
        DataSourceTextField governmentField = new DataSourceTextField("government", "Government", 500);
        DataSourceBooleanField memberG8Field = new DataSourceBooleanField("member_g8", "G8");
        DataSourceTextField continentField = new DataSourceTextField("continent", "Continent");
        continentField.setValueMap("Europe", "Asia", "North America", "Australia/Oceania", "South America", "Africa");
        DataSourceDateField independenceField = new DataSourceDateField("independence", "Nationhood");
        DataSourceFloatField areaField = new DataSourceFloatField("area", "Area (kmē)");
        DataSourceIntegerField populationField = new DataSourceIntegerField("population", "Population");
        DataSourceFloatField gdpField = new DataSourceFloatField("gdp", "GDP ($M)");
        DataSourceLinkField articleField = new DataSourceLinkField("article", "Info");
        setFields(pkField, countryCodeField, countryNameField, capitalField, governmentField,
                memberG8Field, continentField, independenceField, areaField, populationField,
                gdpField, articleField);
        setDataURL("country.data.xml");
        setClientOnly(true);
    }
}
Code:
	
	<List>
<country>
    <continent>North America</continent>
    <countryName>United States</countryName>
    <countryCode>
        <code>US</code>
    </countryCode>
    <area>9631420</area>
    <population>298444215</population>
    <gdp>12360000</gdp>
    <independence>1776-07-04</independence>
    <government>federal republic</government>
    <government_desc>2</government_desc>
    <capital>Washington, DC</capital>
    <member_g8>true</member_g8>
    <article>http://en.wikipedia.org/wiki/United_states</article>
</country>
<country>
    <continent>Asia</continent>
    <countryName>China</countryName>
    <countryCode>
        <code>CH</code>
    </countryCode>
    <area>9596960</area>
    <population>1313973713</population>
    <gdp>8859000</gdp>
    <government>Communist state</government>
    <government_desc>0</government_desc>
    <capital>Beijing</capital>
    <member_g8>false</member_g8>
    <article>http://en.wikipedia.org/wiki/China</article>
</country>
<country>
    <continent>Asia</continent>
    <countryName>Japan</countryName>
    <countryCode>
        <code>JA</code>
    </countryCode>
    <area>377835</area>
    <population>127463611</population>
    <gdp>4018000</gdp>
    <government>constitutional monarchy with parliamentary government</government>
    <government_desc>1</government_desc>
    <capital>Tokyo</capital>
    <member_g8>true</member_g8>
    <article>http://en.wikipedia.org/wiki/Japan</article>
</country>
<country>
    <continent>Asia</continent>
    <countryName>India</countryName>
    <countryCode>
        <code>IN</code>
    </countryCode>
    <area>3287590</area>
    <population>1095351995</population>
    <gdp>3611000</gdp>
    <independence>1947-08-15</independence>
    <government>federal republic</government>
    <government_desc>2</government_desc>
    <capital>New Delhi</capital>
    <member_g8>false</member_g8>
    <article>http://en.wikipedia.org/wiki/India</article>
</country>
<country>
    <continent>Europe</continent>
    <countryName>Germany</countryName>
    <countryCode>
        <code>GM</code>
    </countryCode>
    <area>357021</area>
    <population>82422299</population>
    <gdp>2504000</gdp>
    <independence>1871-01-18</independence>
    <government>federal republic</government>
    <government_desc>2</government_desc>
    <capital>Berlin</capital>
    <member_g8>true</member_g8>
    <article>http://en.wikipedia.org/wiki/Germany</article>
</country>
<country>
    <continent>Europe</continent>
    <countryName>United Kingdom</countryName>
    <countryCode>
        <code>UK</code>
    </countryCode>
    <area>244820</area>
    <population>60609153</population>
    <gdp>1830000</gdp>
    <independence>1801-01-01</independence>
    <government>constitutional monarchy</government>
    <government_desc>1</government_desc>
    <capital>London</capital>
    <member_g8>true</member_g8>
    <article>http://en.wikipedia.org/wiki/United_kingdom</article>
</country>
<country>
    <continent>Europe</continent>
    <countryName>France</countryName>
    <countryCode>
        <code>FR</code>
    </countryCode>
    <area>547030</area>
    <population>60876136</population>
    <gdp>1816000</gdp>
    <government>republic</government>
    <government_desc>5</government_desc>
    <capital>Paris</capital>
    <member_g8>true</member_g8>
    <article>http://en.wikipedia.org/wiki/France</article>
</country>
<country>
    <continent>Europe</continent>
    <countryName>Italy</countryName>
    <countryCode>
        <code>IT</code>
    </countryCode>
    <area>301230</area>
    <population>58133509</population>
    <gdp>1698000</gdp>
    <independence>1861-03-17</independence>
    <government>republic</government>
    <government_desc>5</government_desc>
    <capital>Rome</capital>
    <member_g8>true</member_g8>
    <article>http://en.wikipedia.org/wiki/Italy</article>
</country>
<country>
    <continent>Asia</continent>
    <countryName>Russia</countryName>
    <countryCode>
        <code>RS</code>
    </countryCode>
    <area>17075200</area>
    <population>142893540</population>
    <gdp>1589000</gdp>
    <independence>1991-08-24</independence>
    <government>federation</government>
    <government_desc>3</government_desc>
    <capital>Moscow</capital>
    <member_g8>true</member_g8>
    <article>http://en.wikipedia.org/wiki/Russia</article>
</country>
<country>
    <continent>South America</continent>
    <countryName>Brazil</countryName>
    <countryCode>
        <code>BR</code>
    </countryCode>
    <area>8511965</area>
    <population>188078227</population>
    <gdp>1556000</gdp>
    <independence>1822-09-07</independence>
    <government>federative republic</government>
    <government_desc>3</government_desc>
    <capital>Brasilia</capital>
    <member_g8>false</member_g8>
    <article>http://en.wikipedia.org/wiki/Brazil</article>
</country>
<country>
    <continent>North America</continent>
    <countryName>Canada</countryName>
    <countryCode>
        <code>CA</code>
    </countryCode>
    <area>9984670</area>
    <population>33098932</population>
    <gdp>1114000</gdp>
    <independence>1867-07-01</independence>
    <government>constitutional monarchy with parliamentary democracy and federation</government>
    <government_desc>1</government_desc>
    <capital>Ottawa</capital>
    <member_g8>true</member_g8>
    <article>http://en.wikipedia.org/wiki/Canada</article>
</country>
<country>
    <continent>North America</continent>
    <countryName>Mexico</countryName>
    <countryCode>
        <code>MX</code>
    </countryCode>
    <area>1972550</area>
    <population>107449525</population>
    <gdp>1067000</gdp>
    <independence>1810-09-16</independence>
    <government>federal republic</government>
    <government_desc>2</government_desc>
    <capital>Mexico (Distrito Federal)</capital>
    <member_g8>false</member_g8>
    <article>http://en.wikipedia.org/wiki/Mexico</article>
</country>
<country>
    <continent>Europe</continent>
    <countryName>Spain</countryName>
    <countryCode>
        <code>SP</code>
    </countryCode>
    <area>504782</area>
    <population>40397842</population>
    <gdp>1029000</gdp>
    <independence>1492-01-01</independence>
    <government>parliamentary monarchy</government>
    <government_desc>4</government_desc>
    <capital>Madrid</capital>
    <member_g8>false</member_g8>
    <article>http://en.wikipedia.org/wiki/Spain</article>
</country>
<country>
    <continent>Asia</continent>
    <countryName>South Korea</countryName>
    <countryCode>
        <code>KS</code>
    </countryCode>
    <area>98480</area>
    <population>48846823</population>
    <gdp>965300</gdp>
    <independence>1945-08-15</independence>
    <government>republic</government>
    <government_desc>5</government_desc>
    <capital>Seoul</capital>
    <member_g8>false</member_g8>
    <article>http://en.wikipedia.org/wiki/South_korea</article>
</country>
<country>
    <continent>Asia</continent>
    <countryName>Indonesia</countryName>
    <countryCode>
        <code>ID</code>
    </countryCode>
    <area>1919440</area>
    <population>245452739</population>
    <gdp>865600</gdp>
    <independence>1945-08-17</independence>
    <government>republic</government>
    <government_desc>5</government_desc>
    <capital>Jakarta</capital>
    <member_g8>false</member_g8>
    <article>http://en.wikipedia.org/wiki/Indonesia</article>
</country>
</List>
Now select any cell in Code column and paste changed value - this is NOT working.
The problem lays in datasource.recordsFromText() method, backed with JavaScript function with the same name. That one is using dataSource.validateJSONRecord(). Unfortunately it tries to process as follows:
validateJSONRecord : function (record) {
...
if (field.valueXPath) {
fieldValue = isc.xml.selectObjects(record, field.valueXPath, true);
} else {
fieldValue = record[fieldName];
}
and finds always "undef" value in case of valueXPath field.
MichalG

Comment