<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>PPTB on LinkeD365 Blog</title><link>https://linked365.blog/tags/pptb/</link><description>Recent content in PPTB on LinkeD365 Blog</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Mon, 08 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://linked365.blog/tags/pptb/index.xml" rel="self" type="application/rss+xml"/><item><title>PPTB - Bulk Data Studio</title><link>https://linked365.blog/bulkdatastudio/</link><pubDate>Mon, 08 Jun 2026 00:00:00 +0000</pubDate><guid>https://linked365.blog/bulkdatastudio/</guid><description>&lt;img src="https://linked365.blog/images/2026/bulkdatastudio-mainscreen.png" alt="Featured image of post PPTB - Bulk Data Studio" />&lt;p>Playing catchup documenting the tools I have created for the &lt;a class="link" href="www.powerplatformtoolbox.com" >Power Platform ToolBox&lt;/a>.&lt;/p>
&lt;p>Another &amp;ldquo;equivalent&amp;rdquo; (the quotes means it really isnt, yet) tool to one that is available in the XrmToolBox, made by the mighty, legend of our community &lt;a class="link" href="https://jonasr.app/" target="_blank" rel="noopener"
>Jonas Rapp&lt;/a>, &lt;a class="link" href="https://jonasr.app/bdu/" target="_blank" rel="noopener"
>Bulk Data Updater&lt;/a>.&lt;/p>
&lt;p>My version has a little less yellow and blue, but mimics the functionality. Want to populate that new field with something on thousands of records? Tickle lots of records to trigger plugins or flows? Need to put some data in that column calculated from others? This tool will hopefully help!&lt;/p>
&lt;h2 id="using-the-tool">Using the tool&lt;/h2>
&lt;p>On logging in you are displayed 2 grids, the left being the data that you are going to edit, the right the changes you are going to make.&lt;/p>
&lt;p>Firstly, select your data by clicking on the Fetch Data button&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2026/bulkdatastudio-fetch.png"
loading="lazy"
alt="Image of the BulkDataStudio top area"
>&lt;/p>
&lt;p>Either select Open View or use raw fetchxml.&lt;/p>
&lt;p>Open view presents you with a table and view list, then shows you the raw fetchxml so you can tweak to use in the fetchxml editor.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2026/bulkdatastudio-viewdetail.png"
loading="lazy"
alt="Image of the BulkDatastudio view detail screen"
>&lt;/p>
&lt;p>Once you hit select, the query is run and the results displayed.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2026/bulkdatastudio-resultselection.png"
loading="lazy"
alt="Image of the BulkDatastudio with records selected"
>&lt;/p>
&lt;p>Now we need to decide on what we want to update and to what. Hit the config button to be displayed a list of the fields in the view. Hit the toggle to show all fields on the table.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2026/bulkdatastudio-fieldselection.png"
loading="lazy"
alt="Image of the BulkDatastudio field selection screen"
>&lt;/p>
&lt;p>The options for updating dependent on the field type of course.&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Fixed&lt;/strong> Changes the value to what is entered.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Touch&lt;/strong> Replaces the value as if it has been updated, to trigger downstream flows and plugins.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Calculated&lt;/strong> Determine the value from simple calculations. See the &lt;a class="link" href="#calculation-options" >Calculation options&lt;/a>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Set Null&lt;/strong> as it says, blanks it out.&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>Also, the capabilities of the value selection will differ depending on the field types, from as simple as entering text, selecting a lookup value or choices.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2026/bulkdatastudio-lookup.png"
loading="lazy"
alt="Image of the BulkDatastudio lookup dialog"
>&lt;/p>
&lt;style type="text/css">.notice{--root-color:#444;--root-background:#eff;--title-color:#fff;--title-background:#7bd;--warning-title:#c33;--warning-content:#fee;--info-title:#fb7;--info-content:#fec;--note-title:#6be;--note-content:#e7f2fa;--tip-title:#5a5;--tip-content:#efe}@media (prefers-color-scheme:dark){.notice{--root-color:#ddd;--root-background:#eff;--title-color:#fff;--title-background:#7bd;--warning-title:#800;--warning-content:#400;--info-title:#a50;--info-content:#420;--note-title:#069;--note-content:#023;--tip-title:#363;--tip-content:#121}}body.dark .notice{--root-color:#ddd;--root-background:#eff;--title-color:#fff;--title-background:#7bd;--warning-title:#800;--warning-content:#400;--info-title:#a50;--info-content:#420;--note-title:#069;--note-content:#023;--tip-title:#363;--tip-content:#121}.notice{padding:18px;line-height:24px;margin-bottom:24px;border-radius:4px;color:var(--root-color);background:var(--root-background)}.notice p:last-child{margin-bottom:0}.notice-title{margin:-18px -18px 12px;padding:4px 18px;border-radius:4px 4px 0 0;font-weight:700;color:var(--title-color);background:var(--title-background)}.notice.warning .notice-title{background:var(--warning-title)}.notice.warning{background:var(--warning-content)}.notice.info .notice-title{background:var(--info-title)}.notice.info{background:var(--info-content)}.notice.note .notice-title{background:var(--note-title)}.notice.note{background:var(--note-content)}.notice.tip .notice-title{background:var(--tip-title)}.notice.tip{background:var(--tip-content)}.icon-notice{display:inline-flex;align-self:center;margin-right:8px}.icon-notice img,.icon-notice svg{height:1em;width:1em;fill:currentColor}.icon-notice img,.icon-notice.baseline svg{top:.125em;position:relative}&lt;/style>
&lt;div>&lt;svg width="0" height="0" display="none" xmlns="http://www.w3.org/2000/svg">&lt;symbol id="tip-notice" viewBox="0 0 512 512" preserveAspectRatio="xMidYMid meet">&lt;path d="M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z"/>&lt;/symbol>&lt;symbol id="note-notice" viewBox="0 0 512 512" preserveAspectRatio="xMidYMid meet">&lt;path d="M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"/>&lt;/symbol>&lt;symbol id="warning-notice" viewBox="0 0 576 512" preserveAspectRatio="xMidYMid meet">&lt;path d="M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"/>&lt;/symbol>&lt;symbol id="info-notice" viewBox="0 0 512 512" preserveAspectRatio="xMidYMid meet">&lt;path d="M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"/>&lt;/symbol>&lt;/svg>&lt;/div>&lt;div class="notice note" >
&lt;p class="first notice-title">&lt;span class="icon-notice baseline">&lt;svg>&lt;use href="#note-notice">&lt;/use>&lt;/svg>&lt;/span>Note&lt;/p>&lt;p>For status and state, we have a special case, they need to be linked, so you need to change both together.&lt;/p>&lt;/div>
&lt;p>Once you are ready, hit the Update Rows button and then confirm with Update Records&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2026/bulkdatastudio-UpdateRows.png"
loading="lazy"
alt="Image of the BulkDatastudio Update Rows button"
>&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2026/bulkdatastudio-updateconfirmation.png"
loading="lazy"
alt="Image of the BulkDatastudio Update Confirmation"
>&lt;/p>
&lt;h3 id="calculation-options">Calculation options&lt;/h3>
&lt;p>When you choose &lt;strong>Calculated&lt;/strong>, you can build expressions using field tokens, system tokens, formatting functions, conditional logic and simple math.&lt;/p>
&lt;p>&lt;strong>Field tokens&lt;/strong>&lt;/p>
&lt;p>Use values from the current row:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">{fieldname}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{fieldname|raw}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{parent.childfield}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Examples:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">{firstname}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{status|raw}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{account.name}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>&lt;strong>System tokens&lt;/strong>&lt;/p>
&lt;p>Add system date/time values:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">&amp;lt;system|now|&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;lt;system|today|&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;lt;system|year|&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;lt;system|month|&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;lt;system|day|&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;lt;system|hour|&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;lt;system|minute|&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;lt;system|timestamp|&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Example:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">{description} - Updated &amp;lt;system|today|&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>**Conditional logic
**
Use &lt;code>iif&lt;/code> for if/else expressions:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">&amp;lt;iif|value|operator|compare|then|else&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Supported operators: &lt;code>eq&lt;/code>, &lt;code>ne&lt;/code>, &lt;code>gt&lt;/code>, &lt;code>gte&lt;/code>, &lt;code>lt&lt;/code>, &lt;code>lte&lt;/code>, &lt;code>contains&lt;/code>, &lt;code>startswith&lt;/code>, &lt;code>endswith&lt;/code>.&lt;/p>
&lt;p>Example:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">&amp;lt;iif|{tier}|eq|Premium|{price}&amp;lt;math|*|0.90&amp;gt;|{price}&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>&lt;strong>Formatting functions&lt;/strong>&lt;/p>
&lt;p>Useful text functions include:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">&amp;lt;Upper&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;lt;Lower&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;lt;Trim|chars&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;lt;TrimStart|chars&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;lt;TrimEnd|chars&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;lt;SubStr|start|length&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;lt;Left|length&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;lt;Right|length&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;lt;Replace|old|new&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&amp;lt;Pad|R|length|char&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Examples:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">&amp;lt;Upper&amp;gt;{lastname}, {firstname}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">ACC-&amp;lt;system|year|&amp;gt;-&amp;lt;Left|2&amp;gt;{accountname}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>&lt;strong>Math operations&lt;/strong>&lt;/p>
&lt;p>For numeric values:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">&amp;lt;math|operator|value&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Operators: &lt;code>+&lt;/code>, &lt;code>-&lt;/code>, &lt;code>*&lt;/code>, &lt;code>/&lt;/code>&lt;/p>
&lt;p>Examples:&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">{quantity}&amp;lt;math|*|1.10&amp;gt;
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">{price}&amp;lt;math|-|5.00&amp;gt;
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>&lt;strong>Quick tips&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Use preview to validate expressions before running updates.&lt;/li>
&lt;li>Keep field names in your expression aligned with the fields fetched in your query/view.&lt;/li>
&lt;li>For status and state updates, set both values together.&lt;/li>
&lt;/ul>
&lt;h3 id="cloning-records">Cloning Records&lt;/h3>
&lt;p>Another powerful feature is the ability to clone records. This creates copies of existing records, optionally including their related child records with properly remapped relationships.&lt;/p>
&lt;p>Basic Workflow&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Select records&lt;/strong> to clone via view or FetchXML&lt;/li>
&lt;li>&lt;strong>Configure clone settings&lt;/strong> to specify which fields to exclude and which child records to clone&lt;/li>
&lt;li>&lt;strong>Review the configuration&lt;/strong> to ensure it meets your needs&lt;/li>
&lt;li>&lt;strong>Execute the clone&lt;/strong> to create the copies&lt;/li>
&lt;/ol>
&lt;h4 id="step-by-step-process">Step-by-Step Process&lt;/h4>
&lt;h5 id="1-select-your-source-records">1. Select Your Source Records&lt;/h5>
&lt;p>First, select the records you want to clone using the same process as the update feature:&lt;/p>
&lt;ul>
&lt;li>Click &lt;strong>Fetch Data&lt;/strong>&lt;/li>
&lt;li>Choose &lt;strong>Open View&lt;/strong> or use &lt;strong>FetchXML&lt;/strong>&lt;/li>
&lt;li>Select the records to clone&lt;/li>
&lt;/ul>
&lt;h5 id="2-open-clone-settings">2. Open Clone Settings&lt;/h5>
&lt;p>Once you&amp;rsquo;ve selected records, look for the &lt;strong>Clone&lt;/strong> button in the toolbar to open the clone configuration panel.
&lt;img src="https://linked365.blog/images/2026/bulkdatastudio-clone.png"
loading="lazy"
alt="Image showing clone settings"
>&lt;/p>
&lt;h5 id="3-configure-parent-field-exclusions">3. Configure Parent Field Exclusions&lt;/h5>
&lt;p>In the &lt;strong>Exclude Fields&lt;/strong> tab, you can specify which fields should NOT be copied to the cloned records.&lt;/p>
&lt;p>&lt;strong>Fields automatically excluded:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Primary ID&lt;/strong> (the record identifier)&lt;/li>
&lt;li>&lt;strong>Alternate Keys&lt;/strong> (any uniqueness constraints)&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Fields you typically exclude:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Unique identifiers or codes that should be different in the clone&lt;/li>
&lt;li>Read-only fields&lt;/li>
&lt;li>System-calculated fields&lt;/li>
&lt;li>Fields that shouldn&amp;rsquo;t be duplicated&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>How to exclude:&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>Search for fields using the search box (searches both display name and logical name)&lt;/li>
&lt;li>Check the checkbox next to fields you want to exclude&lt;/li>
&lt;li>Excluded fields appear with a red background&lt;/li>
&lt;/ol>
&lt;div class="notice note" >
&lt;p class="first notice-title">&lt;span class="icon-notice baseline">&lt;svg>&lt;use href="#note-notice">&lt;/use>&lt;/svg>&lt;/span>Note&lt;/p>&lt;p>&lt;strong>Warning:&lt;/strong> If you exclude no parent fields, cloned records will be identical to the originals. This may violate uniqueness constraints on certain fields.&lt;/p>&lt;/div>
&lt;h5 id="4-configure-child-table-cloning">4. Configure Child Table Cloning&lt;/h5>
&lt;p>In the &lt;strong>Child Tables&lt;/strong> tab, you can specify which related records should also be cloned.
&lt;img src="https://linked365.blog/images/2026/bulkdatastudio-clone2.png"
loading="lazy"
alt="Image showing clone child table settings"
>&lt;/p>
&lt;p>&lt;strong>How to add child tables:&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>Click &lt;strong>Add Child Table&lt;/strong> to add a child table configuration&lt;/li>
&lt;li>&lt;strong>Select Child Table&lt;/strong>: Choose which related table to clone from
&lt;ul>
&lt;li>The dropdown shows tables that have one-to-many relationships with your parent table&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Select Parent Lookup Field&lt;/strong>: Choose the lookup field that links child records back to the parent
&lt;ul>
&lt;li>This is automatically populated if only one link exists&lt;/li>
&lt;li>The system will automatically remap this field to point to the cloned parent record&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>&lt;strong>Exclude Child Fields&lt;/strong>: Optional - select which fields in the child table should not be copied
&lt;ul>
&lt;li>Just like parent exclusions, helps ensure uniqueness or avoid sensitive data&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>Example: Cloning an Account with Contacts&lt;/strong>&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Parent Table: Account (e.g., &amp;#34;Contoso Inc&amp;#34;)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Child Table: Contact
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Parent Lookup Field: parentcustomerid (the field pointing back to Account)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Excluded Fields: Email (so each clone has unique email)
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Result: Account cloned, and all Contacts are also cloned with their
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> parentcustomerid updated to the new Account
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h5 id="5-review-and-execute">5. Review and Execute&lt;/h5>
&lt;p>Before cloning, review your configuration:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Parent fields being copied&lt;/strong>: Displayed in the status message&lt;/li>
&lt;li>&lt;strong>Child tables&lt;/strong>: Listed with their lookups and exclusions&lt;/li>
&lt;li>&lt;strong>Warnings&lt;/strong>: Alerts if no parent fields are excluded&lt;/li>
&lt;/ul>
&lt;p>Once satisfied with the configuration, click &lt;strong>Run Clone&lt;/strong> to execute.&lt;/p>
&lt;p>A confirmation dialog will appear reminding you that:&lt;/p>
&lt;ul>
&lt;li>New records will be created in Dataverse&lt;/li>
&lt;li>Any active Power Automate flows, plugins, or business rules will be triggered on these new records&lt;/li>
&lt;li>The operation cannot be undone (delete the clones manually if needed)&lt;/li>
&lt;/ul></description></item><item><title>PPTB - Metadata Browser</title><link>https://linked365.blog/metadatabrowser/</link><pubDate>Fri, 13 Feb 2026 00:00:00 +0000</pubDate><guid>https://linked365.blog/metadatabrowser/</guid><description>&lt;img src="https://linked365.blog/images/2026/metadatabrowser-main.png" alt="Featured image of post PPTB - Metadata Browser" />&lt;p>Being involved from the outset of the &lt;a class="link" href="https://PowerPlatformToolBox.com" target="_blank" rel="noopener"
>https://PowerPlatformToolBox.com&lt;/a> has been hard work, tiring and worth every hour.&lt;/p>
&lt;p>To ensure the PPTB gets as much impetus as possible, providing equivalent tools as what is in the XrmToolBox was part of our goals. It is all very well to have a sexy looking multi-os framework, but without the core tools it would never take off.&lt;/p>
&lt;p>This is why the talented &lt;a class="link" href="https://www.linkedin.com/in/mohsin-mirza-94210615/" target="_blank" rel="noopener"
>Mohsin Mirza (MohsinoXrm)&lt;/a> has created the &lt;a class="link" href="https://www.powerplatformtoolbox.com/tools/e64db554-5dc9-4cc5-a712-832307d00777" target="_blank" rel="noopener"
>FetchXML Studio&lt;/a> and our glorious leader &lt;a class="link" href="https://www.linkedin.com/in/danishnaglekar/" target="_blank" rel="noopener"
>Danish Naglekar&lt;/a> has made the [PCF Builder](&lt;a class="link" href="https://www.powerplatformtoolbox.com/tools/" target="_blank" rel="noopener"
>https://www.powerplatformtoolbox.com/tools/&lt;/a>
fca7fd3c-54e1-4d2f-877c-ca29d1f4cd47)&lt;/p>
&lt;p>To that end, I have created &lt;a class="link" href="https://www.powerplatformtoolbox.com/tools/cbbb1649-3cc8-4c0f-9795-1ef64a1ab96d" target="_blank" rel="noopener"
>Metadata Browser&lt;/a>. Still going strong on the &lt;a class="link" href="https://www.xrmtoolbox.com/plugins/MsCrmTools.MetadataBrowser/" target="_blank" rel="noopener"
>XrmToolBox&lt;/a> the legend that is &lt;a class="link" href="https://www.linkedin.com/in/tanguytouzard/" target="_blank" rel="noopener"
>Tanguy Touzard&lt;/a> created the original, and my version respectfully (with his permission) copies that with a reimagined interface to take advantage of the capabilities of the Electron PPTB, with a REact, Fluent based app with an &lt;a class="link" href="https://www.ag-grid.com/" target="_blank" rel="noopener"
>AG-Grid&lt;/a> grid to provide a performant interface.&lt;/p>
&lt;h2 id="using-the-tool">Using the tool&lt;/h2>
&lt;p>The tool is pretty (hopefully) self explanatory. Select a solution, or all tables and select a table for start looking at the various parts of the table as defined, whether it be fields, relationships, keys or everything else that is connected to a table.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2026/metadatabrowser-start.png"
loading="lazy"
alt="Image of the Metadata Browser top area"
>&lt;/p>
&lt;p>If you choose a solution, a drawer will appear allowing you select Managed or Unmanaged solutions in your environment.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2026/metadatabrowser-solutionselector.png"
loading="lazy"
alt="Image of the Metadata Browser Solution Selector"
>&lt;/p>
&lt;p>The list of tables will then display all the tables associated with that solution.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2026/metadatabrowser-tablelist.png"
loading="lazy"
alt="Image of the Metadata Browser Table screen"
>&lt;/p>
&lt;ol>
&lt;li>This icon opens the table as a new tab&lt;/li>
&lt;li>The grid is sortable and searchable&lt;/li>
&lt;li>You can add or remove columns to display in the list, displaying a popout like below&lt;/li>
&lt;/ol>
&lt;p>&lt;img src="https://linked365.blog/images/2026/metadatabrowser-columnselection.png"
loading="lazy"
alt="Image of the Metadata Browser Column selection"
>&lt;/p>
&lt;ol>
&lt;li>Here you can add one more columns against the table. This applies to each subsequent tab, you can add columns to display further details on column attributes, relationships etc.&lt;/li>
&lt;li>Save updates the current list&lt;/li>
&lt;li>Set Default saves the configuration as your default next time you open the tool.&lt;/li>
&lt;/ol>
&lt;style type="text/css">.notice{--root-color:#444;--root-background:#eff;--title-color:#fff;--title-background:#7bd;--warning-title:#c33;--warning-content:#fee;--info-title:#fb7;--info-content:#fec;--note-title:#6be;--note-content:#e7f2fa;--tip-title:#5a5;--tip-content:#efe}@media (prefers-color-scheme:dark){.notice{--root-color:#ddd;--root-background:#eff;--title-color:#fff;--title-background:#7bd;--warning-title:#800;--warning-content:#400;--info-title:#a50;--info-content:#420;--note-title:#069;--note-content:#023;--tip-title:#363;--tip-content:#121}}body.dark .notice{--root-color:#ddd;--root-background:#eff;--title-color:#fff;--title-background:#7bd;--warning-title:#800;--warning-content:#400;--info-title:#a50;--info-content:#420;--note-title:#069;--note-content:#023;--tip-title:#363;--tip-content:#121}.notice{padding:18px;line-height:24px;margin-bottom:24px;border-radius:4px;color:var(--root-color);background:var(--root-background)}.notice p:last-child{margin-bottom:0}.notice-title{margin:-18px -18px 12px;padding:4px 18px;border-radius:4px 4px 0 0;font-weight:700;color:var(--title-color);background:var(--title-background)}.notice.warning .notice-title{background:var(--warning-title)}.notice.warning{background:var(--warning-content)}.notice.info .notice-title{background:var(--info-title)}.notice.info{background:var(--info-content)}.notice.note .notice-title{background:var(--note-title)}.notice.note{background:var(--note-content)}.notice.tip .notice-title{background:var(--tip-title)}.notice.tip{background:var(--tip-content)}.icon-notice{display:inline-flex;align-self:center;margin-right:8px}.icon-notice img,.icon-notice svg{height:1em;width:1em;fill:currentColor}.icon-notice img,.icon-notice.baseline svg{top:.125em;position:relative}&lt;/style>
&lt;div>&lt;svg width="0" height="0" display="none" xmlns="http://www.w3.org/2000/svg">&lt;symbol id="tip-notice" viewBox="0 0 512 512" preserveAspectRatio="xMidYMid meet">&lt;path d="M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zM227.314 387.314l184-184c6.248-6.248 6.248-16.379 0-22.627l-22.627-22.627c-6.248-6.249-16.379-6.249-22.628 0L216 308.118l-70.059-70.059c-6.248-6.248-16.379-6.248-22.628 0l-22.627 22.627c-6.248 6.248-6.248 16.379 0 22.627l104 104c6.249 6.249 16.379 6.249 22.628.001z"/>&lt;/symbol>&lt;symbol id="note-notice" viewBox="0 0 512 512" preserveAspectRatio="xMidYMid meet">&lt;path d="M504 256c0 136.997-111.043 248-248 248S8 392.997 8 256C8 119.083 119.043 8 256 8s248 111.083 248 248zm-248 50c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"/>&lt;/symbol>&lt;symbol id="warning-notice" viewBox="0 0 576 512" preserveAspectRatio="xMidYMid meet">&lt;path d="M569.517 440.013C587.975 472.007 564.806 512 527.94 512H48.054c-36.937 0-59.999-40.055-41.577-71.987L246.423 23.985c18.467-32.009 64.72-31.951 83.154 0l239.94 416.028zM288 354c-25.405 0-46 20.595-46 46s20.595 46 46 46 46-20.595 46-46-20.595-46-46-46zm-43.673-165.346l7.418 136c.347 6.364 5.609 11.346 11.982 11.346h48.546c6.373 0 11.635-4.982 11.982-11.346l7.418-136c.375-6.874-5.098-12.654-11.982-12.654h-63.383c-6.884 0-12.356 5.78-11.981 12.654z"/>&lt;/symbol>&lt;symbol id="info-notice" viewBox="0 0 512 512" preserveAspectRatio="xMidYMid meet">&lt;path d="M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 110c23.196 0 42 18.804 42 42s-18.804 42-42 42-42-18.804-42-42 18.804-42 42-42zm56 254c0 6.627-5.373 12-12 12h-88c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h12v-64h-12c-6.627 0-12-5.373-12-12v-24c0-6.627 5.373-12 12-12h64c6.627 0 12 5.373 12 12v100h12c6.627 0 12 5.373 12 12v24z"/>&lt;/symbol>&lt;/svg>&lt;/div>&lt;div class="notice note" >
&lt;p class="first notice-title">&lt;span class="icon-notice baseline">&lt;svg>&lt;use href="#note-notice">&lt;/use>&lt;/svg>&lt;/span>Note&lt;/p>&lt;p>The columns you select here also affect the columns exported for each tab. It does not impact the Excel export.&lt;/p>&lt;/div>
&lt;p>Selecting one of the tables opens that table as a new tab.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2026/metadatabrowser-tabledetails.png"
loading="lazy"
alt="Image of the Metadata Browser - Table details"
>&lt;/p>
&lt;ol>
&lt;li>Each table is added as another tab&lt;/li>
&lt;li>More tabs below give you further details for that table&lt;/li>
&lt;li>You can search to find an attribute.&lt;/li>
&lt;li>This button exports the details of the table, each tab has similar for the data shown.&lt;/li>
&lt;/ol>
&lt;p>Each sub tab (Columns, Keys, Relationships, Privileges and Solutions) will retrieve the relevant data from your environment, to quickly see the information that is stored in your system and export it.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2026/metadatabrowser-exportallbutton.png"
loading="lazy"
alt="Image of the Metadata Browser = Excel export button"
>&lt;/p>
&lt;p>Selecting this option allows you to define which tabs will be created in an Excel report, with seperate sheets per option.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2026/metadatabrowser-exporttoexceldrawer.png"
loading="lazy"
alt="Image of the Metadata Browser - Excel export drawer"
>&lt;/p>
&lt;p>This will prompt you to save 1 Excel workbook per table.&lt;/p>
&lt;h3 id="comparing-environments">Comparing Environments&lt;/h3>
&lt;p>If you select multiple envrionements in the connection dialog you will be able to compare two environments to show differences between the tables, fields, relationships etc deployed.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2026/metadatabrowser-multiconnect.png"
loading="lazy"
alt="Image of the Metadata Browser - Multi-connect details"
>&lt;/p>
&lt;p>In the tables listing, differences are highlighted.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2026/metadatabrowser-tables1.png"
loading="lazy"
alt="Image of the Metadata Browser - Compare tables"
>&lt;/p>
&lt;ol>
&lt;li>Tables are present in both environments&lt;/li>
&lt;li>Table is only present in the primary environment.&lt;/li>
&lt;/ol>
&lt;p>&lt;img src="https://linked365.blog/images/2026/metadatabrowser-tables2.png"
loading="lazy"
alt="Image of the Metadata Browser - Compare tables"
>&lt;/p>
&lt;ol start="3">
&lt;li>Tables only appear in the secondary environment.&lt;/li>
&lt;/ol>
&lt;p>In each of the child things, such as columns below, the same highlighting applies.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2026/metadatabrowser-reviewColumns.png"
loading="lazy"
alt="Image of the Metadata Browser - Compare tables"
>&lt;/p>
&lt;p>Please let me know if you have any issues or requests for improvements &lt;a class="link" href="https://github.com/LinkeD365/Metadata-Browser/issues" target="_blank" rel="noopener"
>Metadata Browser&lt;/a>&lt;/p></description></item><item><title>PPTB - Environment Manager</title><link>https://linked365.blog/EnvManager/</link><pubDate>Fri, 23 Jan 2026 00:00:00 +0000</pubDate><guid>https://linked365.blog/EnvManager/</guid><description>&lt;img src="https://linked365.blog/images/2026/envmanager-header.png" alt="Featured image of post PPTB - Environment Manager" />&lt;p>Much as I love XrmToolBox, and loved making tools for the toolbox, I have always thought that the visual aspect of the tools left some thing to be desired.
As it is based on WinForms technology, over 20 years old, it is from an era before my kids were born, suitable for us back then, with our long hair, leather jackets and mobile phones that didnt work and were the size of a brick.&lt;/p>
&lt;p>So, when &lt;a class="link" href="https://powermaverick.dev/" target="_blank" rel="noopener"
>Danish Naglekar&lt;/a> proposed late last year that we re-imagine the XTB, I jumped at the chance! If you haven&amp;rsquo;t seen the &lt;a class="link" href="https://www.powerplatformtoolbox.com/" target="_blank" rel="noopener"
>Power Platform ToolBox&lt;/a>, go download it, check it out and give us feedback!&lt;/p>
&lt;p>(Mostly I am excited by Dark Mode, but creating apps that use React/Fluent for wider use is exciting, and look great!)&lt;/p>
&lt;p>My first tool on the XTB was the &lt;a class="link" href="https://linked365.blog/OrgSettingsTool" target="_blank" rel="noopener"
>OrgSettings Tool&lt;/a>, a take on the solution that &lt;a class="link" href="https://github.com/seanmcne/OrgDbOrgSettings" target="_blank" rel="noopener"
>Sean McNellis&lt;/a> has made.&lt;/p>
&lt;p>If you are un-aware, there are several under the cover settings in your Power Platform environment that can alter the way some of the parts work, such as Server Side Sync, Security and other parts of a standard CRM environment. And, updating these settings is not a click in the admin centre.&lt;/p>
&lt;p>Whilst it is true to say, the product team are moving towards more clickable, or at least via the PAC CLI update of settings, these settings still keep getting added to and updated.&lt;/p>
&lt;p>With that said, I thought why not re-imagine the interface for it in the PPTB, hence I am proud to announce the Environment Manager in PPTB!&lt;/p>
&lt;h2 id="connecting-and-reviewing-your-settings">Connecting and Reviewing your settings&lt;/h2>
&lt;p>Environment Manager supports 2 connections, to compare environments. It will also work if you chose just one.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2026/EnVManager-Connection.png"
loading="lazy"
alt="Image of the connection tab for Environment Manager"
>&lt;/p>
&lt;p>For a single connection, you are presented with one column of values.
&lt;img src="https://linked365.blog/images/2026/envmanager-singledisplay.png"
loading="lazy"
alt="Image of Environment Manager with single connection"
>&lt;/p>
&lt;p>For multi connection, you are presented with 2 columns of values.
&lt;img src="https://linked365.blog/images/2026/envmanager-multidisplay.png"
loading="lazy"
alt="Image of the Environment Manager with multi connections"
>&lt;/p>
&lt;p>Here, you can sort, search and compare configuration settings across your environment(s).&lt;/p>
&lt;p>If you want to find out a little more information on the setting, there is a little i icon which will firstly show you information dragged from the Github repository, maintained by Sean.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2026/envmanager-addinfo.png"
loading="lazy"
alt="Image of the additional info popup"
>&lt;/p>
&lt;p>If I have added more info on my blog &lt;a class="link" href="https://linked365.blog/2019/10/01/d365-org-db-settings-email/" target="_blank" rel="noopener"
>here&lt;/a> this will be available in the LinkeD365 Info button.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2026/envmanager-linked365info.png"
loading="lazy"
alt="Image of the LinkeD365 Info"
>&lt;/p>
&lt;h2 id="editing-a-variable">Editing a variable&lt;/h2>
&lt;p>On the left of the grid is a little pencil. Clicking on it enables the values to be changed.&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2026/envmanager-edit.png"
loading="lazy"
alt="Image of the edit pencil and save buttons"
>&lt;/p>
&lt;p>Once happy to update that value, hit the save button on top of the grid, which will give you a progress check and save back the configuration&lt;/p>
&lt;p>&lt;img src="https://linked365.blog/images/2026/envmanager-saving.png"
loading="lazy"
alt="Image of the edit pencil and save buttons"
>&lt;/p>
&lt;p>If you want to revert to the original value, hit the revert button.&lt;/p>
&lt;p>Thats it! Hope it helps someone.&lt;/p>
&lt;p>Please provide feedback and bugs on the GitHub repository &lt;a class="link" href="https://github.com/LinkeD365/PPTB-EnvManager/issues" target="_blank" rel="noopener"
>Env Manager&lt;/a>&lt;/p></description></item></channel></rss>