models Paket

Model data dan definisi jenis untuk Dataverse SDK.

Menyediakan kelas data dan pembantu untuk entitas Dataverse:

Modul

batch

Jenis hasil publik untuk operasi batch.

fetchxml_query

FetchXmlQuery — objek kueri inert yang dikembalikan oleh QueryOperations.fetchxml().

filters

Ekspresi filter OData yang dapat disusun untuk SDK Dataverse.

Menyediakan pohon ekspresi yang dikompilasi ke string OData $filter, dengan kelebihan beban operator Python (&, |, ~) untuk menyusun kondisi filter yang kompleks.

Contoh::

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

Model label untuk metadata Dataverse.

protocol

Protokol struktural DataverseModel untuk integrasi entitas yang ditik.

query_builder

Penyusun kueri yang fasih untuk membuat kueri OData.

Menyediakan antarmuka jenis yang aman dan dapat ditemukan untuk membangun kueri kompleks terhadap tabel Dataverse dengan penautan metode.

Contoh::

# 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

Rekam model untuk data Dataverse.

relationship

Model hubungan untuk Dataverse (input dan output).

table_info

Model metadata tabel dan kolom untuk Dataverse.

upsert

Upsert model data untuk Dataverse SDK.

Kelas

AlternateKeyInfo

Metadata kunci alternatif untuk tabel Dataverse.

BatchItemResponse

Respons dari satu operasi dalam permintaan batch.

Respons dikembalikan dalam urutan pengiriman. Untuk operasi yang ditambahkan ke set perubahan, respons muncul di posisi changeset dalam urutan tersebut.

Example:


   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

Hasil menjalankan permintaan batch.

Berisi satu BatchItemResponse per operasi HTTP yang dikirimkan. Operasi yang meluas ke beberapa permintaan HTTP (misalnya add_columns dengan tiga kolom) berkontribusi tiga entri.

Example:


   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

Menentukan perilaku kaskade untuk operasi hubungan.

Nilai yang valid untuk setiap parameter:

  • "Cascade": Lakukan operasi pada semua rekaman terkait

  • "NoCascade": Jangan lakukan operasi pada rekaman terkait

  • "RemoveLink": Hapus tautan hubungan tetapi pertahankan rekaman

  • "Batasi": Mencegah operasi jika ada rekaman terkait

ColumnInfo

Metadata kolom dari definisi tabel Dataverse.

ColumnProxy

Proksi fasih untuk membangun ekspresi filter OData dari nama kolom.

Dikembalikan oleh col. Operator kelebihan beban dan metode menghasilkan FilterExpression instans yang dapat diteruskan ke QueryBuilder.where().

Example:


   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

Protokol Struktural yang memungkinkan instans entitas yang ditik untuk diteruskan ke records.create() dan records.update().

Terapkan Protokol ini pada kelas entitas apa pun (kelas data, model Pydantic, hand-rolled) untuk memungkinkannya diteruskan langsung ke operasi CRUD tanpa menentukan nama tabel atau mengonversi ke dict secara manual.

Variabel kelas yang diperlukan:

  • __entity_logical_name__ — Nama entitas logis dataverse (misalnya "account")

  • __entity_set_name__ — Nama set entitas OData (misalnya "accounts")

Metode instans yang diperlukan:

  • to_dict() — mengembalikan payload rekaman sebagai dict

  • from_dict(data) — classmethod untuk rekonstruksi dari respons dict

Example:


   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

Pengiriman langsung (client.records.create(entity) tanpa nama tabel

atau dict) belum didukung dan akan ditambahkan dalam rilis mendatang.

ExpandOption

Opsi terstruktur untuk $expand properti navigasi.

Memungkinkan menentukan opsi berlapis , , $orderby, dan $top untuk ekspansi properti navigasi tunggal, mengikuti sintaks OData$expand. $filter$select

Example:


   # 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

Objek kueri Inert FetchXML. Tidak ada permintaan HTTP yang dibuat sampai execute atau execute_pages dipanggil.

Diperoleh melalui client.query.fetchxml(xml).

FilterExpression

Kelas dasar untuk ekspresi filter OData yang dapat disusun.

Mendukung kelebihan operator Python untuk komposisi logis:

  • expr1 & expr2 Menghasilkan (expr1 and expr2)

  • expr1 | expr2 Menghasilkan (expr1 or expr2)

  • ~expr Menghasilkan not (expr)

Label

Mewakili label yang dapat memiliki beberapa versi yang dilokalkan.

LocalizedLabel

Mewakili label yang dilokalkan dengan kode bahasa.

LookupAttributeMetadata

Metadata untuk atribut pencarian.

Nilai required_level yang valid:

  • "None": Atribut bersifat opsional

  • "Disarankan": Atribut disarankan

  • "ApplicationRequired": Atribut diperlukan

ManyToManyRelationshipMetadata

Metadata untuk hubungan entitas banyak ke banyak.

OneToManyRelationshipMetadata

Metadata untuk hubungan entitas satu ke banyak.

QueryBuilder

Antarmuka yang fasih untuk membangun dan menjalankan kueri OData terhadap klien sinkronisasi.

Menyediakan penautan metode untuk membuat kueri kompleks dengan ekspresi filter yang dapat disusun. Dapat digunakan mandiri (melalui build()) atau terikat ke klien (melalui execute).

QueryParams

Kamus yang dititik dikembalikan oleh QueryBuilder.build().

Menyediakan pelengkapan otomatis IDE saat meneruskan hasil build ke client.records.list() secara manual.

QueryResult

Pembungkus yang dapat diulang di sekitar daftar Record objek.

Dikembalikan oleh execute (mode datar) dan list.

Kompatibel mundur: for r in result terus berfungsi tanpa perubahan.

RelationshipInfo

Model pengembalian yang di ketik untuk metadata hubungan.

Dikembalikan oleh create_one_to_many_relationship, create_many_to_many_relationship, get_relationship, dan create_lookup_field.

Example:


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

Metadata tabel dengan kompatibilitas mundur seperti dict.

Mendukung akses atribut baru (info.schema_name) dan akses dict-key warisan (info["table_schema_name"]) untuk kompatibilitas mundur dengan kode yang ditulis terhadap API dict mentah.

Example:


   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

Mewakili operasi upsert tunggal yang menargetkan rekaman dengan kunci alternatifnya.

Digunakan dengan upsert untuk meningkatkan satu atau beberapa rekaman yang diidentifikasi oleh kunci alternatif daripada GUID utama.

Example:


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

Fungsi

col

ColumnProxy Mengembalikan untuk membangun ekspresi filter.

Ini adalah idiom GA pilihan untuk membuat ekspresi filter:


   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

Parameter

Nama Deskripsi
name
Diperlukan

Nama logis kolom (tidak peka huruf besar/kecil, akan diturunkan skalanya).

Mengembalikan

Jenis Deskripsi

Terikat ColumnProxy ke kolom.

Pengecualian

Jenis Deskripsi

Jika name kosong.

raw

Ekspresi filter OData Verbatim (diteruskan melalui tidak berubah).

Fungsi ini tidak digunakan lagi — ini adalah palka escape OData tanpa penggantian yang dititik.

Example:


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

Parameter

Nama Deskripsi
filter_string
Diperlukan

String filter OData mentah.

Mengembalikan

Jenis Deskripsi

FilterExpression.