Map QuoteX Resource Requests To KLIENT PSA
Published on May 18, 2026 QuoteX
🔄 Sync QuoteX Resource Requests to Klient PSA
What this article covers: This guide explains how to integrate QuoteX Resource Requests (RR) with Klient Project Service Automation (PSA) using an upsert-and-allocate pattern. This pattern ensures resources are provisioned into Klient's master resource pool only when a QuoteX request reaches "Ready to Staff" status, and synchronizes all related cost and billing information automatically.
Why you need this: Direct mapping of resource requests bypasses critical validation and creates billing inconsistencies. This structured approach maintains data integrity across both systems.
📋 Prerequisites
- Klient PSA package installed in your Salesforce organization
- QuoteX installed and configured
- Custom field creation rights in Salesforce
- API access to both QuoteX and Klient objects
- Administrator access to set up automation (Flows or Apex triggers)
- Familiarity with QuoteX Resource Request and Klient Project Resource object structure
🚨 Step 1: Create the Proposed Employee Custom Field
The foundation of this integration is a new lookup field on the QuoteX Resource Request object that links to a proposed employee (Salesforce User).
⚠️ CRITICAL SETUP STEP: This field must exist before you set up any automation. Without it, the integration cannot identify which employee to provision into Klient.
- Navigate to Setup: Click the gear icon (⚙️) in the top-right corner of Salesforce, then select Setup.
- Open Object Manager: In the left sidebar, search for "Object Manager" and click it.
- Find QuoteX Resource Request: Type
Resource Requestin the search box and click to open the object definition. - Create Custom Field: Click Fields & Relationships in the left menu, then click New.
- Configure Field Details:Field Type: Lookup Relationship
- Related To: User
- Field Label: Proposed Employee
- Field Name:
Proposed_Employee__c - Required: Leave unchecked (optional field)
- Help Text: "The Salesforce user proposed to fill this resource request. Used to populate Klient Project Resource records."
- Save the Field: Click Next and then Save. The field will now be available on all QuoteX Resource Request records.
📦 Step 2: Query and Provision the Master Resource (Krow__Project_Resource__c)
When a QuoteX Resource Request status changes to "Ready to Staff," your automation must check whether a Klient master resource record already exists for the proposed employee. If it doesn't, create one.
Phase 2A: Check for Existing Resource Master
Before creating a new resource record, query Klient's Krow__Project_Resource__c object to find an existing active record for the user:
SOQL Query Example:SELECT Id, Name, Krow__User__c
FROM Krow__Project_Resource__c
WHERE Krow__User__c = :proposedEmployeeUserId
AND Krow__Active__c = true
LIMIT 1
This query returns the master resource record if one exists for the proposed employee. If the query returns no results, proceed to Phase 2B to create a new record.
Phase 2B: Create Master Resource Record if None Exists
If the query in Phase 2A returns no results, create a new Krow__Project_Resource__c record with the following field mappings:
| QuoteX Source | Field Klient Target Field | Transformation / Notes |
Proposed_Employee__c (Lookup) | Krow__User__c | Direct lookup mapping. Links the master resource record to the proposed employee's Salesforce user profile. |
Proposed_Employee__r.Name | Name | Retrieves the user's full name from the relationship field and sets it as the display name for the resource. |
Role__c (Text field on RR) | Krow__Project_Role__c (Lookup) | Match the QuoteX Role text value to a Klient Project Role record. Use a VLOOKUP or similar matching logic if roles have different names in each system. |
| N/A | Krow__Active__c | Always set to true when provisioning a new master resource. |
Reference: See the Klient Project Resources Object guide for additional optional fields (department, cost center, skills, etc.).
💰 Step 3: Sync Resource Cost & Billing Details
After the master resource record is confirmed (either found or created), update it with project-specific cost and billing rates from the QuoteX Resource Request. These rates override the user's default rates for this specific engagement.
| QuoteX Source | Field Klient Target Field | Sync Logic |
Start_Date__c | Krow__Start_Date__c | Maps the exact start date of the resource's involvement on this project. |
End_Date__c | Krow__End_Date__c | Maps the scheduled roll-off (end) date for this allocation. |
Average_Cost_Rate__c | Krow__Cost_Rate__c | Project-Specific Override: This rate applies only to this project/engagement and overrides any default cost rate in the master record. |
Requested_Bill_Rate__c | Krow__Bill_Rate__c | Project-Specific Bill Rate: The amount the client is billed for this resource on this specific engagement. |
Allocation__c or Percent_Allocation__c | Krow__Allocation__c | Maps allocation percentage directly (e.g., 50%, 100%). |
Total_Hours__c | Krow__Estimated_Hours__c | If using total hours instead of percentage, map this field. Klient will calculate the allocation percentage based on the duration window and work calendar. |
Staffing_Notes__c | Krow__Description__c | Passes scheduling context, handoff notes, or constraints from the workforce team to the delivery team in Klient. |
🎯 Step 4: Create Project Assignment Record
After the master resource is provisioned and synced, create a Krow__Project_Assignment__c record to allocate this resource to the specific Klient project. This record represents the resource's assignment on this particular project.
Reference: See the Klient Project Assignment Object guide for all available fields.
| QuoteX Source Field | Klient Target Field | Details |
Total_Hours__c or Percent_Allocation__c | Krow__Project_Hours__c, Krow__Effort__c, or Krow__Estimated_Hours__c | Depending on how you track allocation, map hours or percentage. Klient's native calculation engine will determine the remaining capacity on the resource's calendar. |
Staffing_Notes__c | Krow__Notes__c | Passes scheduling context or team notes to the assignment-level record. |
| N/A (from RR Parent) | Krow__Project__c | Lookup to the parent Klient Project record. You will need to map the QuoteX quote or project to a Klient Project. |
| N/A (created in Step 2) | Krow__Project_Resource__c | Lookup to the master resource record provisioned in Step 2. |
| N/A | Krow__Status__c or Krow__Assignment_Status__c | See critical rule below: Set to "Soft Booked" or "Pipeline" status, not hard-booked, until the RR status matures beyond initial proposal phases. |
⚡ Three Critical Automation Rules
Rule #1: Use "Soft Book" Status for Proposed Resources
When: The QuoteX Resource Request status is in negotiation or under review (before "Ready to Staff").
Action: Create Krow__Project_Assignment__c records with status set to "Soft Booked" or "Pipeline," not "Hard Booked."
Why: Soft-booked allocations do not lock capacity in Klient's resource management system. This allows other projects to tentatively use the resource if the QuoteX request is cancelled or delayed. Once the RR status reaches "Ready to Staff" (or your internal equivalent), then update the assignment status to "Hard Booked."
Rule #2: Always Query Existing Resources Before Creating
When: Processing a new Resource Request.
Action: Query Krow__Project_Resource__c WHERE Krow__User__c = :proposedEmployeeUserId BEFORE creating a new master record.
Why: Each user should have only one master resource record in Klient. If a master already exists, reuse it and link the new project assignment to that existing record. Creating duplicate master records breaks reporting and creates orphaned cost/rate data.
Rule #3: Preserve Start and End Date, Not Just Duration
When: Syncing duration windows from QuoteX to Klient.
Action: Pass both Start_Date__c and End_Date__c explicitly. Do NOT calculate or send only a duration count (e.g., "45 days").
Why: Klient's native Gantt chart and capacity planning engine performs its own calendar calculations using work calendars and holidays. Sending exact dates allows it to plot accurate capacity across the resource's timeline. Sending only a day count removes important context.
📊 Understanding Allocation vs. Estimated Hours
Klient uses two approaches to track resource utilization on a project assignment—choose the one that matches your QuoteX data model:
| Approach | Klient Field | QuoteX Source | When to use |
| Allocation Percentage | Krow__Allocation__c | Percent_Allocation__c | Resource is 50% on this project, 50% on others. Klient calculates available capacity. |
| Estimated Hours | Krow__Estimated_Hours__c | Total_Hours__c | Resource needs exactly 320 hours for this project's scope. Klient back-calculates allocation % based on duration and work calendar. |
If your QuoteX RR has both fields, prioritize Total_Hours__c in your mapping. It provides more precision for resource planning.
🔍 Troubleshooting
❌ Problem: "Proposed Employee lookup is blank"
Cause: The Proposed_Employee__c custom field either doesn't exist or the workforce team hasn't populated it on the RR record.
Solution:
- Verify the field was created in Step 1 by navigating to Setup → Object Manager → QuoteX Resource Request → Fields & Relationships.
- Check that the field is added to the QuoteX Resource Request page layout so users can see and populate it.
- Communicate with the workforce team that this field must be filled before the RR can move to "Ready to Staff."
❌ Problem: Automation triggers but no master resource is created in Klient
Cause: The automation is not finding the status change to "Ready to Staff," or the SOQL query to check for existing resources is failing.
Solution:
- Check your Flow or Apex trigger logic: Verify the condition is checking
Status__c == 'Ready to Staff'(adjust the field/value names to match your org). - Add debug logging to your automation to confirm the trigger is firing and the lookup query is executing.
- Ensure the API integration has read/write access to
Krow__Project_Resource__c. Check the connected app permissions or API scope. - Check field-level security: Confirm that the integration user has read access to
Proposed_Employee__cand write access to Klient fields.
❌ Problem: Rates and allocation are correct, but dates are not syncing
Cause: Start/end dates are being sent as text strings or in the wrong date format.
Solution:
- Verify that
Start_Date__candEnd_Date__cin your mapping are Date fields, not Text or DateTime fields. - If using a middleware tool (e.g., MuleSoft, Zapier, custom API), ensure date values are formatted as
YYYY-MM-DDISO 8601 format. - Confirm that both dates are being populated on the QuoteX RR before the automation triggers. If either is null, use a default (e.g., today's date or 30 days from today).
❌ Problem: Duplicate master resource records are being created
Cause: The automation is not querying for existing resources or is creating a new record every time the automation runs (e.g., on updates).
Solution:
- Verify that the Phase 2A SOQL query is running BEFORE any insert logic. If using a Flow, add a "Get Records" action before the "Create Records" action.
- If using a trigger, ensure it has a guard clause:
if (Trigger.isInsert) { ... }so it doesn't re-create resources on every update. - Implement a field on the QuoteX RR (e.g.,
Klient_Resource_Created__ccheckbox) to track whether a master resource has already been created. Check this flag before attempting to create a new record.
❌ Problem: Assignment is created with status "Hard Booked" instead of "Soft Booked"
Cause: The automation is not checking the parent RR status before setting the assignment status.
Solution:
- Update your automation logic to include a conditional: If
Status__c != 'Ready to Staff', setKrow__Status__c = 'Soft Booked'. Otherwise, set it to 'Hard Booked'. - Add a scheduled Flow or Apex batch process to scan for "Soft Booked" assignments and update them to "Hard Booked" once their parent RR reaches "Ready to Staff."
✅ What's Next?
📞 Support & References
- Klient Project Resources Object Guide
- Klient Project Assignment Object Guide
- For issues with QuoteX Resource Request configuration, contact your QuoteX administrator or Codeylabs support.
- For issues with Klient PSA, contact Krow Software support.
Knowledge Article Number: KA-00268