Criar e atualizar definições de tabela usando a API Web

Saiba como criar e atualizar definições de tabela do Dataverse usando a API Web, incluindo como definir uma coluna de nome primário, preservar rótulos localizados e publicar alterações de metadados. Você pode executar as mesmas operações usando o SDK para .NET. O SDK do Dataverse para Python usa a API Web.

Para obter detalhes sobre as propriedades de definição de tabela, consulte Personalizar definições de tabela e EntityMetadata EntityType.

Tip

Entidades, atributos e conjuntos de opções globais (também conhecidos como tabelas, colunas e opções) são todos componentes da solução. Ao criá-los, você pode associá-los a uma solução usando o MSCRM.SolutionUniqueName cabeçalho de solicitação opcional e definindo o valor como o nome exclusivo da solução da qual ele deve fazer parte. Saiba como associar um componente de solução a uma solução

Criar definições de tabela

Para criar uma definição de tabela, POST a representação JSON da EntityMetadata para o caminho do EntityDefinitions conjunto de entidades. A entidade deve incluir a definição da coluna de nome primário na Attributes propriedade de navegação com valor de coleção. Você não precisa definir valores para todas as propriedades. Os itens desta lista, exceto por Description, são necessários. Definir uma descrição é uma prática recomendada. Os valores de propriedade que você não especificar são definidos como valores padrão. Para entender os valores padrão, consulte o exemplo na seção Atualizar definições de tabela . O exemplo neste artigo usa as seguintes propriedades de entidade.

Propriedades da tabela necessárias

Esta tabela lista as propriedades que devem ter valores ao criar uma definição de tabela.

Propriedade EntityMetadata Valor de exemplo
SchemaName new_BankAccount
Observação: Inclua o prefixo de personalização que corresponde ao editor da solução. O valor padrão é new_. Escolha o prefixo que funciona para sua solução porque você não pode alterá-lo mais tarde.
DisplayName Bank Account
DisplayCollectionName Bank Accounts
Description Contains data about customer bank accounts.|
OwnershipType UserOwned | OrganizationOwned
Observação: Para obter os valores que você pode definir aqui, consulte OwnershipTypes EnumType.
IsActivity false
HasActivities false
HasNotes false

Além das propriedades listadas anteriormente, a EntityMetadata.Attributes propriedade deve conter uma matriz que inclua um StringAttributeMetadata EntityType para representar o atributo de nome primário para a entidade. A propriedade de atributo AttributeMetadata.IsPrimaryName deve ser verdadeira. A tabela a seguir descreve as propriedades definidas no exemplo.

Propriedade Atributo Primário Valor de exemplo
SchemaName new_AccountName
RequiredLevel None
Observação: Esse é um tipo complexo. Para obter os valores que você pode definir aqui, consulte AttributeRequiredLevelManagedProperty complex type and AttributeRequiredLevel EnumType.
MaxLength 100
FormatName Text
Observação: O atributo de nome primário deve usar o formato De texto. Para opções de formato disponíveis para outros atributos de cadeia de caracteres, consulte formatos de cadeia de caracteres.
DisplayName Account Name
Description Type the name of the bank account.
IsPrimaryName true

Note

Ao criar ou atualizar rótulos usando o tipo complexo Rótulo, defina apenas a LocalizedLabels propriedade. O UserLocalizedLabel valor retornado baseia-se na preferência de idioma do usuário e é somente leitura.

O exemplo a seguir mostra a criação de uma tabela personalizada com o conjunto de propriedades. O idioma é inglês usando a LCID (ID de localidade) de 1033. Os valores válidos de ID de localidade podem ser encontrados no gráfico de ID de localidade (LCID).

Solicitação:

POST [Organization URI]/api/data/v9.2/EntityDefinitions HTTP/1.1
Accept: application/json  
Content-Type: application/json; charset=utf-8  
OData-MaxVersion: 4.0  
OData-Version: 4.0  
MSCRM.SolutionUniqueName: examplesolution
  
{  
  "@odata.type": "Microsoft.Dynamics.CRM.EntityMetadata",  
  "SchemaName": "new_BankAccount",  
  "Description": {  
   "@odata.type": "Microsoft.Dynamics.CRM.Label",  
  "LocalizedLabels": [  
   {  
    "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",  
    "Label": "An entity to store information about customer bank accounts",  
    "LanguageCode": 1033  
   }  
  ]  
 },  
 "DisplayCollectionName": {  
   "@odata.type": "Microsoft.Dynamics.CRM.Label",  
  "LocalizedLabels": [  
   {  
     "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",  
    "Label": "Bank Accounts",  
    "LanguageCode": 1033  
   }  
  ]  
 },  
 "DisplayName": {  
   "@odata.type": "Microsoft.Dynamics.CRM.Label",  
  "LocalizedLabels": [  
   {  
     "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",  
    "Label": "Bank Account",  
    "LanguageCode": 1033  
   }  
  ]  
 },  
 "HasActivities": false,  
 "HasNotes": false,  
 "IsActivity": false,  
 "OwnershipType": "UserOwned",  
 "Attributes": [  
  {  
   "AttributeType": "String",  
   "AttributeTypeName": {  
    "Value": "StringType"  
   },  
   "Description": {  
     "@odata.type": "Microsoft.Dynamics.CRM.Label",  
    "LocalizedLabels": [  
     {  
       "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",  
      "Label": "Type the name of the bank account",  
      "LanguageCode": 1033  
     }  
    ]  
   },  
   "DisplayName": {  
     "@odata.type": "Microsoft.Dynamics.CRM.Label",  
    "LocalizedLabels": [  
     {  
       "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",  
      "Label": "Account Name",  
      "LanguageCode": 1033  
     }  
    ]  
   },  
   "IsPrimaryName": true,  
   "RequiredLevel": {  
    "Value": "None",  
    "CanBeChanged": true,  
    "ManagedPropertyLogicalName": "canmodifyrequirementlevelsettings"  
   },  
   "SchemaName": "new_AccountName",  
    "@odata.type": "Microsoft.Dynamics.CRM.StringAttributeMetadata",  
   "FormatName": {  
    "Value": "Text"  
   },  
   "MaxLength": 100  
  }  
 ]
}  

Resposta:

HTTP/1.1 204 No Content  
OData-Version: 4.0  
OData-EntityId: [Organization URI]/api/data/v9.2/EntityDefinitions(00aa00aa-bb11-cc22-dd33-44ee44ee44ee)  

Atualizar definições de tabela

Importante

Você não pode usar o PATCH método para atualizar entidades de modelo de dados. As definições de tabela têm paridade com o SDK para .NET Classe UpdateEntityRequest que substitui a definição de entidade pela incluída. Portanto, você deve usar o PUT método ao atualizar entidades de modelo de dados e ter cuidado para incluir todas as propriedades existentes que você não pretende alterar. Você não pode atualizar propriedades individuais.

Ao atualizar definições de tabela com rótulos, inclua um cabeçalho de solicitação personalizado MSCRM.MergeLabels para controlar como os rótulos na atualização são tratados. Se um rótulo para um item já tiver rótulos para outros idiomas e você atualizá-lo com um rótulo que contenha apenas um rótulo para um idioma específico, o MSCRM.MergeLabels cabeçalho controlará se deseja substituir os rótulos existentes ou mesclar seu novo rótulo com quaisquer rótulos de idioma existentes. Defina MSCRM.MergeLabels para true garantir que novos rótulos substituam apenas os rótulos existentes quando o código de idioma corresponder. Se você quiser substituir os rótulos existentes para incluir apenas os rótulos incluídos, defina MSCRM.MergeLabels como false. Saiba mais sobre cabeçalhos de solicitação com suporte

Importante

Se você não incluir um MSCRM.MergeLabels cabeçalho, o comportamento padrão será como se o valor fosse false e sua atualização removerá outros rótulos localizados.

Ao atualizar uma definição de tabela ou coluna, use a Ação PublishXml antes que as alterações feitas sejam aplicadas aos aplicativos controlados por modelos. Para obter mais informações, consulte Publicar personalizações.

Normalmente, você recupera a definição JSON da definição de tabela ou coluna e modifica as propriedades antes de enviá-la de volta. O exemplo a seguir contém todas as propriedades de definição da tabela criada no exemplo criar definições de tabela , mas com a alteração DisplayName para "Nome comercial do banco". Observe como os dados JSON incluem os valores padrão para propriedades não definidas no exemplo criar definições de tabela .

Note

Este exemplo usa a LogicalName chave para identificar exclusivamente a definição de tabela que está sendo atualizada. Você também pode usar o valor da MetadataId chave primária. Essa opção geralmente é mais fácil do que procurar o MetadataId valor. Para obter mais informações, consulte Recuperar definições de tabela por nome ou MetadadosId.

Solicitação:

PUT [Organization URI]/api/data/v9.2/EntityDefinitions(LogicalName='new_bankaccount') HTTP/1.1
Accept: application/json  
Content-Type: application/json; charset=utf-8  
OData-MaxVersion: 4.0  
OData-Version: 4.0  
MSCRM.MergeLabels: true  
MSCRM.SolutionUniqueName: examplesolution
  
{  
 "@odata.context": "[Organization URI]/api/data/v9.2/$metadata#EntityDefinitions/$entity",  
 "ActivityTypeMask": 0,  
 "AutoRouteToOwnerQueue": false,  
 "CanTriggerWorkflow": true,  
 "Description": {  
  "LocalizedLabels": [  
   {  
    "Label": "An entity to store information about customer bank accounts",  
    "LanguageCode": 1033,  
    "IsManaged": false,  
    "MetadataId": "edc3abd7-c5ae-4822-a3ed-51734fdd0469",  
    "HasChanged": null  
   }  
  ]  
 },  
 "DisplayCollectionName": {  
  "LocalizedLabels": [  
   {  
    "Label": "Bank Accounts",  
    "LanguageCode": 1033,  
    "IsManaged": false,  
    "MetadataId": "7c758e0c-e9cf-4947-93b0-50ec30b20f60",  
    "HasChanged": null  
   }  
  ]  
 },  
 "DisplayName": {  
  "@odata.type": "Microsoft.Dynamics.CRM.Label",  
  "LocalizedLabels": [  
   {  
    "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",  
    "Label": "Bank Business Name",  
    "LanguageCode": 1033  
   }  
  ]  
 },  
 "EntityHelpUrlEnabled": false,  
 "EntityHelpUrl": null,  
 "IsDocumentManagementEnabled": false,  
 "IsOneNoteIntegrationEnabled": false,  
 "IsInteractionCentricEnabled": false,  
 "IsKnowledgeManagementEnabled": false,  
 "AutoCreateAccessTeams": false,  
 "IsActivity": false,  
 "IsActivityParty": false,  
 "IsAuditEnabled": {  
  "Value": false,  
  "CanBeChanged": true,  
  "ManagedPropertyLogicalName": "canmodifyauditsettings"  
 },  
 "IsAvailableOffline": false,  
 "IsChildEntity": false,  
 "IsAIRUpdated": false,  
 "IsValidForQueue": {  
  "Value": false,  
  "CanBeChanged": true,  
  "ManagedPropertyLogicalName": "canmodifyqueuesettings"  
 },  
 "IsConnectionsEnabled": {  
  "Value": false,  
  "CanBeChanged": true,  
  "ManagedPropertyLogicalName": "canmodifyconnectionsettings"  
 },  
 "IconLargeName": null,  
 "IconMediumName": null,  
 "IconSmallName": null,  
 "IsCustomEntity": true,  
 "IsBusinessProcessEnabled": false,  
 "IsCustomizable": {  
  "Value": true,  
  "CanBeChanged": true,  
  "ManagedPropertyLogicalName": "iscustomizable"  
 },  
 "IsRenameable": {  
  "Value": true,  
  "CanBeChanged": true,  
  "ManagedPropertyLogicalName": "isrenameable"  
 },  
 "IsMappable": {  
  "Value": true,  
  "CanBeChanged": false,  
  "ManagedPropertyLogicalName": "ismappable"  
 },  
 "IsDuplicateDetectionEnabled": {  
  "Value": false,  
  "CanBeChanged": true,  
  "ManagedPropertyLogicalName": "canmodifyduplicatedetectionsettings"  
 },  
 "CanCreateAttributes": {  
  "Value": true,  
  "CanBeChanged": false,  
  "ManagedPropertyLogicalName": "cancreateattributes"  
 },  
 "CanCreateForms": {  
  "Value": true,  
  "CanBeChanged": true,  
  "ManagedPropertyLogicalName": "cancreateforms"  
 },  
 "CanCreateViews": {  
  "Value": true,  
  "CanBeChanged": true,  
  "ManagedPropertyLogicalName": "cancreateviews"  
 },  
 "CanCreateCharts": {  
  "Value": true,  
  "CanBeChanged": true,  
  "ManagedPropertyLogicalName": "cancreatecharts"  
 },  
 "CanBeRelatedEntityInRelationship": {  
  "Value": true,  
  "CanBeChanged": true,  
  "ManagedPropertyLogicalName": "canberelatedentityinrelationship"  
 },  
 "CanBePrimaryEntityInRelationship": {  
  "Value": true,  
  "CanBeChanged": true,  
  "ManagedPropertyLogicalName": "canbeprimaryentityinrelationship"  
 },  
 "CanBeInManyToMany": {  
  "Value": true,  
  "CanBeChanged": true,  
  "ManagedPropertyLogicalName": "canbeinmanytomany"  
 },  
 "CanEnableSyncToExternalSearchIndex": {  
  "Value": true,  
  "CanBeChanged": true,  
  "ManagedPropertyLogicalName": "canenablesynctoexternalsearchindex"  
 },  
 "SyncToExternalSearchIndex": false,  
 "CanModifyAdditionalSettings": {  
  "Value": true,  
  "CanBeChanged": true,  
  "ManagedPropertyLogicalName": "canmodifyadditionalsettings"  
 },  
 "CanChangeHierarchicalRelationship": {  
  "Value": true,  
  "CanBeChanged": true,  
  "ManagedPropertyLogicalName": "canchangehierarchicalrelationship"  
 },  
 "IsOptimisticConcurrencyEnabled": true,  
 "ChangeTrackingEnabled": false,  
 "IsImportable": true,  
 "IsIntersect": false,  
 "IsMailMergeEnabled": {  
  "Value": true,  
  "CanBeChanged": true,  
  "ManagedPropertyLogicalName": "canmodifymailmergesettings"  
 },  
 "IsManaged": false,  
 "IsEnabledForCharts": true,  
 "IsEnabledForTrace": false,  
 "IsValidForAdvancedFind": true,  
 "IsVisibleInMobile": {  
  "Value": false,  
  "CanBeChanged": true,  
  "ManagedPropertyLogicalName": "canmodifymobilevisibility"  
 },  
 "IsVisibleInMobileClient": {  
  "Value": false,  
  "CanBeChanged": true,  
  "ManagedPropertyLogicalName": "canmodifymobileclientvisibility"  
 },  
 "IsReadOnlyInMobileClient": {  
  "Value": false,  
  "CanBeChanged": true,  
  "ManagedPropertyLogicalName": "canmodifymobileclientreadonly"  
 },  
 "IsOfflineInMobileClient": {  
  "Value": false,  
  "CanBeChanged": true,  
  "ManagedPropertyLogicalName": "canmodifymobileclientoffline"  
 },  
 "DaysSinceRecordLastModified": 0,  
 "IsReadingPaneEnabled": true,  
 "IsQuickCreateEnabled": false,  
 "LogicalName": "new_bankaccount",  
 "ObjectTypeCode": 10009,  
 "OwnershipType": "UserOwned",  
 "PrimaryNameAttribute": "new_accountname",  
 "PrimaryImageAttribute": null,  
 "PrimaryIdAttribute": "new_bankaccountid",  
 "Privileges": [  
  {  
   "CanBeBasic": true,  
   "CanBeDeep": true,  
   "CanBeGlobal": true,  
   "CanBeLocal": true,  
   "CanBeEntityReference": false,  
   "CanBeParentEntityReference": false,  
   "Name": "prvCreatenew_BankAccount",  
   "PrivilegeId": "d1a8de4b-27df-42e1-bc5c-b863e002b37f",  
   "PrivilegeType": "Create"  
  },  
  {  
   "CanBeBasic": true,  
   "CanBeDeep": true,  
   "CanBeGlobal": true,  
   "CanBeLocal": true,  
   "CanBeEntityReference": false,  
   "CanBeParentEntityReference": false,  
   "Name": "prvReadnew_BankAccount",  
   "PrivilegeId": "726043b1-de2c-487e-9d6d-5629fca2bf22",  
   "PrivilegeType": "Read"  
  },  
  {  
   "CanBeBasic": true,  
   "CanBeDeep": true,  
   "CanBeGlobal": true,  
   "CanBeLocal": true,  
   "CanBeEntityReference": false,  
   "CanBeParentEntityReference": false,  
   "Name": "prvWritenew_BankAccount",  
   "PrivilegeId": "fa50c539-b6c7-4eaf-bd49-fd8224bc51b6",  
   "PrivilegeType": "Write"  
  },  
  {  
   "CanBeBasic": true,  
   "CanBeDeep": true,  
   "CanBeGlobal": true,  
   "CanBeLocal": true,  
   "CanBeEntityReference": false,  
   "CanBeParentEntityReference": false,  
   "Name": "prvDeletenew_BankAccount",  
   "PrivilegeId": "17c1fd6e-f856-45e7-b563-796f53108b85",  
   "PrivilegeType": "Delete"  
  },  
  {  
   "CanBeBasic": true,  
   "CanBeDeep": true,  
   "CanBeGlobal": true,  
   "CanBeLocal": true,  
   "CanBeEntityReference": false,  
   "CanBeParentEntityReference": false,  
   "Name": "prvAssignnew_BankAccount",  
   "PrivilegeId": "133ca81d-668e-4c19-a71e-10c6dfe099cd",  
   "PrivilegeType": "Assign"  
  },  
  {  
   "CanBeBasic": true,  
   "CanBeDeep": true,  
   "CanBeGlobal": true,  
   "CanBeLocal": true,  
   "CanBeEntityReference": false,  
   "CanBeParentEntityReference": false,  
   "Name": "prvSharenew_BankAccount",  
   "PrivilegeId": "15f27df4-9c67-47c9-b1f1-274e1c44f24a",  
   "PrivilegeType": "Share"  
  },  
  {  
   "CanBeBasic": true,  
   "CanBeDeep": true,  
   "CanBeGlobal": true,  
   "CanBeLocal": true,  
   "CanBeEntityReference": false,  
   "CanBeParentEntityReference": false,  
   "Name": "prvAppendnew_BankAccount",  
   "PrivilegeId": "ac8b1920-8f93-4e9d-94e3-c680e2a2f228",  
   "PrivilegeType": "Append"  
  },  
  {  
   "CanBeBasic": true,  
   "CanBeDeep": true,  
   "CanBeGlobal": true,  
   "CanBeLocal": true,  
   "CanBeEntityReference": false,  
   "CanBeParentEntityReference": false,  
   "Name": "prvAppendTonew_BankAccount",  
   "PrivilegeId": "f63a5f46-3bc7-4eac-81d0-7f77f566ef46",  
   "PrivilegeType": "AppendTo"  
  }  
 ],  
 "RecurrenceBaseEntityLogicalName": null,  
 "ReportViewName": "Filterednew_BankAccount",  
 "SchemaName": "new_BankAccount",  
 "IntroducedVersion": "1.0",  
 "IsStateModelAware": true,  
 "EnforceStateTransitions": false,  
 "EntityColor": null,  
 "LogicalCollectionName": "new_bankaccounts",  
 "CollectionSchemaName": "new_BankAccounts",  
 "EntitySetName": "new_bankaccounts",  
 "IsEnabledForExternalChannels": false,  
 "IsPrivate": false,  
 "MetadataId": "00aa00aa-bb11-cc22-dd33-44ee44ee44ee",  
 "HasChanged": null  
}  

Resposta:

HTTP/1.1 204 No Content  
OData-Version: 4.0  

Consulte também

Usar a API Web com metadados Microsoft Dataverse
Criar e atualizar definições de coluna usando a API Web
Consultar definições de tabela usando a API Web
Recuperar definições de tabela por nome ou MetadataId
Modelar relações de tabela usando a API Web
Trabalhar com definições de tabela usando o SDK para .NET
Definições de coluna (atributo)
Exemplo de operações de esquema de tabela da API Web
Exemplo de operações de esquema de tabela de API Web (C#)