Skip to main content
Featured group

Program Management Module (PMM)

This is a public group to discuss the Program Management Module (PMM).

Hello! I'm tracking down info on the Last Service Date field. It's a roll up that's recalculated nightly with an Apex Job. There is a Last Service Date field on Contact, Program Engagement, Service and Service Session.

 

Our Last Service Dates are totally inconsistent. Sometimes the Program Engagement field will be correct, but missing on Contact. Sometimes missing on both. 

 

I've gone through the steps on this Help Doc. (Except the fields aren't on a Page Layout). I've ensured the Scheduled Apex Job and the Feature Gate settings are correct. 

 

I saw one post where someone thought it was tied to an Attendance Status = Present, but that doesn't seem to be the case, testing on two records. 

 

What might be reasons for the the inconsistencies? Thanks!

4 answers
  1. May 6, 6:23 PM

    I'm a few years late to this conversation, but this post kept coming up as I was trying to troubleshoot a very similar problem. I had a number of Program Enrollments that had Service Deliveries but no 'Last Service Date' even though most of the Program Enrollments in the org had a 'Last Service Date'. It turns out that you need to have a Quantity value entered on the Service Delivery for the 'Last Service Date' to calculate. Hope this answer helps someone else searching the same issue!

0/9000

Allow Lookup Filter to be Disabled:

I understand the rationale behind the lookup filter on the Program Engagement field on Service Delivery - ensuring that both fields reference the same client. But this means that the user always has the extra step of selecting both. Being able to disable this would allow process automation to populate the Contact field.

6 comments
0/9000

Hi PMM Group, 

We ran a summer camp and tracked attendance in PMM and unfortunately the staff who entered the data added the camper's names to the Program Engagement field that looks up to the parent's Contact record which generates this error code: Script-thrown exception: System. DmlException: Insert failed. First exception on row 0; first error: FIELD_FILTER _VALIDATION _EXCEPTION, Contact must match the Contact in the Program Engagement.: pmamProgramtngagement_c

At first I deactivated the Validation rules on Program Engagement and Service Delivery, which generated the error still. I found the Related Lookup Filter for Program Engagement to Service Delivery, but I am unable to edit it. 

I started to create a permission set to bypass the PMM Validation rules, but learned I can't edit the Validation rules to allow the permission set into the formula. 

Im hoping we don't have to reimport all the data because it is over 300 campers, but I am mentally preparing to scrap what they have done and data import to start over. 

Any ideas on a workaround? Thank you ! 

Can you remove or edit lookup filters in PMM?

 

Screen Shot 2024-08-13 at 5.36.23 PM.png

 

Screen Shot 2024-08-13 at 5.31.00 PM.png

 

Screen Shot 2024-08-13 at 5.47.04 PM.png

3 answers
  1. Mar 16, 8:14 PM

    I came up against this Validation Rule on Program Engagement as well. I don't suppose you figured out a workaround?

0/9000

Hi,  

 

I am new here and I've done the relevant modules for this app. Looking at the Service/Service Delivery objects specifically, I am wondering if service delivered is of currency type, I see no field about price. Which table in PMM Salesforce contains the cost of the service? or does it have to be custom created? 

 

Thank you, 

Ismaeel

2 answers
  1. Dec 3, 2025, 10:16 AM

    In PMM there’s no out‑of‑the‑box “cost” field on Service or Service Delivery, it’s more about tracking what was delivered and to whom. If you need to store pricing or delivery cost, you’ll have to add a custom currency field or link it to another object (like Opportunity or a custom Cost record).

0/9000

Hi. We are using PMM to track therapy-related service deliveries on cases.  We won't be using the client field. I need a formula that removes anonymous from the naming convention.  This is the default formula: IF(NOT(ISBLANK([pmdm__ServiceDelivery__c].pmdm__Contact__c)),IF(LEN([pmdm__ServiceDelivery__c].pmdm__Contact__c.FirstName  + ' ' + [pmdm__ServiceDelivery__c].pmdm__Contact__c.LastName + ' ' + IF (NOT(ISBLANK([pmdm__ServiceDelivery__c].pmdm__DeliveryDate__c)),  TEXT([pmdm__ServiceDelivery__c].pmdm__DeliveryDate__c) , LEFT(TEXT([pmdm__ServiceDelivery__c].CreatedDate),10 ))+ ': ' + [pmdm__ServiceDelivery__c].pmdm__Service__c.Name) > 77, LEFT([pmdm__ServiceDelivery__c].pmdm__Contact__c.FirstName  + ' ' + [pmdm__ServiceDelivery__c].pmdm__Contact__c.LastName + ' ' + IF (NOT(ISBLANK([pmdm__ServiceDelivery__c].pmdm__DeliveryDate__c)),  TEXT([pmdm__ServiceDelivery__c].pmdm__DeliveryDate__c) , LEFT(TEXT([pmdm__ServiceDelivery__c].CreatedDate),10 ))+ ': ' + [pmdm__ServiceDelivery__c].pmdm__Service__c.Name, 77) + '...', [pmdm__ServiceDelivery__c].pmdm__Contact__c.FirstName  + ' ' + [pmdm__ServiceDelivery__c].pmdm__Contact__c.LastName + ' ' + IF (NOT(ISBLANK([pmdm__ServiceDelivery__c].pmdm__DeliveryDate__c)),  TEXT([pmdm__ServiceDelivery__c].pmdm__DeliveryDate__c) , LEFT(TEXT([pmdm__ServiceDelivery__c].CreatedDate),10 ))+ ': ' + [pmdm__ServiceDelivery__c].pmdm__Service__c.Name) , IF(LEN($Label.pmdm__Anonymous + ' ' + IF (NOT(ISBLANK([pmdm__ServiceDelivery__c].pmdm__DeliveryDate__c)),  TEXT([pmdm__ServiceDelivery__c].pmdm__DeliveryDate__c) , LEFT(TEXT([pmdm__ServiceDelivery__c].CreatedDate),10 ))+ ': ' + [pmdm__ServiceDelivery__c].pmdm__Service__c.Name) > 77, LEFT($Label.pmdm__Anonymous + ' ' + IF (NOT(ISBLANK([pmdm__ServiceDelivery__c].pmdm__DeliveryDate__c)),  TEXT([pmdm__ServiceDelivery__c].pmdm__DeliveryDate__c) , LEFT(TEXT([pmdm__ServiceDelivery__c].CreatedDate),10 ))+ ': ' + [pmdm__ServiceDelivery__c].pmdm__Service__c.Name, 77) + '...', $Label.pmdm__Anonymous + ' ' + IF (NOT(ISBLANK([pmdm__ServiceDelivery__c].pmdm__DeliveryDate__c)),  TEXT([pmdm__ServiceDelivery__c].pmdm__DeliveryDate__c) , LEFT(TEXT([pmdm__ServiceDelivery__c].CreatedDate),10 ))+ ': ' + [pmdm__ServiceDelivery__c].pmdm__Service__c.Name)) 

 

2 answers
  1. Nov 24, 2025, 11:38 PM

    Thank you, this worked!

0/9000

I'm trying to figure out if there is a way to view and pull numbers of the demographic composition within the household. Our main priority is to get the number of adults, children, number of children under the age of five, number of members that identify by what race, and whether they were served within the fiscal quarter on the household record. Has anyone done this before? Would flow be the way to go? Any advice? We are using NPSP and Program Management Module @Salesforce.org System Administrators @Nonprofit Success Pack @Program Management Module (PMM)   

12 answers
  1. Nov 17, 2025, 6:00 PM

    Not related to how you get the roll up, just a piece of advice on the time dependency feature of counting adults and children. I would encourage you to store the estimated birth year rather than H. That doesn’t mean you can’t make it easy on your users. They can enter eight and you can internally convert that to the estimate estimated Year they were born. Or perhaps you actually just collect birthdates. The rollup should be based on how many people were born before certain dates and after certain dates and not on age age changes every year and birthdate doesn’t.

    --Terry

0/9000

When creating a service schedule we are receiving a component error (image attached).  We have been working with our consulting team and they can't seem to make heads or tails of it either.

 

This issue started occurring after our org was updated to Winter '24, prior to that it was working without issue.

 

We have come across an existing KB article but the work around doesn't resolve the issue (tried on multiple browsers, clearing cache, incognito mode after making suggested change)

 

https://issues.salesforce.com/issue/a028c00000p5gvdAAA/users-receive-an-error-when-creating-a-service-schedule-if-lightning-web-security-is-disabled-in-the-org

 

Anyone else running into this and the above work around isn't working?  Our consulting partner is looking at opening a case with Salesforce, but figured maybe someone in the community has run into and resolved it.

 

Thanks in advance!

PMM Component Error when creating Service Schedules

11 answers
  1. Nov 10, 2025, 4:19 PM

    Still having this issue in November 2025, and with a brand new PMM install --- any updates on a fix??

0/9000

HI 

We are implementing PMM to track additional therapy service deliveries on cases. My users will create the service delivery on the case record. I need the description of the service deliveries available prior to creating a new service delivery to ensure they select the correct service. I'm not sure of the best approach; do you have any suggestions for me?  I'm currently considering a flow that includes a screen element, but I'd like to know if I am missing an easier solution. 

2 answers
  1. Nov 3, 2025, 7:35 PM

    Hi Stacy, 

    If you're looking to see the Description of the Service from the Service lookup field on Service Deliveries, one option is: 

    1. On the Service object, go to Search Layouts 

    2. Edit the Default Layout and add Description as the 2nd selected field after Service Name 

     

    When the user clicks in the lookup and starts typing, the search results will include the Service Name and the Description. 

     

    Hi Stacy, If you're looking to see the Description of the Service from the Service lookup field on Service Deliveries, one option is: 1. On the Service object, go to Search Layouts 2.

     

     

0/9000

Hi!!  I have service programs with 20 scheduled sessions. For example, if a participant is marked as withdrawn in session 5 (service delivery status "withdrawn"), I want them to be marked as withdrawn in all remaining sessions. I see this doesn't happen automatically. What are my options? Code or flows? tks!

3 answers
0/9000

We’re using the attendance tracking widget. Got a bunch of classes (Service Schedule) that do have a default service quantity filled in. But for as many as 1/3 of the people marked present for that class, the Quantity on the Service Delivery is zero. For other people in the class, it’s a number (the same number as the Service Schedule’s default). Any thoughts as to why this might happen?

5 answers
  1. Khyati Mehta (InfinySkills) Forum Ambassador
    Aug 18, 2025, 7:57 AM

    Hello Michael, 

     

    Thanks for clarifying — I see what you mean now. Since the default quantity is set on the Service Schedule and there’s no automation or imports interfering, this does sound like an inconsistency in how the attendance widget is applying that default to Service Delivery records. 

    A couple of next steps you could try: 

    • Reproduce in a test class: Create a fresh Service Schedule with a default quantity, mark attendance for a few test participants, and see if the issue repeats. That’ll help confirm if it’s systemic or only in certain classes/participants.
    • Check participant linkage: Even if the records look correct, sometimes the widget doesn’t fully resolve the Program Engagement → Service Schedule relationship for certain contacts (e.g., inactive or duplicate Program Engagements).
    • Audit field-level security: Confirm that the user marking attendance has edit access to the Quantity field on Service Delivery. If not, some records may save with 0.
    • Known issues/bugs: There have been occasional reports in PMM where the widget saves attendance but fails to stamp the default quantity. If you can reproduce it consistently, it might be worth raising with Salesforce support as a potential defect.

    Hope this helps!

0/9000