灵活搜索检查报告定义 Hybris

问题描述

我想在后台创建一个报告定义项,以检索一些列。查询需要像这样来检索我需要的内容

SELECT {a},{b},{c} FROM {model} WHERE {d} IS NULL AND {e} IS NULL

所有值 (a,b...e) 都是字符串。我想参数化 {d}{e} 列,但我希望能够准确搜索我之前编写的查询。 我开始做类似的事情:

SELECT {a},{c} FROM {model} WHERE {d}=?dStatus AND {e}=?eStatus

dStatuseStatus 参数是 java.lang.String 类型,但这不起作用。

是否可以使用参数化的 {d} 和 {e} 列进行这个灵活的搜索查询,以在报告定义中搜索空值?

解决方法

嗨,如果您想将报告定义参数化,这是可能的。

您可以通过以下步骤来完成。

<itemtype code="testBasicOrderEntryReport" extends="Item" metatype="ViewType"
                  jaloonly="true" jaloclass="de.hybris.platform.util.ViewResultItem" generate="false">
            <description>Basic Order Entry Report</description>
            <custom-properties>
                <property name="legacyPersistence">
                    <value>java.lang.Boolean.TRUE</value>
                </property>
                <property name="query">
                    <value>
                        " SELECT "
                        + "{BaseStore.name} AS country,"
                        + "{Order.code} AS orderCode,"
                        + "DATE({Order.date}) AS orderDate,"
                        + "{Product.code} AS productCode,"
                        + "{OrderEntry.quantity} AS qty,"
                        + "{OrderMargin.margin} AS CVR "
                        + "FROM { OrderEntry "
                        + "JOIN Order ON {OrderEntry.order} = {Order.pk} "
                        + "JOIN BaseStore ON {Order.store} = {BaseStore.pk} "
                        + "JOIN Product ON {OrderEntry.product} = {Product.pk} "
                        + "LEFT JOIN OrderMargin ON {OrderEntry.margin} = {OrderMargin.pk} "
                        + "} WHERE "
                        + "{Order.store}=?baseStoreParam "
                        + "AND "
                        + "{Order.date}&gt;=?orderStartDateParam "
                        + "AND "
                        + "{Order.date}&lt;=?orderEndDateParam "
                        + "AND "
                        + "{Order.versionID} is null "
                    </value>
                </property>
            </custom-properties>
            <attributes>
                <attribute qualifier="baseStoreParam" type="BaseStore" metatype="ViewAttributeDescriptor">
                    <persistence type="jalo"/>
                    <modifiers write="false" search="false" optional="false"/>
                    <custom-properties>
                        <property name="param">
                            <value>Boolean.TRUE</value>
                        </property>
                        <property name="position">
                            <value>Integer.valueOf(0)</value>
                        </property>
                    </custom-properties>
                </attribute>
                <attribute qualifier="orderStartDateParam" type="java.util.Date" metatype="ViewAttributeDescriptor">
                    <persistence type="jalo"/>
                    <modifiers write="false" search="false" optional="false"/>
                    <custom-properties>
                        <property name="param">
                            <value>Boolean.TRUE</value>
                        </property>
                        <property name="position">
                            <value>Integer.valueOf(1)</value>
                        </property>
                    </custom-properties>
                </attribute>
                <attribute qualifier="orderEndDateParam" type="java.util.Date" metatype="ViewAttributeDescriptor">
                    <persistence type="jalo"/>
                    <modifiers write="false" search="false" optional="false"/>
                    <custom-properties>
                        <property name="param">
                            <value>Boolean.TRUE</value>
                        </property>
                        <property name="position">
                            <value>Integer.valueOf(2)</value>
                        </property>
                    </custom-properties>
                </attribute>
                <attribute qualifier="country" type="java.lang.String" metatype="ViewAttributeDescriptor">
                    <persistence type="jalo"/>
                    <modifiers write="false" search="false" optional="false"/>
                    <custom-properties>
                        <property name="param">
                            <value>Boolean.FALSE</value>
                        </property>
                        <property name="position">
                            <value>Integer.valueOf(0)</value>
                        </property>
                    </custom-properties>
                </attribute>
                <attribute qualifier="orderCode" type="java.lang.String" metatype="ViewAttributeDescriptor">
                    <persistence type="jalo"/>
                    <modifiers write="false" search="false" optional="false"/>
                    <custom-properties>
                        <property name="param">
                            <value>Boolean.FALSE</value>
                        </property>
                        <property name="position">
                            <value>Integer.valueOf(1)</value>
                        </property>
                    </custom-properties>
                </attribute>
                <attribute qualifier="orderDate" type="java.lang.String" metatype="ViewAttributeDescriptor">
                    <persistence type="jalo"/>
                    <modifiers write="false" search="false" optional="false"/>
                    <custom-properties>
                        <property name="param">
                            <value>Boolean.FALSE</value>
                        </property>
                        <property name="position">
                            <value>Integer.valueOf(2)</value>
                        </property>
                    </custom-properties>
                </attribute>
                <attribute qualifier="productCode" type="java.lang.String" metatype="ViewAttributeDescriptor">
                    <persistence type="jalo"/>
                    <modifiers write="false" search="false" optional="false"/>
                    <custom-properties>
                        <property name="param">
                            <value>Boolean.FALSE</value>
                        </property>
                        <property name="position">
                            <value>Integer.valueOf(3)</value>
                        </property>
                    </custom-properties>
                </attribute>
                <attribute qualifier="qty" type="java.lang.Integer" metatype="ViewAttributeDescriptor">
                    <persistence type="jalo"/>
                    <modifiers write="false" search="false" optional="false"/>
                    <custom-properties>
                        <property name="param">
                            <value>Boolean.FALSE</value>
                        </property>
                        <property name="position">
                            <value>Integer.valueOf(4)</value>
                        </property>
                    </custom-properties>
                </attribute>
                <attribute qualifier="CVR" type="java.lang.Double" metatype="ViewAttributeDescriptor">
                    <persistence type="jalo"/>
                    <modifiers write="false" search="false" optional="false"/>
                    <custom-properties>
                        <property name="param">
                            <value>Boolean.FALSE</value>
                        </property>
                        <property name="position">
                            <value>Integer.valueOf(5)</value>
                        </property>
                    </custom-properties>
                </attribute>
            </attributes>
        </itemtype>

这里baseStoreParam,orderStartDateParam,orderEndDateParam是参数。

注意:根据预期的结果值和类型,我们需要在 <attributes> 标签中定义该属性的位置和类型。

,

您可以拆分原始查询及其条件

String query = "SELECT {a},{b},{c} FROM {model} WHERE {d} %s AND {e} %s";
String dStatusParam = "";
String eStatusParam = "";
if (null == dStatus) {
   dStatusParam = "IS NULL";
} else {
   dStatusParam = "= '" + dStatus + "'";
}
if (null == eStatus) {
   eStatusParam = "IS NULL";
} else {
   eStatusParam = "= '" + eStatus + "'";
}
query = String.format(query,dStatusParam,eStatusParam);