Skip to main content
Question

OData v4 PX_SM_Users returns fewer users than a GI on PX.SM.Users

  • Oct 29, 2026 6:27 AM UTC
  • 1 reply
  • 29 views
  • Translate All

Hi all,

We extract users from Acumatica with OData v4 (Python), DAC PX_SM_Users. The DAC endpoint returns fewer users than the GI on the same table. 

Odata return 523 users

GI return 762 users

Both methods are using the same condition.

Version: Acumatica Cloud ERP 2025 R2 (build 25.201.0213)

 

Understood I can call the GI using OData, but i want to understand why this happens?

 

 

 

1 reply

Forum|alt.badge.img+8
  • Jr Varsity II
  • Oct 29, 2026 3:31 PM UTC

Hi ​@changhong ,

According to me

This is the most common reason for this exact count difference:

  • Primary Graph Separation: In the Acumatica framework, the PX.SM.Users DAC is decorated with a [PXPrimaryGraph] attribute mapped to two distinct screens:
    1. PX.SM.Access → Users (SM201010): For internal/employee users (Guest = False).
    2. PX.SM.AccessWebUsers → Users for Portal (SP201000): For external/portal users (Guest = True, such as customer and vendor contacts).
  • OData DAC Engine Behavior: When you query the raw DAC endpoint (/api/odata/dac/PX_SM_Users), Acumatica's internal RightsByScreenTableRestrictor validates the API caller's role against the primary graph. If the API user only has access to the standard backend User management screen (or if OData resolves to the primary internal screen), it automatically injects a BQL restriction that filters out external/portal users (Guest = 1).
  • Generic Inquiry Behavior: A GI built directly on PX.SM.Users queries the physical Users database table directly. It does not enforce screen-level primary graph separation and returns both internal employees and external portal/guest accounts unless you explicitly add a condition Users.Guest Equals False.

Hope above helps!!

Translate