models パッケージ

Dataverse SDK のデータ モデルと型定義。

Dataverse エンティティのデータクラスとヘルパーを提供します。

  • QueryBuilder: Fluent クエリ ビルダー。
  • filters: colrawを介して構成可能な OData フィルター式。
  • QueryResult: Iterable 結果ラッパー。
  • Record: Dataverse エンティティ レコード。
  • UpsertItem: 操作項目をアップサートします。
  • FetchXmlQuery: FetchXML クエリ オブジェクト。
  • DataverseModel: 型指定されたモデル プロトコル。

モジュール

batch

バッチ操作のパブリックな結果の種類。

fetchxml_query

FetchXmlQuery — QueryOperations.fetchxml() によって返される不活性クエリ オブジェクト。

filters

Dataverse SDK の構成可能な OData フィルター式。

複雑なフィルター条件を作成するためのPython演算子オーバーロード (&|~) を使用して OData $filter 文字列にコンパイルする式ツリーを提供します。

例::

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 のデータ モデルをアップサートします。

クラス

AlternateKeyInfo

Dataverse テーブルの代替キー メタデータ。

BatchItemResponse

バッチ要求内の 1 つの操作からの応答。

応答は送信順序で返されます。 変更セットに追加された操作の場合、応答はその順序で変更セットの位置に表示されます。

例:


   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 操作ごとに 1 つの BatchItemResponse が含まれています。 複数の HTTP 要求 (3 つの列を含む add_columns など) に拡張される操作は、3 つのエントリを提供します。

例:


   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によって返されます。 演算子のオーバーロードとメソッドは、QueryBuilder.where()に渡すことができるFilterExpressionインスタンスを生成します。

例:


   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()に渡す構造プロトコル。

このプロトコルを任意のエンティティ クラス (dataclass、Pydantic モデル、手動ロール) に実装して、テーブル名を指定したり、手動で dict に変換したりせずに 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)

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

不活性 FetchXML クエリ オブジェクト。 executeまたはexecute_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値:

  • "None": 属性は省略可能です

  • "Recommended": 属性をお勧めします

  • "ApplicationRequired": 属性は必須です

ManyToManyRelationshipMetadata

多対多エンティティリレーションシップのメタデータ。

OneToManyRelationshipMetadata

一対多エンティティリレーションシップのメタデータ。

QueryBuilder

同期クライアントに対して OData クエリを構築および実行するための Fluent インターフェイス。

構成可能なフィルター式を使用して複雑なクエリを構築するためのメソッド チェーンを提供します。 スタンドアロン ( build()経由) またはクライアントにバインド ( execute 経由) で使用できます。

QueryParams

QueryBuilder.build()によって返される型指定されたディクショナリ。

ビルド結果を手動で client.records.list() に渡すときに IDE オートコンプリートを提供します。

QueryResult

Record オブジェクトの一覧を囲む Iterable ラッパー。

execute (フラット モード) およびlistによって返されます。

下位互換性: for r in result は変更なしで動作し続けます。

RelationshipInfo

リレーションシップ メタデータの型指定された戻りモデル。

create_one_to_many_relationshipcreate_many_to_many_relationshipget_relationship、およびcreate_lookup_fieldによって返されます。

例:


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

dict に似た下位互換性を持つテーブル メタデータ。

未加工の dict API に対して記述されたコードとの下位互換性のために、新しい属性アクセス (info.schema_name) と従来の dict キー アクセス (info["table_schema_name"]) の両方をサポートします。

例:


   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 ではなく代替キーによって識別される 1 つ以上のレコードをアップサートします。

例:


   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

Verbatim OData フィルター式 (変更せずに渡されます)。

この関数は非推奨 ではありません 。型指定された置換のない OData エスケープ ハッチです。

例:


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

パラメーター

名前 説明
filter_string
必須

未加工の OData フィルター文字列。

返品

説明

FilterExpression です。