Ao criar uma associação na ECO não estiver garantida a ordem em que os objetos no final da associação, será apresentado. Por esta razão ECO fornece um Boolean "ordenada" propriedade em associação termina.

Quando você define Pedida = True no seu modelo e, em seguida, gerar o seu banco de dados, ECO irá criar mais uma coluna no seu banco de dados para identificar a seqüência dos objetos.

Acabei de criar SalesInvoice / SalesInvoiceLine classes e optaram por uma associação ordenada, basicamente porque é prática padrão da indústria para identificar cada linha de uma fatura / Despacho com um número seqüencial, tornando-o facilmente ela identifyable quando se discutem.

Teria sido legal se eu pudesse ter usado um atributo com uma resultantes OCL expressão semelhante a esta:

this.SalesInvoice.lines-> indexOf (auto)

OCL, mas infelizmente não parece ter uma forma de encontrar o índice de um objeto em uma coleção, por isso, teve de recorrer a escrever um código derivado do atributo.

I marcou o primeiro atributo como Provém, e não entra nenhum DerivationOCL para ele. Então, acrescentei um método público à classe com a seguinte assinatura

LineNumberDeriveAndSubscribe público Int32 (ISubscriber reEvaluateSubscriber, ISubscriber resubscribeSubscriber)

Finalmente, o código para o atributo tinha que fazer o seguinte

  1. Assine o SalesInvoice propriedade
  2. O objeto não tem SalesInvoice, retornar -1
  3. Inscrever-se para SalesInvoice.Lines
  4. Retornar ao índice deste objeto em SalesInvoice.Lines

LineNumberDeriveAndSubscribe público Int32 (ISubscriber reEvaluateSubscriber, ISubscriber resubscribeSubscriber)
(
AsIObject (). Properties [ "SalesInvoice"]. SubscribeToValue (resubscribeSubscriber);
if (this.SalesInvoice == null)
return -1;
diferente
(
SalesInvoice.AsIObject (). Properties [ "Linhas"]. SubscribeToValue (resubscribeSubscriber);
retorno this.SalesInvoice.Lines.IndexOf (este) + 1;
)
)

Para uma explicação sobre a diferença entre a reavaliar e novamente, dê uma olhada neste artigo.

Average rating: