Kingdee Cloud BD_OPERATOR Operator Query API Field Handbook Tutorial
What This API Solves
The Operator (Salesperson) master data is the bridge connecting CRM and business documents in Kingdee Cloud. This API retrieves BD_OPERATOR records in batches via the executeBillQuery WebAPI, used for CRM-user-to-Kingdee-operator mapping, sales order owner synchronization, customer owner mapping, and organization initialization. Across multiple real integration projects, the biggest blocker on the sales chain is user-master inconsistency between CRM and ERP—missing or mismatched operators break order ownership and performance accounting. This API is the starting point for bridging CRM↔ERP personnel master data.
API Capability Overview
- Authentication: Kingdee Cloud WebAPI uses
appId+appSecret+acctIdsignature authentication; some environments also support user-ticket login. - Request Method:
POST /k3cloud/Kingdee.BOS.WebApi.ServicesStub.DynamicFormService.executeBillQuery. - Request Structure: Form parameters (FormId, FieldKeys, FilterString, OrderString, TopRowCount, Limit, StartRow) submitted as form-data.
- Response Structure: Returns a JSON array; each element contains the requested fields. Metadata is configured independently in QeasyCloud source-metadata.
- Pagination Mode: Offset-based pagination via
StartRow+Limit, looping until the returned row count is less thanLimit. - Incremental Mode: Implemented through
FilterStringsuch asFModifyDate>='{{LAST_SYNC_TIME}}'orFCreateDate>{{LAST_SYNC_TIME}}.
Typical Field Mapping
| Field | Type | Meaning | Practical Notes |
|---|---|---|---|
| FOperatorId | string | Operator master unique ID | In some projects used as part of composite key {{FOperatorId}}{{FBizOrgId}}{{FName}}{{Fdept}} |
| FEntity_FEntryId | string | Entry primary key (per org/type row) | One operator may have multiple entries; deduplicate carefully |
| FNumber | string | Operator code | Preferred key for cross-system mapping, mapped to Xiaoman nickname |
| FName | string | Operator name | For CRM display |
| FStaffId_FNumber / FStaffId | string | Linked staff code / reference | Connects to BD_STAFF staff master |
| FEmpNumber | string | Employee code | Key to HR system alignment |
| Fdept / Fdept.FName | string | Department code / name | For org display and filtering |
| FPosition | string | Job position | For position-tagging display |
| FOperatorType / FOperatorType_ETY | string | Operator type (XSY = salesperson) | FilterString often uses FOperatorType_ETY='XSY' |
| FBizOrgId / FBizOrgId_FNumber / FBizOrgId_FName | string | Business org code / name | Mandatory in multi-org; common FBizOrgId.FNumber='103' or in ('101','105') |
| FIsUse / FForbiddenStatus | string | Enable/Forbidden status | FForbiddenStatus='0' means enabled; add to FilterString |
| FBillNo | string | Document number | For traceability; CRM usually hides |
| FDescription | string | Remarks | Optional |
| FCreatorId | string | Creator | For audit |
| FCreateDate | string | Create time | Some projects use this for incremental |
| FModifyDate | string | Last modified time | Preferred incremental field |
How to Configure on QeasyCloud
In QeasyCloud Data Integration Platform, the Kingdee Cloud Operator query typically follows this encapsulation pattern:
- Data Source Adapter: Choose the "Kingdee Cloud (Public)" adapter, fill in the endpoint, appId/appSecret, organization code, and other authentication parameters.
- Form/API Configuration: Set
FormIdtoBD_OPERATORand select theexecuteBillQueryoperation. - Metadata (source-metadata): Configure
idasFEntity_FEntryIdor a composite key based onFOperatorId;numberasFNumber; listFieldKeysinrequestas needed. - Field Mapper: QeasyCloud's field mapper automatically splits Kingdee
FName-style fields (suffix_FName= display value,_FNumber= code,Id= object reference) into separate code/name columns, ready for downstream binding. - Incremental & Filter: Insert
{{LAST_SYNC_TIME|dateTime}}placeholder intoFilterString; the platform injects the last sync timestamp automatically when scheduling. - Target Configuration: Select "Write No-Op" to indicate a query-only strategy; data flows into the platform for downstream CRM user-mapping strategies to consume.
- Scheduling: Use crontab such as
25 3 * * *(daily at 03:25) or0 10 * * 1(weekly Monday 10:00), tuned to business volume.
Cross-Project Practical Points
- Pick the right primary key for multi-org: Kingdee operators have multi-org/multi-type entries. A single
FOperatorIdis not unique across orgs. UseFEntity_FEntryIdor the composite{{FOperatorId}}{{FBizOrgId}}{{FName}}{{Fdept}}. - Prefer
FModifyDateoverFCreateDate:FCreateDateonly catches creation, missing enable/disable/edit.FModifyDatecovers all changes. - Stack three filter layers: enable status (
FForbiddenStatus='0'orFIsUse='1') + operator type (FOperatorType_ETY='XSY') + business-org whitelist (FBizOrgId.FNumber in (...)). All three together prevent dirty data. - Map by code, not by name: Always use
FNumberfor cross-system mapping. Names are duplicated and renamed; codes are stable. - Use platform pagination variables: Use
{{PAGINATION_START_ROW}}and{{PAGINATION_PAGE_SIZE}}instead of hard-coding to enable flexible paging and resume. - Business-org code is the core of multi-org isolation in Kingdee: Without
FBizOrgId.FNumber, you pull group-wide data, triggering permission errors or pollution. Always include it in FilterString.
Pitfalls & Fixes
- "No permission" error on query — Root cause: FilterString missing
FBizOrgId.FNumber; cross-org data is rejected. Fix: add a business-org whitelist. - Duplicate users appear in CRM after sync — Root cause:
FNumberused as primary key while multiple entries exist under the same code. Fix: switch toFEntity_FEntryIdor a composite key, and deduplicate downstream. - Incremental data loss — Root cause:
FCreateDateused for incremental, but edits do not update creation time. Fix: switch toFModifyDate. - Forbidden operators pulled, downstream errors — Root cause: no forbidden-status filter. Fix: add
FForbiddenStatus='0'. - Field listed in
FieldKeysbut returns null — Root cause: Kingdee Cloud returns null for unauthorized fields or custom fields not in the permission list. Fix: enable the field in user authorization, or remove it fromFieldKeys.
When to Use
Use this API when you need to synchronize salesperson/business-user master data between a CRM (e.g., a CRM integrated with Kingdee Cloud such as Xiaoman OKKICRM) and the ERP, to establish unified order-owner, customer-owner, and performance-accounting semantics. Boundaries: applicable only to Kingdee Cloud Public deployment; this is a query-only strategy and must be paired with a downstream "write to CRM user" strategy; not suitable for sub-second real-time scenarios—recommend batch sync at minute-level or coarser.