首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ISML isDefined()在字段中返回包含值的false altough对象

ISML isDefined()在字段中返回包含值的false altough对象
EN

Stack Overflow用户
提问于 2018-06-15 14:52:09
回答 2查看 292关注 0票数 2

我正在创建一个ISML模块,我将向其传递一个ProductBO实例。在前面提到的模块中,我尝试获取OutgoingProductLinks字段,我看到它被BackOffice中定义的正确值填充,但是当在该字段上调用isDefined()时,它返回false,当我试图在<isloop>标记中使用该字段时,它记录的错误消息如下:

循环迭代器标识符'#ProductBO:ExtensibleObject:OutgoingProductLinks#‘没有指定有效的迭代器。

我正在处理的具体项目是基于app_sf_responsive示例的,因此它使用了它的ViewProduct管道(在其他墨盒中不是过激的),它返回在其他几个地方使用的ProductBO对象,在那里使用的字段通常可以在ISML中使用。

以下代码段总是返回false:

代码语言:javascript
复制
<isif condition="#isDefined(ProductBO:ExtensibleObject:OutgoingProductLinks)#" >
   <h1>Outgoing product links are defined</h1>
<iselse>
   <h1 style="color: red;">Outgoing product links are NOT defined </h1>
</isif>

这就是我试着使用上述字段的地方:

代码语言:javascript
复制
<isloop iterator="#ProductBO:ExtensibleObject:OutgoingProductLinks#" alias="ProductLink">
//Code that uses linked products
</isloop>

请注意,isDefined()检查ProductBO和ExtensibleObject都有效,问题只在OutgoingProductLinks中出现

编辑:这是调试器显示产品链接的屏幕截图

调试器显示有效的产品链接值

EN

回答 2

Stack Overflow用户

发布于 2018-06-16 11:54:17

当我看到你的对象路径

代码语言:javascript
复制
ProductBO:ExtensibleObject:OutgoingProductLinks

我可以看到,您正在尝试访问底层持久对象的API。这很好,但是要确保您使用的是名为BOExtension的PersistentObjectBOExtension。因此,代替上面的用法:

代码语言:javascript
复制
ProductBO:Extension("PersistentObjectBOExtension"):PersistentObject:OutgoingProductLinks

此外,还有一个ISML函数,它检查对象路径是否表示可迭代对象:使用hasLoopElements(iterable)而不是isDefined(obj)

给出你的例子,整件事应该写成这样:

代码语言:javascript
复制
<isif condition="#hasLoopElements(ProductBO:Extension("PersistentObjectBOExtension"):PersistentObject:OutgoingProductLinks)#" >
   <h1>Outgoing product links are defined</h1>
<iselse>
   <h1 style="color: red;">Outgoing product links are NOT defined </h1>
</isif>
票数 3
EN

Stack Overflow用户

发布于 2018-06-20 08:41:06

或者,您也可以这样做以检索特定传出链接类型的产品:

代码语言:javascript
复制
<!--- Retrieve the Cross Sell products --->
<isset name="LinkedProductBOs" value="#ProductBO:SortedOutgoingProductBOLinks("ES_CrossSelling")#" scope="request"/>

<isif condition="#isDefined(LinkedProductBOs) AND hasElements(LinkedProductBOs)#">
    <isloop iterator="LinkedProductBOs" alias="LinkedProductBO">
        <isprint value="#LinkedProductBO:DisplayName#"/>
    </isloop>
</isif>

getSortedOutgoingProductBOLinks方法以一个链接id作为参数。所有默认的产品链接都可以在ProductLinkConstants.java中找到

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50877992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档