models 包

Dataverse SDK 的数据模型和类型定义。

为 Dataverse 实体提供数据类和帮助程序:

模块

batch

批处理操作的公共结果类型。

fetchxml_query

FetchXmlQuery — QueryOperations.fetchxml()返回的插入查询对象。

filters

Dataverse SDK 的可组合 OData 筛选器表达式。

提供一个表达式树,该表达式树编译为 OData $filter 字符串,其中包含用于组合复杂筛选条件的Python运算符重载(&|~)。

例子::

from PowerPlatform.Dataverse.models.filters import col, raw


# Preferred GA idiom — col() proxy
expr = col("statecode") == 0
print(expr.to_odata())  # statecode eq 0


# Complex composition with OR and AND
expr = (col("statecode") == 0) | (col("statecode") == 1) & (col("revenue") > 100000)
print(expr.to_odata())


# In / not-in
expr = col("statecode").in_([0, 1, 2])
print(expr.to_odata())
# Microsoft.Dynamics.CRM.In(PropertyName='statecode',PropertyValues=["0","1","2"])


# Raw OData escape hatch (no deprecation warning)
expr = raw("Microsoft.Dynamics.CRM.Today(PropertyName='createdon')")


# Negation
expr = ~(col("statecode") == 1)
print(expr.to_odata())  # not (statecode eq 1)
labels

Dataverse 元数据的标签模型。

protocol

用于类型化实体集成的 DataverseModel 结构协议。

query_builder

用于构造 OData 查询的 Fluent 查询生成器。

提供一个类型安全的可发现接口,用于使用方法链接针对 Dataverse 表生成复杂查询。

例子::

# Via client (recommended) -- flat iteration over records
from PowerPlatform.Dataverse.models import col


for record in (client.query.builder("account")
               .select("name", "revenue")
               .where(col("statecode") == 0)
               .where(col("revenue") > 1_000_000)
               .order_by("revenue", descending=True)
               .top(100)
               .execute()):
    print(record["name"])


# With composable expression tree
from PowerPlatform.Dataverse.models import col, raw


for record in (client.query.builder("account")
               .select("name", "revenue")
               .where((col("statecode") == 0) | (col("statecode") == 1))
               .where(col("revenue") > 100000)
               .top(100)
               .execute()):
    print(record["name"])


# Lazy paged iteration (one QueryResult per HTTP page)
for page in (client.query.builder("account")
             .select("name")
             .execute_pages()):
    process_batch(page)


# Get results as a pandas DataFrame
df = (client.query.builder("account")
      .select("name", "telephone1")
      .where(col("statecode") == 0)
      .top(100)
      .execute()
      .to_dataframe())
record

记录 Dataverse 数据的模型。

relationship

Dataverse 的关系模型(输入和输出)。

table_info

Dataverse 的表和列元数据模型。

upsert

Dataverse SDK 的 Upsert 数据模型。

AlternateKeyInfo

Dataverse 表的备用键元数据。

BatchItemResponse

批处理请求中单个操作的响应。

响应按提交顺序返回。 对于添加到变更集的操作,响应按该顺序显示在更改集的位置。

示例:


   for item in result.responses:
       if item.is_success:
           print(f"[OK] {item.status_code} entity_id={item.entity_id}")
       else:
           print(f"[ERR] {item.status_code}: {item.error_message}")
BatchResult

执行批处理请求的结果。

每个提交的 HTTP 操作都包含一个 BatchItemResponse 。 扩展到多个 HTTP 请求的操作(例如 add_columns 包含三列)贡献了三个条目。

示例:


   result = client.batch.new().execute()
   print(f"Succeeded: {len(result.succeeded)}, Failed: {len(result.failed)}")
   for guid in result.entity_ids:
       print(f"[OK] entity_id: {guid}")
CascadeConfiguration

定义关系操作的级联行为。

每个参数的有效值:

  • “Cascade”:对所有相关记录执行操作

  • “NoCascade”:不要对相关记录执行操作

  • “RemoveLink”:删除关系链接,但保留记录

  • “Restrict”:如果存在相关记录,则阻止操作

ColumnInfo

Dataverse 表定义的列元数据。

ColumnProxy

用于从列名称生成 OData 筛选器表达式的 Fluent 代理。

返回者 col。 运算符重载和方法生成 FilterExpression 可传递给 QueryBuilder.where()的实例。

示例:


   from PowerPlatform.Dataverse.models.filters import col

   expr = col("statecode") == 0               # equality
   expr = col("revenue") > 1_000_000          # comparison
   expr = col("name").like("Contoso%")        # startswith
   expr = col("name").is_null()               # null check
   expr = col("statecode").in_([0, 1])        # in
DataverseModel

结构协议允许将类型化实体实例传递给和records.update()传递records.create()

在任何实体类(dataclass、Pydantic 模型、手动滚动)上实现此协议,使其可以直接传递到 CRUD 操作,而无需指定表名称或手动转换为听写。

必需的类变量:

  • __entity_logical_name__ — Dataverse 逻辑实体名称(例如 "account"

  • __entity_set_name__ — OData 实体集名称(例如 "accounts"

必需的实例方法:

  • to_dict() — 将记录有效负载返回为 dict

  • from_dict(data) — 从响应中重新构造的 classmethod dict

示例:


   from dataclasses import dataclass
   from PowerPlatform.Dataverse import DataverseModel

   @dataclass
   class Account:
       __entity_logical_name__ = "account"
       __entity_set_name__ = "accounts"
       name: str = ""
       telephone1: str = ""

       def to_dict(self) -> dict:
           return {"name": self.name, "telephone1": self.telephone1}

       @classmethod
       def from_dict(cls, data: dict) -> "Account":
           return cls(
               name=data.get("name", ""),
               telephone1=data.get("telephone1", ""),
           )

   # isinstance() works today — Protocol is runtime_checkable:
   assert isinstance(Account(), DataverseModel)

   # Type your own helpers against the Protocol now:
   def save(entity: DataverseModel) -> None:
       data = entity.to_dict()
       client.records.create(entity.__entity_logical_name__, data)

注释

没有表名称的直接调度(client.records.create(entity)

尚不支持或听写,将在将来的版本中添加。

ExpandOption

导航属性的结构化选项 $expand

允许在 OData $expand 语法之后指定单个导航属性扩展的嵌套$filter$select$orderby$top选项。

示例:


   # Expand Account_Tasks with nested options
   opt = (ExpandOption("Account_Tasks")
          .select("subject", "createdon")
          .filter("contains(subject,'Task')")
          .order_by("createdon", descending=True)
          .top(5))

   query = (client.query.builder("account")
            .select("name")
            .expand(opt)
            .execute())
FetchXmlQuery

Inert FetchXML 查询对象。 在调用或execute_pages调用之前execute,不会发出 HTTP 请求。

通过 client.query.fetchxml(xml). 获取。

FilterExpression

可组合 OData 筛选器表达式的基类。

支持逻辑组合的Python运算符重载:

  • expr1 & expr2 生产 (expr1 and expr2)

  • expr1 | expr2 生产 (expr1 or expr2)

  • ~expr 生产 not (expr)

Label

表示可具有多个本地化版本的标签。

LocalizedLabel

表示具有语言代码的本地化标签。

LookupAttributeMetadata

查找属性的元数据。

有效的required_level值:

  • “None”:属性是可选的

  • “建议”:建议使用属性

  • “ApplicationRequired”:属性是必需的

ManyToManyRelationshipMetadata

多对多实体关系的元数据。

OneToManyRelationshipMetadata

一对多实体关系的元数据。

QueryBuilder

Fluent 接口,用于针对同步客户端生成和执行 OData 查询。

提供用于使用可组合筛选器表达式构造复杂查询的方法链。 可以使用独立(通过 build())或绑定到客户端(通过 execute)。

QueryParams

QueryBuilder.build(). 返回的类型化字典。

将生成结果传递给 client.records.list() 手动时,提供 IDE 自动完成。

QueryResult

围绕对象列表 Record 的可迭代包装器。

返回者 execute (平面模式)和 list

向后兼容: for r in result 在不更改的情况下继续工作。

RelationshipInfo

关系元数据的类型化返回模型。

返回者 create_one_to_many_relationshipcreate_many_to_many_relationshipget_relationshipcreate_lookup_field

示例:


   result = client.tables.create_one_to_many_relationship(lookup, relationship)
   print(result.relationship_schema_name)
   print(result.lookup_schema_name)
TableInfo

具有类似于听写的向后兼容性的表元数据。

支持新的属性访问(info.schema_name)和旧式听写密钥访问(info["table_schema_name"]),以便向后兼容针对原始听写 API 编写的代码。

示例:


   info = client.tables.create("new_Product", {"new_Price": "decimal"})
   print(info.schema_name)              # new attribute access
   print(info["table_schema_name"])     # legacy dict-key access
UpsertItem

表示单个向上插入操作,该操作以记录的备用键为目标。

用于 upsert 更新插入由备用键而不是主要 GUID 标识的一个或多个记录。

示例:


   item = UpsertItem(
       alternate_key={"accountnumber": "ACC-001", "address1_postalcode": "98052"},
       record={"name": "Contoso Ltd", "telephone1": "555-0100"},
   )

函数

col

返回用于生成筛选器表达式的表达式 ColumnProxy

这是构造筛选器表达式的首选 GA 成语:


   from PowerPlatform.Dataverse.models.filters import col

   expr = col("statecode") == 0
   expr = col("revenue") > 1_000_000
   expr = col("name").like("Contoso%")
   expr = col("statecode").in_([0, 1])
   expr = col("parentaccountid").is_null()
col(name: str) -> ColumnProxy

参数

名称 说明
name
必需

列逻辑名称(不区分大小写,将小写)。

返回

类型 说明

ColumnProxy绑定到列。

例外

类型 说明

如果 name 为空。

raw

逐字 OData 筛选器表达式(未更改传递)。

此函数 弃用 , 它是没有类型替换的 OData 转义阴影。

示例:


   raw("Microsoft.Dynamics.CRM.Today(PropertyName='createdon')")
raw(filter_string: str) -> FilterExpression

参数

名称 说明
filter_string
必需

原始 OData 筛选器字符串。

返回

类型 说明

FilterExpression