MethodInstance
Un objet MethodInstance décrit l'utilisation d'une méthode via un ensemble spécifique de valeurs par défaut et le type d'instance d'une méthode, conformément à la sémantique du catalogue de données métiers. Un objet MethodInstance est une référence à une méthode, à laquelle il faut ajouter les valeurs par défaut des paramètres. MethodInstance est exécutable contrairement à un objet Method. Une méthode unique peut avoir plusieurs instances de méthode, où chaque objet MethodInstance associe la signature de la méthode à un ensemble de valeurs par défaut. Vous pouvez utiliser les instances de méthode pour exécuter la même méthode avec différentes valeurs par défaut.
Les instances de méthode sont particulièrement utiles pour les services Web complexes. Si une méthode renvoie des structures complexes multiples ou imbriquées, les métadonnées de MethodInstance peuvent spécifier les structures ou la partie de structure à renvoyer au client. Pour définir complètement un objet MethodInstance, vous pouvez éventuellement définir un élément TypeDescriptor en même temps que le return parameter en XML. Voici un exemple :
<MethodInstance Name="bla" Type="Finder" ReturnParameterName="foo" ReturnTypeDescriptorName="baz" ReturnTypeDescriptorLevel="5">
L'attribut ReturnTypeDescriptorName est facultatif. S'il n'est pas spécifié, le catalogue de données métiers prend par défaut la racine TypeDescriptor de l'élément Return. L'attribut ReturnTypeDescriptorLevel est également facultatif. S'il n'est pas spécifié et s'il existe plusieurs descripteurs de type nommés de manière similaire, une exception an est levée. S'il existe plusieurs descripteurs de type nommés de manière similaire au même niveau (ce qui est rare), le premier est pris par défaut. Cette flexibilité est importante, car elle permet la réutilisation d'un objet WebMethod de plusieurs manières. Par exemple, WebMethod renvoie des collections de clients, et chaque client contient une collection d'adresses. Trois objets MethodInstance du catalogue de données métiers utilisent cette WebMethod : Finder de Customer, SpecificFinder de Customer et Association de CustomerToAddress (renvoie des adresses de clients). Dans le modèle MethodInstance, l'auteur des métadonnées doit définir uniquement la partie du paramètre Return qui est importante, en permettant à un utilisateur de spécifier le TypeDescriptor dans le paramètre Return.
Les Associations sont des classes dérivées des classes MethodInstance ; par ailleurs, le format de définition relatif à Association accepte également de manière facultative les valeurs de ReturnTypeDescriptor.
<Association Name="CustomerToAddresses" AssociationMethodEntityName="Customer" AssociationMethodName="GetCustomerByID" AssociationMethodReturnParameterName="Customer" AssociationMethodReturnTypeDescriptorName="CustomerAddresses" AssociationMethodReturnTypeDescriptorLevel="1">
<SourceEntity Name="Customer" />
<DestinationEntity Name="Address" />
</Association>
Enfin, le modèle objet de MethodInstance fournit également un accesseur/une propriété ReturnTypeDescriptor. ReturnParameter fait partie implicitement de ReturnTypeDescriptor ; en outre, dans la mesure où le modèle objet fonctionne avec des références d'objets, il n'est pas nécessaire de spécifier ReturnParameter lors de l'utilisation du modèle objet.
Certaines instances de méthode ont des fonctionnalités spécifiques destinées aux clients génériques.
Finders et SpecificFinders
Une méthode Finder est une méthode particulière qui renvoie des instances d'entité. Une méthode SpecificFinder renvoie exactement une seule instance d'entité. Les méthodes Finder sont des méthodes statiques qui n'acceptent pas de clé en tant que paramètre d'entrée. Les méthodes SpecificFinder sont également des méthodes statiques, mais elles acceptent une clé (ID) de manière explicite.
Les entités qui ne sont accessibles que par association ne doivent avoir aucune méthode Finder. Les autres entités doivent avoir une méthode Finder qui renvoie plusieurs instances, et une méthode SpecificFinder qui renvoie une seule instance, en fonction d'un ID donné.
Par exemple, pour l'entité Customer, la méthode Finder peut être SELECT * FROM Customers
, et la méthode SpecificFinder peut être SELECT * FROM Customers WHERE CustomerID = id
.
Si vous ne définissez pas de méthodes Finder, votre entité ne pourra pas être utilisée dans un composant WebPart Liste de données métiers ; si vous ne définissez pas de méthodes SpecificFinder, aucune action ne pourra être effectuée sur cette entité, cette dernière ne pourra pas faire l'objet de recherches ou d'une indexation ; par ailleurs, elle ne pourra pas être utilisée dans les fonctionnalités de données métiers, à l'exception du composant WebPart Liste liée aux données métiers.
Pour pouvoir être une méthode Finder, la méthode correspondante doit accepter des paramètres filtrables en entrée et renvoyer des collections d'enregistrements, où chaque enregistrement doit contenir la clé de l'instance d'entité qu'il représente. Pour pouvoir être une méthode SpecificFinder, la méthode correspondante doit accepter la clé de l'instance d'entité en tant que paramètre d'entrée et renvoyer plusieurs champs, dont l'un est la clé.
Vous trouverez ci-après un exemple un peu plus complexe d'une méthode Finder disposant de paramètres filtrables.
SELECT ProductID, Name, ProductNumber, ListPrice FROM Product WHERE (ProductID >= @MinProductID) AND (ProductID <= @MaxProductID) AND (Name LIKE @Name) AND ProductNumber LIKE @ProductNumber)
Les méthodes Finder et SpecificFinder ne doivent pas nécessairement renvoyer les mêmes champs. Dans certains scénarios, la méthode SpecificFinder renvoie davantage de champs que la méthode Finder. Toutefois, ces deux méthodes doivent renvoyer les identificateurs définis sur les entités.
Les méthodes Finder et SpecificFinder doivent avoir exactement une seule instance de méthode correspondante.
Une méthode SpecificFinder joue un rôle important dans la recherche de contenu d'entreprise et l'indexation. L'analyse d'un catalogue de données métiers comporte deux phases :
Énumération des ID : extraction des ID de toutes les instances d'entité.
Extraction des détails : extraction des détails de chaque instance d'entité.
IDEnumerator, décrit ultérieurement dans cette rubrique, renvoie les ID, et la méthode SpecificFinder renvoie les détails de chaque instance d'entité.
ViewAccessors
view est une collection de champs d'une entité. La vue d'une entité contient les champs renvoyés par un de ses objets MethodInstance tels que Finder et SpecificFinder. Une méthode ViewAccessor est une autre méthode particulière qui renvoie une vue qui n'est pas une vue par défaut, en d'autres termes, un autre ensemble de champs de l'application métier. Les méthodes ViewAccessor sont des méthodes d'instance qui acceptent une clé (ID) de manière implicite ; par conséquent, vous ne fournissez pas la clé. Le catalogue de données métiers fournit la clé automatiquement.
Les entités ont zéro ou plusieurs méthodes ViewAccessor.
Notes
La recherche de contenu d'entreprise analyse uniquement la vue SpecificFinder de l'entité.
Contrairement aux méthodes Finder et SpecificFinder, qui ne peuvent disposer que d'une seule instance de méthode, les méthodes ViewAccessor peuvent avoir une ou plusieurs instances de méthode. Cette flexibilité s'avère utile lorsque la même méthode renvoie plusieurs structures, qui constituent chacune une vue. Sur les systèmes tels que SAP, il existe des API (par exemple BAPI_CUSTOMER_GETDETAIL2) qui renvoient plusieurs collections de champs connexes à l'utilisateur. L'API Customer GetDetails, par exemple, peut renvoyer une structure contenant des données financières, une structure contenant des données d'adresse, etc.
Notes
Les fonctionnalités de données métiers telles que les listes et les composants WebPart de données métiers prennent en charge les vues d'entité.
IDEnumerator
L'analyse d'un catalogue de données métiers comporte deux phases :
Énumération des ID : extraction des ID de toutes les instances d'entité.
Extraction des détails : extraction des détails de chaque instance d'entité.
Une méthode IDEnumerator renvoie la liste des ID (clé unique) de chaque entité pouvant faire l'objet d'une recherche, et la méthode SpecificFinder renvoie les détails de chaque instance d'entité. Cela permet l'indexation des entités dont la méthode IDEnumerator renvoie les ID.
Notes
Si une analyse incrémentielle est nécessaire, vous devez également vérifier qu'un des champs de renvoi de la méthode IdEnumerator de l'entité représente la date/heure de la dernière mise à jour de l'instance d'entité (ou ligne, en terminologie de base de données) dans l'application métier. Vous devez ensuite définir la propriété __BdcLastModifiedTimestamp de l'entité à l'aide du nom de TypeDescriptor dans la valeur de renvoi de la méthode IDEnumerator qui représente la date de dernière modification.
Les entités ont zéro ou une méthode IDEnumerator. Les méthodes IDEnumerator ne se limitent pas au renvoi d'une liste d'ID. Si elles renvoient d'autres champs dans le paramètre de renvoi, le catalogue de données métiers les ignore durant l'analyse.
Le filtre LastIdSeen permet la création de blocs pour les méthodes IDEnumerator. Pour les services Web et autres applications principales qui ne gèrent pas la diffusion en continu, utilisez le filtre LastIdSeen dans votre méthode IDEnumerator afin d'améliorer les performances, comme indiqué ci-dessous :
SELECT TOP 100 Id FROM Customers WHERE Id>=@LastIdSeen
ORDER BY Id
AccessChecker
AccessChecker est une méthode qui renvoie les droits d'un utilisateur sur une ou plusieurs instances d'une entité. Un droit peut être unique ou faire partie d'une collection. Les droits, une fois déterminés, peuvent être utilisés par les applications de données métiers clientes via la méthode Entity.CheckAccess. Par exemple, un utilisateur crée un composant WebPart personnalisé dans le catalogue de données métiers qui affiche les actions de création, de modification et de suppression pour EntityInstance. En définissant AccessChecker, l'utilisateur peut appeler Entity.CheckAccess, puis activer de manière conditionnelle une ou plusieurs de ces actions en fonction des droits renvoyés. Voir AccessChecker, exemples pour des exemples relatifs à AccessChecker.
Les entités ont zéro ou une méthode AccessChecker par entité.
GenericInvoker
Une méthode GenericInvoker est une méthode que vous pouvez appeler dans une application métier principale qui n'est pas l'une des méthodes décrites précédemment. Par exemple, vous pouvez utiliser une méthode GenericInvoker pour exécuter une méthode dans l'application principale, afin de modifier une entité ou de mettre à jour le prix unitaire de la table Products.
Les entités ont zéro ou plusieurs méthodes GenericInvoker.
Les méthodes GenericInvoker sont extrêmement utiles pour écrire un composant WebPart personnalisé chargé d'appeler la logique d'un système principal, car le catalogue de données métiers gère l'ensemble des authentifications, autorisations et autres exigences en matière de sécurité.
Notes
Les fonctionnalités de données métiers telles que les listes et les composants WebPart de données métiers n'utilisent pas les méthodes GenericInvoker. Toutefois, le modèle objet et le schéma XML prennent en charge ce type d'instance de méthode.
Scalar
Une méthode Scalar est une méthode qui renvoie une valeur unique que vous pouvez appeler dans l'application métier principale. Par exemple, vous pouvez utiliser une méthode Scalar pour obtenir le total des ventes réalisées à ce jour, à partir de l'application principale.
Les entités ont zéro ou plusieurs méthodes Scalar.
Exemple
<MethodInstances>
<MethodInstance Type="SpecificFinder" ReturnParameterName="LineItem" ReturnTypeDescriptorName="LineItem" ReturnTypeDescriptorLevel="0" Name="FindLineItemInstance" />
</MethodInstances>
Schéma
Enfant | Type | Occurrences | Par défaut | Limites / Valeurs acceptées | Description |
---|---|---|---|---|---|
Type |
Attribut (bdc:MethodInstanceType) |
1..1 |
Finder SpecificFinder ViewAccessor GenericInvoker IdEnumerator Scalar AccessChecker |
Finder : la méthode renvoie un ensemble d'instances d'entité en fonction des critères de filtre. SpecificFinder : la méthode renvoie une seule instance d'entité en fonction d'un ensemble d'identificateurs. ViewAccessor : la méthode renvoie une nouvelle vue (ensemble de champs) en fonction d'une instance d'entité. IdEnumerator : la méthode renvoie les identificateurs des instances d'entité. S'utilise dans le cadre du protocole de recherche au sein du catalogue de données métiers, en deux phases. La méthode IdEnumerator d'un objet Entity est d'abord appelée ; pour chaque instance, la méthode FindSpecific est ensuite appelée afin de récupérer les détails. GenericInvoker : n'importe quelle méthode |
|
ReturnParameterName |
Attribut (String) |
1..1 |
Nom du Parameter de la méthode que le catalogue de données métiers traite en tant que paramètre de renvoi lors de l'exécution de MethodInstance. |
||
ReturnTypeDescriptorName |
Attribut (String) |
0..1 |
Nom de TypeDescriptor dans le paramètre de renvoi que le catalogue de données métiers traite en tant que structure de renvoi lors de l'exécution de MethodInstance. L'attribut ReturnTypeDescriptorName est facultatif. S'il n'est pas spécifié, le catalogue de données métiers prend par défaut la racine TypeDescriptor de ReturnParameter. |
||
ReturnTypeDescriptorLevel |
Attribut (Int32) |
0..1 |
Niveau de ReturnTypeDescriptor dans le paramètre de renvoi. L'attribut ReturnTypeDescriptorLevel est également facultatif. S'il n'est pas spécifié et s'il existe plusieurs TypeDescriptor nommés de manière similaire, une exception est levée. S'il existe plusieurs TypeDescriptor nommés de manière similaire au même niveau (ce qui est rare), le premier est pris par défaut. |
Voir aussi
Autres ressources
Exemple SQL Server 2000 AdventureWorks
Procédure : utiliser le modèle objet Runtime
Procédure : mise en route de l'utilisation du modèle objet Administration
Forum aux questions : catalogue de données métiers
Catalogue de données métiers : glossaire
Filtrage de sécurité du catalogue de données métiers
AccessChecker, exemples