Hi Isomorphic,
I have a problem that started to happen after the release of v12.0p_2019-10-30/PowerEdition Deployment (built 2019-10-30) - it's not happening in 2019-10-29!.

Button is not recreated after update. Method "updateRecordComponent" is not called at all.
Unfortunately I was unable to reproduce this problem in built-in-ds.
But my code looks like:
	Bug doesn't appear in two cases:
-If I remove "setGroupValueFunction"
-If button is visible to all records
I hope you have enough information to detect the problem.
Best regards
Pavo
							
						
					I have a problem that started to happen after the release of v12.0p_2019-10-30/PowerEdition Deployment (built 2019-10-30) - it's not happening in 2019-10-29!.
Button is not recreated after update. Method "updateRecordComponent" is not called at all.
Unfortunately I was unable to reproduce this problem in built-in-ds.
But my code looks like:
Code:
	
	package com.smartgwt.sample.client;
import com.smartgwt.client.types.GroupStartOpen;
import com.smartgwt.client.types.RecordComponentPoolingMode;
import com.smartgwt.client.widgets.Canvas;
import com.smartgwt.client.widgets.IButton;
import com.smartgwt.client.widgets.grid.GroupValueFunction;
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.events.RecordDoubleClickEvent;
import com.smartgwt.client.widgets.grid.events.RecordDoubleClickHandler;
public class ListGridCustom extends ListGrid {
    private String buttonField;
    private String categoryGroupByField = "category";
    public ListGridCustom() {
        setDataSource("supplyItem");
        setShowRecordComponents(true);
        setShowRecordComponentsByCell(true);
        setRecordComponentPoolingMode(RecordComponentPoolingMode.RECYCLE);
        setPoolComponentsPerColumn(true);
        setRecordComponentHeight(22);
        setCanGroupBy(false);
        setCanReorderFields(true);
        setGroupStartOpen(GroupStartOpen.ALL);
        setSortByGroupFirst(true);
        setAllowFilterExpressions(true);
        setGroupByField(categoryGroupByField);
        addRecordDoubleClickHandler(new RecordDoubleClickHandler() {
            @Override
            public void onRecordDoubleClick(RecordDoubleClickEvent event) {
                // Open window
                // Update datasource "yyyy". That update changes some values of "supplyItem"
                // Update response to datasource "yyyy" is returned and it contains related update to "supplyItem".
            }
        });
        ListGridField itemNameLGF = new ListGridFieldGroupBy("itemName");
        ListGridField categoryLGF = new ListGridFieldGroupBy(categoryGroupByField);
        // Many fields....
        setFields(itemNameLGF, categoryLGF);
    }
    @Override
    protected String getCellCSSText(ListGridRecord record, int rowNum, int colNum) {
        // Many if-else conditions....
        if (!WidgetUsed.canSeeButton(record))
            return "gray";
        else
            return super.getCellCSSText(record, rowNum, colNum);
    }
    @Override
    protected Canvas createRecordComponent(ListGridRecord record, Integer colNum) {
        return updateRecordComponent(record, colNum, null, true);
    }
    @Override
    public Canvas updateRecordComponent(ListGridRecord record, Integer colNum, Canvas component, boolean recordChanged) {
        if (record.getIsGroupSummary())
            return null;
        String fieldName = this.getFieldName(colNum);
        if (buttonField.equals(fieldName) && WidgetUsed.canSeeButton(record)) {
            return new IButton();// ......
        }
        // TODO Auto-generated method stub
        return super.updateRecordComponent(record, colNum, component, recordChanged);
    }
    private class ListGridFieldGroupBy extends ListGridField {
        public ListGridFieldGroupBy(String name) {
            super(name);
            setGroupValueFunction(new GroupValueFunction() {
                @Override
                public Object getGroupValue(Object value, ListGridRecord record, ListGridField field, String fieldName, ListGrid grid) {
                    // Many if-else conditions...
                    return null;
                }
            });
        }
    }
}
class WidgetUsed {
    public static boolean canSeeButton(ListGridRecord r) {
        // If-else...
        return true;
    }
}
-If I remove "setGroupValueFunction"
-If button is visible to all records
I hope you have enough information to detect the problem.
Best regards
Pavo
Comment