Bentley ProjectWise WSG API V2.5:如何访问自定义架构中的文件属性
解决ProjectWise WSG API访问自定义架构属性的问题
错误原因分析
你之前的调用存在两个核心问题:
- 误用
$file后缀:该后缀用于下载文件二进制内容,并非获取实例属性; - 直接复用Document的
file_instance_id:CustomSchema.CustomClass的实例ID与PW_WSG.Document的实例ID不属于同一实体,二者为关联关系,不能直接复用ID访问。
正确访问方式
方式1:先查询关联自定义类实例ID,再获取属性
- 查询关联的CustomClass实例ID
构造OData查询端点,过滤出与目标Document实例绑定的自定义类实例:
# 构造查询端点 query_endpoint = f"/ws/v2.5/Repositories/{repository_id}/CustomSchema/CustomClass?$filter=RelatedInstance/Id eq '{file_instance_id}' and RelatedInstance/Class eq 'PW_WSG.Document'" # 发送GET请求 response = requests.get(base_url + query_endpoint, auth=HTTPBasicAuth(username, password)) custom_instance = response.json()['value'][0] # 取首个匹配实例 custom_instance_id = custom_instance['Id']
- 获取自定义属性
使用拿到的custom_instance_id访问自定义类实例端点,即可获取所有自定义属性:
# 构造属性获取端点 attr_endpoint = f"/ws/v2.5/Repositories/{repository_id}/CustomSchema/CustomClass/{custom_instance_id}" # 发送GET请求 response = requests.get(base_url + attr_endpoint, auth=HTTPBasicAuth(username, password)) custom_attributes = response.json()
若仅需特定属性,可添加$select参数筛选:
attr_endpoint = f"/ws/v2.5/Repositories/{repository_id}/CustomSchema/CustomClass/{custom_instance_id}?$select=YourCustomAttr1,YourCustomAttr2"
方式2:查询Document时直接关联展开自定义属性
通过$expand参数,在获取Document默认属性的同时直接拉取关联的自定义类属性,一步完成:
# 构造带关联展开的端点 expand_endpoint = f"/ws/v2.5/Repositories/{repository_id}/PW_WSG/Document/{file_instance_id}?$expand=CustomSchema.CustomClass" # 发送GET请求 response = requests.get(base_url + expand_endpoint, auth=HTTPBasicAuth(username, password)) full_data = response.json() # 默认属性在根节点,自定义属性存储于full_data['CustomSchema.CustomClass']字段下
内容的提问来源于stack exchange,提问作者DidiBow
相关产品推荐
相关产品推荐

