Je travaille sur un complément Excel orienté objet pour extraire des informations de la base de données de notre système ERP. Voici un exemple d'un appel de fonction:Fonction renvoyant une classe contenant une fonction renvoyant une classe
itemDescription = Macola.Item("12345").Description
Macola est une instance d'une classe qui prend en charge l'accès aux bases de données. Item() est une fonction de la classe Macola qui renvoie une instance d'une classe ItemMaster. Description() est une fonction de la classe ItemMaster. Tout cela fonctionne correctement.
Les articles peuvent être être stockés dans plus d'un endroit, donc mon étape suivante consiste à faire:
quantityOnHand = Macola.Item("12345").Location("A1").QuantityOnHand
Emplacement() est une fonction de la classe ItemMaster qui renvoie une instance de la ItemLocation classe (enfin, en théorie de toute façon). QuantityOnHand() est une fonction de la classe ItemLocation. Mais pour une raison quelconque, la classe ItemLocation n'est même pas en cours d'initialisation.
Public Function Location(inventoryLocation As String) As ItemLocation
Set Location = New ItemLocation
Location.Item = item_no
Location.Code = inventoryLocation
End Function
Dans l'exemple ci-dessus, la variable item_no est une variable membre de la classe ItemMaster.
Bizarrement, je peux instancier avec succès la classe ItemLocation en dehors de la classe ItemMaster dans un module non-classe.
Dim test As New ItemLocation
test.Item = "12345"
test.Code = "A1"
quantityOnHand = test.QuantityOnHand
Y a-t-il un moyen de faire ce travail comme je le souhaite? J'essaie de garder l'API aussi simple que possible. Alors qu'il suffit d'une ligne de code pour récupérer une valeur.
Je sais que c'est un exemple de code destiné à montrer un problème, donc vous pouvez déjà être au courant, mais ceux qui ne le sont pas devraient Google la "loi de Demeter" ... – jtolle
Comment savez-vous que ".. pour une raison quelconque, la classe ItemLocation n'est même pas en cours d'initialisation. " ?? – RBarryYoung
@jtolle - Je n'ai rien caché ici. Je ai googlé "Loi de Demeter", mais je ne sais pas ce que vous considérez problématique de mon code? @RBarryYoung - J'ai du code dans la classe Class_Intialize de la classe ItemLocation pour imprimer un message de débogage. Aucun message = aucun init. – Scott