у нас есть требование, когда мы должны получить метаданные Entity. Точное требование: Im считывает значение поля в форме, которая имеет "имя схемы сущности". При этом мне нужно получить это имя схемы первичного ключа Entity. Является ли это возможным? Если да, пожалуйста, помогите мне. Например: в этом поле, если я войду в "ведущий", это веб-приложение api должно получить "leadid" и сохранить его в другом поле. 2. Если я введу "инцидент", этот веб-апи должен получить меня "случайно",
Вам не нужно извлекать метаданные объекта для этого, первичный ключ всегда "имя схемы сущности" + "id", исключений из этого правила нет. Если вы все еще хотите получить метаданные, вы должны сделать это, позвонив:
https://crmaddress/api/data/v8.2/EntityDefinitions(LogicalName='account')/Attributes?$select=LogicalName
Это вернет все атрибуты для "учетной записи" сущности, первичный ключ - тот, у которого нет атрибута "@odata.type"
Да, я согласен с тем, что нет необходимости извлекать, если это имя схемы первичного ключа, поскольку для каждой сущности это имя схемы сущности + 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();
};
Прежде всего, спасибо за 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 + "'";