LookupField с отношением один ко многим - PullRequest
0 голосов
/ 30 мая 2018

Я хочу показать в своем документе отношение один ко многим - простой раскрывающийся список со значениями.Для этого я пытаюсь создать и настроить LookupField компонент с использованием Куба платформы .

У меня есть две сущности:

CardItem:

@NamePattern("The document in the following state: %s|cardState")
@Table(name = "TKB_CARD_ITEM")
@Entity(name = "tkb$CardItem")
public class CardItem extends StandardEntity {

    // skipped

CardType:

@NamePattern("CardType: %s, %s |cardTypeItem, cardTypeName")
@Table(name = "TKB_CARD_TYPE")
@Entity(name = "tkb$CardType")
public class CardType extends StandardEntity {

    @OneToMany(targetEntity=CardItem.class )
    private List<CardItem> cardItems;

    // skipped

В моем card-item-edit.xml у меня есть следующее:

<dsContext>
    <datasource id="CardItemDs" class="com.company.tkb.entity.CardItem" view="_local"/>
    <collectionDatasource id="CardTypeDs" class="com.company.tkb.entity.CardType" view="_local">
        <query>select c from tkb$CardType c</query>
    </collectionDatasource>
</dsContext>
<layout>
    <lookupField datasource="CardItemDs" property="cardTypeName" optionsDatasource="CardTypeDs"/>

Я заполнил таблицу TKB_CARD_TYPE некоторыми значениями.Теперь я пытаюсь получить раскрывающийся список со значениями при создании CardItem, но список пуст.

В чем может быть проблема?

Я был бы очень признателен заИнформация.Спасибо всем.

1 Ответ

0 голосов
/ 30 мая 2018

Что помогло:

В CardItemEdit классе я добавил следующее:

public class CardItemEdit extends AbstractEditor<CardItem> {
    @Inject
    private Datasource<CardItem> cardItemDs;

    @Inject
    private Metadata metadata;

    @Override
    public void init(Map<String, Object> params) {
        CardItem cardItem = metadata.create(CardItem.class);
        cardItemDs.setItem(cardItem);
    }   
}

Затем я изменил направление отношений: часть моей CardItem сущности:

@NamePattern("The document in the following state: %s|cardState")
@Table(name = "TKB_CARD_ITEM")
@Entity(name = "tkb$CardItem")
public class CardItem extends StandardEntity {

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "CARD_TYPE_ID")
    protected CardType cardType;

    // skipped

Часть моей CardType сущности:

@NamePattern("Тип входящего документа: %s | cardTypeName")
@Table(name = "TKB_CARD_TYPE")
@Entity(name = "tkb$CardType")
public class CardType extends StandardEntity {

    // skipped

Я определил dsContext и lookupField следующим образом:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<window xmlns="http://schemas.haulmont.com/cuba/window.xsd"
        caption="msg://editCaption"
        class="com.tkbbank.client.web.item.CardItemEdit"
        datasource="cardItemDs"
        focusComponent="fieldGroup"
        messagesPack="com.tkbbank.client.web.item">

     <dsContext>
        <datasource id="cardItemDs" class="com.tkbbank.client.entity.CardItem" allowCommit="false"/>
            <collectionDatasource id="cardTypeDs" class="com.tkbbank.client.entity.CardType" view="_local">
            <query>
                <![CDATA[select e from demo$CardType e]]>
            </query>
        </collectionDatasource>
    </dsContext>


    <dialogMode forceDialog="true" width="AUTO"/>
    <layout expand="windowActions" spacing="true">
        <fieldGroup id="fieldGroup" datasource="cardItemDs">
            <column width="500px">
                <field id="cardCreationDate" editable="false"/>
                <field id="cardType" caption="Тип документа">
                    <lookupField datasource="cardItemDs" property="cardType" optionsDatasource="cardTypeDs"/>
                </field>
                <field id="cardSubtype"/>
                <field id="cardAutoFill"/>
                <field id="cardOutcomeNumber"/>
                <field id="cardDate"/>
                <field id="cardOrganization"/>
                <field id="cardDeliveryMethod"/>
                <field id="cardAdditionalInformation"/>
                <field id="registratorName"/>
            </column>
        </fieldGroup>
        <frame id="windowActions" screen="editWindowActions"/>
    </layout>
</window>

Что я вижусейчас.Моя карта:

enter image description here

Интерфейс для заполнения CardType данными:

enter image description here

Интерфейс просмотра всех документов:

enter image description here

Теперь все в порядке.

Боковые: очень полезные вопросы о «Can»исключение «найти геттер для свойства» (эта ошибка также появляется):

...