使用网络检索实体元数据 api
Retrieving Entity Metadata using web api
我们有一个要求,我们必须检索实体的元数据。
确切要求:我正在读取具有 "entity schema name" 的表单上的字段值。为此,我需要获取该实体的主键架构名称。可能吗?如果是这样,请帮助我。
例如:如果我在该字段中输入 "lead" ,该网站 api 应该会获取我 "leadid" 并将其存储在另一个字段中。
2. 如果我输入 "incident" ,那个网站 api 应该让我 "incidentid"
您不需要为此检索实体元数据,对于活动以外的实体,主键始终是“实体架构名称”+“id”。如果你想要一个通用的解决方案,你应该能够从元数据中获取此信息:
https://crmaddress/api/data/v9.1/EntityDefinitions(LogicalName='account')
并简单地获取结果的“PrimaryIdAttribute”,因此示例代码为:
fetch("/api/data/v9.1/EntityDefinitions(LogicalName='account')")
.then(response => response.json())
.then(data => console.log(data.PrimaryIdAttribute));
是的,我同意没有必要检索它是否是主键模式名称,因为对于每个实体它是实体模式名称 + id (Lead + id = leadid)。但是,我们认为这不是一个好的做法。我们通过以下代码实现了这一点......它工作得很好。当我们提供正确的实体模式名称时,它会自动将该主 ID 属性填充到另一个字段中。
new_primarykey - 我在表单的 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();
};
enter image description here
首先感谢分享。我目前正在处理表单级别的全局按钮,JavaScript 应该获取特定实体的主键。我也从 entityName + "id" 开始,但这将在 activity 实体(如电子邮件等)上失败。所以我开始实施上述内容。
当您通过 javascript 中的表单获取实体的逻辑名称时:
var entityName = Xrm.Page.data.entity.getEntityName();
你得到例如 "opportunity",当你将它作为 entityName
的变量添加到 getPrimaryKey
时,这将失败,因为实体的 SchemaName
是机会而不是机会。也用于帐户等
所以我的建议是,当您使用 .getEntityName()
时使用 LogicalName
而不是 SchemaName
,这会导致以下结果 URL:
var url = Xrm.Page.context.getClientUrl() + "/api/data/v8.2/" + "EntityDefinitions?$select=PrimaryIdAttribute&$filter=LogicalName eq '" + entityName + "'";
我们有一个要求,我们必须检索实体的元数据。 确切要求:我正在读取具有 "entity schema name" 的表单上的字段值。为此,我需要获取该实体的主键架构名称。可能吗?如果是这样,请帮助我。 例如:如果我在该字段中输入 "lead" ,该网站 api 应该会获取我 "leadid" 并将其存储在另一个字段中。 2. 如果我输入 "incident" ,那个网站 api 应该让我 "incidentid"
您不需要为此检索实体元数据,对于活动以外的实体,主键始终是“实体架构名称”+“id”。如果你想要一个通用的解决方案,你应该能够从元数据中获取此信息:
https://crmaddress/api/data/v9.1/EntityDefinitions(LogicalName='account')
并简单地获取结果的“PrimaryIdAttribute”,因此示例代码为:
fetch("/api/data/v9.1/EntityDefinitions(LogicalName='account')")
.then(response => response.json())
.then(data => console.log(data.PrimaryIdAttribute));
是的,我同意没有必要检索它是否是主键模式名称,因为对于每个实体它是实体模式名称 + id (Lead + id = leadid)。但是,我们认为这不是一个好的做法。我们通过以下代码实现了这一点......它工作得很好。当我们提供正确的实体模式名称时,它会自动将该主 ID 属性填充到另一个字段中。 new_primarykey - 我在表单的 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();
};
enter image description here
首先感谢分享。我目前正在处理表单级别的全局按钮,JavaScript 应该获取特定实体的主键。我也从 entityName + "id" 开始,但这将在 activity 实体(如电子邮件等)上失败。所以我开始实施上述内容。
当您通过 javascript 中的表单获取实体的逻辑名称时:
var entityName = Xrm.Page.data.entity.getEntityName();
你得到例如 "opportunity",当你将它作为 entityName
的变量添加到 getPrimaryKey
时,这将失败,因为实体的 SchemaName
是机会而不是机会。也用于帐户等
所以我的建议是,当您使用 .getEntityName()
时使用 LogicalName
而不是 SchemaName
,这会导致以下结果 URL:
var url = Xrm.Page.context.getClientUrl() + "/api/data/v8.2/" + "EntityDefinitions?$select=PrimaryIdAttribute&$filter=LogicalName eq '" + entityName + "'";