Получение метаданных сущности с помощью веб-API

1

у нас есть требование, когда мы должны получить метаданные Entity. Точное требование: Im считывает значение поля в форме, которая имеет "имя схемы сущности". При этом мне нужно получить это имя схемы первичного ключа Entity. Является ли это возможным? Если да, пожалуйста, помогите мне. Например: в этом поле, если я войду в "ведущий", это веб-приложение api должно получить "leadid" и сохранить его в другом поле. 2. Если я введу "инцидент", этот веб-апи должен получить меня "случайно",

Теги:
dynamics-crm
dynamics-crm-webapi

3 ответа

1
Лучший ответ

Вам не нужно извлекать метаданные объекта для этого, первичный ключ всегда "имя схемы сущности" + "id", исключений из этого правила нет. Если вы все еще хотите получить метаданные, вы должны сделать это, позвонив:

https://crmaddress/api/data/v8.2/EntityDefinitions(LogicalName='account')/Attributes?$select=LogicalName

Это вернет все атрибуты для "учетной записи" сущности, первичный ключ - тот, у которого нет атрибута "@odata.type"

1

Да, я согласен с тем, что нет необходимости извлекать, если это имя схемы первичного ключа, поскольку для каждой сущности это имя схемы сущности + id (Lead + id = leadid). Но мы чувствовали, что это не очень хорошая практика. Мы достигли этого с помощью следующего кода... Он отлично работает нормально. Когда мы предоставим правильное имя схемы сущностей, оно автоматически заполнит этот атрибут первичного идентификатора в другое поле. new_primarykey - где я заполняю имя схемы основного ключа при вводе имени схемы Entity в поле new_entityschemaname в форме.

function getPrimaryKey() {
    var Oldprimary = Xrm.Page.data.entity.attributes.get("new_primarykey").getValue();
    var req = new XMLHttpRequest();
    var entityName = Xrm.Page.data.entity.attributes.get("new_entityschemaname").getValue();
    var url = Xrm.Page.context.getClientUrl() + "/api/data/v8.2/" + "EntityDefinitions?$select=PrimaryIdAttribute&$filter=SchemaName eq '" + entityName + "'";
    req.open("GET", url, false);
    req.setRequestHeader("OData-MaxVersion", "4.0");
    req.setRequestHeader("OData-Version", "4.0");
    req.setRequestHeader("Accept", "application/json");
    req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    req.setRequestHeader("Prefer", "odata.include-annotations=\"*\"");
    req.onreadystatechange = function () {
        Xrm.Page.data.entity.attributes.get("new_primarykey").setValue("");
        if (this.readyState === 4) {
           
              
            
            req.onreadystatechange = null;
            if (this.status === 200) {
                var results = JSON.parse(this.response);
                var primarykey = results.value[0].PrimaryIdAttribute;
                Xrm.Page.data.entity.attributes.get("new_primarykey").setValue(primarykey);
 
            }
            else {
                Xrm.Utility.alertDialog("Error");
            }
        }
    }
    req.send();
};
 

введите описание изображения здесь

0

Прежде всего, спасибо за Sharing. В настоящее время я работаю над глобальной кнопкой на уровне формы, на которой JavaScript должен получить первичный ключ конкретного объекта. Я также начал с entityName + "id", но это не сработает на объектах активности, таких как электронная почта и т.д. Поэтому я начал реализовывать вышеупомянутое.

Когда вы получаете логическое имя объекта через форму в javascript:

var entityName = Xrm.Page.data.entity.getEntityName();

Вы получаете, например, "возможность", и когда вы добавляете это как var для entityName в getPrimaryKey это не сработает, потому что SchemaName объекта - это Возможность и не возможность. Также для учетной записи

Поэтому мой совет - когда вы работаете с .getEntityName() чтобы использовать LogicalName вместо SchemaName что приводит к следующему URL-адресу:

var url = Xrm.Page.context.getClientUrl() + "/api/data/v8.2/" + "EntityDefinitions?$select=PrimaryIdAttribute&$filter=LogicalName eq '" + entityName + "'";
  • 0
    Добро пожаловать в стек переполнения. Переполнение стека - это не дискуссионный форум, это сайт вопросов и ответов, где вы можете задать конкретный программный вопрос, на который можно ответить, а не обсудить. Мы здесь не делимся , мы спрашиваем и отвечаем . Поле для ответа на вопрос следует использовать только для полных ответов на вопрос. Все, что не является ответом, должно быть либо комментарием (что вы сможете сделать, когда заработаете достаточно репутации), либо новым вопросом вообще.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню