SmartClient Version: v13.1p_2025-02-24/Enterprise Development Only (built 2025-02-24)
Hello, I think that I've found a bug in automatic cache synchronization when using queueing.
Please modify the fetchOperationFS sample like this:
Then, select a record and click the "Custom Update" button. This will create a queue, where the 2nd request is an update with an operationId and a cacheSyncOperation. Both operationIds are different from the grid's fetchOperation and the updateOperation. Nevertheless it seems that the framework is using the returned record to update the client cache.
Hello, I think that I've found a bug in automatic cache synchronization when using queueing.
Please modify the fetchOperationFS sample like this:
Code:
<DataSource isSampleDS="true" ID="supplyItem" serverType="sql" tableName="supplyItem" titleField="itemName" testFileName="/examples/shared/ds/test_data/supplyItem.data.xml" dbImportFileName="/examples/shared/ds/test_data/supplyItemLarge.data.xml" > <fields> <field name="itemID" type="sequence" hidden="true" primaryKey="true"/> <field name="itemName" type="text" title="Item" length="128" required="true"/> <field name="SKU" type="text" title="SKU" length="10" required="true"/> <field name="description" type="text" title="Description" length="2000"/> <field name="category" type="text" title="Category" length="128" required="true" foreignKey="supplyCategory.categoryName"/> <field name="units" type="enum" title="Units" length="5"> <valueMap> <value>Roll</value> <value>Ea</value> <value>Pkt</value> <value>Set</value> <value>Tube</value> <value>Pad</value> <value>Ream</value> <value>Tin</value> <value>Bag</value> <value>Ctn</value> <value>Box</value> </valueMap> </field> <field name="unitCost" type="float" title="Unit Cost" required="true"> <validators> <validator type="floatRange" min="0" errorMessage="Please enter a valid (positive) cost"/> <validator type="floatPrecision" precision="2" errorMessage="The maximum allowed precision is 2"/> </validators> </field> <field name="inStock" type="boolean" title="In Stock"/> <field name="nextShipment" type="date" title="Next Shipment"/> </fields> <operationBindings> <operationBinding operationId="firstFetch" operationType="fetch" /> </operationBindings> <operationBindings> <operationBinding operationId="firstUpdate" operationType="update" /> </operationBindings> <operationBindings> <operationBinding operationId="secondFetch" operationType="fetch" outputs="itemName, itemID" /> </operationBindings> <operationBindings> <operationBinding operationId="secondUpdate" operationType="update" cacheSyncOperation="secondFetch" /> </operationBindings> </DataSource>
Code:
isc.ListGrid.create({ ID: "dsListGrid", top: 40, width: "100%", height: "100%", autoFetchData: true, dataSource: "supplyItem", fetchOperation: "firstFetch", updateOperation: "firstUpdate", canEdit: true }); isc.IButton.create({ ID: "customUpdate", title: "Custom Update", click: function () { isc.RPCManager.startQueue(); dsListGrid.refreshData(); var record = dsListGrid.getSelectedRecord() supplyItem.updateData({itemID: record.itemID, nextShipment: new Date()}, null, {operationId: "secondUpdate"}) isc.RPCManager.sendQueue(function (responses) { }); } })
Then, select a record and click the "Custom Update" button. This will create a queue, where the 2nd request is an update with an operationId and a cacheSyncOperation. Both operationIds are different from the grid's fetchOperation and the updateOperation. Nevertheless it seems that the framework is using the returned record to update the client cache.
Comment