Skip to main content

#Integration65 diskutieren mit

When I try to create a record by sending a request, I get an error:

{

        "errorCode": "NOT_FOUND",

        "message": "The requested resource does not exist"

    }

 

Here's an example of the request I am making: 

url: https://myDomain.my.salesforce.com/services/data/v60.0/sobjects/Account

method: POST

authentication header: Bearer <token>

 

I am using JWT Bearer flow.

 

If I make a GET request to: https://myDomain.my.salesforce.com/services/data/v60.0/sobjects/

I get a response. But, if I make a GET request to https://myDomain.my.salesforce.com/services/data/v60.0/sobjects/Account

I get the same "he requested resource does not exist" response.

 

Not sure if that's related

 

#Integration  #RestAPI  #Error Message  #Salesforce

3 Antworten
  1. Gestern 17:49

     One thing I would add is to treat credential rotation as a dependency-mapping exercise, not just a secret update. If several systems consume the same API credentials, documenting each integration, authentication method, owner, scopes, and last known usage can make future rotations much safer. This is especially important when APIs are being used across multiple workflows. For example, a nonprofit may have a verification service such as the Nonprofit Check Plus API connected to other systems, so keeping track of where credentials are used can prevent an unexpected integration failure after rotation. It’s also worth checking application and middleware logs for recent authentication calls before making the change. That can help identify less obvious consumers that may not be documented in Salesforce or Marketing Cloud. Once the new credentials are deployed, monitoring for authentication failures provides another layer of confirmation that no integration was missed. 

0/9000

Showing feature request status in Salesforce when product uses JPD and engineering uses Azure DevOps

 

 

I recently wrote up how teams connect Jira Product Discovery to Salesforce on one side and Azure DevOps on the other. The part that stuck with me is how far a simple sales question has to travel. 

 

An AE wants to know if the feature their customer asked for has shipped. The request was logged in Salesforce. Product prioritized it in Jira Product Discovery (JPD), and engineering built it in Azure DevOps.  

 

What usually happens

 

 

Product copies the approved idea into Azure DevOps by hand: title, description, maybe acceptance criteria. From then on, the two drift apart. Engineers update status, add comments, and link work in their own tool, and it doesn't get reflected in JPD.  

 

So product opens Azure DevOps to check, sales pings product, and the roadmap stops matching what's shipping. 

 

What's already there natively

 

JPD has a built-in Salesforce integration. Your team can paste a Salesforce record link into an idea and show fields from that record, such as account or opportunity details. That covers context flowing into product. It works one link at a time; it's read-only, and nothing flows back to Salesforce. 

 

Getting status back to Salesforce takes a build. That could be Flow or Apex calling Jira, Jira Automation calling Salesforce, MuleSoft, or a third-party connector. Whichever route you pick, the same decisions come up. 

 

Decisions worth making before anyone builds

 

 

Decide where each piece of data starts. Customer context starts in Salesforce, priority starts in JPD, and delivery status starts in Azure DevOps. Give every field one owner, so two systems never edit the same value. 

 

Check which JPD fields can actually move. Standard fields and custom scores like impact or effort are usually fine. Insights, views, and formula fields are harder, and formula fields don't come through the Jira API at all. If product prioritizes a formula field, find that out before anyone promises sales a view built on it. 

 

Keep it to one idea per epic. JPD doesn't carry the epic, feature, and story breakdown, so that split happens in Azure DevOps after the handoff. Mirroring the full hierarchy back into JPD or Salesforce adds a lot of work for very little that sales would use. 

 

Translate statuses for sales. "Ready for QA" means nothing to an AE. Agree on a short list they understand, such as requested, approved, in development, and released, and map everything else to it. 

 

Sort out access early. Product and engineering rarely hold admin rights in each other's tools, and some security policies block one system from signing into another directly. This comes up often enough that it belongs in the first planning conversation, before anyone has picked a tool. 

 

For anyone who's closed this loop: where does your sales team see feature request status today? On the Account, on the Opportunity, or somewhere else entirely? 

 

#Integration

0/9000

Hello! We are exploring an integration between our Salesforce (NPSP) and NetSuite systems. We do not have in house skill capacity to do this and have been speaking with implementation partners. We've been pitched Celigo and MuleSoft as potential tools.  

 

The basic process we are hoping for would be:

  1. Sales team enters invoicing information into Salesforce
  2. When TBD trigger is activated, Salesforce sends the info to Netsuite, booking the revenue and generating an invoice
  3. Human reviews invoice, approves, and then ideally system sends it off (though open to a Human sending it :))
  4. Payment information is input into Netsuite
  5. When TBD trigger is activated, Netsuite sends payment info to Salesforce, recording payment details and marking opportunities as paid

If you have experience with Celigo, MuleSoft, or another tool, would love to hear any pros or cons! Feedback on implementation partners also welcome.  

 

Thanks! 

Marie 

 

#Integration

2 Antworten
  1. 7. Okt., 16:05

    Would Customers and Products have to be synced between SFDC and NetSuite before this could work? 

    We're adding various sync recipes in our Sync Hub (in the Yoxel Sync app) and we're considering this one for sure.

0/9000

There is a use case which I try to implement where the sandboxpostcopy interface is supposed to login to production and get some information, then insert the same back to sandbox. 

 

As of now I have tried below modes of authentication : 

1. External Cred + Named Cred + Username/Pwd - Not preferred 

2. External Cred + Named Cred + Oauth 2.0 - Browser flow --- As I try to authenticate using this it requires an auth provider and Auth provider has callback URL based on sandbox. Thus the authentication fails. 

3. External cred + Named Cred + Oauth 2.0 - Client Cred - Authentication works perfectly, but upon refresh client credentials are cleared and this prevents successful execution of sandboxpostcopy interface. 

 

Any one tried something similar? Authenticating to salesforce production, retrieving the data and act on it? 

 

Thanks 

 

#Salesforce Developer  #Integration

1 Antwort
  1. 25. Sept., 08:27

    I’d avoid doing the production login inside SandboxPostCopy if possible. A sandbox refresh replaces exactly the auth/config you’re depending on, so it gets fragile fast. We ended up putting the production data we needed into the sandbox after refresh through a separate deployment/script, then letting SandboxPostCopy handle only the sandbox-side setup.

0/9000

Hello,

 

I am looking for a solution to one way sync events from a Public Salesforce calendar to a Shared Outlook or Individual Outlook account. So team would manage new event creation in Salesforce shared calendar and user would only SEE (View only) events in his Outlook Calendar.

Any ideas on how I could accomplish this?

3 Antworten
0/9000

so currently I'm making my own chatbot app, I'm training my own AI using machine learning and NLP for that app but how am I supposed to implement that AI model into Salesforce.. basically I want to make a UI and provide a database for that app, so what kind of salesforce technologies can help me to make a UI and to provide an overall backend + any additional tips?

#Sales Cloud #Salesforce Developer #Service Cloud #Experience Cloud #Integration #CRM Configuration #Automation 

2 Antworten
  1. 2. Okt., 10:54

    For a chatbot interface, I would keep the first screen very simple. Give users a few clear options and an obvious place to type their question. A visible route to human support is important too. Then test the interface with ordinary users. Their confusion will quickly reveal what needs changing.

0/9000
2 Antworten
  1. 30. Sept., 10:21

    @sainath reddy In general, a scheduled flow runs as a single scheduled job. Having multiple users with access to the flow doesn't cause multiple executions. The flow runs once according to its schedule unless the configuration itself creates separate records or jobs to process.

0/9000

Hi everyone,

We recently built a custom Sales Force application in a sandbox environment that handles data sharing with a third-party API. The solution involves custom screens, automations, and data sync back and forth with the external system. 

 

Now, our client wants us to do the exact same thing for another third-party API integration, using the same overall structure and business workflow.

What is the best way to approach this?

  1. Should we replicate/clone the existing application inside the same sandbox/org and adapt it for the second API?
  2. Or is it better practice to package and deploy the build into a fresh, separate environment for the new integration?

If you have done something similar, what would you recommend, and what are the key things or common challenges we should keep in mind before starting?

Thanks in advance! 

 

#Salesforce Developer  #Salesforce  #Integration  #Trailhead

1 Antwort
  1. 25. Sept., 10:21

    Hi Cloud Crafter, 

     

    Short answer: don't clone the app — generalize it. Build the integration logic once as a reusable, config-driven layer, then add the second API as a new configuration, not a new copy of the app. 

     

    Why cloning is the wrong move: 

    - Two copies of the same objects/flows/Apex means every future bug fix, security patch, or workflow change has to be done twice, and they will drift out of sync within months. 

    - It roughly doubles your metadata footprint in the same org for no real functional benefit, since both integrations share the same overall structure anyway. 

    - It makes testing, permissions, and reporting messier — you'll end up needing to explain to users/admins why there are two near-identical apps doing conceptually the same thing. 

     

    Recommended approach: 

     

    1. Extract what's actually integration-specific into configuration, not code/metadata. Things like endpoint URLs, auth credentials, field mappings, and payload structure should live in Custom Metadata Types or Named Credentials/External Credentials — not hardcoded per-integration Apex classes or per-integration Flows. 

     

    2. Keep one set of core objects, screens, and automations, parameterized by an "Integration Type" or "Source System" field/record, so the same Flow/Apex logic branches or reads config rather than being duplicated. 

     

    3. Use Named Credentials (or External Credentials with Named Principals) per third-party API. This is the standard Salesforce pattern for "same integration pattern, multiple external systems" — one generic Apex HTTP callout class, driven by whichever Named Credential/config record applies. 

     

    4. If the two integrations genuinely have very different data models or business logic (not just a different endpoint), that's the signal to build a second app rather than force everything into one config-driven framework — don't over-engineer for reuse that doesn't fit. 

     

    On sandbox vs. new org: stay in the same org/sandbox unless there's a hard business reason to separate (e.g., different client legal entities, data residency requirements, or genuinely unrelated user bases). A second full org means duplicating users, licenses, security model, and ongoing maintenance — that's a much bigger cost than it sounds, and it's rarely justified just because it's "a new integration." 

     

    Common pitfalls to watch for: 

    - Hardcoded field mappings buried in Apex instead of Custom Metadata — this is the #1 thing that makes the "just clone it" temptation so strong, and the #1 thing that makes maintenance painful later 

    - Bulkification/governor limits — if the second integration runs concurrently with the first, make sure shared triggers/flows are bulk-safe, since now two integrations' worth of volume can hit the same automation 

    - Error handling and retry logic tied to one specific API's response format — generalize this early, or you'll end up with API-specific error handling scattered everywhere

0/9000
Hi,

I have a couple of jobs using REST API and every couple of days I get:

requests.exceptions.ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')).

According to library documentation this indicated that Salesforce closed the connection without giving a (complete) response. This baffles me because this does not contain an error message (such as going over any of the limits).

So far I have not been able to reproduce this error with a set of deliberate steps, it just happens once in a while and I see it in my application logs. I get it mostly with various SOQL queries but I've also seen a bulk update failing so it's not related to a single query. Most of the time it fail when running from Google Cloud but I've also seen it failing running on my laptop (which would indicate it's not a proxy issue).

I use "simple-salesforce" python library and this error comes from an underlying "requests" module.

I apologise for the vagueness of my description but this is how much sense I've been able to make out of this so far.

Today I set up a finer Debug Log for Platform Integration and I'll see if it comes up with anything valuable.
2 Antworten
0/9000
1 Antwort
  1. 21. Sept., 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