Skip to main content

#Sales Cloud133 discutindo

One of my users has the Agentforce for Sales permission set and when using reports, it says that Einstein is crunching the numbers and then the user gets this error? Why? 

 

 

#Salesforce Developer  #Salesforce Admin  #Agentforce  #Sales Cloud

3 respostas
  1. Hoje, 15:42

    Hi @Scott Holmes

     

    This looks like an Agentforce Report Analyst issue, not necessarily an issue with the report itself. 

     

    I would try these checks:

    1. Make sure the user has the required Agentforce for Sales permissions.
    2. Check whether the Data Cloud User permission set is assigned.
    3. Test the same report as a System Administrator.
      • If it works for Admin but not for the user, it is most likely a permission/access issue.
    4. Check access to the report folder, report type, objects and fields used in the report.
    5. Try with a very simple Accounts or Opportunities report.
      • If simple reports work, the issue may be related to that specific report configuration.
    6. Also try once in an incognito window or another browser, because the error shown looks like a UI/JavaScript error.

    If everything is configured correctly and the same error continues, I would suggest raising a Salesforce Support casewith the screenshot and reproduction steps. 

     

    Thank you, 

    Venkat Yadav.

0/9000

Our Org has a single Agentforce for Sales license. I have checking the digital wallet today and under License Utilization, it says I still have 1 permission set license to assign as the Unmetered User. What am i missing?  

 

#Trailhead Challenges  #Trailhead  #Salesforce Developer  #Salesforce Admin  #Agentforce  #Salesforce  #Sales Cloud

1 resposta
  1. 30 de set., 17:27

    Hi @Scott Holmes

      

    The Unmetered User Based AI permission set license is separate from your Salesforce Sales license. If Digital Wallet shows 1 available license, you should be able to assign that PSL to a user and then assign/create the corresponding permission set. 

    Go to Setup → Users → select the user → Permission Set License Assignments and check for Unmetered User Based AI. Then assign the Unmetered User Based AI permission set as well. Both are required for unmetered Agentforce usage. 

    If the PSL doesn't appear under the user's available licenses, verify that the required Agentforce add-on/edition is actually provisioned for the org.  

     

    https://help.salesforce.com/s/articleView?id=ai.generative_ai_usage_unmetered_considerations.htm&type=

     

    https://help.salesforce.com/s/articleView?id=005313925&type=1&utm_source

     

    Hope This Helps!!

0/9000

Hi All, 

 

We have an  Invoice and We need to remove the comment.

I tried to remove the comments using Salesforce Inspector, but the Edit button is disabled. This could be because the invoice has already been approved and the ProcessInstanceStep object, ,which  is read-only.

Could you please advise on how we can remove these comments?  

 

 

Request to Remove Approval Comment from Invoices

 

Thank you in advance  

 

#Salesforce Developer #Sales Cloud #Trailhead Challenges #Salesforce Admin #Agentforce #Flow #Agentforce

1 resposta
  1. Ontem 15:27

    Hi @Roopa Sharma -  ProcessInstanceStep is read-only, and the approver comment cannot be edited or deleted after the approval step is created. Salesforce Inspector won't be able to update it. If the comment must be removed, you'll need to consider resetting/recreating the approval 

0/9000

I'm struggling with this but I cannot seem to find any trailhead resource on taking a user's personalized email signature and editing it to include images. Any resources would be helpful. 

 

#Trailhead Challenges  #Trailhead  #Salesforce Admin  #Sales Cloud  #Trailhead Support

1 resposta
  1. Ontem 15:22

    Hi @Scott Holmes -  

     You can add images to a personalized Salesforce email signature. In Lightning, upload the image to Files, create a Public Link, copy the image address, then go to Settings → Email > My Email Settings and add the image using an <img src="..."> tag in the Email Signature field. 

    Salesforce has an official step-by-step guide here: Add an image to an email signature in Salesforce 

    One important limitation: this works for HTML emails. If you are using a Lightning Email Template, the personal signature isn't automatically added; the signature needs to be handled in the template using the appropriate merge field/template approach. 

0/9000

Hello Everyone,

I want to set reminders using tasks and be notified of those tasks via email. But it is not happening.

I disabled " Enable User Control Over Task Assignment Notification" under Activity setting and then under task page layout, clicked page layout properties and enabled email notification checkbox but still do not see anything. What am I missing? I will greatly appreciate your help. Thanks 

 

@* Sales Cloud - Best Practices * 

4 respostas
  1. Ontem 05:22

    The task reminders will only go to the assigned user if another users sets the reminder.  

     

    One solution is creating a record triggered flow with steps outlined here:  

    https://help.salesforce.com/s/articleView?id=000394827&type=1

     

    You may like to create custom settings where this solution has hard coded values to give your org more flexibility with administration.

0/9000

Hi community, 

 

I'm trying to find the enable oath in data loader and I'm not seeing it. I think my screen is not letting me see all of the options. Does anyone know how I can fix this? 

 

#Sales Cloud  #Service Cloud  #Data Management

5 respostas
0/9000

Hi everyone,

I need some architectural advice on the best way to handle report and data access for a global team without turning role management into a maintenance nightmare.

 

  • We have report folders separated by countries: Country A Reports, Country B Reports, and Country C Reports.
  • In our Role Hierarchy, we have local roles at the bottom (e.g., Sales Rep Country A, Sales Rep Country B) and a high-level corporate role at the top called Global Management.

The Business Requirement:

 

Product manager users in their Country or Regional Level role complained not being able to access reports with data related to other countries, so we moved them to the

Global Management team for them to be able to see everything

. They require full visibility to access records (Accounts, Opportunities) globally, but they also need to open and view the reports inside the local folders of Country A, Country B, and Country C. 

 

The challenge:

 

We noticed that when we move a user from a local country role up to the

Global Management

role to give them global record visibility, they immediately lose access to some of the regional reports they could see before, or the reports show up completely empty for them. 

 

My Questions:

  1. How can we avoid constantly shifting users from one role to another just so they can see cross-country reports while maintaining access to their respective records? What is the cleanest architecture to decouple record visibility from report folder visibility?
  2. What is the Best Practice in Salesforce to solve this? Should we keep these global users in a specific role and grant them report folder access via a Public Group or a specific Permission Set?
  3. Why do some reports return empty or give errors to a user right after they are moved to a higher role in the hierarchy? Is it because of dynamic filters in the reports (like "My Team's Records" or "My Role" filters) that break when their branch changes?

Thank you so much for your help! 

 

@Salesforce Administrators & Developers, @Salesforce Administrators and Developers, @APAC Architects, @Data Quality & Management

 

 

#Trailhead Challenges  #Salesforce Developer  #Reports & Dashboards  #Solution Architects  #Sales Cloud

2 respostas
0/9000

 I need to automatically create a Chatter post on a Case whenever its pending approval request is reassigned to another user using the standard Reassign action. Since triggers and record-triggered flows aren't supported on ProcessInstanceWorkitem, and the Case itself doesn't change, I'm not sure how to capture this event. Has anyone solved this, whether with scheduled polling, a custom reassign component, or another approach? Any suggestions or sample code would be appreciated.  

 

#Trailhead  #Salesforce Developer  #Salesforce Admin  #Salesforce  #TrailblazerCommunity  #Sales Cloud  #Apex  #Salesforcecommunity  #Salesforce_developer

2 respostas
  1. 25 de set., 08:00

    You’re correct that there isn’t a direct trigger point here. ProcessInstanceWorkitem doesn’t support Apex triggers or record-triggered flows, and reassigning the approval doesn’t update the Case itself. 

     

    If you need to keep the standard Reassign action, I’d handle it with scheduled Apex:

    1.  Run a scheduled job every few minutes. 
    2.  Query new ProcessInstanceStep records where StepStatus = 'Reassigned'. 
    3.  Use ProcessInstance.TargetObjectId to identify the related Case. 
    4.  Query the pending ProcessInstanceWorkitem for that process instance to get the newly assigned ActorId. 
    5.  Insert a FeedItem with the Case ID as ParentId. 
    6.  Store the processed ProcessInstanceStep.Id in a small custom log object with a unique/external-ID field. 
    7.  Skip any step already in that log so rerunning the job can’t create duplicate Chatter posts. 

    I’d also test it by reassigning the same approval twice and then running the job twice. The expected result should be two Chatter posts total, with no additional posts from the second job run. 

     

    If real-time posting is absolutely required, the other option is to replace the standard Reassign experience with a custom Flow/LWC backed by Apex. That custom action would update ProcessInstanceWorkitem.ActorId and create the Case FeedItem in the same transaction. But the existing standard Reassign action can’t be intercepted directly.

0/9000

Hi everyone,

I have a question regarding the “Create Quotes without Opportunities” feature and a potential future requirement involving Orders.

 

After enabling the “Create Quotes without Opportunities” feature, Salesforce automatically provides the QuoteAccountId field on the Quote object. For Quotes created without an Opportunity, the Account relationship is stored in QuoteAccountId, while the standard AccountId is not populated.

 

Would it be technically possible to populate the standard AccountId field with the value from QuoteAccountId

for Quotes created without an Opportunity?. 

 

The reason for considering this is that Orders will be used in the future, and the standard Account relationship may be required for the Order process.

Would populating AccountId = QuoteAccountId be a supported and recommended approach, or are there any Salesforce limitations or implications we should consider when working with Quotes without Opportunities? or any workaround?.

Thanks for your guidance! 

 

@Salesforce Administrators & Developers, @Salesforce Administrators and Developers, @APAC Architects, @Data Quality & Management

 

 

#Trailhead Challenges  #Trailhead  #Salesforce Developer  #Salesforce Admin  #Salesforce  #Flow  #Data Management  #Apex  #Sales Cloud

2 respostas
  1. 24 de set., 15:17

     

    Short answer: you generally cannot (and do not need to) write QuoteAccountId into the standard Quote.AccountId field. On the Quote object, AccountId is a system-derived, read-only reference that Salesforce fills from the related Opportunity's Account. It is not createable/updateable through the UI, Flow, Apex or the API, so an update like AccountId = QuoteAccountId will be rejected or ignored. For quotes created without an Opportunity, QuoteAccountId (label "Account for Quote") is the field Salesforce intends you to use as the account relationship. 

     

    For your future Order process this is already covered: Salesforce's documentation for quotes without opportunities says associating the quote to an account is optional but recommended, because an account is required to convert the quote to an order. When you create an Order from such a quote, the account comes from the quote's account (QuoteAccountId), so you don't need Quote.AccountId populated. 

     

    Practical recommendations: 

    1. Make QuoteAccountId required (validation rule, e.g. ISBLANK(OpportunityId) && ISBLANK(QuoteAccountId)) so every quote can be turned into an Order. 

    2. After enabling the feature, open Object Manager > Quote > Fields > Account for Quote and grant field-level security to your profiles/permission sets. It is hidden by default, which is why it often looks unavailable in Flow, reports and Apex. 

    3. In reports, flows, sharing logic and Apex, use one source of truth, for example a formula field BLANKVALUE(QuoteAccountId, Opportunity.AccountId), so logic works for quotes with and without an Opportunity. 

    4. If you create Orders yourself via Flow/Apex (rather than the standard Create Order action), set Order.AccountId = Quote.QuoteAccountId and Order.QuoteId = Quote.Id. 

     

    References: 

    Enable Quote Creation Without a Related Opportunity:

    https://help.salesforce.com/s/articleView?id=sales.cpq_quotes_without_opportunities.htm&type=5

     

    Release note, Create Quotes Without a Related Opportunity:

    https://help.salesforce.com/s/articleView?id=release-notes.rn_sales_quotes_without_opportunities.htm&release=244&type=5

     

    Quote object reference:

    https://developer.salesforce.com/docs/atlas.en-us.object_reference.meta/object_reference/sforce_api_objects_quote.htm

     

     

    Assumption: the statement that Quote.AccountId is read-only is based on the Quote object reference field properties and commonly reported org behaviour; please confirm in a sandbox (e.g. attempt the update in a Flow or Developer Console) before designing around it.

0/9000
1 resposta
  1. 21 de set., 20:47

    Hi Suraj,

    To write a unit test for a @future (callout=true) method, you need to mock the HTTP callout (using HttpCalloutMock) and enclose the execution between Test.startTest() and Test.stopTest(). Salesforce runs all asynchronous methods (like future methods) called within startTest() and stopTest() synchronously right when Test.stopTest() executes. 

     

    Here is an example test class structure to cover your method:

    1.Create a Mock Callout Class:

    Mock Implementation. 

    Create a mock class that implements HttpCalloutMock to return a fake JSON response simulating your patchCall output (ensuring it contains 'state' => 'Success' and a valid JSON structure with an id field).

    2.Prepare Test Data and Context:

    Test Setup. 

    In your test method, insert a test Bid_Review_Request__c record so that the update brUpdate; statement can successfully find and update a record in the database.

    3.Wrap in Start/Stop Test:

    Execution and Assertion. 

    Assign your mock, wrap the future method call inside Test.startTest() and Test.stopTest(), and assert that the record was updated successfully.

    Apex 

     

    @isTest

    private class NewProjectHandlerTopUpTest {

    // 1. Mock class for HTTP callouts

    public class MockHttpResponseGenerator implements HttpCalloutMock {

    public HTTPResponse respond(HTTPRequest req) {

    HttpResponse res = new HttpResponse();

    res.setHeader('Content-Type', 'application/json');

    res.setStatusCode(200);

    // Construct JSON response matching the parser requirements

    res.setBody('{"state": "Success", "resBody": "{\\"id\\": \\"12345\\"}"}');

    return res;

    }

    }

    @isTest

    static void testNewProjectHandlerTopUp() {

    // Create test record to satisfy update operation

    Bid_Review_Request__c testReq = new Bid_Review_Request__c(

    Name = 'Test Project'

    // Add required fields for Bid_Review_Request__c here

    );

    insert testReq;

    Map<String, String> recordMap = new Map<String, String>{

    'ID' => testReq.Id,

    'Name' => 'Test Project'

    };

    // Set mock callout

    Test.setMock(HttpCalloutMock.class, new MockHttpResponseGenerator());

    Test.startTest();

    // Calling the future method

    YourClassName.newProjectHandlerTopUp(recordMap, '{"test":"json"}', 'destination', 'WBS123');

    Test.stopTest(); // Future method executes here

    // Assertions to verify the record was updated

    Bid_Review_Request__c updatedReq = [SELECT WBS_Project__c FROM Bid_Review_Request__c WHERE Id = :testReq.Id];

    System.assertEquals('12345', updatedReq.WBS_Project__c, 'The WBS Project code should be updated successfully.');

    }

    }

    (Note: Replace YourClassName with the actual name of the Apex class containing your future method).

0/9000