<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet title="XSL_formatting" type="text/xsl" href="https://developer.salesforce.com/blogs/wp-content/themes/dfctheme/includes/feed_styles.xsl" ?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
xmlns:podcast="https://podcastindex.org/namespace/1.0"
xmlns:rawvoice="https://blubrry.com/developer/rawvoice-rss/"
xmlns:media="http://search.yahoo.com/mrss/"
	xmlns:dscblog="https://developer.salesforce.com/blog/dscblog/"
>


<channel>
	<title>Salesforce Developers Blog</title>
	<atom:link href="https://developer.salesforce.com/blogs/feed" rel="self" type="application/rss+xml" />
	<link>https://developer.salesforce.com/blogs</link>
	<description>Elevating developer skills and connecting with the Salesforce Developers community</description>
	<lastBuildDate>Thu, 07 May 2026 19:44:09 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
	<atom:link rel="hub" href="https://pubsubhubbub.appspot.com/" />
	<itunes:author>Salesforce Developers Blog</itunes:author>
	<itunes:explicit>false</itunes:explicit>
	<itunes:image href="https://developer.salesforce.com/blogs/wp-content/plugins/powerpress/itunes_default.jpg" />
	<itunes:owner>
		<itunes:name>Salesforce Developers Blog</itunes:name>
	</itunes:owner>
	<podcast:medium>podcast</podcast:medium>
	<image>
		<title>Salesforce Developers Blog</title>
		<url>https://developer.salesforce.com/blogs/wp-content/plugins/powerpress/rss_default.jpg</url>
		<link>https://developer.salesforce.com/blogs</link>
	</image>
	<podcast:podping usesPodping="true" />
<site xmlns="com-wordpress:feed-additions:1">244780846</site>	<item>
		<title>Agent Platform Tracing: Debug Agentforce with Trace Trees, SOQL, and Slack</title>
		<link>https://developer.salesforce.com/blogs/2026/05/agent-platform-tracing-debug-agentforce-with-trace-trees-soql-and-slack</link>
		<comments>https://developer.salesforce.com/blogs/2026/05/agent-platform-tracing-debug-agentforce-with-trace-trees-soql-and-slack#respond</comments>
		<pubDate>Thu, 07 May 2026 19:15:39 +0000</pubDate>
		<dc:creator><![CDATA[Trevor Scott]]></dc:creator>
				<category><![CDATA[Agentforce]]></category>
		<category><![CDATA[App Development]]></category>
		<category><![CDATA[Data Cloud]]></category>
		<category><![CDATA[Developer Tooling]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=206243</guid>
		<description><![CDATA[<p>Trace Agentforce actions by capturing LLM calls, Flows, and Apex executions as queryable trees in Data 360. Learn to enable this service-level visibility and use Slackbot to pinpoint root causes instantly with natural language.</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/05/agent-platform-tracing-debug-agentforce-with-trace-trees-soql-and-slack">Agent Platform Tracing: Debug Agentforce with Trace Trees, SOQL, and Slack</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><span style="font-weight: 400">Agent Platform Tracing captures every Agentforce action execution as an OpenTelemetry trace tree stored in Data 360, giving you a queryable record of every LLM call, flow execution, and Apex invocation in the chain. A single user utterance to an agent can trigger a cascade of downstream calls, and when you need to understand exactly what happened, a top-level error message rarely tells the full story. The actual issue (a slow LLM step, a misfired flow, an Apex class that never returned) is buried somewhere in the execution chain. Agent Platform Tracing surfaces that chain as a hierarchical tree showing what happened, how long each step took, and where the chain broke.</span></p>
<p><span style="font-weight: 400">The feature is based on the </span><a href="https://opentelemetry.io/docs/concepts/signals/traces/"><span style="font-weight: 400">OpenTelemetry standard</span></a><span style="font-weight: 400"> and stores all span data directly in Data 360, making it queryable alongside the rest of your org&#8217;s data with a single toggle flip.</span></p>
<h2><span style="font-weight: 400">How to enable Agent Platform Tracing</span></h2>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206246" >
			    <img fetchpriority="high" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260507110334/image1_4a3ce2-e1778177025756.png?w=1000" class="postimages" width="1000" height="282" alt="Screenshot showing Agent Platform Tracing enabled." />
			  </span>
			</p>
<p><span style="font-weight: 400">Enabling Agent Platform Tracing takes about two minutes:</span></p>
<ol>
<li style="font-weight: 400"><b>Toggle it on in Setup. </b><span style="font-weight: 400">Navigate to </span><b>Setup → Agent Platform Tracing</b><span style="font-weight: 400"> and flip the toggle to enabled. This starts writing span data to Data 360 for every Agentforce action execution in your org.</span></li>
<li style="font-weight: 400"><b>Verify Data 360 is provisioned.</b><span style="font-weight: 400"> Agent Platform Tracing stores spans in data model objects (DMOs), so your org needs Data 360 provisioned and active. If you&#8217;re already using Agentforce, this is likely already in place.</span></li>
<li style="font-weight: 400"><b>Check permissions. </b><span style="font-weight: 400">Users querying trace data need the Data Cloud Data Access permission set, plus read access to the </span><span style="font-weight: 400">ssot__TelemetryTraceSpan__dlm</span><span style="font-weight: 400"> and related DMOs.</span></li>
<li style="font-weight: 400"><b>Wait for data. </b><span style="font-weight: 400">Spans begin populating within minutes of the first Agentforce action execution after enablement. There&#8217;s no backfill of historical data.</span></li>
</ol>
<p><span style="font-weight: 400">Once enabled, trace data is queryable via SOQL against the Data 360 DMOs described in the sections below.</span></p>
<h2><span style="font-weight: 400">How Agent Platform Tracing builds a trace tree</span></h2>
<p><span style="font-weight: 400">The core concept of Agent Platform Tracing is straightforward: each instrumented service that is called when an Agentforce action executes generates a telemetry record called a </span><i><span style="font-weight: 400">span</span></i><span style="font-weight: 400">, and every span records its parent&#8217;s ID. That parent-child chain lets you reconstruct the execution sequence as a hierarchical tree, from the root interaction down through the instrumented downstream calls.</span></p>
<p><span style="font-weight: 400">Here&#8217;s what that looks like in practice. The following trace shows an agent action executing a flow that results in an error:</span></p>
<pre language="text">[OK] run.interaction (96afcfefaa6fbfe9) — 2,430ms
└── [OK] run.llmstep (9939b8bc33d12bfa) — 167ms
    └── [OK] run.topic.FlowAgentforce__FlowBuilderAutomationsTopic — 3ms
        └── [OK] run.llmstep (b3595456464fbe93) — 1,341ms
            └── [ERROR] run.action.Get_Account_179SB000000v31B — 481ms
                ├── [OK] run.invokeActions.FLOW — 274ms [InvocableAction]
                │   └── [OK] run.Get_Account.1 — 266ms [Flow]
                │       Attributes: flow.api.name=Get_Account, flow.api.version=1,
                │                   flow.execution.api.version=Spring '26,    
   |                    flow.type=AutolnchNoTrig
                │       └── [OK] run.createrecord.account — 42ms [Flow]
                │           Attributes: db.collection.name=Account, db.rows_affected=0,
                │                       db.operation.name=query
                └── [OK] run.llmstep (b4e5194e749ede24) — 884ms

</pre>
<p>A few key things to call out here: the <code>ssot__DurationNumber__c</code> field (e.g. 2,430ms) tells you how long each step took, and <code>ssot__StatusCode__c</code> (Status is always either <code>OK</code> or <code>ERROR</code>) tells you exactly where a chain broke.</p>
<p>Note that the flow ran successfully — <code>run.Get_Account.1</code> returned <code>OK</code> — but the parent action still errored. The reason is in the span attributes: <code>db.rows_affected=0</code> tells you the Account query returned nothing. Despite the operation being named <code>run.createrecord</code>, the <code>db.operation.name=query</code> attribute reveals it was actually performing a lookup, not a write, and that lookup came back empty. The action expected a result and didn&#8217;t get one. Execution continued anyway with a fallback <code>run.llmstep</code>, which is why the overall interaction didn&#8217;t terminate immediately.</p>
<p>Without the span attributes, you&#8217;d see a failed action and have no idea whether the flow ran, whether it touched the database, or what it found there.</p>
<h2>Comparing Agentforce session tracing and Agent Platform Tracing</h2>
<p>Agent Platform Tracing stores spans into Data Lake Object (DLOs) which get mapped into Data Model Object (DMOs) using the single source of truth (<code>ssot</code>) prefix. Before going further, it&#8217;s worth understanding how <a href="https://help.salesforce.com/s/articleView?id=ai.generative_ai_session_trace_about.htm&amp;language=en_US&amp;type=5"><u>Agentforce sSession Tracing</u></a> and Agent Platform Tracing differ.</p>
<table>
<tbody>
<tr>
<td><b>Feature</b></td>
<td><b>Level</b></td>
<td><b>Captures</b></td>
<td><b>Primary DMO</b></td>
<td><b>Join Field</b></td>
</tr>
<tr>
<td><span style="font-weight: 400">Session Tracing</span></td>
<td><span style="font-weight: 400">Planner</span></td>
<td><span style="font-weight: 400">Conversational flow: user input, subagent routing, agent response</span></td>
<td><span style="font-weight: 400">ssot__AiAgentInteraction__dlm</span></td>
<td><span style="font-weight: 400">ssot__TelemetryTraceId__c</span></td>
</tr>
<tr>
<td><span style="font-weight: 400">Platform Tracing</span></td>
<td><span style="font-weight: 400">Service</span></td>
<td><span style="font-weight: 400">Back-end execution: LLM calls, Flow runs, Apex invocations, timing, errors</span></td>
<td><span style="font-weight: 400">ssot__TelemetryTraceSpan__dlm</span></td>
<td><span style="font-weight: 400">ssot__TelemetryTrace__c</span></td>
</tr>
</tbody>
</table>
<p>Agentforce Session Tracing — centered on <code>ssot__AiAgentInteraction__dlm</code> — is instrumented at the planner level and captures the <i>conversational</i> flow: what the user said, which subagent handled the request, and what the agent returned. Agent Platform Tracing, via <code>ssot__TelemetryTraceSpan__dlm</code>, is instrumented at the service level and captures the <i>back-end execution state</i> that powered that response. The span DMO is self-referential by design: <code>ssot__TelemetryParentSpanId__c</code> maps back to <code>ssot__Id__c</code>, enabling tree traversal from any node in either direction. Furthermore, because both DMOs share the exact same underlying Trace ID, you can join <code>ssot__TelemetryTraceId__c</code> directly to <code>ssot__TelemetryTrace__c</code>. This enables you to connect Agentforce session tracing to the specific back-end code execution provided by Agent Platform Tracing.</p>
<h2><span style="font-weight: 400">Querying trace data with SOQL</span></h2>
<p><span style="font-weight: 400">With SOQL, you can query these DMOs directly via the API to extract exactly the diagnostics you need. A good starting point is profiling performance by operation type, which quickly surfaces any parts of your agent execution that are consistently slow:</span></p>
<pre language="sql">SELECT ssot__OperationName__c,
       AVG(ssot__DurationNumber__c) AvgDuration,
       MAX(ssot__DurationNumber__c) MaxDuration,
       COUNT(Id) SpanCount
FROM ssot__TelemetryTraceSpan__dlm
WHERE ssot__StartDateTime__c &gt; 2026-01-01T00:00:00Z
GROUP BY ssot__OperationName__c
LIMIT 20
</pre>
<p><span style="font-weight: 400">Or we can query for all recent spans that have errors: </span></p>
<pre language="sql">SELECT ssot__Id__c, ssot__OperationName__c, ssot__TelemetryTrace__c,
       ssot__StartDateTime__c, ssot__DurationNumber__c, ssot__StatusCode__c
FROM ssot__TelemetryTraceSpan__dlm
WHERE ssot__StatusCode__c = 'ERROR'
ORDER BY ssot__StartDateTime__c DESC
LIMIT 20
</pre>
<p><span style="font-weight: 400">Or count errors across operation types:</span></p>
<pre language="sql">SELECT ssot__OperationName__c, COUNT(Id) SpanCount
FROM ssot__TelemetryTraceSpan__dlm
WHERE ssot__StatusCode__c = 'ERROR'
GROUP BY ssot__OperationName__c
LIMIT 20
</pre>
<p>Once we find a span we want to investigate, we can query for all related spans via <code>ssot__TelemetryTrace__c:</code></p>
<pre language="sql">SELECT ssot__Id__c, ssot__OperationName__c, ssot__TelemetryParentSpanId__c,
       ssot__ServiceName__c, ssot__StatusCode__c, ssot__DurationNumber__c,
       ssot__StartDateTime__c, ssot__EndDateTime__c,
       ssot__TelemetrySpanAttributeText__c
FROM ssot__TelemetryTraceSpan__dlm
WHERE ssot__TelemetryTrace__c = 'YOUR_TRACE_ID'
ORDER BY ssot__StartDateTime__c ASC
</pre>
<p>We can then reconstruct the tree client-side by matching each span&#8217;s <code>ssot__TelemetryParentSpanId__c</code> to another span&#8217;s <code>ssot__Id__c</code>, treating <code>null</code> or <code>0000000000000000</code> as the root.</p>
<h2><span style="font-weight: 400">Query Agent Platform Tracing data from Slack with Slackbot</span></h2>
<p><span style="font-weight: 400">Because this data lives in Data 360, you can easily query the data to observe Agentforce. One effective pattern is wiring instructions into a Slack canvas, feeding it to Slackbot, and using it as the natural language interface for our trace data. This makes it easy for anyone to digest the trace information, as long as Slackbot is set up to query the information correctly. Whether you&#8217;re responding to a user complaint or proactively checking for errors, the workflow is the same: ask the bot, get the trace tree, pinpoint the issue, and discuss a fix, without ever leaving Slack. No log spelunking, no guesswork. Just a conversation with Slackbot to find the root cause and come up with a potential solution.</span></p>
<p><span style="font-weight: 400">The approach I take when providing instructions to Slackbot is simple: I provide the schemas, sample queries, join patterns, and main use cases. You can find some of the instructions I use in my  </span><a href="https://github.com/trevorscott/AgentPlatformTracingSlackbotInstructions"><span style="font-weight: 400">Agent Platform Tracing Slackbot Instructions GitHub repo</span></a><span style="font-weight: 400">. </span></p>
<p><span style="font-weight: 400">You’ll need to make sure that your Slack is connected to an org that has Agent Platform Tracing enabled. Once you do, just add the instructions for Slackbot into a canvas and either add the canvas as a tab for Slackbot or paste it into the chat at the beginning of your conversation.</span></p>
<p><span style="font-weight: 400">Here&#8217;s a typical Slackbot exchange:</span></p>
<pre language="text">You:  Why did interaction b9e8f7b4 take 4 seconds?

Slackbot:  I queried all spans for trace b9e8f7b4. The interaction
           took 2,690ms total. Here's the breakdown:

           run.interaction           2,690ms  OK
           └─ run.llmstep              139ms  OK
              └─ run.topic               3ms  OK
                 └─ run.llmstep        838ms  OK
                    └─ run.action      327ms  OK
                       └─ run.llmstep 1,011ms  OK   ← slowest span

           The bottleneck is the final run.llmstep span (1,011ms),
           which accounts for 38% of total duration.
</pre>
<p><span style="font-weight: 400">Once you have Slackbot set up with Agent Platform Tracing, you can ask things like:</span></p>
<ul>
<li style="font-weight: 400"><span style="font-weight: 400">Why did this agent interaction take 4 seconds?</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">Which subagent is responsible for the most errors this week?</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">What are the most common errors for a given operation type? </span></li>
<li style="font-weight: 400"><span style="font-weight: 400">What’s the root cause of this issue that a user is asking about? </span></li>
</ul>
<h2><span style="font-weight: 400">Joining Agentforce Session Tracing and Agent Platform Tracing data</span></h2>
<p><span style="font-weight: 400">With the right instructions, Slackbot can query and join both Agentforce Session Tracing and Agent Platform Tracing data together. Joining them provides a full trace tree for end-to-end observability of Agentforce. With both features, we have complete visibility of agent activity and issues in a couple of minutes.</span></p>
<p><span style="font-weight: 400">Use this when you want to correlate a user&#8217;s conversational context (Agentforce Session Tracing) with the back-end execution details (Agent Platform Tracing). This is an optional advanced use case; both features work independently.</span></p>
<h3><span style="font-weight: 400">How the join works</span></h3>
<p><span>Because </span><code>ssot__TelemetryTraceId__c</code><span> on </span><code>ssot__AiAgentInteraction__dlm</code><span> matches </span><code>ssot__TelemetryTrace__c</code><span> on </span><code>ssot__TelemetryTraceSpan__dlm</code><span>, they can be used for a direct join. This means you can fetch all spans for an interaction in a single query.</span></p>
<h3><span style="font-weight: 400">Full joined hierarchy</span></h3>
<pre language="text">Session (ssot__AiAgentSession__dlm)
└── Interaction (ssot__AiAgentInteraction__dlm)
    └── Step (ssot__AiAgentInteractionStep__dlm)
        └── Span (ssot__TelemetryTraceSpan__dlm)
            └── Span (ssot__TelemetryTraceSpan__dlm)
                └── ...
</pre>
<h3><span style="font-weight: 400">Query pattern: Get all spans for a known interaction</span></h3>
<pre language="sql">SELECT ssot__Id__c, ssot__OperationName__c, ssot__TelemetryParentSpanId__c,
       ssot__StartDateTime__c, ssot__DurationNumber__c, ssot__StatusCode__c
FROM ssot__TelemetryTraceSpan__dlm
WHERE ssot__TelemetryTrace__c = 'TELEMETRY_TRACE_ID_FROM_INTERACTION'
ORDER BY ssot__StartDateTime__c ASC
</pre>
<h2><span style="font-weight: 400">Getting started</span></h2>
<p><span style="font-weight: 400">Generative AI adds complexity to modern stacks that traditional logging wasn&#8217;t designed to observe, and the cost of those blind spots compounds the longer they take to find. Agent Platform Tracing removes the blind spots. And, when you combine it with Slackbot, it is far easier to observe, troubleshoot, and fix Agentforce issues in production so your agents can get back to work without issues. Check out the </span><a href="https://github.com/trevorscott/AgentPlatformTracingSlackbotInstructions"><span style="font-weight: 400">Agent Platform Tracing Slackbot Instructions GitHub repo</span></a><span style="font-weight: 400"> for working Slackbot instructions that you can copy-and-paste into a canvas to get started, and the</span><a href="https://help.salesforce.com/s/articleView?id=ai.generative_ai_platform_trace.htm&amp;type=5"><span style="font-weight: 400"> Agent Platform Tracing documentation</span></a><span style="font-weight: 400"> for setup instructions and the full data model reference.</span></p>
<p><b>Trevor Scott</b><span style="font-weight: 400"> is a Senior Manager of Product Management at Salesforce, focused on enabling customers with security and telemetry data to help developers and admins ship more confidently.</span></p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/05/agent-platform-tracing-debug-agentforce-with-trace-trees-soql-and-slack">Agent Platform Tracing: Debug Agentforce with Trace Trees, SOQL, and Slack</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/05/agent-platform-tracing-debug-agentforce-with-trace-trees-soql-and-slack/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">206243</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260507105210/Generic-C-1-e1778176344923.png?w=1000" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260507105210/Generic-C-1-e1778176344923.png?w=1000" medium="image" />
	</item>
		<item>
		<title>Introducing the Data 360 MCP Server (Developer Preview)</title>
		<link>https://developer.salesforce.com/blogs/2026/05/introducing-the-data-360-mcp-server-developer-preview</link>
		<comments>https://developer.salesforce.com/blogs/2026/05/introducing-the-data-360-mcp-server-developer-preview#respond</comments>
		<pubDate>Wed, 06 May 2026 15:15:49 +0000</pubDate>
		<dc:creator><![CDATA[Alba Rivas]]></dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[App Development]]></category>
		<category><![CDATA[Data Cloud]]></category>
		<category><![CDATA[Salesforce Releases]]></category>
		<category><![CDATA[Data 360]]></category>
		<category><![CDATA[Developer Preview]]></category>
		<category><![CDATA[MCP Server]]></category>
		<category><![CDATA[Model context protocol]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=206226</guid>
		<description><![CDATA[<p>Explore the new open-source MCP Server in Developer Preview. Learn how to connect AI assistants like Cursor and Claude Code directly to your Data 360 APIs via a standard stdio transport.</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/05/introducing-the-data-360-mcp-server-developer-preview">Introducing the Data 360 MCP Server (Developer Preview)</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><span style="font-weight: 400">The</span><a href="https://modelcontextprotocol.io/"> <span style="font-weight: 400">Model Context Protocol (MCP)</span></a><span style="font-weight: 400"> is changing how we expose APIs to AI agents. To continue our headless journey, Salesforce just released the</span><a href="https://github.com/forcedotcom/d360-mcp-server"> <span style="font-weight: 400">Data 360 MCP server</span></a><span style="font-weight: 400"> as an open-source GitHub repository in Developer Preview. This new server connects the Salesforce Data 360 APIs to any</span><span style="font-weight: 400"> MCP client that supports stdio transport, such as Claude Code, Cursor, or Codex</span><span style="font-weight: 400">. </span></p>
<p><span style="font-weight: 400">This post covers how the new MCP server works, how to install it locally, and how your feedback will help us shape the future of the tool.</span></p>
<h2><b>Solving the context window challenge</b></h2>
<p><span style="font-weight: 400">Data 360 has a massive API surface. Exposing every endpoint directly as a tool quickly overwhelms a large language model&#8217;s (LLM) context window. To solve this, our engineering team implemented a novel approach </span><a href="https://blog.cloudflare.com/enterprise-mcp/"><span style="font-weight: 400">inspired by Cloudflare&#8217;s research on MCP server tool management at scale</span></a><span style="font-weight: 400">. Instead of registering the approximately 200 REST API operations individually, this MCP server consolidates them behind three facade tools:</span></p>
<ul>
<li><code><span>search</span></code><span>: Discovers tools by intent, keyword, or family.</span></li>
<li><code><span>payload_examples</span></code><span>: Fetches working JSON payloads so the LLM understands how to structure complex requests.</span></li>
<li><code>execute</code><span>: Runs the specific underlying tool by name and passes the correct parameters.</span></li>
</ul>
<p><span style="font-weight: 400">When an LLM wants to perform a task, it uses a typical workflow: it </span><b>searches</b><span style="font-weight: 400"> for the right capability, fetches a </span><b>payload example</b><span style="font-weight: 400"> to understand the required data structure, and then </span><b>executes </b><span style="font-weight: 400">the operation. This approach saves context window space and improves the accuracy of the AI&#8217;s actions while remaining flexible enough to support the ever-growing headless capabilities of Data 360 far into the future.</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206231" >
			    <img decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260506074656/image1-e1778078834420.png?w=1000" class="postimages" width="1000" height="594" alt="Sequence diagram illustrating the three-step MCP facade workflow: the AI assistant first calls search to discover the segment tool, then calls payload_examples to retrieve the JSON template, and finally calls execute to send the payload to the Salesforce Data 360 API." />
			  </span>
			</p>
<h2><b>What the Data 360 MCP server includes</b></h2>
<p><span style="font-weight: 400">Under the hood, the three facade tools give your AI client access to hundreds of REST API operations organized into tool families. These tools connect directly to most of the general availability (GA) APIs on Data 360.</span></p>
<table>
<tbody>
<tr>
<td><b>Tool Family</b></td>
<td><b>Description</b></td>
</tr>
<tr>
<td><span style="font-weight: 400">DLO / DMO</span></td>
<td><span style="font-weight: 400">Manage raw data tables (Data Lake Objects) and your unified schema (Data Model Objects)</span></td>
</tr>
<tr>
<td><span style="font-weight: 400">Data Streams</span></td>
<td><span style="font-weight: 400">Ingest data from generic sources, Salesforce CRM, Snowflake, or Amazon S3</span></td>
</tr>
<tr>
<td><span style="font-weight: 400">Mappings</span></td>
<td><span style="font-weight: 400">Map source fields to target Data Model Object fields</span></td>
</tr>
<tr>
<td><span style="font-weight: 400">Data Transforms</span></td>
<td><span style="font-weight: 400">Build, run, validate, and schedule SQL-based transformations</span></td>
</tr>
<tr>
<td><span style="font-weight: 400">Identity Resolution</span></td>
<td><span style="font-weight: 400">Define rules that unify customer profiles, then publish and run them</span></td>
</tr>
<tr>
<td><span style="font-weight: 400">Calculated Insights</span></td>
<td><span style="font-weight: 400">Author SQL-defined metrics; enable, disable, run, validate, and query them</span></td>
</tr>
<tr>
<td><span style="font-weight: 400">Segment / Dataspace</span></td>
<td><span style="font-weight: 400">Build and publish audience segments; manage dataspaces and their members</span></td>
</tr>
<tr>
<td><span style="font-weight: 400">Connection</span></td>
<td><span style="font-weight: 400">Discover connectors and create, update, or test connections to data sources</span></td>
</tr>
<tr>
<td><span style="font-weight: 400">Query</span></td>
<td><span style="font-weight: 400">Run SQL queries; query profiles, calculated insights, and data graphs; explore metadata</span></td>
</tr>
<tr>
<td><span style="font-weight: 400">Activation / Data Action</span></td>
<td><span style="font-weight: 400">Send segments to external platforms and trigger automated data actions</span></td>
</tr>
<tr>
<td><span style="font-weight: 400">Semantic Data Models</span></td>
<td><span style="font-weight: 400">Build semantic models for business intelligence — data objects, dimensions, measures, calculated fields, metrics, and relationships</span></td>
</tr>
<tr>
<td><span style="font-weight: 400">AI and Search</span></td>
<td><span style="font-weight: 400">Configure Retrieval-Augmented Generation (RAG) retrievers and vector or hybrid search indexes for AI workloads</span></td>
</tr>
<tr>
<td><span style="font-weight: 400">Other</span></td>
<td><span style="font-weight: 400">Deploy data kit bundles, publish real-time events, handle GDPR requests, use AI-assisted mapping helpers, and apply preset mappings</span></td>
</tr>
</tbody>
</table>
<h2><b>Getting started: installation and authentication</b></h2>
<p><span style="font-weight: 400">During this Developer Preview, the MCP server is designed for local execution and is not yet multitenant. This means each running instance connects a single user to a single Salesforce org.</span></p>
<p><span style="font-weight: 400">To run the server, you need Java 17 or later, Maven 3.9 or later, and a Salesforce org with Data 360 enabled. You can use an </span><a href="https://www.salesforce.com/products/free-trial/developer"><span style="font-weight: 400">Agentforce Developer Edition org</span></a><span style="font-weight: 400"> or a </span><a href="https://trailhead.salesforce.com/content/learn/modules/data-cloud-in-flows/set-up-a-custom-data-cloud-playground"><span style="font-weight: 400">Data 360-enabled Trailhead playground</span></a><span style="font-weight: 400"> if you want to test it in an isolated environment. The server communicates via </span><span style="font-weight: 400">stdio</span><span style="font-weight: 400">, so it will work with any MCP client that supports this transport layer. Once your org is ready, follow the instructions in the </span><a href="https://github.com/forcedotcom/d360-mcp-server"><span style="font-weight: 400">README</span></a><span style="font-weight: 400"> to connect your agent and start building.</span></p>
<p><span style="font-weight: 400">The GitHub repo contains an installer script that helps set up dependencies and configure common MCP clients for use with the server. </span></p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206238" >
			    <img decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260506081157/image2_F.gif?w=800" class="postimages" width="800" height="480" alt="Animation showing a terminal session in which the Data 360 MCP server is installed and configured for use with Claude Code." />
			  </span>
			</p>
<h2><b>Help us shape the general availability release</b></h2>
<p><span style="font-weight: 400">The new Data 360 MCP Server enables you to connect powerful LLMs to your Salesforce data without hitting context window limits. By using a novel facade tool architecture, we&#8217;ve made roughly 200 API operations easily accessible for agents and coding assistants. </span></p>
<p><span style="font-weight: 400">The Developer Preview is a critical step before we integrate this architecture directly into the Salesforce platform for general availability. By releasing it as open-source now, we aim to speed up platform integration and gather direct feedback from developers. Install the server today, test it with your local tools, and share your </span><a href="https://github.com/forcedotcom/d360-mcp-server/issues"><span style="font-weight: 400">feedback on GitHub</span></a><span style="font-weight: 400"> to help us prepare for the GA release. </span></p>
<p><span style="font-weight: 400">When the Data 360 MCP server becomes generally available, we&#8217;ll offer it as a </span><span style="font-weight: 400">Salesforce Hosted MCP Server</span> <a href="https://developer.salesforce.com/docs/platform/hosted-mcp-servers/guide/servers-reference.html"><span style="font-weight: 400">alongside other product integration MCP servers</span></a><span style="font-weight: 400">. In the meantime, our entire Data 360 team will be testing it internally alongside you to build and refine a collection of Data 360 agent skills; stay tuned for more news on those!</span></p>
<h2><b>About the authors</b></h2>
<p><b>Alba Rivas</b><span style="font-weight: 400"> works as a Principal Developer Advocate at Salesforce. You can follow her on</span> <a href="https://www.linkedin.com/in/alba-rivas/"><span style="font-weight: 400">Linkedin</span></a><span style="font-weight: 400">.</span></p>
<p><a href="https://www.linkedin.com/in/cpeterson"><b>Chris Peterson</b></a><span style="font-weight: 400"> is a Senior Director of Product Management at Salesforce, currently working on Data 360 Headless. </span></p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/05/introducing-the-data-360-mcp-server-developer-preview">Introducing the Data 360 MCP Server (Developer Preview)</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/05/introducing-the-data-360-mcp-server-developer-preview/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">206226</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260506080754/DoubleHeadshot-2-e1778080091980.png?w=1000" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260506080754/DoubleHeadshot-2-e1778080091980.png?w=1000" medium="image" />
	</item>
		<item>
		<title>GraphQL Mutations Now Available in LWC: Create, Update, and Delete Records</title>
		<link>https://developer.salesforce.com/blogs/2026/05/graphql-mutations-now-available-in-lwc-create-update-and-delete-records</link>
		<comments>https://developer.salesforce.com/blogs/2026/05/graphql-mutations-now-available-in-lwc-create-update-and-delete-records#respond</comments>
		<pubDate>Tue, 05 May 2026 15:00:28 +0000</pubDate>
		<dc:creator><![CDATA[Ben Sklar]]></dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[App Development]]></category>
		<category><![CDATA[Developer Tooling]]></category>
		<category><![CDATA[Lightning Web Components]]></category>
		<category><![CDATA[announcement]]></category>
		<category><![CDATA[GraphQL]]></category>
		<category><![CDATA[GraphQL Mutations]]></category>
		<category><![CDATA[lwc]]></category>
		<category><![CDATA[platform]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=206215</guid>
		<description><![CDATA[<p>Create, update, and delete Salesforce records directly in LWC with GraphQL mutations. Streamline your data transactions and handle bulk changes without the need for custom Apex.</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/05/graphql-mutations-now-available-in-lwc-create-update-and-delete-records">GraphQL Mutations Now Available in LWC: Create, Update, and Delete Records</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><span style="font-weight: 400">Salesforce Developers, we have an exciting update that extends the data management story for Lightning Web Components (LWC): </span><b>GraphQL mutations are here!</b></p>
<p><span style="font-weight: 400">We introduced the newest version of the GraphQL wire adapter (</span><a href="https://developer.salesforce.com/docs/platform/lwc/guide/reference-graphql.html"><span style="font-weight: 400">lightning/graphql</span></a><span style="font-weight: 400">) in Spring ‘26. Now we’re introducing support for using GraphQL beyond just querying in LWC, adding the ability to easily </span><b>create, update, and delete </b><span style="font-weight: 400">records via the GraphQL Mutations API.</span></p>
<h2>Executing GraphQL mutations in LWC with <code>executeMutation</code></h2>
<p>In LWC, interacting with the Salesforce GraphQL API for mutations is achieved via the <code>executeMutation</code> function from the <code>lightning/graphql </code><code>module.</code><br />
The <code>executeMutation</code> function allows you to execute one or more data changes. The function accepts an object parameter with the same three properties as the GraphQL wire: <code>query</code>, <code>variables</code>, and <code>operationName</code>. For example, to update an Account’s name:</p>
<pre language="javascript">import { gql, executeMutation } from 'lightning/graphql';

const updateRecord = gql(`
            mutation UpdateAccount($input: AccountUpdateInput!) {
                uiapi {
                    AccountUpdate(input: $input) {
                        success
                    }
                }
            }
`);

 await executeMutation({
            query: updateRecord,
            variables: {
                input: {
                    Id: '001xx000003GYiCAAW',
                    Account: {
                        Name: 'Acme[Updated]',
                    },
                },
            },
        });
</pre>
<p>The<span> </span><code>executeMutation</code> function supports dynamic query creation, just like the updated GraphQL support provided by <code>lightning/graphql</code>, so you can build these mutation inputs dynamically with JavaScript.</p>
<h2><span style="font-weight: 400">Data consistency considerations</span></h2>
<p><span style="font-weight: 400">Lightning Data Service keeps Salesforce record data consistent across UIAPI and GraphQL. With GraphQL mutations, this mostly works seamlessly, but we do have a few tips for getting the best results: </span></p>
<ul>
<li style="font-weight: 400"><span style="font-weight: 400">Newly created records will not appear in existing GraphQL query results until the query is refreshed, depending on its filter criteria and cache state. This applies to create and update mutations that affect records included in a query result set. </span></li>
<li style="font-weight: 400"><span style="font-weight: 400">Updated record fields may be propagated to subscribed Lightning Data Service wire adapters when their cached data overlaps. It may not be necessary to refresh in all scenarios.</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">Deleted records will properly be removed from Lightning Data Service wire results. Refreshes are not required for delete operations.</span></li>
</ul>
<h2><span style="font-weight: 400">See it in action: The LWC recipes showcase</span></h2>
<p><span style="font-weight: 400">To help you get started immediately, we have added dedicated examples to the </span><a href="https://github.com/trailheadapps/lwc-recipes/tree/main/force-app/main/default/lwc"><span style="font-weight: 400">LWC Recipes GitHub repository</span></a><span style="font-weight: 400">.</span></p>
<p>The new <b><code>graphqlMutation</code></b> components demonstrate how to use <code>executeMutation</code> to handle create, update, and delete operations through GraphQL. By exploring the source code for the <code>graphqlMutation</code> components, you can see practical implementations of data mutation, success handling, and error display via toast events.</p>
<p><span style="font-weight: 400">You can clone the LWC Recipes repository to your local machine and deploy the app to your Salesforce org to test this new functionality.</span></p>
<p><span style="font-weight: 400">GraphQL Mutations fully unlock bulk updates and tree saves for Lightning Web Components (LWC) without custom Apex. You can now not only view your Salesforce data efficiently but also modify it seamlessly, bringing richer, data-driven applications to life. This capability significantly streamlines the development of complex UIs that require simultaneous creation, update, or deletion of multiple related records. The integration of GraphQL Mutations marks a major step toward empowering LWC developers with a more modern and powerful way to manage data transactions on the Salesforce platform.</span></p>
<h2><span style="font-weight: 400">Developer Resources</span></h2>
<p><span style="font-weight: 400">Ready to start mutating your data? Here are the resources you need to dive in:</span></p>
<ul>
<li style="font-weight: 400"><b>Developer Documentation: </b><a href="https://developer.salesforce.com/docs/platform/lwc/guide/reference-graphql-wire.html"><b>lightning/graphql</b></a></li>
<li style="font-weight: 400"><b>GitHub repository: </b><a href="https://github.com/trailheadapps/lwc-recipes/tree/main/force-app/main/default/lwc"><b><u>LWC Recipes</u></b></a> – Find the new <code>graphqlMutation</code> components and other examples.</li>
<li style="font-weight: 400"><b>API Developer Guide: </b><a href="https://developer.salesforce.com/docs/platform/graphql/guide/mutations-schema.html"><b>GraphQL API</b></a><span style="font-weight: 400"> – Details on the mutation schema and structure.</span></li>
<li style="font-weight: 400"><b>Postman Collection: </b><a href="https://www.postman.com/salesforce-developers/salesforce-developers/folder/dgk52e4/mutation?sideView=agentMode"><b>Salesforce Platform APIs/GraphQL</b></a><span style="font-weight: 400"> – Helpful for testing mutation structure.</span></li>
<li style="font-weight: 400"><b>Best Practices Guide: </b><a href="https://developer.salesforce.com/docs/platform/graphql/guide/graphql-wire-lwc-best.html"><b>GraphQL Wire Adapter Best Practices</b></a><span style="font-weight: 400"> – Maximize your GraphQL potential.</span></li>
</ul>
<h2><span style="font-weight: 400">About the Authors</span></h2>
<p><b>Stephen Carraway</b><span style="font-weight: 400"> is a Lead Member of Technical Staff at Salesforce from the Lightning Data Service team. When he’s not building client data libraries, he&#8217;s busy woodworking, gardening, and 3D printing. </span></p>
<p><b>Ben Sklar</b><span style="font-weight: 400"> is a Director of Product Management at Salesforce responsible for UI API, the Salesforce GraphQL API, the Lightning Data Service, and AI Developer Kit. Ben is a major fan of GraphQL, but when not using GraphQL, you can find him playing ultimate frisbee or skiing during the winter. Follow him on </span><a href="https://www.linkedin.com/in/benjamin-sklar/"><span style="font-weight: 400">LinkedIn</span></a><span style="font-weight: 400">.</span></p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/05/graphql-mutations-now-available-in-lwc-create-update-and-delete-records">GraphQL Mutations Now Available in LWC: Create, Update, and Delete Records</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/05/graphql-mutations-now-available-in-lwc-create-update-and-delete-records/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">206215</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260504111148/Generic-A-e1777918325209.png?w=1000" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260504111148/Generic-A-e1777918325209.png?w=1000" medium="image" />
	</item>
		<item>
		<title>The Dreamforce 2026 Call for Participation Is Now Open</title>
		<link>https://developer.salesforce.com/blogs/2026/04/the-dreamforce-2026-call-for-participation-is-now-open</link>
		<comments>https://developer.salesforce.com/blogs/2026/04/the-dreamforce-2026-call-for-participation-is-now-open#respond</comments>
		<pubDate>Wed, 29 Apr 2026 17:30:08 +0000</pubDate>
		<dc:creator><![CDATA[Christie Fidura]]></dc:creator>
				<category><![CDATA[Agentforce]]></category>
		<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Developer Community]]></category>
		<category><![CDATA[Professional Development]]></category>
		<category><![CDATA[Salesforce Events]]></category>
		<category><![CDATA[Call for participation]]></category>
		<category><![CDATA[Dreamforce]]></category>
		<category><![CDATA[salesforce developers]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=206206</guid>
		<description><![CDATA[<p>The Dreamforce 2026 Call for Participation is now open. Submit your session proposal by May 27, 2026 and share your developer expertise with the world's most engaged technical audience.</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/the-dreamforce-2026-call-for-participation-is-now-open">The Dreamforce 2026 Call for Participation Is Now Open</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><a href="https://www.salesforce.com/dreamforce/?d=701ed00000p9KZbAAM&amp;utm_content=701ed00000p9KZbAAM&amp;utm_source=google&amp;utm_medium=paid_search&amp;utm_campaign=23626787453&amp;utm_adgroup=194012598436&amp;utm_term=dreamforce%202026&amp;utm_matchtype=e&amp;gclsrc=aw.ds&amp;gad_source=1&amp;gad_campaignid=23626787453&amp;gbraid=0AAAAAD4PnrOYEryZOfeHAhkZ1e6kVjD3X&amp;gclid=CjwKCAjwtcHPBhADEiwAWo3sJto8F8PGiWK8rPLcmtyVYeIAb4OTdx_EFXxDHm_uuthMwUwUia-HDBoCBq8QAvD_BwE"><span style="font-weight: 400">Dreamforce</span></a><span style="font-weight: 400"> returns to San Francisco, September 15–17, 2026, bringing together the global Salesforce community to experience the Agentic Enterprise through 1,600+ sessions, expert-led training, visionary keynotes, and hands-on learning.</span></p>
<p><span style="font-weight: 400">This is where developers get a front-row view of the latest AI innovations, product launches, and breakthrough ideas. You’ll gain the skills to build smarter apps and agents, while connecting with a global community shaping the future of Salesforce development.</span></p>
<p><span style="font-weight: 400">Each year, we invite the Salesforce Developer community to take the stage. Whether you’re a first-time Dreamforce speaker or a seasoned pro, this is your opportunity to share your expertise, best practices, and real-world insights with thousands of the highly engaged developers and technical leaders. </span></p>
<p><span style="font-weight: 400">The Dreamforce 2026 </span><a href="https://reg.salesforce.com/flow/plus/df26/df26sessionproposal/cfpHome"><span style="font-weight: 400">Call for Participation</span></a><span style="font-weight: 400"> is now officially open. If you have a great idea for a session, be sure to follow the guidelines outlined below and </span><a href="https://reg.salesforce.com/flow/plus/df26/df26sessionproposal/cfpHome"><span style="font-weight: 400">complete the submission process</span></a><span style="font-weight: 400"> by </span><b>5 p.m. PT on May 27, 2026.</b></p>
<h2>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206212" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260430093743/DF26-CFP-Slide-e1777567153692.png?w=1000" class="postimages" width="1000" height="563" alt="Dreamforce 2026 announcement image featuring details for the Call for Participation, open until May 27th." />
			  </span>
			</h2>
<h2><span style="font-weight: 400">Why submit a Dreamforce proposal?</span></h2>
<p><span style="font-weight: 400">Presenting at Dreamforce is about inspiring others, sharing your knowledge and expertise, and helping to build a strong and collaborative community of Salesforce professionals. The developer track is seeking compelling, high-quality session proposals that educate by showcasing expertise through technical deep dives, real-world implementations, and innovative solutions that help attendees learn new skills and drive business outcomes. </span></p>
<h2><span style="font-weight: 400">Explore topics for your session</span></h2>
<p><span style="font-weight: 400">The strongest proposals tell a clear, compelling story: the challenge you faced, the solution you built, and what you learned along the way. To craft a standout submission, consider highlighting one or more of the following:</span></p>
<ul>
<li style="font-weight: 400"><b>Technical deep dives</b><span style="font-weight: 400"> that showcase your expertise &#8211; whether it’s a specific feature, a solution you’ve built, or a topic you’re passionate about, grounded in real experience</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">The </span><b>latest Salesforce innovations</b><span style="font-weight: 400">, including hands-on experience with new or upcoming features</span></li>
<li style="font-weight: 400"><b>Pilot or beta experiences</b><span style="font-weight: 400"> that offer early insights into what’s next</span></li>
<li style="font-weight: 400"><b>Solutions built with Salesforce technologies </b><span style="font-weight: 400">such as Agentforce, Data 360, Apex, Lightning Web Components, Model Context Protocol (MCP), vibe coding, and more</span></li>
</ul>
<p><b>Cross-cloud use cases </b><span style="font-weight: 400">that span multiple Salesforce products &#8211; for example, integrations between core Platform and Slack</span></p>
<h2><span style="font-weight: 400">Choose a session format</span></h2>
<p><span style="font-weight: 400">For inclusion into the Developer track, you can choose from the following session formats:</span></p>
<ul>
<li style="font-weight: 400"><b>Breakout Sessions (40 minutes):</b><span style="font-weight: 400"> These sessions are held in dedicated rooms with larger audience capacity, giving presenters ample time to deep dive into their topic and take live questions. We recommend 32 minutes for presentation delivery and 5-7 minutes for questions and discussion. Up to three presenters may deliver a breakout.</span></li>
<li style="font-weight: 400"><b style="color: #4a4a4a;font-family: 'Salesforce Sans', Arial, sans-serif">Theater Sessions (20 minutes):</b><span style="font-weight: 400"> Fast, focused, and built for impact. Conducted on the show floor in open theaters without formal Q&amp;A, with presenters encouraged to continue the conversation with attendees after their session. Maximum of two presenters.</span></li>
</ul>
<h2><span style="font-weight: 400">Submit your proposal </span></h2>
<p><span style="font-weight: 400">Submitting a Dreamforce session proposal is a straightforward process. Here are some guidelines for filling out the submission form:</span></p>
<ul>
<li style="font-weight: 400"><b>Review the Call for Participation form before starting.</b><span style="font-weight: 400"> Every detail you include helps the technical review team evaluate your session’s potential. We’re looking for clear storytelling, real-world relevance, and actionable takeaways, so be sure to outline the challenge, your solution, and the technical insights your audience will walk away with.</span></li>
<li style="font-weight: 400"><b>Craft an authentic and meaningful title and abstract.</b>
<ul>
<li style="font-weight: 400"><i><span style="font-weight: 400">Title (60 characters max):</span></i><span style="font-weight: 400"> Make it very clear to attendees what they&#8217;ll learn. Tip: Start with a verb and include the name of the product or technology. Example: &#8220;Using Parallel Subscriptions to Help with Your Agents&#8221;</span></li>
<li style="font-weight: 400"><i><span style="font-weight: 400">Abstract (200 characters max): Dive deeper into what your session will cover. Accuracy and clarity are more important than creative writing. Be careful with AI-generated content, which can feel inauthentic and impersonal.</span></i></li>
</ul>
</li>
<li><b style="color: #4a4a4a;font-family: 'Salesforce Sans', Arial, sans-serif">Make sure you can attend Dreamforce 2026 if your session is accepted. </b><span style="font-weight: 400">Note that we do not provide travel or accommodation for presenters.</span></li>
</ul>
<h2><span style="font-weight: 400">Access speaker support and resources</span></h2>
<p><span style="font-weight: 400">If your session is accepted, you’ll receive an email confirmation by the end of June 2026, and you and any co-presenters will be asked to confirm your participation via our Content Portal. All presenters receive a complimentary speaker pass to Dreamforce 2026. If you&#8217;ve already purchased a pass, you&#8217;ll receive instructions on how to request a refund or transfer it to someone else.</span></p>
<p><span style="font-weight: 400">We’ll guide you through the session preparation process, which includes coaching you to prepare your content, reviewing your presentation slides, and rehearsing your session. </span></p>
<p><span style="font-weight: 400">Not accepted? Don&#8217;t be discouraged. The process is competitive and reflects session balance, audience needs, and event themes, not the quality of your idea. Consider sharing your expertise at </span><a href="https://trailhead.salesforce.com/community/conferences/?_ga=2.20725624.1177069369.1777398590-1895912214.1767637500"><span style="font-weight: 400">Trailblazer Community conferences</span></a><span style="font-weight: 400"> or </span><a href="https://trailblazercommunitygroups.com/"><span style="font-weight: 400">Trailblazer Community group meetups</span></a><span style="font-weight: 400">.</span></p>
<h2><span style="font-weight: 400">Important dates to remember</span></h2>
<ul>
<li style="font-weight: 400"><span style="font-weight: 400">April 29, 2026: Call for Participation opens</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">May 27, 2026, 5 p.m. PT: Submission deadline</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">End of June 2026: Proposal status notifications sent</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">September 15–17, 2026: Dreamforce 2026, San Francisco</span></li>
</ul>
<h2><span style="font-weight: 400">Begin your submission now</span></h2>
<p><a href="https://reg.salesforce.com/flow/plus/df26/df26sessionproposal/cfpHome"><span style="font-weight: 400">Submit your proposal</span></a><span style="font-weight: 400"> by </span><b>Wednesday, May 27, 2026 at 5 p.m. PT</b><span style="font-weight: 400">. We look forward to seeing your ideas.</span></p>
<h2><span style="font-weight: 400">About the author</span></h2>
<p><b>Christie Fidura</b><span style="font-weight: 400"> is responsible for Global Developer Programs at Salesforce. You can follow her on </span><a href="https://bsky.app/profile/cfidurauk.bsky.social"><span style="font-weight: 400">BlueSky</span></a><span style="font-weight: 400"> or </span><a href="https://www.linkedin.com/in/christiefidura/"><span style="font-weight: 400">LinkedIn</span></a><span style="font-weight: 400">.</span></p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/the-dreamforce-2026-call-for-participation-is-now-open">The Dreamforce 2026 Call for Participation Is Now Open</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/04/the-dreamforce-2026-call-for-participation-is-now-open/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">206206</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260429100710/429-The-Dreamforce-2026-Call-for-Participation-Is-Now-Open-e1777482444475.png?w=1000" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260429100710/429-The-Dreamforce-2026-Call-for-Participation-Is-Now-Open-e1777482444475.png?w=1000" medium="image" />
	</item>
		<item>
		<title>Salesforce Hosted MCP Servers Are Now Generally Available</title>
		<link>https://developer.salesforce.com/blogs/2026/04/salesforce-hosted-mcp-servers-are-now-generally-available</link>
		<comments>https://developer.salesforce.com/blogs/2026/04/salesforce-hosted-mcp-servers-are-now-generally-available#respond</comments>
		<pubDate>Wed, 29 Apr 2026 13:00:30 +0000</pubDate>
		<dc:creator><![CDATA[Ross Belmont]]></dc:creator>
				<category><![CDATA[Agentforce]]></category>
		<category><![CDATA[Announcements]]></category>
		<category><![CDATA[APIs and Integrations]]></category>
		<category><![CDATA[Data Cloud]]></category>
		<category><![CDATA[Trust, Security, and Accessibility]]></category>
		<category><![CDATA[Agentic Workflow]]></category>
		<category><![CDATA[AI Security]]></category>
		<category><![CDATA[Apex]]></category>
		<category><![CDATA[Generative AI]]></category>
		<category><![CDATA[MCP]]></category>
		<category><![CDATA[Model context protocol]]></category>
		<category><![CDATA[Salesforce Integration]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=206202</guid>
		<description><![CDATA[<p>Salesforce Hosted MCP Servers are now generally available (GA), enabling AI agents to securely access your Salesforce data across every Enterprise Edition org and above.</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/salesforce-hosted-mcp-servers-are-now-generally-available">Salesforce Hosted MCP Servers Are Now Generally Available</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><span style="font-weight: 400">Parker Harris said it himself: “</span><a href="https://www.salesforce.com/news/stories/salesforce-headless-360-announcement/"><span style="font-weight: 400">Why should you ever log into Salesforce again?</span></a><span style="font-weight: 400">”</span></p>
<p><span style="font-weight: 400">This is where the enterprise interface is heading; the AI revolution is here. Today, Salesforce hosted MCP servers are generally available — and they’re the infrastructure that enables that for your organization.</span></p>
<p><span style="font-weight: 400">What started as a pilot last spring and beta last October — connecting AI assistants to Salesforce logic and assets through the </span><a href="https://modelcontextprotocol.io"><span style="font-weight: 400">Model Context Protocol</span></a><span style="font-weight: 400"> (MCP) — is now a production-ready capability for every Enterprise Edition org and above. Any MCP-compatible client can securely connect to Salesforce with enterprise-grade authentication, governance, and admin control built in.</span></p>
<p><span style="font-weight: 400">A hosted MCP server is a Salesforce-managed endpoint that exposes your org’s logic and assets — data, flows, Apex actions, queries, and more — to any AI client that speaks MCP. Salesforce handles hosting, authentication, and permission enforcement automatically. Whether your users live in Slack, Claude, ChatGPT, or something else entirely, MCP means they can work with Salesforce without switching contexts. All the major AI platforms and workplace communication solutions are building on MCP as the standard way to connect AI agents to enterprise systems. We now have an open standard for the industry to converge upon, and Salesforce is enthusiastically embracing the shift.</span></p>
<h2><b>What’s in the GA</b></h2>
<p><span style="font-weight: 400">If you read </span><a href="https://developer.salesforce.com/blogs/2025/10/salesforce-hosted-mcp-servers-are-in-beta-today"><span style="font-weight: 400">the beta announcement</span></a><span style="font-weight: 400">, you saw the vision. For the GA, we’re highlighting the following:</span></p>
<ul>
<li style="font-weight: 400"><b>Fully managed infrastructure.</b><span style="font-weight: 400"> Salesforce hosts and scales your MCP servers, just as it does for the REST APIs you already use. No servers to provision, no uptime to manage. Enable a server in Setup and you’re live.</span></li>
<li style="font-weight: 400"><b>Platform security built in.</b><span style="font-weight: 400"> Your existing permissions automatically apply — CRUD, </span><a href="https://help.salesforce.com/s/articleView?id=platform.users_profiles_field_perms.htm&amp;type=5"><span style="font-weight: 400">FLS</span></a><span style="font-weight: 400">, sharing rules, and all the other controls you’ve already mastered. Every transaction runs as the authenticated user, without anonymous service accounts or a new security model to learn. OAuth and </span><a href="https://help.salesforce.com/s/articleView?id=xcloud.remoteaccess_pkce.htm&amp;type=5"><span style="font-weight: 400">PKCE</span></a><span style="font-weight: 400"> control access.</span></li>
<li style="font-weight: 400"><b>Robust, extensible feature set.</b><span style="font-weight: 400"> Use prebuilt standard servers for the Agentforce 360 Platform, Tableau Next, Data 360 SQL, and more — or configure custom servers that expose your flows, Apex actions, and </span><a href="https://developer.salesforce.com/docs/atlas.en-us.api_rest.meta/api_rest/resources_named_query.htm"><span style="font-weight: 400">Named Query APIs</span></a><span style="font-weight: 400">.</span></li>
<li style="font-weight: 400"><b>Prompt templates.</b><span style="font-weight: 400"> Craft prebuilt starting points for common tasks like account reviews or deal analysis in natural language to guide AI toward useful outputs grounded in your org’s data.</span></li>
</ul>
<p><span style="font-weight: 400">And soon, you’ll be able to open up even more possibilities by invoking Agentforce agents via MCP.</span></p>
<h2><b>Real-world use cases and impact</b></h2>
<p><span style="font-weight: 400">We received great customer feedback during the pilot and beta periods regarding use cases for the MCP server:</span></p>
<p><b>Sales reps who never leave their AI assistant.</b><span style="font-weight: 400"> A rep preparing for a quarterly business review asks their chatbot to pull the account history, open opportunities, recent case activity, and stakeholder map — all from Salesforce, all in one conversation. No tab-switching, SOQL, or reports to build. The CRM data comes to them.</span></p>
<p><b>Cross-system intelligence.</b><span style="font-weight: 400"> A financial services company connects their AI assistant to Salesforce alongside their ERP system. The assistant reconciles quarterly revenue by comparing closed-won opportunities against general ledger entries, all with production data and enterprise-grade security.</span></p>
<p><b>Custom tools for domain-specific workflows.</b><span style="font-weight: 400"> ISV partners can build custom MCP tools backed by Apex invocable actions, Apex REST, and more. This gives our mutual customers’ AI assistants the ability to interact with their industry-specific data model through natural language, without the end user needing to understand the underlying schema.</span></p>
<h2><b>Human at the wheel</b></h2>
<p><span style="font-weight: 400">In the beta announcement, we characterized MCP as a universal translator between AI agents and your business data. Though that’s accurate, it undersells the importance of enabling </span><b>secure</b><span style="font-weight: 400"> access to data and actions </span><b>under human control</b><span style="font-weight: 400">.</span></p>
<p><span style="font-weight: 400">Every MCP transaction runs with the authenticated user’s identity, permissions, and accountability. If the agent updates a record, that person’s name appears in the audit trail. If their permissions don’t allow an operation, the agent can’t do it either. The human is in the driver’s seat.</span></p>
<p><span style="font-weight: 400">Steve Jobs called the personal computer “</span><a href="https://www.youtube.com/watch?v=ob_GX50Za6c&amp;t=24s"><span style="font-weight: 400">a bicycle for the mind</span></a><span style="font-weight: 400">” — a tool that amplified human capability beyond what was possible working by hand. With MCP and today&#8217;s AI assistants, we&#8217;ve moved past the bicycle. If personal computers were human-powered, now we’ve attached an engine, but the human is still at the wheel. A sales rep preparing for a meeting doesn’t log into Salesforce, navigate to the account, click through related records, and build a briefing by hand. They ask their AI assistant — in whatever tool they’re already working in — and get a comprehensive account review grounded in live customer data.</span></p>
<p><span style="font-weight: 400">The pace of business increases every day, and MCP helps your team keep up.</span></p>
<h2><b>Safety comes faster this time</b></h2>
<p><span style="font-weight: 400">It took more than 50 years for seat belt mandates in automobiles. In AI, safety controls are evolving in months, not decades.</span></p>
<p><span style="font-weight: 400">MCP itself is a safety mechanism. Structured tool calls replace unstructured API access. The server defines exactly which operations are available; there’s no way for an AI assistant to call an API that hasn’t been explicitly exposed. A new OAuth scope provides access to MCP, but not our existing REST APIs. Salesforce adds further layers: the platform’s decades-proven permission model, full audit trails, and the secure-by-default posture requiring MCP servers to be specifically enabled.</span></p>
<p><span style="font-weight: 400">Salesforce has always had strong access controls, but that’s not true of every enterprise system. A new category of products is emerging to help manage this on an enterprise-wide basis: MCP gateways — similar to API gateways, but purpose-built for the protocol. Products like </span><a href="https://www.mulesoft.com/platform/ai-gateway"><span style="font-weight: 400">MuleSoft AI Gateway</span></a><span style="font-weight: 400"> provide centralized governance across all your MCP servers, not just Salesforce. Enterprises deploying MCP across multiple vendors will want to explore MCP gateways for centralized access control.</span></p>
<h2><b>Getting started</b></h2>
<p><span style="font-weight: 400">The setup takes less than 30 minutes. Here’s the shortest path:</span></p>
<ol>
<li style="font-weight: 400"><b>Enable a server</b><span style="font-weight: 400"> in Setup → API Catalog → MCP Servers</span></li>
<li style="font-weight: 400"><b>Create an External Client App</b><span style="font-weight: 400"> with </span><span style="font-weight: 400"><code><span>mcp_api</span></code> </span><span style="font-weight: 400">and </span><span style="font-weight: 400"><code><span>refresh_token</span></code></span><span style="font-weight: 400"> scopes</span></li>
<li style="font-weight: 400"><b>Connect your client</b><span style="font-weight: 400"> — Postman for testing, then Claude, ChatGPT, or similar for everyday use</span></li>
</ol>
<p><span style="font-weight: 400">Documentation is grouped into three layers to match the needs of various roles:</span></p>
<ul>
<li style="font-weight: 400"><a href="https://help.salesforce.com/s/articleView?id=platform.api_catalog_manage_mcp_servers.htm"><b>Salesforce Help</b></a><span style="font-weight: 400"> — Admin setup and configuration</span></li>
<li style="font-weight: 400"><a href="https://developer.salesforce.com/docs/platform/hosted-mcp-servers"><b>Developer Docs</b></a><span style="font-weight: 400"> — </span><a href="https://developer.salesforce.com/docs/platform/hosted-mcp-servers/references/reference/references-overview.html"><span style="font-weight: 400">Technical reference</span></a><span style="font-weight: 400">, </span><a href="https://developer.salesforce.com/docs/platform/hosted-mcp-servers/guide/client-connection-overview.html"><span style="font-weight: 400">client setup</span></a><span style="font-weight: 400">, and </span><a href="https://developer.salesforce.com/docs/platform/hosted-mcp-servers/guide/troubleshooting-overview.html"><span style="font-weight: 400">troubleshooting</span></a></li>
<li style="font-weight: 400"><a href="https://github.com/forcedotcom/mcp-hosted/wiki"><b>Community Wiki</b></a><span style="font-weight: 400"> — Patterns, tips, and the rationale behind our design decisions</span></li>
</ul>
<p><span style="font-weight: 400">If you’re not sure where to begin, try the </span><a href="https://developer.salesforce.com/docs/platform/hosted-mcp-servers/references/reference/sobject-reads.html"><span style="font-weight: 400">platform/sobject-reads</span></a><span style="font-weight: 400"> server in a sandbox. It&#8217;s read-only, risk-free, and immediately useful. When you’re ready for more, you can choose or build the exact tool set your organization needs.</span></p>
<h2><b>A new chapter</b></h2>
<p><span style="font-weight: 400">When we launched the beta, we imagined a world where every department could access CRM data through natural language. This year at TDX I presented on how our hosted MCP server brings this to life for Salesforce customers. You can now watch this TDX session on Salesforce+: </span><a href="https://www.salesforce.com/plus/experience/tdx_2026/series/developers_at_tdx_2026/episode/episode-s1e2"><span style="font-weight: 400">Master Agentic Integration with Salesforce MCP Servers</span></a></p>
<p><span style="font-weight: 400">CRM is a capability, not a destination. We’re just getting started.</span></p>
<h2><b>About the author</b></h2>
<p><b>Ross Belmont</b><span style="font-weight: 400"> is a Senior Director of Product Management focused on integrations, with more than 15 years of experience in the Salesforce ecosystem.</span></p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/salesforce-hosted-mcp-servers-are-now-generally-available">Salesforce Hosted MCP Servers Are Now Generally Available</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/04/salesforce-hosted-mcp-servers-are-now-generally-available/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">206202</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260428145742/429-Salesforce-Hosted-MCP-Servers-Are-Now-Generally-Available-e1777413477642.png?w=1000" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260428145742/429-Salesforce-Hosted-MCP-Servers-Are-Now-Generally-Available-e1777413477642.png?w=1000" medium="image" />
	</item>
		<item>
		<title>Introducing the B2C Commerce CLI and On-Demand Sandbox Cloning</title>
		<link>https://developer.salesforce.com/blogs/2026/04/introducing-the-b2c-commerce-cli-and-on-demand-sandbox-cloning</link>
		<comments>https://developer.salesforce.com/blogs/2026/04/introducing-the-b2c-commerce-cli-and-on-demand-sandbox-cloning#respond</comments>
		<pubDate>Tue, 28 Apr 2026 15:00:06 +0000</pubDate>
		<dc:creator><![CDATA[Charles Lavery]]></dc:creator>
				<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Developer Tooling]]></category>
		<category><![CDATA[B2C Commerce CLI]]></category>
		<category><![CDATA[developer tooling]]></category>
		<category><![CDATA[Sandbox Cloning]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=206193</guid>
		<description><![CDATA[<p>Accelerate B2C Commerce development with a new unified CLI, On-Demand Sandbox Cloning, and AI-powered agent skills.</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/introducing-the-b2c-commerce-cli-and-on-demand-sandbox-cloning">Introducing the B2C Commerce CLI and On-Demand Sandbox Cloning</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><span style="font-weight: 400">B2C Commerce developers juggle multiple code deployments, sandbox provisioning, content delivery network (CDN) configuration, Managed Runtime bundles, and more — often across multiple portals and ad hoc scripts. Setting up new environments has historically been slow and error-prone.</span></p>
<p><span style="font-weight: 400">Today, we&#8217;re announcing two </span><span style="font-weight: 400">tools</span><span style="font-weight: 400"> that change this. </span><b>B2C Developer Tooling</b><span style="font-weight: 400"> i</span><span style="font-weight: 400">s an open-source project that|includes a command-line interface (CLI) and a software development kit</span><span style="font-weight: 400"> (SDK) for the entire B2C platform. </span><b>On-demand sandbox cloning</b><span style="font-weight: 400"> is a new platform capability that lets you create exact replicas of existing sandboxes in minutes. This post covers what the tooling includes, how sandbox cloning works, and how you can get started today.</span></p>
<h2><span style="font-weight: 400">B2C Developer Tooling: A single CLI for the entire platform</span></h2>
<p>B2C Developer Tooling is an open-source, Apache 2.0–licensed, Salesforce-supported set of packages purpose-built for B2C Commerce developers and admins. We publish three Node.js packages: the CLI (<code>@salesforce/b2c-cli</code>), a reusable SDK (<code>@salesforce/b2c-tooling-sdk</code>), and agent skills for AI-assisted development.</p>
<p>The CLI is built on <a href="https://oclif.io/"><u>oclif</u></a> — the same framework behind the Salesforce <code>sf</code> CLI and Heroku CLI — and provides <b>200+ commands across 20+ topic areas</b>. That includes code deployment, sandbox management, Managed Runtime, embedded CDN (eCDN) configuration, Shopper Login and API Access Service (SLAS), Custom Salesforce Commerce API (SCAPI) endpoints, Account Manager administration, and more. Whether you&#8217;re pushing cartridges with <code>b2c code deploy</code>, tailing Managed Runtime (MRT) logs, or configuring Web Application Firewall (WAF) rules on your eCDN zone — we&#8217;ve consolidated it into one tool.</p>
<p><span style="font-weight: 400">The source code lives on GitHub at the </span><a href="https://github.com/SalesforceCommerceCloud/b2c-developer-tooling"><span style="font-weight: 400">B2C Developer Tooling repository</span></a><span style="font-weight: 400">.</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206194" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260427151006/image3-e1777327820527.png?w=1000" class="postimages" width="1000" height="745" alt="Terminal output showing the b2c sandbox clone create command creating a new sandbox clone with progress updates and a completion message." />
			  </span>
			</p>
<h3><span style="font-weight: 400">Built for the modern platform</span></h3>
<p><span style="font-weight: 400">We built the tooling </span><b>SCAPI-first</b><span style="font-weight: 400">, using </span><a href="https://developer.salesforce.com/docs/commerce/commerce-api/references/about-commerce-api/about.html"><span style="font-weight: 400">Salesforce Commerce APIs</span></a><span style="font-weight: 400"> wherever available and falling back to the </span><a href="https://developer.salesforce.com/docs/commerce/b2c-commerce/references/b2c-commerce-ocapi/get-started-with-ocapi.html"><span style="font-weight: 400">Open Commerce API</span></a><span style="font-weight: 400"> (OCAPI) only where needed. Authentication is zero-config for most commands — a built-in public OAuth client and browser-based login flow means you can start working without creating API credentials.</span></p>
<p>For continuous integration (CI) and automation, the CLI is backwards-compatible with <code>sfcc-ci</code> conventions and environment variables, so you can adopt it alongside your existing setup. If you use <code>sfcc-ci</code>, consider updating your CI/continuous delivery (CD) systems to stay up-to-date with the latest platform changes and deprecations. Structured logging with automatic redaction of secrets keeps your pipelines clean and your credentials safe.</p>
<h3><span style="font-weight: 400">Developer velocity</span></h3>
<p>We designed the CLI to keep you moving. Generate new cartridges, controllers, hooks, custom APIs, job steps, and Page Designer components from built-in scaffolds with <code>b2c scaffold generate</code>. Pull instance logs directly from the command line with <code>b2c logs get</code> — and filter by type, level, or time range without navigating WebDAV. For MRT storefronts, <code>b2c mrt tail-logs</code> streams environment logs in real time.</p>
<h3><span style="font-weight: 400">Official GitHub Actions</span></h3>
<p><span style="font-weight: 400">We provide official GitHub Actions for automating B2C Commerce operations in your CI/CD pipelines. High-level composite actions cover the most common workflows — code deployment, data import, MRT deployment, and job execution — while a raw command passthrough handles everything else. The actions manage CLI installation, credential configuration, and caching automatically. These are fully transparent composite actions defined in YAML, with no compiled JavaScript. See the </span><a href="https://salesforcecommercecloud.github.io/b2c-developer-tooling/guide/ci-cd.html"><span style="font-weight: 400">CI/CD guide</span></a><span style="font-weight: 400"> for details.</span></p>
<h2><span style="font-weight: 400">Spotlight: On-Demand Sandbox Cloning</span></h2>
<p><span style="font-weight: 400">Starting with the 26.3 release, we&#8217;re introducing </span><b>On-Demand Sandbox Cloning</b><span style="font-weight: 400"> — the ability to create exact replicas of existing sandboxes with the same data, configurations, and application code. This is a platform-level capability available through the Control Center UI and the B2C CLI from day one.</span></p>
<p><b>Why this matters:</b><span style="font-weight: 400"> environment setup that previously took hours of manual configuration can now be completed in minutes. Need a fresh environment for testing a release? Clone your staging sandbox. Want to reproduce a production issue safely? Clone the relevant environment and investigate in isolation. Each clone is fully independent, so changes in one never affect the other.</span></p>
<p><span style="font-weight: 400">Key benefits:</span></p>
<ul>
<li style="font-weight: 400"><b>~75% faster environment setup, based on internal testing comparing traditional import/export (data import, code deployment, site configuration) to a single clone command</b><span style="font-weight: 400"> </span></li>
<li style="font-weight: 400"><b>Exact replicas</b><span style="font-weight: 400"> — data, site configuration, and code version all carry over</span></li>
<li style="font-weight: 400"><b>Fully isolated</b><span style="font-weight: 400"> — each clone is an independent sandbox with its own lifecycle</span></li>
</ul>
<p><span style="font-weight: 400">All of this leads to faster, less error-prone test and development cycles.</span></p>
<p><span style="font-weight: 400">When using the cloning feature, you’ll likely still need to update certain </span><b>environment-specific </b><span style="font-weight: 400">configurations. Site preferences, aliases, hybrid SLAS configuration settings, and any instances of the tenant identifier of the environment are not automatically updated and should be set with a post-clone data import.</span></p>
<h3><span style="font-weight: 400">Cloning with the CLI</span></h3>
<p><span style="font-weight: 400">The CLI provides full support for creating and managing clones:</span></p>
<pre language="bash"># Create a clone and wait for it to complete
b2c sandbox clone create zzzv-123 --wait

# List all clones for a sandbox
b2c sandbox clone list zzzv-123

# Get detailed status of a specific clone
b2c sandbox clone get zzzv-123 aaaa-002-1642780893121
</pre>
<p>You can optionally specify a <code>--target-profile</code> (medium, large, xlarge, xxlarge) and <code>--ttl</code> to control the clone&#8217;s resource size and lifetime. The source sandbox is automatically stopped during cloning to ensure data integrity.</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206197" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260427151512/image1_84da81-e1777328129381.png?w=1000" class="postimages" width="1000" height="269" alt="Terminal output showing the b2c sandbox clone create command creating a new sandbox clone with progress updates and a completion message." />
			  </span>
			</p>
<h2><span style="font-weight: 400">Teach your coding agent B2C Commerce</span></h2>
<p><span style="font-weight: 400">B2C Developer Tooling includes two sets of agent skills designed for AI coding agents:</span></p>
<ul>
<li style="font-weight: 400"><b>b2c-cli</b><span style="font-weight: 400"> — 16 skills covering CLI operations like code deployment, sandbox management, MRT, and eCDN configuration. These teach your coding agent how to use the CLI on your behalf.</span></li>
<li style="font-weight: 400"><b>b2c</b><span style="font-weight: 400"> — 18 skills teaching B2C development patterns including controllers, hooks, Custom APIs, Page Designer components, forms, and more. These give your coding agent deep knowledge of B2C-specific architecture and best practices — not just CLI syntax.</span></li>
</ul>
<p>The skills work with Claude Code, Cursor, GitHub Copilot, VS Code, Windsurf, and any tool that supports the agent skills format. Install them from the <a href="https://agentskills.io/home"><u>Agent Skills marketplace</u></a>, through the Skills CLI, or by running <code>b2c setup skills</code>.</p>
<p>The CLI also includes a <b>safety mode</b> that prevents accidental destructive operations, which is particularly important when exposing the CLI as a tool to coding agents. You can set the safety level to <code>NO_DELETE</code>, <code>NO_UPDATE</code>, or <code>READ_ONLY</code> to control what operations are allowed.</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206196" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260427151215/image2_586ab9-e1777327952994.png?w=1000" class="postimages" width="1000" height="308" alt="Claude Code responding to a B2C Commerce development prompt using the installed agent skills to provide context-aware guidance." />
			  </span>
			</p>
<h3><span style="font-weight: 400">Model Context Protocol (MCP) Server</span></h3>
<p>For deeper integration, we also ship an MCP server (<code>@salesforce/b2c-dx-mcp</code>) that gives coding agents direct access to platform tools. It includes tools for managing cartridges, working with MRT environments, and scaffolding Custom SCAPI endpoints. It also supports building <a href="https://github.com/SalesforceCommerceCloud/storefront-next-template/"><u>storefront-next</u></a> components with Figma-to-component generation, Page Designer decorators, and site theming. Connect it to any MCP-compatible coding agent for a richer development experience.</p>
<h2><span style="font-weight: 400">Extend with plugins and build with the SDK</span></h2>
<p><span style="font-weight: 400">The CLI supports an oclif-based plugin system for adding custom commands, and exposes hook points for integrating with external credential stores, modifying API requests, and customizing deployment workflows. Community plugins already exist for </span><a href="https://salesforcecommercecloud.github.io/b2c-developer-tooling/guide/third-party-plugins.html"><span style="font-weight: 400">IntelliJ configuration, Keychain credential storage, and more</span></a><span style="font-weight: 400">.</span></p>
<p>For custom integrations, the SDK (<code>@salesforce/b2c-tooling-sdk</code>) exposes all core functions as a reusable Node.js library — build your own tools on top of the same APIs that the CLI uses. The CLI also supports shell autocomplete for bash, zsh, fish, and PowerShell.</p>
<h2><span style="font-weight: 400">Conclusion</span></h2>
<p><span style="font-weight: 400">Between a unified CLI covering the full B2C platform and the ability to clone sandboxes in minutes, we&#8217;re making it significantly easier for you to develop, test, and ship on Commerce Cloud. Install the CLI today with npm, try cloning a sandbox, and let us know what you think. Your feedback directly shapes what we build next.</span></p>
<p>Node.js 22 or later is required. To install agent skills for your coding agent, run <code>b2c setup skills</code>. We welcome feedback and contributions through <a href="https://github.com/SalesforceCommerceCloud/b2c-developer-tooling"><u>GitHub Issues</u></a>.</p>
<h2><span style="font-weight: 400">Resources</span></h2>
<ul>
<li style="font-weight: 400"><a href="https://salesforcecommercecloud.github.io/b2c-developer-tooling/"><span style="font-weight: 400">B2C Developer Tooling documentation</span></a></li>
<li style="font-weight: 400"><a href="https://github.com/SalesforceCommerceCloud/b2c-developer-tooling"><span style="font-weight: 400">B2C Developer Tooling on GitHub</span></a></li>
<li style="font-weight: 400"><a href="https://salesforcecommercecloud.github.io/b2c-developer-tooling/guide/agent-skills.html"><span style="font-weight: 400">Agent Skills guide</span></a></li>
<li style="font-weight: 400"><a href="https://salesforcecommercecloud.github.io/b2c-developer-tooling/guide/ci-cd.html"><span style="font-weight: 400">CI/CD with GitHub Actions</span></a></li>
<li style="font-weight: 400"><a href="https://salesforcecommercecloud.github.io/b2c-developer-tooling/guide/sfcc-ci-migration.html"><span style="font-weight: 400">sfcc-ci migration guide</span></a></li>
</ul>
<h2><b>About the author</b></h2>
<p><b>Charles Lavery</b><span style="font-weight: 400"> is a Principal Member of Technical Staff at Salesforce specializing in developer tooling and APIs.</span></p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/introducing-the-b2c-commerce-cli-and-on-demand-sandbox-cloning">Introducing the B2C Commerce CLI and On-Demand Sandbox Cloning</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/04/introducing-the-b2c-commerce-cli-and-on-demand-sandbox-cloning/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">206193</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260427152014/428-Introducing-the-B2C-Commerce-CLI-and-On-Demand-Sandbox-Cloning-e1777328435613.png?w=1000" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260427152014/428-Introducing-the-B2C-Commerce-CLI-and-On-Demand-Sandbox-Cloning-e1777328435613.png?w=1000" medium="image" />
	</item>
		<item>
		<title>Salesforce Mult-Framework を使用した React による UI 開発</title>
		<link>https://developer.salesforce.com/blogs/2026/04/salesforce-mult-framework-react-jp</link>
		<comments>https://developer.salesforce.com/blogs/2026/04/salesforce-mult-framework-react-jp#respond</comments>
		<pubDate>Sat, 25 Apr 2026 08:14:24 +0000</pubDate>
		<dc:creator><![CDATA[Hiroyuki Inaba]]></dc:creator>
				<category><![CDATA[New Developments]]></category>
		<category><![CDATA[app development]]></category>
		<category><![CDATA[react]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=206163</guid>
		<description><![CDATA[<p>TDX 2026&#12391;&#30330;&#34920;&#12373;&#12428;&#12383;Salesforce Multi-Framework&#65288;&#12505;&#12540;&#12479;&#29256;&#65289;&#12434;&#20351;&#12356;&#12289;React&#12391;Salesforce UI&#12434;&#38283;&#30330;&#12377;&#12427;&#25163;&#38918;&#12434;&#35299;&#35500;&#12290;Developer Edition&#12398;&#12473;&#12463;&#12521;&#12483;&#12481;&#32068;&#32340;&#12391;&#12471;&#12531;&#12503;&#12523;&#12394;UI &#12434;&#20316;&#25104;&#12375;&#12289;&#21462;&#24341;&#20808;&#12487;&#12540;&#12479;&#12434;&#34920;&#31034;&#12377;&#12427;&#12414;&#12391;&#12398;&#12473;&#12486;&#12483;&#12503;&#12434;&#20844;&#38283;&#12375;&#12414;&#12377;&#12290;</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/salesforce-mult-framework-react-jp">Salesforce Mult-Framework を使用した React による UI 開発</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>みなさん、こんにちは！ TDX 2026 では新機能「Salesforce Multi-Framework」が発表され、Salesforce の UI を React を使って開発することができるようになりました。</p>
<ul>
<li><a href="https://developer.salesforce.com/docs/platform/einstein-for-devs/guide/reactdev-overview.html">Agentforce Vibes Developer Guide: Build a React App with Salesforce Multi-Framework (Beta)</a></li>
</ul>
<p>注意: 2026年4月時点ではまだ Beta 版です。</p>
<p>この記事では、Developer Edition で作成したスクラッチ組織を使い、内部ユーザーが利用する想定のシンプルなアプリを作成する手順を紹介します。スクラッチ組織の作成方法については、かこのブログ記事「<a href="https://developer.salesforce.com/jpblogs/2025/12/jp-scratch-org-with-developer-edition">Developer Edition + スクラッチ組織で、複数の開発・検証組織を手にいれる</a>」をご参照ください。ログインして表示言語を日本語化した状態から進めていきます。</p>
<h2>事前準備</h2>
<p>まずは VS Code で新規に「Standard」で作成したプロジェクトを用意します。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206184" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012449/salesforce-multi-framework-react-jp-image1.png?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<p>React External App や React Internal App もあるのですが、結構作り込まれたテンプレートが展開されます。構造を理解することがやや大変なので、今回はシンプルなテンプレートからの作成を紹介します。</p>
<p>このあと、スクラッチ組織を作成、もしくは既存のスクラッチ組織に接続します。組織にログインして機能有効化を行ってください。</p>
<ul>
<li>設定 &gt; アプリケーション &gt; Salesforce Multi-Framework を使用した React 開発 (ベータ)</li>
<li>「Enable Beta」ボタンを押す</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206183" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012447/salesforce-multi-framework-react-jp-image2.png?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<p>この機能はオフにできませんので、必ず Developer Edition や Sandbox などで試すようにしてください。</p>
<p>このあとはローカルの VS Code での操作を進めます。Standard で作成したプロジェクトで、スクラッチ組織に接続した状態にしておきます。</p>
<h2>ステップ1: テンプレートを展開</h2>
<p>まずターミナルを開き、次のコマンドを実行します。</p>
<pre>sf template generate ui-bundle -n myreactapp -d "./force-app/main/default/uiBundles" -t reactbasic</pre>
<p>force-app/main/default/myreactapp ディレクトリに必要なファイルが展開されます。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206182" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012445/salesforce-multi-framework-react-jp-image3.png?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<p>このディレクトリに移動して、install と run dev を実行します。</p>
<pre># ディレクトリに移動
cd force-app/main/default/uiBundles/myreactapp

# 必要なライブラリをインストール
npm install

# ローカルで実行
npm run dev</pre>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206181" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012443/salesforce-multi-framework-react-jp-image4.png?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<p>ブラウザを開いて、表示された URL にアクセスしてみます。次のように表示されたら成功です。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206180" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012441/salesforce-multi-framework-react-jp-image5.png?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<p>ターミナルで Ctrl + C でローカルのサーバーを止めておきます。</p>
<h2>ステップ2: ビルドとデプロイ</h2>
<p>2026年4月25日時点ですが、graphqlClient.ts でエラーを検出しています。当該ファイルの13行目を次のように修正します。</p>
<pre>修正前: const response = await data.graphql?.&lt;TData, TVariables&gt;(query, variables);
修正後: const response = await data.graphql?.&lt;TData, TVariables&gt;({query, variables});</pre>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206179" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012437/salesforce-multi-framework-react-jp-image6.png?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<p>それではビルドを行います。同じフォルダで次のコマンドを実行します。</p>
<pre>npm run build</pre>
<p>エラーが出なければ成功です。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206178" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012434/salesforce-multi-framework-react-jp-image7.png?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<p>それでは組織にデプロイしてみましょう。次のコマンドを実行します。(スクラッチ組織の場合のコマンドです)</p>
<pre>sf project deploy start</pre>
<p>Status が Succeeded で完了すれば成功です。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206177" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012430/salesforce-multi-framework-react-jp-image8.png?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<h2>ステップ3: 動作確認</h2>
<p>それでは組織にデプロイされた React アプリを見てみましょう。</p>
<ul>
<li>アプリケーションランチャー &gt; Myreactapp</li>
</ul>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206176" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012427/salesforce-multi-framework-react-jp-image9.png?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<p>先ほどのローカルテストと同じように表示されれば成功です。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206175" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012423/salesforce-multi-framework-react-jp-image10.png?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<h2>ステップ4: 取引先のデータを表示できるように修正</h2>
<p>pages ディレクトリの下に「Accounts.tsx」ファイルを作成します。(Agentforce Vibes に作ってもらいましたので、切り詰めればもっとシンプルにできるかもしれません。)</p>
<pre>import { useEffect, useState } from 'react';
import { executeGraphQL } from '@/api/graphqlClient';
import {
  Table,
  TableBody,
  TableCell,
  TableHead,
  TableHeader,
  TableRow,
} from '@/components/ui/table';
import { Skeleton } from '@/components/ui/skeleton';
import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert';

interface AccountNode {
  Id: string;
  Name: { value: string };
  Website: { value: string | null };
}

interface AccountsData {
  uiapi: {
    query: {
      Account: {
        edges: Array&lt;{
          node: AccountNode;
        }&gt;;
      };
    };
  };
}

const ACCOUNTS_QUERY = `query GetAccounts {
  uiapi {
    query {
      Account {
        edges {
          node {
            Id
            Name {
              value
            }
            Website {
              value
            }
          }
        }
      }
    }
  }
}`;

export default function Accounts() {
const [accounts, setAccounts] = useState&lt;AccountNode[]&gt;([]);
const [loading, setLoading] = useState(true);
const [error, setError] = useState&lt;string | null&gt;(null);

  useEffect(() =&gt; {
const fetchAccounts = async () =&gt; {
try {
        setLoading(true);
        setError(null);
const data = await executeGraphQL&lt;AccountsData, undefined&gt;(ACCOUNTS_QUERY);
const accountNodes = data.uiapi.query.Account.edges.map(edge =&gt; edge.node);
        setAccounts(accountNodes);
      } catch (err) {
        setError(err instanceof Error ? err.message : 'Failed to fetch accounts');
        console.error('Error fetching accounts:', err);
      } finally {
        setLoading(false);
      }
    };
    fetchAccounts();
  }, []);

if (loading) {
return (
      &lt;div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12"&gt;
        &lt;h1 className="text-3xl font-bold text-gray-900 mb-6"&gt;取引先一覧&lt;/h1&gt;
        &lt;div className="space-y-2"&gt;
          &lt;Skeleton className="h-12 w-full" /&gt;
          &lt;Skeleton className="h-12 w-full" /&gt;
          &lt;Skeleton className="h-12 w-full" /&gt;
          &lt;Skeleton className="h-12 w-full" /&gt;
          &lt;Skeleton className="h-12 w-full" /&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    );
  }

if (error) {
return (
      &lt;div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12"&gt;
        &lt;h1 className="text-3xl font-bold text-gray-900 mb-6"&gt;取引先一覧&lt;/h1&gt;
        &lt;Alert variant="destructive"&gt;
          &lt;AlertTitle&gt;エラー&lt;/AlertTitle&gt;
          &lt;AlertDescription&gt;{error}&lt;/AlertDescription&gt;
        &lt;/Alert&gt;
      &lt;/div&gt;
    );
  }

return (
    &lt;div className="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-12"&gt;
      &lt;div className="mb-6"&gt;
        &lt;h1 className="text-3xl font-bold text-gray-900"&gt;取引先一覧&lt;/h1&gt;
                  全{accounts.length}件の取引先が登録されています
      &lt;/div&gt;
      {accounts.length === 0 ? (
        &lt;Alert&gt;
          &lt;AlertTitle&gt;取引先がありません&lt;/AlertTitle&gt;
          &lt;AlertDescription&gt;
            現在、登録されている取引先はありません。
          &lt;/AlertDescription&gt;
        &lt;/Alert&gt;
      ) : (
        &lt;div className="border rounded-lg overflow-hidden"&gt;
          &lt;Table&gt;
            &lt;TableHeader&gt;
              &lt;TableRow&gt;
                &lt;TableHead className="font-semibold"&gt;ID&lt;/TableHead&gt;
                &lt;TableHead className="font-semibold"&gt;取引先名&lt;/TableHead&gt;
                &lt;TableHead className="font-semibold"&gt;ウェブサイト&lt;/TableHead&gt;
              &lt;/TableRow&gt;
            &lt;/TableHeader&gt;
            &lt;TableBody&gt;
              {accounts.map(account =&gt; (
                &lt;TableRow key={account.Id}&gt;
                  &lt;TableCell className="font-mono text-sm"&gt;
                    {account.Id}
                  &lt;/TableCell&gt;
                  &lt;TableCell className="font-medium"&gt;
                    {account.Name.value}
                  &lt;/TableCell&gt;
                  &lt;TableCell&gt;
                    {account.Website.value ? (
                      &lt;a
                         href={account.Website.value}
                         target="_blank" rel="noopener noreferrer"
className="text-blue-600 hover:underline"&gt;
                        {account.Website.value}
                      &lt;/a&gt;
                    ) : ('—')}
                  &lt;/TableCell&gt;
                &lt;/TableRow&gt;
              ))}
            &lt;/TableBody&gt;
          &lt;/Table&gt;
        &lt;/div&gt;
      )}
    &lt;/div&gt;
  );
}</pre>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206174" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012420/salesforce-multi-framework-react-jp-image11.png?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<p>routes.tsx ファイルを次の内容に置き換えます。</p>
<pre>import type { RouteObject } from 'react-router';
import AppLayout from '@/appLayout';
import Home from './pages/Home';
import Accounts from './pages/Accounts';
import NotFound from './pages/NotFound';

export const routes: RouteObject[] = [
  {
    path: '/',
    element: &lt;AppLayout /&gt;,
    children: [
      {
        index: true,
        element: &lt;Home /&gt;,
        handle: { showInNavigation: true, label: 'Home' },
      },
      {
        path: 'accounts',
        element: &lt;Accounts /&gt;,
        handle: { showInNavigation: true, label: '取引先' },
      },
      {
        path: '*',
        element: &lt;NotFound /&gt;,
      },
    ],
  },
];</pre>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206173" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012417/salesforce-multi-framework-react-jp-image12.png?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<h2>ステップ5: 再ビルドとデプロイ</h2>
<p>ファイルの修正が完了したら、再度ビルドを行い組織にデプロイします。</p>
<pre># ビルドの実行
npm run build

# デプロイの実行
sf project deploy start

# もしソースファイルエラーやコンフリクトが発生した場合(コマンドを実行するディレクトリによって --source-dir の引数は要調整)
sf project deploy start --source-dir . --ignore-conflicts</pre>
<p>Status が Succeeded で完了すれば成功です。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206172" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012414/salesforce-multi-framework-react-jp-image13.png?w=1280" class="postimages" width="1280" height="803" alt="" />
			  </span>
			</p>
<h2>ステップ6: 動作確認</h2>
<p>スクラッチ組織の場合、取引先にはデータが何もないのでいくつか作成しておきます。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206171" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012410/salesforce-multi-framework-react-jp-image14.png?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<p>再度 Myreactapp を表示します。画面右上のメニューアイコンを押すと「取引先」選択肢が出現し、選択すると取引先の一覧が表示されれば成功です。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206170" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012407/salesforce-multi-framework-react-jp-image15.png?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206169" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012404/salesforce-multi-framework-react-jp-image16.png?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<h2>おわりに</h2>
<p>今までは Lightnign Experience &amp; Lightning Web Components と Visualforce に頼っていた Web ブラウザへの UI 提供ですが、React にも対応したことで、そのデータの表現力が格段に向上しました。いわゆる社内向けの UI はもちろん、Experience Cloud での社外向けサイトでの利用も可能です。正式リリースまで今しばらくお待ちください。</p>
<p>今回はすべて手動での作業手順でご紹介しましたが、もちろんバイブコーディングで開発を進めていくこともできます。Agentforce Vibes はもちろん、その他のコーディング支援ツールでも利用できるようにスキルを公開していたりしますので、ぜひご活用ください。</p>
<ul>
<li><a href="https://github.com/forcedotcom/afv-library">Github: Agentforce Vibes Library</a></li>
</ul>
<p>SFDX プロジェクトの新規作成を行う際に、React Internal App を選ぶとより作り込まれたテンプレートが展開されます。Agentforce で作成したエージェントとのチャットも行える UI も組み込まれています。こちらもぜひ試してみてください。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206168" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260425012400/salesforce-multi-framework-react-jp-image17.png?w=1280" class="postimages" width="1280" height="738" alt="" />
			  </span>
			</p>
<h3>参考資料</h3>
<ul>
<li><a href="https://developer.salesforce.com/docs/platform/einstein-for-devs/guide/reactdev-overview.html">Agentforce Vibes Developer Guide: Build a React App with Salesforce Multi-Framework (Beta)</a></li>
<li><a href="https://github.com/forcedotcom/afv-library">Github: Agentforce Vibes Library</a></li>
<li><a href="https://trailhead.salesforce.com/ja/content/learn/modules/agentforce-vibes-react-open-beta-quick-look">Agentforce Vibes React (Open Beta): Quick Look</a></li>
<li><a href="https://github.com/trailheadapps/multiframework-recipes">Github: Multiframework Recipes</a></li>
</ul>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/salesforce-mult-framework-react-jp">Salesforce Mult-Framework を使用した React による UI 開発</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/04/salesforce-mult-framework-react-jp/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">206163</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260425011219/salesforce-multi-framework-react-jp-featured.png?w=1200" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260425011219/salesforce-multi-framework-react-jp-featured.png?w=1200" medium="image" />
	</item>
		<item>
		<title>Beyond Static Analysis: How Scale Center’s New Database Insights Thinks Like a DBA</title>
		<link>https://developer.salesforce.com/blogs/2026/04/beyond-static-analysis-how-scale-centers-new-database-insights-thinks-like-a-dba</link>
		<comments>https://developer.salesforce.com/blogs/2026/04/beyond-static-analysis-how-scale-centers-new-database-insights-thinks-like-a-dba#respond</comments>
		<pubDate>Thu, 23 Apr 2026 14:00:32 +0000</pubDate>
		<dc:creator><![CDATA[Anand Vardhan]]></dc:creator>
				<category><![CDATA[Apex]]></category>
		<category><![CDATA[App Development]]></category>
		<category><![CDATA[Architecture]]></category>
		<category><![CDATA[Developer Tooling]]></category>
		<category><![CDATA[Salesforce Releases]]></category>
		<category><![CDATA[Bind Variables]]></category>
		<category><![CDATA[Database Performance]]></category>
		<category><![CDATA[Execution Plans]]></category>
		<category><![CDATA[Large Data Volumes]]></category>
		<category><![CDATA[Performance Tuning]]></category>
		<category><![CDATA[Salesforce Architecture]]></category>
		<category><![CDATA[Scale Center]]></category>
		<category><![CDATA[SOQL Optimization]]></category>
		<category><![CDATA[Static Analysis]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=205998</guid>
		<description><![CDATA[<p>Optimize your most complex queries by bridging the &lsquo;runtime reality&rsquo; gap with Database Insights. Learn to use actual bind values and execution plans to fix performance bottlenecks.</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/beyond-static-analysis-how-scale-centers-new-database-insights-thinks-like-a-dba">Beyond Static Analysis: How Scale Center’s New Database Insights Thinks Like a DBA</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><span style="font-weight: 400">In the world of Salesforce engineering, a SOQL query is the heartbeat of your application. But as any architect of an org with significant processing or large data volumes knows,</span> <span style="font-weight: 400">not all SOQL queries are created equal</span><span style="font-weight: 400">.</span><span style="font-weight: 400"> You might have a perfectly formatted query that passes every linting test, yet still brings a production pod to its knees during peak hours.</span></p>
<p><span style="font-weight: 400">Historically, tools for addressing this challenge have relied on</span> <b>top-down analysis </b><span style="font-weight: 400">— scanning Apex metadata to find suspicious patterns. Today, we are unveiling a</span><b> bottom-up revolution</b><span style="font-weight: 400">: </span><a href="https://help.salesforce.com/s/articleView?id=xcloud.database_insights_overview.htm&amp;type=5"><b>Database Insights in Scale Center</b></a><span style="font-weight: 400">.</span></p>
<h2><span style="font-weight: 400">The &#8220;runtime reality&#8221; gap</span></h2>
<p><span style="font-weight: 400">Traditional performance analysis tools suffer from a </span><i><span style="font-weight: 400">runtime reality gap</span></i><span style="font-weight: 400">. They look at your code repository and say, </span><i><span style="font-weight: 400">&#8220;This query uses an indexed field; it&#8217;s fine.&#8221;</span></i><span style="font-weight: 400"> But enterprise-grade applications live and breathe </span><a href="https://developer.salesforce.com/docs/atlas.en-us.soql_sosl.meta/soql_sosl/sforce_api_calls_soql_relationships.htm"><b>dynamic SOQL</b></a><span style="font-weight: 400">, where the query isn&#8217;t fully built until the moment a user clicks a button.</span></p>
<p><span style="font-weight: 400">Static scanners are blind to the </span><a href="https://trailhead.salesforce.com/content/learn/modules/soql-for-admins/use-bind-variables-and-aggregate-functions"><b>bind variable values</b></a><span style="font-weight: 400"> — the actual data passed into your filters at runtime. Without knowing these values, it is impossible to distinguish between a </span><b>s</b><b><i>elective success</i></b><span style="font-weight: 400"> and a </span><b>t</b><b><i>able-scan terror</i></b><span style="font-weight: 400">:</span></p>
<ul>
<li style="font-weight: 400"><b>Selective success:</b><span style="font-weight: 400"> Your query uses an index to jump straight to the 10 records you need out of millions. It’s fast, efficient, and keeps your org snappy.</span></li>
<li style="font-weight: 400"><b>Table-scan terror:</b><span style="font-weight: 400"> This occurs when the database engine cannot use an index and is forced to look at every single record in a table to find a match.</span></li>
</ul>
<p><b>Architect’s tip:</b><span style="font-weight: 400"> Think of a table scan like trying to find a specific quote in a 500-page book by reading every single word from page one, rather than using the index at the back to jump to the right page. When your table grows to millions of rows, these scans cause CPU timeouts and slow down the entire platform for your users.</span></p>
<p><span style="font-weight: 400">Navigate to Database Insights from Setup &gt;&gt; Scale Center &gt;&gt; Database Insights.</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206000" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260409161611/A-screenshot-showing-how-to-navigate-to-Database-Insights-in-Scale-Center-e1775772984411.png?w=1000" class="postimages" width="1000" height="480" alt="A screenshot showing how to navigate to Database Insights in Scale Center" />
			  </span>
			</p>
<h2><span style="font-weight: 400">Engineering the bottom-up approach</span></h2>
<p><span style="font-weight: 400">Database Insights turns the traditional model on its head. You don&#8217;t guess which queries are slow; you start where the performance impact is actually felt</span><span style="font-weight: 400">: the database. This is a three-step process.</span></p>
<h3><span style="font-weight: 400">1. Identifying the heavy lifters</span></h3>
<p><span style="font-weight: 400">Instead of analyzing every line of code, with the bottom-up approach you identify the specific queries driving resource consumption during your most critical business windows. Think of it like a database administrator using standard system views (similar to open-source equivalents like</span> <a href="https://www.postgresql.org/docs/current/pgstatstatements.html"><span style="font-weight: 400">pg_stat_statements</span></a><span style="font-weight: 400">).</span><span style="font-weight: 400"> You isolate the queries that dominated CPU usage during your org’s peak performance hour, helping you identify the specific code causing the most friction.</span></p>
<h3><span style="font-weight: 400">2. Intelligence-driven reconstruction</span></h3>
<p><span style="font-weight: 400">A raw database execution looks very different from the Apex you wrote. Our platform uses a sophisticated</span> <b>mapping engine</b> <span style="font-weight: 400">to bridge the gap between runtime database activity and your source code:</span></p>
<ul>
<li style="font-weight: 400"><b>Context discovery:</b> <span style="font-weight: 400">The system automatically filters out system overhead to focus exclusively on your custom logic.</span></li>
<li style="font-weight: 400"><b>Traceability:</b> <span style="font-weight: 400">The system correlates database activity back to its origin — whether that’s a specific Apex class, Flow, or report.</span></li>
<li style="font-weight: 400"><b>Bind-value awareness:</b><span style="font-weight: 400"> It captures the </span><b>actual bind variable values</b> <span style="font-weight: 400">passed to the database. Knowing a query failed because of a </span><span style="font-weight: 400">NULL</span><span style="font-weight: 400"> filter can be the difference between a guess and a guaranteed fix.</span></li>
</ul>
<h3><span style="font-weight: 400">3. Execution-plan analysis </span></h3>
<p><span style="font-weight: 400">Once the query has been reconstructed by the mapping engine, it is analyzed by the</span> <b>Database Insights optimization engine</b><b>.</b><span style="font-weight: 400"> By evaluating the</span> <b>actual database execution plan </b><span style="font-weight: 400">— </span><span style="font-weight: 400">the same way an expert uses an</span> <a href="https://www.postgresql.org/docs/current/using-explain.html"><span style="font-weight: 400">EXPLAIN</span></a> <span style="font-weight: 400">command </span><span style="font-weight: 400">— </span><span style="font-weight: 400">we generate surgical recommendations based on that execution plan for the query.</span></p>
<h2><span style="font-weight: 400">Case study: The dynamic predicate problem</span></h2>
<p><span style="font-weight: 400">Consider a common pattern: a utility class that fetches records based on dynamic filters. </span></p>
<pre language="apex">public static List simpleBindingSoqlQuery(Map&lt;String, Object&gt; bindParams) {
    String queryString =
        'SELECT Id, Name ' +
        'FROM Account ' +
        'WHERE name = :name';
    return Database.queryWithBinds(
        queryString,
        bindParams,
        AccessLevel.USER_MODE
    );
}

String accountName = 'Acme Inc.';
Map&lt;String, Object&gt; nameBind = new Map&lt;String, Object&gt;{'name' =&gt; accountName};
List accounts = simpleBindingSoqlQuery(nameBind);
System.debug(accounts);
</pre>
<p><span style="font-weight: 400">A static scanner inspects the Apex code and reports that the query passes all checks — it uses bind variables, is sanitized, and shows no obvious flaws. In reality, during peak traffic, Scale Center identifies this method as a top CPU consumer because the runtime data exposes issues that static analysis cannot see.</span></p>
<h3><span style="font-weight: 400">Example: The non-selective null</span></h3>
<p>A UI component accidentally passes a <span>null</span><span> value into the filter. The reconstructed SOQL becomes</span><b><span>:<br />
</span></b><br />
<span> </span><code><span>SELECT Id, Name FROM Account WHERE name = null<br />
</span></code><br />
Since <code>NULL</code> values are rarely indexed effectively in large datasets, the engine scans millions of rows in a full table scan. Scale Center flags this as a high-CPU query, notes that the filter &#8216;Name&#8217; is receiving null values, and provides the recommendation: add a null-check in the Apex controller before execution to prevent <code>NULL</code> values from reaching the query.</p>
<h3><span style="font-weight: 400">Example: The polymorphic date bloat</span></h3>
<p><span style="font-weight: 400">A report generation tool builds a query with a wide date range. The reconstructed SOQL is:</span></p>
<p><code>SELECT Id FROM Case WHERE CreatedDate = LAST_N_DAYS:365 AND Status = 'Closed'</code></p>
<p><span style="font-weight: 400">In this case, the database performs an index skip scan. The combination of a broad date range and a low-cardinality status field forces the database engine to examine far more rows than necessary. Scale Center identifies this high CPU usage and recommends narrowing the date range to 30 days or including the Status field in a composite index to improve selectivity.</span></p>
<h2><span style="font-weight: 400">Comparing static analysis and Database Insights</span></h2>
<p><span style="font-weight: 400">The following table shows how a traditional static Apex parser differs from Database Insights across visibility, complexity, performance, and context.</span></p>
<table>
<tbody>
<tr>
<td><b>Feature</b></td>
<td><b>Static Apex Parser</b></td>
<td><b>Scale Center Database Insights</b></td>
</tr>
<tr>
<td><b>Visibility</b></td>
<td><span style="font-weight: 400">String templates only</span></td>
<td><span style="font-weight: 400">Final string + actual bind values</span></td>
</tr>
<tr>
<td><b>Complexity</b></td>
<td><span style="font-weight: 400">Struggles with concatenation</span></td>
<td><span style="font-weight: 400">Captures exact SQL sent to engine</span></td>
</tr>
<tr>
<td><b>Performance</b></td>
<td><span style="font-weight: 400">Best-practice guesses</span></td>
<td><span style="font-weight: 400">Measures actual CPU milliseconds</span></td>
</tr>
<tr>
<td><b>Context</b></td>
<td><span style="font-weight: 400">Blind to table volume</span></td>
<td><span style="font-weight: 400">Analyzes the execution plan to understand true query cost and selectivity</span></td>
</tr>
</tbody>
</table>
<h2><span style="font-weight: 400">How to use Database Insights results</span></h2>
<p><span style="font-weight: 400">When you open Database Insights, don’t focus only on the SOQL string. Look at both the &#8220;SOQL&#8221; and the “Recommendation” columns</span><span style="font-weight: 400"> to identify the actual queries and suggestions for how to improve them.</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206002" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260409161652/A-tabular-view-of-Database-Insights-results-e1775773028368.png?w=1000" class="postimages" width="1000" height="460" alt="A tabular view of Database Insights results" />
			  </span>
			</p>
<h2><span style="font-weight: 400">A game changer for architects and developers</span></h2>
<p><span style="font-weight: 400">If you are managing a large-scale implementation, Database Insights in Scale Center provides unique capabilities that are not available through static analysis alone.</span></p>
<p><span style="font-weight: 400">First, it enables </span><b>impact-based prioritization.</b> <span style="font-weight: 400">You aren&#8217;t investigating and fixing 100 &#8220;</span><i><span style="font-weight: 400">maybe</span></i><span style="font-weight: 400">&#8221; slow queries</span><span style="font-weight: 400">.</span><span style="font-weight: 400"> You are fixing the top 15 queries that </span><i><span style="font-weight: 400">actually</span></i><span style="font-weight: 400"> consumed the most CPU during your busiest hour last week. Second, it supports </span><b>infrastructure stability</b><b>.</b><span style="font-weight: 400"> By optimizing these expensive, suboptimal SQL queries, you aren&#8217;t just helping your users; you are also protecting the pod&#8217;s availability and reducing the risk of concurrent request limit exceptions.</span></p>
<p><span style="font-weight: 400">Database Insights is not just another dashboard. It is a bridge between the database optimizer and the Apex developer. </span><span style="font-weight: 400">By analyzing how queries are executed and providing targeted recommendations</span><span style="font-weight: 400"> and providing a library of fixes, we are moving from </span><span style="font-weight: 400">passive monitoring to actionable, data-driven recommendations.</span></p>
<h2><span style="font-weight: 500">About the author</span></h2>
<p><b>Anand Vardhan</b> <span style="font-weight: 400">is a Product Owner for the Scalability Products Team, helping customers develop scalable solutions on the Customer 360 platform. Anand designs features for Scale Center and Scale Test products. His background includes performance and scale engineering, server-side optimization, Lightning, application design, caching, and managing large data volumes. Follow Anand on</span> <a href="https://www.linkedin.com/in/anandvardhan08/"><span style="font-weight: 400">LinkedIn</span></a><span style="font-weight: 400">.</span></p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/beyond-static-analysis-how-scale-centers-new-database-insights-thinks-like-a-dba">Beyond Static Analysis: How Scale Center’s New Database Insights Thinks Like a DBA</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/04/beyond-static-analysis-how-scale-centers-new-database-insights-thinks-like-a-dba/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">205998</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260409163827/Generic-B-1-e1775774323533.png?w=1000" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260409163827/Generic-B-1-e1775774323533.png?w=1000" medium="image" />
	</item>
		<item>
		<title>話しかけるだけで商談情報を自動更新 Salesforce Flow × Structured Output（構造化出力） の実装例</title>
		<link>https://developer.salesforce.com/blogs/2026/04/salesforce-flow-structured-output-jp</link>
		<comments>https://developer.salesforce.com/blogs/2026/04/salesforce-flow-structured-output-jp#respond</comments>
		<pubDate>Thu, 23 Apr 2026 03:29:20 +0000</pubDate>
		<dc:creator><![CDATA[Hiroyuki Inaba]]></dc:creator>
				<category><![CDATA[Agentforce]]></category>
		<category><![CDATA[Flow]]></category>
		<category><![CDATA[Prompt Builder]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=206141</guid>
		<description><![CDATA[<p>Salesforce Flow&#12392;Prompt Template&#12398;&#27083;&#36896;&#21270;&#20986;&#21147;&#27231;&#33021;&#12434;&#27963;&#29992;&#12375;&#12289;&#38899;&#22768;&#20837;&#21147;&#12391;CRM&#24773;&#22577;&#12434;&#33258;&#21205;&#26356;&#26032;&#12377;&#12427;&#23455;&#35013;&#20363;&#12434;&#35299;&#35500;&#12290;&#21830;&#35527;&#24460;&#12398;&#12513;&#12514;&#12434;&#35441;&#12377;&#12384;&#12369;&#12391;&#12289;AI&#12364;&#20104;&#31639;&#12539;&#35506;&#38988;&#12539;&#12473;&#12486;&#12540;&#12472;&#12394;&#12393;&#12434;&#33258;&#21205;&#12391;&#38917;&#30446;&#21029;&#12395;&#25391;&#12426;&#20998;&#12369;&#12290;&#12494;&#12540;&#12467;&#12540;&#12489;&#12391;&#23455;&#29694;&#12377;&#12427;&#21942;&#26989;DX&#12398;&#23455;&#36341;&#12460;&#12452;&#12489;&#12290;</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/salesforce-flow-structured-output-jp">話しかけるだけで商談情報を自動更新 Salesforce Flow × Structured Output（構造化出力） の実装例</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<h2>はじめに</h2>
<p>「商談が終わったら、すぐに活動内容を入力してください」</p>
<p>営業現場でよく聞くこの一言が、いかに現場の負担になっているか。</p>
<p>移動中、次のアポの準備中、それでも入力しなければならない。結果として記録が後回しになり、CRMのデータ品質が下がり、マネージャーは実態が見えなくなる···そんな悪循環は、多くの営業組織が抱える慢性的な課題です。</p>
<p>この記事では、Salesforce の 画面フロー機能とPrompt TemplateのStructured Output(構造化出力)機能を組み合わせて、この課題をどのように解決できるかを、実際の実装例をもとに解説します。</p>
<h2>動画:利用イメージ</h2>
<p><a href="https://salesforce.vidyard.com/watch/M3f8dwz5XPL1ybdCS71zAP">音声入力ーAIによる項目振り分け</a><br />
<!-- Put this wherever you would like your player to appear --><br />

			  <span class="postimagessection_specify vidyard-player-embed" >
			    <img decoding="async" src="https://play.vidyard.com/M3f8dwz5XPL1ybdCS71zAP.jpg" class="postimages" width="" height="" alt="" />
			  </span>
			</p>
<p>この機能を使った利用例がこちらです。モバイルに音声で話すだけで、AIが重要情報を自動抽出し情報を更新します。本例ではテストオブジェクトというカスタムオブジェクトを対象としていますが、どのオブジェクトに対しても転用可能です。</p>
<h2>何をする機能なのか</h2>
<p>やっていることはシンプルです。</p>
<p>ここでは、レコードページから画面を起動する例をご紹介します。</p>
<ol>
<li>営業担当者がレコードページのボタンを押す</li>
<li>「ここに音声入力してください」というテキストエリアが表示される</li>
<li>担当者は商談の内容を自由に話すか、テキストで入力する</li>
<li>「次へ」を押すとAIが内容を解析し、案件の各項目を自動で更新する</li>
</ol>
<p>従来であれば「課題は何か」「予算はどれくらいか」「ステージはどこまで進んだか」を個別に入力する必要がありました。このフローでは、商談後のメモを自由形式で入力するだけで、AIがそれらを自動的に仕分けして書き込みます。</p>
<h2>プロンプトについて</h2>
<p>プロンプト全文と応答構造</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206149" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260422203220/salesforce-flow-structured-output-image05.png?w=997" class="postimages" width="997" height="708" alt="" />
			  </span>
			</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206147" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260422203213/salesforce-flow-structured-output-image03.png?w=1091" class="postimages" width="1091" height="1000" alt="" />
			  </span>
			</p>
<p>&nbsp;</p>
<p>本例ではテストオブジェクトを対象としていますが、このプロンプトは商談オブジェクトに更新する想定のプロンプトです。</p>
<h3><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/25aa.png" alt="▪" class="wp-smiley" style="height: 1em; max-height: 1em;" /> プロンプト全文</h3>
<pre>【Role】
活動報告の音声文字起こしを最小修正で正規化(内部のみ)し、以下を出力せよ(コードフェンス禁止)。

【抽出用マーカー規約(厳守)】
- Key: opp.stage / opp.pain / opp.start / opp.event / opp.budget / opp.req

【Inputs】
- raw_transcript: {!$Input:input}

【商談更新用(値のみ・ラベル無し・推定抽出強化)】
- すべての opp.* は、タグ内にプレーンテキストの値のみを簡潔に1行250文字以内で出力。
- 禁止:Markdown記法(太字・リストなど)、ラベル("金額:"など)、カッコ装飾、信頼度スコア、引用符、改行。
- 抽出基準(重要):
  - 「確定」していなくても、会話の中で登場した見込み値、概算、候補、提案内容があれば積極的に抽出すること。
  - わずかでも関連する言及があれば値を入れ、「本MTGでは更新候補無し」としないこと。
- 整形ルール:改行は半角スペースへ変換。連続空白は1つへ短縮。
- 完全除外条件:会話全体を通して、そのトピックに関する言及が一切なかった場合のみ、「本MTGでは更新候補無し」を出力。

[各項目の抽出指針]
- opp.stage: 商談の現在の到達点と顧客の温度感を要約した説明文。単なるフェーズ名(例:「提案」)ではなく、「担当者は前向きだが部長決裁待ち」「機能要件は合意したが予算で難航中」のように具体的な状況を記述すること。
- opp.pain: 顧客が漏らした悩み、不満、現状の課題(推測含む)。簡潔に1文で記載。
- opp.start: 開始時期、導入時期、納期の目安(「来春」「4月頃」等のテキストも可)。簡潔に1文で記載。
- opp.event: 今後のマイルストーン、コンペリングイベント(幹部プレゼン、定例会、PoC開始など)。簡潔に1文で記載。
- opp.budget: 金額、予算感、価格帯、コストに関する言及(「100万くらい」「予算確保済み」など幅のある表現もそのまま抽出)。簡潔に1文で記載。
- opp.req: 機能要件、要望、導入条件、制約事項。簡潔に1文で記載。
</pre>
<h3><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/25aa.png" alt="▪" class="wp-smiley" style="height: 1em; max-height: 1em;" /> プロンプトの設計ポイント</h3>
<p><strong>【1. 使用モデル:Gemini 2.5 Flash】</strong></p>
<p>今回はGemini 2.5 Flashを使用しています。速度とコストのバランスが良く、日本語の音声文字起こし処理に適したモデルです。</p>
<p><strong>【2. 出力形式:JSON構造化出力+セクションマーカー方式】</strong></p>
<p>プロンプト自体はシンプルなテキスト指示ですが、SalesforceのStructured Output(構造化出力)機能によって、AIの回答はJSON形式で返されます。フロー側では structuredResponse.budget のようにドット記法で各項目に直接アクセスできるため、追加のパース処理は一切不要です。</p>
<p><strong>【3. 「確定情報でなくても積極的に抽出する」という指示】</strong></p>
<p>通常のデータ抽出では「確実な情報のみ抽出」という指示が多いですが、このプロンプトは逆のアプローチを取っています。商談では「100万くらい」「来春かな」という曖昧な言及も重要な営業情報であるため、「わずかでも言及があれば値を入れる」と明示しています。</p>
<p><strong>【4. 空欄上書きリスクを防ぐ「完全除外条件」】</strong></p>
<p>「一切言及がなかった場合のみ『本MTGでは更新候補無し』」と書くことで、フロー側の制御でこのキーワードが格納されている場合は更新しないように制御することができます。この制御を入れることで、既存のCRMデータが空欄で上書きされてしまうリスクを防ぐことができます。(今回のフローではこの制御分岐は入れていません)</p>
<p><strong>【5. ステージは「状態の文章」で記録する】</strong></p>
<p>opp.stage(案件ステージ)に対して、単に「提案中」「交渉中」ではなく「担当者は前向きだが部長決裁待ち」のような状況説明文を要求しています。マネージャーがリスト画面を一覧したときに、クリックせずに状況が把握できるCRMを実現するための設計です。</p>
<h3>出力形式:JSON応答構造について</h3>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206151" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260422203227/salesforce-flow-structured-output-image07.png?w=479" class="postimages" width="479" height="544" alt="" />
			  </span>
			</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206145" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260422203207/salesforce-flow-structured-output-image01.png?w=479" class="postimages" width="479" height="544" alt="" />
			  </span>
			</p>
<p>ここで、応答形式をJSON、応答構造から「新しいLightning種類」を選択し出力構造を作成します。</p>
<p>名称を指定します</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206146" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260422203210/salesforce-flow-structured-output-image02.png?w=1279" class="postimages" width="1279" height="438" alt="" />
			  </span>
			</p>
<p>次に、出力先項目を指定します。ここの項目変数名はプロンプト側と整合性が取れる形にする必要があります。(ただし、厳密に完全一致させなくても大丈夫です)</p>
<p>また、この説明欄を入力することで、より精度高く抽出することが可能になります。プロンプト側でしっかりと定義している場合には記載していなくても問題ありません。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206148" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260422203216/salesforce-flow-structured-output-image04.png?w=1269" class="postimages" width="1269" height="909" alt="" />
			  </span>
			</p>
<h3>補足:JSON応答構造を利用する場合の注意事項</h3>
<p>カスタム Lightning 種類で項目のデータ型が Date, DateTime, Time だった場合は、フローから値にアクセスしても取得できない問題があります。(2026/3/6 確認時点)</p>
<p>現状回避策として Lightning 種類では String にしておき、フローの数式項目を使って変換します。</p>
<h2>フローの構造</h2>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206152" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260422203230/salesforce-flow-structured-output-image08.png?w=1168" class="postimages" width="1168" height="825" alt="" />
			  </span>
			</p>
<p>技術的には、以下の4ステップで構成されています。</p>
<p><strong>STEP 1:レコードの取得</strong></p>
<p>対象レコードのIDをもとに、現在の商談情報を取得します。</p>
<p><strong>STEP 2:音声入力画面</strong></p>
<p>ユーザーに向けて「ここに音声入力してください」というテキストエリアを表示します。フロー種類は Screen Flow(画面フロー)であるため、Lightning ページ上でそのままウィジェットとして起動できます。</p>
<p><strong>STEP 3:AIによる解析</strong></p>
<p>ここが核心部分です。Flow の generatePromptResponse アクションを通じて、Prompt Template(プロンプトテンプレート)を呼び出します。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206154" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260422203236/salesforce-flow-structured-output-image10.png?w=976" class="postimages" width="976" height="776" alt="" />
			  </span>
			</p>
<p>入力として先ほどのテキストエリアの内容を渡すと、AIが以下の6項目を JSON 形式で返します。</p>
<ul>
<li>budget 予算情報</li>
<li>event コンペリングイベント</li>
<li>pain 顧客課題</li>
<li>stage 案件ステージの進捗</li>
<li>req 要求仕様・要件</li>
<li>start 導入時期・タイミング</li>
</ul>
<p>これは Salesforce の Structured Output(構造化出力)機能を活用したものです。</p>
<p>AIに対して「この形式のJSONで回答せよ」と指定することで、後続の処理でそのまま各フィールドに書き込めるようになります。</p>
<p><strong>STEP 4:レコードの更新</strong></p>
<p>STEP 3 で得たJSONの各値を、対応するレコードの項目にそれぞれ書き込んで完了です。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206150" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260422203224/salesforce-flow-structured-output-image06.png?w=1101" class="postimages" width="1101" height="824" alt="" />
			  </span>
			</p>
<h3>補足:</h3>
<p>「本MTGでは更新候補無し」の場合には更新しない制御を入れる場合には、このように決定要素による条件分岐を入れることによって実現可能です。</p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206153" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260422203233/salesforce-flow-structured-output-image09.png?w=1589" class="postimages" width="1589" height="799" alt="" />
			  </span>
			</p>
<h2>なぜ Structured Output(構造化出力) が重要なのか</h2>
<p>従来のAI活用では、AIの回答はテキストとして返ってくるため、「その中から必要な情報を抜き出す」という後処理が必要でした。正規表現や文字列解析を駆使しても、AIの回答のゆらぎに対応しきれないケースがありました。</p>
<p>Structured Output を使うと、AIは最初から指定した構造のJSONで回答します。フローから見れば structuredResponse.budget のように、オブジェクトのプロパティとして値を参照できるため、追加の解析処理が不要になります。</p>
<p>この仕組みにより、「AIの出力をそのままSalesforceの項目に書き込む」という処理が、コードを一行も書かずにノーコードで実現できます。</p>
<h2>現場への展開イメージ</h2>
<p>このデモ実装ではテスト用カスタムオブジェクトを対象としていますが、実運用では Opportunity(商談)や Event(行動)オブジェクトへの応用が考えられます。</p>
<p>たとえば:</p>
<ul>
<li>商談終了後:担当者が車の中で商談メモを音声入力 → Opportunity の StageName、予算、顧客課題などが自動更新</li>
<li>訪問報告:活動内容をフリーテキストで記録 → 「競合情報」「顧客要望」「次のアクション」が自動でカテゴリ分けされて記録</li>
<li>マネージャーレビュー: AI が整理した項目をもとに状況をレポートで一目で確認、週次レビューの準備時間を削減</li>
</ul>
<h2>まとめ</h2>
<p>Salesforce Flow の generatePromptResponse アクションと Prompt Template の Structured Output を組み合わせることで、「自由なテキスト入力 → 構造化されたCRMデータ」という変換が、驚くほどシンプルな構成で実現できます。</p>
<ul>
<li>ノーコード:Apexを書かずにFlowとテンプレートだけで構築可能</li>
<li>構造化出力:AIの回答を最初からJSONで受け取るためパース処理不要</li>
<li>現場への展開:Lightningページにボタン一つで組み込めるScreen Flow形式</li>
</ul>
<p>「営業がCRMを入力しない問題」は、ツールの問題ではなく入力コストの問題です。入力コストをAIで限りなくゼロに近づけることが、データ品質と現場定着の鍵になります。</p>
<p>※ 本記事は Salesforce の実装例をもとに作成しています。ご紹介した機能はお客様の環境に応じて Agentforce 関連のライセンスや設定が必要な場合があります。</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/salesforce-flow-structured-output-jp">話しかけるだけで商談情報を自動更新 Salesforce Flow × Structured Output（構造化出力） の実装例</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/04/salesforce-flow-structured-output-jp/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">206141</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260422204428/salesforce-flow-structured-output-jp_featured.png?w=1200" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260422204428/salesforce-flow-structured-output-jp_featured.png?w=1200" medium="image" />
	</item>
		<item>
		<title>Simplify Your LWC Development with Complex Template Expressions</title>
		<link>https://developer.salesforce.com/blogs/2026/04/simplify-your-lwc-development-with-complex-template-expressions</link>
		<comments>https://developer.salesforce.com/blogs/2026/04/simplify-your-lwc-development-with-complex-template-expressions#respond</comments>
		<pubDate>Tue, 21 Apr 2026 15:00:10 +0000</pubDate>
		<dc:creator><![CDATA[Sarah Welker]]></dc:creator>
				<category><![CDATA[App Development]]></category>
		<category><![CDATA[Developer Tooling]]></category>
		<category><![CDATA[Lightning Web Components]]></category>
		<category><![CDATA[New Developments]]></category>
		<category><![CDATA[API Version 66.0]]></category>
		<category><![CDATA[Experimental Features]]></category>
		<category><![CDATA[Frontend Development]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[lwc]]></category>
		<category><![CDATA[productivity]]></category>
		<category><![CDATA[salesforce developers]]></category>
		<category><![CDATA[Spring '26]]></category>
		<category><![CDATA[UI Logic]]></category>

		<guid isPermaLink="false">https://developer.salesforce.com/blogs/?p=206095</guid>
		<description><![CDATA[<p>Reduce boilerplate and streamline your code by writing JavaScript logic directly in your HTML templates. Build faster with less context switching between files.</p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/simplify-your-lwc-development-with-complex-template-expressions">Simplify Your LWC Development with Complex Template Expressions</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p><span style="font-weight: 400">Are you tired of jumping back and forth between your HTML and JavaScript files just to handle a simple conditional or format a string? We have some exciting news! In the </span><a href="https://www.salesforce.com/en-us/wp-content/uploads/sites/4/documents/release-notes/spring26-release-in-a-box.pdf"><span style="font-weight: 400">Spring ’26 release</span></a><span style="font-weight: 400"> (API version 66.0), we are introducing </span><a href="https://developer.salesforce.com/docs/platform/lwc/guide/create-components-html-expressions-use.html"><b>complex template expressions</b></a><span style="font-weight: 400"> for Lightning Web Components (LWC). This new experimental feature allows you to write JavaScript logic directly inside your HTML curly braces. In this post, we’ll talk about how this feature works, show you some common use cases, and walk through the rules for keeping your templates clean and performant.</span></p>
<h2><b>Why use complex expressions?</b></h2>
<p><span style="font-weight: 400">Until now, LWC templates only supported simple property binding. If you wanted to combine a first and last name, you had to create a </span><i><span style="font-weight: 400">getter</span></i><span style="font-weight: 400"> in your JavaScript class. While this keeps logic separate, it often leads to </span><a href="https://developer.salesforce.com/docs/platform/lwc/guide/get-started-best-practices.html"><span style="font-weight: 400">&#8220;boilerplate&#8221; code</span></a><span style="font-weight: 400"> — extra lines of code that don&#8217;t do much but pass data around.</span></p>
<p><span style="font-weight: 400">With complex template expressions, you have the power to handle simple UI logic where it belongs: in the template. This makes your components easier to read and faster to build.</span></p>
<p>
			  <span class="postimagessection_specify alignnone size-medium wp-image-206099" >
			    <img loading="lazy" decoding="async" src="https://d259t2jj6zp7qm.cloudfront.net/images/20260417153422/image1_3a2771-e1776465277667.png?w=1000" class="postimages" width="1000" height="558" alt="A side-by-side comparison showing a standard LWC with multiple getters versus an LWC using inline complex template expressions." />
			  </span>
			</p>
<h2><b>Getting started with the syntax</b></h2>
<p>To use this feature, your component must use <b>API version 66.0</b> or higher in its <code>js-meta.xml</code> file. Once enabled, you can start using a subset of JavaScript directly in your HTML. See <a href="https://developer.salesforce.com/docs/platform/lwc/guide/create-version-components.html"><u>this guide</u></a> on component API versioning for more information.</p>
<h3><b>Logical and arithmetic operators</b></h3>
<p><span style="font-weight: 400">You can now perform math or logical checks right in the tag. For example, if you want to show a special badge only when an item count is high, you can do it like this:</span></p>
<pre language="html"> 
&lt;template&gt; 
&lt;template&gt;&lt;div key=&quot;{item.id}&quot;&gt; 
&lt;span class=&quot;”{index&quot; 0=&quot;&quot; first-item=&quot;&quot; :=&quot;&quot; item=&quot;&quot;&gt;{index + 1}. {item.label}&lt;/span&gt; 
&lt;/div&gt;&lt;p&gt; 
&lt;/p&gt;&lt;/template&gt; 
&lt;/template&gt;
</pre>
<h2><b>Using expressions in attributes</b></h2>
<p><span style="font-weight: 400">One of the most powerful ways to use this feature is inside HTML attributes. You can </span><a href="https://developer.salesforce.com/docs/platform/lwc/guide/create-components-css-intro.html"><span style="font-weight: 400">dynamically change classes</span></a><span style="font-weight: 400"> or titles without needing extra variables in your JavaScript file.</span></p>
<p><span style="font-weight: 400">However, there is one very important rule to consider: </span><b>complex template expressions in attributes must be surrounded by double quotes.</b><span style="font-weight: 400"> If you forget the quotes, the LWC compiler will throw an error. By using quotes, you ensure that the template stays compliant with standard HTML rules.</span></p>
<pre language="html"> 
&lt;template&gt;&lt;div class=&quot;{isActive ? 'brand-border' : 'neutral-border'}&quot;&gt; User Profile &lt;/div&gt;&lt;p&gt;
&lt;button title=&quot;{item.name + ' - ' + item.status}&quot;&gt; View Details &lt;/button&gt; 
&lt;/p&gt;&lt;/template&gt; 
</pre>
<h2><b>Staying HTML compliant</b></h2>
<p><span style="font-weight: 400">Because LWC templates are still HTML files, some JavaScript characters can confuse the browser. For example, the </span><i><span style="font-weight: 400">less than</span></i><span style="font-weight: 400"> symbol ( &lt; ) looks like the start of a new HTML tag if used in plain text. To stay safe, follow these tips:</span></p>
<ul>
<li><b>Use Greater Than:</b> Instead of <code>{age &lt; 18}</code>, use <code>{18 &gt; age}</code>.</li>
<li><b>Stick to Double Quotes:</b> Always wrap attribute expressions in <code>"{...}"</code>.</li>
</ul>
<h2><b>LWC complex template expression limitations and restrictions</b></h2>
<p>To keep your components fast, we’ve limited what you can do in a template. You cannot use the <code>new</code> keyword, you cannot create full function declarations, and you cannot use assignment operators like <code>=</code> or <code>++</code>. Think of template expressions as read-only logic meant for displaying data.</p>
<p><span style="font-weight: 400">For a full set of valid and invalid expressions, see </span><a href="https://github.com/salesforce/lwc/tree/master/packages/%40lwc/template-compiler/src/__tests__/fixtures/expression-complex"><span style="font-weight: 400">these examples</span></a><span style="font-weight: 400">.</span></p>
<h2><b>Conclusion</b></h2>
<p><span style="font-weight: 400">Complex template expressions are a huge win for developer productivity. By reducing the need for additional getters and functions in your JavaScript files, we’re making LWC feel more modern and intuitive. Remember, this is currently an </span><b>experimental</b><span style="font-weight: 400"> feature. We encourage you to try it out in your Spring &#8217;26 sandbox environments and share your feedback with us!</span></p>
<h2><b>Resources</b></h2>
<ul>
<li style="font-weight: 400"><span style="font-weight: 400">Learn more about</span><a href="https://developer.salesforce.com/docs/platform/lwc/guide/create-components-html-expressions.html"><span style="font-weight: 400"> how to work with complex template expressions</span></a><span style="font-weight: 400"> in the LWC Developer Guide.</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">Review the</span><a href="https://help.salesforce.com/s/articleView?id=release-notes.salesforce_release_notes.htm"> <span style="font-weight: 400">Spring &#8217;26 Release Notes</span></a><span style="font-weight: 400"> for full details on API version 66.0.</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">Practice your skills by completing the</span><a href="https://trailhead.salesforce.com/content/learn/projects/quick-start-lightning-web-components"> <span style="font-weight: 400">Build Lightning Web Components project</span></a><span style="font-weight: 400"> on Trailhead.</span></li>
<li style="font-weight: 400"><span style="font-weight: 400">Brush-up on component </span><a href="https://developer.salesforce.com/docs/platform/lwc/guide/create-version-components.html"><span style="font-weight: 400">API versioning</span></a></li>
</ul>
<h2><b>About the Author</b></h2>
<p><b>John Hefferman</b><span style="font-weight: 400"> is a Software Engineer at Salesforce. John enjoys helping developers build faster and more efficiently on the Salesforce Platform.</span></p>
<p>The post <a href="https://developer.salesforce.com/blogs/2026/04/simplify-your-lwc-development-with-complex-template-expressions">Simplify Your LWC Development with Complex Template Expressions</a> appeared first on <a href="https://developer.salesforce.com/blogs">Salesforce Developers Blog</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://developer.salesforce.com/blogs/2026/04/simplify-your-lwc-development-with-complex-template-expressions/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<post-id xmlns="com-wordpress:feed-additions:1">206095</post-id><media:thumbnail url="https://d259t2jj6zp7qm.cloudfront.net/images/20260417154035/Generic-A-2-e1776465653312.png?w=1000" />
<media:content url="https://d259t2jj6zp7qm.cloudfront.net/images/20260417154035/Generic-A-2-e1776465653312.png?w=1000" medium="image" />
	</item>
	</channel>
</rss>
