Intershop EDL-генератор кода не генерирует методы установки для объектов PO - PullRequest
0 голосов
/ 05 октября 2018

Это нормальное и ожидаемое поведение с генератором кода Intershop?Если, например, у вас есть следующий интерфейс Test.edl:

cartridge interface Test extends PersistentObject
{
    /*
     * Product ID
     */
    attribute productID : string required;

    /*
     * Test2 UUID
     */
    attribute test2UUID: uuid required;

    /**
     * Test2 relation
     */
    relation test2: Test2[1..1] readonly;

    /*
     * Product relation
     */
    relation product : Product[1..1] readonly;
}

cartridge interface Test2 extends PersistentObject
{
    relation test2values : Test[0..n] readonly;
}

и его объект PO:

orm class TestPO extends PersistentObjectPO implements Test table "Test"
{
     /**
     * Declare alternate key.
     */
    alternate key (test2UUID, productID, domainID);

    /**
     * Holds link to test2.
     */
    attribute test2UUID: uuid required;

    /**
     * Holds link to product.
     */
    attribute productID : uuid required;

    /**
     * Relation to test2 PO
     */
    relation test2PO : Test2PO[1..1] inverse testPOs implements test2 readonly 
    {
        foreign key(test2UUID) -> (UUID);
    }

    /**
     * Relation to product PO
     */
    dependency product : ProductPO
    {
        foreign key(productID);
    }

}

orm class Test2PO extends PersistentObjectPO implements Test2 table "Test2" {
    /**
     * Discount values relation
     */
    relation testPOs : TestPO[0..n] inverse test2PO implements test2values delete default;
}

Теперь, если вы генерируете код как для интерфейса, так и для класса orm.Вы попадете в интерфейс Test.java с методом setTest2UUID (String aValue), но реализация TestPO.java будет сгенерирована без него и из-за следующей ошибки компилятора:

"Тип TestPO должен реализовывать унаследованный абстрактныйmethod Test.setTest2UUID (String) "

Мы что-то здесь не так делаем или это ошибка в Intershop Code Generator?

Спасибо за ваши ответы!

1 Ответ

0 голосов
/ 05 октября 2018

Атрибут test2UUID моделируется как необходимый.Насколько мне известно, это приведет к обязательному параметру операции создания сгенерированного фабричного класса.Если вы отметите SlotPageletAssignmentPO, он моделируется очень похоже.

orm class SlotPageletAssignmentPO extends PersistentObjectPO implements SlotPageletAssignment table "SlotPageletAssignment"
{
    attribute id : string<256> required readonly;

    attribute parentSlotID : uuid required;

    attribute subPageletID : uuid required;

    attribute validFrom : datetime;

    attribute validTo : datetime;

    attribute online : boolean;

    attribute position : double required;

    relation subPageletPO : PageletPO[1..1] inverse parentSlotPageletAssignmentPOs implements subPagelet readonly
    {
        foreign key(subPageletID) -> (UUID);
    }

    relation parentSlotPO : SlotPO[1..1] inverse slotSubPageletAssignmentPOs implements parentSlot readonly
    {
        foreign key(parentSlotID) -> (UUID);
    }

    relation placeholderPO : SlotPageletAssignmentPlaceholderPO[0..n] inverse assignment readonly;
}

parentSlotID и subPageletID оба являются обязательными UUID, используемыми двумя отношениями, которые оба реализуют отношения, объявленные в интерфейсе capi.

cartridge interface SlotPageletAssignment extends PageletAssignment
{
    attribute id: string required readonly;

    attribute online : boolean;

    attribute validFrom : datetime;

    attribute validTo : datetime;

    attribute position : double required;

    /*
     * @deprecated Use {@link #getTo()} instead
     */
    relation parentSlot : Slot[0..1] readonly;

    /*
     * @deprecated Use {@link #getFrom()} instead
     */
    relation subPagelet : Pagelet[0..1] readonly;
}

Как видите, только отношения, но не атрибуты внешнего ключа, которые являются частью освобождения, объявляются на уровне интерфейса.Вы можете попробовать этот подход.

...