Innkjøpsordre lines

Når du oppretter en forening i ECO du ikke er garantert den rekkefølgen objektene på slutten av foreningen vil bli presentert. Av denne grunn ECO gir en boolsk " bestilt " eiendom på foreningen slutter.
Når du setter Bestilt = Sant i din modell og deretter generere databasen, vil ECO opprette en ekstra kolonne i databasen identifisere rekkefølgen av objektene.
Jeg har nettopp vært å skape SalesInvoice /SalesInvoiceLine klasser og valgte å ha en ordnet forening, i utgangspunktet fordi det er standard praksis i næringen til å identifisere hver linje av en faktura /Bestill med en sequencial nummer, noe som gjør det lett identifiserbare når man diskuterer det.
det ville vært fint om jeg kunne ha brukte en OCL avledet attributt med et uttrykk som ligner på dette:
this.SalesInvoice.lines- > indexOf (egen-)
men dessverre OCL ser ikke ut til å ha en måte å finne indeksen til et objekt i en samling, så jeg måtte ty til å skrive en kode-avledet attributt.
Først jeg merket attributtet som avledet, og kom ikke inn noen DerivationOCL for det. Deretter la jeg en offentlig metode for klassen med følgende signatur
offentlig Int32 LineNumberDeriveAndSubscribe (ISubscriber reEvaluateSubscriber, ISubscriber resubscribeSubscriber)
Endelig koden for attributtet måtte gjøre følgende


    Abonner på SalesInvoice eiendom

    objektet har ingen SalesInvoice, returnerer -1

    Abonner på SalesInvoice.Lines

    Retur indeksen for dette objektet i SalesInvoice.Lines

    offentlig Int32 LineNumberDeriveAndSubscribe (ISubscriber reEvaluateSubscriber, ISubscriber resubscribeSubscriber) {AsIObject () Properties [" SalesInvoice "]. SubscribeToValue (resubscribeSubscriber.); if (this.SalesInvoice == null) avkastning 1; . Else {SalesInvoice.AsIObject () Properties [" Lines "] SubscribeToValue (resubscribeSubscriber.); returnere this.SalesInvoice.Lines.IndexOf (denne) + 1; }}
    For en forklaring av forskjellen mellom revurdere og abonnere på nytt, ta en titt på denne artikkelen.