Saltar al contenido principal

2. Descubrir el modelo

El $metadata es un documento CSDL que describe cada entidad: sus campos con tipo y longitud, su clave, y las relaciones con otros maestros. Sale en XML por defecto.

RecursoDevuelve
GET /Documento de servicio: la lista de entity sets con su título legible.
GET /$metadataCSDL en XML (application/xml).
GET /$metadata?$format=jsonEl mismo CSDL en JSON, más cómodo de recorrer desde código.

Cómo leer el CSDL​

<EntityType Name="o_customers">
<Key>
<PropertyRef Name="code"/>
</Key>
<Property Name="code" Type="Edm.String" Nullable="false" MaxLength="20">
<Annotation Term="Core.Description" String="Código"/>
</Property>
<Property Name="city_code" Type="Edm.String" Nullable="true" MaxLength="10"/>
<NavigationProperty Name="Localidad" Type="Acqua.o_cities" Nullable="true" Partner="Clientes">
<ReferentialConstraint Property="city_code" ReferencedProperty="code"/>
</NavigationProperty>
<Annotation Term="Core.Description" String="Clientes"/>
</EntityType>
  • <Key> — Las propiedades que identifican una fila. Puede tener más de una: ver clave compuesta.
  • <Property> — Un campo escalar. El nombre es la columna física de la base, no una etiqueta. MaxLength, Precision y Scale te dicen cuánto entra.
  • Annotation Term="Core.Description" — La etiqueta del campo en el ERP, en español. Es lo que conviene mostrarle a un usuario final; Excel y Power BI la levantan solas.
  • <NavigationProperty> — Un maestro relacionado. Sin Type="Collection(...)" es una relación de muchos a uno (el cliente tiene una localidad); con Collection(...) es de uno a muchos.
  • <ReferentialConstraint> — Qué campo local apunta a qué campo del otro maestro. Power BI usa esto para armar las relaciones del modelo automáticamente.

Capacidades declaradas​

Cada entity set declara qué se puede hacer con él, así no hace falta probar y fallar:

AnotaciónQué dice
Capabilities.InsertRestrictionsInsertable: si acepta POST .
Capabilities.UpdateRestrictionsUpdatable: si acepta PATCH y PUT .
Capabilities.DeleteRestrictionsDeletable: si acepta DELETE .
Capabilities.ExpandRestrictionsExpandable y MaxLevels: si se puede usar $expand y hasta qué profundidad.
Capabilities.SearchRestrictionsSearchable: si $search sirve en esta entidad.
Capabilities.FilterFunctionsLa lista exacta de funciones que acepta $filter.
Capabilities.FilterRestrictionsNonFilterableProperties: los campos que no se pueden filtrar (ver tipos).
nota

Solo ves lo tuyo. El $metadata se arma por cliente: las entidades que el administrador no te habilitó no aparecen, y tampoco aparecen las navegaciones hacia maestros que no tenés permitidos. Dos integradores pueden ver modelos distintos sobre la misma base.