avicdev 发表于 2022-11-10 11:40:44

【15,1,1】关于自定义命令的事务控制问题(SJS-16015)

本帖最后由 Lynn.Dou 于 2022-11-28 12:28 编辑

【15,1,1】自定义命令,挂载到内置的右键菜单上,命令处理逻辑中如何控制事务,使得撤销操作时能够还原执行该命令的所有操作

如下场景,要在撤销操作时同步撤销操作1、操作2,应该如何实现?另外代码最后的return true;有什么作用?
execute: async function (context, options, isUndo) {
    console.log({context, options, isUndo})
      var Commands = GC.Spread.Sheets.Commands;
      if (isUndo) {
          Commands.undoTransaction(context, options);
          return true;
      } else {
          Commands.startTransaction(context, options);
          const {row, rowCount} = options.selections[0]

          // 操作1
          sheet.removeCustomName(nameX)
          // 操作2
          sheet.deleteRows(row, rowCount)

          Commands.endTransaction(context, options);
          return true;
      }
}





xcymoo 发表于 2022-11-10 13:56:41

请您确认一下 是否设置了canUndo属性?
https://demo.grapecity.com.cn/spreadjs/help/api/classes/GC.Spread.Commands.CommandManager#register

avicdev 发表于 2022-11-10 14:17:09

本帖最后由 avicdev 于 2022-11-10 14:19 编辑

xcymoo 发表于 2022-11-10 13:56
请您确认一下 是否设置了canUndo属性?
https://demo.grapecity.com.cn/spreadjs/help/api/classes/GC.Spr ...
设置了true

撤销的时候,deleteRows撤销了,removeCustomName没撤销

xcymoo 发表于 2022-11-10 15:30:08

本帖最后由 Lynn.Dou 于 2022-12-20 15:48 编辑

avicdev 发表于 2022-11-10 14:17
设置了true

撤销的时候,deleteRows撤销了,removeCustomName没撤销
你好,问题已复现,我研究了一下,目前撤销操作是不支持撤销自定义名称的,撤销只能面向用户对单元格的操作。
这边已将此问题记录下来做进一步的调研,如果有进展在贴中通知您。
您可以考虑在if(isUndo)里面把这个名称再加回来,先尝试实现您的需求。

Lynn.Dou 发表于 2022-12-20 15:48:13

更新进展:
经调研确认,目前SpreadJS撤销操作不支持撤销自定义名称,建议您先参考楼上方案。
页: [1]
查看完整版本: 【15,1,1】关于自定义命令的事务控制问题(SJS-16015)