[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-microsoft-dataverse-sdk-use":3,"mdc--22hdr6-key":36,"related-repo-microsoft-dataverse-sdk-use":5676,"related-org-microsoft-dataverse-sdk-use":5700},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":26,"repoUrl":27,"updatedAt":28,"license":29,"forks":30,"topics":31,"repo":32,"sourceUrl":34,"mdContent":35},"dataverse-sdk-use","use the Dataverse Client Python SDK","Guidance for using the PowerPlatform Dataverse Client Python SDK. Use when calling the SDK like creating CRUD operations, SQL queries, table metadata management, relationships, and upload files.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"microsoft","Microsoft","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fmicrosoft.png",[12,14,17,20,23],{"name":9,"slug":8,"type":13},"tag",{"name":15,"slug":16,"type":13},"Python","python",{"name":18,"slug":19,"type":13},"API Development","api-development",{"name":21,"slug":22,"type":13},"Dataverse","dataverse",{"name":24,"slug":25,"type":13},"SDK","sdk",56,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FPowerPlatform-DataverseClient-Python","2026-04-06T18:36:18.060007",null,23,[],{"repoUrl":27,"stars":26,"forks":30,"topics":33,"description":29},[],"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002FPowerPlatform-DataverseClient-Python\u002Ftree\u002FHEAD\u002Fsrc\u002FPowerPlatform\u002FDataverse\u002Fclaude_skill\u002Fdataverse-sdk-use","---\nname: dataverse-sdk-use\ndescription: Guidance for using the PowerPlatform Dataverse Client Python SDK. Use when calling the SDK like creating CRUD operations, SQL queries, table metadata management, relationships, and upload files.\n---\n\n# PowerPlatform Dataverse SDK Guide\n\n## Overview\n\nUse the PowerPlatform Dataverse Client Python SDK to interact with Microsoft Dataverse.\n\n## Key Concepts\n\n### Schema Names vs Display Names\n- Standard tables: lowercase (e.g., `\"account\"`, `\"contact\"`)\n- Custom tables: include customization prefix (e.g., `\"new_Product\"`, `\"cr123_Invoice\"`)\n- Custom columns: include customization prefix (e.g., `\"new_Price\"`, `\"cr123_Status\"`)\n- ALWAYS use **schema names** (logical names), NOT display names\n\n### Operation Namespaces\n- `client.records` -- CRUD and OData queries\n- `client.query` -- query and search operations\n- `client.tables` -- table metadata, columns, and relationships\n- `client.files` -- file upload operations\n- `client.batch` -- batch multiple operations into a single HTTP request\n\n### Bulk Operations\nThe SDK supports Dataverse's native bulk operations: Pass lists to `create()`, `update()` for automatic bulk processing, for `delete()`, set `use_bulk_delete` when passing lists to use bulk operation\n\n### Paging\n- Control page size with `page_size` parameter on `records.list()`, `records.list_pages()`, or `QueryBuilder.page_size()`\n- Use `top` parameter to limit total records returned\n- **Preferred**: `client.query.builder(table)....execute_pages()` — composable `where(col(...))` filters, formatted values, expand with nested selects, full pagination control\n- Simple streaming shortcut: `records.list_pages(table, *, filter, select, top, orderby, expand, page_size, count, include_annotations)` — string-based OData filter only, yields one `QueryResult` per page\n- `execute(by_page=True\u002FFalse)` is **deprecated** and emits `UserWarning`; use `execute_pages()` instead\n- `QueryBuilder.to_dataframe()` is **deprecated**; use `.execute().to_dataframe()` instead\n\n### QueryResult\n- Returned by `records.list()`, `records.retrieve()`, `execute()`, and each page from `list_pages()` \u002F `execute_pages()`\n- Iterable: `for record in result` — each item is a `dict`-like `Record`\n- `.to_dataframe()` — convert to pandas DataFrame\n- `.first()` — return the first record or `None` (safe: returns `None` on empty result)\n- `result[n]` — index access returns a `Record`; `result[n:m]` returns a `QueryResult`\n- `len(result)` — number of records in this result\u002Fpage\n\n### DataFrame Support\n- DataFrame operations are accessed via the `client.dataframe` namespace: `client.dataframe.create()`, `client.dataframe.update()`, `client.dataframe.delete()` — `client.dataframe.get()` is deprecated; use `client.query.builder(table).where(...).execute().to_dataframe()` instead\n\n## Common Operations\n\n### Import\n```python\nfrom azure.identity import (\n    InteractiveBrowserCredential,\n    ClientSecretCredential,\n    CertificateCredential,\n    AzureCliCredential\n)\nfrom PowerPlatform.Dataverse.client import DataverseClient\n```\n\n### Client Initialization\n```python\n# Development options\ncredential = InteractiveBrowserCredential()\ncredential = AzureCliCredential()\n\n# Production options\ncredential = ClientSecretCredential(tenant_id, client_id, client_secret)\ncredential = CertificateCredential(tenant_id, client_id, cert_path)\n\n# Create client with context manager (recommended -- enables HTTP connection pooling)\n# No trailing slash on URL!\nwith DataverseClient(\"https:\u002F\u002Fyourorg.crm.dynamics.com\", credential) as client:\n    ...  # all operations here\n# Session closed, caches cleared automatically\n\n# Or without context manager:\nclient = DataverseClient(\"https:\u002F\u002Fyourorg.crm.dynamics.com\", credential)\n```\n\n### CRUD Operations\n\n#### Create Records\n```python\n# Single record\naccount_id = client.records.create(\"account\", {\"name\": \"Contoso Ltd\", \"telephone1\": \"555-0100\"})\n\n# Bulk create (uses CreateMultiple API automatically)\ncontacts = [\n    {\"firstname\": \"John\", \"lastname\": \"Doe\"},\n    {\"firstname\": \"Jane\", \"lastname\": \"Smith\"}\n]\ncontact_ids = client.records.create(\"contact\", contacts)\n```\n\n#### Read Records\n```python\n# Get single record by ID\naccount = client.records.retrieve(\"account\", account_id, select=[\"name\", \"telephone1\"])\n\n# With expand — fetch a related record in the same HTTP request\naccount = client.records.retrieve(\n    \"account\", account_id,\n    select=[\"name\"],\n    expand=[\"primarycontactid\"],\n)\ncontact = (account.get(\"primarycontactid\") or {})\nprint(contact.get(\"fullname\"))\n\n# Simple shortcut — use records.list() only for basic filter + select without composable logic.\n# Follows @odata.nextLink automatically and loads all matching records into memory.\n# For filtering, sorting, expansion, or formatted values, prefer client.query.builder() (see below).\nresult = client.records.list(\"account\", filter=\"statecode eq 0\", select=[\"name\", \"accountid\"])\nfor record in result:\n    print(record[\"name\"])\n```\n\n#### Query Builder (Preferred for Filtering, Sorting, Expand, Formatted Values)\n\nUse `client.query.builder()` for any query that goes beyond simple filter + select. It provides composable `where(col(...))` expressions, formatted value support, nested expansion, and streaming — all with a fluent API.\n\n```python\nfrom PowerPlatform.Dataverse.models.filters import col\nfrom PowerPlatform.Dataverse.models.query_builder import ExpandOption\n\n# Basic query with composable filter and sort\nresult = (client.query.builder(\"account\")\n          .select(\"accountid\", \"name\", \"statecode\")\n          .where(col(\"statecode\") == 0)\n          .order_by(\"name asc\")\n          .execute())\nfor record in result:\n    print(record[\"name\"])\n\n# Composable filters — AND \u002F OR \u002F NOT using Python operators\nresult = (client.query.builder(\"contact\")\n          .select(\"fullname\", \"emailaddress1\")\n          .where((col(\"statecode\") == 0) & (col(\"emailaddress1\").contains(\"@contoso.com\")))\n          .execute())\n\n# Formatted values — display labels for option sets, currency symbols, etc.\nresult = (client.query.builder(\"account\")\n          .select(\"accountid\", \"name\", \"industrycode\")\n          .where(col(\"statecode\") == 0)\n          .include_formatted_values()\n          .execute())\nfor record in result:\n    label = record.get(\"industrycode@OData.Community.Display.V1.FormattedValue\")\n    print(record[\"name\"], label)\n\n# Navigation property expansion with nested column select\nresult = (client.query.builder(\"account\")\n          .select(\"name\")\n          .expand(ExpandOption(\"primarycontactid\").select(\"fullname\", \"emailaddress1\"))\n          .where(col(\"statecode\") == 0)\n          .execute())\nfor record in result:\n    contact = record.get(\"primarycontactid\", {})\n    print(f\"{record['name']} - {contact.get('fullname', 'N\u002FA')}\")\n\n# Stream large result sets page-by-page (memory-efficient)\nfor page in (client.query.builder(\"account\")\n             .select(\"accountid\", \"name\")\n             .where(col(\"statecode\") == 0)\n             .order_by(\"name asc\")\n             .page_size(500)\n             .execute_pages()):\n    for record in page:\n        print(record[\"name\"])\n\n# Convert query results to a DataFrame\ndf = (client.query.builder(\"account\")\n      .select(\"accountid\", \"name\")\n      .where(col(\"statecode\") == 0)\n      .execute()\n      .to_dataframe())\n\n# Limit total results\nresult = client.query.builder(\"account\").select(\"name\").top(100).execute()\n\n# Simple streaming shortcut via records.list_pages() (string filter only, same params as records.list())\nfor page in client.records.list_pages(\"account\", filter=\"statecode eq 0\", select=[\"name\"], page_size=500):\n    for record in page:\n        print(record[\"name\"])\n```\n\n#### Create Records with Lookup Bindings (@odata.bind)\n```python\n# Set lookup fields using @odata.bind with PascalCase navigation property names\n# CORRECT: use the navigation property name (case-sensitive, must match $metadata)\nguid = client.records.create(\"new_ticket\", {\n    \"new_name\": \"TKT-001\",\n    \"new_CustomerId@odata.bind\": f\"\u002Fnew_customers({customer_id})\",\n    \"new_AgentId@odata.bind\": f\"\u002Fnew_agents({agent_id})\",\n})\n\n# WRONG: lowercase navigation property causes 400 error\n# \"new_customerid@odata.bind\" -> ODataException: undeclared property 'new_customerid'\n```\n\n#### Update Records\n```python\n# Single update\nclient.records.update(\"account\", account_id, {\"telephone1\": \"555-0200\"})\n\n# Bulk update (broadcast same change to multiple records)\nclient.records.update(\"account\", [id1, id2, id3], {\"industry\": \"Technology\"})\n```\n\n#### Upsert Records\nCreates or updates records identified by alternate keys. Single item -> PATCH; multiple items -> `UpsertMultiple` bulk action.\n> **Prerequisite**: The table must have an alternate key configured in Dataverse for the columns used in `alternate_key`. Without it, Dataverse will reject the request with a 400 error.\n```python\nfrom PowerPlatform.Dataverse.models import UpsertItem\n\n# Single upsert\nclient.records.upsert(\"account\", [\n    UpsertItem(\n        alternate_key={\"accountnumber\": \"ACC-001\"},\n        record={\"name\": \"Contoso Ltd\", \"telephone1\": \"555-0100\"},\n    )\n])\n\n# Bulk upsert (uses UpsertMultiple API automatically)\nclient.records.upsert(\"account\", [\n    UpsertItem(alternate_key={\"accountnumber\": \"ACC-001\"}, record={\"name\": \"Contoso Ltd\"}),\n    UpsertItem(alternate_key={\"accountnumber\": \"ACC-002\"}, record={\"name\": \"Fabrikam Inc\"}),\n])\n\n# Composite alternate key\nclient.records.upsert(\"account\", [\n    UpsertItem(\n        alternate_key={\"accountnumber\": \"ACC-001\", \"address1_postalcode\": \"98052\"},\n        record={\"name\": \"Contoso Ltd\"},\n    )\n])\n\n# Plain dict syntax (no import needed)\nclient.records.upsert(\"account\", [\n    {\"alternate_key\": {\"accountnumber\": \"ACC-001\"}, \"record\": {\"name\": \"Contoso Ltd\"}}\n])\n```\n\n#### Delete Records\n```python\n# Single delete\nclient.records.delete(\"account\", account_id)\n\n# Bulk delete (uses BulkDelete API)\nclient.records.delete(\"account\", [id1, id2, id3], use_bulk_delete=True)\n```\n\n### DataFrame Operations\n\nThe SDK provides DataFrame wrappers for all CRUD operations via the `client.dataframe` namespace, using pandas DataFrames and Series as input\u002Foutput.\n\n> **Note:** `client.dataframe.get()` is deprecated. Use `client.query.builder(table).select(...).where(...).execute().to_dataframe()` instead. `QueryBuilder.to_dataframe()` (without `.execute()`) is also deprecated — always call `.execute()` first.\n\n```python\nimport pandas as pd\n\n# Query records -- returns a single DataFrame (GA pattern: .execute().to_dataframe())\nfrom PowerPlatform.Dataverse.models.filters import col\ndf = client.query.builder(\"account\").where(col(\"statecode\") == 0).select(\"name\").execute().to_dataframe()\nprint(f\"Got {len(df)} rows\")\n\n# Limit results with top\ndf = client.query.builder(\"account\").select(\"name\").top(100).execute().to_dataframe()\n\n# Via records.list() (simpler for basic queries)\ndf = client.records.list(\"account\", filter=\"statecode eq 0\", select=[\"name\"]).to_dataframe()\n\n# Create records from a DataFrame (returns a Series of GUIDs)\nnew_accounts = pd.DataFrame([\n    {\"name\": \"Contoso\", \"telephone1\": \"555-0100\"},\n    {\"name\": \"Fabrikam\", \"telephone1\": \"555-0200\"},\n])\nnew_accounts[\"accountid\"] = client.dataframe.create(\"account\", new_accounts)\n\n# Update records from a DataFrame (id_column identifies the GUID column)\nnew_accounts[\"telephone1\"] = [\"555-0199\", \"555-0299\"]\nclient.dataframe.update(\"account\", new_accounts, id_column=\"accountid\")\n\n# Clear a field by setting clear_nulls=True (by default, NaN\u002FNone fields are skipped)\ndf = pd.DataFrame([{\"accountid\": \"guid-1\", \"websiteurl\": None}])\nclient.dataframe.update(\"account\", df, id_column=\"accountid\", clear_nulls=True)\n\n# Delete records by passing a Series of GUIDs\nclient.dataframe.delete(\"account\", new_accounts[\"accountid\"])\n```\n\n### SQL Queries\n\nSQL queries are **read-only** and support limited SQL syntax. A single SELECT statement with optional WHERE, TOP (integer literal), ORDER BY (column names only), and a simple table alias after FROM is supported. But JOIN and subqueries may not be. Refer to the Dataverse documentation for the current feature set.\n\n```python\nresults = client.query.sql(\n    \"SELECT TOP 10 accountid, name FROM account WHERE statecode = 0\"\n)\nfor record in results:\n    print(record[\"name\"])\n```\n\n### FetchXML Queries\n\n`client.query.fetchxml(xml)` returns an inert `FetchXmlQuery` object — **no HTTP request is made** until `.execute()` or `.execute_pages()` is called.\n\n```python\nxml = \"\"\"\n\u003Cfetch top=\"50\">\n  \u003Centity name=\"account\">\n    \u003Cattribute name=\"accountid\" \u002F>\n    \u003Cattribute name=\"name\" \u002F>\n    \u003Cfilter>\n      \u003Ccondition attribute=\"statecode\" operator=\"eq\" value=\"0\" \u002F>\n    \u003C\u002Ffilter>\n  \u003C\u002Fentity>\n\u003C\u002Ffetch>\n\"\"\"\n\n# Load all results into memory (simple, small-to-medium sets)\nquery = client.query.fetchxml(xml)\nresult = query.execute()              # returns QueryResult — all pages fetched upfront\nfor record in result:\n    print(record[\"name\"])\n\n# Stream page-by-page (large sets or early exit)\nfor page in query.execute_pages():    # yields one QueryResult per HTTP page\n    process(page.to_dataframe())\n```\n\n### Table Management\n\n#### Create Custom Tables\n```python\n# Create table with columns (include customization prefix!)\ntable_info = client.tables.create(\n    \"new_Product\",\n    {\n        \"new_Code\": \"string\",\n        \"new_Price\": \"decimal\",\n        \"new_Active\": \"bool\",\n        \"new_Quantity\": \"int\",\n    },\n)\n\n# With solution assignment and custom primary column\ntable_info = client.tables.create(\n    \"new_Product\",\n    {\"new_Code\": \"string\", \"new_Price\": \"decimal\"},\n    solution=\"MyPublisher\",\n    primary_column=\"new_ProductCode\",\n)\n```\n\n#### Supported Column Types\nTypes on the same line map to the same exact format under the hood\n- `\"string\"` or `\"text\"` - Single line of text\n- `\"memo\"` or `\"multiline\"` - Multiple lines of text (4000 character default)\n- `\"int\"` or `\"integer\"` - Whole number\n- `\"decimal\"` or `\"money\"` - Decimal number\n- `\"float\"` or `\"double\"` - Floating point number\n- `\"bool\"` or `\"boolean\"` - Yes\u002FNo\n- `\"datetime\"` or `\"date\"` - Date\n- `\"file\"` - File column\n- Enum subclass - Local option set (picklist)\n\n#### Manage Columns\n```python\n# Add columns to existing table (must include customization prefix!)\nclient.tables.add_columns(\"new_Product\", {\n    \"new_Category\": \"string\",\n    \"new_InStock\": \"bool\",\n})\n\n# Remove columns\nclient.tables.remove_columns(\"new_Product\", [\"new_Category\"])\n```\n\n#### Inspect Tables\n```python\n# Get single table information\ntable_info = client.tables.get(\"new_Product\")\nprint(f\"Logical name: {table_info['table_logical_name']}\")\nprint(f\"Entity set: {table_info['entity_set_name']}\")\n\n# List all tables\ntables = client.tables.list()\nfor table in tables:\n    print(table)\n```\n\n#### Delete Tables\n```python\nclient.tables.delete(\"new_Product\")\n```\n\n### Relationship Management\n\n#### Create One-to-Many Relationship\n```python\nfrom PowerPlatform.Dataverse.models import (\n    CascadeConfiguration,\n    Label,\n    LocalizedLabel,\n    LookupAttributeMetadata,\n    OneToManyRelationshipMetadata,\n)\nfrom PowerPlatform.Dataverse.common.constants import CASCADE_BEHAVIOR_REMOVE_LINK\n\nlookup = LookupAttributeMetadata(\n    schema_name=\"new_DepartmentId\",\n    display_name=Label(\n        localized_labels=[LocalizedLabel(label=\"Department\", language_code=1033)]\n    ),\n)\n\nrelationship = OneToManyRelationshipMetadata(\n    schema_name=\"new_Department_Employee\",\n    referenced_entity=\"new_department\",\n    referencing_entity=\"new_employee\",\n    referenced_attribute=\"new_departmentid\",\n    cascade_configuration=CascadeConfiguration(\n        delete=CASCADE_BEHAVIOR_REMOVE_LINK,\n    ),\n)\n\nresult = client.tables.create_one_to_many_relationship(lookup, relationship)\nprint(f\"Created lookup field: {result.lookup_schema_name}\")\n```\n\n#### Create Many-to-Many Relationship\n```python\nfrom PowerPlatform.Dataverse.models import ManyToManyRelationshipMetadata\n\nrelationship = ManyToManyRelationshipMetadata(\n    schema_name=\"new_employee_project\",\n    entity1_logical_name=\"new_employee\",\n    entity2_logical_name=\"new_project\",\n)\n\nresult = client.tables.create_many_to_many_relationship(relationship)\nprint(f\"Created: {result.relationship_schema_name}\")\n```\n\n#### Convenience Method for Lookup Fields\n```python\nresult = client.tables.create_lookup_field(\n    referencing_table=\"new_order\",\n    lookup_field_name=\"new_AccountId\",\n    referenced_table=\"account\",\n    display_name=\"Account\",\n    required=True,\n)\n```\n\n#### Query and Delete Relationships\n```python\n# Get relationship metadata\nrel = client.tables.get_relationship(\"new_Department_Employee\")\nif rel:\n    print(f\"Found: {rel.relationship_schema_name}\")\n\n# Delete relationship\nclient.tables.delete_relationship(result.relationship_id)\n```\n\n### File Operations\n\n```python\n# Upload file to a file column\nclient.files.upload(\n    table=\"account\",\n    record_id=account_id,\n    file_column=\"new_Document\",  # If the file column doesn't exist, it will be created automatically\n    path=\"\u002Fpath\u002Fto\u002Fdocument.pdf\",\n)\n```\n\n### Batch Operations\n\nUse `client.batch` to send multiple operations in one HTTP request. All batch methods return `None`; results arrive via `BatchResult` after `execute()`.\n\n```python\n# Build a batch request\nbatch = client.batch.new()\nbatch.records.create(\"account\", {\"name\": \"Contoso\"})\nbatch.records.update(\"account\", account_id, {\"telephone1\": \"555-0100\"})\nbatch.records.retrieve(\"account\", account_id, select=[\"name\"], expand=[\"primarycontactid\"], include_annotations=\"OData.Community.Display.V1.FormattedValue\")  # single record with expand\nbatch.records.list(\"account\", filter=\"statecode eq 0\", select=[\"name\"], orderby=[\"name asc\"], top=50, page_size=25, count=True)  # multi-record, single page\nbatch.query.sql(\"SELECT TOP 5 name FROM account\")\n\nresult = batch.execute()\nfor item in result.responses:\n    if item.is_success:\n        print(f\"[OK] {item.status_code} entity_id={item.entity_id}\")\n        if item.data:\n            # GET responses populate item.data with the parsed JSON record\n            print(item.data.get(\"name\"))\n    else:\n        print(f\"[ERR] {item.status_code}: {item.error_message}\")\n\n# Transactional changeset (all succeed or roll back)\nwith batch.changeset() as cs:\n    ref = cs.records.create(\"contact\", {\"firstname\": \"Alice\"})\n    cs.records.update(\"account\", account_id, {\"primarycontactid@odata.bind\": ref})\n\n# Continue on error\nresult = batch.execute(continue_on_error=True)\nprint(f\"Succeeded: {len(result.succeeded)}, Failed: {len(result.failed)}\")\n```\n\n**BatchResult properties:**\n- `result.responses` -- list of `BatchItemResponse` in submission order\n- `result.succeeded` -- responses with 2xx status codes\n- `result.failed` -- responses with non-2xx status codes\n- `result.has_errors` -- True if any response failed\n- `result.entity_ids` -- GUIDs from OData-EntityId headers (creates and updates)\n\n**Batch limitations:**\n- Maximum 1000 operations per batch\n- `batch.records.get()` is deprecated; use `batch.records.retrieve()` for single records\n- `batch.records.list()` returns a single page (no pagination); use `top` to bound results\n- `flush_cache()` is not supported in batch\n\n## Error Handling\n\nThe SDK provides structured exceptions with detailed error information:\n\n```python\nfrom PowerPlatform.Dataverse.core.errors import (\n    DataverseError,\n    HttpError,\n    MetadataError,\n    SQLParseError,\n    ValidationError,\n)\nfrom PowerPlatform.Dataverse.client import DataverseClient\n\ntry:\n    client.records.retrieve(\"account\", \"invalid-id\")\nexcept HttpError as e:\n    print(f\"HTTP {e.status_code}: {e.message}\")\n    print(f\"Error code: {e.code}\")\n    print(f\"Subcode: {e.subcode}\")\n    if e.is_transient:\n        print(\"This error may be retryable\")\nexcept ValidationError as e:\n    print(f\"Validation error: {e.message}\")\n```\n\n### Common Error Patterns\n\n**Authentication failures:**\n- Check environment URL format (no trailing slash)\n- Verify credentials have Dataverse permissions\n- Ensure app registration is properly configured\n\n**404 Not Found:**\n- Verify table schema name is correct (lowercase for standard tables)\n- Check record ID exists\n- Ensure using schema names, not display names\n- Cache issue could happen, so retry might help, especially for metadata creation\n\n**400 Bad Request:**\n- Check filter\u002Fexpand parameters use correct case\n- Verify column names exist and are spelled correctly\n- Ensure custom columns include customization prefix\n- For `@odata.bind` errors (\"undeclared property\"): the navigation property name before `@odata.bind` is case-sensitive and must match the entity's `$metadata` exactly (e.g., `new_CustomerId@odata.bind` for custom lookups, `parentaccountid@odata.bind` for system lookups). The SDK preserves `@odata.bind` key casing.\n\n## Best Practices\n\n### Performance Optimization\n\n1. **Prefer `client.query.builder()` for any non-trivial query** — use the builder for filtering, sorting, expansion, or formatted values; `records.list()` is a convenience shortcut for simple filter+select only\n2. **Use bulk operations** - Pass lists to create\u002Fupdate\u002Fdelete for automatic optimization\n3. **Specify select fields** - Limit returned columns to reduce payload size\n4. **Control page size** - Use `top` and `page_size` parameters appropriately; use `execute_pages()` for large sets\n5. **Reuse client instances** - Don't create new clients for each operation\n6. **Use production credentials** - ClientSecretCredential or CertificateCredential for unattended operations\n7. **Error handling** - Implement retry logic for transient errors (`e.is_transient`)\n8. **Always include customization prefix** for custom tables\u002Fcolumns\n9. **Use lowercase for column names, match `$metadata` for navigation properties** - Column names in `$select`\u002F`$filter`\u002Frecord payloads use lowercase LogicalNames. Navigation properties in `$expand` and `@odata.bind` keys are case-sensitive and must match the entity's `$metadata` (PascalCase for custom lookups like `new_CustomerId`, lowercase for system lookups like `parentaccountid`)\n10. **Test in non-production environments** first\n11. **Use named constants** - Import cascade behavior constants from `PowerPlatform.Dataverse.common.constants`\n\n## Async Client\n\nThe SDK ships a full async client, `AsyncDataverseClient`, under `PowerPlatform.Dataverse.aio`. Requires the `[async]` extra: `pip install \"PowerPlatform-Dataverse-Client[async]\"`.\n\n> **Note:** snippets in this section are fragments. Every `await` line assumes it lives inside an `async def main(): ...` body with `client` and `credential` already constructed (see the Client Initialization block for the wrapper). Outside an async function, `await` is a `SyntaxError`.\n\n### Import\n```python\nfrom azure.identity.aio import DefaultAzureCredential\nfrom PowerPlatform.Dataverse.aio import AsyncDataverseClient\n```\n\n### Client Initialization\n```python\n# given: credential constructed (e.g. DefaultAzureCredential())\n\n# Context manager (recommended -- closes session and clears caches automatically)\nasync with AsyncDataverseClient(\"https:\u002F\u002Fyourorg.crm.dynamics.com\", credential) as client:\n    ...  # all operations here\n\n# Standalone (call aclose() in a finally block)\nclient = AsyncDataverseClient(\"https:\u002F\u002Fyourorg.crm.dynamics.com\", credential)\ntry:\n    ...\nfinally:\n    await client.aclose()\n```\n\n### CRUD Operations\nEvery sync method has an async equivalent -- add `await`:\n```python\n# given: client is an open AsyncDataverseClient\n\n# Create\naccount_id = await client.records.create(\"account\", {\"name\": \"Contoso Ltd\"})\n\n# Read\naccount = await client.records.retrieve(\"account\", account_id, select=[\"name\", \"telephone1\"])\n\n# Update\nawait client.records.update(\"account\", account_id, {\"telephone1\": \"555-0200\"})\n\n# Delete\nawait client.records.delete(\"account\", account_id)\n\n# Bulk create\nids = await client.records.create(\"account\", [{\"name\": \"A\"}, {\"name\": \"B\"}])\n```\n\n### Query Builder\n```python\n# given: client is an open AsyncDataverseClient\nfrom PowerPlatform.Dataverse.models.filters import col\n\n# Collect all results\nresult = await (\n    client.query.builder(\"account\")\n    .select(\"name\", \"telephone1\")\n    .where(col(\"statecode\") == 0)\n    .top(10)\n    .execute()\n)\nfor record in result:\n    print(record[\"name\"])\n\n# Lazy page iteration (memory-efficient)\nasync for page in (\n    client.query.builder(\"account\")\n    .select(\"name\")\n    .page_size(500)\n    .execute_pages()\n):\n    for record in page:\n        print(record[\"name\"])\n\n# SQL query\nrows = await client.query.sql(\"SELECT TOP 5 name FROM account\")\n\n# FetchXML\nxml = '\u003Cfetch top=\"5\">\u003Centity name=\"account\">\u003Cattribute name=\"name\"\u002F>\u003C\u002Fentity>\u003C\u002Ffetch>'\nrows = await client.query.fetchxml(xml).execute()\n```\n\n### Batch and Changesets\n```python\n# given: client is open; account_id from an earlier records.create\n\n# Plain batch\nbatch = client.batch.new()\nbatch.records.create(\"account\", {\"name\": \"Alpha\"})\nresult = await batch.execute()\n\n# Atomic changeset\nbatch = client.batch.new()\nasync with batch.changeset() as cs:\n    ref = cs.records.create(\"contact\", {\"firstname\": \"Alice\"})\n    cs.records.update(\"account\", account_id, {\"primarycontactid@odata.bind\": ref})\nresult = await batch.execute()\n```\n\n### DataFrame Operations\n```python\n# given: client is an open AsyncDataverseClient\nimport pandas as pd\n\n# Query to DataFrame\nresult = await (\n    client.query.builder(\"account\")\n    .select(\"name\", \"telephone1\")\n    .where(col(\"statecode\") == 0)\n    .execute()\n)\ndf = result.to_dataframe()\n\n# Create from DataFrame\nnew_accounts = pd.DataFrame([{\"name\": \"Contoso\"}, {\"name\": \"Fabrikam\"}])\nids = await client.dataframe.create(\"account\", new_accounts)\n```\n\n## Additional Resources\n\nLoad these resources as needed during development:\n\n- [API Reference](https:\u002F\u002Flearn.microsoft.com\u002Fpython\u002Fapi\u002Fdataverse-sdk-docs-python\u002Fdataverse-overview)\n- [Product Documentation](https:\u002F\u002Flearn.microsoft.com\u002Fpower-apps\u002Fdeveloper\u002Fdata-platform\u002Fsdk-python\u002F)\n- [Dataverse Web API](https:\u002F\u002Flearn.microsoft.com\u002Fpower-apps\u002Fdeveloper\u002Fdata-platform\u002Fwebapi\u002F)\n- [Azure Identity](https:\u002F\u002Flearn.microsoft.com\u002Fpython\u002Fapi\u002Foverview\u002Fazure\u002Fidentity-readme)\n\n## Key Reminders\n\n1. **Use `client.query.builder()` for queries** — it's the primary query pattern; `records.list()` is a shortcut for trivial filter+select only\n2. **Schema names are required** - Never use display names\n3. **Custom tables need prefixes** - Include customization prefix (e.g., \"new_\")\n4. **Filter is case-sensitive** - Use lowercase logical names\n5. **Bulk operations are encouraged** - Pass lists for optimization\n6. **No trailing slashes in URLs** - Format: `https:\u002F\u002Forg.crm.dynamics.com`\n7. **Structured errors** - Check `is_transient` for retry logic\n",{"data":37,"body":38},{"name":4,"description":6},{"type":39,"children":40},"root",[41,50,57,63,69,76,154,160,218,224,260,266,419,424,572,578,631,637,643,718,724,867,873,880,958,964,1114,1120,1139,1663,1669,1755,1761,1807,1813,1826,1848,2067,2073,2119,2125,2137,2187,2425,2431,2443,2488,2494,2535,2706,2712,2718,2864,2870,2875,3020,3026,3095,3101,3179,3185,3199,3205,3211,3435,3441,3525,3531,3593,3599,3661,3667,3729,3735,3768,3980,3988,4054,4062,4117,4123,4128,4284,4290,4298,4316,4324,4347,4355,4424,4430,4436,4657,4663,4699,4756,4761,4784,4789,4888,4893,4905,5035,5041,5276,5282,5386,5391,5508,5514,5519,5564,5570,5670],{"type":42,"tag":43,"props":44,"children":46},"element","h1",{"id":45},"powerplatform-dataverse-sdk-guide",[47],{"type":48,"value":49},"text","PowerPlatform Dataverse SDK Guide",{"type":42,"tag":51,"props":52,"children":54},"h2",{"id":53},"overview",[55],{"type":48,"value":56},"Overview",{"type":42,"tag":58,"props":59,"children":60},"p",{},[61],{"type":48,"value":62},"Use the PowerPlatform Dataverse Client Python SDK to interact with Microsoft Dataverse.",{"type":42,"tag":51,"props":64,"children":66},{"id":65},"key-concepts",[67],{"type":48,"value":68},"Key Concepts",{"type":42,"tag":70,"props":71,"children":73},"h3",{"id":72},"schema-names-vs-display-names",[74],{"type":48,"value":75},"Schema Names vs Display Names",{"type":42,"tag":77,"props":78,"children":79},"ul",{},[80,103,122,141],{"type":42,"tag":81,"props":82,"children":83},"li",{},[84,86,93,95,101],{"type":48,"value":85},"Standard tables: lowercase (e.g., ",{"type":42,"tag":87,"props":88,"children":90},"code",{"className":89},[],[91],{"type":48,"value":92},"\"account\"",{"type":48,"value":94},", ",{"type":42,"tag":87,"props":96,"children":98},{"className":97},[],[99],{"type":48,"value":100},"\"contact\"",{"type":48,"value":102},")",{"type":42,"tag":81,"props":104,"children":105},{},[106,108,114,115,121],{"type":48,"value":107},"Custom tables: include customization prefix (e.g., ",{"type":42,"tag":87,"props":109,"children":111},{"className":110},[],[112],{"type":48,"value":113},"\"new_Product\"",{"type":48,"value":94},{"type":42,"tag":87,"props":116,"children":118},{"className":117},[],[119],{"type":48,"value":120},"\"cr123_Invoice\"",{"type":48,"value":102},{"type":42,"tag":81,"props":123,"children":124},{},[125,127,133,134,140],{"type":48,"value":126},"Custom columns: include customization prefix (e.g., ",{"type":42,"tag":87,"props":128,"children":130},{"className":129},[],[131],{"type":48,"value":132},"\"new_Price\"",{"type":48,"value":94},{"type":42,"tag":87,"props":135,"children":137},{"className":136},[],[138],{"type":48,"value":139},"\"cr123_Status\"",{"type":48,"value":102},{"type":42,"tag":81,"props":142,"children":143},{},[144,146,152],{"type":48,"value":145},"ALWAYS use ",{"type":42,"tag":147,"props":148,"children":149},"strong",{},[150],{"type":48,"value":151},"schema names",{"type":48,"value":153}," (logical names), NOT display names",{"type":42,"tag":70,"props":155,"children":157},{"id":156},"operation-namespaces",[158],{"type":48,"value":159},"Operation Namespaces",{"type":42,"tag":77,"props":161,"children":162},{},[163,174,185,196,207],{"type":42,"tag":81,"props":164,"children":165},{},[166,172],{"type":42,"tag":87,"props":167,"children":169},{"className":168},[],[170],{"type":48,"value":171},"client.records",{"type":48,"value":173}," -- CRUD and OData queries",{"type":42,"tag":81,"props":175,"children":176},{},[177,183],{"type":42,"tag":87,"props":178,"children":180},{"className":179},[],[181],{"type":48,"value":182},"client.query",{"type":48,"value":184}," -- query and search operations",{"type":42,"tag":81,"props":186,"children":187},{},[188,194],{"type":42,"tag":87,"props":189,"children":191},{"className":190},[],[192],{"type":48,"value":193},"client.tables",{"type":48,"value":195}," -- table metadata, columns, and relationships",{"type":42,"tag":81,"props":197,"children":198},{},[199,205],{"type":42,"tag":87,"props":200,"children":202},{"className":201},[],[203],{"type":48,"value":204},"client.files",{"type":48,"value":206}," -- file upload operations",{"type":42,"tag":81,"props":208,"children":209},{},[210,216],{"type":42,"tag":87,"props":211,"children":213},{"className":212},[],[214],{"type":48,"value":215},"client.batch",{"type":48,"value":217}," -- batch multiple operations into a single HTTP request",{"type":42,"tag":70,"props":219,"children":221},{"id":220},"bulk-operations",[222],{"type":48,"value":223},"Bulk Operations",{"type":42,"tag":58,"props":225,"children":226},{},[227,229,235,236,242,244,250,252,258],{"type":48,"value":228},"The SDK supports Dataverse's native bulk operations: Pass lists to ",{"type":42,"tag":87,"props":230,"children":232},{"className":231},[],[233],{"type":48,"value":234},"create()",{"type":48,"value":94},{"type":42,"tag":87,"props":237,"children":239},{"className":238},[],[240],{"type":48,"value":241},"update()",{"type":48,"value":243}," for automatic bulk processing, for ",{"type":42,"tag":87,"props":245,"children":247},{"className":246},[],[248],{"type":48,"value":249},"delete()",{"type":48,"value":251},", set ",{"type":42,"tag":87,"props":253,"children":255},{"className":254},[],[256],{"type":48,"value":257},"use_bulk_delete",{"type":48,"value":259}," when passing lists to use bulk operation",{"type":42,"tag":70,"props":261,"children":263},{"id":262},"paging",[264],{"type":48,"value":265},"Paging",{"type":42,"tag":77,"props":267,"children":268},{},[269,303,316,342,363,397],{"type":42,"tag":81,"props":270,"children":271},{},[272,274,280,282,288,289,295,297],{"type":48,"value":273},"Control page size with ",{"type":42,"tag":87,"props":275,"children":277},{"className":276},[],[278],{"type":48,"value":279},"page_size",{"type":48,"value":281}," parameter on ",{"type":42,"tag":87,"props":283,"children":285},{"className":284},[],[286],{"type":48,"value":287},"records.list()",{"type":48,"value":94},{"type":42,"tag":87,"props":290,"children":292},{"className":291},[],[293],{"type":48,"value":294},"records.list_pages()",{"type":48,"value":296},", or ",{"type":42,"tag":87,"props":298,"children":300},{"className":299},[],[301],{"type":48,"value":302},"QueryBuilder.page_size()",{"type":42,"tag":81,"props":304,"children":305},{},[306,308,314],{"type":48,"value":307},"Use ",{"type":42,"tag":87,"props":309,"children":311},{"className":310},[],[312],{"type":48,"value":313},"top",{"type":48,"value":315}," parameter to limit total records returned",{"type":42,"tag":81,"props":317,"children":318},{},[319,324,326,332,334,340],{"type":42,"tag":147,"props":320,"children":321},{},[322],{"type":48,"value":323},"Preferred",{"type":48,"value":325},": ",{"type":42,"tag":87,"props":327,"children":329},{"className":328},[],[330],{"type":48,"value":331},"client.query.builder(table)....execute_pages()",{"type":48,"value":333}," — composable ",{"type":42,"tag":87,"props":335,"children":337},{"className":336},[],[338],{"type":48,"value":339},"where(col(...))",{"type":48,"value":341}," filters, formatted values, expand with nested selects, full pagination control",{"type":42,"tag":81,"props":343,"children":344},{},[345,347,353,355,361],{"type":48,"value":346},"Simple streaming shortcut: ",{"type":42,"tag":87,"props":348,"children":350},{"className":349},[],[351],{"type":48,"value":352},"records.list_pages(table, *, filter, select, top, orderby, expand, page_size, count, include_annotations)",{"type":48,"value":354}," — string-based OData filter only, yields one ",{"type":42,"tag":87,"props":356,"children":358},{"className":357},[],[359],{"type":48,"value":360},"QueryResult",{"type":48,"value":362}," per page",{"type":42,"tag":81,"props":364,"children":365},{},[366,372,374,379,381,387,389,395],{"type":42,"tag":87,"props":367,"children":369},{"className":368},[],[370],{"type":48,"value":371},"execute(by_page=True\u002FFalse)",{"type":48,"value":373}," is ",{"type":42,"tag":147,"props":375,"children":376},{},[377],{"type":48,"value":378},"deprecated",{"type":48,"value":380}," and emits ",{"type":42,"tag":87,"props":382,"children":384},{"className":383},[],[385],{"type":48,"value":386},"UserWarning",{"type":48,"value":388},"; use ",{"type":42,"tag":87,"props":390,"children":392},{"className":391},[],[393],{"type":48,"value":394},"execute_pages()",{"type":48,"value":396}," instead",{"type":42,"tag":81,"props":398,"children":399},{},[400,406,407,411,412,418],{"type":42,"tag":87,"props":401,"children":403},{"className":402},[],[404],{"type":48,"value":405},"QueryBuilder.to_dataframe()",{"type":48,"value":373},{"type":42,"tag":147,"props":408,"children":409},{},[410],{"type":48,"value":378},{"type":48,"value":388},{"type":42,"tag":87,"props":413,"children":415},{"className":414},[],[416],{"type":48,"value":417},".execute().to_dataframe()",{"type":48,"value":396},{"type":42,"tag":70,"props":420,"children":422},{"id":421},"queryresult",[423],{"type":48,"value":360},{"type":42,"tag":77,"props":425,"children":426},{},[427,466,493,504,530,561],{"type":42,"tag":81,"props":428,"children":429},{},[430,432,437,438,444,445,451,453,459,461],{"type":48,"value":431},"Returned by ",{"type":42,"tag":87,"props":433,"children":435},{"className":434},[],[436],{"type":48,"value":287},{"type":48,"value":94},{"type":42,"tag":87,"props":439,"children":441},{"className":440},[],[442],{"type":48,"value":443},"records.retrieve()",{"type":48,"value":94},{"type":42,"tag":87,"props":446,"children":448},{"className":447},[],[449],{"type":48,"value":450},"execute()",{"type":48,"value":452},", and each page from ",{"type":42,"tag":87,"props":454,"children":456},{"className":455},[],[457],{"type":48,"value":458},"list_pages()",{"type":48,"value":460}," \u002F ",{"type":42,"tag":87,"props":462,"children":464},{"className":463},[],[465],{"type":48,"value":394},{"type":42,"tag":81,"props":467,"children":468},{},[469,471,477,479,485,487],{"type":48,"value":470},"Iterable: ",{"type":42,"tag":87,"props":472,"children":474},{"className":473},[],[475],{"type":48,"value":476},"for record in result",{"type":48,"value":478}," — each item is a ",{"type":42,"tag":87,"props":480,"children":482},{"className":481},[],[483],{"type":48,"value":484},"dict",{"type":48,"value":486},"-like ",{"type":42,"tag":87,"props":488,"children":490},{"className":489},[],[491],{"type":48,"value":492},"Record",{"type":42,"tag":81,"props":494,"children":495},{},[496,502],{"type":42,"tag":87,"props":497,"children":499},{"className":498},[],[500],{"type":48,"value":501},".to_dataframe()",{"type":48,"value":503}," — convert to pandas DataFrame",{"type":42,"tag":81,"props":505,"children":506},{},[507,513,515,521,523,528],{"type":42,"tag":87,"props":508,"children":510},{"className":509},[],[511],{"type":48,"value":512},".first()",{"type":48,"value":514}," — return the first record or ",{"type":42,"tag":87,"props":516,"children":518},{"className":517},[],[519],{"type":48,"value":520},"None",{"type":48,"value":522}," (safe: returns ",{"type":42,"tag":87,"props":524,"children":526},{"className":525},[],[527],{"type":48,"value":520},{"type":48,"value":529}," on empty result)",{"type":42,"tag":81,"props":531,"children":532},{},[533,539,541,546,548,554,556],{"type":42,"tag":87,"props":534,"children":536},{"className":535},[],[537],{"type":48,"value":538},"result[n]",{"type":48,"value":540}," — index access returns a ",{"type":42,"tag":87,"props":542,"children":544},{"className":543},[],[545],{"type":48,"value":492},{"type":48,"value":547},"; ",{"type":42,"tag":87,"props":549,"children":551},{"className":550},[],[552],{"type":48,"value":553},"result[n:m]",{"type":48,"value":555}," returns a ",{"type":42,"tag":87,"props":557,"children":559},{"className":558},[],[560],{"type":48,"value":360},{"type":42,"tag":81,"props":562,"children":563},{},[564,570],{"type":42,"tag":87,"props":565,"children":567},{"className":566},[],[568],{"type":48,"value":569},"len(result)",{"type":48,"value":571}," — number of records in this result\u002Fpage",{"type":42,"tag":70,"props":573,"children":575},{"id":574},"dataframe-support",[576],{"type":48,"value":577},"DataFrame Support",{"type":42,"tag":77,"props":579,"children":580},{},[581],{"type":42,"tag":81,"props":582,"children":583},{},[584,586,592,594,600,601,607,608,614,616,622,624,630],{"type":48,"value":585},"DataFrame operations are accessed via the ",{"type":42,"tag":87,"props":587,"children":589},{"className":588},[],[590],{"type":48,"value":591},"client.dataframe",{"type":48,"value":593}," namespace: ",{"type":42,"tag":87,"props":595,"children":597},{"className":596},[],[598],{"type":48,"value":599},"client.dataframe.create()",{"type":48,"value":94},{"type":42,"tag":87,"props":602,"children":604},{"className":603},[],[605],{"type":48,"value":606},"client.dataframe.update()",{"type":48,"value":94},{"type":42,"tag":87,"props":609,"children":611},{"className":610},[],[612],{"type":48,"value":613},"client.dataframe.delete()",{"type":48,"value":615}," — ",{"type":42,"tag":87,"props":617,"children":619},{"className":618},[],[620],{"type":48,"value":621},"client.dataframe.get()",{"type":48,"value":623}," is deprecated; use ",{"type":42,"tag":87,"props":625,"children":627},{"className":626},[],[628],{"type":48,"value":629},"client.query.builder(table).where(...).execute().to_dataframe()",{"type":48,"value":396},{"type":42,"tag":51,"props":632,"children":634},{"id":633},"common-operations",[635],{"type":48,"value":636},"Common Operations",{"type":42,"tag":70,"props":638,"children":640},{"id":639},"import",[641],{"type":48,"value":642},"Import",{"type":42,"tag":644,"props":645,"children":649},"pre",{"className":646,"code":647,"language":16,"meta":648,"style":648},"language-python shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","from azure.identity import (\n    InteractiveBrowserCredential,\n    ClientSecretCredential,\n    CertificateCredential,\n    AzureCliCredential\n)\nfrom PowerPlatform.Dataverse.client import DataverseClient\n","",[650],{"type":42,"tag":87,"props":651,"children":652},{"__ignoreMap":648},[653,664,673,682,691,700,709],{"type":42,"tag":654,"props":655,"children":658},"span",{"class":656,"line":657},"line",1,[659],{"type":42,"tag":654,"props":660,"children":661},{},[662],{"type":48,"value":663},"from azure.identity import (\n",{"type":42,"tag":654,"props":665,"children":667},{"class":656,"line":666},2,[668],{"type":42,"tag":654,"props":669,"children":670},{},[671],{"type":48,"value":672},"    InteractiveBrowserCredential,\n",{"type":42,"tag":654,"props":674,"children":676},{"class":656,"line":675},3,[677],{"type":42,"tag":654,"props":678,"children":679},{},[680],{"type":48,"value":681},"    ClientSecretCredential,\n",{"type":42,"tag":654,"props":683,"children":685},{"class":656,"line":684},4,[686],{"type":42,"tag":654,"props":687,"children":688},{},[689],{"type":48,"value":690},"    CertificateCredential,\n",{"type":42,"tag":654,"props":692,"children":694},{"class":656,"line":693},5,[695],{"type":42,"tag":654,"props":696,"children":697},{},[698],{"type":48,"value":699},"    AzureCliCredential\n",{"type":42,"tag":654,"props":701,"children":703},{"class":656,"line":702},6,[704],{"type":42,"tag":654,"props":705,"children":706},{},[707],{"type":48,"value":708},")\n",{"type":42,"tag":654,"props":710,"children":712},{"class":656,"line":711},7,[713],{"type":42,"tag":654,"props":714,"children":715},{},[716],{"type":48,"value":717},"from PowerPlatform.Dataverse.client import DataverseClient\n",{"type":42,"tag":70,"props":719,"children":721},{"id":720},"client-initialization",[722],{"type":48,"value":723},"Client Initialization",{"type":42,"tag":644,"props":725,"children":727},{"className":646,"code":726,"language":16,"meta":648,"style":648},"# Development options\ncredential = InteractiveBrowserCredential()\ncredential = AzureCliCredential()\n\n# Production options\ncredential = ClientSecretCredential(tenant_id, client_id, client_secret)\ncredential = CertificateCredential(tenant_id, client_id, cert_path)\n\n# Create client with context manager (recommended -- enables HTTP connection pooling)\n# No trailing slash on URL!\nwith DataverseClient(\"https:\u002F\u002Fyourorg.crm.dynamics.com\", credential) as client:\n    ...  # all operations here\n# Session closed, caches cleared automatically\n\n# Or without context manager:\nclient = DataverseClient(\"https:\u002F\u002Fyourorg.crm.dynamics.com\", credential)\n",[728],{"type":42,"tag":87,"props":729,"children":730},{"__ignoreMap":648},[731,739,747,755,764,772,780,788,796,805,814,823,832,841,849,858],{"type":42,"tag":654,"props":732,"children":733},{"class":656,"line":657},[734],{"type":42,"tag":654,"props":735,"children":736},{},[737],{"type":48,"value":738},"# Development options\n",{"type":42,"tag":654,"props":740,"children":741},{"class":656,"line":666},[742],{"type":42,"tag":654,"props":743,"children":744},{},[745],{"type":48,"value":746},"credential = InteractiveBrowserCredential()\n",{"type":42,"tag":654,"props":748,"children":749},{"class":656,"line":675},[750],{"type":42,"tag":654,"props":751,"children":752},{},[753],{"type":48,"value":754},"credential = AzureCliCredential()\n",{"type":42,"tag":654,"props":756,"children":757},{"class":656,"line":684},[758],{"type":42,"tag":654,"props":759,"children":761},{"emptyLinePlaceholder":760},true,[762],{"type":48,"value":763},"\n",{"type":42,"tag":654,"props":765,"children":766},{"class":656,"line":693},[767],{"type":42,"tag":654,"props":768,"children":769},{},[770],{"type":48,"value":771},"# Production options\n",{"type":42,"tag":654,"props":773,"children":774},{"class":656,"line":702},[775],{"type":42,"tag":654,"props":776,"children":777},{},[778],{"type":48,"value":779},"credential = ClientSecretCredential(tenant_id, client_id, client_secret)\n",{"type":42,"tag":654,"props":781,"children":782},{"class":656,"line":711},[783],{"type":42,"tag":654,"props":784,"children":785},{},[786],{"type":48,"value":787},"credential = CertificateCredential(tenant_id, client_id, cert_path)\n",{"type":42,"tag":654,"props":789,"children":791},{"class":656,"line":790},8,[792],{"type":42,"tag":654,"props":793,"children":794},{"emptyLinePlaceholder":760},[795],{"type":48,"value":763},{"type":42,"tag":654,"props":797,"children":799},{"class":656,"line":798},9,[800],{"type":42,"tag":654,"props":801,"children":802},{},[803],{"type":48,"value":804},"# Create client with context manager (recommended -- enables HTTP connection pooling)\n",{"type":42,"tag":654,"props":806,"children":808},{"class":656,"line":807},10,[809],{"type":42,"tag":654,"props":810,"children":811},{},[812],{"type":48,"value":813},"# No trailing slash on URL!\n",{"type":42,"tag":654,"props":815,"children":817},{"class":656,"line":816},11,[818],{"type":42,"tag":654,"props":819,"children":820},{},[821],{"type":48,"value":822},"with DataverseClient(\"https:\u002F\u002Fyourorg.crm.dynamics.com\", credential) as client:\n",{"type":42,"tag":654,"props":824,"children":826},{"class":656,"line":825},12,[827],{"type":42,"tag":654,"props":828,"children":829},{},[830],{"type":48,"value":831},"    ...  # all operations here\n",{"type":42,"tag":654,"props":833,"children":835},{"class":656,"line":834},13,[836],{"type":42,"tag":654,"props":837,"children":838},{},[839],{"type":48,"value":840},"# Session closed, caches cleared automatically\n",{"type":42,"tag":654,"props":842,"children":844},{"class":656,"line":843},14,[845],{"type":42,"tag":654,"props":846,"children":847},{"emptyLinePlaceholder":760},[848],{"type":48,"value":763},{"type":42,"tag":654,"props":850,"children":852},{"class":656,"line":851},15,[853],{"type":42,"tag":654,"props":854,"children":855},{},[856],{"type":48,"value":857},"# Or without context manager:\n",{"type":42,"tag":654,"props":859,"children":861},{"class":656,"line":860},16,[862],{"type":42,"tag":654,"props":863,"children":864},{},[865],{"type":48,"value":866},"client = DataverseClient(\"https:\u002F\u002Fyourorg.crm.dynamics.com\", credential)\n",{"type":42,"tag":70,"props":868,"children":870},{"id":869},"crud-operations",[871],{"type":48,"value":872},"CRUD Operations",{"type":42,"tag":874,"props":875,"children":877},"h4",{"id":876},"create-records",[878],{"type":48,"value":879},"Create Records",{"type":42,"tag":644,"props":881,"children":883},{"className":646,"code":882,"language":16,"meta":648,"style":648},"# Single record\naccount_id = client.records.create(\"account\", {\"name\": \"Contoso Ltd\", \"telephone1\": \"555-0100\"})\n\n# Bulk create (uses CreateMultiple API automatically)\ncontacts = [\n    {\"firstname\": \"John\", \"lastname\": \"Doe\"},\n    {\"firstname\": \"Jane\", \"lastname\": \"Smith\"}\n]\ncontact_ids = client.records.create(\"contact\", contacts)\n",[884],{"type":42,"tag":87,"props":885,"children":886},{"__ignoreMap":648},[887,895,903,910,918,926,934,942,950],{"type":42,"tag":654,"props":888,"children":889},{"class":656,"line":657},[890],{"type":42,"tag":654,"props":891,"children":892},{},[893],{"type":48,"value":894},"# Single record\n",{"type":42,"tag":654,"props":896,"children":897},{"class":656,"line":666},[898],{"type":42,"tag":654,"props":899,"children":900},{},[901],{"type":48,"value":902},"account_id = client.records.create(\"account\", {\"name\": \"Contoso Ltd\", \"telephone1\": \"555-0100\"})\n",{"type":42,"tag":654,"props":904,"children":905},{"class":656,"line":675},[906],{"type":42,"tag":654,"props":907,"children":908},{"emptyLinePlaceholder":760},[909],{"type":48,"value":763},{"type":42,"tag":654,"props":911,"children":912},{"class":656,"line":684},[913],{"type":42,"tag":654,"props":914,"children":915},{},[916],{"type":48,"value":917},"# Bulk create (uses CreateMultiple API automatically)\n",{"type":42,"tag":654,"props":919,"children":920},{"class":656,"line":693},[921],{"type":42,"tag":654,"props":922,"children":923},{},[924],{"type":48,"value":925},"contacts = [\n",{"type":42,"tag":654,"props":927,"children":928},{"class":656,"line":702},[929],{"type":42,"tag":654,"props":930,"children":931},{},[932],{"type":48,"value":933},"    {\"firstname\": \"John\", \"lastname\": \"Doe\"},\n",{"type":42,"tag":654,"props":935,"children":936},{"class":656,"line":711},[937],{"type":42,"tag":654,"props":938,"children":939},{},[940],{"type":48,"value":941},"    {\"firstname\": \"Jane\", \"lastname\": \"Smith\"}\n",{"type":42,"tag":654,"props":943,"children":944},{"class":656,"line":790},[945],{"type":42,"tag":654,"props":946,"children":947},{},[948],{"type":48,"value":949},"]\n",{"type":42,"tag":654,"props":951,"children":952},{"class":656,"line":798},[953],{"type":42,"tag":654,"props":954,"children":955},{},[956],{"type":48,"value":957},"contact_ids = client.records.create(\"contact\", contacts)\n",{"type":42,"tag":874,"props":959,"children":961},{"id":960},"read-records",[962],{"type":48,"value":963},"Read Records",{"type":42,"tag":644,"props":965,"children":967},{"className":646,"code":966,"language":16,"meta":648,"style":648},"# Get single record by ID\naccount = client.records.retrieve(\"account\", account_id, select=[\"name\", \"telephone1\"])\n\n# With expand — fetch a related record in the same HTTP request\naccount = client.records.retrieve(\n    \"account\", account_id,\n    select=[\"name\"],\n    expand=[\"primarycontactid\"],\n)\ncontact = (account.get(\"primarycontactid\") or {})\nprint(contact.get(\"fullname\"))\n\n# Simple shortcut — use records.list() only for basic filter + select without composable logic.\n# Follows @odata.nextLink automatically and loads all matching records into memory.\n# For filtering, sorting, expansion, or formatted values, prefer client.query.builder() (see below).\nresult = client.records.list(\"account\", filter=\"statecode eq 0\", select=[\"name\", \"accountid\"])\nfor record in result:\n    print(record[\"name\"])\n",[968],{"type":42,"tag":87,"props":969,"children":970},{"__ignoreMap":648},[971,979,987,994,1002,1010,1018,1026,1034,1041,1049,1057,1064,1072,1080,1088,1096,1105],{"type":42,"tag":654,"props":972,"children":973},{"class":656,"line":657},[974],{"type":42,"tag":654,"props":975,"children":976},{},[977],{"type":48,"value":978},"# Get single record by ID\n",{"type":42,"tag":654,"props":980,"children":981},{"class":656,"line":666},[982],{"type":42,"tag":654,"props":983,"children":984},{},[985],{"type":48,"value":986},"account = client.records.retrieve(\"account\", account_id, select=[\"name\", \"telephone1\"])\n",{"type":42,"tag":654,"props":988,"children":989},{"class":656,"line":675},[990],{"type":42,"tag":654,"props":991,"children":992},{"emptyLinePlaceholder":760},[993],{"type":48,"value":763},{"type":42,"tag":654,"props":995,"children":996},{"class":656,"line":684},[997],{"type":42,"tag":654,"props":998,"children":999},{},[1000],{"type":48,"value":1001},"# With expand — fetch a related record in the same HTTP request\n",{"type":42,"tag":654,"props":1003,"children":1004},{"class":656,"line":693},[1005],{"type":42,"tag":654,"props":1006,"children":1007},{},[1008],{"type":48,"value":1009},"account = client.records.retrieve(\n",{"type":42,"tag":654,"props":1011,"children":1012},{"class":656,"line":702},[1013],{"type":42,"tag":654,"props":1014,"children":1015},{},[1016],{"type":48,"value":1017},"    \"account\", account_id,\n",{"type":42,"tag":654,"props":1019,"children":1020},{"class":656,"line":711},[1021],{"type":42,"tag":654,"props":1022,"children":1023},{},[1024],{"type":48,"value":1025},"    select=[\"name\"],\n",{"type":42,"tag":654,"props":1027,"children":1028},{"class":656,"line":790},[1029],{"type":42,"tag":654,"props":1030,"children":1031},{},[1032],{"type":48,"value":1033},"    expand=[\"primarycontactid\"],\n",{"type":42,"tag":654,"props":1035,"children":1036},{"class":656,"line":798},[1037],{"type":42,"tag":654,"props":1038,"children":1039},{},[1040],{"type":48,"value":708},{"type":42,"tag":654,"props":1042,"children":1043},{"class":656,"line":807},[1044],{"type":42,"tag":654,"props":1045,"children":1046},{},[1047],{"type":48,"value":1048},"contact = (account.get(\"primarycontactid\") or {})\n",{"type":42,"tag":654,"props":1050,"children":1051},{"class":656,"line":816},[1052],{"type":42,"tag":654,"props":1053,"children":1054},{},[1055],{"type":48,"value":1056},"print(contact.get(\"fullname\"))\n",{"type":42,"tag":654,"props":1058,"children":1059},{"class":656,"line":825},[1060],{"type":42,"tag":654,"props":1061,"children":1062},{"emptyLinePlaceholder":760},[1063],{"type":48,"value":763},{"type":42,"tag":654,"props":1065,"children":1066},{"class":656,"line":834},[1067],{"type":42,"tag":654,"props":1068,"children":1069},{},[1070],{"type":48,"value":1071},"# Simple shortcut — use records.list() only for basic filter + select without composable logic.\n",{"type":42,"tag":654,"props":1073,"children":1074},{"class":656,"line":843},[1075],{"type":42,"tag":654,"props":1076,"children":1077},{},[1078],{"type":48,"value":1079},"# Follows @odata.nextLink automatically and loads all matching records into memory.\n",{"type":42,"tag":654,"props":1081,"children":1082},{"class":656,"line":851},[1083],{"type":42,"tag":654,"props":1084,"children":1085},{},[1086],{"type":48,"value":1087},"# For filtering, sorting, expansion, or formatted values, prefer client.query.builder() (see below).\n",{"type":42,"tag":654,"props":1089,"children":1090},{"class":656,"line":860},[1091],{"type":42,"tag":654,"props":1092,"children":1093},{},[1094],{"type":48,"value":1095},"result = client.records.list(\"account\", filter=\"statecode eq 0\", select=[\"name\", \"accountid\"])\n",{"type":42,"tag":654,"props":1097,"children":1099},{"class":656,"line":1098},17,[1100],{"type":42,"tag":654,"props":1101,"children":1102},{},[1103],{"type":48,"value":1104},"for record in result:\n",{"type":42,"tag":654,"props":1106,"children":1108},{"class":656,"line":1107},18,[1109],{"type":42,"tag":654,"props":1110,"children":1111},{},[1112],{"type":48,"value":1113},"    print(record[\"name\"])\n",{"type":42,"tag":874,"props":1115,"children":1117},{"id":1116},"query-builder-preferred-for-filtering-sorting-expand-formatted-values",[1118],{"type":48,"value":1119},"Query Builder (Preferred for Filtering, Sorting, Expand, Formatted Values)",{"type":42,"tag":58,"props":1121,"children":1122},{},[1123,1124,1130,1132,1137],{"type":48,"value":307},{"type":42,"tag":87,"props":1125,"children":1127},{"className":1126},[],[1128],{"type":48,"value":1129},"client.query.builder()",{"type":48,"value":1131}," for any query that goes beyond simple filter + select. It provides composable ",{"type":42,"tag":87,"props":1133,"children":1135},{"className":1134},[],[1136],{"type":48,"value":339},{"type":48,"value":1138}," expressions, formatted value support, nested expansion, and streaming — all with a fluent API.",{"type":42,"tag":644,"props":1140,"children":1142},{"className":646,"code":1141,"language":16,"meta":648,"style":648},"from PowerPlatform.Dataverse.models.filters import col\nfrom PowerPlatform.Dataverse.models.query_builder import ExpandOption\n\n# Basic query with composable filter and sort\nresult = (client.query.builder(\"account\")\n          .select(\"accountid\", \"name\", \"statecode\")\n          .where(col(\"statecode\") == 0)\n          .order_by(\"name asc\")\n          .execute())\nfor record in result:\n    print(record[\"name\"])\n\n# Composable filters — AND \u002F OR \u002F NOT using Python operators\nresult = (client.query.builder(\"contact\")\n          .select(\"fullname\", \"emailaddress1\")\n          .where((col(\"statecode\") == 0) & (col(\"emailaddress1\").contains(\"@contoso.com\")))\n          .execute())\n\n# Formatted values — display labels for option sets, currency symbols, etc.\nresult = (client.query.builder(\"account\")\n          .select(\"accountid\", \"name\", \"industrycode\")\n          .where(col(\"statecode\") == 0)\n          .include_formatted_values()\n          .execute())\nfor record in result:\n    label = record.get(\"industrycode@OData.Community.Display.V1.FormattedValue\")\n    print(record[\"name\"], label)\n\n# Navigation property expansion with nested column select\nresult = (client.query.builder(\"account\")\n          .select(\"name\")\n          .expand(ExpandOption(\"primarycontactid\").select(\"fullname\", \"emailaddress1\"))\n          .where(col(\"statecode\") == 0)\n          .execute())\nfor record in result:\n    contact = record.get(\"primarycontactid\", {})\n    print(f\"{record['name']} - {contact.get('fullname', 'N\u002FA')}\")\n\n# Stream large result sets page-by-page (memory-efficient)\nfor page in (client.query.builder(\"account\")\n             .select(\"accountid\", \"name\")\n             .where(col(\"statecode\") == 0)\n             .order_by(\"name asc\")\n             .page_size(500)\n             .execute_pages()):\n    for record in page:\n        print(record[\"name\"])\n\n# Convert query results to a DataFrame\ndf = (client.query.builder(\"account\")\n      .select(\"accountid\", \"name\")\n      .where(col(\"statecode\") == 0)\n      .execute()\n      .to_dataframe())\n\n# Limit total results\nresult = client.query.builder(\"account\").select(\"name\").top(100).execute()\n\n# Simple streaming shortcut via records.list_pages() (string filter only, same params as records.list())\nfor page in client.records.list_pages(\"account\", filter=\"statecode eq 0\", select=[\"name\"], page_size=500):\n    for record in page:\n        print(record[\"name\"])\n",[1143],{"type":42,"tag":87,"props":1144,"children":1145},{"__ignoreMap":648},[1146,1154,1162,1169,1177,1185,1193,1201,1209,1217,1224,1231,1238,1246,1254,1262,1270,1277,1284,1293,1301,1310,1318,1326,1334,1342,1351,1360,1368,1377,1385,1394,1403,1411,1419,1427,1436,1445,1453,1462,1471,1480,1489,1498,1507,1516,1525,1534,1542,1551,1560,1569,1578,1587,1596,1604,1612,1621,1629,1638,1647,1655],{"type":42,"tag":654,"props":1147,"children":1148},{"class":656,"line":657},[1149],{"type":42,"tag":654,"props":1150,"children":1151},{},[1152],{"type":48,"value":1153},"from PowerPlatform.Dataverse.models.filters import col\n",{"type":42,"tag":654,"props":1155,"children":1156},{"class":656,"line":666},[1157],{"type":42,"tag":654,"props":1158,"children":1159},{},[1160],{"type":48,"value":1161},"from PowerPlatform.Dataverse.models.query_builder import ExpandOption\n",{"type":42,"tag":654,"props":1163,"children":1164},{"class":656,"line":675},[1165],{"type":42,"tag":654,"props":1166,"children":1167},{"emptyLinePlaceholder":760},[1168],{"type":48,"value":763},{"type":42,"tag":654,"props":1170,"children":1171},{"class":656,"line":684},[1172],{"type":42,"tag":654,"props":1173,"children":1174},{},[1175],{"type":48,"value":1176},"# Basic query with composable filter and sort\n",{"type":42,"tag":654,"props":1178,"children":1179},{"class":656,"line":693},[1180],{"type":42,"tag":654,"props":1181,"children":1182},{},[1183],{"type":48,"value":1184},"result = (client.query.builder(\"account\")\n",{"type":42,"tag":654,"props":1186,"children":1187},{"class":656,"line":702},[1188],{"type":42,"tag":654,"props":1189,"children":1190},{},[1191],{"type":48,"value":1192},"          .select(\"accountid\", \"name\", \"statecode\")\n",{"type":42,"tag":654,"props":1194,"children":1195},{"class":656,"line":711},[1196],{"type":42,"tag":654,"props":1197,"children":1198},{},[1199],{"type":48,"value":1200},"          .where(col(\"statecode\") == 0)\n",{"type":42,"tag":654,"props":1202,"children":1203},{"class":656,"line":790},[1204],{"type":42,"tag":654,"props":1205,"children":1206},{},[1207],{"type":48,"value":1208},"          .order_by(\"name asc\")\n",{"type":42,"tag":654,"props":1210,"children":1211},{"class":656,"line":798},[1212],{"type":42,"tag":654,"props":1213,"children":1214},{},[1215],{"type":48,"value":1216},"          .execute())\n",{"type":42,"tag":654,"props":1218,"children":1219},{"class":656,"line":807},[1220],{"type":42,"tag":654,"props":1221,"children":1222},{},[1223],{"type":48,"value":1104},{"type":42,"tag":654,"props":1225,"children":1226},{"class":656,"line":816},[1227],{"type":42,"tag":654,"props":1228,"children":1229},{},[1230],{"type":48,"value":1113},{"type":42,"tag":654,"props":1232,"children":1233},{"class":656,"line":825},[1234],{"type":42,"tag":654,"props":1235,"children":1236},{"emptyLinePlaceholder":760},[1237],{"type":48,"value":763},{"type":42,"tag":654,"props":1239,"children":1240},{"class":656,"line":834},[1241],{"type":42,"tag":654,"props":1242,"children":1243},{},[1244],{"type":48,"value":1245},"# Composable filters — AND \u002F OR \u002F NOT using Python operators\n",{"type":42,"tag":654,"props":1247,"children":1248},{"class":656,"line":843},[1249],{"type":42,"tag":654,"props":1250,"children":1251},{},[1252],{"type":48,"value":1253},"result = (client.query.builder(\"contact\")\n",{"type":42,"tag":654,"props":1255,"children":1256},{"class":656,"line":851},[1257],{"type":42,"tag":654,"props":1258,"children":1259},{},[1260],{"type":48,"value":1261},"          .select(\"fullname\", \"emailaddress1\")\n",{"type":42,"tag":654,"props":1263,"children":1264},{"class":656,"line":860},[1265],{"type":42,"tag":654,"props":1266,"children":1267},{},[1268],{"type":48,"value":1269},"          .where((col(\"statecode\") == 0) & (col(\"emailaddress1\").contains(\"@contoso.com\")))\n",{"type":42,"tag":654,"props":1271,"children":1272},{"class":656,"line":1098},[1273],{"type":42,"tag":654,"props":1274,"children":1275},{},[1276],{"type":48,"value":1216},{"type":42,"tag":654,"props":1278,"children":1279},{"class":656,"line":1107},[1280],{"type":42,"tag":654,"props":1281,"children":1282},{"emptyLinePlaceholder":760},[1283],{"type":48,"value":763},{"type":42,"tag":654,"props":1285,"children":1287},{"class":656,"line":1286},19,[1288],{"type":42,"tag":654,"props":1289,"children":1290},{},[1291],{"type":48,"value":1292},"# Formatted values — display labels for option sets, currency symbols, etc.\n",{"type":42,"tag":654,"props":1294,"children":1296},{"class":656,"line":1295},20,[1297],{"type":42,"tag":654,"props":1298,"children":1299},{},[1300],{"type":48,"value":1184},{"type":42,"tag":654,"props":1302,"children":1304},{"class":656,"line":1303},21,[1305],{"type":42,"tag":654,"props":1306,"children":1307},{},[1308],{"type":48,"value":1309},"          .select(\"accountid\", \"name\", \"industrycode\")\n",{"type":42,"tag":654,"props":1311,"children":1313},{"class":656,"line":1312},22,[1314],{"type":42,"tag":654,"props":1315,"children":1316},{},[1317],{"type":48,"value":1200},{"type":42,"tag":654,"props":1319,"children":1320},{"class":656,"line":30},[1321],{"type":42,"tag":654,"props":1322,"children":1323},{},[1324],{"type":48,"value":1325},"          .include_formatted_values()\n",{"type":42,"tag":654,"props":1327,"children":1329},{"class":656,"line":1328},24,[1330],{"type":42,"tag":654,"props":1331,"children":1332},{},[1333],{"type":48,"value":1216},{"type":42,"tag":654,"props":1335,"children":1337},{"class":656,"line":1336},25,[1338],{"type":42,"tag":654,"props":1339,"children":1340},{},[1341],{"type":48,"value":1104},{"type":42,"tag":654,"props":1343,"children":1345},{"class":656,"line":1344},26,[1346],{"type":42,"tag":654,"props":1347,"children":1348},{},[1349],{"type":48,"value":1350},"    label = record.get(\"industrycode@OData.Community.Display.V1.FormattedValue\")\n",{"type":42,"tag":654,"props":1352,"children":1354},{"class":656,"line":1353},27,[1355],{"type":42,"tag":654,"props":1356,"children":1357},{},[1358],{"type":48,"value":1359},"    print(record[\"name\"], label)\n",{"type":42,"tag":654,"props":1361,"children":1363},{"class":656,"line":1362},28,[1364],{"type":42,"tag":654,"props":1365,"children":1366},{"emptyLinePlaceholder":760},[1367],{"type":48,"value":763},{"type":42,"tag":654,"props":1369,"children":1371},{"class":656,"line":1370},29,[1372],{"type":42,"tag":654,"props":1373,"children":1374},{},[1375],{"type":48,"value":1376},"# Navigation property expansion with nested column select\n",{"type":42,"tag":654,"props":1378,"children":1380},{"class":656,"line":1379},30,[1381],{"type":42,"tag":654,"props":1382,"children":1383},{},[1384],{"type":48,"value":1184},{"type":42,"tag":654,"props":1386,"children":1388},{"class":656,"line":1387},31,[1389],{"type":42,"tag":654,"props":1390,"children":1391},{},[1392],{"type":48,"value":1393},"          .select(\"name\")\n",{"type":42,"tag":654,"props":1395,"children":1397},{"class":656,"line":1396},32,[1398],{"type":42,"tag":654,"props":1399,"children":1400},{},[1401],{"type":48,"value":1402},"          .expand(ExpandOption(\"primarycontactid\").select(\"fullname\", \"emailaddress1\"))\n",{"type":42,"tag":654,"props":1404,"children":1406},{"class":656,"line":1405},33,[1407],{"type":42,"tag":654,"props":1408,"children":1409},{},[1410],{"type":48,"value":1200},{"type":42,"tag":654,"props":1412,"children":1414},{"class":656,"line":1413},34,[1415],{"type":42,"tag":654,"props":1416,"children":1417},{},[1418],{"type":48,"value":1216},{"type":42,"tag":654,"props":1420,"children":1422},{"class":656,"line":1421},35,[1423],{"type":42,"tag":654,"props":1424,"children":1425},{},[1426],{"type":48,"value":1104},{"type":42,"tag":654,"props":1428,"children":1430},{"class":656,"line":1429},36,[1431],{"type":42,"tag":654,"props":1432,"children":1433},{},[1434],{"type":48,"value":1435},"    contact = record.get(\"primarycontactid\", {})\n",{"type":42,"tag":654,"props":1437,"children":1439},{"class":656,"line":1438},37,[1440],{"type":42,"tag":654,"props":1441,"children":1442},{},[1443],{"type":48,"value":1444},"    print(f\"{record['name']} - {contact.get('fullname', 'N\u002FA')}\")\n",{"type":42,"tag":654,"props":1446,"children":1448},{"class":656,"line":1447},38,[1449],{"type":42,"tag":654,"props":1450,"children":1451},{"emptyLinePlaceholder":760},[1452],{"type":48,"value":763},{"type":42,"tag":654,"props":1454,"children":1456},{"class":656,"line":1455},39,[1457],{"type":42,"tag":654,"props":1458,"children":1459},{},[1460],{"type":48,"value":1461},"# Stream large result sets page-by-page (memory-efficient)\n",{"type":42,"tag":654,"props":1463,"children":1465},{"class":656,"line":1464},40,[1466],{"type":42,"tag":654,"props":1467,"children":1468},{},[1469],{"type":48,"value":1470},"for page in (client.query.builder(\"account\")\n",{"type":42,"tag":654,"props":1472,"children":1474},{"class":656,"line":1473},41,[1475],{"type":42,"tag":654,"props":1476,"children":1477},{},[1478],{"type":48,"value":1479},"             .select(\"accountid\", \"name\")\n",{"type":42,"tag":654,"props":1481,"children":1483},{"class":656,"line":1482},42,[1484],{"type":42,"tag":654,"props":1485,"children":1486},{},[1487],{"type":48,"value":1488},"             .where(col(\"statecode\") == 0)\n",{"type":42,"tag":654,"props":1490,"children":1492},{"class":656,"line":1491},43,[1493],{"type":42,"tag":654,"props":1494,"children":1495},{},[1496],{"type":48,"value":1497},"             .order_by(\"name asc\")\n",{"type":42,"tag":654,"props":1499,"children":1501},{"class":656,"line":1500},44,[1502],{"type":42,"tag":654,"props":1503,"children":1504},{},[1505],{"type":48,"value":1506},"             .page_size(500)\n",{"type":42,"tag":654,"props":1508,"children":1510},{"class":656,"line":1509},45,[1511],{"type":42,"tag":654,"props":1512,"children":1513},{},[1514],{"type":48,"value":1515},"             .execute_pages()):\n",{"type":42,"tag":654,"props":1517,"children":1519},{"class":656,"line":1518},46,[1520],{"type":42,"tag":654,"props":1521,"children":1522},{},[1523],{"type":48,"value":1524},"    for record in page:\n",{"type":42,"tag":654,"props":1526,"children":1528},{"class":656,"line":1527},47,[1529],{"type":42,"tag":654,"props":1530,"children":1531},{},[1532],{"type":48,"value":1533},"        print(record[\"name\"])\n",{"type":42,"tag":654,"props":1535,"children":1537},{"class":656,"line":1536},48,[1538],{"type":42,"tag":654,"props":1539,"children":1540},{"emptyLinePlaceholder":760},[1541],{"type":48,"value":763},{"type":42,"tag":654,"props":1543,"children":1545},{"class":656,"line":1544},49,[1546],{"type":42,"tag":654,"props":1547,"children":1548},{},[1549],{"type":48,"value":1550},"# Convert query results to a DataFrame\n",{"type":42,"tag":654,"props":1552,"children":1554},{"class":656,"line":1553},50,[1555],{"type":42,"tag":654,"props":1556,"children":1557},{},[1558],{"type":48,"value":1559},"df = (client.query.builder(\"account\")\n",{"type":42,"tag":654,"props":1561,"children":1563},{"class":656,"line":1562},51,[1564],{"type":42,"tag":654,"props":1565,"children":1566},{},[1567],{"type":48,"value":1568},"      .select(\"accountid\", \"name\")\n",{"type":42,"tag":654,"props":1570,"children":1572},{"class":656,"line":1571},52,[1573],{"type":42,"tag":654,"props":1574,"children":1575},{},[1576],{"type":48,"value":1577},"      .where(col(\"statecode\") == 0)\n",{"type":42,"tag":654,"props":1579,"children":1581},{"class":656,"line":1580},53,[1582],{"type":42,"tag":654,"props":1583,"children":1584},{},[1585],{"type":48,"value":1586},"      .execute()\n",{"type":42,"tag":654,"props":1588,"children":1590},{"class":656,"line":1589},54,[1591],{"type":42,"tag":654,"props":1592,"children":1593},{},[1594],{"type":48,"value":1595},"      .to_dataframe())\n",{"type":42,"tag":654,"props":1597,"children":1599},{"class":656,"line":1598},55,[1600],{"type":42,"tag":654,"props":1601,"children":1602},{"emptyLinePlaceholder":760},[1603],{"type":48,"value":763},{"type":42,"tag":654,"props":1605,"children":1606},{"class":656,"line":26},[1607],{"type":42,"tag":654,"props":1608,"children":1609},{},[1610],{"type":48,"value":1611},"# Limit total results\n",{"type":42,"tag":654,"props":1613,"children":1615},{"class":656,"line":1614},57,[1616],{"type":42,"tag":654,"props":1617,"children":1618},{},[1619],{"type":48,"value":1620},"result = client.query.builder(\"account\").select(\"name\").top(100).execute()\n",{"type":42,"tag":654,"props":1622,"children":1624},{"class":656,"line":1623},58,[1625],{"type":42,"tag":654,"props":1626,"children":1627},{"emptyLinePlaceholder":760},[1628],{"type":48,"value":763},{"type":42,"tag":654,"props":1630,"children":1632},{"class":656,"line":1631},59,[1633],{"type":42,"tag":654,"props":1634,"children":1635},{},[1636],{"type":48,"value":1637},"# Simple streaming shortcut via records.list_pages() (string filter only, same params as records.list())\n",{"type":42,"tag":654,"props":1639,"children":1641},{"class":656,"line":1640},60,[1642],{"type":42,"tag":654,"props":1643,"children":1644},{},[1645],{"type":48,"value":1646},"for page in client.records.list_pages(\"account\", filter=\"statecode eq 0\", select=[\"name\"], page_size=500):\n",{"type":42,"tag":654,"props":1648,"children":1650},{"class":656,"line":1649},61,[1651],{"type":42,"tag":654,"props":1652,"children":1653},{},[1654],{"type":48,"value":1524},{"type":42,"tag":654,"props":1656,"children":1658},{"class":656,"line":1657},62,[1659],{"type":42,"tag":654,"props":1660,"children":1661},{},[1662],{"type":48,"value":1533},{"type":42,"tag":874,"props":1664,"children":1666},{"id":1665},"create-records-with-lookup-bindings-odatabind",[1667],{"type":48,"value":1668},"Create Records with Lookup Bindings (@odata.bind)",{"type":42,"tag":644,"props":1670,"children":1672},{"className":646,"code":1671,"language":16,"meta":648,"style":648},"# Set lookup fields using @odata.bind with PascalCase navigation property names\n# CORRECT: use the navigation property name (case-sensitive, must match $metadata)\nguid = client.records.create(\"new_ticket\", {\n    \"new_name\": \"TKT-001\",\n    \"new_CustomerId@odata.bind\": f\"\u002Fnew_customers({customer_id})\",\n    \"new_AgentId@odata.bind\": f\"\u002Fnew_agents({agent_id})\",\n})\n\n# WRONG: lowercase navigation property causes 400 error\n# \"new_customerid@odata.bind\" -> ODataException: undeclared property 'new_customerid'\n",[1673],{"type":42,"tag":87,"props":1674,"children":1675},{"__ignoreMap":648},[1676,1684,1692,1700,1708,1716,1724,1732,1739,1747],{"type":42,"tag":654,"props":1677,"children":1678},{"class":656,"line":657},[1679],{"type":42,"tag":654,"props":1680,"children":1681},{},[1682],{"type":48,"value":1683},"# Set lookup fields using @odata.bind with PascalCase navigation property names\n",{"type":42,"tag":654,"props":1685,"children":1686},{"class":656,"line":666},[1687],{"type":42,"tag":654,"props":1688,"children":1689},{},[1690],{"type":48,"value":1691},"# CORRECT: use the navigation property name (case-sensitive, must match $metadata)\n",{"type":42,"tag":654,"props":1693,"children":1694},{"class":656,"line":675},[1695],{"type":42,"tag":654,"props":1696,"children":1697},{},[1698],{"type":48,"value":1699},"guid = client.records.create(\"new_ticket\", {\n",{"type":42,"tag":654,"props":1701,"children":1702},{"class":656,"line":684},[1703],{"type":42,"tag":654,"props":1704,"children":1705},{},[1706],{"type":48,"value":1707},"    \"new_name\": \"TKT-001\",\n",{"type":42,"tag":654,"props":1709,"children":1710},{"class":656,"line":693},[1711],{"type":42,"tag":654,"props":1712,"children":1713},{},[1714],{"type":48,"value":1715},"    \"new_CustomerId@odata.bind\": f\"\u002Fnew_customers({customer_id})\",\n",{"type":42,"tag":654,"props":1717,"children":1718},{"class":656,"line":702},[1719],{"type":42,"tag":654,"props":1720,"children":1721},{},[1722],{"type":48,"value":1723},"    \"new_AgentId@odata.bind\": f\"\u002Fnew_agents({agent_id})\",\n",{"type":42,"tag":654,"props":1725,"children":1726},{"class":656,"line":711},[1727],{"type":42,"tag":654,"props":1728,"children":1729},{},[1730],{"type":48,"value":1731},"})\n",{"type":42,"tag":654,"props":1733,"children":1734},{"class":656,"line":790},[1735],{"type":42,"tag":654,"props":1736,"children":1737},{"emptyLinePlaceholder":760},[1738],{"type":48,"value":763},{"type":42,"tag":654,"props":1740,"children":1741},{"class":656,"line":798},[1742],{"type":42,"tag":654,"props":1743,"children":1744},{},[1745],{"type":48,"value":1746},"# WRONG: lowercase navigation property causes 400 error\n",{"type":42,"tag":654,"props":1748,"children":1749},{"class":656,"line":807},[1750],{"type":42,"tag":654,"props":1751,"children":1752},{},[1753],{"type":48,"value":1754},"# \"new_customerid@odata.bind\" -> ODataException: undeclared property 'new_customerid'\n",{"type":42,"tag":874,"props":1756,"children":1758},{"id":1757},"update-records",[1759],{"type":48,"value":1760},"Update Records",{"type":42,"tag":644,"props":1762,"children":1764},{"className":646,"code":1763,"language":16,"meta":648,"style":648},"# Single update\nclient.records.update(\"account\", account_id, {\"telephone1\": \"555-0200\"})\n\n# Bulk update (broadcast same change to multiple records)\nclient.records.update(\"account\", [id1, id2, id3], {\"industry\": \"Technology\"})\n",[1765],{"type":42,"tag":87,"props":1766,"children":1767},{"__ignoreMap":648},[1768,1776,1784,1791,1799],{"type":42,"tag":654,"props":1769,"children":1770},{"class":656,"line":657},[1771],{"type":42,"tag":654,"props":1772,"children":1773},{},[1774],{"type":48,"value":1775},"# Single update\n",{"type":42,"tag":654,"props":1777,"children":1778},{"class":656,"line":666},[1779],{"type":42,"tag":654,"props":1780,"children":1781},{},[1782],{"type":48,"value":1783},"client.records.update(\"account\", account_id, {\"telephone1\": \"555-0200\"})\n",{"type":42,"tag":654,"props":1785,"children":1786},{"class":656,"line":675},[1787],{"type":42,"tag":654,"props":1788,"children":1789},{"emptyLinePlaceholder":760},[1790],{"type":48,"value":763},{"type":42,"tag":654,"props":1792,"children":1793},{"class":656,"line":684},[1794],{"type":42,"tag":654,"props":1795,"children":1796},{},[1797],{"type":48,"value":1798},"# Bulk update (broadcast same change to multiple records)\n",{"type":42,"tag":654,"props":1800,"children":1801},{"class":656,"line":693},[1802],{"type":42,"tag":654,"props":1803,"children":1804},{},[1805],{"type":48,"value":1806},"client.records.update(\"account\", [id1, id2, id3], {\"industry\": \"Technology\"})\n",{"type":42,"tag":874,"props":1808,"children":1810},{"id":1809},"upsert-records",[1811],{"type":48,"value":1812},"Upsert Records",{"type":42,"tag":58,"props":1814,"children":1815},{},[1816,1818,1824],{"type":48,"value":1817},"Creates or updates records identified by alternate keys. Single item -> PATCH; multiple items -> ",{"type":42,"tag":87,"props":1819,"children":1821},{"className":1820},[],[1822],{"type":48,"value":1823},"UpsertMultiple",{"type":48,"value":1825}," bulk action.",{"type":42,"tag":1827,"props":1828,"children":1829},"blockquote",{},[1830],{"type":42,"tag":58,"props":1831,"children":1832},{},[1833,1838,1840,1846],{"type":42,"tag":147,"props":1834,"children":1835},{},[1836],{"type":48,"value":1837},"Prerequisite",{"type":48,"value":1839},": The table must have an alternate key configured in Dataverse for the columns used in ",{"type":42,"tag":87,"props":1841,"children":1843},{"className":1842},[],[1844],{"type":48,"value":1845},"alternate_key",{"type":48,"value":1847},". Without it, Dataverse will reject the request with a 400 error.",{"type":42,"tag":644,"props":1849,"children":1851},{"className":646,"code":1850,"language":16,"meta":648,"style":648},"from PowerPlatform.Dataverse.models import UpsertItem\n\n# Single upsert\nclient.records.upsert(\"account\", [\n    UpsertItem(\n        alternate_key={\"accountnumber\": \"ACC-001\"},\n        record={\"name\": \"Contoso Ltd\", \"telephone1\": \"555-0100\"},\n    )\n])\n\n# Bulk upsert (uses UpsertMultiple API automatically)\nclient.records.upsert(\"account\", [\n    UpsertItem(alternate_key={\"accountnumber\": \"ACC-001\"}, record={\"name\": \"Contoso Ltd\"}),\n    UpsertItem(alternate_key={\"accountnumber\": \"ACC-002\"}, record={\"name\": \"Fabrikam Inc\"}),\n])\n\n# Composite alternate key\nclient.records.upsert(\"account\", [\n    UpsertItem(\n        alternate_key={\"accountnumber\": \"ACC-001\", \"address1_postalcode\": \"98052\"},\n        record={\"name\": \"Contoso Ltd\"},\n    )\n])\n\n# Plain dict syntax (no import needed)\nclient.records.upsert(\"account\", [\n    {\"alternate_key\": {\"accountnumber\": \"ACC-001\"}, \"record\": {\"name\": \"Contoso Ltd\"}}\n])\n",[1852],{"type":42,"tag":87,"props":1853,"children":1854},{"__ignoreMap":648},[1855,1863,1870,1878,1886,1894,1902,1910,1918,1926,1933,1941,1948,1956,1964,1971,1978,1986,1993,2000,2008,2016,2023,2030,2037,2045,2052,2060],{"type":42,"tag":654,"props":1856,"children":1857},{"class":656,"line":657},[1858],{"type":42,"tag":654,"props":1859,"children":1860},{},[1861],{"type":48,"value":1862},"from PowerPlatform.Dataverse.models import UpsertItem\n",{"type":42,"tag":654,"props":1864,"children":1865},{"class":656,"line":666},[1866],{"type":42,"tag":654,"props":1867,"children":1868},{"emptyLinePlaceholder":760},[1869],{"type":48,"value":763},{"type":42,"tag":654,"props":1871,"children":1872},{"class":656,"line":675},[1873],{"type":42,"tag":654,"props":1874,"children":1875},{},[1876],{"type":48,"value":1877},"# Single upsert\n",{"type":42,"tag":654,"props":1879,"children":1880},{"class":656,"line":684},[1881],{"type":42,"tag":654,"props":1882,"children":1883},{},[1884],{"type":48,"value":1885},"client.records.upsert(\"account\", [\n",{"type":42,"tag":654,"props":1887,"children":1888},{"class":656,"line":693},[1889],{"type":42,"tag":654,"props":1890,"children":1891},{},[1892],{"type":48,"value":1893},"    UpsertItem(\n",{"type":42,"tag":654,"props":1895,"children":1896},{"class":656,"line":702},[1897],{"type":42,"tag":654,"props":1898,"children":1899},{},[1900],{"type":48,"value":1901},"        alternate_key={\"accountnumber\": \"ACC-001\"},\n",{"type":42,"tag":654,"props":1903,"children":1904},{"class":656,"line":711},[1905],{"type":42,"tag":654,"props":1906,"children":1907},{},[1908],{"type":48,"value":1909},"        record={\"name\": \"Contoso Ltd\", \"telephone1\": \"555-0100\"},\n",{"type":42,"tag":654,"props":1911,"children":1912},{"class":656,"line":790},[1913],{"type":42,"tag":654,"props":1914,"children":1915},{},[1916],{"type":48,"value":1917},"    )\n",{"type":42,"tag":654,"props":1919,"children":1920},{"class":656,"line":798},[1921],{"type":42,"tag":654,"props":1922,"children":1923},{},[1924],{"type":48,"value":1925},"])\n",{"type":42,"tag":654,"props":1927,"children":1928},{"class":656,"line":807},[1929],{"type":42,"tag":654,"props":1930,"children":1931},{"emptyLinePlaceholder":760},[1932],{"type":48,"value":763},{"type":42,"tag":654,"props":1934,"children":1935},{"class":656,"line":816},[1936],{"type":42,"tag":654,"props":1937,"children":1938},{},[1939],{"type":48,"value":1940},"# Bulk upsert (uses UpsertMultiple API automatically)\n",{"type":42,"tag":654,"props":1942,"children":1943},{"class":656,"line":825},[1944],{"type":42,"tag":654,"props":1945,"children":1946},{},[1947],{"type":48,"value":1885},{"type":42,"tag":654,"props":1949,"children":1950},{"class":656,"line":834},[1951],{"type":42,"tag":654,"props":1952,"children":1953},{},[1954],{"type":48,"value":1955},"    UpsertItem(alternate_key={\"accountnumber\": \"ACC-001\"}, record={\"name\": \"Contoso Ltd\"}),\n",{"type":42,"tag":654,"props":1957,"children":1958},{"class":656,"line":843},[1959],{"type":42,"tag":654,"props":1960,"children":1961},{},[1962],{"type":48,"value":1963},"    UpsertItem(alternate_key={\"accountnumber\": \"ACC-002\"}, record={\"name\": \"Fabrikam Inc\"}),\n",{"type":42,"tag":654,"props":1965,"children":1966},{"class":656,"line":851},[1967],{"type":42,"tag":654,"props":1968,"children":1969},{},[1970],{"type":48,"value":1925},{"type":42,"tag":654,"props":1972,"children":1973},{"class":656,"line":860},[1974],{"type":42,"tag":654,"props":1975,"children":1976},{"emptyLinePlaceholder":760},[1977],{"type":48,"value":763},{"type":42,"tag":654,"props":1979,"children":1980},{"class":656,"line":1098},[1981],{"type":42,"tag":654,"props":1982,"children":1983},{},[1984],{"type":48,"value":1985},"# Composite alternate key\n",{"type":42,"tag":654,"props":1987,"children":1988},{"class":656,"line":1107},[1989],{"type":42,"tag":654,"props":1990,"children":1991},{},[1992],{"type":48,"value":1885},{"type":42,"tag":654,"props":1994,"children":1995},{"class":656,"line":1286},[1996],{"type":42,"tag":654,"props":1997,"children":1998},{},[1999],{"type":48,"value":1893},{"type":42,"tag":654,"props":2001,"children":2002},{"class":656,"line":1295},[2003],{"type":42,"tag":654,"props":2004,"children":2005},{},[2006],{"type":48,"value":2007},"        alternate_key={\"accountnumber\": \"ACC-001\", \"address1_postalcode\": \"98052\"},\n",{"type":42,"tag":654,"props":2009,"children":2010},{"class":656,"line":1303},[2011],{"type":42,"tag":654,"props":2012,"children":2013},{},[2014],{"type":48,"value":2015},"        record={\"name\": \"Contoso Ltd\"},\n",{"type":42,"tag":654,"props":2017,"children":2018},{"class":656,"line":1312},[2019],{"type":42,"tag":654,"props":2020,"children":2021},{},[2022],{"type":48,"value":1917},{"type":42,"tag":654,"props":2024,"children":2025},{"class":656,"line":30},[2026],{"type":42,"tag":654,"props":2027,"children":2028},{},[2029],{"type":48,"value":1925},{"type":42,"tag":654,"props":2031,"children":2032},{"class":656,"line":1328},[2033],{"type":42,"tag":654,"props":2034,"children":2035},{"emptyLinePlaceholder":760},[2036],{"type":48,"value":763},{"type":42,"tag":654,"props":2038,"children":2039},{"class":656,"line":1336},[2040],{"type":42,"tag":654,"props":2041,"children":2042},{},[2043],{"type":48,"value":2044},"# Plain dict syntax (no import needed)\n",{"type":42,"tag":654,"props":2046,"children":2047},{"class":656,"line":1344},[2048],{"type":42,"tag":654,"props":2049,"children":2050},{},[2051],{"type":48,"value":1885},{"type":42,"tag":654,"props":2053,"children":2054},{"class":656,"line":1353},[2055],{"type":42,"tag":654,"props":2056,"children":2057},{},[2058],{"type":48,"value":2059},"    {\"alternate_key\": {\"accountnumber\": \"ACC-001\"}, \"record\": {\"name\": \"Contoso Ltd\"}}\n",{"type":42,"tag":654,"props":2061,"children":2062},{"class":656,"line":1362},[2063],{"type":42,"tag":654,"props":2064,"children":2065},{},[2066],{"type":48,"value":1925},{"type":42,"tag":874,"props":2068,"children":2070},{"id":2069},"delete-records",[2071],{"type":48,"value":2072},"Delete Records",{"type":42,"tag":644,"props":2074,"children":2076},{"className":646,"code":2075,"language":16,"meta":648,"style":648},"# Single delete\nclient.records.delete(\"account\", account_id)\n\n# Bulk delete (uses BulkDelete API)\nclient.records.delete(\"account\", [id1, id2, id3], use_bulk_delete=True)\n",[2077],{"type":42,"tag":87,"props":2078,"children":2079},{"__ignoreMap":648},[2080,2088,2096,2103,2111],{"type":42,"tag":654,"props":2081,"children":2082},{"class":656,"line":657},[2083],{"type":42,"tag":654,"props":2084,"children":2085},{},[2086],{"type":48,"value":2087},"# Single delete\n",{"type":42,"tag":654,"props":2089,"children":2090},{"class":656,"line":666},[2091],{"type":42,"tag":654,"props":2092,"children":2093},{},[2094],{"type":48,"value":2095},"client.records.delete(\"account\", account_id)\n",{"type":42,"tag":654,"props":2097,"children":2098},{"class":656,"line":675},[2099],{"type":42,"tag":654,"props":2100,"children":2101},{"emptyLinePlaceholder":760},[2102],{"type":48,"value":763},{"type":42,"tag":654,"props":2104,"children":2105},{"class":656,"line":684},[2106],{"type":42,"tag":654,"props":2107,"children":2108},{},[2109],{"type":48,"value":2110},"# Bulk delete (uses BulkDelete API)\n",{"type":42,"tag":654,"props":2112,"children":2113},{"class":656,"line":693},[2114],{"type":42,"tag":654,"props":2115,"children":2116},{},[2117],{"type":48,"value":2118},"client.records.delete(\"account\", [id1, id2, id3], use_bulk_delete=True)\n",{"type":42,"tag":70,"props":2120,"children":2122},{"id":2121},"dataframe-operations",[2123],{"type":48,"value":2124},"DataFrame Operations",{"type":42,"tag":58,"props":2126,"children":2127},{},[2128,2130,2135],{"type":48,"value":2129},"The SDK provides DataFrame wrappers for all CRUD operations via the ",{"type":42,"tag":87,"props":2131,"children":2133},{"className":2132},[],[2134],{"type":48,"value":591},{"type":48,"value":2136}," namespace, using pandas DataFrames and Series as input\u002Foutput.",{"type":42,"tag":1827,"props":2138,"children":2139},{},[2140],{"type":42,"tag":58,"props":2141,"children":2142},{},[2143,2148,2150,2155,2157,2163,2165,2170,2172,2178,2180,2185],{"type":42,"tag":147,"props":2144,"children":2145},{},[2146],{"type":48,"value":2147},"Note:",{"type":48,"value":2149}," ",{"type":42,"tag":87,"props":2151,"children":2153},{"className":2152},[],[2154],{"type":48,"value":621},{"type":48,"value":2156}," is deprecated. Use ",{"type":42,"tag":87,"props":2158,"children":2160},{"className":2159},[],[2161],{"type":48,"value":2162},"client.query.builder(table).select(...).where(...).execute().to_dataframe()",{"type":48,"value":2164}," instead. ",{"type":42,"tag":87,"props":2166,"children":2168},{"className":2167},[],[2169],{"type":48,"value":405},{"type":48,"value":2171}," (without ",{"type":42,"tag":87,"props":2173,"children":2175},{"className":2174},[],[2176],{"type":48,"value":2177},".execute()",{"type":48,"value":2179},") is also deprecated — always call ",{"type":42,"tag":87,"props":2181,"children":2183},{"className":2182},[],[2184],{"type":48,"value":2177},{"type":48,"value":2186}," first.",{"type":42,"tag":644,"props":2188,"children":2190},{"className":646,"code":2189,"language":16,"meta":648,"style":648},"import pandas as pd\n\n# Query records -- returns a single DataFrame (GA pattern: .execute().to_dataframe())\nfrom PowerPlatform.Dataverse.models.filters import col\ndf = client.query.builder(\"account\").where(col(\"statecode\") == 0).select(\"name\").execute().to_dataframe()\nprint(f\"Got {len(df)} rows\")\n\n# Limit results with top\ndf = client.query.builder(\"account\").select(\"name\").top(100).execute().to_dataframe()\n\n# Via records.list() (simpler for basic queries)\ndf = client.records.list(\"account\", filter=\"statecode eq 0\", select=[\"name\"]).to_dataframe()\n\n# Create records from a DataFrame (returns a Series of GUIDs)\nnew_accounts = pd.DataFrame([\n    {\"name\": \"Contoso\", \"telephone1\": \"555-0100\"},\n    {\"name\": \"Fabrikam\", \"telephone1\": \"555-0200\"},\n])\nnew_accounts[\"accountid\"] = client.dataframe.create(\"account\", new_accounts)\n\n# Update records from a DataFrame (id_column identifies the GUID column)\nnew_accounts[\"telephone1\"] = [\"555-0199\", \"555-0299\"]\nclient.dataframe.update(\"account\", new_accounts, id_column=\"accountid\")\n\n# Clear a field by setting clear_nulls=True (by default, NaN\u002FNone fields are skipped)\ndf = pd.DataFrame([{\"accountid\": \"guid-1\", \"websiteurl\": None}])\nclient.dataframe.update(\"account\", df, id_column=\"accountid\", clear_nulls=True)\n\n# Delete records by passing a Series of GUIDs\nclient.dataframe.delete(\"account\", new_accounts[\"accountid\"])\n",[2191],{"type":42,"tag":87,"props":2192,"children":2193},{"__ignoreMap":648},[2194,2202,2209,2217,2224,2232,2240,2247,2255,2263,2270,2278,2286,2293,2301,2309,2317,2325,2332,2340,2347,2355,2363,2371,2378,2386,2394,2402,2409,2417],{"type":42,"tag":654,"props":2195,"children":2196},{"class":656,"line":657},[2197],{"type":42,"tag":654,"props":2198,"children":2199},{},[2200],{"type":48,"value":2201},"import pandas as pd\n",{"type":42,"tag":654,"props":2203,"children":2204},{"class":656,"line":666},[2205],{"type":42,"tag":654,"props":2206,"children":2207},{"emptyLinePlaceholder":760},[2208],{"type":48,"value":763},{"type":42,"tag":654,"props":2210,"children":2211},{"class":656,"line":675},[2212],{"type":42,"tag":654,"props":2213,"children":2214},{},[2215],{"type":48,"value":2216},"# Query records -- returns a single DataFrame (GA pattern: .execute().to_dataframe())\n",{"type":42,"tag":654,"props":2218,"children":2219},{"class":656,"line":684},[2220],{"type":42,"tag":654,"props":2221,"children":2222},{},[2223],{"type":48,"value":1153},{"type":42,"tag":654,"props":2225,"children":2226},{"class":656,"line":693},[2227],{"type":42,"tag":654,"props":2228,"children":2229},{},[2230],{"type":48,"value":2231},"df = client.query.builder(\"account\").where(col(\"statecode\") == 0).select(\"name\").execute().to_dataframe()\n",{"type":42,"tag":654,"props":2233,"children":2234},{"class":656,"line":702},[2235],{"type":42,"tag":654,"props":2236,"children":2237},{},[2238],{"type":48,"value":2239},"print(f\"Got {len(df)} rows\")\n",{"type":42,"tag":654,"props":2241,"children":2242},{"class":656,"line":711},[2243],{"type":42,"tag":654,"props":2244,"children":2245},{"emptyLinePlaceholder":760},[2246],{"type":48,"value":763},{"type":42,"tag":654,"props":2248,"children":2249},{"class":656,"line":790},[2250],{"type":42,"tag":654,"props":2251,"children":2252},{},[2253],{"type":48,"value":2254},"# Limit results with top\n",{"type":42,"tag":654,"props":2256,"children":2257},{"class":656,"line":798},[2258],{"type":42,"tag":654,"props":2259,"children":2260},{},[2261],{"type":48,"value":2262},"df = client.query.builder(\"account\").select(\"name\").top(100).execute().to_dataframe()\n",{"type":42,"tag":654,"props":2264,"children":2265},{"class":656,"line":807},[2266],{"type":42,"tag":654,"props":2267,"children":2268},{"emptyLinePlaceholder":760},[2269],{"type":48,"value":763},{"type":42,"tag":654,"props":2271,"children":2272},{"class":656,"line":816},[2273],{"type":42,"tag":654,"props":2274,"children":2275},{},[2276],{"type":48,"value":2277},"# Via records.list() (simpler for basic queries)\n",{"type":42,"tag":654,"props":2279,"children":2280},{"class":656,"line":825},[2281],{"type":42,"tag":654,"props":2282,"children":2283},{},[2284],{"type":48,"value":2285},"df = client.records.list(\"account\", filter=\"statecode eq 0\", select=[\"name\"]).to_dataframe()\n",{"type":42,"tag":654,"props":2287,"children":2288},{"class":656,"line":834},[2289],{"type":42,"tag":654,"props":2290,"children":2291},{"emptyLinePlaceholder":760},[2292],{"type":48,"value":763},{"type":42,"tag":654,"props":2294,"children":2295},{"class":656,"line":843},[2296],{"type":42,"tag":654,"props":2297,"children":2298},{},[2299],{"type":48,"value":2300},"# Create records from a DataFrame (returns a Series of GUIDs)\n",{"type":42,"tag":654,"props":2302,"children":2303},{"class":656,"line":851},[2304],{"type":42,"tag":654,"props":2305,"children":2306},{},[2307],{"type":48,"value":2308},"new_accounts = pd.DataFrame([\n",{"type":42,"tag":654,"props":2310,"children":2311},{"class":656,"line":860},[2312],{"type":42,"tag":654,"props":2313,"children":2314},{},[2315],{"type":48,"value":2316},"    {\"name\": \"Contoso\", \"telephone1\": \"555-0100\"},\n",{"type":42,"tag":654,"props":2318,"children":2319},{"class":656,"line":1098},[2320],{"type":42,"tag":654,"props":2321,"children":2322},{},[2323],{"type":48,"value":2324},"    {\"name\": \"Fabrikam\", \"telephone1\": \"555-0200\"},\n",{"type":42,"tag":654,"props":2326,"children":2327},{"class":656,"line":1107},[2328],{"type":42,"tag":654,"props":2329,"children":2330},{},[2331],{"type":48,"value":1925},{"type":42,"tag":654,"props":2333,"children":2334},{"class":656,"line":1286},[2335],{"type":42,"tag":654,"props":2336,"children":2337},{},[2338],{"type":48,"value":2339},"new_accounts[\"accountid\"] = client.dataframe.create(\"account\", new_accounts)\n",{"type":42,"tag":654,"props":2341,"children":2342},{"class":656,"line":1295},[2343],{"type":42,"tag":654,"props":2344,"children":2345},{"emptyLinePlaceholder":760},[2346],{"type":48,"value":763},{"type":42,"tag":654,"props":2348,"children":2349},{"class":656,"line":1303},[2350],{"type":42,"tag":654,"props":2351,"children":2352},{},[2353],{"type":48,"value":2354},"# Update records from a DataFrame (id_column identifies the GUID column)\n",{"type":42,"tag":654,"props":2356,"children":2357},{"class":656,"line":1312},[2358],{"type":42,"tag":654,"props":2359,"children":2360},{},[2361],{"type":48,"value":2362},"new_accounts[\"telephone1\"] = [\"555-0199\", \"555-0299\"]\n",{"type":42,"tag":654,"props":2364,"children":2365},{"class":656,"line":30},[2366],{"type":42,"tag":654,"props":2367,"children":2368},{},[2369],{"type":48,"value":2370},"client.dataframe.update(\"account\", new_accounts, id_column=\"accountid\")\n",{"type":42,"tag":654,"props":2372,"children":2373},{"class":656,"line":1328},[2374],{"type":42,"tag":654,"props":2375,"children":2376},{"emptyLinePlaceholder":760},[2377],{"type":48,"value":763},{"type":42,"tag":654,"props":2379,"children":2380},{"class":656,"line":1336},[2381],{"type":42,"tag":654,"props":2382,"children":2383},{},[2384],{"type":48,"value":2385},"# Clear a field by setting clear_nulls=True (by default, NaN\u002FNone fields are skipped)\n",{"type":42,"tag":654,"props":2387,"children":2388},{"class":656,"line":1344},[2389],{"type":42,"tag":654,"props":2390,"children":2391},{},[2392],{"type":48,"value":2393},"df = pd.DataFrame([{\"accountid\": \"guid-1\", \"websiteurl\": None}])\n",{"type":42,"tag":654,"props":2395,"children":2396},{"class":656,"line":1353},[2397],{"type":42,"tag":654,"props":2398,"children":2399},{},[2400],{"type":48,"value":2401},"client.dataframe.update(\"account\", df, id_column=\"accountid\", clear_nulls=True)\n",{"type":42,"tag":654,"props":2403,"children":2404},{"class":656,"line":1362},[2405],{"type":42,"tag":654,"props":2406,"children":2407},{"emptyLinePlaceholder":760},[2408],{"type":48,"value":763},{"type":42,"tag":654,"props":2410,"children":2411},{"class":656,"line":1370},[2412],{"type":42,"tag":654,"props":2413,"children":2414},{},[2415],{"type":48,"value":2416},"# Delete records by passing a Series of GUIDs\n",{"type":42,"tag":654,"props":2418,"children":2419},{"class":656,"line":1379},[2420],{"type":42,"tag":654,"props":2421,"children":2422},{},[2423],{"type":48,"value":2424},"client.dataframe.delete(\"account\", new_accounts[\"accountid\"])\n",{"type":42,"tag":70,"props":2426,"children":2428},{"id":2427},"sql-queries",[2429],{"type":48,"value":2430},"SQL Queries",{"type":42,"tag":58,"props":2432,"children":2433},{},[2434,2436,2441],{"type":48,"value":2435},"SQL queries are ",{"type":42,"tag":147,"props":2437,"children":2438},{},[2439],{"type":48,"value":2440},"read-only",{"type":48,"value":2442}," and support limited SQL syntax. A single SELECT statement with optional WHERE, TOP (integer literal), ORDER BY (column names only), and a simple table alias after FROM is supported. But JOIN and subqueries may not be. Refer to the Dataverse documentation for the current feature set.",{"type":42,"tag":644,"props":2444,"children":2446},{"className":646,"code":2445,"language":16,"meta":648,"style":648},"results = client.query.sql(\n    \"SELECT TOP 10 accountid, name FROM account WHERE statecode = 0\"\n)\nfor record in results:\n    print(record[\"name\"])\n",[2447],{"type":42,"tag":87,"props":2448,"children":2449},{"__ignoreMap":648},[2450,2458,2466,2473,2481],{"type":42,"tag":654,"props":2451,"children":2452},{"class":656,"line":657},[2453],{"type":42,"tag":654,"props":2454,"children":2455},{},[2456],{"type":48,"value":2457},"results = client.query.sql(\n",{"type":42,"tag":654,"props":2459,"children":2460},{"class":656,"line":666},[2461],{"type":42,"tag":654,"props":2462,"children":2463},{},[2464],{"type":48,"value":2465},"    \"SELECT TOP 10 accountid, name FROM account WHERE statecode = 0\"\n",{"type":42,"tag":654,"props":2467,"children":2468},{"class":656,"line":675},[2469],{"type":42,"tag":654,"props":2470,"children":2471},{},[2472],{"type":48,"value":708},{"type":42,"tag":654,"props":2474,"children":2475},{"class":656,"line":684},[2476],{"type":42,"tag":654,"props":2477,"children":2478},{},[2479],{"type":48,"value":2480},"for record in results:\n",{"type":42,"tag":654,"props":2482,"children":2483},{"class":656,"line":693},[2484],{"type":42,"tag":654,"props":2485,"children":2486},{},[2487],{"type":48,"value":1113},{"type":42,"tag":70,"props":2489,"children":2491},{"id":2490},"fetchxml-queries",[2492],{"type":48,"value":2493},"FetchXML Queries",{"type":42,"tag":58,"props":2495,"children":2496},{},[2497,2503,2505,2511,2513,2518,2520,2525,2527,2533],{"type":42,"tag":87,"props":2498,"children":2500},{"className":2499},[],[2501],{"type":48,"value":2502},"client.query.fetchxml(xml)",{"type":48,"value":2504}," returns an inert ",{"type":42,"tag":87,"props":2506,"children":2508},{"className":2507},[],[2509],{"type":48,"value":2510},"FetchXmlQuery",{"type":48,"value":2512}," object — ",{"type":42,"tag":147,"props":2514,"children":2515},{},[2516],{"type":48,"value":2517},"no HTTP request is made",{"type":48,"value":2519}," until ",{"type":42,"tag":87,"props":2521,"children":2523},{"className":2522},[],[2524],{"type":48,"value":2177},{"type":48,"value":2526}," or ",{"type":42,"tag":87,"props":2528,"children":2530},{"className":2529},[],[2531],{"type":48,"value":2532},".execute_pages()",{"type":48,"value":2534}," is called.",{"type":42,"tag":644,"props":2536,"children":2538},{"className":646,"code":2537,"language":16,"meta":648,"style":648},"xml = \"\"\"\n\u003Cfetch top=\"50\">\n  \u003Centity name=\"account\">\n    \u003Cattribute name=\"accountid\" \u002F>\n    \u003Cattribute name=\"name\" \u002F>\n    \u003Cfilter>\n      \u003Ccondition attribute=\"statecode\" operator=\"eq\" value=\"0\" \u002F>\n    \u003C\u002Ffilter>\n  \u003C\u002Fentity>\n\u003C\u002Ffetch>\n\"\"\"\n\n# Load all results into memory (simple, small-to-medium sets)\nquery = client.query.fetchxml(xml)\nresult = query.execute()              # returns QueryResult — all pages fetched upfront\nfor record in result:\n    print(record[\"name\"])\n\n# Stream page-by-page (large sets or early exit)\nfor page in query.execute_pages():    # yields one QueryResult per HTTP page\n    process(page.to_dataframe())\n",[2539],{"type":42,"tag":87,"props":2540,"children":2541},{"__ignoreMap":648},[2542,2550,2558,2566,2574,2582,2590,2598,2606,2614,2622,2630,2637,2645,2653,2661,2668,2675,2682,2690,2698],{"type":42,"tag":654,"props":2543,"children":2544},{"class":656,"line":657},[2545],{"type":42,"tag":654,"props":2546,"children":2547},{},[2548],{"type":48,"value":2549},"xml = \"\"\"\n",{"type":42,"tag":654,"props":2551,"children":2552},{"class":656,"line":666},[2553],{"type":42,"tag":654,"props":2554,"children":2555},{},[2556],{"type":48,"value":2557},"\u003Cfetch top=\"50\">\n",{"type":42,"tag":654,"props":2559,"children":2560},{"class":656,"line":675},[2561],{"type":42,"tag":654,"props":2562,"children":2563},{},[2564],{"type":48,"value":2565},"  \u003Centity name=\"account\">\n",{"type":42,"tag":654,"props":2567,"children":2568},{"class":656,"line":684},[2569],{"type":42,"tag":654,"props":2570,"children":2571},{},[2572],{"type":48,"value":2573},"    \u003Cattribute name=\"accountid\" \u002F>\n",{"type":42,"tag":654,"props":2575,"children":2576},{"class":656,"line":693},[2577],{"type":42,"tag":654,"props":2578,"children":2579},{},[2580],{"type":48,"value":2581},"    \u003Cattribute name=\"name\" \u002F>\n",{"type":42,"tag":654,"props":2583,"children":2584},{"class":656,"line":702},[2585],{"type":42,"tag":654,"props":2586,"children":2587},{},[2588],{"type":48,"value":2589},"    \u003Cfilter>\n",{"type":42,"tag":654,"props":2591,"children":2592},{"class":656,"line":711},[2593],{"type":42,"tag":654,"props":2594,"children":2595},{},[2596],{"type":48,"value":2597},"      \u003Ccondition attribute=\"statecode\" operator=\"eq\" value=\"0\" \u002F>\n",{"type":42,"tag":654,"props":2599,"children":2600},{"class":656,"line":790},[2601],{"type":42,"tag":654,"props":2602,"children":2603},{},[2604],{"type":48,"value":2605},"    \u003C\u002Ffilter>\n",{"type":42,"tag":654,"props":2607,"children":2608},{"class":656,"line":798},[2609],{"type":42,"tag":654,"props":2610,"children":2611},{},[2612],{"type":48,"value":2613},"  \u003C\u002Fentity>\n",{"type":42,"tag":654,"props":2615,"children":2616},{"class":656,"line":807},[2617],{"type":42,"tag":654,"props":2618,"children":2619},{},[2620],{"type":48,"value":2621},"\u003C\u002Ffetch>\n",{"type":42,"tag":654,"props":2623,"children":2624},{"class":656,"line":816},[2625],{"type":42,"tag":654,"props":2626,"children":2627},{},[2628],{"type":48,"value":2629},"\"\"\"\n",{"type":42,"tag":654,"props":2631,"children":2632},{"class":656,"line":825},[2633],{"type":42,"tag":654,"props":2634,"children":2635},{"emptyLinePlaceholder":760},[2636],{"type":48,"value":763},{"type":42,"tag":654,"props":2638,"children":2639},{"class":656,"line":834},[2640],{"type":42,"tag":654,"props":2641,"children":2642},{},[2643],{"type":48,"value":2644},"# Load all results into memory (simple, small-to-medium sets)\n",{"type":42,"tag":654,"props":2646,"children":2647},{"class":656,"line":843},[2648],{"type":42,"tag":654,"props":2649,"children":2650},{},[2651],{"type":48,"value":2652},"query = client.query.fetchxml(xml)\n",{"type":42,"tag":654,"props":2654,"children":2655},{"class":656,"line":851},[2656],{"type":42,"tag":654,"props":2657,"children":2658},{},[2659],{"type":48,"value":2660},"result = query.execute()              # returns QueryResult — all pages fetched upfront\n",{"type":42,"tag":654,"props":2662,"children":2663},{"class":656,"line":860},[2664],{"type":42,"tag":654,"props":2665,"children":2666},{},[2667],{"type":48,"value":1104},{"type":42,"tag":654,"props":2669,"children":2670},{"class":656,"line":1098},[2671],{"type":42,"tag":654,"props":2672,"children":2673},{},[2674],{"type":48,"value":1113},{"type":42,"tag":654,"props":2676,"children":2677},{"class":656,"line":1107},[2678],{"type":42,"tag":654,"props":2679,"children":2680},{"emptyLinePlaceholder":760},[2681],{"type":48,"value":763},{"type":42,"tag":654,"props":2683,"children":2684},{"class":656,"line":1286},[2685],{"type":42,"tag":654,"props":2686,"children":2687},{},[2688],{"type":48,"value":2689},"# Stream page-by-page (large sets or early exit)\n",{"type":42,"tag":654,"props":2691,"children":2692},{"class":656,"line":1295},[2693],{"type":42,"tag":654,"props":2694,"children":2695},{},[2696],{"type":48,"value":2697},"for page in query.execute_pages():    # yields one QueryResult per HTTP page\n",{"type":42,"tag":654,"props":2699,"children":2700},{"class":656,"line":1303},[2701],{"type":42,"tag":654,"props":2702,"children":2703},{},[2704],{"type":48,"value":2705},"    process(page.to_dataframe())\n",{"type":42,"tag":70,"props":2707,"children":2709},{"id":2708},"table-management",[2710],{"type":48,"value":2711},"Table Management",{"type":42,"tag":874,"props":2713,"children":2715},{"id":2714},"create-custom-tables",[2716],{"type":48,"value":2717},"Create Custom Tables",{"type":42,"tag":644,"props":2719,"children":2721},{"className":646,"code":2720,"language":16,"meta":648,"style":648},"# Create table with columns (include customization prefix!)\ntable_info = client.tables.create(\n    \"new_Product\",\n    {\n        \"new_Code\": \"string\",\n        \"new_Price\": \"decimal\",\n        \"new_Active\": \"bool\",\n        \"new_Quantity\": \"int\",\n    },\n)\n\n# With solution assignment and custom primary column\ntable_info = client.tables.create(\n    \"new_Product\",\n    {\"new_Code\": \"string\", \"new_Price\": \"decimal\"},\n    solution=\"MyPublisher\",\n    primary_column=\"new_ProductCode\",\n)\n",[2722],{"type":42,"tag":87,"props":2723,"children":2724},{"__ignoreMap":648},[2725,2733,2741,2749,2757,2765,2773,2781,2789,2797,2804,2811,2819,2826,2833,2841,2849,2857],{"type":42,"tag":654,"props":2726,"children":2727},{"class":656,"line":657},[2728],{"type":42,"tag":654,"props":2729,"children":2730},{},[2731],{"type":48,"value":2732},"# Create table with columns (include customization prefix!)\n",{"type":42,"tag":654,"props":2734,"children":2735},{"class":656,"line":666},[2736],{"type":42,"tag":654,"props":2737,"children":2738},{},[2739],{"type":48,"value":2740},"table_info = client.tables.create(\n",{"type":42,"tag":654,"props":2742,"children":2743},{"class":656,"line":675},[2744],{"type":42,"tag":654,"props":2745,"children":2746},{},[2747],{"type":48,"value":2748},"    \"new_Product\",\n",{"type":42,"tag":654,"props":2750,"children":2751},{"class":656,"line":684},[2752],{"type":42,"tag":654,"props":2753,"children":2754},{},[2755],{"type":48,"value":2756},"    {\n",{"type":42,"tag":654,"props":2758,"children":2759},{"class":656,"line":693},[2760],{"type":42,"tag":654,"props":2761,"children":2762},{},[2763],{"type":48,"value":2764},"        \"new_Code\": \"string\",\n",{"type":42,"tag":654,"props":2766,"children":2767},{"class":656,"line":702},[2768],{"type":42,"tag":654,"props":2769,"children":2770},{},[2771],{"type":48,"value":2772},"        \"new_Price\": \"decimal\",\n",{"type":42,"tag":654,"props":2774,"children":2775},{"class":656,"line":711},[2776],{"type":42,"tag":654,"props":2777,"children":2778},{},[2779],{"type":48,"value":2780},"        \"new_Active\": \"bool\",\n",{"type":42,"tag":654,"props":2782,"children":2783},{"class":656,"line":790},[2784],{"type":42,"tag":654,"props":2785,"children":2786},{},[2787],{"type":48,"value":2788},"        \"new_Quantity\": \"int\",\n",{"type":42,"tag":654,"props":2790,"children":2791},{"class":656,"line":798},[2792],{"type":42,"tag":654,"props":2793,"children":2794},{},[2795],{"type":48,"value":2796},"    },\n",{"type":42,"tag":654,"props":2798,"children":2799},{"class":656,"line":807},[2800],{"type":42,"tag":654,"props":2801,"children":2802},{},[2803],{"type":48,"value":708},{"type":42,"tag":654,"props":2805,"children":2806},{"class":656,"line":816},[2807],{"type":42,"tag":654,"props":2808,"children":2809},{"emptyLinePlaceholder":760},[2810],{"type":48,"value":763},{"type":42,"tag":654,"props":2812,"children":2813},{"class":656,"line":825},[2814],{"type":42,"tag":654,"props":2815,"children":2816},{},[2817],{"type":48,"value":2818},"# With solution assignment and custom primary column\n",{"type":42,"tag":654,"props":2820,"children":2821},{"class":656,"line":834},[2822],{"type":42,"tag":654,"props":2823,"children":2824},{},[2825],{"type":48,"value":2740},{"type":42,"tag":654,"props":2827,"children":2828},{"class":656,"line":843},[2829],{"type":42,"tag":654,"props":2830,"children":2831},{},[2832],{"type":48,"value":2748},{"type":42,"tag":654,"props":2834,"children":2835},{"class":656,"line":851},[2836],{"type":42,"tag":654,"props":2837,"children":2838},{},[2839],{"type":48,"value":2840},"    {\"new_Code\": \"string\", \"new_Price\": \"decimal\"},\n",{"type":42,"tag":654,"props":2842,"children":2843},{"class":656,"line":860},[2844],{"type":42,"tag":654,"props":2845,"children":2846},{},[2847],{"type":48,"value":2848},"    solution=\"MyPublisher\",\n",{"type":42,"tag":654,"props":2850,"children":2851},{"class":656,"line":1098},[2852],{"type":42,"tag":654,"props":2853,"children":2854},{},[2855],{"type":48,"value":2856},"    primary_column=\"new_ProductCode\",\n",{"type":42,"tag":654,"props":2858,"children":2859},{"class":656,"line":1107},[2860],{"type":42,"tag":654,"props":2861,"children":2862},{},[2863],{"type":48,"value":708},{"type":42,"tag":874,"props":2865,"children":2867},{"id":2866},"supported-column-types",[2868],{"type":48,"value":2869},"Supported Column Types",{"type":42,"tag":58,"props":2871,"children":2872},{},[2873],{"type":48,"value":2874},"Types on the same line map to the same exact format under the hood",{"type":42,"tag":77,"props":2876,"children":2877},{},[2878,2896,2914,2932,2950,2968,2986,3004,3015],{"type":42,"tag":81,"props":2879,"children":2880},{},[2881,2887,2888,2894],{"type":42,"tag":87,"props":2882,"children":2884},{"className":2883},[],[2885],{"type":48,"value":2886},"\"string\"",{"type":48,"value":2526},{"type":42,"tag":87,"props":2889,"children":2891},{"className":2890},[],[2892],{"type":48,"value":2893},"\"text\"",{"type":48,"value":2895}," - Single line of text",{"type":42,"tag":81,"props":2897,"children":2898},{},[2899,2905,2906,2912],{"type":42,"tag":87,"props":2900,"children":2902},{"className":2901},[],[2903],{"type":48,"value":2904},"\"memo\"",{"type":48,"value":2526},{"type":42,"tag":87,"props":2907,"children":2909},{"className":2908},[],[2910],{"type":48,"value":2911},"\"multiline\"",{"type":48,"value":2913}," - Multiple lines of text (4000 character default)",{"type":42,"tag":81,"props":2915,"children":2916},{},[2917,2923,2924,2930],{"type":42,"tag":87,"props":2918,"children":2920},{"className":2919},[],[2921],{"type":48,"value":2922},"\"int\"",{"type":48,"value":2526},{"type":42,"tag":87,"props":2925,"children":2927},{"className":2926},[],[2928],{"type":48,"value":2929},"\"integer\"",{"type":48,"value":2931}," - Whole number",{"type":42,"tag":81,"props":2933,"children":2934},{},[2935,2941,2942,2948],{"type":42,"tag":87,"props":2936,"children":2938},{"className":2937},[],[2939],{"type":48,"value":2940},"\"decimal\"",{"type":48,"value":2526},{"type":42,"tag":87,"props":2943,"children":2945},{"className":2944},[],[2946],{"type":48,"value":2947},"\"money\"",{"type":48,"value":2949}," - Decimal number",{"type":42,"tag":81,"props":2951,"children":2952},{},[2953,2959,2960,2966],{"type":42,"tag":87,"props":2954,"children":2956},{"className":2955},[],[2957],{"type":48,"value":2958},"\"float\"",{"type":48,"value":2526},{"type":42,"tag":87,"props":2961,"children":2963},{"className":2962},[],[2964],{"type":48,"value":2965},"\"double\"",{"type":48,"value":2967}," - Floating point number",{"type":42,"tag":81,"props":2969,"children":2970},{},[2971,2977,2978,2984],{"type":42,"tag":87,"props":2972,"children":2974},{"className":2973},[],[2975],{"type":48,"value":2976},"\"bool\"",{"type":48,"value":2526},{"type":42,"tag":87,"props":2979,"children":2981},{"className":2980},[],[2982],{"type":48,"value":2983},"\"boolean\"",{"type":48,"value":2985}," - Yes\u002FNo",{"type":42,"tag":81,"props":2987,"children":2988},{},[2989,2995,2996,3002],{"type":42,"tag":87,"props":2990,"children":2992},{"className":2991},[],[2993],{"type":48,"value":2994},"\"datetime\"",{"type":48,"value":2526},{"type":42,"tag":87,"props":2997,"children":2999},{"className":2998},[],[3000],{"type":48,"value":3001},"\"date\"",{"type":48,"value":3003}," - Date",{"type":42,"tag":81,"props":3005,"children":3006},{},[3007,3013],{"type":42,"tag":87,"props":3008,"children":3010},{"className":3009},[],[3011],{"type":48,"value":3012},"\"file\"",{"type":48,"value":3014}," - File column",{"type":42,"tag":81,"props":3016,"children":3017},{},[3018],{"type":48,"value":3019},"Enum subclass - Local option set (picklist)",{"type":42,"tag":874,"props":3021,"children":3023},{"id":3022},"manage-columns",[3024],{"type":48,"value":3025},"Manage Columns",{"type":42,"tag":644,"props":3027,"children":3029},{"className":646,"code":3028,"language":16,"meta":648,"style":648},"# Add columns to existing table (must include customization prefix!)\nclient.tables.add_columns(\"new_Product\", {\n    \"new_Category\": \"string\",\n    \"new_InStock\": \"bool\",\n})\n\n# Remove columns\nclient.tables.remove_columns(\"new_Product\", [\"new_Category\"])\n",[3030],{"type":42,"tag":87,"props":3031,"children":3032},{"__ignoreMap":648},[3033,3041,3049,3057,3065,3072,3079,3087],{"type":42,"tag":654,"props":3034,"children":3035},{"class":656,"line":657},[3036],{"type":42,"tag":654,"props":3037,"children":3038},{},[3039],{"type":48,"value":3040},"# Add columns to existing table (must include customization prefix!)\n",{"type":42,"tag":654,"props":3042,"children":3043},{"class":656,"line":666},[3044],{"type":42,"tag":654,"props":3045,"children":3046},{},[3047],{"type":48,"value":3048},"client.tables.add_columns(\"new_Product\", {\n",{"type":42,"tag":654,"props":3050,"children":3051},{"class":656,"line":675},[3052],{"type":42,"tag":654,"props":3053,"children":3054},{},[3055],{"type":48,"value":3056},"    \"new_Category\": \"string\",\n",{"type":42,"tag":654,"props":3058,"children":3059},{"class":656,"line":684},[3060],{"type":42,"tag":654,"props":3061,"children":3062},{},[3063],{"type":48,"value":3064},"    \"new_InStock\": \"bool\",\n",{"type":42,"tag":654,"props":3066,"children":3067},{"class":656,"line":693},[3068],{"type":42,"tag":654,"props":3069,"children":3070},{},[3071],{"type":48,"value":1731},{"type":42,"tag":654,"props":3073,"children":3074},{"class":656,"line":702},[3075],{"type":42,"tag":654,"props":3076,"children":3077},{"emptyLinePlaceholder":760},[3078],{"type":48,"value":763},{"type":42,"tag":654,"props":3080,"children":3081},{"class":656,"line":711},[3082],{"type":42,"tag":654,"props":3083,"children":3084},{},[3085],{"type":48,"value":3086},"# Remove columns\n",{"type":42,"tag":654,"props":3088,"children":3089},{"class":656,"line":790},[3090],{"type":42,"tag":654,"props":3091,"children":3092},{},[3093],{"type":48,"value":3094},"client.tables.remove_columns(\"new_Product\", [\"new_Category\"])\n",{"type":42,"tag":874,"props":3096,"children":3098},{"id":3097},"inspect-tables",[3099],{"type":48,"value":3100},"Inspect Tables",{"type":42,"tag":644,"props":3102,"children":3104},{"className":646,"code":3103,"language":16,"meta":648,"style":648},"# Get single table information\ntable_info = client.tables.get(\"new_Product\")\nprint(f\"Logical name: {table_info['table_logical_name']}\")\nprint(f\"Entity set: {table_info['entity_set_name']}\")\n\n# List all tables\ntables = client.tables.list()\nfor table in tables:\n    print(table)\n",[3105],{"type":42,"tag":87,"props":3106,"children":3107},{"__ignoreMap":648},[3108,3116,3124,3132,3140,3147,3155,3163,3171],{"type":42,"tag":654,"props":3109,"children":3110},{"class":656,"line":657},[3111],{"type":42,"tag":654,"props":3112,"children":3113},{},[3114],{"type":48,"value":3115},"# Get single table information\n",{"type":42,"tag":654,"props":3117,"children":3118},{"class":656,"line":666},[3119],{"type":42,"tag":654,"props":3120,"children":3121},{},[3122],{"type":48,"value":3123},"table_info = client.tables.get(\"new_Product\")\n",{"type":42,"tag":654,"props":3125,"children":3126},{"class":656,"line":675},[3127],{"type":42,"tag":654,"props":3128,"children":3129},{},[3130],{"type":48,"value":3131},"print(f\"Logical name: {table_info['table_logical_name']}\")\n",{"type":42,"tag":654,"props":3133,"children":3134},{"class":656,"line":684},[3135],{"type":42,"tag":654,"props":3136,"children":3137},{},[3138],{"type":48,"value":3139},"print(f\"Entity set: {table_info['entity_set_name']}\")\n",{"type":42,"tag":654,"props":3141,"children":3142},{"class":656,"line":693},[3143],{"type":42,"tag":654,"props":3144,"children":3145},{"emptyLinePlaceholder":760},[3146],{"type":48,"value":763},{"type":42,"tag":654,"props":3148,"children":3149},{"class":656,"line":702},[3150],{"type":42,"tag":654,"props":3151,"children":3152},{},[3153],{"type":48,"value":3154},"# List all tables\n",{"type":42,"tag":654,"props":3156,"children":3157},{"class":656,"line":711},[3158],{"type":42,"tag":654,"props":3159,"children":3160},{},[3161],{"type":48,"value":3162},"tables = client.tables.list()\n",{"type":42,"tag":654,"props":3164,"children":3165},{"class":656,"line":790},[3166],{"type":42,"tag":654,"props":3167,"children":3168},{},[3169],{"type":48,"value":3170},"for table in tables:\n",{"type":42,"tag":654,"props":3172,"children":3173},{"class":656,"line":798},[3174],{"type":42,"tag":654,"props":3175,"children":3176},{},[3177],{"type":48,"value":3178},"    print(table)\n",{"type":42,"tag":874,"props":3180,"children":3182},{"id":3181},"delete-tables",[3183],{"type":48,"value":3184},"Delete Tables",{"type":42,"tag":644,"props":3186,"children":3188},{"className":646,"code":3187,"language":16,"meta":648,"style":648},"client.tables.delete(\"new_Product\")\n",[3189],{"type":42,"tag":87,"props":3190,"children":3191},{"__ignoreMap":648},[3192],{"type":42,"tag":654,"props":3193,"children":3194},{"class":656,"line":657},[3195],{"type":42,"tag":654,"props":3196,"children":3197},{},[3198],{"type":48,"value":3187},{"type":42,"tag":70,"props":3200,"children":3202},{"id":3201},"relationship-management",[3203],{"type":48,"value":3204},"Relationship Management",{"type":42,"tag":874,"props":3206,"children":3208},{"id":3207},"create-one-to-many-relationship",[3209],{"type":48,"value":3210},"Create One-to-Many Relationship",{"type":42,"tag":644,"props":3212,"children":3214},{"className":646,"code":3213,"language":16,"meta":648,"style":648},"from PowerPlatform.Dataverse.models import (\n    CascadeConfiguration,\n    Label,\n    LocalizedLabel,\n    LookupAttributeMetadata,\n    OneToManyRelationshipMetadata,\n)\nfrom PowerPlatform.Dataverse.common.constants import CASCADE_BEHAVIOR_REMOVE_LINK\n\nlookup = LookupAttributeMetadata(\n    schema_name=\"new_DepartmentId\",\n    display_name=Label(\n        localized_labels=[LocalizedLabel(label=\"Department\", language_code=1033)]\n    ),\n)\n\nrelationship = OneToManyRelationshipMetadata(\n    schema_name=\"new_Department_Employee\",\n    referenced_entity=\"new_department\",\n    referencing_entity=\"new_employee\",\n    referenced_attribute=\"new_departmentid\",\n    cascade_configuration=CascadeConfiguration(\n        delete=CASCADE_BEHAVIOR_REMOVE_LINK,\n    ),\n)\n\nresult = client.tables.create_one_to_many_relationship(lookup, relationship)\nprint(f\"Created lookup field: {result.lookup_schema_name}\")\n",[3215],{"type":42,"tag":87,"props":3216,"children":3217},{"__ignoreMap":648},[3218,3226,3234,3242,3250,3258,3266,3273,3281,3288,3296,3304,3312,3320,3328,3335,3342,3350,3358,3366,3374,3382,3390,3398,3405,3412,3419,3427],{"type":42,"tag":654,"props":3219,"children":3220},{"class":656,"line":657},[3221],{"type":42,"tag":654,"props":3222,"children":3223},{},[3224],{"type":48,"value":3225},"from PowerPlatform.Dataverse.models import (\n",{"type":42,"tag":654,"props":3227,"children":3228},{"class":656,"line":666},[3229],{"type":42,"tag":654,"props":3230,"children":3231},{},[3232],{"type":48,"value":3233},"    CascadeConfiguration,\n",{"type":42,"tag":654,"props":3235,"children":3236},{"class":656,"line":675},[3237],{"type":42,"tag":654,"props":3238,"children":3239},{},[3240],{"type":48,"value":3241},"    Label,\n",{"type":42,"tag":654,"props":3243,"children":3244},{"class":656,"line":684},[3245],{"type":42,"tag":654,"props":3246,"children":3247},{},[3248],{"type":48,"value":3249},"    LocalizedLabel,\n",{"type":42,"tag":654,"props":3251,"children":3252},{"class":656,"line":693},[3253],{"type":42,"tag":654,"props":3254,"children":3255},{},[3256],{"type":48,"value":3257},"    LookupAttributeMetadata,\n",{"type":42,"tag":654,"props":3259,"children":3260},{"class":656,"line":702},[3261],{"type":42,"tag":654,"props":3262,"children":3263},{},[3264],{"type":48,"value":3265},"    OneToManyRelationshipMetadata,\n",{"type":42,"tag":654,"props":3267,"children":3268},{"class":656,"line":711},[3269],{"type":42,"tag":654,"props":3270,"children":3271},{},[3272],{"type":48,"value":708},{"type":42,"tag":654,"props":3274,"children":3275},{"class":656,"line":790},[3276],{"type":42,"tag":654,"props":3277,"children":3278},{},[3279],{"type":48,"value":3280},"from PowerPlatform.Dataverse.common.constants import CASCADE_BEHAVIOR_REMOVE_LINK\n",{"type":42,"tag":654,"props":3282,"children":3283},{"class":656,"line":798},[3284],{"type":42,"tag":654,"props":3285,"children":3286},{"emptyLinePlaceholder":760},[3287],{"type":48,"value":763},{"type":42,"tag":654,"props":3289,"children":3290},{"class":656,"line":807},[3291],{"type":42,"tag":654,"props":3292,"children":3293},{},[3294],{"type":48,"value":3295},"lookup = LookupAttributeMetadata(\n",{"type":42,"tag":654,"props":3297,"children":3298},{"class":656,"line":816},[3299],{"type":42,"tag":654,"props":3300,"children":3301},{},[3302],{"type":48,"value":3303},"    schema_name=\"new_DepartmentId\",\n",{"type":42,"tag":654,"props":3305,"children":3306},{"class":656,"line":825},[3307],{"type":42,"tag":654,"props":3308,"children":3309},{},[3310],{"type":48,"value":3311},"    display_name=Label(\n",{"type":42,"tag":654,"props":3313,"children":3314},{"class":656,"line":834},[3315],{"type":42,"tag":654,"props":3316,"children":3317},{},[3318],{"type":48,"value":3319},"        localized_labels=[LocalizedLabel(label=\"Department\", language_code=1033)]\n",{"type":42,"tag":654,"props":3321,"children":3322},{"class":656,"line":843},[3323],{"type":42,"tag":654,"props":3324,"children":3325},{},[3326],{"type":48,"value":3327},"    ),\n",{"type":42,"tag":654,"props":3329,"children":3330},{"class":656,"line":851},[3331],{"type":42,"tag":654,"props":3332,"children":3333},{},[3334],{"type":48,"value":708},{"type":42,"tag":654,"props":3336,"children":3337},{"class":656,"line":860},[3338],{"type":42,"tag":654,"props":3339,"children":3340},{"emptyLinePlaceholder":760},[3341],{"type":48,"value":763},{"type":42,"tag":654,"props":3343,"children":3344},{"class":656,"line":1098},[3345],{"type":42,"tag":654,"props":3346,"children":3347},{},[3348],{"type":48,"value":3349},"relationship = OneToManyRelationshipMetadata(\n",{"type":42,"tag":654,"props":3351,"children":3352},{"class":656,"line":1107},[3353],{"type":42,"tag":654,"props":3354,"children":3355},{},[3356],{"type":48,"value":3357},"    schema_name=\"new_Department_Employee\",\n",{"type":42,"tag":654,"props":3359,"children":3360},{"class":656,"line":1286},[3361],{"type":42,"tag":654,"props":3362,"children":3363},{},[3364],{"type":48,"value":3365},"    referenced_entity=\"new_department\",\n",{"type":42,"tag":654,"props":3367,"children":3368},{"class":656,"line":1295},[3369],{"type":42,"tag":654,"props":3370,"children":3371},{},[3372],{"type":48,"value":3373},"    referencing_entity=\"new_employee\",\n",{"type":42,"tag":654,"props":3375,"children":3376},{"class":656,"line":1303},[3377],{"type":42,"tag":654,"props":3378,"children":3379},{},[3380],{"type":48,"value":3381},"    referenced_attribute=\"new_departmentid\",\n",{"type":42,"tag":654,"props":3383,"children":3384},{"class":656,"line":1312},[3385],{"type":42,"tag":654,"props":3386,"children":3387},{},[3388],{"type":48,"value":3389},"    cascade_configuration=CascadeConfiguration(\n",{"type":42,"tag":654,"props":3391,"children":3392},{"class":656,"line":30},[3393],{"type":42,"tag":654,"props":3394,"children":3395},{},[3396],{"type":48,"value":3397},"        delete=CASCADE_BEHAVIOR_REMOVE_LINK,\n",{"type":42,"tag":654,"props":3399,"children":3400},{"class":656,"line":1328},[3401],{"type":42,"tag":654,"props":3402,"children":3403},{},[3404],{"type":48,"value":3327},{"type":42,"tag":654,"props":3406,"children":3407},{"class":656,"line":1336},[3408],{"type":42,"tag":654,"props":3409,"children":3410},{},[3411],{"type":48,"value":708},{"type":42,"tag":654,"props":3413,"children":3414},{"class":656,"line":1344},[3415],{"type":42,"tag":654,"props":3416,"children":3417},{"emptyLinePlaceholder":760},[3418],{"type":48,"value":763},{"type":42,"tag":654,"props":3420,"children":3421},{"class":656,"line":1353},[3422],{"type":42,"tag":654,"props":3423,"children":3424},{},[3425],{"type":48,"value":3426},"result = client.tables.create_one_to_many_relationship(lookup, relationship)\n",{"type":42,"tag":654,"props":3428,"children":3429},{"class":656,"line":1362},[3430],{"type":42,"tag":654,"props":3431,"children":3432},{},[3433],{"type":48,"value":3434},"print(f\"Created lookup field: {result.lookup_schema_name}\")\n",{"type":42,"tag":874,"props":3436,"children":3438},{"id":3437},"create-many-to-many-relationship",[3439],{"type":48,"value":3440},"Create Many-to-Many Relationship",{"type":42,"tag":644,"props":3442,"children":3444},{"className":646,"code":3443,"language":16,"meta":648,"style":648},"from PowerPlatform.Dataverse.models import ManyToManyRelationshipMetadata\n\nrelationship = ManyToManyRelationshipMetadata(\n    schema_name=\"new_employee_project\",\n    entity1_logical_name=\"new_employee\",\n    entity2_logical_name=\"new_project\",\n)\n\nresult = client.tables.create_many_to_many_relationship(relationship)\nprint(f\"Created: {result.relationship_schema_name}\")\n",[3445],{"type":42,"tag":87,"props":3446,"children":3447},{"__ignoreMap":648},[3448,3456,3463,3471,3479,3487,3495,3502,3509,3517],{"type":42,"tag":654,"props":3449,"children":3450},{"class":656,"line":657},[3451],{"type":42,"tag":654,"props":3452,"children":3453},{},[3454],{"type":48,"value":3455},"from PowerPlatform.Dataverse.models import ManyToManyRelationshipMetadata\n",{"type":42,"tag":654,"props":3457,"children":3458},{"class":656,"line":666},[3459],{"type":42,"tag":654,"props":3460,"children":3461},{"emptyLinePlaceholder":760},[3462],{"type":48,"value":763},{"type":42,"tag":654,"props":3464,"children":3465},{"class":656,"line":675},[3466],{"type":42,"tag":654,"props":3467,"children":3468},{},[3469],{"type":48,"value":3470},"relationship = ManyToManyRelationshipMetadata(\n",{"type":42,"tag":654,"props":3472,"children":3473},{"class":656,"line":684},[3474],{"type":42,"tag":654,"props":3475,"children":3476},{},[3477],{"type":48,"value":3478},"    schema_name=\"new_employee_project\",\n",{"type":42,"tag":654,"props":3480,"children":3481},{"class":656,"line":693},[3482],{"type":42,"tag":654,"props":3483,"children":3484},{},[3485],{"type":48,"value":3486},"    entity1_logical_name=\"new_employee\",\n",{"type":42,"tag":654,"props":3488,"children":3489},{"class":656,"line":702},[3490],{"type":42,"tag":654,"props":3491,"children":3492},{},[3493],{"type":48,"value":3494},"    entity2_logical_name=\"new_project\",\n",{"type":42,"tag":654,"props":3496,"children":3497},{"class":656,"line":711},[3498],{"type":42,"tag":654,"props":3499,"children":3500},{},[3501],{"type":48,"value":708},{"type":42,"tag":654,"props":3503,"children":3504},{"class":656,"line":790},[3505],{"type":42,"tag":654,"props":3506,"children":3507},{"emptyLinePlaceholder":760},[3508],{"type":48,"value":763},{"type":42,"tag":654,"props":3510,"children":3511},{"class":656,"line":798},[3512],{"type":42,"tag":654,"props":3513,"children":3514},{},[3515],{"type":48,"value":3516},"result = client.tables.create_many_to_many_relationship(relationship)\n",{"type":42,"tag":654,"props":3518,"children":3519},{"class":656,"line":807},[3520],{"type":42,"tag":654,"props":3521,"children":3522},{},[3523],{"type":48,"value":3524},"print(f\"Created: {result.relationship_schema_name}\")\n",{"type":42,"tag":874,"props":3526,"children":3528},{"id":3527},"convenience-method-for-lookup-fields",[3529],{"type":48,"value":3530},"Convenience Method for Lookup Fields",{"type":42,"tag":644,"props":3532,"children":3534},{"className":646,"code":3533,"language":16,"meta":648,"style":648},"result = client.tables.create_lookup_field(\n    referencing_table=\"new_order\",\n    lookup_field_name=\"new_AccountId\",\n    referenced_table=\"account\",\n    display_name=\"Account\",\n    required=True,\n)\n",[3535],{"type":42,"tag":87,"props":3536,"children":3537},{"__ignoreMap":648},[3538,3546,3554,3562,3570,3578,3586],{"type":42,"tag":654,"props":3539,"children":3540},{"class":656,"line":657},[3541],{"type":42,"tag":654,"props":3542,"children":3543},{},[3544],{"type":48,"value":3545},"result = client.tables.create_lookup_field(\n",{"type":42,"tag":654,"props":3547,"children":3548},{"class":656,"line":666},[3549],{"type":42,"tag":654,"props":3550,"children":3551},{},[3552],{"type":48,"value":3553},"    referencing_table=\"new_order\",\n",{"type":42,"tag":654,"props":3555,"children":3556},{"class":656,"line":675},[3557],{"type":42,"tag":654,"props":3558,"children":3559},{},[3560],{"type":48,"value":3561},"    lookup_field_name=\"new_AccountId\",\n",{"type":42,"tag":654,"props":3563,"children":3564},{"class":656,"line":684},[3565],{"type":42,"tag":654,"props":3566,"children":3567},{},[3568],{"type":48,"value":3569},"    referenced_table=\"account\",\n",{"type":42,"tag":654,"props":3571,"children":3572},{"class":656,"line":693},[3573],{"type":42,"tag":654,"props":3574,"children":3575},{},[3576],{"type":48,"value":3577},"    display_name=\"Account\",\n",{"type":42,"tag":654,"props":3579,"children":3580},{"class":656,"line":702},[3581],{"type":42,"tag":654,"props":3582,"children":3583},{},[3584],{"type":48,"value":3585},"    required=True,\n",{"type":42,"tag":654,"props":3587,"children":3588},{"class":656,"line":711},[3589],{"type":42,"tag":654,"props":3590,"children":3591},{},[3592],{"type":48,"value":708},{"type":42,"tag":874,"props":3594,"children":3596},{"id":3595},"query-and-delete-relationships",[3597],{"type":48,"value":3598},"Query and Delete Relationships",{"type":42,"tag":644,"props":3600,"children":3602},{"className":646,"code":3601,"language":16,"meta":648,"style":648},"# Get relationship metadata\nrel = client.tables.get_relationship(\"new_Department_Employee\")\nif rel:\n    print(f\"Found: {rel.relationship_schema_name}\")\n\n# Delete relationship\nclient.tables.delete_relationship(result.relationship_id)\n",[3603],{"type":42,"tag":87,"props":3604,"children":3605},{"__ignoreMap":648},[3606,3614,3622,3630,3638,3645,3653],{"type":42,"tag":654,"props":3607,"children":3608},{"class":656,"line":657},[3609],{"type":42,"tag":654,"props":3610,"children":3611},{},[3612],{"type":48,"value":3613},"# Get relationship metadata\n",{"type":42,"tag":654,"props":3615,"children":3616},{"class":656,"line":666},[3617],{"type":42,"tag":654,"props":3618,"children":3619},{},[3620],{"type":48,"value":3621},"rel = client.tables.get_relationship(\"new_Department_Employee\")\n",{"type":42,"tag":654,"props":3623,"children":3624},{"class":656,"line":675},[3625],{"type":42,"tag":654,"props":3626,"children":3627},{},[3628],{"type":48,"value":3629},"if rel:\n",{"type":42,"tag":654,"props":3631,"children":3632},{"class":656,"line":684},[3633],{"type":42,"tag":654,"props":3634,"children":3635},{},[3636],{"type":48,"value":3637},"    print(f\"Found: {rel.relationship_schema_name}\")\n",{"type":42,"tag":654,"props":3639,"children":3640},{"class":656,"line":693},[3641],{"type":42,"tag":654,"props":3642,"children":3643},{"emptyLinePlaceholder":760},[3644],{"type":48,"value":763},{"type":42,"tag":654,"props":3646,"children":3647},{"class":656,"line":702},[3648],{"type":42,"tag":654,"props":3649,"children":3650},{},[3651],{"type":48,"value":3652},"# Delete relationship\n",{"type":42,"tag":654,"props":3654,"children":3655},{"class":656,"line":711},[3656],{"type":42,"tag":654,"props":3657,"children":3658},{},[3659],{"type":48,"value":3660},"client.tables.delete_relationship(result.relationship_id)\n",{"type":42,"tag":70,"props":3662,"children":3664},{"id":3663},"file-operations",[3665],{"type":48,"value":3666},"File Operations",{"type":42,"tag":644,"props":3668,"children":3670},{"className":646,"code":3669,"language":16,"meta":648,"style":648},"# Upload file to a file column\nclient.files.upload(\n    table=\"account\",\n    record_id=account_id,\n    file_column=\"new_Document\",  # If the file column doesn't exist, it will be created automatically\n    path=\"\u002Fpath\u002Fto\u002Fdocument.pdf\",\n)\n",[3671],{"type":42,"tag":87,"props":3672,"children":3673},{"__ignoreMap":648},[3674,3682,3690,3698,3706,3714,3722],{"type":42,"tag":654,"props":3675,"children":3676},{"class":656,"line":657},[3677],{"type":42,"tag":654,"props":3678,"children":3679},{},[3680],{"type":48,"value":3681},"# Upload file to a file column\n",{"type":42,"tag":654,"props":3683,"children":3684},{"class":656,"line":666},[3685],{"type":42,"tag":654,"props":3686,"children":3687},{},[3688],{"type":48,"value":3689},"client.files.upload(\n",{"type":42,"tag":654,"props":3691,"children":3692},{"class":656,"line":675},[3693],{"type":42,"tag":654,"props":3694,"children":3695},{},[3696],{"type":48,"value":3697},"    table=\"account\",\n",{"type":42,"tag":654,"props":3699,"children":3700},{"class":656,"line":684},[3701],{"type":42,"tag":654,"props":3702,"children":3703},{},[3704],{"type":48,"value":3705},"    record_id=account_id,\n",{"type":42,"tag":654,"props":3707,"children":3708},{"class":656,"line":693},[3709],{"type":42,"tag":654,"props":3710,"children":3711},{},[3712],{"type":48,"value":3713},"    file_column=\"new_Document\",  # If the file column doesn't exist, it will be created automatically\n",{"type":42,"tag":654,"props":3715,"children":3716},{"class":656,"line":702},[3717],{"type":42,"tag":654,"props":3718,"children":3719},{},[3720],{"type":48,"value":3721},"    path=\"\u002Fpath\u002Fto\u002Fdocument.pdf\",\n",{"type":42,"tag":654,"props":3723,"children":3724},{"class":656,"line":711},[3725],{"type":42,"tag":654,"props":3726,"children":3727},{},[3728],{"type":48,"value":708},{"type":42,"tag":70,"props":3730,"children":3732},{"id":3731},"batch-operations",[3733],{"type":48,"value":3734},"Batch Operations",{"type":42,"tag":58,"props":3736,"children":3737},{},[3738,3739,3744,3746,3751,3753,3759,3761,3766],{"type":48,"value":307},{"type":42,"tag":87,"props":3740,"children":3742},{"className":3741},[],[3743],{"type":48,"value":215},{"type":48,"value":3745}," to send multiple operations in one HTTP request. All batch methods return ",{"type":42,"tag":87,"props":3747,"children":3749},{"className":3748},[],[3750],{"type":48,"value":520},{"type":48,"value":3752},"; results arrive via ",{"type":42,"tag":87,"props":3754,"children":3756},{"className":3755},[],[3757],{"type":48,"value":3758},"BatchResult",{"type":48,"value":3760}," after ",{"type":42,"tag":87,"props":3762,"children":3764},{"className":3763},[],[3765],{"type":48,"value":450},{"type":48,"value":3767},".",{"type":42,"tag":644,"props":3769,"children":3771},{"className":646,"code":3770,"language":16,"meta":648,"style":648},"# Build a batch request\nbatch = client.batch.new()\nbatch.records.create(\"account\", {\"name\": \"Contoso\"})\nbatch.records.update(\"account\", account_id, {\"telephone1\": \"555-0100\"})\nbatch.records.retrieve(\"account\", account_id, select=[\"name\"], expand=[\"primarycontactid\"], include_annotations=\"OData.Community.Display.V1.FormattedValue\")  # single record with expand\nbatch.records.list(\"account\", filter=\"statecode eq 0\", select=[\"name\"], orderby=[\"name asc\"], top=50, page_size=25, count=True)  # multi-record, single page\nbatch.query.sql(\"SELECT TOP 5 name FROM account\")\n\nresult = batch.execute()\nfor item in result.responses:\n    if item.is_success:\n        print(f\"[OK] {item.status_code} entity_id={item.entity_id}\")\n        if item.data:\n            # GET responses populate item.data with the parsed JSON record\n            print(item.data.get(\"name\"))\n    else:\n        print(f\"[ERR] {item.status_code}: {item.error_message}\")\n\n# Transactional changeset (all succeed or roll back)\nwith batch.changeset() as cs:\n    ref = cs.records.create(\"contact\", {\"firstname\": \"Alice\"})\n    cs.records.update(\"account\", account_id, {\"primarycontactid@odata.bind\": ref})\n\n# Continue on error\nresult = batch.execute(continue_on_error=True)\nprint(f\"Succeeded: {len(result.succeeded)}, Failed: {len(result.failed)}\")\n",[3772],{"type":42,"tag":87,"props":3773,"children":3774},{"__ignoreMap":648},[3775,3783,3791,3799,3807,3815,3823,3831,3838,3846,3854,3862,3870,3878,3886,3894,3902,3910,3917,3925,3933,3941,3949,3956,3964,3972],{"type":42,"tag":654,"props":3776,"children":3777},{"class":656,"line":657},[3778],{"type":42,"tag":654,"props":3779,"children":3780},{},[3781],{"type":48,"value":3782},"# Build a batch request\n",{"type":42,"tag":654,"props":3784,"children":3785},{"class":656,"line":666},[3786],{"type":42,"tag":654,"props":3787,"children":3788},{},[3789],{"type":48,"value":3790},"batch = client.batch.new()\n",{"type":42,"tag":654,"props":3792,"children":3793},{"class":656,"line":675},[3794],{"type":42,"tag":654,"props":3795,"children":3796},{},[3797],{"type":48,"value":3798},"batch.records.create(\"account\", {\"name\": \"Contoso\"})\n",{"type":42,"tag":654,"props":3800,"children":3801},{"class":656,"line":684},[3802],{"type":42,"tag":654,"props":3803,"children":3804},{},[3805],{"type":48,"value":3806},"batch.records.update(\"account\", account_id, {\"telephone1\": \"555-0100\"})\n",{"type":42,"tag":654,"props":3808,"children":3809},{"class":656,"line":693},[3810],{"type":42,"tag":654,"props":3811,"children":3812},{},[3813],{"type":48,"value":3814},"batch.records.retrieve(\"account\", account_id, select=[\"name\"], expand=[\"primarycontactid\"], include_annotations=\"OData.Community.Display.V1.FormattedValue\")  # single record with expand\n",{"type":42,"tag":654,"props":3816,"children":3817},{"class":656,"line":702},[3818],{"type":42,"tag":654,"props":3819,"children":3820},{},[3821],{"type":48,"value":3822},"batch.records.list(\"account\", filter=\"statecode eq 0\", select=[\"name\"], orderby=[\"name asc\"], top=50, page_size=25, count=True)  # multi-record, single page\n",{"type":42,"tag":654,"props":3824,"children":3825},{"class":656,"line":711},[3826],{"type":42,"tag":654,"props":3827,"children":3828},{},[3829],{"type":48,"value":3830},"batch.query.sql(\"SELECT TOP 5 name FROM account\")\n",{"type":42,"tag":654,"props":3832,"children":3833},{"class":656,"line":790},[3834],{"type":42,"tag":654,"props":3835,"children":3836},{"emptyLinePlaceholder":760},[3837],{"type":48,"value":763},{"type":42,"tag":654,"props":3839,"children":3840},{"class":656,"line":798},[3841],{"type":42,"tag":654,"props":3842,"children":3843},{},[3844],{"type":48,"value":3845},"result = batch.execute()\n",{"type":42,"tag":654,"props":3847,"children":3848},{"class":656,"line":807},[3849],{"type":42,"tag":654,"props":3850,"children":3851},{},[3852],{"type":48,"value":3853},"for item in result.responses:\n",{"type":42,"tag":654,"props":3855,"children":3856},{"class":656,"line":816},[3857],{"type":42,"tag":654,"props":3858,"children":3859},{},[3860],{"type":48,"value":3861},"    if item.is_success:\n",{"type":42,"tag":654,"props":3863,"children":3864},{"class":656,"line":825},[3865],{"type":42,"tag":654,"props":3866,"children":3867},{},[3868],{"type":48,"value":3869},"        print(f\"[OK] {item.status_code} entity_id={item.entity_id}\")\n",{"type":42,"tag":654,"props":3871,"children":3872},{"class":656,"line":834},[3873],{"type":42,"tag":654,"props":3874,"children":3875},{},[3876],{"type":48,"value":3877},"        if item.data:\n",{"type":42,"tag":654,"props":3879,"children":3880},{"class":656,"line":843},[3881],{"type":42,"tag":654,"props":3882,"children":3883},{},[3884],{"type":48,"value":3885},"            # GET responses populate item.data with the parsed JSON record\n",{"type":42,"tag":654,"props":3887,"children":3888},{"class":656,"line":851},[3889],{"type":42,"tag":654,"props":3890,"children":3891},{},[3892],{"type":48,"value":3893},"            print(item.data.get(\"name\"))\n",{"type":42,"tag":654,"props":3895,"children":3896},{"class":656,"line":860},[3897],{"type":42,"tag":654,"props":3898,"children":3899},{},[3900],{"type":48,"value":3901},"    else:\n",{"type":42,"tag":654,"props":3903,"children":3904},{"class":656,"line":1098},[3905],{"type":42,"tag":654,"props":3906,"children":3907},{},[3908],{"type":48,"value":3909},"        print(f\"[ERR] {item.status_code}: {item.error_message}\")\n",{"type":42,"tag":654,"props":3911,"children":3912},{"class":656,"line":1107},[3913],{"type":42,"tag":654,"props":3914,"children":3915},{"emptyLinePlaceholder":760},[3916],{"type":48,"value":763},{"type":42,"tag":654,"props":3918,"children":3919},{"class":656,"line":1286},[3920],{"type":42,"tag":654,"props":3921,"children":3922},{},[3923],{"type":48,"value":3924},"# Transactional changeset (all succeed or roll back)\n",{"type":42,"tag":654,"props":3926,"children":3927},{"class":656,"line":1295},[3928],{"type":42,"tag":654,"props":3929,"children":3930},{},[3931],{"type":48,"value":3932},"with batch.changeset() as cs:\n",{"type":42,"tag":654,"props":3934,"children":3935},{"class":656,"line":1303},[3936],{"type":42,"tag":654,"props":3937,"children":3938},{},[3939],{"type":48,"value":3940},"    ref = cs.records.create(\"contact\", {\"firstname\": \"Alice\"})\n",{"type":42,"tag":654,"props":3942,"children":3943},{"class":656,"line":1312},[3944],{"type":42,"tag":654,"props":3945,"children":3946},{},[3947],{"type":48,"value":3948},"    cs.records.update(\"account\", account_id, {\"primarycontactid@odata.bind\": ref})\n",{"type":42,"tag":654,"props":3950,"children":3951},{"class":656,"line":30},[3952],{"type":42,"tag":654,"props":3953,"children":3954},{"emptyLinePlaceholder":760},[3955],{"type":48,"value":763},{"type":42,"tag":654,"props":3957,"children":3958},{"class":656,"line":1328},[3959],{"type":42,"tag":654,"props":3960,"children":3961},{},[3962],{"type":48,"value":3963},"# Continue on error\n",{"type":42,"tag":654,"props":3965,"children":3966},{"class":656,"line":1336},[3967],{"type":42,"tag":654,"props":3968,"children":3969},{},[3970],{"type":48,"value":3971},"result = batch.execute(continue_on_error=True)\n",{"type":42,"tag":654,"props":3973,"children":3974},{"class":656,"line":1344},[3975],{"type":42,"tag":654,"props":3976,"children":3977},{},[3978],{"type":48,"value":3979},"print(f\"Succeeded: {len(result.succeeded)}, Failed: {len(result.failed)}\")\n",{"type":42,"tag":58,"props":3981,"children":3982},{},[3983],{"type":42,"tag":147,"props":3984,"children":3985},{},[3986],{"type":48,"value":3987},"BatchResult properties:",{"type":42,"tag":77,"props":3989,"children":3990},{},[3991,4010,4021,4032,4043],{"type":42,"tag":81,"props":3992,"children":3993},{},[3994,4000,4002,4008],{"type":42,"tag":87,"props":3995,"children":3997},{"className":3996},[],[3998],{"type":48,"value":3999},"result.responses",{"type":48,"value":4001}," -- list of ",{"type":42,"tag":87,"props":4003,"children":4005},{"className":4004},[],[4006],{"type":48,"value":4007},"BatchItemResponse",{"type":48,"value":4009}," in submission order",{"type":42,"tag":81,"props":4011,"children":4012},{},[4013,4019],{"type":42,"tag":87,"props":4014,"children":4016},{"className":4015},[],[4017],{"type":48,"value":4018},"result.succeeded",{"type":48,"value":4020}," -- responses with 2xx status codes",{"type":42,"tag":81,"props":4022,"children":4023},{},[4024,4030],{"type":42,"tag":87,"props":4025,"children":4027},{"className":4026},[],[4028],{"type":48,"value":4029},"result.failed",{"type":48,"value":4031}," -- responses with non-2xx status codes",{"type":42,"tag":81,"props":4033,"children":4034},{},[4035,4041],{"type":42,"tag":87,"props":4036,"children":4038},{"className":4037},[],[4039],{"type":48,"value":4040},"result.has_errors",{"type":48,"value":4042}," -- True if any response failed",{"type":42,"tag":81,"props":4044,"children":4045},{},[4046,4052],{"type":42,"tag":87,"props":4047,"children":4049},{"className":4048},[],[4050],{"type":48,"value":4051},"result.entity_ids",{"type":48,"value":4053}," -- GUIDs from OData-EntityId headers (creates and updates)",{"type":42,"tag":58,"props":4055,"children":4056},{},[4057],{"type":42,"tag":147,"props":4058,"children":4059},{},[4060],{"type":48,"value":4061},"Batch limitations:",{"type":42,"tag":77,"props":4063,"children":4064},{},[4065,4070,4088,4106],{"type":42,"tag":81,"props":4066,"children":4067},{},[4068],{"type":48,"value":4069},"Maximum 1000 operations per batch",{"type":42,"tag":81,"props":4071,"children":4072},{},[4073,4079,4080,4086],{"type":42,"tag":87,"props":4074,"children":4076},{"className":4075},[],[4077],{"type":48,"value":4078},"batch.records.get()",{"type":48,"value":623},{"type":42,"tag":87,"props":4081,"children":4083},{"className":4082},[],[4084],{"type":48,"value":4085},"batch.records.retrieve()",{"type":48,"value":4087}," for single records",{"type":42,"tag":81,"props":4089,"children":4090},{},[4091,4097,4099,4104],{"type":42,"tag":87,"props":4092,"children":4094},{"className":4093},[],[4095],{"type":48,"value":4096},"batch.records.list()",{"type":48,"value":4098}," returns a single page (no pagination); use ",{"type":42,"tag":87,"props":4100,"children":4102},{"className":4101},[],[4103],{"type":48,"value":313},{"type":48,"value":4105}," to bound results",{"type":42,"tag":81,"props":4107,"children":4108},{},[4109,4115],{"type":42,"tag":87,"props":4110,"children":4112},{"className":4111},[],[4113],{"type":48,"value":4114},"flush_cache()",{"type":48,"value":4116}," is not supported in batch",{"type":42,"tag":51,"props":4118,"children":4120},{"id":4119},"error-handling",[4121],{"type":48,"value":4122},"Error Handling",{"type":42,"tag":58,"props":4124,"children":4125},{},[4126],{"type":48,"value":4127},"The SDK provides structured exceptions with detailed error information:",{"type":42,"tag":644,"props":4129,"children":4131},{"className":646,"code":4130,"language":16,"meta":648,"style":648},"from PowerPlatform.Dataverse.core.errors import (\n    DataverseError,\n    HttpError,\n    MetadataError,\n    SQLParseError,\n    ValidationError,\n)\nfrom PowerPlatform.Dataverse.client import DataverseClient\n\ntry:\n    client.records.retrieve(\"account\", \"invalid-id\")\nexcept HttpError as e:\n    print(f\"HTTP {e.status_code}: {e.message}\")\n    print(f\"Error code: {e.code}\")\n    print(f\"Subcode: {e.subcode}\")\n    if e.is_transient:\n        print(\"This error may be retryable\")\nexcept ValidationError as e:\n    print(f\"Validation error: {e.message}\")\n",[4132],{"type":42,"tag":87,"props":4133,"children":4134},{"__ignoreMap":648},[4135,4143,4151,4159,4167,4175,4183,4190,4197,4204,4212,4220,4228,4236,4244,4252,4260,4268,4276],{"type":42,"tag":654,"props":4136,"children":4137},{"class":656,"line":657},[4138],{"type":42,"tag":654,"props":4139,"children":4140},{},[4141],{"type":48,"value":4142},"from PowerPlatform.Dataverse.core.errors import (\n",{"type":42,"tag":654,"props":4144,"children":4145},{"class":656,"line":666},[4146],{"type":42,"tag":654,"props":4147,"children":4148},{},[4149],{"type":48,"value":4150},"    DataverseError,\n",{"type":42,"tag":654,"props":4152,"children":4153},{"class":656,"line":675},[4154],{"type":42,"tag":654,"props":4155,"children":4156},{},[4157],{"type":48,"value":4158},"    HttpError,\n",{"type":42,"tag":654,"props":4160,"children":4161},{"class":656,"line":684},[4162],{"type":42,"tag":654,"props":4163,"children":4164},{},[4165],{"type":48,"value":4166},"    MetadataError,\n",{"type":42,"tag":654,"props":4168,"children":4169},{"class":656,"line":693},[4170],{"type":42,"tag":654,"props":4171,"children":4172},{},[4173],{"type":48,"value":4174},"    SQLParseError,\n",{"type":42,"tag":654,"props":4176,"children":4177},{"class":656,"line":702},[4178],{"type":42,"tag":654,"props":4179,"children":4180},{},[4181],{"type":48,"value":4182},"    ValidationError,\n",{"type":42,"tag":654,"props":4184,"children":4185},{"class":656,"line":711},[4186],{"type":42,"tag":654,"props":4187,"children":4188},{},[4189],{"type":48,"value":708},{"type":42,"tag":654,"props":4191,"children":4192},{"class":656,"line":790},[4193],{"type":42,"tag":654,"props":4194,"children":4195},{},[4196],{"type":48,"value":717},{"type":42,"tag":654,"props":4198,"children":4199},{"class":656,"line":798},[4200],{"type":42,"tag":654,"props":4201,"children":4202},{"emptyLinePlaceholder":760},[4203],{"type":48,"value":763},{"type":42,"tag":654,"props":4205,"children":4206},{"class":656,"line":807},[4207],{"type":42,"tag":654,"props":4208,"children":4209},{},[4210],{"type":48,"value":4211},"try:\n",{"type":42,"tag":654,"props":4213,"children":4214},{"class":656,"line":816},[4215],{"type":42,"tag":654,"props":4216,"children":4217},{},[4218],{"type":48,"value":4219},"    client.records.retrieve(\"account\", \"invalid-id\")\n",{"type":42,"tag":654,"props":4221,"children":4222},{"class":656,"line":825},[4223],{"type":42,"tag":654,"props":4224,"children":4225},{},[4226],{"type":48,"value":4227},"except HttpError as e:\n",{"type":42,"tag":654,"props":4229,"children":4230},{"class":656,"line":834},[4231],{"type":42,"tag":654,"props":4232,"children":4233},{},[4234],{"type":48,"value":4235},"    print(f\"HTTP {e.status_code}: {e.message}\")\n",{"type":42,"tag":654,"props":4237,"children":4238},{"class":656,"line":843},[4239],{"type":42,"tag":654,"props":4240,"children":4241},{},[4242],{"type":48,"value":4243},"    print(f\"Error code: {e.code}\")\n",{"type":42,"tag":654,"props":4245,"children":4246},{"class":656,"line":851},[4247],{"type":42,"tag":654,"props":4248,"children":4249},{},[4250],{"type":48,"value":4251},"    print(f\"Subcode: {e.subcode}\")\n",{"type":42,"tag":654,"props":4253,"children":4254},{"class":656,"line":860},[4255],{"type":42,"tag":654,"props":4256,"children":4257},{},[4258],{"type":48,"value":4259},"    if e.is_transient:\n",{"type":42,"tag":654,"props":4261,"children":4262},{"class":656,"line":1098},[4263],{"type":42,"tag":654,"props":4264,"children":4265},{},[4266],{"type":48,"value":4267},"        print(\"This error may be retryable\")\n",{"type":42,"tag":654,"props":4269,"children":4270},{"class":656,"line":1107},[4271],{"type":42,"tag":654,"props":4272,"children":4273},{},[4274],{"type":48,"value":4275},"except ValidationError as e:\n",{"type":42,"tag":654,"props":4277,"children":4278},{"class":656,"line":1286},[4279],{"type":42,"tag":654,"props":4280,"children":4281},{},[4282],{"type":48,"value":4283},"    print(f\"Validation error: {e.message}\")\n",{"type":42,"tag":70,"props":4285,"children":4287},{"id":4286},"common-error-patterns",[4288],{"type":48,"value":4289},"Common Error Patterns",{"type":42,"tag":58,"props":4291,"children":4292},{},[4293],{"type":42,"tag":147,"props":4294,"children":4295},{},[4296],{"type":48,"value":4297},"Authentication failures:",{"type":42,"tag":77,"props":4299,"children":4300},{},[4301,4306,4311],{"type":42,"tag":81,"props":4302,"children":4303},{},[4304],{"type":48,"value":4305},"Check environment URL format (no trailing slash)",{"type":42,"tag":81,"props":4307,"children":4308},{},[4309],{"type":48,"value":4310},"Verify credentials have Dataverse permissions",{"type":42,"tag":81,"props":4312,"children":4313},{},[4314],{"type":48,"value":4315},"Ensure app registration is properly configured",{"type":42,"tag":58,"props":4317,"children":4318},{},[4319],{"type":42,"tag":147,"props":4320,"children":4321},{},[4322],{"type":48,"value":4323},"404 Not Found:",{"type":42,"tag":77,"props":4325,"children":4326},{},[4327,4332,4337,4342],{"type":42,"tag":81,"props":4328,"children":4329},{},[4330],{"type":48,"value":4331},"Verify table schema name is correct (lowercase for standard tables)",{"type":42,"tag":81,"props":4333,"children":4334},{},[4335],{"type":48,"value":4336},"Check record ID exists",{"type":42,"tag":81,"props":4338,"children":4339},{},[4340],{"type":48,"value":4341},"Ensure using schema names, not display names",{"type":42,"tag":81,"props":4343,"children":4344},{},[4345],{"type":48,"value":4346},"Cache issue could happen, so retry might help, especially for metadata creation",{"type":42,"tag":58,"props":4348,"children":4349},{},[4350],{"type":42,"tag":147,"props":4351,"children":4352},{},[4353],{"type":48,"value":4354},"400 Bad Request:",{"type":42,"tag":77,"props":4356,"children":4357},{},[4358,4363,4368,4373],{"type":42,"tag":81,"props":4359,"children":4360},{},[4361],{"type":48,"value":4362},"Check filter\u002Fexpand parameters use correct case",{"type":42,"tag":81,"props":4364,"children":4365},{},[4366],{"type":48,"value":4367},"Verify column names exist and are spelled correctly",{"type":42,"tag":81,"props":4369,"children":4370},{},[4371],{"type":48,"value":4372},"Ensure custom columns include customization prefix",{"type":42,"tag":81,"props":4374,"children":4375},{},[4376,4378,4384,4386,4391,4393,4399,4401,4407,4409,4415,4417,4422],{"type":48,"value":4377},"For ",{"type":42,"tag":87,"props":4379,"children":4381},{"className":4380},[],[4382],{"type":48,"value":4383},"@odata.bind",{"type":48,"value":4385}," errors (\"undeclared property\"): the navigation property name before ",{"type":42,"tag":87,"props":4387,"children":4389},{"className":4388},[],[4390],{"type":48,"value":4383},{"type":48,"value":4392}," is case-sensitive and must match the entity's ",{"type":42,"tag":87,"props":4394,"children":4396},{"className":4395},[],[4397],{"type":48,"value":4398},"$metadata",{"type":48,"value":4400}," exactly (e.g., ",{"type":42,"tag":87,"props":4402,"children":4404},{"className":4403},[],[4405],{"type":48,"value":4406},"new_CustomerId@odata.bind",{"type":48,"value":4408}," for custom lookups, ",{"type":42,"tag":87,"props":4410,"children":4412},{"className":4411},[],[4413],{"type":48,"value":4414},"parentaccountid@odata.bind",{"type":48,"value":4416}," for system lookups). The SDK preserves ",{"type":42,"tag":87,"props":4418,"children":4420},{"className":4419},[],[4421],{"type":48,"value":4383},{"type":48,"value":4423}," key casing.",{"type":42,"tag":51,"props":4425,"children":4427},{"id":4426},"best-practices",[4428],{"type":48,"value":4429},"Best Practices",{"type":42,"tag":70,"props":4431,"children":4433},{"id":4432},"performance-optimization",[4434],{"type":48,"value":4435},"Performance Optimization",{"type":42,"tag":4437,"props":4438,"children":4439},"ol",{},[4440,4464,4474,4484,4515,4525,4535,4552,4562,4631,4641],{"type":42,"tag":81,"props":4441,"children":4442},{},[4443,4455,4457,4462],{"type":42,"tag":147,"props":4444,"children":4445},{},[4446,4448,4453],{"type":48,"value":4447},"Prefer ",{"type":42,"tag":87,"props":4449,"children":4451},{"className":4450},[],[4452],{"type":48,"value":1129},{"type":48,"value":4454}," for any non-trivial query",{"type":48,"value":4456}," — use the builder for filtering, sorting, expansion, or formatted values; ",{"type":42,"tag":87,"props":4458,"children":4460},{"className":4459},[],[4461],{"type":48,"value":287},{"type":48,"value":4463}," is a convenience shortcut for simple filter+select only",{"type":42,"tag":81,"props":4465,"children":4466},{},[4467,4472],{"type":42,"tag":147,"props":4468,"children":4469},{},[4470],{"type":48,"value":4471},"Use bulk operations",{"type":48,"value":4473}," - Pass lists to create\u002Fupdate\u002Fdelete for automatic optimization",{"type":42,"tag":81,"props":4475,"children":4476},{},[4477,4482],{"type":42,"tag":147,"props":4478,"children":4479},{},[4480],{"type":48,"value":4481},"Specify select fields",{"type":48,"value":4483}," - Limit returned columns to reduce payload size",{"type":42,"tag":81,"props":4485,"children":4486},{},[4487,4492,4494,4499,4501,4506,4508,4513],{"type":42,"tag":147,"props":4488,"children":4489},{},[4490],{"type":48,"value":4491},"Control page size",{"type":48,"value":4493}," - Use ",{"type":42,"tag":87,"props":4495,"children":4497},{"className":4496},[],[4498],{"type":48,"value":313},{"type":48,"value":4500}," and ",{"type":42,"tag":87,"props":4502,"children":4504},{"className":4503},[],[4505],{"type":48,"value":279},{"type":48,"value":4507}," parameters appropriately; use ",{"type":42,"tag":87,"props":4509,"children":4511},{"className":4510},[],[4512],{"type":48,"value":394},{"type":48,"value":4514}," for large sets",{"type":42,"tag":81,"props":4516,"children":4517},{},[4518,4523],{"type":42,"tag":147,"props":4519,"children":4520},{},[4521],{"type":48,"value":4522},"Reuse client instances",{"type":48,"value":4524}," - Don't create new clients for each operation",{"type":42,"tag":81,"props":4526,"children":4527},{},[4528,4533],{"type":42,"tag":147,"props":4529,"children":4530},{},[4531],{"type":48,"value":4532},"Use production credentials",{"type":48,"value":4534}," - ClientSecretCredential or CertificateCredential for unattended operations",{"type":42,"tag":81,"props":4536,"children":4537},{},[4538,4543,4545,4551],{"type":42,"tag":147,"props":4539,"children":4540},{},[4541],{"type":48,"value":4542},"Error handling",{"type":48,"value":4544}," - Implement retry logic for transient errors (",{"type":42,"tag":87,"props":4546,"children":4548},{"className":4547},[],[4549],{"type":48,"value":4550},"e.is_transient",{"type":48,"value":102},{"type":42,"tag":81,"props":4553,"children":4554},{},[4555,4560],{"type":42,"tag":147,"props":4556,"children":4557},{},[4558],{"type":48,"value":4559},"Always include customization prefix",{"type":48,"value":4561}," for custom tables\u002Fcolumns",{"type":42,"tag":81,"props":4563,"children":4564},{},[4565,4577,4579,4585,4587,4593,4595,4601,4602,4607,4609,4614,4616,4622,4624,4630],{"type":42,"tag":147,"props":4566,"children":4567},{},[4568,4570,4575],{"type":48,"value":4569},"Use lowercase for column names, match ",{"type":42,"tag":87,"props":4571,"children":4573},{"className":4572},[],[4574],{"type":48,"value":4398},{"type":48,"value":4576}," for navigation properties",{"type":48,"value":4578}," - Column names in ",{"type":42,"tag":87,"props":4580,"children":4582},{"className":4581},[],[4583],{"type":48,"value":4584},"$select",{"type":48,"value":4586},"\u002F",{"type":42,"tag":87,"props":4588,"children":4590},{"className":4589},[],[4591],{"type":48,"value":4592},"$filter",{"type":48,"value":4594},"\u002Frecord payloads use lowercase LogicalNames. Navigation properties in ",{"type":42,"tag":87,"props":4596,"children":4598},{"className":4597},[],[4599],{"type":48,"value":4600},"$expand",{"type":48,"value":4500},{"type":42,"tag":87,"props":4603,"children":4605},{"className":4604},[],[4606],{"type":48,"value":4383},{"type":48,"value":4608}," keys are case-sensitive and must match the entity's ",{"type":42,"tag":87,"props":4610,"children":4612},{"className":4611},[],[4613],{"type":48,"value":4398},{"type":48,"value":4615}," (PascalCase for custom lookups like ",{"type":42,"tag":87,"props":4617,"children":4619},{"className":4618},[],[4620],{"type":48,"value":4621},"new_CustomerId",{"type":48,"value":4623},", lowercase for system lookups like ",{"type":42,"tag":87,"props":4625,"children":4627},{"className":4626},[],[4628],{"type":48,"value":4629},"parentaccountid",{"type":48,"value":102},{"type":42,"tag":81,"props":4632,"children":4633},{},[4634,4639],{"type":42,"tag":147,"props":4635,"children":4636},{},[4637],{"type":48,"value":4638},"Test in non-production environments",{"type":48,"value":4640}," first",{"type":42,"tag":81,"props":4642,"children":4643},{},[4644,4649,4651],{"type":42,"tag":147,"props":4645,"children":4646},{},[4647],{"type":48,"value":4648},"Use named constants",{"type":48,"value":4650}," - Import cascade behavior constants from ",{"type":42,"tag":87,"props":4652,"children":4654},{"className":4653},[],[4655],{"type":48,"value":4656},"PowerPlatform.Dataverse.common.constants",{"type":42,"tag":51,"props":4658,"children":4660},{"id":4659},"async-client",[4661],{"type":48,"value":4662},"Async Client",{"type":42,"tag":58,"props":4664,"children":4665},{},[4666,4668,4674,4676,4682,4684,4690,4692,4698],{"type":48,"value":4667},"The SDK ships a full async client, ",{"type":42,"tag":87,"props":4669,"children":4671},{"className":4670},[],[4672],{"type":48,"value":4673},"AsyncDataverseClient",{"type":48,"value":4675},", under ",{"type":42,"tag":87,"props":4677,"children":4679},{"className":4678},[],[4680],{"type":48,"value":4681},"PowerPlatform.Dataverse.aio",{"type":48,"value":4683},". Requires the ",{"type":42,"tag":87,"props":4685,"children":4687},{"className":4686},[],[4688],{"type":48,"value":4689},"[async]",{"type":48,"value":4691}," extra: ",{"type":42,"tag":87,"props":4693,"children":4695},{"className":4694},[],[4696],{"type":48,"value":4697},"pip install \"PowerPlatform-Dataverse-Client[async]\"",{"type":48,"value":3767},{"type":42,"tag":1827,"props":4700,"children":4701},{},[4702],{"type":42,"tag":58,"props":4703,"children":4704},{},[4705,4709,4711,4717,4719,4725,4727,4733,4734,4740,4742,4747,4749,4755],{"type":42,"tag":147,"props":4706,"children":4707},{},[4708],{"type":48,"value":2147},{"type":48,"value":4710}," snippets in this section are fragments. Every ",{"type":42,"tag":87,"props":4712,"children":4714},{"className":4713},[],[4715],{"type":48,"value":4716},"await",{"type":48,"value":4718}," line assumes it lives inside an ",{"type":42,"tag":87,"props":4720,"children":4722},{"className":4721},[],[4723],{"type":48,"value":4724},"async def main(): ...",{"type":48,"value":4726}," body with ",{"type":42,"tag":87,"props":4728,"children":4730},{"className":4729},[],[4731],{"type":48,"value":4732},"client",{"type":48,"value":4500},{"type":42,"tag":87,"props":4735,"children":4737},{"className":4736},[],[4738],{"type":48,"value":4739},"credential",{"type":48,"value":4741}," already constructed (see the Client Initialization block for the wrapper). Outside an async function, ",{"type":42,"tag":87,"props":4743,"children":4745},{"className":4744},[],[4746],{"type":48,"value":4716},{"type":48,"value":4748}," is a ",{"type":42,"tag":87,"props":4750,"children":4752},{"className":4751},[],[4753],{"type":48,"value":4754},"SyntaxError",{"type":48,"value":3767},{"type":42,"tag":70,"props":4757,"children":4759},{"id":4758},"import-1",[4760],{"type":48,"value":642},{"type":42,"tag":644,"props":4762,"children":4764},{"className":646,"code":4763,"language":16,"meta":648,"style":648},"from azure.identity.aio import DefaultAzureCredential\nfrom PowerPlatform.Dataverse.aio import AsyncDataverseClient\n",[4765],{"type":42,"tag":87,"props":4766,"children":4767},{"__ignoreMap":648},[4768,4776],{"type":42,"tag":654,"props":4769,"children":4770},{"class":656,"line":657},[4771],{"type":42,"tag":654,"props":4772,"children":4773},{},[4774],{"type":48,"value":4775},"from azure.identity.aio import DefaultAzureCredential\n",{"type":42,"tag":654,"props":4777,"children":4778},{"class":656,"line":666},[4779],{"type":42,"tag":654,"props":4780,"children":4781},{},[4782],{"type":48,"value":4783},"from PowerPlatform.Dataverse.aio import AsyncDataverseClient\n",{"type":42,"tag":70,"props":4785,"children":4787},{"id":4786},"client-initialization-1",[4788],{"type":48,"value":723},{"type":42,"tag":644,"props":4790,"children":4792},{"className":646,"code":4791,"language":16,"meta":648,"style":648},"# given: credential constructed (e.g. DefaultAzureCredential())\n\n# Context manager (recommended -- closes session and clears caches automatically)\nasync with AsyncDataverseClient(\"https:\u002F\u002Fyourorg.crm.dynamics.com\", credential) as client:\n    ...  # all operations here\n\n# Standalone (call aclose() in a finally block)\nclient = AsyncDataverseClient(\"https:\u002F\u002Fyourorg.crm.dynamics.com\", credential)\ntry:\n    ...\nfinally:\n    await client.aclose()\n",[4793],{"type":42,"tag":87,"props":4794,"children":4795},{"__ignoreMap":648},[4796,4804,4811,4819,4827,4834,4841,4849,4857,4864,4872,4880],{"type":42,"tag":654,"props":4797,"children":4798},{"class":656,"line":657},[4799],{"type":42,"tag":654,"props":4800,"children":4801},{},[4802],{"type":48,"value":4803},"# given: credential constructed (e.g. DefaultAzureCredential())\n",{"type":42,"tag":654,"props":4805,"children":4806},{"class":656,"line":666},[4807],{"type":42,"tag":654,"props":4808,"children":4809},{"emptyLinePlaceholder":760},[4810],{"type":48,"value":763},{"type":42,"tag":654,"props":4812,"children":4813},{"class":656,"line":675},[4814],{"type":42,"tag":654,"props":4815,"children":4816},{},[4817],{"type":48,"value":4818},"# Context manager (recommended -- closes session and clears caches automatically)\n",{"type":42,"tag":654,"props":4820,"children":4821},{"class":656,"line":684},[4822],{"type":42,"tag":654,"props":4823,"children":4824},{},[4825],{"type":48,"value":4826},"async with AsyncDataverseClient(\"https:\u002F\u002Fyourorg.crm.dynamics.com\", credential) as client:\n",{"type":42,"tag":654,"props":4828,"children":4829},{"class":656,"line":693},[4830],{"type":42,"tag":654,"props":4831,"children":4832},{},[4833],{"type":48,"value":831},{"type":42,"tag":654,"props":4835,"children":4836},{"class":656,"line":702},[4837],{"type":42,"tag":654,"props":4838,"children":4839},{"emptyLinePlaceholder":760},[4840],{"type":48,"value":763},{"type":42,"tag":654,"props":4842,"children":4843},{"class":656,"line":711},[4844],{"type":42,"tag":654,"props":4845,"children":4846},{},[4847],{"type":48,"value":4848},"# Standalone (call aclose() in a finally block)\n",{"type":42,"tag":654,"props":4850,"children":4851},{"class":656,"line":790},[4852],{"type":42,"tag":654,"props":4853,"children":4854},{},[4855],{"type":48,"value":4856},"client = AsyncDataverseClient(\"https:\u002F\u002Fyourorg.crm.dynamics.com\", credential)\n",{"type":42,"tag":654,"props":4858,"children":4859},{"class":656,"line":798},[4860],{"type":42,"tag":654,"props":4861,"children":4862},{},[4863],{"type":48,"value":4211},{"type":42,"tag":654,"props":4865,"children":4866},{"class":656,"line":807},[4867],{"type":42,"tag":654,"props":4868,"children":4869},{},[4870],{"type":48,"value":4871},"    ...\n",{"type":42,"tag":654,"props":4873,"children":4874},{"class":656,"line":816},[4875],{"type":42,"tag":654,"props":4876,"children":4877},{},[4878],{"type":48,"value":4879},"finally:\n",{"type":42,"tag":654,"props":4881,"children":4882},{"class":656,"line":825},[4883],{"type":42,"tag":654,"props":4884,"children":4885},{},[4886],{"type":48,"value":4887},"    await client.aclose()\n",{"type":42,"tag":70,"props":4889,"children":4891},{"id":4890},"crud-operations-1",[4892],{"type":48,"value":872},{"type":42,"tag":58,"props":4894,"children":4895},{},[4896,4898,4903],{"type":48,"value":4897},"Every sync method has an async equivalent -- add ",{"type":42,"tag":87,"props":4899,"children":4901},{"className":4900},[],[4902],{"type":48,"value":4716},{"type":48,"value":4904},":",{"type":42,"tag":644,"props":4906,"children":4908},{"className":646,"code":4907,"language":16,"meta":648,"style":648},"# given: client is an open AsyncDataverseClient\n\n# Create\naccount_id = await client.records.create(\"account\", {\"name\": \"Contoso Ltd\"})\n\n# Read\naccount = await client.records.retrieve(\"account\", account_id, select=[\"name\", \"telephone1\"])\n\n# Update\nawait client.records.update(\"account\", account_id, {\"telephone1\": \"555-0200\"})\n\n# Delete\nawait client.records.delete(\"account\", account_id)\n\n# Bulk create\nids = await client.records.create(\"account\", [{\"name\": \"A\"}, {\"name\": \"B\"}])\n",[4909],{"type":42,"tag":87,"props":4910,"children":4911},{"__ignoreMap":648},[4912,4920,4927,4935,4943,4950,4958,4966,4973,4981,4989,4996,5004,5012,5019,5027],{"type":42,"tag":654,"props":4913,"children":4914},{"class":656,"line":657},[4915],{"type":42,"tag":654,"props":4916,"children":4917},{},[4918],{"type":48,"value":4919},"# given: client is an open AsyncDataverseClient\n",{"type":42,"tag":654,"props":4921,"children":4922},{"class":656,"line":666},[4923],{"type":42,"tag":654,"props":4924,"children":4925},{"emptyLinePlaceholder":760},[4926],{"type":48,"value":763},{"type":42,"tag":654,"props":4928,"children":4929},{"class":656,"line":675},[4930],{"type":42,"tag":654,"props":4931,"children":4932},{},[4933],{"type":48,"value":4934},"# Create\n",{"type":42,"tag":654,"props":4936,"children":4937},{"class":656,"line":684},[4938],{"type":42,"tag":654,"props":4939,"children":4940},{},[4941],{"type":48,"value":4942},"account_id = await client.records.create(\"account\", {\"name\": \"Contoso Ltd\"})\n",{"type":42,"tag":654,"props":4944,"children":4945},{"class":656,"line":693},[4946],{"type":42,"tag":654,"props":4947,"children":4948},{"emptyLinePlaceholder":760},[4949],{"type":48,"value":763},{"type":42,"tag":654,"props":4951,"children":4952},{"class":656,"line":702},[4953],{"type":42,"tag":654,"props":4954,"children":4955},{},[4956],{"type":48,"value":4957},"# Read\n",{"type":42,"tag":654,"props":4959,"children":4960},{"class":656,"line":711},[4961],{"type":42,"tag":654,"props":4962,"children":4963},{},[4964],{"type":48,"value":4965},"account = await client.records.retrieve(\"account\", account_id, select=[\"name\", \"telephone1\"])\n",{"type":42,"tag":654,"props":4967,"children":4968},{"class":656,"line":790},[4969],{"type":42,"tag":654,"props":4970,"children":4971},{"emptyLinePlaceholder":760},[4972],{"type":48,"value":763},{"type":42,"tag":654,"props":4974,"children":4975},{"class":656,"line":798},[4976],{"type":42,"tag":654,"props":4977,"children":4978},{},[4979],{"type":48,"value":4980},"# Update\n",{"type":42,"tag":654,"props":4982,"children":4983},{"class":656,"line":807},[4984],{"type":42,"tag":654,"props":4985,"children":4986},{},[4987],{"type":48,"value":4988},"await client.records.update(\"account\", account_id, {\"telephone1\": \"555-0200\"})\n",{"type":42,"tag":654,"props":4990,"children":4991},{"class":656,"line":816},[4992],{"type":42,"tag":654,"props":4993,"children":4994},{"emptyLinePlaceholder":760},[4995],{"type":48,"value":763},{"type":42,"tag":654,"props":4997,"children":4998},{"class":656,"line":825},[4999],{"type":42,"tag":654,"props":5000,"children":5001},{},[5002],{"type":48,"value":5003},"# Delete\n",{"type":42,"tag":654,"props":5005,"children":5006},{"class":656,"line":834},[5007],{"type":42,"tag":654,"props":5008,"children":5009},{},[5010],{"type":48,"value":5011},"await client.records.delete(\"account\", account_id)\n",{"type":42,"tag":654,"props":5013,"children":5014},{"class":656,"line":843},[5015],{"type":42,"tag":654,"props":5016,"children":5017},{"emptyLinePlaceholder":760},[5018],{"type":48,"value":763},{"type":42,"tag":654,"props":5020,"children":5021},{"class":656,"line":851},[5022],{"type":42,"tag":654,"props":5023,"children":5024},{},[5025],{"type":48,"value":5026},"# Bulk create\n",{"type":42,"tag":654,"props":5028,"children":5029},{"class":656,"line":860},[5030],{"type":42,"tag":654,"props":5031,"children":5032},{},[5033],{"type":48,"value":5034},"ids = await client.records.create(\"account\", [{\"name\": \"A\"}, {\"name\": \"B\"}])\n",{"type":42,"tag":70,"props":5036,"children":5038},{"id":5037},"query-builder",[5039],{"type":48,"value":5040},"Query Builder",{"type":42,"tag":644,"props":5042,"children":5044},{"className":646,"code":5043,"language":16,"meta":648,"style":648},"# given: client is an open AsyncDataverseClient\nfrom PowerPlatform.Dataverse.models.filters import col\n\n# Collect all results\nresult = await (\n    client.query.builder(\"account\")\n    .select(\"name\", \"telephone1\")\n    .where(col(\"statecode\") == 0)\n    .top(10)\n    .execute()\n)\nfor record in result:\n    print(record[\"name\"])\n\n# Lazy page iteration (memory-efficient)\nasync for page in (\n    client.query.builder(\"account\")\n    .select(\"name\")\n    .page_size(500)\n    .execute_pages()\n):\n    for record in page:\n        print(record[\"name\"])\n\n# SQL query\nrows = await client.query.sql(\"SELECT TOP 5 name FROM account\")\n\n# FetchXML\nxml = '\u003Cfetch top=\"5\">\u003Centity name=\"account\">\u003Cattribute name=\"name\"\u002F>\u003C\u002Fentity>\u003C\u002Ffetch>'\nrows = await client.query.fetchxml(xml).execute()\n",[5045],{"type":42,"tag":87,"props":5046,"children":5047},{"__ignoreMap":648},[5048,5055,5062,5069,5077,5085,5093,5101,5109,5117,5125,5132,5139,5146,5153,5161,5169,5176,5184,5192,5200,5208,5215,5222,5229,5237,5245,5252,5260,5268],{"type":42,"tag":654,"props":5049,"children":5050},{"class":656,"line":657},[5051],{"type":42,"tag":654,"props":5052,"children":5053},{},[5054],{"type":48,"value":4919},{"type":42,"tag":654,"props":5056,"children":5057},{"class":656,"line":666},[5058],{"type":42,"tag":654,"props":5059,"children":5060},{},[5061],{"type":48,"value":1153},{"type":42,"tag":654,"props":5063,"children":5064},{"class":656,"line":675},[5065],{"type":42,"tag":654,"props":5066,"children":5067},{"emptyLinePlaceholder":760},[5068],{"type":48,"value":763},{"type":42,"tag":654,"props":5070,"children":5071},{"class":656,"line":684},[5072],{"type":42,"tag":654,"props":5073,"children":5074},{},[5075],{"type":48,"value":5076},"# Collect all results\n",{"type":42,"tag":654,"props":5078,"children":5079},{"class":656,"line":693},[5080],{"type":42,"tag":654,"props":5081,"children":5082},{},[5083],{"type":48,"value":5084},"result = await (\n",{"type":42,"tag":654,"props":5086,"children":5087},{"class":656,"line":702},[5088],{"type":42,"tag":654,"props":5089,"children":5090},{},[5091],{"type":48,"value":5092},"    client.query.builder(\"account\")\n",{"type":42,"tag":654,"props":5094,"children":5095},{"class":656,"line":711},[5096],{"type":42,"tag":654,"props":5097,"children":5098},{},[5099],{"type":48,"value":5100},"    .select(\"name\", \"telephone1\")\n",{"type":42,"tag":654,"props":5102,"children":5103},{"class":656,"line":790},[5104],{"type":42,"tag":654,"props":5105,"children":5106},{},[5107],{"type":48,"value":5108},"    .where(col(\"statecode\") == 0)\n",{"type":42,"tag":654,"props":5110,"children":5111},{"class":656,"line":798},[5112],{"type":42,"tag":654,"props":5113,"children":5114},{},[5115],{"type":48,"value":5116},"    .top(10)\n",{"type":42,"tag":654,"props":5118,"children":5119},{"class":656,"line":807},[5120],{"type":42,"tag":654,"props":5121,"children":5122},{},[5123],{"type":48,"value":5124},"    .execute()\n",{"type":42,"tag":654,"props":5126,"children":5127},{"class":656,"line":816},[5128],{"type":42,"tag":654,"props":5129,"children":5130},{},[5131],{"type":48,"value":708},{"type":42,"tag":654,"props":5133,"children":5134},{"class":656,"line":825},[5135],{"type":42,"tag":654,"props":5136,"children":5137},{},[5138],{"type":48,"value":1104},{"type":42,"tag":654,"props":5140,"children":5141},{"class":656,"line":834},[5142],{"type":42,"tag":654,"props":5143,"children":5144},{},[5145],{"type":48,"value":1113},{"type":42,"tag":654,"props":5147,"children":5148},{"class":656,"line":843},[5149],{"type":42,"tag":654,"props":5150,"children":5151},{"emptyLinePlaceholder":760},[5152],{"type":48,"value":763},{"type":42,"tag":654,"props":5154,"children":5155},{"class":656,"line":851},[5156],{"type":42,"tag":654,"props":5157,"children":5158},{},[5159],{"type":48,"value":5160},"# Lazy page iteration (memory-efficient)\n",{"type":42,"tag":654,"props":5162,"children":5163},{"class":656,"line":860},[5164],{"type":42,"tag":654,"props":5165,"children":5166},{},[5167],{"type":48,"value":5168},"async for page in (\n",{"type":42,"tag":654,"props":5170,"children":5171},{"class":656,"line":1098},[5172],{"type":42,"tag":654,"props":5173,"children":5174},{},[5175],{"type":48,"value":5092},{"type":42,"tag":654,"props":5177,"children":5178},{"class":656,"line":1107},[5179],{"type":42,"tag":654,"props":5180,"children":5181},{},[5182],{"type":48,"value":5183},"    .select(\"name\")\n",{"type":42,"tag":654,"props":5185,"children":5186},{"class":656,"line":1286},[5187],{"type":42,"tag":654,"props":5188,"children":5189},{},[5190],{"type":48,"value":5191},"    .page_size(500)\n",{"type":42,"tag":654,"props":5193,"children":5194},{"class":656,"line":1295},[5195],{"type":42,"tag":654,"props":5196,"children":5197},{},[5198],{"type":48,"value":5199},"    .execute_pages()\n",{"type":42,"tag":654,"props":5201,"children":5202},{"class":656,"line":1303},[5203],{"type":42,"tag":654,"props":5204,"children":5205},{},[5206],{"type":48,"value":5207},"):\n",{"type":42,"tag":654,"props":5209,"children":5210},{"class":656,"line":1312},[5211],{"type":42,"tag":654,"props":5212,"children":5213},{},[5214],{"type":48,"value":1524},{"type":42,"tag":654,"props":5216,"children":5217},{"class":656,"line":30},[5218],{"type":42,"tag":654,"props":5219,"children":5220},{},[5221],{"type":48,"value":1533},{"type":42,"tag":654,"props":5223,"children":5224},{"class":656,"line":1328},[5225],{"type":42,"tag":654,"props":5226,"children":5227},{"emptyLinePlaceholder":760},[5228],{"type":48,"value":763},{"type":42,"tag":654,"props":5230,"children":5231},{"class":656,"line":1336},[5232],{"type":42,"tag":654,"props":5233,"children":5234},{},[5235],{"type":48,"value":5236},"# SQL query\n",{"type":42,"tag":654,"props":5238,"children":5239},{"class":656,"line":1344},[5240],{"type":42,"tag":654,"props":5241,"children":5242},{},[5243],{"type":48,"value":5244},"rows = await client.query.sql(\"SELECT TOP 5 name FROM account\")\n",{"type":42,"tag":654,"props":5246,"children":5247},{"class":656,"line":1353},[5248],{"type":42,"tag":654,"props":5249,"children":5250},{"emptyLinePlaceholder":760},[5251],{"type":48,"value":763},{"type":42,"tag":654,"props":5253,"children":5254},{"class":656,"line":1362},[5255],{"type":42,"tag":654,"props":5256,"children":5257},{},[5258],{"type":48,"value":5259},"# FetchXML\n",{"type":42,"tag":654,"props":5261,"children":5262},{"class":656,"line":1370},[5263],{"type":42,"tag":654,"props":5264,"children":5265},{},[5266],{"type":48,"value":5267},"xml = '\u003Cfetch top=\"5\">\u003Centity name=\"account\">\u003Cattribute name=\"name\"\u002F>\u003C\u002Fentity>\u003C\u002Ffetch>'\n",{"type":42,"tag":654,"props":5269,"children":5270},{"class":656,"line":1379},[5271],{"type":42,"tag":654,"props":5272,"children":5273},{},[5274],{"type":48,"value":5275},"rows = await client.query.fetchxml(xml).execute()\n",{"type":42,"tag":70,"props":5277,"children":5279},{"id":5278},"batch-and-changesets",[5280],{"type":48,"value":5281},"Batch and Changesets",{"type":42,"tag":644,"props":5283,"children":5285},{"className":646,"code":5284,"language":16,"meta":648,"style":648},"# given: client is open; account_id from an earlier records.create\n\n# Plain batch\nbatch = client.batch.new()\nbatch.records.create(\"account\", {\"name\": \"Alpha\"})\nresult = await batch.execute()\n\n# Atomic changeset\nbatch = client.batch.new()\nasync with batch.changeset() as cs:\n    ref = cs.records.create(\"contact\", {\"firstname\": \"Alice\"})\n    cs.records.update(\"account\", account_id, {\"primarycontactid@odata.bind\": ref})\nresult = await batch.execute()\n",[5286],{"type":42,"tag":87,"props":5287,"children":5288},{"__ignoreMap":648},[5289,5297,5304,5312,5319,5327,5335,5342,5350,5357,5365,5372,5379],{"type":42,"tag":654,"props":5290,"children":5291},{"class":656,"line":657},[5292],{"type":42,"tag":654,"props":5293,"children":5294},{},[5295],{"type":48,"value":5296},"# given: client is open; account_id from an earlier records.create\n",{"type":42,"tag":654,"props":5298,"children":5299},{"class":656,"line":666},[5300],{"type":42,"tag":654,"props":5301,"children":5302},{"emptyLinePlaceholder":760},[5303],{"type":48,"value":763},{"type":42,"tag":654,"props":5305,"children":5306},{"class":656,"line":675},[5307],{"type":42,"tag":654,"props":5308,"children":5309},{},[5310],{"type":48,"value":5311},"# Plain batch\n",{"type":42,"tag":654,"props":5313,"children":5314},{"class":656,"line":684},[5315],{"type":42,"tag":654,"props":5316,"children":5317},{},[5318],{"type":48,"value":3790},{"type":42,"tag":654,"props":5320,"children":5321},{"class":656,"line":693},[5322],{"type":42,"tag":654,"props":5323,"children":5324},{},[5325],{"type":48,"value":5326},"batch.records.create(\"account\", {\"name\": \"Alpha\"})\n",{"type":42,"tag":654,"props":5328,"children":5329},{"class":656,"line":702},[5330],{"type":42,"tag":654,"props":5331,"children":5332},{},[5333],{"type":48,"value":5334},"result = await batch.execute()\n",{"type":42,"tag":654,"props":5336,"children":5337},{"class":656,"line":711},[5338],{"type":42,"tag":654,"props":5339,"children":5340},{"emptyLinePlaceholder":760},[5341],{"type":48,"value":763},{"type":42,"tag":654,"props":5343,"children":5344},{"class":656,"line":790},[5345],{"type":42,"tag":654,"props":5346,"children":5347},{},[5348],{"type":48,"value":5349},"# Atomic changeset\n",{"type":42,"tag":654,"props":5351,"children":5352},{"class":656,"line":798},[5353],{"type":42,"tag":654,"props":5354,"children":5355},{},[5356],{"type":48,"value":3790},{"type":42,"tag":654,"props":5358,"children":5359},{"class":656,"line":807},[5360],{"type":42,"tag":654,"props":5361,"children":5362},{},[5363],{"type":48,"value":5364},"async with batch.changeset() as cs:\n",{"type":42,"tag":654,"props":5366,"children":5367},{"class":656,"line":816},[5368],{"type":42,"tag":654,"props":5369,"children":5370},{},[5371],{"type":48,"value":3940},{"type":42,"tag":654,"props":5373,"children":5374},{"class":656,"line":825},[5375],{"type":42,"tag":654,"props":5376,"children":5377},{},[5378],{"type":48,"value":3948},{"type":42,"tag":654,"props":5380,"children":5381},{"class":656,"line":834},[5382],{"type":42,"tag":654,"props":5383,"children":5384},{},[5385],{"type":48,"value":5334},{"type":42,"tag":70,"props":5387,"children":5389},{"id":5388},"dataframe-operations-1",[5390],{"type":48,"value":2124},{"type":42,"tag":644,"props":5392,"children":5394},{"className":646,"code":5393,"language":16,"meta":648,"style":648},"# given: client is an open AsyncDataverseClient\nimport pandas as pd\n\n# Query to DataFrame\nresult = await (\n    client.query.builder(\"account\")\n    .select(\"name\", \"telephone1\")\n    .where(col(\"statecode\") == 0)\n    .execute()\n)\ndf = result.to_dataframe()\n\n# Create from DataFrame\nnew_accounts = pd.DataFrame([{\"name\": \"Contoso\"}, {\"name\": \"Fabrikam\"}])\nids = await client.dataframe.create(\"account\", new_accounts)\n",[5395],{"type":42,"tag":87,"props":5396,"children":5397},{"__ignoreMap":648},[5398,5405,5412,5419,5427,5434,5441,5448,5455,5462,5469,5477,5484,5492,5500],{"type":42,"tag":654,"props":5399,"children":5400},{"class":656,"line":657},[5401],{"type":42,"tag":654,"props":5402,"children":5403},{},[5404],{"type":48,"value":4919},{"type":42,"tag":654,"props":5406,"children":5407},{"class":656,"line":666},[5408],{"type":42,"tag":654,"props":5409,"children":5410},{},[5411],{"type":48,"value":2201},{"type":42,"tag":654,"props":5413,"children":5414},{"class":656,"line":675},[5415],{"type":42,"tag":654,"props":5416,"children":5417},{"emptyLinePlaceholder":760},[5418],{"type":48,"value":763},{"type":42,"tag":654,"props":5420,"children":5421},{"class":656,"line":684},[5422],{"type":42,"tag":654,"props":5423,"children":5424},{},[5425],{"type":48,"value":5426},"# Query to DataFrame\n",{"type":42,"tag":654,"props":5428,"children":5429},{"class":656,"line":693},[5430],{"type":42,"tag":654,"props":5431,"children":5432},{},[5433],{"type":48,"value":5084},{"type":42,"tag":654,"props":5435,"children":5436},{"class":656,"line":702},[5437],{"type":42,"tag":654,"props":5438,"children":5439},{},[5440],{"type":48,"value":5092},{"type":42,"tag":654,"props":5442,"children":5443},{"class":656,"line":711},[5444],{"type":42,"tag":654,"props":5445,"children":5446},{},[5447],{"type":48,"value":5100},{"type":42,"tag":654,"props":5449,"children":5450},{"class":656,"line":790},[5451],{"type":42,"tag":654,"props":5452,"children":5453},{},[5454],{"type":48,"value":5108},{"type":42,"tag":654,"props":5456,"children":5457},{"class":656,"line":798},[5458],{"type":42,"tag":654,"props":5459,"children":5460},{},[5461],{"type":48,"value":5124},{"type":42,"tag":654,"props":5463,"children":5464},{"class":656,"line":807},[5465],{"type":42,"tag":654,"props":5466,"children":5467},{},[5468],{"type":48,"value":708},{"type":42,"tag":654,"props":5470,"children":5471},{"class":656,"line":816},[5472],{"type":42,"tag":654,"props":5473,"children":5474},{},[5475],{"type":48,"value":5476},"df = result.to_dataframe()\n",{"type":42,"tag":654,"props":5478,"children":5479},{"class":656,"line":825},[5480],{"type":42,"tag":654,"props":5481,"children":5482},{"emptyLinePlaceholder":760},[5483],{"type":48,"value":763},{"type":42,"tag":654,"props":5485,"children":5486},{"class":656,"line":834},[5487],{"type":42,"tag":654,"props":5488,"children":5489},{},[5490],{"type":48,"value":5491},"# Create from DataFrame\n",{"type":42,"tag":654,"props":5493,"children":5494},{"class":656,"line":843},[5495],{"type":42,"tag":654,"props":5496,"children":5497},{},[5498],{"type":48,"value":5499},"new_accounts = pd.DataFrame([{\"name\": \"Contoso\"}, {\"name\": \"Fabrikam\"}])\n",{"type":42,"tag":654,"props":5501,"children":5502},{"class":656,"line":851},[5503],{"type":42,"tag":654,"props":5504,"children":5505},{},[5506],{"type":48,"value":5507},"ids = await client.dataframe.create(\"account\", new_accounts)\n",{"type":42,"tag":51,"props":5509,"children":5511},{"id":5510},"additional-resources",[5512],{"type":48,"value":5513},"Additional Resources",{"type":42,"tag":58,"props":5515,"children":5516},{},[5517],{"type":48,"value":5518},"Load these resources as needed during development:",{"type":42,"tag":77,"props":5520,"children":5521},{},[5522,5534,5544,5554],{"type":42,"tag":81,"props":5523,"children":5524},{},[5525],{"type":42,"tag":5526,"props":5527,"children":5531},"a",{"href":5528,"rel":5529},"https:\u002F\u002Flearn.microsoft.com\u002Fpython\u002Fapi\u002Fdataverse-sdk-docs-python\u002Fdataverse-overview",[5530],"nofollow",[5532],{"type":48,"value":5533},"API Reference",{"type":42,"tag":81,"props":5535,"children":5536},{},[5537],{"type":42,"tag":5526,"props":5538,"children":5541},{"href":5539,"rel":5540},"https:\u002F\u002Flearn.microsoft.com\u002Fpower-apps\u002Fdeveloper\u002Fdata-platform\u002Fsdk-python\u002F",[5530],[5542],{"type":48,"value":5543},"Product Documentation",{"type":42,"tag":81,"props":5545,"children":5546},{},[5547],{"type":42,"tag":5526,"props":5548,"children":5551},{"href":5549,"rel":5550},"https:\u002F\u002Flearn.microsoft.com\u002Fpower-apps\u002Fdeveloper\u002Fdata-platform\u002Fwebapi\u002F",[5530],[5552],{"type":48,"value":5553},"Dataverse Web API",{"type":42,"tag":81,"props":5555,"children":5556},{},[5557],{"type":42,"tag":5526,"props":5558,"children":5561},{"href":5559,"rel":5560},"https:\u002F\u002Flearn.microsoft.com\u002Fpython\u002Fapi\u002Foverview\u002Fazure\u002Fidentity-readme",[5530],[5562],{"type":48,"value":5563},"Azure Identity",{"type":42,"tag":51,"props":5565,"children":5567},{"id":5566},"key-reminders",[5568],{"type":48,"value":5569},"Key Reminders",{"type":42,"tag":4437,"props":5571,"children":5572},{},[5573,5596,5606,5616,5626,5636,5652],{"type":42,"tag":81,"props":5574,"children":5575},{},[5576,5587,5589,5594],{"type":42,"tag":147,"props":5577,"children":5578},{},[5579,5580,5585],{"type":48,"value":307},{"type":42,"tag":87,"props":5581,"children":5583},{"className":5582},[],[5584],{"type":48,"value":1129},{"type":48,"value":5586}," for queries",{"type":48,"value":5588}," — it's the primary query pattern; ",{"type":42,"tag":87,"props":5590,"children":5592},{"className":5591},[],[5593],{"type":48,"value":287},{"type":48,"value":5595}," is a shortcut for trivial filter+select only",{"type":42,"tag":81,"props":5597,"children":5598},{},[5599,5604],{"type":42,"tag":147,"props":5600,"children":5601},{},[5602],{"type":48,"value":5603},"Schema names are required",{"type":48,"value":5605}," - Never use display names",{"type":42,"tag":81,"props":5607,"children":5608},{},[5609,5614],{"type":42,"tag":147,"props":5610,"children":5611},{},[5612],{"type":48,"value":5613},"Custom tables need prefixes",{"type":48,"value":5615}," - Include customization prefix (e.g., \"new_\")",{"type":42,"tag":81,"props":5617,"children":5618},{},[5619,5624],{"type":42,"tag":147,"props":5620,"children":5621},{},[5622],{"type":48,"value":5623},"Filter is case-sensitive",{"type":48,"value":5625}," - Use lowercase logical names",{"type":42,"tag":81,"props":5627,"children":5628},{},[5629,5634],{"type":42,"tag":147,"props":5630,"children":5631},{},[5632],{"type":48,"value":5633},"Bulk operations are encouraged",{"type":48,"value":5635}," - Pass lists for optimization",{"type":42,"tag":81,"props":5637,"children":5638},{},[5639,5644,5646],{"type":42,"tag":147,"props":5640,"children":5641},{},[5642],{"type":48,"value":5643},"No trailing slashes in URLs",{"type":48,"value":5645}," - Format: ",{"type":42,"tag":87,"props":5647,"children":5649},{"className":5648},[],[5650],{"type":48,"value":5651},"https:\u002F\u002Forg.crm.dynamics.com",{"type":42,"tag":81,"props":5653,"children":5654},{},[5655,5660,5662,5668],{"type":42,"tag":147,"props":5656,"children":5657},{},[5658],{"type":48,"value":5659},"Structured errors",{"type":48,"value":5661}," - Check ",{"type":42,"tag":87,"props":5663,"children":5665},{"className":5664},[],[5666],{"type":48,"value":5667},"is_transient",{"type":48,"value":5669}," for retry logic",{"type":42,"tag":5671,"props":5672,"children":5673},"style",{},[5674],{"type":48,"value":5675},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":5677,"total":666},[5678,5692],{"slug":5679,"name":5679,"fn":5680,"description":5681,"org":5682,"tags":5683,"stars":26,"repoUrl":27,"updatedAt":5691},"dataverse-sdk-dev","contribute to the Dataverse Client Python SDK","Development guidance for contributing to the PowerPlatform Dataverse Client Python SDK repository. Use when working on SDK development tasks like adding features, fixing bugs, or writing tests.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5684,5685,5688,5689,5690],{"name":21,"slug":22,"type":13},{"name":5686,"slug":5687,"type":13},"Engineering","engineering",{"name":9,"slug":8,"type":13},{"name":15,"slug":16,"type":13},{"name":24,"slug":25,"type":13},"2026-04-06T18:36:19.376634",{"slug":4,"name":4,"fn":5,"description":6,"org":5693,"tags":5694,"stars":26,"repoUrl":27,"updatedAt":28},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5695,5696,5697,5698,5699],{"name":18,"slug":19,"type":13},{"name":21,"slug":22,"type":13},{"name":9,"slug":8,"type":13},{"name":15,"slug":16,"type":13},{"name":24,"slug":25,"type":13},{"items":5701,"total":5890},[5702,5722,5743,5764,5779,5794,5805,5816,5831,5846,5865,5878],{"slug":5703,"name":5703,"fn":5704,"description":5705,"org":5706,"tags":5707,"stars":5719,"repoUrl":5720,"updatedAt":5721},"rushstack-best-practices","manage Rush monorepos with best practices","Provides best practices and guidance for working with Rush monorepos. Use when the user is working in a Rush-based repository, asks about Rush commands (install, update, build, rebuild), needs help with project selection, dependency management, build caching, subspace configuration, or troubleshooting Rush-specific issues.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5708,5709,5712,5713,5716],{"name":5686,"slug":5687,"type":13},{"name":5710,"slug":5711,"type":13},"Local Development","local-development",{"name":9,"slug":8,"type":13},{"name":5714,"slug":5715,"type":13},"Project Management","project-management",{"name":5717,"slug":5718,"type":13},"Rush","rush",6484,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Frushstack","2026-04-06T18:34:44.965032",{"slug":5723,"name":5723,"fn":5724,"description":5725,"org":5726,"tags":5727,"stars":5740,"repoUrl":5741,"updatedAt":5742},"azure-ai-agents-persistent-dotnet","build AI agents with Azure .NET SDK","Azure AI Agents Persistent SDK for .NET. Low-level SDK for creating and managing AI agents with threads, messages, runs, and tools. Use for agent CRUD, conversation threads, streaming responses, function calling, file search, and code interpreter. Triggers: \"PersistentAgentsClient\", \"persistent agents\", \"agent threads\", \"agent runs\", \"streaming agents\", \"function calling agents .NET\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5728,5731,5734,5737],{"name":5729,"slug":5730,"type":13},".NET","net",{"name":5732,"slug":5733,"type":13},"Agents","agents",{"name":5735,"slug":5736,"type":13},"Azure","azure",{"name":5738,"slug":5739,"type":13},"LLM","llm",2804,"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fskills","2026-07-03T16:32:10.297433",{"slug":5744,"name":5744,"fn":5745,"description":5746,"org":5747,"tags":5748,"stars":5740,"repoUrl":5741,"updatedAt":5763},"azure-ai-anomalydetector-java","build anomaly detection applications with Java","Build anomaly detection applications with Azure AI Anomaly Detector SDK for Java. Use when implementing univariate\u002Fmultivariate anomaly detection, time-series analysis, or AI-powered monitoring.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5749,5752,5753,5756,5759,5760],{"name":5750,"slug":5751,"type":13},"Analytics","analytics",{"name":5735,"slug":5736,"type":13},{"name":5754,"slug":5755,"type":13},"Data Analysis","data-analysis",{"name":5757,"slug":5758,"type":13},"Java","java",{"name":9,"slug":8,"type":13},{"name":5761,"slug":5762,"type":13},"Monitoring","monitoring","2026-05-13T06:14:16.261754",{"slug":5765,"name":5765,"fn":5766,"description":5767,"org":5768,"tags":5769,"stars":5740,"repoUrl":5741,"updatedAt":5778},"azure-ai-contentsafety-java","build content moderation applications with Azure AI","Build content moderation applications with Azure AI Content Safety SDK for Java. Use when implementing text\u002Fimage analysis, blocklist management, or harm detection for hate, violence, sexual content, and self-harm.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5770,5773,5774,5775],{"name":5771,"slug":5772,"type":13},"AI Infrastructure","ai-infrastructure",{"name":5735,"slug":5736,"type":13},{"name":5757,"slug":5758,"type":13},{"name":5776,"slug":5777,"type":13},"Security","security","2026-07-07T06:53:31.293235",{"slug":5780,"name":5780,"fn":5781,"description":5782,"org":5783,"tags":5784,"stars":5740,"repoUrl":5741,"updatedAt":5793},"azure-ai-contentsafety-py","detect harmful content with Azure AI Content Safety","Azure AI Content Safety SDK for Python. Use for detecting harmful content in text and images with multi-severity classification.\nTriggers: \"azure-ai-contentsafety\", \"ContentSafetyClient\", \"content moderation\", \"harmful content\", \"text analysis\", \"image analysis\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5785,5786,5789,5790,5791,5792],{"name":5735,"slug":5736,"type":13},{"name":5787,"slug":5788,"type":13},"Compliance","compliance",{"name":5738,"slug":5739,"type":13},{"name":9,"slug":8,"type":13},{"name":15,"slug":16,"type":13},{"name":5776,"slug":5777,"type":13},"2026-07-18T05:14:23.017504",{"slug":5795,"name":5795,"fn":5796,"description":5797,"org":5798,"tags":5799,"stars":5740,"repoUrl":5741,"updatedAt":5804},"azure-ai-language-conversations-py","implement conversational language understanding with Python","Implement Conversational Language Understanding (CLU) using the azure-ai-language-conversations Python SDK. Use when working with ConversationAnalysisClient to analyze conversation intent and entities, building NLP features, or integrating language understanding into applications.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5800,5801,5802,5803],{"name":5750,"slug":5751,"type":13},{"name":5735,"slug":5736,"type":13},{"name":5738,"slug":5739,"type":13},{"name":15,"slug":16,"type":13},"2026-07-31T05:54:29.068751",{"slug":5806,"name":5806,"fn":5807,"description":5808,"org":5809,"tags":5810,"stars":5740,"repoUrl":5741,"updatedAt":5815},"azure-ai-translation-text-py","translate text using Azure AI services","Azure AI Text Translation SDK for real-time text translation, transliteration, language detection, and dictionary lookup. Use for translating text content in applications.\nTriggers: \"text translation\", \"translator\", \"translate text\", \"transliterate\", \"TextTranslationClient\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5811,5812,5813,5814],{"name":18,"slug":19,"type":13},{"name":5735,"slug":5736,"type":13},{"name":9,"slug":8,"type":13},{"name":15,"slug":16,"type":13},"2026-07-18T05:14:16.988376",{"slug":5817,"name":5817,"fn":5818,"description":5819,"org":5820,"tags":5821,"stars":5740,"repoUrl":5741,"updatedAt":5830},"azure-ai-vision-imageanalysis-py","analyze images with Azure AI Vision","Azure AI Vision Image Analysis SDK for captions, tags, objects, OCR, people detection, and smart cropping. Use for computer vision and image understanding tasks.\nTriggers: \"image analysis\", \"computer vision\", \"OCR\", \"object detection\", \"ImageAnalysisClient\", \"image caption\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5822,5823,5826,5829],{"name":5735,"slug":5736,"type":13},{"name":5824,"slug":5825,"type":13},"Computer Vision","computer-vision",{"name":5827,"slug":5828,"type":13},"Images","images",{"name":15,"slug":16,"type":13},"2026-07-18T05:14:18.007737",{"slug":5832,"name":5832,"fn":5833,"description":5834,"org":5835,"tags":5836,"stars":5740,"repoUrl":5741,"updatedAt":5845},"azure-appconfiguration-java","manage configuration with Azure App Configuration","Azure App Configuration SDK for Java. Centralized application configuration management with key-value settings, feature flags, and snapshots.\nTriggers: \"ConfigurationClient java\", \"app configuration java\", \"feature flag java\", \"configuration setting java\", \"azure config java\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5837,5838,5841,5844],{"name":5735,"slug":5736,"type":13},{"name":5839,"slug":5840,"type":13},"Configuration","configuration",{"name":5842,"slug":5843,"type":13},"Feature Flags","feature-flags",{"name":5757,"slug":5758,"type":13},"2026-07-03T16:32:01.278468",{"slug":5847,"name":5847,"fn":5848,"description":5849,"org":5850,"tags":5851,"stars":5740,"repoUrl":5741,"updatedAt":5864},"azure-cosmos-rust","build applications with Azure Cosmos DB","Azure Cosmos DB library for Rust (NoSQL API). Document CRUD, containers, and globally distributed data.\nTriggers: \"cosmos db rust\", \"CosmosClient rust\", \"document crud rust\", \"NoSQL rust\", \"partition key rust\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5852,5855,5858,5861],{"name":5853,"slug":5854,"type":13},"Cosmos DB","cosmos-db",{"name":5856,"slug":5857,"type":13},"Database","database",{"name":5859,"slug":5860,"type":13},"NoSQL","nosql",{"name":5862,"slug":5863,"type":13},"Rust","rust","2026-07-31T05:54:27.021432",{"slug":5866,"name":5866,"fn":5848,"description":5867,"org":5868,"tags":5869,"stars":5740,"repoUrl":5741,"updatedAt":5877},"azure-cosmos-ts","Azure Cosmos DB JavaScript\u002FTypeScript SDK (@azure\u002Fcosmos) for data plane operations. Use for CRUD operations on documents, queries, bulk operations, and container management. Triggers: \"Cosmos DB\", \"@azure\u002Fcosmos\", \"CosmosClient\", \"document CRUD\", \"NoSQL queries\", \"bulk operations\", \"partition key\", \"container.items\".\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5870,5871,5872,5873,5874],{"name":5853,"slug":5854,"type":13},{"name":5856,"slug":5857,"type":13},{"name":9,"slug":8,"type":13},{"name":5859,"slug":5860,"type":13},{"name":5875,"slug":5876,"type":13},"TypeScript","typescript","2026-07-03T16:31:19.368382",{"slug":5879,"name":5879,"fn":5880,"description":5881,"org":5882,"tags":5883,"stars":5740,"repoUrl":5741,"updatedAt":5889},"azure-data-tables-java","build table storage applications with Java","Build table storage applications with Azure Tables SDK for Java. Use when working with Azure Table Storage or Cosmos DB Table API for NoSQL key-value data, schemaless storage, or structured data at scale.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[5884,5885,5886,5887,5888],{"name":5735,"slug":5736,"type":13},{"name":5853,"slug":5854,"type":13},{"name":5856,"slug":5857,"type":13},{"name":5757,"slug":5758,"type":13},{"name":5859,"slug":5860,"type":13},"2026-05-13T06:14:17.582229",267]