groovy Grails 5 -有没有办法找出域属性在Map中是否有公式

juud5qan  于 2023-08-02  发布在  其他
关注(0)|答案(1)|浏览(119)

我有一个特殊的场景,需要知道我的一个域对象属性在静态Map中是否有一个公式。
如果有一种方法可以做到这一点,那就太好了,但经过几个小时的挖掘,我无法找到任何有用的东西,而不是私人的。
有没有什么方法可以得到静态Map来进行迭代?
或获取特定属性是否正在使用公式?

2q5ifsrm

2q5ifsrm1#

我想出了如何得到公式,虽然它是相当多的工作比我觉得它应该是。我发现的每一个可以使它更简洁的属性都被封装了。
因此,我决定利用Groovy的运行时元编程支持向应用程序的Domain类添加动态方法。
我已经把它放在Plugin.groovy文件的doWithApplicationContext()中,但是如果您不是在使用插件,它应该可以在Bootstrap.groovy中工作。

def grailsApplication
grailsApplication.domainClasses.each { domain ->
    /**
     * Find out if a Domain property is mapped with a formula.
     *
     * @param String property
     * @return Boolean
     *
     */
    domain.metaClass.static.isFormula = { String property ->
        def classPath = delegate.toString().replace("class", "").trim()
            return grailsApplication.getMappingContext()
                .getPersistentEntity(classPath)
                .propertiesByName[property]
                .propertyMapping
                .mappedForm
                .formula
                ?.size() > 0
    }
    /**
     * Get a Domain property's formula. Returns null if no formula is found.
     *
     * @param String property
     * @return String
     *
     */
    domain.metaClass.static.getFormula = { String property ->
        def classPath = delegate.toString().replace("class", "").trim()
            return grailsApplication.getMappingContext()
                .getPersistentEntity(classPath)
                    .propertiesByName[property]
                    .propertyMapping
                    .mappedForm
                    .formula ?: null
    }
}

字符串
要使用它们,您可以静态地从域类中调用它们。

import your.app.Payment

if (Payment.isFormula("transactionType")) {
    String formula = Payment.getFormula("transactionType")
}

相关问题