0

我有几个相关的域类,我试图弄清楚如何实现依赖于多个域的约束。问题的要点是:

资产有许多容量池对象

Asset 有很多 Resource 对象

当我创建/编辑资源时,需要检查资产的总资源是否超过容量。

我创建了一个服务方法来完成这个,但是这不应该通过资源域中的验证器来完成吗?我的服务等级如下:

    def checkCapacityAllocation(Asset asset, VirtualResource newItem) {     

// Get total Resources allocated from "asset"
        def allAllocated = Resource.createCriteria().list() {
            like("asset", asset)
        }
        def allocArray = allAllocated.toArray()
        def allocTotal=0.0
        for (def i=0; i<allocArray.length; i++) {
            allocTotal = allocTotal.plus(allocArray[i].resourceAllocated)
        }


// Get total capacities for "asset"
        def allCapacities = AssetCapacity.createCriteria().list() {
            like("asset", asset)

        }
        def capacityArray = allCapacities.toArray()
        def capacityTotal = 0.0
        for (def i=0; i<capacityArray.length; i++) {
            capacityTotal += capacityArray[i].actualAvailableCapacity
        }

        if (allocTotal > capacityTotal) {
           return false
        }
    }
    return true
}

我遇到的问题是使用这种方法进行验证。我正在使用 JqGrid 插件(带有内联编辑)并且错误报告是有问题的。如果我可以在域中进行这种类型的验证,它会让事情变得容易得多。有什么建议么?

非常感谢!

4

2 回答 2

0

怎么样:

def resourceCount = Resource.countByAsset(assetId)
def assetCapacityCount = AssetCapacity.countByAsset(assetId)
if(resourceCount < assetCapacityCount) return true
return false

高温高压

于 2012-07-24T00:51:58.613 回答
0

要将 service 方法用作验证器,您需要将服务注入您的域,然后添加调用它的自定义验证器。我认为它看起来像这样:

class Asset {

    def assetService

    static hasMany = [resources: Resource]

    static constraints = {
        resources(validator: { val, obj ->
            obj.assetService.checkCapacityAllocation(obj, val)
        })
    }
}
于 2012-07-24T03:07:28.350 回答