Skip to main content
Viktoriya Dorovska 님이 #Field Service App에 질문했습니다

Hello, 

 

Our Technicians perform repairs at customer sites.  

In order to ensure that they have everything they need for the repair, they are often transferred more spare parts than they will actually use. Any unused parts are then returned to the central warehouse (via Transfer request who another user create in Certinia).

However, this creates an issue with inventory updates.  

When a Transfer Request is received, the parts are automatically added to Product Items.   

When the parts are issued from the Field Service warehouse, since they are not consumed against a Work Order, they currently have to be manually removed from the Technicians’ Field Service warehouse based on the return transfer. 

This is a lot of manually work, we have around 80 Technicians and have a lot of transfer reguests for returned parts. 

What good practice advice you can share with me? 

Our implementing company can't create us a working automation for outbound transfer. 

We are in this situation near 2 years and in we dont see a workable solution... 

 

Thanks in advance 

 

 

#Field Service App  #Inventory Item  #Product Transfer

답변 1개
  1. 9월 18일 오전 9:27

    Hi Viktoriya,

     

    Manually adjusting inventory for 80 technicians across hundreds of return transfers is completely unsustainable.

     

    In standard Salesforce Field Service (SFS), stock adjustments should never be handled through manual inventory deductions. The platform provides native inventory objects specifically designed to decrement a van’s stock and increment the warehouse automatically: Product Transfers and Return Orders.

     

    Here are the two best-practice architectures to automate this and eliminate manual data entry:

     

    Option 1: Native Product Transfers (Simplest & Best for Van-to-Warehouse Returns)

    Salesforce Field Service has built-in transaction logic on the ProductTransfer object. When a ProductTransfer record is marked Received, Salesforce automatically adjusts ProductItem balances without writing custom code to do math on inventory quantities.

     

    How the Automated Flow Works:

     

    1. Trigger via Certinia Integration / Transfer Request:
      • When the return Transfer Request is created/approved in Certinia (or synced into Salesforce), have your integration or a Record-Triggered Flow automatically create a standard Product Transfer (ProductTransfer) record in Salesforce with:
        • Source Product Item (SourceProductItemId): The Technician’s van inventory record.
        • Destination Location (DestinationLocationId): The Central Warehouse location record.
        • Quantity Sent: Number of unused units being returned.
        • Status: In Transit (or Received).

     

    1. Automated Stock Balance Execution:
      • When the warehouse confirms the return (or when Certinia syncs back receipt), update ProductTransfer.Status = 'Received' and check IsReceived = true.
      • Salesforce’s native engine automatically does the rest:
        • It decrements QuantityOnHand on the Technician's ProductItem.
        • It increments QuantityOnHand on the Central Warehouse's ProductItem.
        • It automatically creates immutable Product Item Transactions (ProductItemTransaction) for full audit history.

     

    Option 2: Return Order + Return Order Line Items (Best for Formal RMA & Asset Tracking)

    If your company requires formal warehouse receiving verification, inspection of returned parts, or serial tracking:

     

    1. Generate a Return Order (ReturnOrder) and associated Return Order Line Items (ReturnOrderLineItem) linked to the Technician’s Service Resource / Location.
    2. Provide your warehouse team (or logistics coordinator) a quick Screen Flow or barcode scan action on the desktop:
      • Select Return Order $\rightarrow$ confirm parts received.
    3. The Flow marks the line items as Received, generating the underlying ProductTransfer that automatically moves inventory off the technician's balance.

     

    Why Your Current Automation Failed & How to Fix It

    Custom automations on ProductItem often fail because developers try to manually calculate and update ProductItem.QuantityOnHand using standard Flow/Apex DML.

     

    • The Rule of SFS Inventory: Never write custom Apex or Flows that run math directly on ProductItem.QuantityOnHand (ProductItem.QuantityOnHand = QuantityOnHand - X). This causes lock contention, concurrency errors, and breaks the transaction ledger.

     

    • The Supported Pattern: Always create a ProductTransfer or ProductConsumed record. Salesforce manages the row-locking and mathematical reconciliation on ProductItem under the hood.

     

    Recommended Next Step

    Ask your development or integration team to stop attempting direct ProductItem updates and instead map Certinia's outbound return payload directly to insert standard ProductTransfer records with IsReceived = true. This leverages native Field Service mechanics and eliminates all manual removal work immediately.

0/9000