You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:使用PXDatabase.Delete删除自定义表数据未触发数据库操作

解决PXDatabase.Delete在TestSDK中无SQL请求的问题

针对你在TestSDK环境下使用PXDatabase.Delete删除自定义表SSINHoldRule行但未触发SQL请求的问题,按以下步骤排查:

  • 先确认目标数据是否存在
    先执行查询验证是否有inventoryID=18的记录,无匹配数据自然不会触发删除SQL:

    var existingRule = PXSelect<SSINHoldRule, Where<SSINHoldRule.inventoryID, Equal<Required<SSINHoldRule.inventoryID>>>>.Select(Base, 18);
    if (existingRule == null)
    {
        return;
    }
    
  • 修正PXDatabase.Delete的用法
    你当前用PXDataFieldRestrict的写法可能不符合预期,试试指定字段类型的写法或更简洁的筛选式删除:

    // 指定字段数据类型的写法
    PXDatabase.Delete<SSINHoldRule>(new PXDataFieldRestrict<SSINHoldRule.inventoryID>(PXDbType.Int, 18));
    // 或直接用条件筛选的删除方式
    PXSelect<SSINHoldRule, Where<SSINHoldRule.inventoryID, Equal<Required<SSINHoldRule.inventoryID>>>>.Delete(Base, 18);
    
  • 检查TestSDK的事务提交逻辑
    TestSDK默认自动管理事务,若代码在未提交的事务中执行,SQL探查器可能看不到最终操作。可以手动强制提交:

    using (var ts = new PXTransactionScope())
    {
        PXDatabase.Delete<SSINHoldRule>(new PXDataFieldRestrict<SSINHoldRule.inventoryID>(18));
        ts.Complete(); // 手动提交事务
    }
    
  • 验证TestSDK的数据库连接上下文
    确认TestSDK配置的数据库连接字符串指向你预期的数据库,避免因连接到测试空库导致无操作。

  • 尝试直接删除实体对象
    先查询到目标记录,再通过实体对象执行删除:

    var ruleToDelete = PXSelect<SSINHoldRule, Where<SSINHoldRule.inventoryID, Equal<Required<SSINHoldRule.inventoryID>>>>.SelectSingleBound(Base, null, 18);
    if (ruleToDelete != null)
    {
        PXDatabase.Delete(ruleToDelete);
    }
    

内容的提问来源于stack exchange,提问作者mbargar13

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 03:40:34