Autodesk forge “错误”;自定义“属性”重复“名称”;过帐自定义属性定义时

Autodesk forge “错误”;自定义“属性”重复“名称”;过帐自定义属性定义时,autodesk-forge,autodesk-bim360,autodesk-data-management,Autodesk Forge,Autodesk Bim360,Autodesk Data Management,我正在尝试使用以下说明向BIM360文件夹添加自定义属性: public异步任务addFolderCustomAttribute(字符串projectId、字符串folderId、字符串attributeName、字符串类型) { var localVarPath=$“bim360/docs/v1/projects/{projectId.Replace(“b.”,“”)}/folders/{System.Web.HttpUtility.UrlEncode(folderId)}/custom属性

我正在尝试使用以下说明向BIM360文件夹添加自定义属性:

public异步任务addFolderCustomAttribute(字符串projectId、字符串folderId、字符串attributeName、字符串类型)
{
var localVarPath=$“bim360/docs/v1/projects/{projectId.Replace(“b.”,“”)}/folders/{System.Web.HttpUtility.UrlEncode(folderId)}/custom属性定义”;
var localVarQueryParams=新字典();
对象localVarPostBody=null;
var localVarHeaderParams=新字典(Configuration.Default.DefaultHeader);
var localVarFormParams=新字典();
var localVarFileParams=新字典();
var localVarPathParams=新字典();
String[]localVarHttpContentTypes=新字符串[]{
“应用程序/vnd.api+json”
};
字符串localVarHttpContentType=Configuration.Default.ApicClient.SelectHeaderContentType(localVarHttpContentType);
如果(!String.IsNullOrEmpty(Configuration.Default.AccessToken))
{
localVarHeaderParams[“Authorization”]=“Bearer”+Configuration.Default.AccessToken;
}
localVarPostBody=“{\'name\':\”+attributeName+“\”,\'type\':\”+type+“\”}”;
IRestResponse localVarResponse=(IRestResponse)等待配置.Default.ApiClient.CallApiAsync(localVarPath,
Method.POST、localVarQueryParams、localVarPostBody、localVarHeaderParams、localVarFormParams、localVarFileParams、,
localVarPathParams、localVarHttpContentType);
int localVarStatusCode=(int)localVarResponse.StatusCode;
var响应=新的ApiResponse(localVarStatusCode,
localVarResponse.Headers.ToDictionary(x=>x.Name,x=>x.Value.ToString()),
/*(JsonApiCollection)*/Configuration.Default.ApiClient.Deserialize(localVarResponse,typeof(JsonApiCollection));
var id=(long)((Autodesk.Forge.Model.DynamicJsonResponse)response.Data).字典[“id”];
返回id;
}
我收到这个错误:自定义\u属性\u重复\u名称

但是,当我使用以下方法枚举文件夹的自定义属性时:

公共异步任务getFolderCustomAttributeDefinition(字符串projectId,字符串folderId)
{
var localVarPath=$“bim360/docs/v1/projects/{projectId.Replace(“b.”,“”)}/folders/{System.Web.HttpUtility.UrlEncode(folderId)}/custom属性定义”;
var localVarQueryParams=新字典();
对象localVarPostBody=null;
var localVarHeaderParams=新字典(Configuration.Default.DefaultHeader);
var localVarFormParams=新字典();
var localVarFileParams=新字典();
var localVarPathParams=新字典();
String[]localVarHttpContentTypes=新字符串[]{
“应用程序/vnd.api+json”
};
字符串localVarHttpContentType=Configuration.Default.ApicClient.SelectHeaderContentType(localVarHttpContentType);
如果(!String.IsNullOrEmpty(Configuration.Default.AccessToken))
{
localVarHeaderParams[“Authorization”]=“Bearer”+Configuration.Default.AccessToken;
}
IRestResponse localVarResponse=(IRestResponse)等待配置.Default.ApiClient.CallApiAsync(localVarPath,
Method.GET、localVarQueryParams、localVarPostBody、localVarHeaderParams、localVarFormParams、localVarFileParams、,
localVarPathParams、localVarHttpContentType);
int localVarStatusCode=(int)localVarResponse.StatusCode;
var响应=新的ApiResponse(localVarStatusCode,
localVarResponse.Headers.ToDictionary(x=>x.Name,x=>x.Value.ToString()),
/*(JsonApiCollection)*/Configuration.Default.ApiClient.Deserialize(localVarResponse,typeof(JsonApiCollection));
var sret=((Autodesk.Forge.Model.DynamicJsonResponse)response.Data).Dictionary[“results”];
var resultsDic=((Autodesk.Forge.Model.DynamicDictionary)sret).Dictionary;
字典ret=新字典();
foreach(结果DIC中的var att){
var attrDic=(Autodesk.Forge.Model.DynamicDictionary)att.Value;
ret.Add((长)attrDic.Dictionary[“id”]、新元组((字符串)attrDic.Dictionary[“name”]、(字符串)attrDic.Dictionary[“type”]);
}
返回ret;
}
它不显示任何具有该名称的属性


有什么想法吗?

作为一种故障排除和缩小范围的方法,您可以尝试使用postman之类的工具吗?看看你是否看到同样的结果?可能是正文中存在语法错误,错误消息具有误导性。此外,属性名称是否存在于预定义的属性名称中?如果在文件夹结构的不同级别定义两个属性,我可以创建重复的名称。当我试图定义产品预定义属性的名称时,收到重复名称错误消息。您好@MikakoHarada,谢谢您的评论。我认为这是由于最近BIM360自定义属性的变化。对于一个较旧的项目(可能几个月),该代码运行良好,但随着2021年3月23日之后创建的项目中新属性定义的更改,如果已经在项目中的“某处”创建了另一个同名属性,则上述代码将无法运行。我想API现在需要反映更改,以便我们可以枚举所有“项目”属性,并从列表中分配到任何文件夹。Afshin,你是对的。旧项目和新项目的属性行为不同。我可以重现你现在描述的问题。我将向产品团队提出这个问题。Afshin,工程师团队告诉我,定制属性的行为确实发生了变化。属性def的名称在每个文件夹中都是唯一的,而现在从3月23日开始在每个项目中都是唯一的。我记录了一张内部票据(ALEX-40828)来询问
public async Task<long> addFolderCustomAttribute(string projectId, string folderId, string attributeName, string type)
    {
        var localVarPath = $"bim360/docs/v1/projects/{projectId.Replace("b.", "")}/folders/{System.Web.HttpUtility.UrlEncode(folderId)}/custom-attribute-definitions";
        var localVarQueryParams = new Dictionary<String, String>();
        Object localVarPostBody = null;
        var localVarHeaderParams = new Dictionary<String, String>(Configuration.Default.DefaultHeader);
        var localVarFormParams = new Dictionary<String, String>();
        var localVarFileParams = new Dictionary<String, FileParameter>();
        var localVarPathParams = new Dictionary<String, String>();
        String[] localVarHttpContentTypes = new String[] {
            "application/vnd.api+json"
        };
        String localVarHttpContentType = Configuration.Default.ApiClient.SelectHeaderContentType(localVarHttpContentTypes);
        if (!String.IsNullOrEmpty(Configuration.Default.AccessToken))
        {
            localVarHeaderParams["Authorization"] = "Bearer " + Configuration.Default.AccessToken;
        }
        localVarPostBody = "{\"name\":\"" + attributeName + "\", \"type\":\"" + type + "\"}";
        IRestResponse localVarResponse = (IRestResponse)await Configuration.Default.ApiClient.CallApiAsync(localVarPath,
            Method.POST, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams,
            localVarPathParams, localVarHttpContentType);

        int localVarStatusCode = (int)localVarResponse.StatusCode;

        var response = new ApiResponse</*JsonApiCollection*/dynamic>(localVarStatusCode,
            localVarResponse.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()),
            /*(JsonApiCollection)*/ Configuration.Default.ApiClient.Deserialize(localVarResponse, typeof(JsonApiCollection)));

        var id = (long)((Autodesk.Forge.Model.DynamicJsonResponse)response.Data).Dictionary["id"];
        return id;
    }
public async Task<Dictionary<long, Tuple<string, string>>> getFolderCustomAttributeDefinition(string projectId, string folderId)
    {
        var localVarPath = $"bim360/docs/v1/projects/{projectId.Replace("b.", "")}/folders/{System.Web.HttpUtility.UrlEncode(folderId)}/custom-attribute-definitions";
        var localVarQueryParams = new Dictionary<String, String>();
        Object localVarPostBody = null;
        var localVarHeaderParams = new Dictionary<String, String>(Configuration.Default.DefaultHeader);
        var localVarFormParams = new Dictionary<String, String>();
        var localVarFileParams = new Dictionary<String, FileParameter>();
        var localVarPathParams = new Dictionary<String, String>();
        String[] localVarHttpContentTypes = new String[] {
            "application/vnd.api+json"
        };
        String localVarHttpContentType = Configuration.Default.ApiClient.SelectHeaderContentType(localVarHttpContentTypes);
        if (!String.IsNullOrEmpty(Configuration.Default.AccessToken))
        {
            localVarHeaderParams["Authorization"] = "Bearer " + Configuration.Default.AccessToken;
        }
        IRestResponse localVarResponse = (IRestResponse) await Configuration.Default.ApiClient.CallApiAsync(localVarPath,
            Method.GET, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams,
            localVarPathParams, localVarHttpContentType);

        int localVarStatusCode = (int)localVarResponse.StatusCode;

        var response =  new ApiResponse</*JsonApiCollection*/dynamic>(localVarStatusCode,
            localVarResponse.Headers.ToDictionary(x => x.Name, x => x.Value.ToString()),
            /*(JsonApiCollection)*/ Configuration.Default.ApiClient.Deserialize(localVarResponse, typeof(JsonApiCollection)));
        
        var sret = ((Autodesk.Forge.Model.DynamicJsonResponse)response.Data).Dictionary["results"];
        var resultsDic = ((Autodesk.Forge.Model.DynamicDictionary)sret).Dictionary;
        Dictionary<long, Tuple<string, string>> ret = new Dictionary<long, Tuple<string, string>>();
        foreach (var att in resultsDic) {
            var attrDic = (Autodesk.Forge.Model.DynamicDictionary)att.Value;
            ret.Add((long)attrDic.Dictionary["id"], new Tuple<string, string>((string)attrDic.Dictionary["name"], (string)attrDic.Dictionary["type"]));
        }
        return ret;
    }