使用web api检索实体元数据

时间:2017-06-06 16:37:28

标签: javascript dynamics-crm dynamics-crm-webapi

我们需要检索实体的元数据。 确切的要求:我正在读取一个表格上的字段值,该表格具有“实体模式名称”。有了这个,我需要获得该Entity的主键模式名称。可能吗?如果是这样,请帮助我。 例如:在该字段中,如果我输入“lead”,那个web api应该取给我“leadid”并将其存储在另一个字段中。 2.如果我输入“事件”,该网络API应该让我“煽动”

3 个答案:

答案 0 :(得分:1)

您不需要为此检索实体元数据,主键始终是"实体模式名称" +" id",该规则没有例外。如果您仍想检索元数据,则应该可以通过调用:

来执行此操作
https://crmaddress/api/data/v8.2/EntityDefinitions(LogicalName='account')/Attributes?$select=LogicalName

这将返回实体" account"的所有属性,主键是没有任何" @ odata.type"属性

答案 1 :(得分:1)

是的,我同意不需要检索它的主键架构名称是否与每个实体一样,它的实体架构名称+ 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

答案 2 :(得分:0)

首先,感谢分享。我目前正在处理表单级别的全局按钮,JavaScript应该获取特定实体的主键。我也从entityName +“id”开始,但是这会在电子邮件等活动实体上失败。所以我开始实现上述。

当您通过javascript中的表单获取实体的逻辑名称时

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

您获得了“机会”,当您将此entityName的var添加到getPrimaryKey时,这将失败,因为该实体的SchemaName是商机而非商机。也适用于帐户等。

所以我的建议是当你使用.getEntityName()使用LogicalName代替SchemaName时,会产生以下网址:

var url = Xrm.Page.context.getClientUrl() + "/api/data/v8.2/" + "EntityDefinitions?$select=PrimaryIdAttribute&$filter=LogicalName eq '" + entityName + "'";