Web API table schema operations sample
This collection of http requests and responses demonstrate how to perform selected operations that modify the Dataverse schema, or metadata, using the Web API table schema operations sample (C#)
This article describes a common set of operations implemented by each sample in this group. This article describes the HTTP requests and responses and text output that each sample performs without the language specific details. See the language specific descriptions and the individual samples for details about how these operations are performed.
Demonstrates
This sample is divided into the following sections, containing Dataverse Web API operations that are discussed in greater detail in the specified associated conceptual articles.
Note
For brevity, less pertinent HTTP headers have been omitted. The URLs of the records will vary with the base organization address and the IDs set by the Dataverse server.
Section 0: Create Publisher and Solution
Create the publisher first since the solution must be related to it. All the items created or modified in this sample uses the publisher
customizationprefix
andcustomizationoptionvalueprefix
values.Request:
POST [Organization Uri]/api/data/v9.2/publishers HTTP/1.1 OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json { "friendlyname": "Example Publisher", "uniquename": "examplepublisher", "description": "An example publisher for samples", "customizationprefix": "sample", "customizationoptionvalueprefix": 72700 }
Response:
HTTP/1.1 204 NoContent OData-Version: 4.0 OData-EntityId: [Organization Uri]/api/data/v9.2/publishers(a78ab7fc-102a-ed11-9db1-00224804f8e2)
Console output:
Created publisher Example Publisher
Then create the solution related to the publisher.
Note
Many of the items created or updated in is sample will use the
uniquename
value of this solution with theMSCRM.SolutionUniqueName
request header so that the changes are included as part of this solution. Some actions have aSolutionUniqueName
parameter that does the same thing. At the end of this sample this solution will be exported and contain the definitions of all the items created and changed in this sample.Request:
POST [Organization Uri]/api/data/v9.2/solutions HTTP/1.1 OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json { "friendlyname": "Example Solution", "uniquename": "examplesolution", "description": "An example solution for samples", "version": "1.0.0.0", "publisherid@odata.bind": "publishers(a78ab7fc-102a-ed11-9db1-00224804f8e2)" }
Response:
HTTP/1.1 204 NoContent OData-Version: 4.0 OData-EntityId: [Organization Uri]/api/data/v9.2/solutions(5472b902-112a-ed11-9db1-00224804f8e2)
Console output:
Created solution Example Solution
Section 1: Create, Retrieve and Update Table
Create the
sample_BankAccount
table.These properties are required:
SchemaName
,DisplayName
,DisplayCollectionName
,HasNotes
,HasActivities
andPrimaryNameAttribute
, which must include theLogicalName
value of the primary name column.The table must also include one StringAttributeMetadata column in the
Attributes
collection to be the primary name column for the table. That column definition must haveSchemaName
,MaxLength
, andDisplayName
values, andIsPrimaryName
must be set to true.Note
The
MSCRM.SolutionUniqueName: examplesolution
request header associates this table to the solution. TheSchemaName
value (sample_BankAccount
) includes the customization prefix from the publisher.Request:
POST [Organization Uri]/api/data/v9.2/EntityDefinitions HTTP/1.1 MSCRM.SolutionUniqueName: examplesolution OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json { "@odata.type": "Microsoft.Dynamics.CRM.EntityMetadata", "Description": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "A table to store information about customer bank accounts", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "A table to store information about customer bank accounts", "LanguageCode": 1033, "IsManaged": false } }, "DisplayCollectionName": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Bank Accounts", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Bank Accounts", "LanguageCode": 1033, "IsManaged": false } }, "DisplayName": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Bank Account", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Bank Account", "LanguageCode": 1033, "IsManaged": false } }, "HasActivities": false, "HasNotes": false, "OwnershipType": "UserOwned", "PrimaryNameAttribute": "sample_name", "SchemaName": "sample_BankAccount", "Attributes": [ { "@odata.type": "Microsoft.Dynamics.CRM.StringAttributeMetadata", "AttributeType": "String", "AttributeTypeName": { "Value": "StringType" }, "MaxLength": 100, "Description": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "The primary attribute for the Bank Account entity.", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "The primary attribute for the Bank Account entity.", "LanguageCode": 1033, "IsManaged": false } }, "DisplayName": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Account Name", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Account Name", "LanguageCode": 1033, "IsManaged": false } }, "IsPrimaryName": true, "RequiredLevel": { "Value": "None", "CanBeChanged": false, "ManagedPropertyLogicalName": "canmodifyrequirementlevelsettings" }, "SchemaName": "sample_Name" } ] }
Response:
HTTP/1.1 204 NoContent OData-Version: 4.0 OData-EntityId: [Organization Uri]/api/data/v9.2/EntityDefinitions(5872b902-112a-ed11-9db1-00224804f8e2)
Console output:
Sending request to create the sample_BankAccount table... Created sample_BankAccount table.
Retrieve the
sample_BankAccount
table definition.- This retrieve operation doesn't include any
$select
to filter the properties returned because this data is modified and sent back to update the table definition usingPUT
, which overwrites the existing value. - This query also doesn't include an
$expand
to include related data, such as attributes, because related data must be updated separately.
Note
This request and others in this sample use the
Consistency: Strong
header. Use this header when you retrieve metadata definition changes right after you apply them. Metadata changes are cached for performance reasons and a request for a newly created item may return a 404 because it hasn't been cached yet. Caching may take 30 seconds. This header will force the server to read the latest version including your changes. By using this header, you negate the performance gain that caching provides, so you should only use it when in scenarios like this sample where you are retrieving changes you have just made. More information: HTTP headers > Other headers.Request:
GET [Organization Uri]/api/data/v9.2/EntityDefinitions(LogicalName='sample_bankaccount') HTTP/1.1 Consistency: Strong OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json
Response:
HTTP/1.1 200 OK OData-Version: 4.0 { "@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#EntityDefinitions/$entity", "ActivityTypeMask": 0, "AutoRouteToOwnerQueue": false, "CanTriggerWorkflow": true, "EntityHelpUrlEnabled": false, "EntityHelpUrl": null, "IsDocumentManagementEnabled": false, "IsOneNoteIntegrationEnabled": false, "IsInteractionCentricEnabled": false, "IsKnowledgeManagementEnabled": false, "IsSLAEnabled": false, "IsBPFEntity": false, "IsDocumentRecommendationsEnabled": false, "IsMSTeamsIntegrationEnabled": false, "SettingOf": null, "DataProviderId": null, "DataSourceId": null, "AutoCreateAccessTeams": false, "IsActivity": false, "IsActivityParty": false, "IsRetrieveAuditEnabled": false, "IsRetrieveMultipleAuditEnabled": false, "IsArchivalEnabled": false, "IsAvailableOffline": false, "IsChildEntity": false, "IsAIRUpdated": false, "IconLargeName": null, "IconMediumName": null, "IconSmallName": null, "IconVectorName": null, "IsCustomEntity": true, "IsBusinessProcessEnabled": false, "SyncToExternalSearchIndex": false, "IsOptimisticConcurrencyEnabled": true, "ChangeTrackingEnabled": false, "IsImportable": true, "IsIntersect": false, "IsManaged": false, "IsEnabledForCharts": true, "IsEnabledForTrace": false, "IsValidForAdvancedFind": true, "DaysSinceRecordLastModified": 0, "MobileOfflineFilters": "", "IsReadingPaneEnabled": true, "IsQuickCreateEnabled": false, "LogicalName": "sample_bankaccount", "ObjectTypeCode": 10393, "OwnershipType": "UserOwned", "PrimaryNameAttribute": "sample_name", "PrimaryImageAttribute": null, "PrimaryIdAttribute": "sample_bankaccountid", "RecurrenceBaseEntityLogicalName": null, "ReportViewName": "Filteredsample_BankAccount", "SchemaName": "sample_BankAccount", "IntroducedVersion": "1.0.0.0", "IsStateModelAware": true, "EnforceStateTransitions": false, "ExternalName": null, "EntityColor": null, "LogicalCollectionName": "sample_bankaccounts", "ExternalCollectionName": null, "CollectionSchemaName": "sample_BankAccounts", "EntitySetName": "sample_bankaccounts", "IsEnabledForExternalChannels": false, "IsPrivate": false, "UsesBusinessDataLabelTable": false, "IsLogicalEntity": false, "HasNotes": false, "HasActivities": false, "HasFeedback": false, "IsSolutionAware": false, "CreatedOn": "2022-09-01T16:13:40Z", "ModifiedOn": "2022-09-01T16:13:40Z", "HasEmailAddresses": false, "OwnerId": null, "OwnerIdType": 8, "OwningBusinessUnit": null, "MetadataId": "5872b902-112a-ed11-9db1-00224804f8e2", "HasChanged": null, "Description": { "LocalizedLabels": [ { "Label": "A table to store information about customer bank accounts", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "daf026b7-dfde-4b7b-8e52-91f31b098a9d", "HasChanged": null } ], "UserLocalizedLabel": { "Label": "A table to store information about customer bank accounts", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "daf026b7-dfde-4b7b-8e52-91f31b098a9d", "HasChanged": null } }, "DisplayCollectionName": { "LocalizedLabels": [ { "Label": "Bank Accounts", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "5c598c79-b89d-4679-8a40-9562d0a1e4fb", "HasChanged": null } ], "UserLocalizedLabel": { "Label": "Bank Accounts", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "5c598c79-b89d-4679-8a40-9562d0a1e4fb", "HasChanged": null } }, "DisplayName": { "LocalizedLabels": [ { "Label": "Bank Account", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "4e4c3fdc-7711-4b43-8eba-9155bb7100c0", "HasChanged": null } ], "UserLocalizedLabel": { "Label": "Bank Account", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "4e4c3fdc-7711-4b43-8eba-9155bb7100c0", "HasChanged": null } }, "IsAuditEnabled": { "Value": false, "CanBeChanged": true, "ManagedPropertyLogicalName": "canmodifyauditsettings" }, "IsValidForQueue": { "Value": false, "CanBeChanged": true, "ManagedPropertyLogicalName": "canmodifyqueuesettings" }, "IsConnectionsEnabled": { "Value": false, "CanBeChanged": true, "ManagedPropertyLogicalName": "canmodifyconnectionsettings" }, "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" }, "CanBeInCustomEntityAssociation": { "Value": true, "CanBeChanged": true, "ManagedPropertyLogicalName": "canbeincustomentityassociation" }, "CanEnableSyncToExternalSearchIndex": { "Value": true, "CanBeChanged": true, "ManagedPropertyLogicalName": "canenablesynctoexternalsearchindex" }, "CanModifyAdditionalSettings": { "Value": true, "CanBeChanged": true, "ManagedPropertyLogicalName": "canmodifyadditionalsettings" }, "CanChangeHierarchicalRelationship": { "Value": true, "CanBeChanged": true, "ManagedPropertyLogicalName": "canchangehierarchicalrelationship" }, "CanChangeTrackingBeEnabled": { "Value": true, "CanBeChanged": true, "ManagedPropertyLogicalName": "canchangetrackingbeenabled" }, "IsMailMergeEnabled": { "Value": false, "CanBeChanged": true, "ManagedPropertyLogicalName": "canmodifymailmergesettings" }, "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" }, "Privileges": [ { "CanBeBasic": true, "CanBeDeep": true, "CanBeGlobal": true, "CanBeLocal": true, "CanBeEntityReference": false, "CanBeParentEntityReference": false, "Name": "prvCreatesample_BankAccount", "PrivilegeId": "44f00701-716e-4584-8bab-cb0d263c070b", "PrivilegeType": "Create" }, { "CanBeBasic": true, "CanBeDeep": true, "CanBeGlobal": true, "CanBeLocal": true, "CanBeEntityReference": false, "CanBeParentEntityReference": false, "Name": "prvReadsample_BankAccount", "PrivilegeId": "9cad3243-d0fe-467e-a731-c8b3416a6252", "PrivilegeType": "Read" }, { "CanBeBasic": true, "CanBeDeep": true, "CanBeGlobal": true, "CanBeLocal": true, "CanBeEntityReference": false, "CanBeParentEntityReference": false, "Name": "prvWritesample_BankAccount", "PrivilegeId": "dc5465ed-223f-4b13-a272-fff25e5b5270", "PrivilegeType": "Write" }, { "CanBeBasic": true, "CanBeDeep": true, "CanBeGlobal": true, "CanBeLocal": true, "CanBeEntityReference": false, "CanBeParentEntityReference": false, "Name": "prvDeletesample_BankAccount", "PrivilegeId": "9a409df2-ca4a-4ad9-8218-df88424dd7a0", "PrivilegeType": "Delete" }, { "CanBeBasic": true, "CanBeDeep": true, "CanBeGlobal": true, "CanBeLocal": true, "CanBeEntityReference": false, "CanBeParentEntityReference": false, "Name": "prvAssignsample_BankAccount", "PrivilegeId": "73bf7dd3-f532-4468-abfe-84bbf0eae058", "PrivilegeType": "Assign" }, { "CanBeBasic": true, "CanBeDeep": true, "CanBeGlobal": true, "CanBeLocal": true, "CanBeEntityReference": false, "CanBeParentEntityReference": false, "Name": "prvSharesample_BankAccount", "PrivilegeId": "292f6e27-9603-4835-882d-e28c175432ed", "PrivilegeType": "Share" }, { "CanBeBasic": true, "CanBeDeep": true, "CanBeGlobal": true, "CanBeLocal": true, "CanBeEntityReference": false, "CanBeParentEntityReference": false, "Name": "prvAppendsample_BankAccount", "PrivilegeId": "42401aa6-6447-4fdc-9679-bcb89b62bd76", "PrivilegeType": "Append" }, { "CanBeBasic": true, "CanBeDeep": true, "CanBeGlobal": true, "CanBeLocal": true, "CanBeEntityReference": false, "CanBeParentEntityReference": false, "Name": "prvAppendTosample_BankAccount", "PrivilegeId": "847ba62d-2f33-4208-87e6-52532b331f60", "PrivilegeType": "AppendTo" } ], "Settings": [] }
Console output:
The sample displays the JSON retrieved from the server.
- This retrieve operation doesn't include any
Update the
sample_BankAccount
table. The only values that are changed areHasActivities
andDescription
, but you must send the entire definition withPUT
.Request:
PUT [Organization Uri]/api/data/v9.2/EntityDefinitions(LogicalName='sample_bankaccount') HTTP/1.1 MSCRM.SolutionUniqueName: examplesolution MSCRM.MergeLabels: true OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json { "@odata.type": "Microsoft.Dynamics.CRM.EntityMetadata", "ActivityTypeMask": 0, "AutoCreateAccessTeams": false, "AutoRouteToOwnerQueue": false, "CanBeInCustomEntityAssociation": { "@odata.type": "Microsoft.Dynamics.CRM.BooleanManagedProperty", "Value": true, "CanBeChanged": true, "ManagedPropertyLogicalName": "canbeincustomentityassociation" }, "CanBeInManyToMany": { "@odata.type": "Microsoft.Dynamics.CRM.BooleanManagedProperty", "Value": true, "CanBeChanged": true, "ManagedPropertyLogicalName": "canbeinmanytomany" }, "CanBePrimaryEntityInRelationship": { "@odata.type": "Microsoft.Dynamics.CRM.BooleanManagedProperty", "Value": true, "CanBeChanged": true, "ManagedPropertyLogicalName": "canbeprimaryentityinrelationship" }, "CanBeRelatedEntityInRelationship": { "@odata.type": "Microsoft.Dynamics.CRM.BooleanManagedProperty", "Value": true, "CanBeChanged": true, "ManagedPropertyLogicalName": "canberelatedentityinrelationship" }, "CanChangeHierarchicalRelationship": { "@odata.type": "Microsoft.Dynamics.CRM.BooleanManagedProperty", "Value": true, "CanBeChanged": true, "ManagedPropertyLogicalName": "canchangehierarchicalrelationship" }, "CanChangeTrackingBeEnabled": { "@odata.type": "Microsoft.Dynamics.CRM.BooleanManagedProperty", "Value": true, "CanBeChanged": true, "ManagedPropertyLogicalName": "canchangetrackingbeenabled" }, "CanCreateAttributes": { "@odata.type": "Microsoft.Dynamics.CRM.BooleanManagedProperty", "Value": true, "CanBeChanged": false, "ManagedPropertyLogicalName": "cancreateattributes" }, "CanCreateCharts": { "@odata.type": "Microsoft.Dynamics.CRM.BooleanManagedProperty", "Value": true, "CanBeChanged": true, "ManagedPropertyLogicalName": "cancreatecharts" }, "CanCreateForms": { "@odata.type": "Microsoft.Dynamics.CRM.BooleanManagedProperty", "Value": true, "CanBeChanged": true, "ManagedPropertyLogicalName": "cancreateforms" }, "CanCreateViews": { "@odata.type": "Microsoft.Dynamics.CRM.BooleanManagedProperty", "Value": true, "CanBeChanged": true, "ManagedPropertyLogicalName": "cancreateviews" }, "CanEnableSyncToExternalSearchIndex": { "@odata.type": "Microsoft.Dynamics.CRM.BooleanManagedProperty", "Value": true, "CanBeChanged": true, "ManagedPropertyLogicalName": "canenablesynctoexternalsearchindex" }, "CanModifyAdditionalSettings": { "@odata.type": "Microsoft.Dynamics.CRM.BooleanManagedProperty", "Value": true, "CanBeChanged": true, "ManagedPropertyLogicalName": "canmodifyadditionalsettings" }, "CanTriggerWorkflow": true, "ChangeTrackingEnabled": false, "CollectionSchemaName": "sample_BankAccounts", "DaysSinceRecordLastModified": 0, "Description": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Contains information about customer bank accounts", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Contains information about customer bank accounts", "LanguageCode": 1033, "IsManaged": false } }, "DisplayCollectionName": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Bank Accounts", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "5c598c79-b89d-4679-8a40-9562d0a1e4fb" } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Bank Accounts", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "5c598c79-b89d-4679-8a40-9562d0a1e4fb" } }, "DisplayName": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Bank Account", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "4e4c3fdc-7711-4b43-8eba-9155bb7100c0" } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Bank Account", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "4e4c3fdc-7711-4b43-8eba-9155bb7100c0" } }, "EnforceStateTransitions": false, "EntityHelpUrlEnabled": false, "EntitySetName": "sample_bankaccounts", "HasActivities": true, "HasFeedback": false, "HasNotes": false, "IntroducedVersion": "1.0.0.0", "IsActivity": false, "IsActivityParty": false, "IsAIRUpdated": false, "IsAuditEnabled": { "@odata.type": "Microsoft.Dynamics.CRM.BooleanManagedProperty", "Value": false, "CanBeChanged": true, "ManagedPropertyLogicalName": "canmodifyauditsettings" }, "IsAvailableOffline": false, "IsBPFEntity": false, "IsBusinessProcessEnabled": false, "IsChildEntity": false, "IsConnectionsEnabled": { "@odata.type": "Microsoft.Dynamics.CRM.BooleanManagedProperty", "Value": false, "CanBeChanged": true, "ManagedPropertyLogicalName": "canmodifyconnectionsettings" }, "IsCustomEntity": true, "IsCustomizable": { "@odata.type": "Microsoft.Dynamics.CRM.BooleanManagedProperty", "Value": true, "CanBeChanged": true, "ManagedPropertyLogicalName": "iscustomizable" }, "IsDocumentManagementEnabled": false, "IsDocumentRecommendationsEnabled": false, "IsDuplicateDetectionEnabled": { "@odata.type": "Microsoft.Dynamics.CRM.BooleanManagedProperty", "Value": false, "CanBeChanged": true, "ManagedPropertyLogicalName": "canmodifyduplicatedetectionsettings" }, "IsEnabledForCharts": true, "IsEnabledForExternalChannels": false, "IsEnabledForTrace": false, "IsImportable": true, "IsInteractionCentricEnabled": false, "IsIntersect": false, "IsKnowledgeManagementEnabled": false, "IsLogicalEntity": false, "IsMailMergeEnabled": { "@odata.type": "Microsoft.Dynamics.CRM.BooleanManagedProperty", "Value": false, "CanBeChanged": true, "ManagedPropertyLogicalName": "canmodifymailmergesettings" }, "IsManaged": false, "IsMappable": { "@odata.type": "Microsoft.Dynamics.CRM.BooleanManagedProperty", "Value": true, "CanBeChanged": false, "ManagedPropertyLogicalName": "ismappable" }, "IsMSTeamsIntegrationEnabled": false, "IsOfflineInMobileClient": { "@odata.type": "Microsoft.Dynamics.CRM.BooleanManagedProperty", "Value": false, "CanBeChanged": true, "ManagedPropertyLogicalName": "canmodifymobileclientoffline" }, "IsOneNoteIntegrationEnabled": false, "IsOptimisticConcurrencyEnabled": true, "IsPrivate": false, "IsQuickCreateEnabled": false, "IsReadingPaneEnabled": true, "IsReadOnlyInMobileClient": { "@odata.type": "Microsoft.Dynamics.CRM.BooleanManagedProperty", "Value": false, "CanBeChanged": true, "ManagedPropertyLogicalName": "canmodifymobileclientreadonly" }, "IsRenameable": { "@odata.type": "Microsoft.Dynamics.CRM.BooleanManagedProperty", "Value": true, "CanBeChanged": true, "ManagedPropertyLogicalName": "isrenameable" }, "IsSLAEnabled": false, "IsSolutionAware": false, "IsStateModelAware": true, "IsValidForAdvancedFind": true, "IsValidForQueue": { "@odata.type": "Microsoft.Dynamics.CRM.BooleanManagedProperty", "Value": false, "CanBeChanged": true, "ManagedPropertyLogicalName": "canmodifyqueuesettings" }, "IsVisibleInMobile": { "@odata.type": "Microsoft.Dynamics.CRM.BooleanManagedProperty", "Value": false, "CanBeChanged": true, "ManagedPropertyLogicalName": "canmodifymobilevisibility" }, "IsVisibleInMobileClient": { "@odata.type": "Microsoft.Dynamics.CRM.BooleanManagedProperty", "Value": false, "CanBeChanged": true, "ManagedPropertyLogicalName": "canmodifymobileclientvisibility" }, "LogicalCollectionName": "sample_bankaccounts", "LogicalName": "sample_bankaccount", "MobileOfflineFilters": "", "ObjectTypeCode": 10393, "OwnershipType": "UserOwned", "PrimaryIdAttribute": "sample_bankaccountid", "PrimaryNameAttribute": "sample_name", "Privileges": [ { "@odata.type": "Microsoft.Dynamics.CRM.SecurityPrivilegeMetadata", "CanBeBasic": true, "CanBeDeep": true, "CanBeGlobal": true, "CanBeLocal": true, "CanBeEntityReference": false, "CanBeParentEntityReference": false, "Name": "prvCreatesample_BankAccount", "PrivilegeId": "44f00701-716e-4584-8bab-cb0d263c070b", "PrivilegeType": "Create" }, { "@odata.type": "Microsoft.Dynamics.CRM.SecurityPrivilegeMetadata", "CanBeBasic": true, "CanBeDeep": true, "CanBeGlobal": true, "CanBeLocal": true, "CanBeEntityReference": false, "CanBeParentEntityReference": false, "Name": "prvReadsample_BankAccount", "PrivilegeId": "9cad3243-d0fe-467e-a731-c8b3416a6252", "PrivilegeType": "Read" }, { "@odata.type": "Microsoft.Dynamics.CRM.SecurityPrivilegeMetadata", "CanBeBasic": true, "CanBeDeep": true, "CanBeGlobal": true, "CanBeLocal": true, "CanBeEntityReference": false, "CanBeParentEntityReference": false, "Name": "prvWritesample_BankAccount", "PrivilegeId": "dc5465ed-223f-4b13-a272-fff25e5b5270", "PrivilegeType": "Write" }, { "@odata.type": "Microsoft.Dynamics.CRM.SecurityPrivilegeMetadata", "CanBeBasic": true, "CanBeDeep": true, "CanBeGlobal": true, "CanBeLocal": true, "CanBeEntityReference": false, "CanBeParentEntityReference": false, "Name": "prvDeletesample_BankAccount", "PrivilegeId": "9a409df2-ca4a-4ad9-8218-df88424dd7a0", "PrivilegeType": "Delete" }, { "@odata.type": "Microsoft.Dynamics.CRM.SecurityPrivilegeMetadata", "CanBeBasic": true, "CanBeDeep": true, "CanBeGlobal": true, "CanBeLocal": true, "CanBeEntityReference": false, "CanBeParentEntityReference": false, "Name": "prvAssignsample_BankAccount", "PrivilegeId": "73bf7dd3-f532-4468-abfe-84bbf0eae058", "PrivilegeType": "Assign" }, { "@odata.type": "Microsoft.Dynamics.CRM.SecurityPrivilegeMetadata", "CanBeBasic": true, "CanBeDeep": true, "CanBeGlobal": true, "CanBeLocal": true, "CanBeEntityReference": false, "CanBeParentEntityReference": false, "Name": "prvSharesample_BankAccount", "PrivilegeId": "292f6e27-9603-4835-882d-e28c175432ed", "PrivilegeType": "Share" }, { "@odata.type": "Microsoft.Dynamics.CRM.SecurityPrivilegeMetadata", "CanBeBasic": true, "CanBeDeep": true, "CanBeGlobal": true, "CanBeLocal": true, "CanBeEntityReference": false, "CanBeParentEntityReference": false, "Name": "prvAppendsample_BankAccount", "PrivilegeId": "42401aa6-6447-4fdc-9679-bcb89b62bd76", "PrivilegeType": "Append" }, { "@odata.type": "Microsoft.Dynamics.CRM.SecurityPrivilegeMetadata", "CanBeBasic": true, "CanBeDeep": true, "CanBeGlobal": true, "CanBeLocal": true, "CanBeEntityReference": false, "CanBeParentEntityReference": false, "Name": "prvAppendTosample_BankAccount", "PrivilegeId": "847ba62d-2f33-4208-87e6-52532b331f60", "PrivilegeType": "AppendTo" } ], "ReportViewName": "Filteredsample_BankAccount", "SchemaName": "sample_BankAccount", "Settings": [], "SyncToExternalSearchIndex": false, "UsesBusinessDataLabelTable": false, "MetadataId": "5872b902-112a-ed11-9db1-00224804f8e2" }
Response:
HTTP/1.1 204 NoContent OData-Version: 4.0 OData-EntityId: [Organization Uri]/api/data/v9.2/EntityDefinitions(LogicalName='sample_bankaccount')
Console output:
Sending request to update the sample_BankAccount table... Updated the Bank Account table
Section 2: Create, Retrieve and Update Columns
This section creates and retrieves a selected group of column definitions. Each of these types are derived from AttributeMetadata EntityType so they share most of the same common properties. However, each derived type has a few special properties.
Boolean Column
Create a Boolean column using BooleanAttributeMetadata EntityType. Despite the name, boolean columns have an
OptionSet
property just like choice columns. However, they always have only two options:TrueOption
with value 1 andFalseOption
with value 0.Request:
POST [Organization Uri]/api/data/v9.2/EntityDefinitions(LogicalName='sample_bankaccount')/Attributes HTTP/1.1 MSCRM.SolutionUniqueName: examplesolution OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json { "@odata.type": "Microsoft.Dynamics.CRM.BooleanAttributeMetadata", "AttributeType": "Boolean", "AttributeTypeName": { "Value": "BooleanType" }, "DefaultValue": false, "OptionSet": { "@odata.type": "Microsoft.Dynamics.CRM.BooleanOptionSetMetadata", "TrueOption": { "Value": 1, "Label": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "True", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "True", "LanguageCode": 1033, "IsManaged": false } } }, "FalseOption": { "Value": 0, "Label": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "False", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "False", "LanguageCode": 1033, "IsManaged": false } } }, "OptionSetType": "Boolean" }, "Description": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Boolean Attribute", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Boolean Attribute", "LanguageCode": 1033, "IsManaged": false } }, "DisplayName": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Sample Boolean", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Sample Boolean", "LanguageCode": 1033, "IsManaged": false } }, "RequiredLevel": { "Value": "None", "CanBeChanged": false, "ManagedPropertyLogicalName": "canmodifyrequirementlevelsettings" }, "SchemaName": "sample_Boolean" }
Response:
HTTP/1.1 204 NoContent OData-Version: 4.0 OData-EntityId: [Organization Uri]/api/data/v9.2/EntityDefinitions(LogicalName='sample_bankaccount')/Attributes(73f33b3d-112a-ed11-9db1-00224804f8e2)
Retrieve the Boolean column including
$expand=OptionSet
so that the options can be retrieved.Note
The URL for this request includes
/Microsoft.Dynamics.CRM.BooleanAttributeMetadata
which performs a cast operation that is required to return any property that is not defined within the AttributeMetadata EntityType. Without this, theOptionSet
expansion is not possible.Request:
GET [Organization Uri]/api/data/v9.2/EntityDefinitions(LogicalName='sample_bankaccount')/Attributes(LogicalName='sample_boolean')/Microsoft.Dynamics.CRM.BooleanAttributeMetadata?$expand=OptionSet HTTP/1.1 Consistency: Strong OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json
Response:
HTTP/1.1 200 OK OData-Version: 4.0 { "@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#EntityDefinitions('sample_bankaccount')/Attributes/Microsoft.Dynamics.CRM.BooleanAttributeMetadata(OptionSet())/$entity", "MetadataId": "73f33b3d-112a-ed11-9db1-00224804f8e2", "HasChanged": null, "AttributeOf": null, "AttributeType": "Boolean", "ColumnNumber": 35, "DeprecatedVersion": null, "IntroducedVersion": "1.0.0.0", "EntityLogicalName": "sample_bankaccount", "IsCustomAttribute": true, "IsPrimaryId": false, "IsValidODataAttribute": true, "IsPrimaryName": false, "IsValidForCreate": true, "IsValidForRead": true, "IsValidForUpdate": true, "CanBeSecuredForRead": true, "CanBeSecuredForCreate": true, "CanBeSecuredForUpdate": true, "IsSecured": false, "IsRetrievable": false, "IsFilterable": false, "IsSearchable": false, "IsManaged": false, "LinkedAttributeId": null, "LogicalName": "sample_boolean", "IsValidForForm": true, "IsRequiredForForm": false, "IsValidForGrid": true, "SchemaName": "sample_Boolean", "ExternalName": null, "IsLogical": false, "IsDataSourceSecret": false, "InheritsFrom": null, "CreatedOn": "2022-09-01T16:15:08Z", "ModifiedOn": "2022-09-01T16:15:08Z", "SourceType": 0, "AutoNumberFormat": null, "DefaultValue": false, "FormulaDefinition": "", "SourceTypeMask": 0, "AttributeTypeName": { "Value": "BooleanType" }, "Description": { "LocalizedLabels": [ { "Label": "Boolean Attribute", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "ea50b52d-53e4-4f8d-82ce-8f74a7554800", "HasChanged": null } ], "UserLocalizedLabel": { "Label": "Boolean Attribute", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "ea50b52d-53e4-4f8d-82ce-8f74a7554800", "HasChanged": null } }, "DisplayName": { "LocalizedLabels": [ { "Label": "Sample Boolean", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "9e4daa21-8774-4de9-b467-d046389459dc", "HasChanged": null } ], "UserLocalizedLabel": { "Label": "Sample Boolean", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "9e4daa21-8774-4de9-b467-d046389459dc", "HasChanged": null } }, "IsAuditEnabled": { "Value": true, "CanBeChanged": true, "ManagedPropertyLogicalName": "canmodifyauditsettings" }, "IsGlobalFilterEnabled": { "Value": false, "CanBeChanged": true, "ManagedPropertyLogicalName": "canmodifyglobalfiltersettings" }, "IsSortableEnabled": { "Value": false, "CanBeChanged": true, "ManagedPropertyLogicalName": "canmodifyissortablesettings" }, "IsCustomizable": { "Value": true, "CanBeChanged": true, "ManagedPropertyLogicalName": "iscustomizable" }, "IsRenameable": { "Value": true, "CanBeChanged": true, "ManagedPropertyLogicalName": "isrenameable" }, "IsValidForAdvancedFind": { "Value": true, "CanBeChanged": true, "ManagedPropertyLogicalName": "canmodifysearchsettings" }, "RequiredLevel": { "Value": "None", "CanBeChanged": false, "ManagedPropertyLogicalName": "canmodifyrequirementlevelsettings" }, "CanModifyAdditionalSettings": { "Value": true, "CanBeChanged": true, "ManagedPropertyLogicalName": "canmodifyadditionalsettings" }, "Settings": [], "OptionSet": { "MetadataId": "74f33b3d-112a-ed11-9db1-00224804f8e2", "HasChanged": null, "IsCustomOptionSet": true, "IsGlobal": false, "IsManaged": false, "Name": "sample_bankaccount_sample_boolean", "ExternalTypeName": null, "OptionSetType": "Boolean", "IntroducedVersion": "1.0.0.0", "Description": { "LocalizedLabels": [ { "Label": "Boolean Attribute", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "76f33b3d-112a-ed11-9db1-00224804f8e2", "HasChanged": null } ], "UserLocalizedLabel": { "Label": "Boolean Attribute", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "76f33b3d-112a-ed11-9db1-00224804f8e2", "HasChanged": null } }, "DisplayName": { "LocalizedLabels": [ { "Label": "Sample Boolean", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "75f33b3d-112a-ed11-9db1-00224804f8e2", "HasChanged": null } ], "UserLocalizedLabel": { "Label": "Sample Boolean", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "75f33b3d-112a-ed11-9db1-00224804f8e2", "HasChanged": null } }, "IsCustomizable": { "Value": true, "CanBeChanged": true, "ManagedPropertyLogicalName": "iscustomizable" }, "TrueOption": { "Value": 1, "Color": null, "IsManaged": false, "ExternalValue": "", "ParentValues": [], "MetadataId": null, "HasChanged": null, "Label": { "LocalizedLabels": [ { "Label": "True", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "12049c5f-e99d-453f-8315-3933512539a1", "HasChanged": null } ], "UserLocalizedLabel": { "Label": "True", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "12049c5f-e99d-453f-8315-3933512539a1", "HasChanged": null } }, "Description": { "LocalizedLabels": [], "UserLocalizedLabel": null } }, "FalseOption": { "Value": 0, "Color": null, "IsManaged": false, "ExternalValue": "", "ParentValues": [], "MetadataId": null, "HasChanged": null, "Label": { "LocalizedLabels": [ { "Label": "False", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "e3d4c2b1-ad54-4d3a-8e01-f759da0e476f", "HasChanged": null } ], "UserLocalizedLabel": { "Label": "False", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "e3d4c2b1-ad54-4d3a-8e01-f759da0e476f", "HasChanged": null } }, "Description": { "LocalizedLabels": [], "UserLocalizedLabel": null } } } }
Console output:
Original Option Labels: True Option Label:'True' Value: 1 False Option Label:'False' Value: 0
Update the Boolean column. The only changes are to the
DisplayName
,Description
, andRequiredLevel
properties, but the entire definition is included becausePUT
is used.Note
Even though the
OptionSet
property is included in this payload, any changes to the options would not be applied because they are not considered part of the column definition. They must be updated separately and this sample will show you how in following steps.Request:
PUT [Organization Uri]/api/data/v9.2/EntityDefinitions(LogicalName='sample_bankaccount')/Attributes(LogicalName='sample_boolean') HTTP/1.1 MSCRM.SolutionUniqueName: examplesolution MSCRM.MergeLabels: true OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json { "@odata.type": "Microsoft.Dynamics.CRM.BooleanAttributeMetadata", "AttributeType": "Boolean", "AttributeTypeName": { "Value": "BooleanType" }, "DefaultValue": false, "FormulaDefinition": "", "SourceTypeMask": 0, "OptionSet": { "@odata.type": "Microsoft.Dynamics.CRM.BooleanOptionSetMetadata", "TrueOption": { "Value": 1, "Label": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "True", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "12049c5f-e99d-453f-8315-3933512539a1" } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "True", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "12049c5f-e99d-453f-8315-3933512539a1" } }, "Description": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "LanguageCode": 0, "IsManaged": false } }, "IsManaged": false, "ExternalValue": "" }, "FalseOption": { "Value": 0, "Label": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "False", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "e3d4c2b1-ad54-4d3a-8e01-f759da0e476f" } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "False", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "e3d4c2b1-ad54-4d3a-8e01-f759da0e476f" } }, "Description": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "LanguageCode": 0, "IsManaged": false } }, "IsManaged": false, "ExternalValue": "" }, "OptionSetType": "Boolean", "Description": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Boolean Attribute", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "76f33b3d-112a-ed11-9db1-00224804f8e2" } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Boolean Attribute", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "76f33b3d-112a-ed11-9db1-00224804f8e2" } }, "DisplayName": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Sample Boolean", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "75f33b3d-112a-ed11-9db1-00224804f8e2" } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Sample Boolean", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "75f33b3d-112a-ed11-9db1-00224804f8e2" } }, "IntroducedVersion": "1.0.0.0", "IsCustomizable": { "@odata.type": "Microsoft.Dynamics.CRM.BooleanManagedProperty", "Value": true, "CanBeChanged": true, "ManagedPropertyLogicalName": "iscustomizable" }, "IsCustomOptionSet": true, "IsGlobal": false, "IsManaged": false, "Name": "sample_bankaccount_sample_boolean", "MetadataId": "74f33b3d-112a-ed11-9db1-00224804f8e2" }, "CanBeSecuredForCreate": true, "CanBeSecuredForRead": true, "CanBeSecuredForUpdate": true, "CanModifyAdditionalSettings": { "@odata.type": "Microsoft.Dynamics.CRM.BooleanManagedProperty", "Value": true, "CanBeChanged": true, "ManagedPropertyLogicalName": "canmodifyadditionalsettings" }, "ColumnNumber": 35, "Description": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Boolean Attribute Updated", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Boolean Attribute Updated", "LanguageCode": 1033, "IsManaged": false } }, "DisplayName": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Sample Boolean Updated", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Sample Boolean Updated", "LanguageCode": 1033, "IsManaged": false } }, "EntityLogicalName": "sample_bankaccount", "IntroducedVersion": "1.0.0.0", "IsAuditEnabled": { "@odata.type": "Microsoft.Dynamics.CRM.BooleanManagedProperty", "Value": true, "CanBeChanged": true, "ManagedPropertyLogicalName": "canmodifyauditsettings" }, "IsCustomAttribute": true, "IsCustomizable": { "@odata.type": "Microsoft.Dynamics.CRM.BooleanManagedProperty", "Value": true, "CanBeChanged": true, "ManagedPropertyLogicalName": "iscustomizable" }, "IsDataSourceSecret": false, "IsFilterable": false, "IsGlobalFilterEnabled": { "@odata.type": "Microsoft.Dynamics.CRM.BooleanManagedProperty", "Value": false, "CanBeChanged": true, "ManagedPropertyLogicalName": "canmodifyglobalfiltersettings" }, "IsLogical": false, "IsManaged": false, "IsPrimaryId": false, "IsPrimaryName": false, "IsRenameable": { "@odata.type": "Microsoft.Dynamics.CRM.BooleanManagedProperty", "Value": true, "CanBeChanged": true, "ManagedPropertyLogicalName": "isrenameable" }, "IsRequiredForForm": false, "IsRetrievable": false, "IsSearchable": false, "IsSecured": false, "IsSortableEnabled": { "@odata.type": "Microsoft.Dynamics.CRM.BooleanManagedProperty", "Value": false, "CanBeChanged": true, "ManagedPropertyLogicalName": "canmodifyissortablesettings" }, "IsValidForAdvancedFind": { "@odata.type": "Microsoft.Dynamics.CRM.BooleanManagedProperty", "Value": true, "CanBeChanged": true, "ManagedPropertyLogicalName": "canmodifysearchsettings" }, "IsValidForCreate": true, "IsValidForForm": true, "IsValidForGrid": true, "IsValidForRead": true, "IsValidForUpdate": true, "LogicalName": "sample_boolean", "RequiredLevel": { "Value": "ApplicationRequired", "CanBeChanged": false, "ManagedPropertyLogicalName": "canmodifyrequirementlevelsettings" }, "SchemaName": "sample_Boolean", "SourceType": 0, "MetadataId": "73f33b3d-112a-ed11-9db1-00224804f8e2" }
Response:
HTTP/1.1 204 NoContent OData-Version: 4.0 OData-EntityId: [Organization Uri]/api/data/v9.2/EntityDefinitions(LogicalName='sample_bankaccount')/Attributes(LogicalName='sample_boolean')
Console output:
Updated Boolean Column properties
Update Option Values
Update each of the boolean options using UpdateOptionValue Action.
Note
Here we are applying changes to options in a boolean attribute, but you will use UpdateOptionValue
for options in any type of column that uses them except status
columns, where you must use the UpdateStateValue Action.
Change the
TrueOption
value label to 'Up'.Request:
POST [Organization Uri]/api/data/v9.2/UpdateOptionValue HTTP/1.1 OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json { "AttributeLogicalName": "sample_boolean", "EntityLogicalName": "sample_bankaccount", "Value": 1, "Label": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Up", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Up", "LanguageCode": 1033, "IsManaged": false } }, "MergeLabels": true }
Response:
HTTP/1.1 204 NoContent OData-Version: 4.0
Change the
FalseOption
value label to 'Down'.Request:
POST [Organization Uri]/api/data/v9.2/UpdateOptionValue HTTP/1.1 OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json { "AttributeLogicalName": "sample_boolean", "EntityLogicalName": "sample_bankaccount", "Value": 0, "Label": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Down", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Down", "LanguageCode": 1033, "IsManaged": false } }, "MergeLabels": true }
Response:
HTTP/1.1 204 NoContent OData-Version: 4.0
Console output:
Updated option labels
Retrieve the modified option values for the Boolean column using the same query as before:
Console output:
Updated Option Labels: Updated True Option Label:'Up' Value: 1 Updated False Option Label:'Down' Value: 0
DateTime Column
Create a DateTime column using DateTimeAttributeMetadata EntityType.
Request:
POST [Organization Uri]/api/data/v9.2/EntityDefinitions(LogicalName='sample_bankaccount')/Attributes HTTP/1.1 MSCRM.SolutionUniqueName: examplesolution OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json { "@odata.type": "Microsoft.Dynamics.CRM.DateTimeAttributeMetadata", "AttributeType": "DateTime", "AttributeTypeName": { "Value": "DateTimeType" }, "Format": "DateOnly", "ImeMode": "Disabled", "DateTimeBehavior": { "Value": "DateOnly" }, "Description": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "DateTime Attribute", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "DateTime Attribute", "LanguageCode": 1033, "IsManaged": false } }, "DisplayName": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Sample DateTime", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Sample DateTime", "LanguageCode": 1033, "IsManaged": false } }, "RequiredLevel": { "Value": "None", "CanBeChanged": false, "ManagedPropertyLogicalName": "canmodifyrequirementlevelsettings" }, "SchemaName": "sample_DateTime" }
Response:
HTTP/1.1 204 NoContent OData-Version: 4.0 OData-EntityId: [Organization Uri]/api/data/v9.2/EntityDefinitions(LogicalName='sample_bankaccount')/Attributes(f1db3d43-112a-ed11-9db1-00224804f8e2)
Console output:
Created DateTime column with id:f1db3d43-112a-ed11-9db1-00224804f8e2
Retrieve selected values of the DateTime column.
Request:
GET [Organization Uri]/api/data/v9.2/EntityDefinitions(LogicalName='sample_bankaccount')/Attributes(LogicalName='sample_datetime')/Microsoft.Dynamics.CRM.DateTimeAttributeMetadata?$select=SchemaName,Format,DateTimeBehavior HTTP/1.1 Consistency: Strong OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json
Response:
HTTP/1.1 200 OK OData-Version: 4.0 { "@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#EntityDefinitions('sample_bankaccount')/Attributes/Microsoft.Dynamics.CRM.DateTimeAttributeMetadata(SchemaName,Format,DateTimeBehavior)/$entity", "SchemaName": "sample_DateTime", "Format": "DateOnly", "MetadataId": "f1db3d43-112a-ed11-9db1-00224804f8e2", "DateTimeBehavior": { "Value": "DateOnly" } }
Console output:
Retrieved Datetime column properties: DateTime Format:'DateOnly' DateTime DateTimeBehavior:'DateOnly'
Decimal Column
Create a Decimal Column using DecimalAttributeMetadata EntityType.
Request:
POST [Organization Uri]/api/data/v9.2/EntityDefinitions(LogicalName='sample_bankaccount')/Attributes HTTP/1.1 MSCRM.SolutionUniqueName: examplesolution OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json { "@odata.type": "Microsoft.Dynamics.CRM.DecimalAttributeMetadata", "AttributeType": "Decimal", "AttributeTypeName": { "Value": "DecimalType" }, "MaxValue": 100.0, "MinValue": 0.0, "Precision": 1, "Description": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Decimal Attribute", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Decimal Attribute", "LanguageCode": 1033, "IsManaged": false } }, "DisplayName": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Sample Decimal", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Sample Decimal", "LanguageCode": 1033, "IsManaged": false } }, "RequiredLevel": { "Value": "None", "CanBeChanged": false, "ManagedPropertyLogicalName": "canmodifyrequirementlevelsettings" }, "SchemaName": "sample_Decimal" }
Response:
HTTP/1.1 204 NoContent OData-Version: 4.0 OData-EntityId: [Organization Uri]/api/data/v9.2/EntityDefinitions(LogicalName='sample_bankaccount')/Attributes(f2db3d43-112a-ed11-9db1-00224804f8e2)
Console output:
Created Decimal column with id:f2db3d43-112a-ed11-9db1-00224804f8e2
Retrieve selected values of the Decimal column.
Request:
GET [Organization Uri]/api/data/v9.2/EntityDefinitions(LogicalName='sample_bankaccount')/Attributes(LogicalName='sample_decimal')/Microsoft.Dynamics.CRM.DecimalAttributeMetadata?$select=SchemaName,MaxValue,MinValue,Precision HTTP/1.1 Consistency: Strong OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json
Response:
HTTP/1.1 200 OK OData-Version: 4.0 { "@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#EntityDefinitions('sample_bankaccount')/Attributes/Microsoft.Dynamics.CRM.DecimalAttributeMetadata(SchemaName,MaxValue,MinValue,Precision)/$entity", "SchemaName": "sample_Decimal", "MaxValue": 100, "MinValue": 0, "Precision": 1, "MetadataId": "f2db3d43-112a-ed11-9db1-00224804f8e2" }
Console output:
Retrieved Decimal column properties: Decimal MaxValue:100 Decimal MinValue:0 Decimal Precision:1
Integer Column
Create an Integer column using IntegerAttributeMetadata EntityType.
Request:
POST [Organization Uri]/api/data/v9.2/EntityDefinitions(LogicalName='sample_bankaccount')/Attributes HTTP/1.1 MSCRM.SolutionUniqueName: examplesolution OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json { "@odata.type": "Microsoft.Dynamics.CRM.IntegerAttributeMetadata", "AttributeType": "Integer", "AttributeTypeName": { "Value": "IntegerType" }, "MaxValue": 100, "MinValue": 0, "Format": "None", "SourceTypeMask": 0, "Description": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Integer Attribute", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Integer Attribute", "LanguageCode": 1033, "IsManaged": false } }, "DisplayName": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Sample Integer", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Sample Integer", "LanguageCode": 1033, "IsManaged": false } }, "RequiredLevel": { "Value": "None", "CanBeChanged": false, "ManagedPropertyLogicalName": "canmodifyrequirementlevelsettings" }, "SchemaName": "sample_Integer" }
Response:
HTTP/1.1 204 NoContent OData-Version: 4.0 OData-EntityId: [Organization Uri]/api/data/v9.2/EntityDefinitions(LogicalName='sample_bankaccount')/Attributes(f5db3d43-112a-ed11-9db1-00224804f8e2)
Console output:
Created Integer column with id:f5db3d43-112a-ed11-9db1-00224804f8e2
Retrieve selected values of the Integer column.
Request:
GET [Organization Uri]/api/data/v9.2/EntityDefinitions(LogicalName='sample_bankaccount')/Attributes(LogicalName='sample_integer')/Microsoft.Dynamics.CRM.IntegerAttributeMetadata?$select=SchemaName,MaxValue,MinValue,Format HTTP/1.1 Consistency: Strong OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json
Response:
HTTP/1.1 200 OK OData-Version: 4.0 { "@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#EntityDefinitions('sample_bankaccount')/Attributes/Microsoft.Dynamics.CRM.IntegerAttributeMetadata(SchemaName,MaxValue,MinValue,Format)/$entity", "SchemaName": "sample_Integer", "MaxValue": 100, "MinValue": 0, "Format": "None", "MetadataId": "f5db3d43-112a-ed11-9db1-00224804f8e2" }
Console output:
Retrieved Integer column properties: Integer MaxValue:100 Integer MinValue:0 Integer Format:None
Memo Column
Create a Memo Column using MemoAttributeMetadata EntityType.
Request:
POST [Organization Uri]/api/data/v9.2/EntityDefinitions(LogicalName='sample_bankaccount')/Attributes HTTP/1.1 MSCRM.SolutionUniqueName: examplesolution OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json { "@odata.type": "Microsoft.Dynamics.CRM.MemoAttributeMetadata", "AttributeType": "Memo", "AttributeTypeName": { "Value": "MemoType" }, "Format": "TextArea", "ImeMode": "Disabled", "MaxLength": 500, "IsLocalizable": false, "Description": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Memo Attribute", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Memo Attribute", "LanguageCode": 1033, "IsManaged": false } }, "DisplayName": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Sample Memo", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Sample Memo", "LanguageCode": 1033, "IsManaged": false } }, "RequiredLevel": { "Value": "None", "CanBeChanged": false, "ManagedPropertyLogicalName": "canmodifyrequirementlevelsettings" }, "SchemaName": "sample_Memo" }
Response:
HTTP/1.1 204 NoContent OData-Version: 4.0 OData-EntityId: [Organization Uri]/api/data/v9.2/EntityDefinitions(LogicalName='sample_bankaccount')/Attributes(f6db3d43-112a-ed11-9db1-00224804f8e2)
Console output:
Created Memo column with id:f6db3d43-112a-ed11-9db1-00224804f8e2
Retrieve selected values of the Memo Column.
Request:
GET [Organization Uri]/api/data/v9.2/EntityDefinitions(LogicalName='sample_bankaccount')/Attributes(LogicalName='sample_memo')/Microsoft.Dynamics.CRM.MemoAttributeMetadata?$select=SchemaName,Format,ImeMode,MaxLength HTTP/1.1 Consistency: Strong OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json
Response:
HTTP/1.1 200 OK OData-Version: 4.0 { "@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#EntityDefinitions('sample_bankaccount')/Attributes/Microsoft.Dynamics.CRM.MemoAttributeMetadata(SchemaName,Format,ImeMode,MaxLength)/$entity", "SchemaName": "sample_Memo", "Format": "TextArea", "ImeMode": "Disabled", "MaxLength": 500, "MetadataId": "f6db3d43-112a-ed11-9db1-00224804f8e2" }
Console output:
Retrieved Memo column properties: Memo Format:TextArea Memo ImeMode:Disabled Memo MaxLength:500
Money Column
Create a Money Column using MoneyAttributeMetadata EntityType.
Request:
POST [Organization Uri]/api/data/v9.2/EntityDefinitions(LogicalName='sample_bankaccount')/Attributes HTTP/1.1 MSCRM.SolutionUniqueName: examplesolution OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json { "@odata.type": "Microsoft.Dynamics.CRM.MoneyAttributeMetadata", "AttributeType": "Money", "AttributeTypeName": { "Value": "MoneyType" }, "ImeMode": "Disabled", "MaxValue": 1000.0, "MinValue": 0.0, "Precision": 1, "PrecisionSource": 1, "SourceTypeMask": 0, "IsBaseCurrency": false, "Description": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Money Attribute", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Money Attribute", "LanguageCode": 1033, "IsManaged": false } }, "DisplayName": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Sample Money", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Sample Money", "LanguageCode": 1033, "IsManaged": false } }, "RequiredLevel": { "Value": "None", "CanBeChanged": false, "ManagedPropertyLogicalName": "canmodifyrequirementlevelsettings" }, "SchemaName": "sample_Money" }
Response:
HTTP/1.1 204 NoContent OData-Version: 4.0 OData-EntityId: [Organization Uri]/api/data/v9.2/EntityDefinitions(LogicalName='sample_bankaccount')/Attributes(fddb3d43-112a-ed11-9db1-00224804f8e2)
Console output:
Created Money column with id:fddb3d43-112a-ed11-9db1-00224804f8e2
Retrieve selected values of the Money Column.
Request:
GET [Organization Uri]/api/data/v9.2/EntityDefinitions(LogicalName='sample_bankaccount')/Attributes(LogicalName='sample_money')/Microsoft.Dynamics.CRM.MoneyAttributeMetadata?$select=SchemaName,MaxValue,MinValue,Precision,PrecisionSource,ImeMode HTTP/1.1 Consistency: Strong OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json
Response:
HTTP/1.1 200 OK OData-Version: 4.0 { "@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#EntityDefinitions('sample_bankaccount')/Attributes/Microsoft.Dynamics.CRM.MoneyAttributeMetadata(SchemaName,MaxValue,MinValue,Precision,PrecisionSource,ImeMode)/$entity", "SchemaName": "sample_Money", "MaxValue": 1000.0, "MinValue": 0.0, "Precision": 1, "PrecisionSource": 1, "ImeMode": "Disabled", "MetadataId": "fddb3d43-112a-ed11-9db1-00224804f8e2" }
Console output:
Retrieved Money column properties: Money MaxValue:1000 Money MinValue:0 Money Precision:1 Money PrecisionSource:1 Money ImeMode:Disabled
Picklist Column
Create a Choice (Picklist) Column using PicklistAttributeMetadata EntityType with a local option set.
Request:
POST [Organization Uri]/api/data/v9.2/EntityDefinitions(LogicalName='sample_bankaccount')/Attributes HTTP/1.1 MSCRM.SolutionUniqueName: examplesolution OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json { "@odata.type": "Microsoft.Dynamics.CRM.PicklistAttributeMetadata", "AttributeType": "Picklist", "AttributeTypeName": { "Value": "PicklistType" }, "SourceTypeMask": 0, "OptionSet": { "@odata.type": "Microsoft.Dynamics.CRM.OptionSetMetadata", "Options": [ { "Value": 727000000, "Label": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Bravo", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Bravo", "LanguageCode": 1033, "IsManaged": false } } }, { "Value": 727000001, "Label": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Delta", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Delta", "LanguageCode": 1033, "IsManaged": false } } }, { "Value": 727000002, "Label": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Alpha", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Alpha", "LanguageCode": 1033, "IsManaged": false } } }, { "Value": 727000003, "Label": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Charlie", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Charlie", "LanguageCode": 1033, "IsManaged": false } } }, { "Value": 727000004, "Label": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Foxtrot", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Foxtrot", "LanguageCode": 1033, "IsManaged": false } } } ], "IsGlobal": false, "OptionSetType": "Picklist" }, "Description": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Choice Attribute", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Choice Attribute", "LanguageCode": 1033, "IsManaged": false } }, "DisplayName": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Sample Choice", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Sample Choice", "LanguageCode": 1033, "IsManaged": false } }, "RequiredLevel": { "Value": "None", "CanBeChanged": false, "ManagedPropertyLogicalName": "canmodifyrequirementlevelsettings" }, "SchemaName": "sample_Choice" }
Response:
HTTP/1.1 204 NoContent OData-Version: 4.0 OData-EntityId: [Organization Uri]/api/data/v9.2/EntityDefinitions(LogicalName='sample_bankaccount')/Attributes(4a154e49-112a-ed11-9db1-00224804f8e2)
Console output:
Created Choice column with id:4a154e49-112a-ed11-9db1-00224804f8e2
Retrieve options of the choice column using
$select=SchemaName&$expand=OptionSet
.Request:
GET [Organization Uri]/api/data/v9.2/EntityDefinitions(LogicalName='sample_bankaccount')/Attributes(LogicalName='sample_choice')/Microsoft.Dynamics.CRM.PicklistAttributeMetadata?$select=SchemaName&$expand=OptionSet HTTP/1.1 Consistency: Strong OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json
Response:
HTTP/1.1 200 OK OData-Version: 4.0 { "@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#EntityDefinitions('sample_bankaccount')/Attributes/Microsoft.Dynamics.CRM.PicklistAttributeMetadata(SchemaName,OptionSet())/$entity", "SchemaName": "sample_Choice", "MetadataId": "4a154e49-112a-ed11-9db1-00224804f8e2", "OptionSet": { "MetadataId": "4b154e49-112a-ed11-9db1-00224804f8e2", "HasChanged": null, "IsCustomOptionSet": true, "IsGlobal": false, "IsManaged": false, "Name": "sample_bankaccount_sample_choice", "ExternalTypeName": null, "OptionSetType": "Picklist", "IntroducedVersion": "1.0.0.0", "ParentOptionSetName": null, "Description": { "LocalizedLabels": [ { "Label": "Choice Attribute", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "4d154e49-112a-ed11-9db1-00224804f8e2", "HasChanged": null } ], "UserLocalizedLabel": { "Label": "Choice Attribute", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "4d154e49-112a-ed11-9db1-00224804f8e2", "HasChanged": null } }, "DisplayName": { "LocalizedLabels": [ { "Label": "Sample Choice", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "4c154e49-112a-ed11-9db1-00224804f8e2", "HasChanged": null } ], "UserLocalizedLabel": { "Label": "Sample Choice", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "4c154e49-112a-ed11-9db1-00224804f8e2", "HasChanged": null } }, "IsCustomizable": { "Value": true, "CanBeChanged": true, "ManagedPropertyLogicalName": "iscustomizable" }, "Options": [ { "Value": 727000000, "Color": null, "IsManaged": false, "ExternalValue": "", "ParentValues": [], "MetadataId": null, "HasChanged": null, "Label": { "LocalizedLabels": [ { "Label": "Bravo", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "bc8d1815-75b7-4c13-b618-7959aaf4abb6", "HasChanged": null } ], "UserLocalizedLabel": { "Label": "Bravo", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "bc8d1815-75b7-4c13-b618-7959aaf4abb6", "HasChanged": null } }, "Description": { "LocalizedLabels": [], "UserLocalizedLabel": null } }, { "Value": 727000001, "Color": null, "IsManaged": false, "ExternalValue": "", "ParentValues": [], "MetadataId": null, "HasChanged": null, "Label": { "LocalizedLabels": [ { "Label": "Delta", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "c3613791-85a0-41ac-8575-91aca4bb91e8", "HasChanged": null } ], "UserLocalizedLabel": { "Label": "Delta", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "c3613791-85a0-41ac-8575-91aca4bb91e8", "HasChanged": null } }, "Description": { "LocalizedLabels": [], "UserLocalizedLabel": null } }, { "Value": 727000002, "Color": null, "IsManaged": false, "ExternalValue": "", "ParentValues": [], "MetadataId": null, "HasChanged": null, "Label": { "LocalizedLabels": [ { "Label": "Alpha", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "8db04562-9ec3-4014-a170-0482bbb94e44", "HasChanged": null } ], "UserLocalizedLabel": { "Label": "Alpha", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "8db04562-9ec3-4014-a170-0482bbb94e44", "HasChanged": null } }, "Description": { "LocalizedLabels": [], "UserLocalizedLabel": null } }, { "Value": 727000003, "Color": null, "IsManaged": false, "ExternalValue": "", "ParentValues": [], "MetadataId": null, "HasChanged": null, "Label": { "LocalizedLabels": [ { "Label": "Charlie", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "d00dc11e-ed91-478b-ac78-86b6784326ad", "HasChanged": null } ], "UserLocalizedLabel": { "Label": "Charlie", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "d00dc11e-ed91-478b-ac78-86b6784326ad", "HasChanged": null } }, "Description": { "LocalizedLabels": [], "UserLocalizedLabel": null } }, { "Value": 727000004, "Color": null, "IsManaged": false, "ExternalValue": "", "ParentValues": [], "MetadataId": null, "HasChanged": null, "Label": { "LocalizedLabels": [ { "Label": "Foxtrot", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "36a565b7-cd21-4505-812b-5567c28eec23", "HasChanged": null } ], "UserLocalizedLabel": { "Label": "Foxtrot", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "36a565b7-cd21-4505-812b-5567c28eec23", "HasChanged": null } }, "Description": { "LocalizedLabels": [], "UserLocalizedLabel": null } } ] } }
Console output:
Retrieved Choice column options: Value:727000000 Label:Bravo Value:727000001 Label:Delta Value:727000002 Label:Alpha Value:727000003 Label:Charlie Value:727000004 Label:Foxtrot
Add an option to the local optionset
Add an option to the choice column using the InsertOptionValue Action.
Note
InsertOptionValue
and the following actions to work with options has aSolutionUniqueName
parameter for you to set the solution unique name rather than by using theMSCRM.SolutionUniqueName
request header.Request:
POST [Organization Uri]/api/data/v9.2/InsertOptionValue HTTP/1.1 OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json { "AttributeLogicalName": "sample_choice", "EntityLogicalName": "sample_bankaccount", "Value": 727000005, "Label": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Echo", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Echo", "LanguageCode": 1033, "IsManaged": false } }, "SolutionUniqueName": "examplesolution" }
Response:
HTTP/1.1 200 OK OData-Version: 4.0 { "@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.InsertOptionValueResponse", "NewOptionValue": 727000005 }
Console output:
Added new option with label 'Echo'
Retrieve the choice column options again using the same query as before:
Console output:
The option values for the picklist: Value: 727000000, Label:Bravo Value: 727000001, Label:Delta Value: 727000002, Label:Alpha Value: 727000003, Label:Charlie Value: 727000004, Label:Foxtrot Value: 727000005, Label:Echo
Re-order choice column options
Re-order the Choice column options using the OrderOption Action.
Request:
POST [Organization Uri]/api/data/v9.2/OrderOption HTTP/1.1 OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json { "EntityLogicalName": "sample_bankaccount", "AttributeLogicalName": "sample_choice", "Values": [ 727000002, 727000000, 727000003, 727000001, 727000005, 727000004 ], "SolutionUniqueName": "examplesolution" }
Response:
HTTP/1.1 204 NoContent OData-Version: 4.0
Console output:
Options re-ordered.
Retrieve the Choice column options again using the same query as before to see the options in the new order.
Console output:
The option values for the picklist in the new order: Value: 727000002, Label:Alpha Value: 727000000, Label:Bravo Value: 727000003, Label:Charlie Value: 727000001, Label:Delta Value: 727000005, Label:Echo Value: 727000004, Label:Foxtrot
Delete local option value
Delete an option using DeleteOptionValue Action.
Request:
POST [Organization Uri]/api/data/v9.2/DeleteOptionValue HTTP/1.1 OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json { "AttributeLogicalName": "sample_choice", "EntityLogicalName": "sample_bankaccount", "Value": 727000004 }
Response:
HTTP/1.1 204 NoContent OData-Version: 4.0
Console output:
Deleting a local option value... Local OptionSet option value deleted.
Multi-Select Picklist Column
Create a multi-select choice column using MultiSelectPicklistAttributeMetadata EntityType.
Request:
POST [Organization Uri]/api/data/v9.2/EntityDefinitions(LogicalName='sample_bankaccount')/Attributes HTTP/1.1 MSCRM.SolutionUniqueName: examplesolution OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json { "@odata.type": "Microsoft.Dynamics.CRM.MultiSelectPicklistAttributeMetadata", "AttributeType": "Virtual", "AttributeTypeName": { "Value": "MultiSelectPicklistType" }, "SourceTypeMask": 0, "OptionSet": { "@odata.type": "Microsoft.Dynamics.CRM.OptionSetMetadata", "Options": [ { "Value": 727000000, "Label": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Appetizer", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Appetizer", "LanguageCode": 1033, "IsManaged": false } } }, { "Value": 727000001, "Label": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Entree", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Entree", "LanguageCode": 1033, "IsManaged": false } } }, { "Value": 727000002, "Label": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Dessert", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Dessert", "LanguageCode": 1033, "IsManaged": false } } } ], "IsGlobal": false, "OptionSetType": "Picklist" }, "Description": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "MultiSelect Choice Attribute", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "MultiSelect Choice Attribute", "LanguageCode": 1033, "IsManaged": false } }, "DisplayName": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Sample MultiSelect Choice", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Sample MultiSelect Choice", "LanguageCode": 1033, "IsManaged": false } }, "RequiredLevel": { "Value": "None", "CanBeChanged": false, "ManagedPropertyLogicalName": "canmodifyrequirementlevelsettings" }, "SchemaName": "sample_MultiSelectChoice" }
Response:
HTTP/1.1 204 NoContent OData-Version: 4.0 OData-EntityId: [Organization Uri]/api/data/v9.2/EntityDefinitions(LogicalName='sample_bankaccount')/Attributes(2c1c3050-112a-ed11-9db1-00224804f8e2)
Console output:
Creating a MultiSelect Choice column... Created MultiSelect Choice column with id:2c1c3050-112a-ed11-9db1-00224804f8e2
Retrieve the multi-select choice column options using
GET EntityDefinitions(LogicalName='sample_bankaccount')/Attributes(LogicalName='sample_multiselectchoice')/Microsoft.Dynamics.CRM.MultiSelectPicklistAttributeMetadata?$select=SchemaName&$expand=OptionSet
Console output:
The option values for the multi-select choice column: Value: 727000000, Label:Appetizer Value: 727000001, Label:Entree Value: 727000002, Label:Dessert
Insert Status Value
Use InsertStatusValue Action to add a new option to a statuscode
column. You must specify which StateCode
it's valid for.
Note
Notice that the value returned applies the publisher customizationoptionvalueprefix
value (72700) automatically.
Request:
POST [Organization Uri]/api/data/v9.2/InsertStatusValue HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
{
"AttributeLogicalName": "statuscode",
"EntityLogicalName": "sample_bankaccount",
"Label": {
"@odata.type": "Microsoft.Dynamics.CRM.Label",
"LocalizedLabels": [
{
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Frozen",
"LanguageCode": 1033,
"IsManaged": false
}
],
"UserLocalizedLabel": {
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Frozen",
"LanguageCode": 1033,
"IsManaged": false
}
},
"StateCode": 1,
"SolutionUniqueName": "examplesolution"
}
Response:
HTTP/1.1 200 OK
OData-Version: 4.0
{
"@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.InsertStatusValueResponse",
"NewOptionValue": 727000000
}
Console output:
Created new Status value:727000000
Section 3: Create and use Global OptionSet
Create a global choice (optionset). This optionset is named
sample_colors
and contains options for Red, Yellow, and Green.Note
The request specifies the option values using the publisher
customizationoptionvalueprefix
.Request:
POST [Organization Uri]/api/data/v9.2/GlobalOptionSetDefinitions HTTP/1.1 MSCRM.SolutionUniqueName: examplesolution OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json { "@odata.type": "Microsoft.Dynamics.CRM.OptionSetMetadata", "Options": [ { "Value": 727000000, "Label": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Red", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Red", "LanguageCode": 1033, "IsManaged": false } } }, { "Value": 727000001, "Label": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Yellow", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Yellow", "LanguageCode": 1033, "IsManaged": false } } }, { "Value": 727000002, "Label": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Green", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Green", "LanguageCode": 1033, "IsManaged": false } } } ], "Description": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Color Choice", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Color Choice", "LanguageCode": 1033, "IsManaged": false } }, "DisplayName": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Colors", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Colors", "LanguageCode": 1033, "IsManaged": false } }, "Name": "sample_colors", "OptionSetType": "Picklist" }
Response:
HTTP/1.1 204 NoContent OData-Version: 4.0 OData-EntityId: [Organization Uri]/api/data/v9.2/GlobalOptionSetDefinitions(7cfd8c56-112a-ed11-9db1-00224804f8e2)
Console output:
Created a new global option set with id:7cfd8c56-112a-ed11-9db1-00224804f8e2
Retrieve the global choice options.
Request:
GET [Organization Uri]/api/data/v9.2/GlobalOptionSetDefinitions(7cfd8c56-112a-ed11-9db1-00224804f8e2)/Microsoft.Dynamics.CRM.OptionSetMetadata HTTP/1.1 Consistency: Strong OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json
Response:
HTTP/1.1 200 OK OData-Version: 4.0 { "@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#GlobalOptionSetDefinitions/Microsoft.Dynamics.CRM.OptionSetMetadata/$entity", "ParentOptionSetName": null, "IsCustomOptionSet": true, "IsGlobal": true, "IsManaged": false, "Name": "sample_colors", "ExternalTypeName": null, "OptionSetType": "Picklist", "IntroducedVersion": "1.0.0.0", "MetadataId": "7cfd8c56-112a-ed11-9db1-00224804f8e2", "HasChanged": null, "Options": [ { "Value": 727000000, "Color": null, "IsManaged": false, "ExternalValue": "", "ParentValues": [], "MetadataId": null, "HasChanged": null, "Label": { "LocalizedLabels": [ { "Label": "Red", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "2c1fa94f-3714-4615-995b-690158d0d989", "HasChanged": null } ], "UserLocalizedLabel": { "Label": "Red", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "2c1fa94f-3714-4615-995b-690158d0d989", "HasChanged": null } }, "Description": { "LocalizedLabels": [], "UserLocalizedLabel": null } }, { "Value": 727000001, "Color": null, "IsManaged": false, "ExternalValue": "", "ParentValues": [], "MetadataId": null, "HasChanged": null, "Label": { "LocalizedLabels": [ { "Label": "Yellow", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "a499c2fe-c13a-4c1e-b190-db8ae74396f5", "HasChanged": null } ], "UserLocalizedLabel": { "Label": "Yellow", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "a499c2fe-c13a-4c1e-b190-db8ae74396f5", "HasChanged": null } }, "Description": { "LocalizedLabels": [], "UserLocalizedLabel": null } }, { "Value": 727000002, "Color": null, "IsManaged": false, "ExternalValue": "", "ParentValues": [], "MetadataId": null, "HasChanged": null, "Label": { "LocalizedLabels": [ { "Label": "Green", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "8378af2c-4b68-4ea4-ad37-e676f696e1ba", "HasChanged": null } ], "UserLocalizedLabel": { "Label": "Green", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "8378af2c-4b68-4ea4-ad37-e676f696e1ba", "HasChanged": null } }, "Description": { "LocalizedLabels": [], "UserLocalizedLabel": null } } ], "Description": { "LocalizedLabels": [ { "Label": "Color Choice", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "7efd8c56-112a-ed11-9db1-00224804f8e2", "HasChanged": null } ], "UserLocalizedLabel": { "Label": "Color Choice", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "7efd8c56-112a-ed11-9db1-00224804f8e2", "HasChanged": null } }, "DisplayName": { "LocalizedLabels": [ { "Label": "Colors", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "7dfd8c56-112a-ed11-9db1-00224804f8e2", "HasChanged": null } ], "UserLocalizedLabel": { "Label": "Colors", "LanguageCode": 1033, "IsManaged": false, "MetadataId": "7dfd8c56-112a-ed11-9db1-00224804f8e2", "HasChanged": null } }, "IsCustomizable": { "Value": true, "CanBeChanged": true, "ManagedPropertyLogicalName": "iscustomizable" } }
Console output:
List the retrieved options for the colors global option set: Value: 727000000 Label:Red Value: 727000001 Label:Yellow Value: 727000002 Label:Green
Create a choice column that uses the global optionset. Associate the column definition to the global optionset using:
"GlobalOptionSet@odata.bind": "/GlobalOptionSetDefinitions(7cfd8c56-112a-ed11-9db1-00224804f8e2)"
.Request:
POST [Organization Uri]/api/data/v9.2/EntityDefinitions(LogicalName='sample_bankaccount')/Attributes HTTP/1.1 MSCRM.SolutionUniqueName: examplesolution OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json { "@odata.type": "Microsoft.Dynamics.CRM.PicklistAttributeMetadata", "AttributeType": "Picklist", "AttributeTypeName": { "Value": "PicklistType" }, "SourceTypeMask": 0, "GlobalOptionSet@odata.bind": "/GlobalOptionSetDefinitions(7cfd8c56-112a-ed11-9db1-00224804f8e2)", "Description": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Colors Global Picklist Attribute", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Colors Global Picklist Attribute", "LanguageCode": 1033, "IsManaged": false } }, "DisplayName": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Sample Colors", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Sample Colors", "LanguageCode": 1033, "IsManaged": false } }, "RequiredLevel": { "Value": "None", "CanBeChanged": false, "ManagedPropertyLogicalName": "canmodifyrequirementlevelsettings" }, "SchemaName": "sample_Colors" }
Response:
HTTP/1.1 204 NoContent OData-Version: 4.0 OData-EntityId: [Organization Uri]/api/data/v9.2/EntityDefinitions(LogicalName='sample_bankaccount')/Attributes(81fd8c56-112a-ed11-9db1-00224804f8e2)
Console output:
Created Choice column with id:81fd8c56-112a-ed11-9db1-00224804f8e2 using colors global optionset.
Section 4: Create Customer Relationship
Use the CreateCustomerRelationships Action to create a customer relationship. This action adds a lookup column for the
sample_BankAccount
table that allows for either anaccount
orcontact
record to be set.CreateCustomerRelationships
has aLookup
ComplexLookupAttributeMetadata ComplexType parameter and aOneToManyRelationships
parameter containing a pair of relationships defined using ComplexOneToManyRelationshipMetadata ComplexType.Request:
POST [Organization Uri]/api/data/v9.2/CreateCustomerRelationships HTTP/1.1 OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json { "Lookup": { "@odata.type": "Microsoft.Dynamics.CRM.ComplexLookupAttributeMetadata", "AttributeType": "Lookup", "AttributeTypeName": { "Value": "LookupType" }, "Format": "None", "Targets": [ "account", "contact" ], "ColumnNumber": 0, "Description": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "The owner of the bank account", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "The owner of the bank account", "LanguageCode": 1033, "IsManaged": false } }, "DisplayName": { "@odata.type": "Microsoft.Dynamics.CRM.Label", "LocalizedLabels": [ { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Bank Account owner", "LanguageCode": 1033, "IsManaged": false } ], "UserLocalizedLabel": { "@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel", "Label": "Bank Account owner", "LanguageCode": 1033, "IsManaged": false } }, "RequiredLevel": { "Value": "ApplicationRequired", "CanBeChanged": false, "ManagedPropertyLogicalName": "canmodifyrequirementlevelsettings" }, "SchemaName": "sample_CustomerId", "SourceType": 0 }, "OneToManyRelationships": [ { "@odata.type": "Microsoft.Dynamics.CRM.ComplexOneToManyRelationshipMetadata", "ReferencedEntity": "account", "ReferencingEntity": "sample_bankaccount", "RelationshipBehavior": 0, "RelationshipType": "OneToManyRelationship", "SchemaName": "sample_BankAccount_Customer_Account", "SecurityTypes": "None" }, { "@odata.type": "Microsoft.Dynamics.CRM.ComplexOneToManyRelationshipMetadata", "ReferencedEntity": "contact", "ReferencingEntity": "sample_bankaccount", "RelationshipBehavior": 0, "RelationshipType": "OneToManyRelationship", "SchemaName": "sample_BankAccount_Customer_Contact", "SecurityTypes": "None" } ], "SolutionUniqueName": "examplesolution" }
Response:
HTTP/1.1 200 OK OData-Version: 4.0 { "@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.CreateCustomerRelationshipsResponse", "RelationshipIds": [ "84fd8c56-112a-ed11-9db1-00224804f8e2", "8dfd8c56-112a-ed11-9db1-00224804f8e2" ], "AttributeId": "59478264-16af-4bcc-8baa-b154df0d6767" }
Use the CreateCustomerRelationshipsResponse.
AttributeId
value to retrieve the lookup columnTargets
property for the customer relationship.Request:
GET [Organization Uri]/api/data/v9.2/EntityDefinitions(LogicalName='sample_bankaccount')/Attributes(LogicalName='sample_customerid')/Microsoft.Dynamics.CRM.LookupAttributeMetadata?$select=Targets HTTP/1.1 Consistency: Strong OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json
Response:
HTTP/1.1 200 OK OData-Version: 4.0 { "@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#EntityDefinitions('sample_bankaccount')/Attributes/Microsoft.Dynamics.CRM.LookupAttributeMetadata(Targets)/$entity", "Targets": [ "account", "contact" ], "MetadataId": "59478264-16af-4bcc-8baa-b154df0d6767" }
Console output:
The Target values of the Lookup column created: account contact
Use the CreateCustomerRelationshipsResponse.
RelationshipIds
values to retrieve the relationships for the customer column.First for the relationship to
account
:Request:
GET [Organization Uri]/api/data/v9.2/RelationshipDefinitions(84fd8c56-112a-ed11-9db1-00224804f8e2)/Microsoft.Dynamics.CRM.OneToManyRelationshipMetadata HTTP/1.1 Consistency: Strong OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json
Response:
HTTP/1.1 200 OK OData-Version: 4.0 { "@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#RelationshipDefinitions/Microsoft.Dynamics.CRM.OneToManyRelationshipMetadata/$entity", "ReferencedAttribute": "accountid", "ReferencedEntity": "account", "ReferencingAttribute": "sample_customerid", "ReferencingEntity": "sample_bankaccount", "IsHierarchical": false, "EntityKey": null, "IsRelationshipAttributeDenormalized": false, "ReferencedEntityNavigationPropertyName": "sample_BankAccount_Customer_Account", "ReferencingEntityNavigationPropertyName": "sample_CustomerId_account", "RelationshipBehavior": 1, "IsDenormalizedLookup": null, "DenormalizedAttributeName": null, "IsCustomRelationship": true, "IsValidForAdvancedFind": true, "SchemaName": "sample_BankAccount_Customer_Account", "SecurityTypes": "Append", "IsManaged": false, "RelationshipType": "OneToManyRelationship", "IntroducedVersion": "1.0.0.0", "MetadataId": "84fd8c56-112a-ed11-9db1-00224804f8e2", "HasChanged": null, "AssociatedMenuConfiguration": { "Behavior": "UseCollectionName", "Group": "Details", "Order": 10000, "IsCustomizable": true, "Icon": null, "ViewId": "00000000-0000-0000-0000-000000000000", "AvailableOffline": true, "MenuId": null, "QueryApi": null, "Label": { "LocalizedLabels": [], "UserLocalizedLabel": null } }, "CascadeConfiguration": { "Assign": "NoCascade", "Delete": "RemoveLink", "Archive": "RemoveLink", "Merge": "Cascade", "Reparent": "NoCascade", "Share": "NoCascade", "Unshare": "NoCascade", "RollupView": "NoCascade" }, "RelationshipAttributes": [], "IsCustomizable": { "Value": true, "CanBeChanged": true, "ManagedPropertyLogicalName": "iscustomizable" } }
Then for the relationship to
contact
:Request:
GET [Organization Uri]/api/data/v9.2/RelationshipDefinitions(8dfd8c56-112a-ed11-9db1-00224804f8e2)/Microsoft.Dynamics.CRM.OneToManyRelationshipMetadata HTTP/1.1 Consistency: Strong OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json
Response:
HTTP/1.1 200 OK OData-Version: 4.0 { "@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#RelationshipDefinitions/Microsoft.Dynamics.CRM.OneToManyRelationshipMetadata/$entity", "ReferencedAttribute": "contactid", "ReferencedEntity": "contact", "ReferencingAttribute": "sample_customerid", "ReferencingEntity": "sample_bankaccount", "IsHierarchical": false, "EntityKey": null, "IsRelationshipAttributeDenormalized": false, "ReferencedEntityNavigationPropertyName": "sample_BankAccount_Customer_Contact", "ReferencingEntityNavigationPropertyName": "sample_CustomerId_contact", "RelationshipBehavior": 1, "IsDenormalizedLookup": null, "DenormalizedAttributeName": null, "IsCustomRelationship": true, "IsValidForAdvancedFind": true, "SchemaName": "sample_BankAccount_Customer_Contact", "SecurityTypes": "Append", "IsManaged": false, "RelationshipType": "OneToManyRelationship", "IntroducedVersion": "1.0.0.0", "MetadataId": "8dfd8c56-112a-ed11-9db1-00224804f8e2", "HasChanged": null, "AssociatedMenuConfiguration": { "Behavior": "UseCollectionName", "Group": "Details", "Order": 10000, "IsCustomizable": true, "Icon": null, "ViewId": "00000000-0000-0000-0000-000000000000", "AvailableOffline": true, "MenuId": null, "QueryApi": null, "Label": { "LocalizedLabels": [], "UserLocalizedLabel": null } }, "CascadeConfiguration": { "Assign": "NoCascade", "Delete": "RemoveLink", "Archive": "RemoveLink", "Merge": "Cascade", "Reparent": "NoCascade", "Share": "NoCascade", "Unshare": "NoCascade", "RollupView": "NoCascade" }, "RelationshipAttributes": [], "IsCustomizable": { "Value": true, "CanBeChanged": true, "ManagedPropertyLogicalName": "iscustomizable" } }
Console output:
The Schema Names of the relationships created: sample_BankAccount_Customer_Account sample_BankAccount_Customer_Contact
Section 5: Create and retrieve a one-to-many relationship
Before you create a relationship using code, you should confirm that the relationship is valid. The designers in Power Apps use special functions to show you which combinations are valid. You can use the same functions in your code to detect whether a particular relationship can be created or not.
Validate 1:N relationship eligibility
CanBeReferenced Function tells you whether a table the primary table (one) in a one-to-many relationship.
Request:
POST [Organization Uri]/api/data/v9.2/CanBeReferenced HTTP/1.1 OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json { "EntityName": "sample_bankaccount" }
Response:
HTTP/1.1 200 OK OData-Version: 4.0 { "@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.CanBeReferencedResponse", "CanBeReferenced": true }
Console output:
The sample_BankAccount table is eligible to be a primary table in a one-to-many relationship.
CanBeReferencing Function tells you whether a table can be the referencing table in a one-to-many relationship. The referencing table is the table that has a Lookup column added to it to be the 'many' in the one-to-many relationship.
Request:
POST [Organization Uri]/api/data/v9.2/CanBeReferencing HTTP/1.1 OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json { "EntityName": "contact" }
Response:
HTTP/1.1 200 OK OData-Version: 4.0 { "@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.CanBeReferencingResponse", "CanBeReferencing": true }
Console output:
The contact table is eligible to be a related table in a one-to-many relationship.
Identify Potential Referencing Entities
In the context of a specific table that can be the parmary table in a one-to-many relationship, use the GetValidReferencingEntities Function to identify what other tables can be the related to it.
Request:
GET [Organization Uri]/api/data/v9.2/GetValidReferencingEntities(ReferencedEntityName='sample_bankaccount') HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
Response:
HTTP/1.1 200 OK
OData-Version: 4.0
{
"@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.GetValidReferencingEntitiesResponse",
"EntityNames": [
"msdyn_slakpi",
"workflowbinary",
"apisettings",
"flowsession",
"knowledgearticle",
"socialprofile",
"goal",
"metric",
"goalrollupquery",
"mailbox",
"position",
"channelaccessprofile",
"externalparty",
"channelaccessprofilerule",
"channelaccessprofileruleitem",
"sample_bankaccount",
"privilegesremovalsetting",
"knowledgebaserecord",
"msdyn_insightsstorevirtualentity",
"aaduser",
"sharepointdocument",
"msfp_unsubscribedrecipient",
"msdyn_dataflow",
"flowmachineimage",
"queueitem",
"appointment",
"msdyn_federatedarticleincident",
"msfp_surveyresponse",
"msdyn_dataflowrefreshhistory",
"mailmergetemplate",
"contact",
"organizationdatasyncstate",
"bot",
"knowledgearticleviews",
"slaitem",
"msfp_question",
"category",
"connection",
"newprocess",
"msfp_survey",
"emailserverprofile",
"appnotification",
"feedback",
"activityfileattachment",
"organizationdatasyncsubscriptionentity",
"msdyn_nonrelationalds",
"expiredprocess",
"msfp_surveyinvite",
"msfp_alert",
"businessunit",
"msfp_alertrule",
"slakpiinstance",
"email",
"datasyncstate",
"msdyn_entityrefreshhistory",
"msdyn_componentlayerdatasource",
"account",
"kbarticle",
"systemuser",
"task",
"letter",
"reportcategory",
"phonecall",
"actioncard",
"msdyn_kmfederatedsearchconfig",
"featurecontrolsetting",
"translationprocess",
"recurringappointmentmaster",
"externalpartyitem",
"msdyn_aibdatasetfile",
"socialactivity",
"flowmachineimageversion",
"fax",
"msdyn_kbattachment",
"serviceplanmapping",
"msdyn_knowledgearticletemplate",
"msfp_emailtemplate",
"conversationtranscript",
"sharepointsite",
"processstage",
"msfp_localizedemailtemplate",
"queue",
"msdyn_richtextfile",
"msdyn_serviceconfiguration",
"team",
"sharedlinksetting",
"territory",
"msdyn_federatedarticle",
"msdyn_knowledgepersonalfilter",
"sharepointdocumentlocation",
"chat",
"msfp_fileresponse",
"msfp_satisfactionmetric",
"msdyn_aibfeedbackloop",
"msdyn_customcontrolextendedsettings",
"msfp_surveyreminder",
"msfp_questionresponse",
"msfp_project"
]
}
Console output:
The contact table is in the list of potential referencing entities for sample_BankAccount.
Create 1:N relationship
The following request creates a one-to-many relationship between sample_BankAccount
and contact tables with a lookup column added to the contact
table.
Request:
POST [Organization Uri]/api/data/v9.2/RelationshipDefinitions HTTP/1.1
MSCRM.SolutionUniqueName: examplesolution
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
{
"@odata.type": "Microsoft.Dynamics.CRM.OneToManyRelationshipMetadata",
"AssociatedMenuConfiguration": {
"Behavior": "UseLabel",
"Group": "Details",
"Label": {
"@odata.type": "Microsoft.Dynamics.CRM.Label",
"LocalizedLabels": [
{
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Cardholders",
"LanguageCode": 1033,
"IsManaged": false
}
],
"UserLocalizedLabel": {
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Cardholders",
"LanguageCode": 1033,
"IsManaged": false
}
},
"Order": 10000,
"ViewId": "00000000-0000-0000-0000-000000000000"
},
"CascadeConfiguration": {
"Assign": "NoCascade",
"Delete": "RemoveLink",
"Merge": "Cascade",
"Reparent": "NoCascade",
"Share": "NoCascade",
"Unshare": "NoCascade",
"RollupView": "NoCascade"
},
"IsHierarchical": false,
"ReferencedAttribute": "sample_bankaccountid",
"ReferencedEntity": "sample_bankaccount",
"ReferencingEntity": "contact",
"Lookup": {
"@odata.type": "Microsoft.Dynamics.CRM.LookupAttributeMetadata",
"AttributeType": "Lookup",
"AttributeTypeName": {
"Value": "LookupType"
},
"Format": "None",
"Description": {
"@odata.type": "Microsoft.Dynamics.CRM.Label",
"LocalizedLabels": [
{
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "The bank account this contact has access to.",
"LanguageCode": 1033,
"IsManaged": false
}
],
"UserLocalizedLabel": {
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "The bank account this contact has access to.",
"LanguageCode": 1033,
"IsManaged": false
}
},
"DisplayName": {
"@odata.type": "Microsoft.Dynamics.CRM.Label",
"LocalizedLabels": [
{
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Bank Account",
"LanguageCode": 1033,
"IsManaged": false
}
],
"UserLocalizedLabel": {
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Bank Account",
"LanguageCode": 1033,
"IsManaged": false
}
},
"SchemaName": "sample_BankAccountId"
},
"IsCustomRelationship": false,
"IsManaged": false,
"IsValidForAdvancedFind": false,
"RelationshipType": "OneToManyRelationship",
"SchemaName": "sample_BankAccount_Contacts",
"SecurityTypes": "None"
}
Response:
HTTP/1.1 204 NoContent
OData-Version: 4.0
OData-EntityId: [Organization Uri]/api/data/v9.2/RelationshipDefinitions(991efd5f-112a-ed11-9db1-00224804f8e2)
Console output:
Creating a one-to-many relationship...
Created one-to-many relationship: RelationshipDefinitions(991efd5f-112a-ed11-9db1-00224804f8e2)
Retrieve 1:N relationship
The following request retrieves the relationship created by the previous request.
Note
Because RelationshipDefinitions
contains both one-to-many and many-to-many relationship definitions, you must include the following in the URL to cast to the type you want to retrieve: /Microsoft.Dynamics.CRM.OneToManyRelationshipMetadata
.
Otherwise, the value returned will be the RelationshipMetadataBase EntityType and will not include the properties specific to the OneToManyRelationshipMetadata EntityType.
Request:
GET [Organization Uri]/api/data/v9.2/RelationshipDefinitions(991efd5f-112a-ed11-9db1-00224804f8e2)/Microsoft.Dynamics.CRM.OneToManyRelationshipMetadata HTTP/1.1
Consistency: Strong
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
Response:
HTTP/1.1 200 OK
OData-Version: 4.0
{
"@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#RelationshipDefinitions/Microsoft.Dynamics.CRM.OneToManyRelationshipMetadata/$entity",
"ReferencedAttribute": "sample_bankaccountid",
"ReferencedEntity": "sample_bankaccount",
"ReferencingAttribute": "sample_bankaccountid",
"ReferencingEntity": "contact",
"IsHierarchical": false,
"EntityKey": null,
"IsRelationshipAttributeDenormalized": false,
"ReferencedEntityNavigationPropertyName": "sample_BankAccount_Contacts",
"ReferencingEntityNavigationPropertyName": "sample_BankAccountId",
"RelationshipBehavior": 1,
"IsDenormalizedLookup": null,
"DenormalizedAttributeName": null,
"IsCustomRelationship": true,
"IsValidForAdvancedFind": false,
"SchemaName": "sample_BankAccount_Contacts",
"SecurityTypes": "Append",
"IsManaged": false,
"RelationshipType": "OneToManyRelationship",
"IntroducedVersion": "1.0.0.0",
"MetadataId": "991efd5f-112a-ed11-9db1-00224804f8e2",
"HasChanged": null,
"AssociatedMenuConfiguration": {
"Behavior": "UseLabel",
"Group": "Details",
"Order": 10000,
"IsCustomizable": true,
"Icon": null,
"ViewId": "00000000-0000-0000-0000-000000000000",
"AvailableOffline": true,
"MenuId": null,
"QueryApi": null,
"Label": {
"LocalizedLabels": [
{
"Label": "Cardholders",
"LanguageCode": 1033,
"IsManaged": false,
"MetadataId": "a99a420f-6778-4f2f-b42b-64bc84b2c2d2",
"HasChanged": null
}
],
"UserLocalizedLabel": {
"Label": "Cardholders",
"LanguageCode": 1033,
"IsManaged": false,
"MetadataId": "a99a420f-6778-4f2f-b42b-64bc84b2c2d2",
"HasChanged": null
}
}
},
"CascadeConfiguration": {
"Assign": "NoCascade",
"Delete": "RemoveLink",
"Archive": "RemoveLink",
"Merge": "NoCascade",
"Reparent": "NoCascade",
"Share": "NoCascade",
"Unshare": "NoCascade",
"RollupView": "NoCascade"
},
"RelationshipAttributes": [],
"IsCustomizable": {
"Value": true,
"CanBeChanged": true,
"ManagedPropertyLogicalName": "iscustomizable"
}
}
Console output:
Retrieved relationship: sample_BankAccount_Contacts
Section 6: Create and retrieve a many-to-one relationship
A many-to-one relationship is a one-to-many relationship viewed from the other direction. The following examples create a lookup column named sample_relatedaccountid
on the sample_BankAccount
table referencing a row in the account
table.
Create N:1 relationship
Request:
POST [Organization Uri]/api/data/v9.2/RelationshipDefinitions HTTP/1.1
MSCRM.SolutionUniqueName: examplesolution
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
{
"@odata.type": "Microsoft.Dynamics.CRM.OneToManyRelationshipMetadata",
"AssociatedMenuConfiguration": {
"Behavior": "UseLabel",
"Group": "Details",
"Label": {
"@odata.type": "Microsoft.Dynamics.CRM.Label",
"LocalizedLabels": [
{
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Related Bank Accounts",
"LanguageCode": 1033,
"IsManaged": false
}
],
"UserLocalizedLabel": {
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Related Bank Accounts",
"LanguageCode": 1033,
"IsManaged": false
}
},
"Order": 10000,
"ViewId": "00000000-0000-0000-0000-000000000000"
},
"CascadeConfiguration": {
"Assign": "NoCascade",
"Delete": "RemoveLink",
"Merge": "Cascade",
"Reparent": "NoCascade",
"Share": "NoCascade",
"Unshare": "NoCascade",
"RollupView": "NoCascade"
},
"IsHierarchical": false,
"ReferencedAttribute": "accountid",
"ReferencedEntity": "account",
"ReferencingEntity": "sample_bankaccount",
"Lookup": {
"@odata.type": "Microsoft.Dynamics.CRM.LookupAttributeMetadata",
"AttributeType": "Lookup",
"AttributeTypeName": {
"Value": "LookupType"
},
"Format": "None",
"Description": {
"@odata.type": "Microsoft.Dynamics.CRM.Label",
"LocalizedLabels": [
{
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "An Account related to the bank account.",
"LanguageCode": 1033,
"IsManaged": false
}
],
"UserLocalizedLabel": {
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "An Account related to the bank account.",
"LanguageCode": 1033,
"IsManaged": false
}
},
"DisplayName": {
"@odata.type": "Microsoft.Dynamics.CRM.Label",
"LocalizedLabels": [
{
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Related Account",
"LanguageCode": 1033,
"IsManaged": false
}
],
"UserLocalizedLabel": {
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Related Account",
"LanguageCode": 1033,
"IsManaged": false
}
},
"SchemaName": "sample_RelatedAccountId"
},
"IsCustomRelationship": false,
"IsManaged": false,
"IsValidForAdvancedFind": false,
"RelationshipType": "OneToManyRelationship",
"SchemaName": "sample_Account_BankAccounts",
"SecurityTypes": "None"
}
Response:
HTTP/1.1 204 NoContent
OData-Version: 4.0
OData-EntityId: [Organization Uri]/api/data/v9.2/RelationshipDefinitions(0901c466-112a-ed11-9db1-00224804f8e2)
Console output:
Created many-to-one relationship: RelationshipDefinitions(0901c466-112a-ed11-9db1-00224804f8e2)
Retrieve N:1 relationship
Request:
GET [Organization Uri]/api/data/v9.2/RelationshipDefinitions(0901c466-112a-ed11-9db1-00224804f8e2)/Microsoft.Dynamics.CRM.OneToManyRelationshipMetadata HTTP/1.1
Consistency: Strong
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
Response:
HTTP/1.1 200 OK
OData-Version: 4.0
{
"@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#RelationshipDefinitions/Microsoft.Dynamics.CRM.OneToManyRelationshipMetadata/$entity",
"ReferencedAttribute": "accountid",
"ReferencedEntity": "account",
"ReferencingAttribute": "sample_relatedaccountid",
"ReferencingEntity": "sample_bankaccount",
"IsHierarchical": false,
"EntityKey": null,
"IsRelationshipAttributeDenormalized": false,
"ReferencedEntityNavigationPropertyName": "sample_Account_BankAccounts",
"ReferencingEntityNavigationPropertyName": "sample_RelatedAccountId",
"RelationshipBehavior": 1,
"IsDenormalizedLookup": null,
"DenormalizedAttributeName": null,
"IsCustomRelationship": true,
"IsValidForAdvancedFind": false,
"SchemaName": "sample_Account_BankAccounts",
"SecurityTypes": "Append",
"IsManaged": false,
"RelationshipType": "OneToManyRelationship",
"IntroducedVersion": "1.0.0.0",
"MetadataId": "0901c466-112a-ed11-9db1-00224804f8e2",
"HasChanged": null,
"AssociatedMenuConfiguration": {
"Behavior": "UseLabel",
"Group": "Details",
"Order": 10000,
"IsCustomizable": true,
"Icon": null,
"ViewId": "00000000-0000-0000-0000-000000000000",
"AvailableOffline": true,
"MenuId": null,
"QueryApi": null,
"Label": {
"LocalizedLabels": [
{
"Label": "Related Bank Accounts",
"LanguageCode": 1033,
"IsManaged": false,
"MetadataId": "b2ad2cce-5c7c-46aa-8bbf-7903d33ef019",
"HasChanged": null
}
],
"UserLocalizedLabel": {
"Label": "Related Bank Accounts",
"LanguageCode": 1033,
"IsManaged": false,
"MetadataId": "b2ad2cce-5c7c-46aa-8bbf-7903d33ef019",
"HasChanged": null
}
}
},
"CascadeConfiguration": {
"Assign": "NoCascade",
"Delete": "RemoveLink",
"Archive": "RemoveLink",
"Merge": "Cascade",
"Reparent": "NoCascade",
"Share": "NoCascade",
"Unshare": "NoCascade",
"RollupView": "NoCascade"
},
"RelationshipAttributes": [],
"IsCustomizable": {
"Value": true,
"CanBeChanged": true,
"ManagedPropertyLogicalName": "iscustomizable"
}
}
Console output:
Retrieved relationship: sample_Account_BankAccounts
Section 7: Create and retrieve a many-to-many relationship
Like one-to-many relationships, there are special functions used by the designers in Power Apps prevent invalid combinations when creating many-to-many relationships.
Validate N:N relationship eligibility
CanManyToMany Function tells you whether a table can participate in a many-to-many relationship. So this request tests the
contact
table.Request:
POST [Organization Uri]/api/data/v9.2/CanManyToMany HTTP/1.1 OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json { "EntityName": "contact" }
Response:
HTTP/1.1 200 OK OData-Version: 4.0 { "@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.CanManyToManyResponse", "CanManyToMany": true }
Console output:
The contact table can participate in many-to-many relationships.
This request performs the same test on the
sample_bankaccount
table.Request:
POST [Organization Uri]/api/data/v9.2/CanManyToMany HTTP/1.1 OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json { "EntityName": "sample_bankaccount" }
Response:
HTTP/1.1 200 OK OData-Version: 4.0 { "@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.CanManyToManyResponse", "CanManyToMany": true }
Console output:
The sample_bankaccount table can participate in many-to-many relationships.
Identify Potential Entities for N:N relationships
Use the GetValidManyToMany Function to get a list of tables that can participate in many-to-many relationships.
Request:
GET [Organization Uri]/api/data/v9.2/GetValidManyToMany HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
Response:
HTTP/1.1 200 OK
OData-Version: 4.0
{
"@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.GetValidManyToManyResponse",
"EntityNames": [
"msdyn_slakpi",
"workflowbinary",
"apisettings",
"flowsession",
"theme",
"knowledgearticle",
"socialprofile",
"goal",
"position",
"externalparty",
"channelaccessprofileruleitem",
"routingruleitem",
"sample_bankaccount",
"synapselinkexternaltablestate",
"synapsedatabase",
"msdyn_aimodel",
"aaduser",
"applicationuser",
"msfp_unsubscribedrecipient",
"msdyn_aiconfiguration",
"msdyn_dataflow",
"flowmachineimage",
"queueitem",
"synapselinkschedule",
"msdyn_federatedarticleincident",
"flowmachine",
"synapselinkprofile",
"msdyn_dataflowrefreshhistory",
"solutioncomponentrelationshipconfiguration",
"contact",
"organizationdatasyncstate",
"botcomponent",
"bot",
"msdyn_componentlayer",
"msdyn_odatav4ds",
"msfp_question",
"msdyn_aibfile",
"msdyn_solutionhistorydatasource",
"msdyn_solutionhealthruleset",
"newprocess",
"connectionreference",
"msdyn_knowledgemanagementsetting",
"msdyn_pmrecording",
"msfp_survey",
"msdyn_aibdatasetscontainer",
"package",
"msdyn_solutioncomponentsummary",
"msdyn_helppage",
"appnotification",
"organizationdatasyncsubscriptionentity",
"msdyn_aiodtrainingboundingbox",
"msdyn_nonrelationalds",
"expiredprocess",
"msdyn_analysisresultdetail",
"msfp_alertrule",
"msdyn_solutioncomponentcountsummary",
"msdyn_kalanguagesetting",
"transactioncurrency",
"exportsolutionupload",
"msdyn_pmprocessusersettings",
"datasyncstate",
"msdyn_entityrefreshhistory",
"msdyn_analysisresult",
"msdyn_componentlayerdatasource",
"account",
"kbarticle",
"systemuser",
"task",
"msdyn_analysisjob",
"solutioncomponentconfiguration",
"msdyn_knowledgesearchfilter",
"stagesolutionupload",
"msdyn_pmtemplate",
"phonecall",
"msdyn_solutioncomponentdatasource",
"environmentvariablevalue",
"msdyn_aitemplate",
"userrating",
"synapselinkprofileentity",
"featurecontrolsetting",
"translationprocess",
"msdyn_pminferredtask",
"customapirequestparameter",
"externalpartyitem",
"msdyn_aibdatasetfile",
"flowmachinegroup",
"flowmachineimageversion",
"msdyn_aibdatasetrecord",
"msdyn_kbattachment",
"msdyn_aifptrainingdocument",
"customapiresponseproperty",
"msdyn_knowledgearticletemplate",
"msdyn_aiodimage",
"msdyn_knowledgesearchinsight",
"msfp_emailtemplate",
"catalog",
"msdyn_knowledgeinteractioninsight",
"conversationtranscript",
"msdyn_pmanalysishistory",
"msdyn_datalakeds",
"canvasappextendedmetadata",
"msfp_localizedemailtemplate",
"msdynce_botcontent",
"queue",
"msdyn_solutionhealthruleargument",
"msdyn_aibfileattacheddata",
"msdyn_richtextfile",
"msdyn_kmpersonalizationsetting",
"msdyn_aiodtrainingimage",
"msdyn_serviceconfiguration",
"msdyn_knowledgearticleimage",
"team",
"territory",
"msdyn_solutioncomponentcountdatasource",
"catalogassignment",
"msdyn_federatedarticle",
"msdyn_solutionhealthrule",
"msdyn_solutionhistory",
"msdyn_knowledgepersonalfilter",
"organizationdatasyncsubscription",
"solutioncomponentbatchconfiguration",
"connector",
"solutioncomponentattributeconfiguration",
"synapselinkprofileentitystate",
"msdyn_aiodlabel",
"customapi",
"msdyn_aibdataset",
"msfp_fileresponse",
"environmentvariabledefinition",
"msdyn_analysiscomponent",
"msfp_satisfactionmetric",
"msdyn_tour",
"msdyn_customcontrolextendedsettings",
"msfp_surveyreminder",
"virtualentitymetadata",
"msfp_questionresponse",
"msfp_project"
]
}
Console output:
Contact is in the list of potential tables for N:N.
sample_BankAccount is in the list of potential tables for N:N.
Create N:N relationship
This request creates a many-to-many relationship between sample_BankAccount
and Contact
tables.
Request:
POST [Organization Uri]/api/data/v9.2/RelationshipDefinitions HTTP/1.1
MSCRM.SolutionUniqueName: examplesolution
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
{
"@odata.type": "Microsoft.Dynamics.CRM.ManyToManyRelationshipMetadata",
"Entity1AssociatedMenuConfiguration": {
"Behavior": "UseLabel",
"Group": "Details",
"Label": {
"@odata.type": "Microsoft.Dynamics.CRM.Label",
"LocalizedLabels": [
{
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Bank Accounts",
"LanguageCode": 1033,
"IsManaged": false
}
],
"UserLocalizedLabel": {
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Bank Accounts",
"LanguageCode": 1033,
"IsManaged": false
}
},
"Order": 10000,
"ViewId": "00000000-0000-0000-0000-000000000000"
},
"Entity1LogicalName": "sample_bankaccount",
"Entity2AssociatedMenuConfiguration": {
"Behavior": "UseLabel",
"Group": "Details",
"Label": {
"@odata.type": "Microsoft.Dynamics.CRM.Label",
"LocalizedLabels": [
{
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Contacts",
"LanguageCode": 1033,
"IsManaged": false
}
],
"UserLocalizedLabel": {
"@odata.type": "Microsoft.Dynamics.CRM.LocalizedLabel",
"Label": "Contacts",
"LanguageCode": 1033,
"IsManaged": false
}
},
"Order": 10000,
"ViewId": "00000000-0000-0000-0000-000000000000"
},
"Entity2LogicalName": "contact",
"IntersectEntityName": "sample_sample_BankAccounts_Contacts",
"IsCustomRelationship": false,
"IsManaged": false,
"IsValidForAdvancedFind": false,
"RelationshipType": "OneToManyRelationship",
"SchemaName": "sample_sample_BankAccounts_Contacts",
"SecurityTypes": "None"
}
Response:
HTTP/1.1 204 NoContent
OData-Version: 4.0
OData-EntityId: [Organization Uri]/api/data/v9.2/RelationshipDefinitions(55c9f86c-112a-ed11-9db1-00224804f8e2)
Console output:
Created Many-to-Many relationship at: RelationshipDefinitions(55c9f86c-112a-ed11-9db1-00224804f8e2)
Retrieve N:N relationship
This request retrieves the many-to-many relationship created by the previous request.
Note
As mentioned above, because RelationshipDefinitions
contains both one-to-many and many-to-many relationship definitions, you must include the following in the URL to cast to the type you want to retrieve: /Microsoft.Dynamics.CRM.ManyToManyRelationshipMetadata
.
Otherwise, the value returned will be the RelationshipMetadataBase EntityType and will not include the properties specific to the ManyToManyRelationshipMetadata EntityType.
Request:
GET [Organization Uri]/api/data/v9.2/RelationshipDefinitions(55c9f86c-112a-ed11-9db1-00224804f8e2)/Microsoft.Dynamics.CRM.ManyToManyRelationshipMetadata HTTP/1.1
Consistency: Strong
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
Response:
HTTP/1.1 200 OK
OData-Version: 4.0
{
"@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#RelationshipDefinitions/Microsoft.Dynamics.CRM.ManyToManyRelationshipMetadata/$entity",
"Entity1LogicalName": "sample_bankaccount",
"Entity2LogicalName": "contact",
"IntersectEntityName": "sample_sample_bankaccounts_contacts",
"Entity1IntersectAttribute": "sample_bankaccountid",
"Entity2IntersectAttribute": "contactid",
"Entity1NavigationPropertyName": "sample_sample_BankAccounts_Contacts",
"Entity2NavigationPropertyName": "sample_sample_BankAccounts_Contacts",
"IsCustomRelationship": true,
"IsValidForAdvancedFind": false,
"SchemaName": "sample_sample_BankAccounts_Contacts",
"SecurityTypes": "None",
"IsManaged": false,
"RelationshipType": "ManyToManyRelationship",
"IntroducedVersion": "1.0.0.0",
"MetadataId": "55c9f86c-112a-ed11-9db1-00224804f8e2",
"HasChanged": null,
"Entity1AssociatedMenuConfiguration": {
"Behavior": "UseLabel",
"Group": "Details",
"Order": 10000,
"IsCustomizable": true,
"Icon": null,
"ViewId": "00000000-0000-0000-0000-000000000000",
"AvailableOffline": true,
"MenuId": null,
"QueryApi": null,
"Label": {
"LocalizedLabels": [
{
"Label": "Bank Accounts",
"LanguageCode": 1033,
"IsManaged": false,
"MetadataId": "271999d1-6fd9-4413-b027-f2a1b231e0a4",
"HasChanged": null
}
],
"UserLocalizedLabel": {
"Label": "Bank Accounts",
"LanguageCode": 1033,
"IsManaged": false,
"MetadataId": "271999d1-6fd9-4413-b027-f2a1b231e0a4",
"HasChanged": null
}
}
},
"Entity2AssociatedMenuConfiguration": {
"Behavior": "UseLabel",
"Group": "Details",
"Order": 10000,
"IsCustomizable": true,
"Icon": null,
"ViewId": "00000000-0000-0000-0000-000000000000",
"AvailableOffline": true,
"MenuId": null,
"QueryApi": null,
"Label": {
"LocalizedLabels": [
{
"Label": "Contacts",
"LanguageCode": 1033,
"IsManaged": false,
"MetadataId": "1fcff441-9a41-42b1-a0d9-e92daa47230f",
"HasChanged": null
}
],
"UserLocalizedLabel": {
"Label": "Contacts",
"LanguageCode": 1033,
"IsManaged": false,
"MetadataId": "1fcff441-9a41-42b1-a0d9-e92daa47230f",
"HasChanged": null
}
}
},
"IsCustomizable": {
"Value": true,
"CanBeChanged": true,
"ManagedPropertyLogicalName": "iscustomizable"
}
}
Console output:
Retrieved Many-to-Many relationship:sample_sample_BankAccounts_Contacts
Section 8: Export managed solution
Use the ExportSolution Action to export the solution as a managed solution. This action includes many switches you can use to include additional information as part of the solution, but in this case, all those options are turned off. More information: Work with solutions
Request:
POST [Organization Uri]/api/data/v9.2/ExportSolution HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
{
"SolutionName": "examplesolution",
"Managed": true,
"ExportAutoNumberingSettings": false,
"ExportCalendarSettings": false,
"ExportCustomizationSettings": false,
"ExportEmailTrackingSettings": false,
"ExportGeneralSettings": false,
"ExportMarketingSettings": false,
"ExportOutlookSynchronizationSettings": false,
"ExportRelationshipRoles": false,
"ExportIsvConfig": false,
"ExportSales": false,
"ExportExternalApplications": false
}
Response:
HTTP/1.1 200 OK
OData-Version: 4.0
{
"@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.ExportSolutionResponse",
"ExportSolutionFile": "[ Binary content removed for brevity]"
}
Console output:
Solution Exported to E:\GitHub\PowerApps-Samples\dataverse\webapi\C#-NETx\MetadataOperations\bin\Debug\net6.0\examplesolution.zip
Section 9: Delete sample records
References to all of the records created in this sample have been added to a list. In this section, all the records created are deleted using a $batch
operation.
Request:
POST [Organization Uri]/api/data/v9.2/$batch HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
--batch_d6cb9873-6b53-490d-942d-0bea79b8ba9a
Content-Type: application/http
Content-Transfer-Encoding: binary
Content-Length: 136
DELETE /api/data/v9.2/RelationshipDefinitions(991efd5f-112a-ed11-9db1-00224804f8e2) HTTP/1.1
--batch_d6cb9873-6b53-490d-942d-0bea79b8ba9a
Content-Type: application/http
Content-Transfer-Encoding: binary
Content-Length: 130
DELETE /api/data/v9.2/EntityDefinitions(5872b902-112a-ed11-9db1-00224804f8e2) HTTP/1.1
--batch_d6cb9873-6b53-490d-942d-0bea79b8ba9a
Content-Type: application/http
Content-Transfer-Encoding: binary
Content-Length: 122
DELETE /api/data/v9.2/solutions(5472b902-112a-ed11-9db1-00224804f8e2) HTTP/1.1
--batch_d6cb9873-6b53-490d-942d-0bea79b8ba9a
Content-Type: application/http
Content-Transfer-Encoding: binary
Content-Length: 123
DELETE /api/data/v9.2/publishers(a78ab7fc-102a-ed11-9db1-00224804f8e2) HTTP/1.1
--batch_d6cb9873-6b53-490d-942d-0bea79b8ba9a
Content-Type: application/http
Content-Transfer-Encoding: binary
Content-Length: 139
DELETE /api/data/v9.2/GlobalOptionSetDefinitions(7cfd8c56-112a-ed11-9db1-00224804f8e2) HTTP/1.1
--batch_d6cb9873-6b53-490d-942d-0bea79b8ba9a--
Response:
HTTP/1.1 200 OK
OData-Version: 4.0
--batchresponse_9fa66f62-38d1-4890-91ce-4185fd556745
Content-Type: application/http
Content-Transfer-Encoding: binary
HTTP/1.1 204 No Content
OData-Version: 4.0
--batchresponse_9fa66f62-38d1-4890-91ce-4185fd556745
Content-Type: application/http
Content-Transfer-Encoding: binary
HTTP/1.1 204 No Content
OData-Version: 4.0
--batchresponse_9fa66f62-38d1-4890-91ce-4185fd556745
Content-Type: application/http
Content-Transfer-Encoding: binary
HTTP/1.1 204 No Content
OData-Version: 4.0
--batchresponse_9fa66f62-38d1-4890-91ce-4185fd556745
Content-Type: application/http
Content-Transfer-Encoding: binary
HTTP/1.1 204 No Content
OData-Version: 4.0
--batchresponse_9fa66f62-38d1-4890-91ce-4185fd556745
Content-Type: application/http
Content-Transfer-Encoding: binary
HTTP/1.1 204 No Content
OData-Version: 4.0
--batchresponse_9fa66f62-38d1-4890-91ce-4185fd556745--
Console output:
Deleting created records...
Section 10: Import and Delete managed solution
This step imports managed solution exported in Section 8: Export managed solution using the ImportSolution Action.
Request:
POST [Organization Uri]/api/data/v9.2/ImportSolution HTTP/1.1 OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json { "OverwriteUnmanagedCustomizations": false, "PublishWorkflows": false, "CustomizationFile": "[ Binary content removed for brevity]", "ImportJobId": "00000000-0000-0000-0000-000000000000" }
Response:
HTTP/1.1 204 NoContent OData-Version: 4.0
Console output:
Sending request to import the examplesolution solution... Solution imported as a managed solution.
Get the
solutionid
of the managed solution byuniquename
so you can delete it.Request:
GET [Organization Uri]/api/data/v9.2/solutions?$select=solutionid&$filter=uniquename%20eq%20'examplesolution' HTTP/1.1 OData-MaxVersion: 4.0 OData-Version: 4.0 If-None-Match: null Accept: application/json
Response:
HTTP/1.1 200 OK OData-Version: 4.0 { "@odata.context": "[Organization Uri]/api/data/v9.2/$metadata#solutions(solutionid)", "value": [ { "@odata.etag": "W/\"13291034\"", "solutionid": "07439497-6992-4e30-81e0-628a91984af5" } ] }
Delete managed solution
This final step deletes the managed solution imported to return the system to the original state.
Request:
DELETE [Organization Uri]/api/data/v9.2/solutions(07439497-6992-4e30-81e0-628a91984af5) HTTP/1.1
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Accept: application/json
Response:
HTTP/1.1 204 NoContent
OData-Version: 4.0
Console output:
Sending request to delete the examplesolution solution...
Managed solution deleted.
--Metadata Operations sample completed--
See also
Use the Dataverse Web API
Use the Web API with table definitions
Query table definitions using the Web API
Create and update table definitions using the Web API
Create and update table relationships using the Web API
Create and update choices (option sets) using the Web API
Web API table schema operations sample (C#)