Lors de la création d'une association ECO-vous ne sont pas garantis de l'ordre dans lequel les objets à la fin de l'association sera présentée. Pour cette raison, ECO offre un booléen «ordonné» de propriété sur l'association se termine.

Lorsque vous définissez Ordered = True dans votre modèle, puis créer votre base de données, ECO permettra de créer une colonne supplémentaire dans votre base de données identifiant la séquence des objets.

Je viens de créer SalesInvoice / SalesInvoiceLine classes et a choisi d'avoir un ordre d'association, essentiellement parce qu'il est de pratiquer l'industrie afin d'identifier chaque ligne d'une facture / commande avec une Sequencial nombre, le rendant facilement identifyable il lors de l'examen.

Il aurait été bien si je pouvais avoir utilisé un attribut dérivé OCL avec une expression similaire à ceci:

this.SalesInvoice.lines-> indexOf (self)

OCL, mais, malheureusement, ne semble pas avoir un moyen de trouver l'index d'un objet dans une collection, donc j'ai dû recourir à l'écriture d'un code dérivé attribut.

J'ai d'abord marqué l'attribut dérivés, et n'a pas d'DerivationOCL pour lui. Ensuite, j'ai ajouté une méthode publique à la classe, avec la signature suivante

public Int32 LineNumberDeriveAndSubscribe (ISubscriber reEvaluateSubscriber, ISubscriber resubscribeSubscriber)

Enfin, le code de l'attribut a de faire ce qui suit

  1. Abonnez-vous à la propriété SalesInvoice
  2. L'objet n'a pas SalesInvoice, return -1
  3. S'abonner à SalesInvoice.Lines
  4. Retour l'index de cet objet dans SalesInvoice.Lines

public Int32 LineNumberDeriveAndSubscribe (ISubscriber reEvaluateSubscriber, ISubscriber resubscribeSubscriber)
(
AsIObject (). Properties [ "SalesInvoice"]. SubscribeToValue (resubscribeSubscriber);
if (null == this.SalesInvoice)
return -1;
autre
(
SalesInvoice.AsIObject (). Properties [ "Lines"]. SubscribeToValue (resubscribeSubscriber);
retour this.SalesInvoice.Lines.IndexOf (ce) + 1;
)
)

Pour une explication de la différence entre les réévaluer et de réinscrire, jetez un oeil à cet article.

Average rating: