带$ expand的OData不起作用

时间:2018-07-20 21:06:00

标签: odata sapui5

我尝试在视图xml中使用$ expand参数,但是combobox不显示数据

enter image description here

        <Text text="ID_PLANNING"/>
        <ComboBox items="{path :'/T027_03s', parameters:{expand : 'T027Details'}}">
            <core:Item text="{T027Details/BEG_DATETIME}"/>
        </ComboBox>

从T027_03s表中$ expand T027Details时,链接.... / T027_03s?$ expand = T027Details

enter image description here

这是T027_03表的元数据,其导航属性为:T027Details

enter image description here

这是我在Java中创建实体的代码

  

@实体       公共类T027_03实现了可序列化的{

@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_T027_03")  
private Long ID_PERSONNEL_PLANNING;
private Integer ID_PERSONNEL;
private Long ID_PLANNING;
private static final long serialVersionUID = 1L;
[...]
@ManyToOne
@PrimaryKeyJoinColumn(name="ID_PLANNING")
private T027 T027;

public T027 getT027() {
    return this.T027;
}
public void setT027(T027 T027) {
    this.T027 = T027;
}
[...]
} 

在T027类中

  

@实体       公共类T027实现可序列化{

@Id 
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_T027")
private Long ID_PLANNING;
private Timestamp BEG_DATETIME;
[...]
private static final long serialVersionUID = 1L;

@OneToMany(mappedBy="T027")
private List<T027_03> T027_03S;

public List<T027_03> getT027_03S() {
    return this.T027_03S;
}
public void setT027_03S(List<T027_03> T027_03S) {
    this.T027_03S = T027_03S;
}

我见过同样的问题OData Model Not Working,但我不知道如何解决。他们的回应是添加“ RESULT”。但是我如何添加'RESULT'?

4 个答案:

答案 0 :(得分:1)

尝试在组合框项目键和文本中添加父实体名称

<core:Item key="{T027_03s/T027Details/ID_PLANNING}" text="{T027_03s/T027Details/ID_PLANNING}"/>

答案 1 :(得分:1)

您应在“项目”聚合中绑定多重性大于1的节点。扩展只会在您的请求中检索更多数据。但是仍然只有1个项目。

要解决此问题,请对节点“ T027_03s”执行elementBinding,然后对“ T027Details”进行aggregationBinding,如下所示:

<ComboBox binding="{path:'/T027_03s', parameters:'expand:T027Details'}" items="{T027Details}">
    <core:Item text="{ID_PLANNING}" key="{ID_PLANNING}"></core:Item>
</ComboBox>

答案 2 :(得分:1)

好像您正在尝试访问 "{% url 'projects' projectid=project.id stepno=step.step_no %}" 实体类型的属性(ID_PLANNING)。

如果您将T027_03s项绑定为以下形式:

ComboBox

您应该看到<ComboBox items="{path :'/T027_03s', parameters:{expand : 'T027Details'}}"> <core:Item key="{ID_PLANNING}" text="{ID_PLANNING}"/> </ComboBox> 实体集的结果

但是... 如果您希望在T027_03s上显示属性,则只要您要绑定T027Details实体类型的有效属性,绑定语法就应该可以使用。

换句话说,如果您想显示一个有效的属性T027Details,它是T027_03s中每个条目的DETAIL_PROPERTY实体集合的一部分,您可以这样做:

T027Details

答案 3 :(得分:1)

我的解决方案已被解决。我已将 @Cache(isolation = CacheIsolationType.ISOLATED) 添加到T027表

import org.eclipse.persistence.annotations.Cache;
import org.eclipse.persistence.config.CacheIsolationType;

@Id 
@Cache(isolation=CacheIsolationType.ISOLATED)
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="SEQ_T027")
private Long ID_PLANNING;
private Timestamp BEG_DATETIME;
[...]
private static final long serialVersionUID = 1L;

@OneToMany(mappedBy="T027",cascade =CascadeType.ALL, fetch = FetchType.EAGER)
private List<T027_03> T027_03S;

Here是我找到的解决方案

致谢。