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

  1. Klient PSA package installed in your Salesforce organization
  2. QuoteX installed and configured
  3. Custom field creation rights in Salesforce
  4. API access to both QuoteX and Klient objects
  5. Administrator access to set up automation (Flows or Apex triggers)
  6. 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.

  1. Navigate to Setup: Click the gear icon (⚙️) in the top-right corner of Salesforce, then select Setup.
  2. Open Object Manager: In the left sidebar, search for "Object Manager" and click it.
  3. Find QuoteX Resource Request: Type Resource Request in the search box and click to open the object definition.
  4. Create Custom Field: Click Fields & Relationships in the left menu, then click New.
  5. Configure Field Details:Field Type: Lookup Relationship
  6. Related To: User
  7. Field Label: Proposed Employee
  8. Field Name: Proposed_Employee__c
  9. Required: Leave unchecked (optional field)
  10. Help Text: "The Salesforce user proposed to fill this resource request. Used to populate Klient Project Resource records."
  11. 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__cDirect lookup mapping. Links the master resource record to the proposed employee's Salesforce user profile.
Proposed_Employee__r.NameNameRetrieves 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/AKrow__Active__cAlways 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__cKrow__Start_Date__cMaps the exact start date of the resource's involvement on this project.
End_Date__cKrow__End_Date__cMaps the scheduled roll-off (end) date for this allocation.
Average_Cost_Rate__cKrow__Cost_Rate__cProject-Specific Override: This rate applies only to this project/engagement and overrides any default cost rate in the master record.
Requested_Bill_Rate__cKrow__Bill_Rate__cProject-Specific Bill Rate: The amount the client is billed for this resource on this specific engagement.
Allocation__c or Percent_Allocation__cKrow__Allocation__cMaps allocation percentage directly (e.g., 50%, 100%).
Total_Hours__cKrow__Estimated_Hours__cIf 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__cKrow__Description__cPasses 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__cKrow__Project_Hours__c, Krow__Effort__c, or Krow__Estimated_Hours__cDepending 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__cKrow__Notes__cPasses scheduling context or team notes to the assignment-level record.
N/A (from RR Parent)Krow__Project__cLookup 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__cLookup to the master resource record provisioned in Step 2.
N/AKrow__Status__c or Krow__Assignment_Status__cSee 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 PercentageKrow__Allocation__cPercent_Allocation__cResource is 50% on this project, 50% on others. Klient calculates available capacity.
Estimated HoursKrow__Estimated_Hours__cTotal_Hours__cResource 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:

  1. Verify the field was created in Step 1 by navigating to Setup → Object Manager → QuoteX Resource Request → Fields & Relationships.
  2. Check that the field is added to the QuoteX Resource Request page layout so users can see and populate it.
  3. 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:

  1. 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).
  2. Add debug logging to your automation to confirm the trigger is firing and the lookup query is executing.
  3. Ensure the API integration has read/write access to Krow__Project_Resource__c. Check the connected app permissions or API scope.
  4. Check field-level security: Confirm that the integration user has read access to Proposed_Employee__c and 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:

  1. Verify that Start_Date__c and End_Date__c in your mapping are Date fields, not Text or DateTime fields.
  2. If using a middleware tool (e.g., MuleSoft, Zapier, custom API), ensure date values are formatted as YYYY-MM-DD ISO 8601 format.
  3. 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:

  1. 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.
  2. If using a trigger, ensure it has a guard clause: if (Trigger.isInsert) { ... } so it doesn't re-create resources on every update.
  3. Implement a field on the QuoteX RR (e.g., Klient_Resource_Created__c checkbox) 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:

  1. Update your automation logic to include a conditional: If Status__c != 'Ready to Staff', set Krow__Status__c = 'Soft Booked'. Otherwise, set it to 'Hard Booked'.
  2. 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?

  1. Test the Integration: Create a test QuoteX Resource Request with a "Proposed Employee" assigned, then change the status to "Ready to Staff." Verify that a master resource is created in Klient and a project assignment is linked to the correct project.
  2. Validate Rates: Confirm that cost and bill rates from QuoteX are accurately reflected in Klient's resource profile and project assignment.
  3. Monitor Soft-to-Hard Transitions: Set a reminder to review "Soft Booked" assignments and manually promote them to "Hard Booked" when the QuoteX RR matures, or automate this with a scheduled Flow.
  4. Document Your Implementation: Note any deviations from this guide (e.g., different field names, custom status values) so future maintainers understand your setup.
  5. Set Up Alerts: Configure an automation to notify the resource manager if a high-priority RR has been "Ready to Staff" for more than 2 weeks without being hard-booked in Klient.


📞 Support & References

  1. Klient Project Resources Object Guide
  2. Klient Project Assignment Object Guide
  3. For issues with QuoteX Resource Request configuration, contact your QuoteX administrator or Codeylabs support.
  4. For issues with Klient PSA, contact Krow Software support.





Knowledge Article Number: KA-00268

View more articles in the knowledge base