0

我想在后台创建一个报告定义项目,它将检索一些列。查询需要像这样才能检索我需要的内容:

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

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

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

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

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

4

2 回答 2

2

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

您可以通过以下步骤进行操作。

<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>标签中的位置和类型。

于 2021-03-03T11:29:12.273 回答
1

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

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);
于 2021-03-02T04:01:06.590 回答