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 查詢。

提供型別安全、可發現的介面,用於針對 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

定義關係操作的級聯行為。

每個參數的有效值:

  • 「級聯」:對所有相關紀錄執行操作

  • 「NoCascade」:不要對相關紀錄執行此操作

  • 「移除連結」:移除關係連結但保留紀錄

  • 「限制」:若存在相關紀錄,則阻止該操作

ColumnInfo

來自 Dataverse 資料表定義的欄位元資料。

ColumnProxy

Fluent 代理,用來從欄位名稱建立 OData 濾波器表達式。

回覆者 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.create()records.update()

將此協定實作於任何實體類別(資料類別、Pydantic 模型、手動捲入)上,使其能直接傳遞給 CRUD 操作,無需指定資料表名稱或手動轉換成 dict。

必備類別變數:

  • __entity_logical_name__— 資料宇宙邏輯實體名稱(例如 ) "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)

Note

直接派遣(client.records.create(entity)但無資料表名稱

或 dict)尚未支援,未來版本將加入。

ExpandOption

導航物業的結構化選項 $expand

允許依照 OData $expand 語法,指定巢狀$select$filter$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 查詢物件。 在被呼叫之前executeexecute_pages,不會有 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價值觀:

  • 「無」:屬性為可選

  • 「推薦」:該屬性為推薦

  • 「ApplicationRequired」:屬性為必需

ManyToManyRelationshipMetadata

多對多實體關係的元資料。

OneToManyRelationshipMetadata

用於一對多實體關係的元資料。

QueryBuilder

流暢介面,用於建立並執行 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 操作,透過其備用鍵鎖定記錄。

與此搭配 upsert 使用,向上發布一個或多個以替代鍵而非主要 GUID 識別的紀錄。

範例:


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

函式

col

回傳 a 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

參數

名稱 Description
name
必要

欄位邏輯名稱(不區分大小寫,將使用小寫)。

傳回

類型 Description

ColumnProxy 在柱子上。

例外狀況

類型 Description

如果 name 是空的。

raw

逐字 OData 濾波式(未更改通過)。

這個函式 並未 被棄用——它是 OData 的逃逸出口,沒有打型替換。

範例:


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

參數

名稱 Description
filter_string
必要

原始的OData濾音弦。

傳回

類型 Description

A FilterExpression