Jekyll2024-01-17T01:15:37+00:00https://blog.floriancourgey.com/feed.xmlBlog by Florian CourgeyCurated list of tech tutorials on a wide variety of topics including PrestaShop, Adobe Campaign, Symfony, Angular, Django and much more!Install Adobe Campaign locally on Windows2023-11-21T00:00:00+00:002023-11-21T00:00:00+00:00https://blog.floriancourgey.com/2023/11/adobe-campaign-windows<p>Setting up and running Adobe Campaign Classic on a Windows 11 machine significantly facilitates the development process. In this guide, the installation steps will be outlined to simplify the development process on a local computer.</p>
<p class="text-center">β«β¬οΈπ»</p>
<!--more-->
<p><img src="/assets/images/2023/adobe-campaign-classic-windows-start-workflow-server.jpg" alt="Adobe Campaign Classic v7 running workflows on Windows 11" /></p>
<p>From the <a href="https://experienceleague.adobe.com/docs/campaign-classic/using/release-notes/compatibility-matrix.html?lang=en#Tools">Adobe Campaign compatibility matrix</a></p>
<h1 id="prerequisites">Prerequisites</h1>
<ul>
<li>Windows with Administrator rights (for Java JDK, PostgreSQL and Adobe Campaign Classic server)</li>
</ul>
<h1 id="installations">Installations</h1>
<h3 id="install-java-jdk-11">Install Java JDK 11</h3>
<ul>
<li><a href="https://experience.adobe.com/#/downloads/content/software-distribution/en/general.html">https://experience.adobe.com/#/downloads/content/software-distribution/en/general.html</a>
<ul>
<li>Oracle JDK 11.0.21 - Windows-x64 Installer
<ul>
<li><code class="language-plaintext highlighter-rouge">jdk-11.0.21_windows-x64_bin.exe</code> (141 MB)</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>Install, then add to user <code class="language-plaintext highlighter-rouge">PATH</code> βEdit environment variables for your accountβ:</p>
<p><code class="language-plaintext highlighter-rouge">C:\Program Files\Java\jdk-11\bin</code></p>
<h3 id="install-postgresql-14">Install PostgreSQL 14</h3>
<ul>
<li><a href="https://www.enterprisedb.com/downloads/postgres-postgresql-downloads">https://www.enterprisedb.com/downloads/postgres-postgresql-downloads</a>
<ul>
<li>Windows x86-64
<ul>
<li><code class="language-plaintext highlighter-rouge">postgresql-14.10-1-windows-x64.exe</code> (347 MB)</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>Install, then add to user <code class="language-plaintext highlighter-rouge">PATH</code> βEdit environment variables for your accountβ:</p>
<p><code class="language-plaintext highlighter-rouge">C:\Program Files\PostgreSQL\14\bin</code></p>
<h3 id="install-adobe-campaign-classic-server-v7">Install Adobe Campaign Classic Server v7</h3>
<ul>
<li>https://experience.adobe.com/#/downloads/content/software-distribution/en/campaign.html
<ul>
<li>7.3.4 - build 9364 - Windows - GENERAL AVAILABILITY
<ul>
<li><code class="language-plaintext highlighter-rouge">7.0.9364.zip</code> (91 MB)</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>Unzip, then run <code class="language-plaintext highlighter-rouge">7.0.9364\setup.exe</code>.</p>
<p>Add to user <code class="language-plaintext highlighter-rouge">PATH</code> βEdit environment variables for your accountβ:</p>
<p><code class="language-plaintext highlighter-rouge">C:\Program Files\Adobe\Adobe Campaign Classic v7\bin</code></p>
<h3 id="install-adobe-campaign-classic-console">Install Adobe Campaign Classic Console</h3>
<p>Run <code class="language-plaintext highlighter-rouge">7.0.9364\setup-client-7.0.9364.exe</code></p>
<h3 id="check-installation">Check installation</h3>
<p><img src="/assets/images/2023/adobe-campaign-classic-windows-install-dependencies.jpg" alt="Verify Adobe Campaign dependencies installation" /></p>
<p>Powershell, as administrator:</p>
<div class="language-powershell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">PS</span><span class="w"> </span><span class="nx">C:\Users\fco</span><span class="err">></span><span class="w"> </span><span class="nx">javac</span><span class="w"> </span><span class="nt">-version</span><span class="w">
</span><span class="n">javac</span><span class="w"> </span><span class="nx">11.0.21</span><span class="w">
</span><span class="n">PS</span><span class="w"> </span><span class="nx">C:\Users\fco</span><span class="err">></span><span class="w"> </span><span class="nx">pg_config</span><span class="w"> </span><span class="nt">--version</span><span class="w">
</span><span class="n">PostgreSQL</span><span class="w"> </span><span class="nx">14.10</span><span class="w">
</span><span class="n">PS</span><span class="w"> </span><span class="nx">C:\Users\fco</span><span class="err">></span><span class="w"> </span><span class="nx">nlserver</span><span class="w"> </span><span class="nx">pdump</span><span class="w">
</span><span class="mi">15</span><span class="p">:</span><span class="mi">16</span><span class="p">:</span><span class="mi">55</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="n">Application</span><span class="w"> </span><span class="nx">server</span><span class="w"> </span><span class="nx">for</span><span class="w"> </span><span class="nx">Adobe</span><span class="w"> </span><span class="nx">Campaign</span><span class="w"> </span><span class="nx">Classic</span><span class="w"> </span><span class="p">(</span><span class="mf">7.3</span><span class="o">.</span><span class="nf">4</span><span class="w"> </span><span class="n">build</span><span class="w"> </span><span class="nx">9364</span><span class="err">@</span><span class="nx">8f3ef8e</span><span class="w"> </span><span class="nx">of</span><span class="w"> </span><span class="nx">09/04/2023</span><span class="p">)</span><span class="w">
</span></code></pre></div></div>
<h1 id="start-the-server-from-the-command-line">Start the server from the command line</h1>
<p><img src="/assets/images/2023/adobe-campaign-classic-windows-start-server.jpg" alt="Server started from CLI" /></p>
<p>Powershell, as administrator:</p>
<div class="language-powershell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">PS</span><span class="w"> </span><span class="nx">C:\Users\fco</span><span class="err">></span><span class="w"> </span><span class="nx">nlserver</span><span class="w"> </span><span class="nx">web</span><span class="w"> </span><span class="c"># create the default files serverConf & config-default</span><span class="w">
</span><span class="mi">16</span><span class="p">:</span><span class="mi">19</span><span class="p">:</span><span class="mi">10</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="n">Application</span><span class="w"> </span><span class="nx">server</span><span class="w"> </span><span class="nx">for</span><span class="w"> </span><span class="nx">Adobe</span><span class="w"> </span><span class="nx">Campaign</span><span class="w"> </span><span class="nx">Classic</span><span class="w"> </span><span class="p">(</span><span class="mf">7.3</span><span class="o">.</span><span class="nf">4</span><span class="w"> </span><span class="n">build</span><span class="w"> </span><span class="nx">9364</span><span class="err">@</span><span class="nx">8f3ef8e</span><span class="w"> </span><span class="nx">of</span><span class="w"> </span><span class="nx">09/04/2023</span><span class="p">)</span><span class="w">
</span><span class="mi">16</span><span class="p">:</span><span class="mi">19</span><span class="p">:</span><span class="mi">10</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="n">Starting</span><span class="w"> </span><span class="nx">Web</span><span class="w"> </span><span class="nx">server</span><span class="w"> </span><span class="nx">module</span><span class="w"> </span><span class="p">(</span><span class="n">pid</span><span class="o">=</span><span class="mi">7636</span><span class="p">,</span><span class="w"> </span><span class="n">tid</span><span class="o">=</span><span class="mi">3156</span><span class="p">)</span><span class="o">...</span><span class="w">
</span><span class="mi">16</span><span class="p">:</span><span class="mi">19</span><span class="p">:</span><span class="mi">10</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="n">Creation</span><span class="w"> </span><span class="nx">of</span><span class="w"> </span><span class="nx">the</span><span class="w"> </span><span class="nx">server</span><span class="w"> </span><span class="nx">configuration</span><span class="w"> </span><span class="nx">file</span><span class="w"> </span><span class="s1">'C:\Program Files\Adobe\Adobe Campaign Classic v7\conf\serverConf.xml'</span><span class="w"> </span><span class="nx">from</span><span class="w"> </span><span class="s1">'C:\Program Files\Adobe\Adobe Campaign Classic v7\conf\eng\serverConf.xml.sample'</span><span class="w">
</span><span class="mi">16</span><span class="p">:</span><span class="mi">19</span><span class="p">:</span><span class="mi">10</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="n">Creation</span><span class="w"> </span><span class="nx">of</span><span class="w"> </span><span class="nx">the</span><span class="w"> </span><span class="nx">server</span><span class="w"> </span><span class="nx">configuration</span><span class="w"> </span><span class="nx">file</span><span class="w"> </span><span class="s1">'C:\Program Files\Adobe\Adobe Campaign Classic v7\conf\config-default.xml'</span><span class="w"> </span><span class="nx">from</span><span class="w"> </span><span class="s1">'C:\Program Files\Adobe\Adobe Campaign Classic v7\conf\models\config-default.xml'</span><span class="w">
</span><span class="mi">16</span><span class="p">:</span><span class="mi">19</span><span class="p">:</span><span class="mi">10</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="n">Server</span><span class="w"> </span><span class="nx">started</span><span class="w">
</span><span class="n">Ctrl-C</span><span class="w">
</span><span class="nx">16:19:13</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="nx">Stop</span><span class="w"> </span><span class="nx">requested</span><span class="w"> </span><span class="p">(</span><span class="n">pid</span><span class="o">=</span><span class="mi">7636</span><span class="p">)</span><span class="w">
</span><span class="mi">16</span><span class="p">:</span><span class="mi">19</span><span class="p">:</span><span class="mi">13</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="n">Stopping</span><span class="w"> </span><span class="nx">Web</span><span class="w"> </span><span class="nx">server</span><span class="w"> </span><span class="p">(</span><span class="n">pid</span><span class="o">=</span><span class="mi">7636</span><span class="p">,</span><span class="w"> </span><span class="n">tid</span><span class="o">=</span><span class="mi">3156</span><span class="p">)</span><span class="o">...</span><span class="w">
</span><span class="n">PS</span><span class="w"> </span><span class="nx">C:\Users\fco</span><span class="err">></span><span class="w"> </span><span class="nx">nlserver</span><span class="w"> </span><span class="nx">start</span><span class="w"> </span><span class="nx">web</span><span class="w"> </span><span class="c"># start tomcat</span><span class="w">
</span><span class="mi">16</span><span class="p">:</span><span class="mi">19</span><span class="p">:</span><span class="mi">50</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="n">Application</span><span class="w"> </span><span class="nx">server</span><span class="w"> </span><span class="nx">for</span><span class="w"> </span><span class="nx">Adobe</span><span class="w"> </span><span class="nx">Campaign</span><span class="w"> </span><span class="nx">Classic</span><span class="w"> </span><span class="p">(</span><span class="mf">7.3</span><span class="o">.</span><span class="nf">4</span><span class="w"> </span><span class="n">build</span><span class="w"> </span><span class="nx">9364</span><span class="err">@</span><span class="nx">8f3ef8e</span><span class="w"> </span><span class="nx">of</span><span class="w"> </span><span class="nx">09/04/2023</span><span class="p">)</span><span class="w">
</span><span class="mi">16</span><span class="p">:</span><span class="mi">19</span><span class="p">:</span><span class="mi">50</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="n">Launching</span><span class="w"> </span><span class="nx">task</span><span class="w"> </span><span class="s1">'web@default'</span><span class="w"> </span><span class="p">(</span><span class="s1">'nlserver web -tracefile:web@default -instance:default -detach -tomcat -autorepair'</span><span class="p">)</span><span class="w"> </span><span class="kr">in</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="nx">new</span><span class="w"> </span><span class="nx">process</span><span class="w">
</span><span class="mi">16</span><span class="p">:</span><span class="mi">19</span><span class="p">:</span><span class="mi">50</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="n">Application</span><span class="w"> </span><span class="nx">server</span><span class="w"> </span><span class="nx">for</span><span class="w"> </span><span class="nx">Adobe</span><span class="w"> </span><span class="nx">Campaign</span><span class="w"> </span><span class="nx">Classic</span><span class="w"> </span><span class="p">(</span><span class="mf">7.3</span><span class="o">.</span><span class="nf">4</span><span class="w"> </span><span class="n">build</span><span class="w"> </span><span class="nx">9364</span><span class="err">@</span><span class="nx">8f3ef8e</span><span class="w"> </span><span class="nx">of</span><span class="w"> </span><span class="nx">09/04/2023</span><span class="p">)</span><span class="w">
</span><span class="mi">16</span><span class="p">:</span><span class="mi">19</span><span class="p">:</span><span class="mi">50</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="n">Starting</span><span class="w"> </span><span class="nx">Web</span><span class="w"> </span><span class="nx">server</span><span class="w"> </span><span class="nx">module</span><span class="w"> </span><span class="p">(</span><span class="n">pid</span><span class="o">=</span><span class="mi">9984</span><span class="p">,</span><span class="w"> </span><span class="n">tid</span><span class="o">=</span><span class="mi">3520</span><span class="p">)</span><span class="o">...</span><span class="w">
</span><span class="mi">16</span><span class="p">:</span><span class="mi">19</span><span class="p">:</span><span class="mi">51</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="n">Tomcat</span><span class="w"> </span><span class="nx">started</span><span class="w">
</span><span class="mi">16</span><span class="p">:</span><span class="mi">19</span><span class="p">:</span><span class="mi">51</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="n">Server</span><span class="w"> </span><span class="nx">started</span><span class="w">
</span><span class="n">PS</span><span class="w"> </span><span class="nx">C:\Users\fco</span><span class="err">></span><span class="w"> </span><span class="nx">net</span><span class="w"> </span><span class="nx">start</span><span class="w"> </span><span class="nx">nlserver6</span><span class="w"> </span><span class="c"># run at startup</span><span class="w">
</span><span class="n">The</span><span class="w"> </span><span class="nx">Adobe</span><span class="w"> </span><span class="nx">Campaign</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="nx">Application</span><span class="w"> </span><span class="nx">Server</span><span class="w"> </span><span class="nx">7.0</span><span class="w"> </span><span class="nx">service</span><span class="w"> </span><span class="nx">is</span><span class="w"> </span><span class="nx">starting.</span><span class="w">
</span><span class="n">The</span><span class="w"> </span><span class="nx">Adobe</span><span class="w"> </span><span class="nx">Campaign</span><span class="w"> </span><span class="o">-</span><span class="w"> </span><span class="nx">Application</span><span class="w"> </span><span class="nx">Server</span><span class="w"> </span><span class="nx">7.0</span><span class="w"> </span><span class="nx">service</span><span class="w"> </span><span class="nx">was</span><span class="w"> </span><span class="nx">started</span><span class="w"> </span><span class="nx">successfully.</span><span class="w">
</span><span class="n">PS</span><span class="w"> </span><span class="nx">C:\Users\fco</span><span class="err">></span><span class="w"> </span><span class="nx">nlserver</span><span class="w"> </span><span class="nx">config</span><span class="w"> </span><span class="nt">-internalpassword</span><span class="w"> </span><span class="c"># change password</span><span class="w">
</span><span class="mi">16</span><span class="p">:</span><span class="mi">24</span><span class="p">:</span><span class="mi">18</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="n">Application</span><span class="w"> </span><span class="nx">server</span><span class="w"> </span><span class="nx">for</span><span class="w"> </span><span class="nx">Adobe</span><span class="w"> </span><span class="nx">Campaign</span><span class="w"> </span><span class="nx">Classic</span><span class="w"> </span><span class="p">(</span><span class="mf">7.3</span><span class="o">.</span><span class="nf">4</span><span class="w"> </span><span class="n">build</span><span class="w"> </span><span class="nx">9364</span><span class="err">@</span><span class="nx">8f3ef8e</span><span class="w"> </span><span class="nx">of</span><span class="w"> </span><span class="nx">09/04/2023</span><span class="p">)</span><span class="w">
</span><span class="n">Enter</span><span class="w"> </span><span class="nx">the</span><span class="w"> </span><span class="nx">current</span><span class="w"> </span><span class="nx">password.</span><span class="w">
</span><span class="n">Password:</span><span class="w"> </span><span class="err"><</span><span class="nx">EMPTY</span><span class="err">></span><span class="w">
</span><span class="n">Enter</span><span class="w"> </span><span class="nx">the</span><span class="w"> </span><span class="nx">new</span><span class="w"> </span><span class="nx">password.</span><span class="w">
</span><span class="n">Password:</span><span class="w"> </span><span class="err"><</span><span class="nx">internal</span><span class="err">></span><span class="w">
</span><span class="n">Confirmation:</span><span class="w"> </span><span class="err"><</span><span class="nx">internal</span><span class="err">></span><span class="w">
</span><span class="mi">16</span><span class="p">:</span><span class="mi">24</span><span class="p">:</span><span class="mi">24</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="n">Password</span><span class="w"> </span><span class="nx">successfully</span><span class="w"> </span><span class="nx">changed</span><span class="w"> </span><span class="nx">for</span><span class="w"> </span><span class="nx">account</span><span class="w"> </span><span class="s1">'internal'</span><span class="w"> </span><span class="p">(</span><span class="n">authentication</span><span class="w"> </span><span class="nx">mode</span><span class="w"> </span><span class="s1">'nl'</span><span class="p">)</span><span class="o">.</span><span class="w">
</span><span class="n">PS</span><span class="w"> </span><span class="nx">C:\Users\fco</span><span class="err">></span><span class="w"> </span><span class="nx">nlserver</span><span class="w"> </span><span class="nx">config</span><span class="w"> </span><span class="nt">-verbose</span><span class="w"> </span><span class="nt">-addinstance</span><span class="p">:</span><span class="nx">instance1/</span><span class="o">*</span><span class="nx">/eng</span><span class="w">
</span><span class="mi">16</span><span class="p">:</span><span class="mi">28</span><span class="p">:</span><span class="mi">23</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="n">Application</span><span class="w"> </span><span class="nx">server</span><span class="w"> </span><span class="nx">for</span><span class="w"> </span><span class="nx">Adobe</span><span class="w"> </span><span class="nx">Campaign</span><span class="w"> </span><span class="nx">Classic</span><span class="w"> </span><span class="p">(</span><span class="mf">7.3</span><span class="o">.</span><span class="nf">4</span><span class="w"> </span><span class="n">build</span><span class="w"> </span><span class="nx">9364</span><span class="err">@</span><span class="nx">8f3ef8e</span><span class="w"> </span><span class="nx">of</span><span class="w"> </span><span class="nx">09/04/2023</span><span class="p">)</span><span class="w">
</span><span class="mi">16</span><span class="p">:</span><span class="mi">28</span><span class="p">:</span><span class="mi">23</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="n">Generating</span><span class="w"> </span><span class="nx">configuration</span><span class="w"> </span><span class="nx">diff</span><span class="w"> </span><span class="nx">file</span><span class="w"> </span><span class="s1">'C:\Program Files\Adobe\Adobe Campaign Classic v7\conf\serverConf.xml.diff'</span><span class="w"> </span><span class="nx">between</span><span class="w"> </span><span class="s1">'C:\Program Files\Adobe\Adobe Campaign Classic v7\conf\serverConf.xml'</span><span class="w"> </span><span class="nx">and</span><span class="w"> </span><span class="s1">'C:\Program Files\Adobe\Adobe Campaign Classic v7\conf\eng\serverConf.xml.sample'</span><span class="o">.</span><span class="w">
</span><span class="mi">16</span><span class="p">:</span><span class="mi">28</span><span class="p">:</span><span class="mi">24</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="n">PInstanceSlot</span><span class="w"> </span><span class="nx">not</span><span class="w"> </span><span class="nx">found</span><span class="w"> </span><span class="nx">for</span><span class="w"> </span><span class="nx">Vault</span><span class="w"> </span><span class="nx">token</span><span class="w"> </span><span class="nx">rotate:</span><span class="w"> </span><span class="nx">overwriting</span><span class="w"> </span><span class="nx">iRc</span><span class="w"> </span><span class="nx">to</span><span class="w"> </span><span class="nx">0</span><span class="w">
</span><span class="mi">16</span><span class="p">:</span><span class="mi">28</span><span class="p">:</span><span class="mi">24</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="n">Skiping</span><span class="w"> </span><span class="nx">call</span><span class="w"> </span><span class="nx">to</span><span class="w"> </span><span class="nx">vault</span><span class="w"> </span><span class="nx">for</span><span class="w"> </span><span class="nx">refreshing</span><span class="w"> </span><span class="nx">the</span><span class="w"> </span><span class="nx">token</span><span class="w">
</span><span class="mi">16</span><span class="p">:</span><span class="mi">28</span><span class="p">:</span><span class="mi">24</span><span class="w"> </span><span class="err">></span><span class="w"> </span><span class="n">Creation</span><span class="w"> </span><span class="nx">of</span><span class="w"> </span><span class="nx">the</span><span class="w"> </span><span class="nx">server</span><span class="w"> </span><span class="nx">configuration</span><span class="w"> </span><span class="nx">file</span><span class="w"> </span><span class="s1">'C:\Program Files\Adobe\Adobe Campaign Classic v7\conf\config-instance1.xml'</span><span class="w"> </span><span class="nx">from</span><span class="w"> </span><span class="s1">'C:\Program Files\Adobe\Adobe Campaign Classic v7\conf\models\config-multi.xml'</span><span class="w">
</span></code></pre></div></div>
<h1 id="configure-the-instance-from-the-console">Configure the instance from the Console</h1>
<p><img src="/assets/images/2023/adobe-campaign-classic-windows-configure-instance.jpg" alt="Instance configuration from the client" /></p>
<p>Start the console from <code class="language-plaintext highlighter-rouge">C:\Users\fco.PC\Neolane\Adobe Campaign Classic v7 Client\bin\nlclient.exe</code>.</p>
<p>Proceed to the Database creation with:</p>
<ul>
<li>Database Creation
<ul>
<li>Database: <code class="language-plaintext highlighter-rouge">PostgreSQL</code></li>
<li>Host: <code class="language-plaintext highlighter-rouge">localhost</code></li>
</ul>
</li>
<li>Server access
<ul>
<li>Account: <code class="language-plaintext highlighter-rouge">postgres</code></li>
<li>Password</li>
</ul>
</li>
<li>Database
<ul>
<li>Database name: <code class="language-plaintext highlighter-rouge">neolane</code></li>
<li><code class="language-plaintext highlighter-rouge">Create a new user account for this database</code></li>
<li>Account: <code class="language-plaintext highlighter-rouge">neolane</code></li>
<li>Password: <code class="language-plaintext highlighter-rouge">neolane</code></li>
</ul>
</li>
<li>Packages to install
<ul>
<li>Delivery</li>
</ul>
</li>
<li>Creation steps
<ul>
<li>Adobe Campaign administrator password: Set or change the password</li>
<li>Password: <code class="language-plaintext highlighter-rouge">admin</code></li>
</ul>
</li>
</ul>
<h1 id="connect-as-admin">Connect as admin</h1>
<p><img src="/assets/images/2023/adobe-campaign-classic-windows-check-pgAdmin.jpg" alt="PostgreSQL SQL request check Adobe Campaign" /></p>
<p>Login with <code class="language-plaintext highlighter-rouge">admin</code>/<code class="language-plaintext highlighter-rouge">admin</code>.</p>
<p>All set!</p>
<p>Create a recipient and check with pgAdmin: <code class="language-plaintext highlighter-rouge">public.nmsrecipient/neolane/postgres@PostgreSQL 14</code></p>
<h1 id="notes">Notes</h1>
<ul>
<li><a href="https://experienceleague.adobe.com/docs/campaign-classic/using/installing-campaign-classic/install-campaign-on-prem/installing-campaign-in-windows-/prerequisites-of-campaign-installation-in-windows.html?lang=en">Official Installation Guide on experienceleague.adobe.com</a></li>
<li><a href="https://experienceleague.adobe.com/docs/campaign-classic/using/installing-campaign-classic/initial-configuration/about-initial-configuration.html?lang=en">Official Deployment Guide on experienceleague.adobe.com</a></li>
<li>Screenshots from a VMWare Windows 11 Virtual Machine (Windows11_22631.2715_Professional_en-us_arm64.iso)</li>
</ul>Florian CourgeySetting up and running Adobe Campaign Classic on a Windows 11 machine significantly facilitates the development process. In this guide, the installation steps will be outlined to simplify the development process on a local computer.Salesforce Getting Started - Awesome List2022-12-13T00:00:00+00:002022-12-13T00:00:00+00:00https://blog.floriancourgey.com/2022/12/salesforce-getting-started-awesome-list<p class="text-center">πππ</p>
<!--more-->
<h2 id="title">Title</h2>
<ul>
<li>https://perm-comparator.herokuapp.com/</li>
<li></li>
</ul>Florian CourgeyπππSalesforce Marketing Cloud SQL data model2022-11-09T00:00:00+00:002022-11-09T00:00:00+00:00https://blog.floriancourgey.com/2022/11/salesforce-marketing-cloud-sql-data-model<p class="text-center">πππ</p>
<!--more-->
<h2 id="standard-tables">Standard tables</h2>
<div class="language-console highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="go">_Subscribers: SubscriberID, SubscriberKey, EmailAddress, Status, SubscriberType, DateJoined, DateUndeliverable, DateUnsubscribed (https://help.salesforce.com/s/articleView?id=sf.mc_as_data_view_subscribers.htm&type=5)
_bounce
_Click: SubscriberID, JobID, EventDate, URL, LinkName (https://help.salesforce.com/s/articleView?id=sf.mc_as_data_view_click.htm&type=5)
_Open
_Complaint
_Journey
</span></code></pre></div></div>
<h2 id="salesforce-join-help">Salesforce JOIN help</h2>
<ul>
<li><a href="https://trailhead.salesforce.com/fr/content/learn/modules/marketing-cloud-data-management/query-data-with-sql">Trailhead Query Data with SQL</a></li>
</ul>
<h2 id="salesforce-service-data-model-with-connector">Salesforce Service data model with connector</h2>
<p>In Salesforce Service Cloud, the connector creates the following data model:</p>
<div class="language-console highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="go">et4ae5__abTest__c
et4ae5__AggregateLink__c
et4ae5__Automated_Send__c
et4ae5__Business_Unit__c
et4ae5__Campaign_Member_Configuration__c
et4ae5__Configuration__c
et4ae5__Email_Linkage__c
et4ae5__IndividualEmailResult__c: et4ae5__Contact__c, et4ae5__SendDefinition__c, et4ae5__TriggeredSendDefinition__c, et4ae5__DateSent__c, et4ae5__DateOpened__c, et4ae5__Opened__c, et4ae5__NumberOfUniqueClicks__c, et4ae5__Clicked__c, et4ae5__DateBounced__c, et4ae5__DateUnsubscribed__c
et4ae5__IndividualLink__c
et4ae5__Journey__c
et4ae5__MC_CDC_Journey__c
et4ae5__SendDefinition__c
et4ae5__SendJunction__c
et4ae5__SMSDefinition__c
et4ae5__SMSJunction__c
et4ae5__SupportRequest__c
et4ae5__Triggered_Send_Execution__c
et4ae5__UEBU__c
</span></code></pre></div></div>Florian CourgeyπππSalesforce Marketing Cloud REST API for external calls (SOAP UI, Postman..)2022-08-18T00:00:00+00:002022-08-18T00:00:00+00:00https://blog.floriancourgey.com/2022/08/salesforce-marketing-cloud-rest-api<p class="text-center">πππ</p>
<!--more-->
<h2 id="get-token">Get token</h2>
<ol>
<li>Create client id & secret on Installed Packages>Components βAPI Integrationβ <code class="language-plaintext highlighter-rouge">/cloud/#app/Setup/InstalledPackages</code></li>
<li>Create a request with parameters from Step #1, endpoint <code class="language-plaintext highlighter-rouge">https://xxx.auth.marketingcloudapis.com/v2/token</code> and the following body:</li>
</ol>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
</span><span class="nl">"grant_type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"client_credentials"</span><span class="p">,</span><span class="w">
</span><span class="nl">"client_id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"[client id]"</span><span class="p">,</span><span class="w">
</span><span class="nl">"client_secret"</span><span class="p">:</span><span class="w"> </span><span class="s2">"[client secret]"</span><span class="p">,</span><span class="w">
</span><span class="nl">"scope"</span><span class="p">:</span><span class="w"> </span><span class="s2">"email_read email_write email_send"</span><span class="p">,</span><span class="w">
</span><span class="nl">"account_id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"[account id]"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>
<p>Response:</p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
</span><span class="nl">"access_token"</span><span class="p">:</span><span class="w"> </span><span class="s2">"eyJhbGciOiJIUzI1NiIsxxx"</span><span class="p">,</span><span class="w">
</span><span class="nl">"token_type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Bearer"</span><span class="p">,</span><span class="w">
</span><span class="nl">"expires_in"</span><span class="p">:</span><span class="w"> </span><span class="mi">1079</span><span class="p">,</span><span class="w">
</span><span class="nl">"scope"</span><span class="p">:</span><span class="w"> </span><span class="s2">"email_read email_write email_send"</span><span class="p">,</span><span class="w">
</span><span class="nl">"soap_instance_url"</span><span class="p">:</span><span class="w"> </span><span class="s2">"https://xxx.soap.marketingcloudapis.com/"</span><span class="p">,</span><span class="w">
</span><span class="nl">"rest_instance_url"</span><span class="p">:</span><span class="w"> </span><span class="s2">"https://xxx.rest.marketingcloudapis.com/"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>
<h2 id="rest-call">REST Call</h2>
<ol>
<li>Create another request with the endpoint set as the previous <code class="language-plaintext highlighter-rouge">rest_instance_url</code></li>
<li>Use below request with endpoint <code class="language-plaintext highlighter-rouge">[rest_instance_url]messaging/v1/email/messages/</code></li>
</ol>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
</span><span class="nl">"definitionKey"</span><span class="p">:</span><span class="w"> </span><span class="s2">"[transactionalDefKey]"</span><span class="p">,</span><span class="w">
</span><span class="nl">"recipients"</span><span class="p">:</span><span class="w"> </span><span class="p">[{</span><span class="w">
</span><span class="nl">"contactKey"</span><span class="p">:</span><span class="w"> </span><span class="s2">"[contactId]"</span><span class="p">,</span><span class="w">
</span><span class="nl">"to"</span><span class="p">:</span><span class="w"> </span><span class="s2">"[contactEmail]"</span><span class="p">,</span><span class="w">
</span><span class="nl">"attributes"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w">
</span><span class="nl">"FirstName"</span><span class="p">:</span><span class="w"> </span><span class="s2">"John"</span><span class="p">,</span><span class="w">
</span><span class="nl">"LastName"</span><span class="p">:</span><span class="w"> </span><span class="s2">"Doe"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">}]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>
<p>Response:</p>
<div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w">
</span><span class="nl">"requestId"</span><span class="p">:</span><span class="w"> </span><span class="s2">"xxx"</span><span class="p">,</span><span class="w">
</span><span class="nl">"errorcode"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w">
</span><span class="nl">"responses"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w">
</span><span class="p">{</span><span class="w">
</span><span class="nl">"messageKey"</span><span class="p">:</span><span class="w"> </span><span class="s2">"xxx"</span><span class="w">
</span><span class="p">}</span><span class="w">
</span><span class="p">]</span><span class="w">
</span><span class="p">}</span><span class="w">
</span></code></pre></div></div>Florian CourgeyπππVisualforce Cheatsheet for Salesforce Sales & Service2022-02-02T00:00:00+00:002022-02-02T00:00:00+00:00https://blog.floriancourgey.com/2022/02/salesforce-visualforce-cheatsheet<p class="text-center">πππ</p>
<!--more-->
<h2 id="list-n-records">List N records</h2>
<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt"><apex:page</span> <span class="na">showHeader=</span><span class="s">"false"</span> <span class="na">sidebar=</span><span class="s">"false"</span> <span class="na">id=</span><span class="s">"page"</span>
<span class="na">lightningStylesheets=</span><span class="s">"true"</span> <span class="na">showQuickActionVfHeader=</span><span class="s">"false"</span>
<span class="na">standardController=</span><span class="s">"Campaign"</span> <span class="na">recordSetvar=</span><span class="s">"campaigns"</span><span class="nt">></span>
<span class="nt"><apex:slds</span> <span class="nt">/></span>
<span class="nt"><apex:param</span> <span class="na">value=</span><span class="s">"Clienteling_Campaigns"</span> <span class="na">assignTo=</span><span class="s">"{!selectedFilterId}"</span> <span class="na">name=</span><span class="s">"selectedFilterId"</span><span class="nt">/></span>
<span class="nt"><apex:variable</span> <span class="na">var=</span><span class="s">"campaignsSize"</span> <span class="na">value=</span><span class="s">"{!0}"</span><span class="nt">/></span>
<span class="nt"><apex:repeat</span> <span class="na">var=</span><span class="s">"c"</span> <span class="na">value=</span><span class="s">"{!campaigns}"</span> <span class="na">id=</span><span class="s">"campaigns"</span><span class="nt">></span>
<span class="nt"><apex:variable</span> <span class="na">var=</span><span class="s">"campaignsSize"</span> <span class="na">value=</span><span class="s">"{!(campaignsSize+ 1)}"</span><span class="nt">/></span>
<span class="c"><!--<apex:outputLink value="{!URLFOR($Action.Campaign.View, c.id)}">--></span>
<span class="nt"><apex:outputLink</span> <span class="na">value=</span><span class="s">"{!URLFOR($Page.Clienteling_Details, null, [Id=c.id])}"</span><span class="nt">></span>
{!c.Name}
<span class="nt"><apex:outputText</span> <span class="na">value=</span><span class="s">"{0,date,dd/MM/yyyy} - {1,date,dd/MM/yyyy}"</span><span class="nt">></span>
<span class="nt"><apex:param</span> <span class="na">value=</span><span class="s">"{!c.StartDate}"</span><span class="nt">/></span>
<span class="nt"><apex:param</span> <span class="na">value=</span><span class="s">"{!c.EndDate}"</span><span class="nt">/></span>
<span class="nt"></apex:outputText></span>
<span class="nt"></apex:outputLink></span>
<span class="nt"></apex:repeat></span>
<span class="nt"></apex:page></span>
</code></pre></div></div>
<h2 id="details-for-1-record">Details for 1 record</h2>
<div class="language-html highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt"><apex:page</span> <span class="na">showHeader=</span><span class="s">"false"</span> <span class="na">sidebar=</span><span class="s">"false"</span> <span class="na">id=</span><span class="s">"page"</span>
<span class="na">lightningStylesheets=</span><span class="s">"true"</span> <span class="na">showQuickActionVfHeader=</span><span class="s">"false"</span>
<span class="na">standardController=</span><span class="s">"Campaign"</span> <span class="na">extensions=</span><span class="s">"MyCampaignController"</span><span class="nt">></span>
<span class="nt"><apex:repeat</span> <span class="na">value=</span><span class="s">"{!Campaign.CombinedAttachments}"</span> <span class="na">var=</span><span class="s">"attach"</span><span class="nt">></span>
<span class="nt"><div</span> <span class="na">style=</span><span class="s">"margin:4px 0;"</span><span class="nt">></span>
<span class="nt"><a</span> <span class="na">href=</span><span class="s">"/lightning/r/ContentDocument/{!attach.Id}/view"</span><span class="nt">></span>{!attach.Title}.{!attach.FileExtension} ({!attach.FileType})<span class="nt"></a></span>
<span class="nt"></div></span>
<span class="nt"></apex:repeat></span>
<span class="nt"></apex:page></span>
</code></pre></div></div>Florian CourgeyπππProject Management Checklist2022-01-25T00:00:00+00:002022-01-25T00:00:00+00:00https://blog.floriancourgey.com/2022/01/project-management-checklist<p>Get things done</p>
<p class="text-center">β
β¨π₯</p>
<!--more-->
<h2 id="overall-project">Overall project</h2>
<ul>
<li>Design & Conception
<ul>
<li>Overall conception: kickoff</li>
<li>Detailed conception: workshops for detailed specs: reference, mapping</li>
</ul>
</li>
<li>Implementation
<ul>
<li>Development</li>
<li>Technical tests: Unit tests, Integration tests</li>
</ul>
</li>
<li>UAT Validation & Go live
<ul>
<li>Power Users training</li>
<li>Power Users Acceptance Tests (UAT): user stories</li>
<li>UAT validation: Go/no go</li>
<li>Go live checklist: pre go-live (migration, users creation, licenses), post go-live (documentation, end-users training, support)</li>
</ul>
</li>
</ul>
<h2 id="x">x</h2>Florian CourgeyGet things done β
β¨π₯Salesforce Service Cloud synchronization to Git repository2022-01-04T00:00:00+00:002022-01-04T00:00:00+00:00https://blog.floriancourgey.com/2022/01/salesforce-service-sync-to-git<p class="text-center">π©οΈππ</p>
<!--more-->
<h2 id="overview">Overview</h2>
<h2 id="architecture">Architecture</h2>
<h2 id="instructions">Instructions</h2>
<h3 id="prerequisites">Prerequisites</h3>
<ul>
<li>Basic linux knowledge (check <a href="/2018/12/unix-cheatsheet">LINUX cheatshet</a> for help)</li>
<li>Basic Salesforce knowledge (check <a href="2021/06/salesforce-apex-cheatsheet">Apex cheatsheet</a> for help)</li>
<li>SFSC instance</li>
<li>SFSC User granted with permissions: ModifyMetadata (otherwise INSUFFICIENT_ACCESS error), Author Apex (otherwise βEntity type βApexClassβ is not available in this organizationβ error)</li>
<li>Github.com account</li>
<li>Basic git knowledge</li>
</ul>
<h3 id="setup-from-personal-pc">Setup from Personal PC</h3>
<ul>
<li>From browser, create an empty Git repo βmyinstance-repoβ</li>
<li>From ~/</li>
</ul>
<div class="language-console highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="gp">$</span><span class="w"> </span>sfdx force:auth:web:login <span class="nt">-r</span> https://test.salesforce.com <span class="c"># authorize Org</span>
<span class="go">Successfully authorized myinstance_username with org ID 00xxxxxxXXXxx
</span><span class="gp">$</span><span class="w"> </span>git clone git-username@myinstance-repo <span class="c"># pull git repo</span>
<span class="gp">$</span><span class="w"> </span>sfdx force:project:create <span class="nt">-n</span> myinstance-repo <span class="c"># init sf project into repo</span>
<span class="gp">$</span><span class="w"> </span><span class="nb">cd </span>myinstance-repo <span class="o">&&</span> git status
<span class="gp">$</span><span class="w"> </span><span class="nb">mkdir </span>manifest
<span class="gp">$</span><span class="w"> </span>vim manifest/package.xml <span class="c"># create package</span>
<span class="go">get from https://blog.floriancourgey.com/2021/10/salesforce-retrieve-all-code-from-org
</span><span class="gp">$</span><span class="w"> </span>git add <span class="nb">.</span> <span class="o">&&</span> git commit <span class="nt">-m</span> <span class="s2">"sfdx project"</span> <span class="o">&&</span> git push
<span class="gp">$</span><span class="w"> </span>sfdx force:org:display <span class="nt">-u</span> myinstance_username <span class="nt">--verbose</span> <span class="nt">--json</span>
<span class="go">{
"status": 0,
"result": {
"id": "00 [...]
}
</span></code></pre></div></div>
<h3 id="setup-for-automatic-backups-from-headless-vm">Setup for automatic backups from headless VM</h3>
<p>From ~/</p>
<div class="language-console highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="gp">$</span><span class="w"> </span>vim authFile.json
<span class="go">paste JSON data from Personal PC
</span><span class="gp">$</span><span class="w"> </span><span class="nb">export </span><span class="nv">SFDX_USE_GENERIC_UNIX_KEYCHAIN</span><span class="o">=</span><span class="nb">true</span> <span class="c"># to bypass SFDX usage of gnome-keyring (errors: X11 $DISPLAY, secret-tool org.freedesktop.Secret.Error.IsLocked)</span>
<span class="gp">$</span><span class="w"> </span>sfdx force:auth:sfdxurl:store <span class="nt">-f</span> authFile.json
<span class="go">Successfully authorized myinstance_username with org ID 00xxxXXXXXxxXXXX
</span><span class="gp">$</span><span class="w"> </span><span class="nb">rm </span>authFile.json
<span class="gp">$</span><span class="w"> </span>git clone git-username@myinstance-repo
<span class="gp">$</span><span class="w"> </span><span class="nb">cd </span>myinstance-repo
<span class="gp">$</span><span class="w"> </span>sfdx force:source:retrieve <span class="nt">-u</span> myinstance_username <span class="nt">-x</span> manifest/package.xml
<span class="gp">$</span><span class="w"> </span>git add <span class="nb">.</span> <span class="o">&&</span> git commit <span class="nt">-m</span> <span class="s2">"package"</span> <span class="o">&&</span> git push
</code></pre></div></div>
<h3 id="multi-instance-setup">Multi-instance setup</h3>
<div class="language-console highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="go">~/
.sfdx/
alias.json
instance1_preprod.json
instance1_prod.json
instance2_preprod.json
instance2_prod.json
instance1-preprod/
.git/ connected to repo1 @ preprod
force-app/
instance1-prod/
.git/ connected to repo1 @ main
force-app/
instance2-preprod/
.git/ connected to repo2 @ preprod
force-app/
instance2-prod/
.git/ connected to repo2 @ main
force-app/
</span></code></pre></div></div>
<h3 id="make-it-recurrent-with-cron-jobs">Make it recurrent with CRON jobs</h3>
<div class="language-console highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="gp">$</span><span class="w"> </span>vim cronjobs.bash
<span class="gp">#</span><span class="o">!</span>/bin/bash
<span class="go">export SFDX_USE_GENERIC_UNIX_KEYCHAIN=true
githubToken="insert_your_github_token"
</span><span class="gp">case $</span>1 <span class="k">in</span>
<span class="go"> instance1-preprod)
</span><span class="gp"> cd ~/instance1-preprod && ~/sfdx/bin/sfdx force:source:retrieve -u user1@instance1-preprod -x manifest/package.xml && git add . && git commit -m "$</span><span class="o">(</span><span class="nb">date</span> +%Y-%m-%d_%H:%M:%S<span class="o">)</span><span class="s2">" && git push https://</span><span class="nv">$githubToken</span><span class="s2">@github.com/MY_ORG/INSTANCE1
</span><span class="gp"> ;</span><span class="s2">;
</span><span class="go"> instance1-prod)
</span><span class="gp"> cd ~/instance1-prod && ~/sfdx/bin/sfdx force:source:retrieve -u user1@instance1-prod -x manifest/package.xml && git add . && git commit -m "$</span><span class="o">(</span><span class="nb">date</span> +%Y-%m-%d_%H:%M:%S<span class="o">)</span><span class="s2">" && git push https://</span><span class="nv">$githubToken</span><span class="s2">@github.com/MY_ORG/INSTANCE1
</span><span class="gp"> ;</span><span class="s2">;
</span><span class="gp">$</span><span class="w"> </span><span class="s2">chmod +x cronjobs.bash
</span><span class="gp">$</span><span class="w"> </span><span class="s2">./cronjobs.bash instance1-preprod # test
</span><span class="gp">$</span><span class="w"> </span><span class="s2">crontab -e
</span><span class="go">20 * * * * ~/cronjobs.bash instance1-preprod
25 * * * * ~/cronjobs.bash instance1-prod
</span></code></pre></div></div>
<p>This will automatically generates commits like <code class="language-plaintext highlighter-rouge">2022-12-27_16:30:07</code> for both preprod & prod.</p>Florian Courgeyπ©οΈππEmail Authentication with SPF and DKIM configuration2021-12-07T00:00:00+00:002021-12-07T00:00:00+00:00https://blog.floriancourgey.com/2021/12/dkim-spf-email-authentication-security-sender<p class="text-center">πππ</p>
<!--more-->
<h2 id="dkim--spf-definition">DKIM & SPF Definition</h2>
<p>DKIM & SPF keys are an Email Authentication method used between servers to approve the Senderβs Identity and prevent phishing & spam.</p>
<p>When server1.com sends an email from server1.com to server2.com, server2 will check if server1.com keys match based on DNS records, registered as TXT entries:</p>
<ul>
<li>For SPF, on server1.com</li>
<li>For DKIM, on selector._domainkey.server1.com</li>
</ul>
<p>To debug the keys configuration, use an online tool such as https://www.mail-tester.com/spf-dkim-check or from the console:</p>
<h3 id="spf-debug">SPF debug</h3>
<div class="language-console highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="gp">$</span><span class="w"> </span>dig server1.com txt
<span class="go">
</span></code></pre></div></div>
<h3 id="dkim-debug">DKIM debug</h3>
<div class="language-console highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="gp">$</span><span class="w"> </span>dig selector._domainkey.server1.com
</code></pre></div></div>
<h2 id="on-salesforce">On Salesforce</h2>Florian CourgeyπππRetrieve all source code from Salesforce Sales & Service via VS Code2021-10-04T00:00:00+00:002021-10-04T00:00:00+00:00https://blog.floriancourgey.com/2021/10/salesforce-retrieve-all-code-from-org<p class="text-center">πππ</p>
<!--more-->
<h2 id="requirements">Requirements</h2>
<ul>
<li>a Salesforce org with admin access</li>
<li>VS Code with SFDX extension</li>
</ul>
<h2 id="authorize-an-org">Authorize an Org</h2>
<p>From VS Code, <code class="language-plaintext highlighter-rouge">Ctrl</code>+<code class="language-plaintext highlighter-rouge">Shift</code>+<code class="language-plaintext highlighter-rouge">P</code> to open the Palette menu, then <code class="language-plaintext highlighter-rouge">SFDX: Authorize an Org</code>. It will open up the default browser to login.</p>
<p>VS Code <code class="language-plaintext highlighter-rouge">Output</code> tab will show:</p>
<div class="language-console highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="go">Starting SFDX: Authorize an Org
15:11:51.709 sfdx force:auth:web:login --setalias myorg --instanceurl https://myorg.my.salesforce.com --setdefaultusername
Successfully authorized fcourgey@example.com with org ID 0000000000000000
You may now close the browser
15:12:12.217 sfdx force:auth:web:login --setalias myorg --instanceurl https://myorg.my.salesforce.com --setdefaultusername
ended with exit code 0
</span></code></pre></div></div>
<h2 id="retrieve-the-source-code">Retrieve the source code</h2>
<p>Create <code class="language-plaintext highlighter-rouge">/manifest/package.xml</code> with below content, then Right Click on <code class="language-plaintext highlighter-rouge">package.xml</code>><code class="language-plaintext highlighter-rouge">SFDX: Retrieve Source in Manifest from Org</code>:</p>
<p>Output:</p>
<div class="language-console highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="go">15:13:23.156 Starting SFDX: Retrieve Source from Org
=== Retrieved Source
FULL NAME TYPE PROJECT PATH
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ ββββββββββββββββββββββββ
</span></code></pre></div></div>
<p><code class="language-plaintext highlighter-rouge">/manifest/package.xml</code>:</p>
<div class="language-xml highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp"><?xml version="1.0" encoding="UTF-8" ?></span>
<span class="nt"><Package</span> <span class="na">xmlns=</span><span class="s">"http://soap.sforce.com/2006/04/metadata"</span><span class="nt">></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>ApexClass<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>ApexComponent<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>ApexPage<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>ApexTrigger<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>AssignmentRule<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>AuraDefinitionBundle<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>AuthProvider<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>BrandingSet<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>CallCenter<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>CampaignInfluenceModel<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>CleanDataService<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>Community<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>CompactLayout<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>ConnectedApp<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>CorsWhitelistOrigin<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>CustomApplication<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>CustomField<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>CustomNotificationType<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>CustomObject<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>CustomSite<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>CustomTab<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>Dashboard<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>Document<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>DuplicateRule<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>EmailServicesFunction<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>EmailTemplate<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>EscalationRule<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>FlexiPage<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>Flow<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>FlowDefinition<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>Group<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>HomePageLayout<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>Layout<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>Letterhead<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>LightningComponentBundle<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>LightningExperienceTheme<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>ListView<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>MatchingRule<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>MatchingRules<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>PathAssistant<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>PermissionSet<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>PlatformCachePartition<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>Profile<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>ProfilePasswordPolicy<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>ProfileSessionSetting<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>Queue<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>QuickAction<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>RecordType<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>RemoteSiteSetting<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>Report<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>ReportType<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>Role<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>SharingRules<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>StaticResource<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>TopicsForObjects<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>TransactionSecurityPolicy<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>ValidationRule<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>WebLink<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>WorkflowAlert<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>WorkflowFieldUpdate<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><types></span>
<span class="nt"><members></span>*<span class="nt"></members></span>
<span class="nt"><name></span>WorkflowRule<span class="nt"></name></span>
<span class="nt"></types></span>
<span class="nt"><version></span>47.0<span class="nt"></version></span>
<span class="nt"></Package></span>
</code></pre></div></div>Florian CourgeyπππCertified as Adobe Community Advisor for 2021-20222021-09-08T00:00:00+00:002021-09-08T00:00:00+00:00https://blog.floriancourgey.com/Adobe-MVP-Community-Advisor-Florian-Courgey<p>After many years of contribution to the Adobe Cloud ecosystem, especially Adobe Campaign, Iβve been nominated and certified as an βAdobe Community Advisorβ at LVMH for 2021 and 2022! Read more to know about the Adobe Influencer Swag!</p>
<p class="text-center">ππππ</p>
<!--more-->
<h2 id="adobe-community-advisor-2021-announcement">Adobe Community Advisor 2021 announcement</h2>
<p>Adobe announced on September 2, 2021 the public list of the 80 official Adobe Advisors in a <a href="https://blog.adobe.com/en/publish/2021/09/02/introducing-the-2021-adobe-community-advisors.html">post on their own blog</a>.</p>
<p>The Adobe Experience League has been created to promote sharing between Experts, Beginners, End-Users & Admins for Adobe Experience Cloud Products. Itβs a common place where one can find Help, Training and Community on <a href="https://business.adobe.com/products/campaign/adobe-campaign.html">Adobe Campaign</a>, <a href="https://business.adobe.com/products/target/adobe-target.html">Adobe Target</a> and <a href="https://business.adobe.com/products/analytics/adobe-analytics.html">Adobe Analytics</a> (to name a few..).</p>
<p>Iβve helped many Business & Personal customers in any way I could during the past years for the CRM Product Adobe Campaign. Get to know more about <a href="/awesome-adobe-campaign">Adobe Campaign on this blog</a>!</p>
<p>After many posts, answers & ideas, my profile is now listed among Advisors from different Tech Companies such as Expedia, Vimeo and Capegemini:</p>
<p><img src="/assets/images/2021/adobe-mvp-community-advisor-post.jpg" alt="Florian Courgey at LVMH as a 2021 Adobe Community Advisors" /></p>
<p><em>Source: <a href="https://blog.adobe.com/en/publish/2021/09/02/introducing-the-2021-adobe-community-advisors.html">Adobe blog: Introducing the 2021 Adobe Community Advisors</a></em></p>
<p>Iβm also featured on the Experience League Community Advisors Page on Paris/New York Location across EMEA:</p>
<p><img src="/assets/images/2021/adobe-mvp-community-advisor-experience.png" alt="Florian Courgey in EMEA on Experience League" /></p>
<p><em>Source: <a href="https://experienceleaguecommunities.adobe.com/t5/custom/page/page-id/communityadvisors">Adobe Experience: Welcome to the Community Advisors Program</a></em></p>
<h2 id="previous-adobe-mvp-2020-nomination">Previous Adobe MVP 2020 Nomination</h2>
<p>This 2021 βAdobe Community Advisorβ Nomination follows the 2020 Nomination as an βAdobe MVPβ with a dedicated <a href="https://experienceleaguecommunities.adobe.com/t5/adobe-campaign-classic/announcement-meet-our-new-talented-adobe-experience-league-mvps/m-p/379553">blog post on the Experience League</a>.</p>
<p><img src="/assets/images/2021/adobe-mvp-2020-announcement.png" alt="The 2021 Announcement as Adobe MVP" /></p>
<p><em>Source: <a href="https://experienceleaguecommunities.adobe.com/t5/adobe-campaign-classic/announcement-meet-our-new-talented-adobe-experience-league-mvps/m-p/379553">Adobe Experience: (Announcement) Meet our new talented Adobe Experience League MVPs from Campaign Community (September 2020)</a></em></p>
<h2 id="influencer-swag">Influencer Swag</h2>
<p>Part of this exciting new role is the Status of a true Digital Influencer! I was so surprised to receive my Adobe Certificate along with a <a href="https://nordace.com/fr/product/nordace-siena-smart-backpack/">Nordace Siena backpack</a> and an engraved Water Bottle from <a href="https://www.elementalbottles.com/">Elemental</a>!</p>
<p><img src="/assets/images/2021/adobe-mvp-community-advisor-swag.jpg" alt="Adobe Community Swag parcel from Portland, US" /></p>
<p><img src="/assets/images/2021/adobe-mvp-elemental-water-bottle.jpg" alt="Closeup on the Elemental engraved bottle" /></p>
<p><img src="/assets/images/2021/adobe-mvp-nordace-backpack-details.jpg" alt="Closeup on the Nordace backpack details" /></p>
<p><img src="/assets/images/2021/adobe-mvp-nordace-backpack-mac.jpg" alt="The Nordace backpack with its charging port to a Macbook" /></p>
<p><img src="/assets/images/2021/adobe-shipping-to-Florian-Courgey.jpg" alt="Yes, it has been shipped directly to my mailbox" /></p>
<p>Big Thanks to the Adobe Community & Staff!</p>
<p><em>You may find all Adobe Campaign related tutorials on this website @ <a href="/categories?id=adobe campaign">Adobe Campaign Category</a></em></p>Florian CourgeyAfter many years of contribution to the Adobe Cloud ecosystem, especially Adobe Campaign, Iβve been nominated and certified as an βAdobe Community Advisorβ at LVMH for 2021 and 2022! Read more to know about the Adobe Influencer Swag!