models Pakiet

Modele danych i definicje typów dla zestawu SDK usługi Dataverse.

Udostępnia klasy danych i pomocników dla jednostek usługi Dataverse:

Moduły

batch

Publiczne typy wyników dla operacji wsadowych.

fetchxml_query

FetchXmlQuery — obiekt zapytania inert zwracany przez element QueryOperations.fetchxml().

filters

Composable OData filter expressions for the Dataverse SDK (Komposable OData filter expressions for the Dataverse SDK).

Zawiera drzewo wyrażeń, które kompiluje do ciągów OData $filter z przeciążeniami operatora Python (&, |, ~) do tworzenia złożonych warunków filtrowania.

Przykład::

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

Modele etykiet dla metadanych usługi Dataverse.

protocol

Protokół strukturalny DataverseModel na potrzeby integracji typizowanej jednostki.

query_builder

Konstruktor zapytań Fluent do konstruowania zapytań OData.

Zapewnia bezpieczny dla typu interfejs umożliwiający odnajdywanie złożonych zapytań względem tabel usługi Dataverse z łańcuchem metod.

Przykład::

# 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

Rejestruj modele danych usługi Dataverse.

relationship

Modele relacji dla usługi Dataverse (dane wejściowe i wyjściowe).

table_info

Modele metadanych tabel i kolumn dla usługi Dataverse.

upsert

Modele danych upsert dla zestawu Dataverse SDK.

Klasy

AlternateKeyInfo

Alternatywne metadane klucza dla tabeli Dataverse.

BatchItemResponse

Odpowiedź z jednej operacji w żądaniu wsadowym.

Odpowiedzi są zwracane w kolejności przesyłania. W przypadku operacji dodanych do zestawu zmian odpowiedzi są wyświetlane w pozycji zestawu zmian w tej kolejności.

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

Wynik wykonania żądania wsadowego.

Zawiera jedną na przesłaną BatchItemResponse operację HTTP. Operacje rozszerzające się na wiele żądań HTTP (np. add_columns z trzema kolumnami) współtworzyją trzy wpisy.

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

Definiuje zachowanie kaskadowe dla operacji relacji.

Prawidłowe wartości dla każdego parametru:

  • "Cascade": Wykonaj operację na wszystkich powiązanych rekordach

  • "NoCascade": Nie wykonuj operacji na powiązanych rekordach

  • "RemoveLink": Usuń link relacji, ale zachowaj rekordy

  • "Ogranicz": Zapobiegaj operacji, jeśli istnieją powiązane rekordy

ColumnInfo

Metadane kolumn z definicji tabeli Dataverse.

ColumnProxy

Płynny serwer proxy do tworzenia wyrażeń filtrów OData z nazwy kolumny.

Zwrócone przez .col Przeciążenia operatorów i metody generują FilterExpression wystąpienia, które można przekazać do QueryBuilder.where()elementu .

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

Protokół strukturalny umożliwiający przekazywanie typowanych wystąpień jednostek do records.create() i records.update().

Zaimplementuj ten protokół na dowolnej klasie jednostek (dataclass, modelu Pydantic, ręcznie rzutowanym), aby umożliwić przekazywanie go bezpośrednio do operacji CRUD bez określania nazwy tabeli lub ręcznego konwertowania na dykt.

Wymagane zmienne klasy:

  • __entity_logical_name__ — Nazwa jednostki logicznej usługi Dataverse (np. "account")

  • __entity_set_name__ — nazwa zestawu jednostek OData (np. "accounts")

Wymagane metody wystąpienia:

  • to_dict() — zwraca ładunek rekordu jako dict

  • from_dict(data) — klasamethod do odtworzenia z odpowiedzi 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

Wysyłanie bezpośrednie (client.records.create(jednostka) bez nazwy tabeli

lub dict) nie jest jeszcze obsługiwany i zostanie dodany w przyszłej wersji.

ExpandOption

Opcje ustrukturyzowane właściwości $expand nawigacji.

Umożliwia określenie zagnieżdżonych $selectopcji , $filter, $orderbyi $top dla rozszerzenia pojedynczej właściwości nawigacji zgodnie ze składnią OData $expand .

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

Obiekt zapytania Inert FetchXML. Żądanie HTTP nie jest wykonywane do momentu execute wywołania lub execute_pages wywołania.

Uzyskane za pośrednictwem .client.query.fetchxml(xml)

FilterExpression

Klasa bazowa do komponowalnych wyrażeń filtru OData.

Obsługuje przeciążenia operatora Python dla kompozycji logicznej:

  • expr1 & expr2 Produkuje (expr1 and expr2)

  • expr1 | expr2 Produkuje (expr1 or expr2)

  • ~expr Produkuje not (expr)

Label

Reprezentuje etykietę, która może mieć wiele zlokalizowanych wersji.

LocalizedLabel

Reprezentuje zlokalizowaną etykietę z kodem języka.

LookupAttributeMetadata

Metadane atrybutu odnośnika.

Prawidłowe wartości required_level:

  • "None": Atrybut jest opcjonalny

  • "Zalecane": Zalecany jest atrybut

  • "ApplicationRequired": Wymagany jest atrybut

ManyToManyRelationshipMetadata

Metadane relacji jednostki wiele do wielu.

OneToManyRelationshipMetadata

Metadane relacji jednostki jeden do wielu.

QueryBuilder

Interfejs Fluent do kompilowania i wykonywania zapytań OData względem klienta synchronizacji.

Zapewnia tworzenie złożonych zapytań za pomocą wyrażeń filtru, które można tworzyć. Można używać autonomicznego (za pośrednictwem build()) lub powiązanego z klientem (za pośrednictwem metody execute).

QueryParams

Wpisany słownik zwracany przez QueryBuilder.build().

Udostępnia autouzupełnianie środowiska IDE podczas przekazywania wyników kompilacji do ręcznego client.records.list() .

QueryResult

Iterowalne otoki wokół listy Record obiektów.

Zwracane przez execute (tryb płaski) i list.

Zgodność z poprzednimi wersjami: for r in result nadal działa bez zmian.

RelationshipInfo

Typowany model zwracany dla metadanych relacji.

Zwracane przez create_one_to_many_relationship, , create_many_to_many_relationshipget_relationship, i 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

Metadane tabeli ze zgodnością wsteczną przypominającą dyktowanie.

Obsługuje zarówno nowy dostęp do atrybutów (info.schema_name) jak i starszy dostęp do klucza dict-key (info["table_schema_name"]) w celu zapewnienia zgodności z poprzednim kodem napisanym względem nieprzetworzonego interfejsu API dict.

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

Reprezentuje pojedynczą operację upsert przeznaczoną dla rekordu według jego klucza alternatywnego.

upsert Służy do upsert co najmniej jeden rekord zidentyfikowany przez klucze alternatywne, a nie podstawowe identyfikatory GUID.

Example:


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

Funkcje

col

Zwraca wartość dla ColumnProxy wyrażeń filtru kompilacji.

Jest to preferowany idiom ga do konstruowania wyrażeń filtru:


   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

Parametry

Nazwa Opis
name
Wymagane

Nazwa logiczna kolumny (bez uwzględniania wielkości liter będzie zawierać małe litery).

Zwraca

Typ Opis

Powiązanie ColumnProxy z kolumną.

Wyjątki

Typ Opis

Jeśli name wartość jest pusta.

raw

Wyrażenie filtru OData verbatim (przekazywane bez zmian).

Ta funkcja nie jest przestarzała — jest to kreska ucieczki OData bez zamiany typu.

Example:


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

Parametry

Nazwa Opis
filter_string
Wymagane

Nieprzetworzone ciągi filtru OData.

Zwraca

Typ Opis

Element FilterExpression.