<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Egil Hansen&apos;s .com</title>
    <description>Distinguished Developer at Delegate, Microsoft MVP, international speaker, and creator of bUnit. Dane living in Iceland.
</description>
    <link>https://egilhansen.com/</link>
    <atom:link href="https://egilhansen.com/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Sun, 08 Sep 2024 14:46:46 +0000</pubDate>
    <lastBuildDate>Sun, 08 Sep 2024 14:46:46 +0000</lastBuildDate>
    <generator>Jekyll v3.10.0</generator>
    
      <item>
        <title>Blazor Server: Stream large amount of data to JavaScript with cancellation</title>
        <description>&lt;p&gt;In a recent Blazor Server (.NET 8) project I needed to send a large amount of data to Plotly.js (+ 50 MB of data). Blazor already have &lt;a href=&quot;https://learn.microsoft.com/en-us/aspnet/core/blazor/javascript-interoperability/call-javascript-from-dotnet?view=aspnetcore-8.0#stream-from-net-to-javascript&quot;&gt;support for streaming data from .NET to JavaScript&lt;/a&gt;, however, I wanted to also add support for compression of the data that is sent and cancellation of an ongoing stream of data, in case the user changes their mind and wants to view a different set of data, before the current set of data has been sent.&lt;/p&gt;

&lt;!--break--&gt;

&lt;p&gt;To eanble compression and cancellation, the following is needed:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Custom JavaScript that can handle decompression and cancellation on the client side of things (&lt;a href=&quot;https://github.com/egil/BlazorServerStreamingToJavaScript/blob/master/wwwroot/streamingDataJsInterop.js&quot;&gt;streamingDataJsInterop.js&lt;/a&gt;).&lt;/li&gt;
  &lt;li&gt;A new .NET type that handles the serialization and compression of data, and cancellation from the server (&lt;a href=&quot;https://github.com/egil/BlazorServerStreamingToJavaScript/blob/master/Streaming/StreamingDataJsInterop.cs&quot;&gt;StreamingDataJsInterop.cs&lt;/a&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;StreamingDataJsInterop&lt;/code&gt; type will allow one active stream of data to be send at the time. Sending new data cancelled any active data streaming before sending the new data. If you want multiple streams of data concurrently, just instantiate as many &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;StreamingDataJsInterop&lt;/code&gt; as you need.&lt;/p&gt;

&lt;h3 id=&quot;setup&quot;&gt;Setup&lt;/h3&gt;

&lt;p&gt;Include the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;streamingDataJsInterop.js&lt;/code&gt; in your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;wwwroot&lt;/code&gt; and add a script reference in your &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;App.razor&lt;/code&gt; after &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;_framework/blazor.web.js&lt;/code&gt;, e.g.:&lt;/p&gt;

&lt;div class=&quot;language-html highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;script &lt;/span&gt;&lt;span class=&quot;na&quot;&gt;src=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;_framework/blazor.web.js&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;script &lt;/span&gt;&lt;span class=&quot;na&quot;&gt;src=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;streamingDataJsInterop.js&quot;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Then, add the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;StreamingDataJsInterop.cs&lt;/code&gt; to your project, and now you can use it in your components, e.g.:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-razor&quot;&gt;@implements IDisposable
@inject IJSRuntime JSRuntime

&amp;lt;!-- ... --&amp;gt; 

@code {
    private StreamingDataJsInterop streamingDataJsInterop = default!;

    protected override void OnInitialized()
    {
        streamingDataJsInterop = new StreamingDataJsInterop(JSRuntime);
    }

    public void Dispose()
    {
        streamingDataJsInterop.Dispose();
    }

    private async Task SendStreamingData()
    {
        var data = // get data from somewhere 
        try
        {
            await streamingDataJsInterop.InvokeStreamingAsync(
                &quot;receiveStreamingData&quot;,
                data);
        catch (OperationCanceledException)
        {
            // sending was cancelled...
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Then, add the JavaScript function that should be receive the streamed data, e.g.:&lt;/p&gt;

&lt;div class=&quot;language-js highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;async&lt;/span&gt; &lt;span class=&quot;kd&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;receiveStreamingData&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;streamRef&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;try&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;kd&quot;&gt;const&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;data&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;await&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;streamRef&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;getData&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;catch&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;err&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;c1&quot;&gt;// streaming was cancelled from the server.&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;There is a complete sample available on here: &lt;a href=&quot;https://github.com/egil/BlazorServerStreamingToJavaScript&quot;&gt;github.com/egil/BlazorServerStreamingToJavaScript&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Hope this help!&lt;/p&gt;
</description>
        <pubDate>Wed, 04 Sep 2024 00:00:00 +0000</pubDate>
        <link>https://egilhansen.com/2024/09/04/compressed-json-streaming-with-cancellation-from-in-blazor-server/</link>
        <guid isPermaLink="true">https://egilhansen.com/2024/09/04/compressed-json-streaming-with-cancellation-from-in-blazor-server/</guid>
        
        
      </item>
    
      <item>
        <title>SSIS: Using ASCII control characters anywhere in a SSIS package will break it</title>
        <description>&lt;p&gt;I noticed this oddity when I was reading a CSV file using SSIS. Sometimes the source file would have a the ASCII SUB control character in the first column on the last line of the file (see screenshot below):&lt;/p&gt;

&lt;!--break--&gt;

&lt;p&gt;&lt;img src=&quot;/assets/ssis-control-character-breaks-things.png&quot; alt=&quot;ASCII SUB control character from .csv file&quot; /&gt;&lt;/p&gt;

&lt;p&gt;My first attempt to remove the line from Data Flow pipeline was to add a Conditional Split transformation to the Data Flow task. There, I checked if the first column was equal to the character, as seen in the screenshot below.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/ssis-control-character-breaks-things-conditional-split-fail.png&quot; alt=&quot;Filtering away rows with a ASCII SUB control character in the first column&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The editor did not complain, however, when I tried to execute the task, nothing happened. After few frustrating minutes I tried to restart Visual Studio, but when I reopened my package and looked in my Data Flow task, it was completely empty.&lt;/p&gt;

&lt;p&gt;My guess is that adding any &lt;a href=&quot;http://www.robelle.com/smugbook/ascii.html&quot;&gt;ASCII control character&lt;/a&gt;, i.e. non-printing character, to somewhere in a SSIS package will caused the XML engine in Visual Studio to choke, and the result was that nothing was saved to my packaged .dtsx file.&lt;/p&gt;

&lt;p&gt;So how do we use ASCII control characters in SSIS. The right (and now obvious) approach is to use the &lt;a href=&quot;https://msdn.microsoft.com/en-us/library/ms137696.aspx&quot;&gt;CODEPOINT&lt;/a&gt; and lookup number of the ASCII control character we want to match with in an &lt;a href=&quot;http://www.robelle.com/smugbook/ascii.html&quot;&gt;ASCII table&lt;/a&gt;, e.g.:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/ssis-control-character-breaks-things-conditional-split-works.png&quot; alt=&quot;Filtering away rows with a ASCII SUB control character in the first column using the CODEPOINT function&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Hope this help!&lt;/p&gt;
</description>
        <pubDate>Thu, 13 Aug 2015 00:00:00 +0000</pubDate>
        <link>https://egilhansen.com/2015/08/13/ssis-using-ascii-control-characters-anywhere-in-SSIS-package-will-break-it/</link>
        <guid isPermaLink="true">https://egilhansen.com/2015/08/13/ssis-using-ascii-control-characters-anywhere-in-SSIS-package-will-break-it/</guid>
        
        
      </item>
    
      <item>
        <title>SSIS: Lookup Transform not finding expected match with NULL values</title>
        <description>&lt;p&gt;If you use the Lookup Transform to perform lookups with columns that can be NULL, the Lookup Transform will fail to find expected matches because in a database world, &lt;a href=&quot;http://stackoverflow.com/questions/1843451/why-does-null-null-evaluate-to-false-in-sql-server#answer-1843460&quot;&gt;NULL does not equal NULL&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So how do we make the Lookup Transform match as expected when source column and lookup column can be NULL? We use &lt;a href=&quot;https://msdn.microsoft.com/en-us/library/ms184325.aspx&quot;&gt;ISNULL&lt;/a&gt; function, partial caching and a custom query in the Lookup Transform.&lt;/p&gt;

&lt;!--break--&gt;

&lt;p&gt;Let us look at a quick example. This is our lookup table definition, which allows NULLs in the LastName column, that we want to get the Id of a person from, based on their first and last name:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-TSQL&quot;&gt;CREATE TABLE Person (
  Id int IDENTITY(1,1) NOT NULL,
  FirstName varchar(50) NOT NULL,
  LastName varchar(50) NULL
)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;In SSIS, we have a input source with a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FirstName&lt;/code&gt; column and a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;LastName&lt;/code&gt;, where the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;LastName&lt;/code&gt; column might sometimes be NULL. 
To find the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Id&lt;/code&gt; of each name, we add a Lookup Transform to the Data Flow Task, and configure it to use &lt;em&gt;Partial cache&lt;/em&gt; in the &lt;em&gt;General&lt;/em&gt; tab. In the &lt;em&gt;Connection&lt;/em&gt; tab we point to our &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Person&lt;/code&gt; table as normal, and in the &lt;em&gt;Columns&lt;/em&gt; tab we map our input’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FirstName&lt;/code&gt; column and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;LastName&lt;/code&gt; column to the lookup’s &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;FirstName&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;LastName&lt;/code&gt; columns.&lt;/p&gt;

&lt;p&gt;Until now, every step has been the same as with &lt;em&gt;Full caching&lt;/em&gt;. However, now we continue to the &lt;em&gt;Advanced&lt;/em&gt; tab and check the &lt;em&gt;*Modify the SQL statement&lt;/em&gt; checkbox and change the SQL like so:&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;language-TSQL&quot;&gt;select * from (select * from [Person]) [refTable]
where [refTable].[FirstName] = ? and ISNULL([refTable].[LastName], &apos;&apos;) = ISNULL(?, &apos;&apos;)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;With the help of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ISNULL&lt;/code&gt; function, we rewrite any NULL values to an empty string, which is comparable, but only if the LastName is actually NULL.&lt;/p&gt;

&lt;p&gt;Last step is to click the &lt;em&gt;Parameters&lt;/em&gt; button and assign the parameters.&lt;/p&gt;

&lt;p&gt;Hope this help!&lt;/p&gt;
</description>
        <pubDate>Wed, 12 Aug 2015 00:00:00 +0000</pubDate>
        <link>https://egilhansen.com/2015/08/12/ssis-lookup-transform-not-finding-expected-match-null-values/</link>
        <guid isPermaLink="true">https://egilhansen.com/2015/08/12/ssis-lookup-transform-not-finding-expected-match-null-values/</guid>
        
        
      </item>
    
      <item>
        <title>SSIS: Solution for Excel data source text truncation of column with more than 255 characters</title>
        <description>&lt;p&gt;When using SQL Server Integration Service (SSIS) Excel data source to import text from a column in a spreadsheet, the data source will automatically &lt;em&gt;try&lt;/em&gt; to determine the maximum length of text in the text column. It does so by sampling the 9 first rows in the spreadsheet and measuring their length. If it does not find any column longer than 255 characters, it will set the columns type as DT_WSTR with a length of 255, otherwise it will use DT_NTEXT (see &lt;a href=&quot;https://technet.microsoft.com/en-us/library/ms141683.aspx&quot;&gt;Excel Source on TechNet&lt;/a&gt; for more details).&lt;/p&gt;

&lt;!--break--&gt;

&lt;p&gt;The obvious problem is that if any row after 9th row is longer than 255 characters, the import will break with the error message: &lt;strong&gt;“Text was truncated or one or more characters had no match in the target code page.”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The suggested solution on TechNet is to change a registry key to increase the number of rows the Excel data source will sample to determine the length of a text column. Other suggestions online include changing the spreadsheet to have a larger row in the top 8 rows. However, neither solution is maintainable if you cannot change the source spreadsheet or if it is a new version of the spreadsheet each time you execute your SSIS package.&lt;/p&gt;

&lt;p&gt;My solution is based on using the Script Component instead of the Excel data source. It allows you to define each column’s type and size/length as you do with the Flat File Connection Manager. The only other requirement is that there is a header row in the sheet you are trying to import from.&lt;/p&gt;

&lt;p&gt;The solution descibed below has been tested with SSIS 2012 but should work with future versions.&lt;/p&gt;

&lt;h2 id=&quot;solution&quot;&gt;Solution&lt;/h2&gt;
&lt;p&gt;To help guide us through the solution, we will use this very simple Excel spreadsheet as our example:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/assets/ssis-excel-import-sample-sheet.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;Add an &lt;em&gt;Excel Connection Manager&lt;/em&gt; to the package as you normally would. Point it to your source file, choose an Excel version, and check the &lt;em&gt;“First row has column names”&lt;/em&gt; checkbox.&lt;/p&gt;

    &lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This particular solution assums the first row in the Excel spreadsheet is a header row. This solution can be modified to work without, but not without changes to the script code.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Add a Script Component as a Source and open the Script Component editor (Script Transformation Editor)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;Add your Excel Connection Manager in the &lt;em&gt;“Connection Managers”&lt;/em&gt; tab. Make sure to name it &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DataSourceConnection&lt;/code&gt;, we will use that name in the script code later.&lt;br /&gt;
  &lt;img src=&quot;/assets/ssis-excel-import-script-component-connection-manager.png&quot; alt=&quot;&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;In the &lt;em&gt;“Inputs and Outputs”&lt;/em&gt; tab, first rename the default &lt;em&gt;“Output 0”&lt;/em&gt; to the &lt;em&gt;exact name&lt;/em&gt; of the sheet in your Excel spreadsheet you want to import data from.&lt;/li&gt;
  &lt;li&gt;Then continue adding the columns you want to export to the output, also naming each column with the &lt;em&gt;exact name&lt;/em&gt; it has in the spreadsheet and pick the desired type.&lt;br /&gt;
  &lt;strong&gt;Note:&lt;/strong&gt; The names of the columns and sheet has to be the same since we use them to automatically generate the OleDB select statement that will read the data from the spread sheet.&lt;br /&gt;
  &lt;img src=&quot;/assets/ssis-excel-import-script-component-input-output.png&quot; alt=&quot;&quot; /&gt;&lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Go to the Script tab and click the &lt;em&gt;“Edit Script…”&lt;/em&gt; button. This will open a new instance of Visual Studio.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;In the Visual Studio script edit, make the following changes to the script file:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Add the following using statements to the top of the file:&lt;/p&gt;

&lt;div class=&quot;language-csharp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;System.Data.OleDb&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;System.Text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;At the top of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ScriptMain&lt;/code&gt; class, add these three lines:&lt;/p&gt;

&lt;div class=&quot;language-csharp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;OleDbConnection&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;connection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;OleDbCommand&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;command&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;OleDbDataReader&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;reader&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Replace the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PreExecute()&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PostExecute()&lt;/code&gt; methods with the following new versions:&lt;/p&gt;

&lt;div class=&quot;language-csharp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;PreExecute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;base&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;PreExecute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;

  &lt;span class=&quot;n&quot;&gt;connection&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;OleDbConnection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Connections&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DataSourceConnection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ConnectionString&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;connection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Open&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;command&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;OleDbCommand&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;command&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Connection&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;connection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;c1&quot;&gt;// Build select query by iterating over the columns in first output collection&lt;/span&gt;
  &lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;query&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;StringBuilder&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;SELECT &quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;outputCollection&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ComponentMetaData&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;OutputCollection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;

  &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;outputCollection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;OutputColumnCollection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Count&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;++)&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;query&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;AppendFormat&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot; [{0}]&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;outputCollection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;OutputColumnCollection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;].&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;outputCollection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;OutputColumnCollection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Count&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;query&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Append&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;,&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;n&quot;&gt;query&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;AppendFormat&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot; FROM [{0}]&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;outputCollection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

  &lt;span class=&quot;n&quot;&gt;command&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;CommandText&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;query&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;ToString&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;reader&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;command&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;ExecuteReader&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;PostExecute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;base&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;PostExecute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;

  &lt;span class=&quot;n&quot;&gt;command&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;reader&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Close&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
  &lt;span class=&quot;n&quot;&gt;connection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Close&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Finally you need to do a little coding yourself in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CreateNewOutputRows&lt;/code&gt; method. Here, you parse each column in each row and add it to the output buffer. The following is the code used in the example:&lt;/p&gt;

&lt;div class=&quot;language-csharp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;CreateNewOutputRows&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;reader&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Read&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;())&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// Replace with own import code matching the name&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// of the import buffer defined in the Script Transformation Editor&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;// and column names&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;NumbersandTextBuffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;AddRow&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;

    &lt;span class=&quot;n&quot;&gt;NumbersandTextBuffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;TimesUsed&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;double&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;reader&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Times Used&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;NumbersandTextBuffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;TextShown&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;reader&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Text Shown&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;                     
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Once you are done tweaking the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CreateNewOutputRows&lt;/code&gt; method, close the Visual Studio script editor instance and you are done. The complete &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ScriptMain&lt;/code&gt; example file is posted below for reference.&lt;/p&gt;

&lt;p&gt;Hope this helps!&lt;/p&gt;

&lt;div class=&quot;language-csharp highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;System&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;System.Data&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Microsoft.SqlServer.Dts.Pipeline.Wrapper&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;Microsoft.SqlServer.Dts.Runtime.Wrapper&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;System.Data.OleDb&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;using&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;System.Text&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Microsoft&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SqlServer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Dts&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Pipeline&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SSISScriptComponentEntryPointAttribute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;ScriptMain&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;UserComponent&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;OleDbConnection&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;connection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;OleDbCommand&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;command&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;OleDbDataReader&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;reader&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

  &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;PreExecute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;base&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;PreExecute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
 
    &lt;span class=&quot;n&quot;&gt;connection&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;OleDbConnection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Connections&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;DataSourceConnection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;ConnectionString&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;connection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Open&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;command&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;OleDbCommand&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;command&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Connection&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;connection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;c1&quot;&gt;// Build select query by iterating over the columns in first output collection&lt;/span&gt;
    &lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;query&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;StringBuilder&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;SELECT &quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;kt&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;outputCollection&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;ComponentMetaData&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;OutputCollection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;

    &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;int&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;outputCollection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;OutputColumnCollection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Count&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;++)&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;query&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;AppendFormat&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot; [{0}]&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;outputCollection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;OutputColumnCollection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;].&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
      &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;outputCollection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;OutputColumnCollection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Count&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;m&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;query&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Append&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;,&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;n&quot;&gt;query&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;AppendFormat&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot; FROM [{0}]&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;outputCollection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;Name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

    &lt;span class=&quot;n&quot;&gt;command&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;CommandText&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;query&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;ToString&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;reader&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;command&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;ExecuteReader&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;PostExecute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;base&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;PostExecute&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;

    &lt;span class=&quot;n&quot;&gt;command&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;reader&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Close&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;connection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Close&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

  &lt;span class=&quot;k&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;override&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;CreateNewOutputRows&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;()&lt;/span&gt;
  &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;reader&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;Read&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;())&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;c1&quot;&gt;// Replace with own import code matching the name&lt;/span&gt;
      &lt;span class=&quot;c1&quot;&gt;// of the import buffer defined in the Script Transformation Editor&lt;/span&gt;
      &lt;span class=&quot;c1&quot;&gt;// and column names&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;NumbersandTextBuffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;AddRow&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;

      &lt;span class=&quot;n&quot;&gt;NumbersandTextBuffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;TimesUsed&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;double&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;reader&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Times Used&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
      &lt;span class=&quot;n&quot;&gt;NumbersandTextBuffer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;TextShown&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;string&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;reader&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Text Shown&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;                     
  &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
</description>
        <pubDate>Tue, 28 Jul 2015 00:00:00 +0000</pubDate>
        <link>https://egilhansen.com/2015/07/28/ssis-solution-excel-data-source-text-truncation-column-more-than-255-characters/</link>
        <guid isPermaLink="true">https://egilhansen.com/2015/07/28/ssis-solution-excel-data-source-text-truncation-column-more-than-255-characters/</guid>
        
        
      </item>
    
      <item>
        <title>SharePoint 2013: The server was unable to save the form at this time</title>
        <description>&lt;p&gt;This morning our freshly installed SharePoint Server 2013 server was refusing to let me save a simple form with a Lookup column to another list. Using the standard insert/edit form, the error message read:&lt;/p&gt;

&lt;!--break--&gt;

&lt;figure&gt;
  &lt;a href=&quot;/assets/sharepoint-error-message-form.gif&quot;&gt;
    &lt;img src=&quot;/assets/sharepoint-error-message-form.gif&quot; alt=&quot;Error message from insert/edit form: *The server was unable to save the form at this time. Please try again.*&quot; /&gt;
  &lt;/a&gt;
&lt;figcaption&gt;&lt;p&gt;Error message from insert/edit form: &lt;em&gt;The server was unable to save the form at this time. Please try again.&lt;/em&gt;&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;When using the quick edit mode, the error message was:&lt;/p&gt;

&lt;figure&gt;
  &lt;a href=&quot;/assets/sharepoint-error-message.gif&quot;&gt;
    &lt;img src=&quot;/assets/sharepoint-error-message.gif&quot; alt=&quot;Error message in quick edit mode: *This service isn&apos;t available right now. Click here to try again.*&quot; /&gt;
  &lt;/a&gt;
&lt;figcaption&gt;&lt;p&gt;Error message in quick edit mode: &lt;em&gt;This service isn’t available right now. Click here to try again.&lt;/em&gt;&lt;/p&gt;
&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The fix turned out to be a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;iisreset&lt;/code&gt; on the SharePoint server.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Update:&lt;/strong&gt; It looks like the culprit is the Security Token Service, more info over at &lt;a href=&quot;http://www.sharepoint2013.me/Blog/Post/83/-The-Security-Token-Service-is-not-available--error-in-sharepoint-2013&quot;&gt;Sharepoint2013.me&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I hope this helps somebody else save a few hours of head scratching.&lt;/p&gt;
</description>
        <pubDate>Wed, 14 Aug 2013 00:00:00 +0000</pubDate>
        <link>https://egilhansen.com/2013/08/14/sharepoint-2013-the-server-was-unable-to-save-the-form-at-this-time/</link>
        <guid isPermaLink="true">https://egilhansen.com/2013/08/14/sharepoint-2013-the-server-was-unable-to-save-the-form-at-this-time/</guid>
        
        
      </item>
    
      <item>
        <title>Extra Tips for Debugging SharePoint Timer Jobs</title>
        <description>&lt;p&gt;There is an excellent guide over on &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/ff798310.aspx&quot;&gt;MSDN on how to debug a SharePoint timer job&lt;/a&gt; from Visual Studio. However, it fails to mention that sometimes you need to restart the service that runs the timer jobs to allow debugger to set a breakpoint. In addition, sometimes a job will not show up in the job definitions list (Central Administration – Job Definitions), making it hard to manually start a job. The solution to this is to recycle IIS.&lt;/p&gt;

&lt;!--break--&gt;

&lt;p&gt;The simplest way to incorporate this into a development workflow is to add it to these commands to the &lt;em&gt;Pre- and Post-deployment Command Line&lt;/em&gt; steps in Visual Studio:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pre-deployment Command Line:&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;net stop SPTimerV4
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Post-deployment Command Line:&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;net start SPTimerV4
iisreset
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Hope this helps.&lt;/p&gt;
</description>
        <pubDate>Mon, 15 Jul 2013 00:00:00 +0000</pubDate>
        <link>https://egilhansen.com/2013/07/15/extra-tips-for-debugging-sharepoint-timer-jobs/</link>
        <guid isPermaLink="true">https://egilhansen.com/2013/07/15/extra-tips-for-debugging-sharepoint-timer-jobs/</guid>
        
        
      </item>
    
      <item>
        <title>SharePoint Foundation 2010 on Windows 7/8 – missing config.xml file</title>
        <description>&lt;p&gt;To install SharePoint Foundation 2010 on Windows 7/8, you need to modify the config.xml file. However, after extracting the setup files, the config.xml file was nowhere to be seen in the Setup folder. To get the installation going, I had to create the file myself. Here is the content that goes into it:&lt;/p&gt;

&lt;!--break--&gt;

&lt;pre&gt;&lt;code class=&quot;language-XML&quot;&gt;&amp;lt;Configuration&amp;gt;
   &amp;lt;Package Id=&quot;sts&quot;&amp;gt;
      &amp;lt;Setting Id=&quot;SETUPTYPE&quot; Value=&quot;CLEAN_INSTALL&quot;/&amp;gt;
   &amp;lt;/Package&amp;gt;
   &amp;lt;DATADIR Value=&quot;%CommonProgramFiles%\Microsoft Shared\Web Server Extensions\14\Data&quot;/&amp;gt;
   &amp;lt;Logging Type=&quot;verbose&quot; Path=&quot;%temp%&quot; Template=&quot;Microsoft SharePoint Foundation 2010 Setup *.log&quot;/&amp;gt;
   &amp;lt;Setting Id=&quot;UsingUIInstallMode&quot; Value=&quot;1&quot;/&amp;gt;
   &amp;lt;Setting Id=&quot;SETUP_REBOOT&quot; Value=&quot;Never&quot;/&amp;gt;
   &amp;lt;Setting Id=&quot;AllowWindowsClientInstall&quot; Value=&quot;True&quot;/&amp;gt;
&amp;lt;/Configuration&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And to force the setup.exe to use it, we need to apply the /config switch when starting setup.exe, i.e.: &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;setup.exe /config Setup\config.xml&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Other useful links for installing SharePoint Foundation 2010 on Windows 8:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;http://support.microsoft.com/kb/2796733&quot;&gt;SharePoint 2010 Management Shell does not load with Windows PowerShell 3.0&lt;/a&gt; - because SharePoint PowerShell does not work out of the box.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://develoq.net/2010/installing-sharepoint-foundation-2010-on-windows-7/&quot;&gt;Develoq.net: Installing Sharepoint Foundation 2010 on Windows 7&lt;/a&gt; - how to install on Farm mode on Windows 7/8, to avoid getting another SQL server instance.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://johnlivingstontech.blogspot.dk/2011/09/installing-sharepoint-2010-on-windows-8.html&quot;&gt;Installing SharePoint 2010 on Windows 8&lt;/a&gt; - Hints about getting installation to work on Windows 8, also good tips in comments.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hope this helps.&lt;/p&gt;
</description>
        <pubDate>Tue, 09 Jul 2013 00:00:00 +0000</pubDate>
        <link>https://egilhansen.com/2013/07/09/sharepoint-foundation-2010-on-windows-7-8-missing-config-xml-file/</link>
        <guid isPermaLink="true">https://egilhansen.com/2013/07/09/sharepoint-foundation-2010-on-windows-7-8-missing-config-xml-file/</guid>
        
        
      </item>
    
      <item>
        <title>JSLink: The simple way to add and load multiple JavaScript files</title>
        <description>&lt;p&gt;It can sometimes be useful to specify multiple JavaScript files to use when rendering e.g. a field in SharePoint 2013. It could be that you have a JavaScript file with some shared code that you use in all your custom rendering, or you use a library such as jQuery. In either case, you need all the scripts loaded before you can start rendering.&lt;/p&gt;

&lt;!--break--&gt;

&lt;p&gt;It turns out it is easy to tell SharePoint to download multiple JavaScript files when rendering e.g. a field. Just separate them with the pipe character, i.e. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;|&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;For example, to load &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~sitecollection/_catalogs/masterpage/jQuery.js&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;~sitecollection/_catalogs/masterpage/my-custom-field.js&lt;/code&gt;, set the JSLink property of your target to:&lt;/p&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;JSLink=&quot;~sitecollection/_catalogs/masterpage/jQuery.js|~sitecollection/_catalogs/masterpage/my-custom-field.js&quot;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Do not worry about SharePoint re-downloading the same script repeatedly if you use it to render multiple elements, SharePoint will not download a script more than one time (e.g. jQuery).&lt;/p&gt;
</description>
        <pubDate>Mon, 11 Mar 2013 00:00:00 +0000</pubDate>
        <link>https://egilhansen.com/2013/03/11/jslink-the-simple-way-to-add-and-load-multiple-javascript-files/</link>
        <guid isPermaLink="true">https://egilhansen.com/2013/03/11/jslink-the-simple-way-to-add-and-load-multiple-javascript-files/</guid>
        
        
      </item>
    
      <item>
        <title>How to add an Enterprise Keywords column to a custom list and enable Keyword synchronization in SharePoint 2013</title>
        <description>&lt;p&gt;This is a quick step-by-step guide to add an Enterprise Keywords column to a custom list and enable Keyword synchronization with Visual Studio 2012 in a SharePoint project. The SharePoint tools for Visual Studio 2012 have become a lot better in the latest edition, but a little extra work is required to get the Enterprise keywords column wired up correctly.&lt;/p&gt;

&lt;!--break--&gt;

&lt;p&gt;&lt;strong&gt;Step 1:&lt;/strong&gt; Create an empty SharePoint 2013 project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt; Add &lt;em&gt;Content Type&lt;/em&gt; and add these three columns to it manually through the &lt;em&gt;Elements.xml&lt;/em&gt; file or through the graphical interface:&lt;/p&gt;

&lt;div class=&quot;language-xml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;FieldRef&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;ID=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{23f27201-bee3-471e-b2e7-b64fd8b7ca38}&quot;&lt;/span&gt; 
	&lt;span class=&quot;na&quot;&gt;DisplayName=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;$Resources:osrvcore,field_KeywordsFieldName&quot;&lt;/span&gt; 
	&lt;span class=&quot;na&quot;&gt;Required=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;FALSE&quot;&lt;/span&gt; 
	&lt;span class=&quot;na&quot;&gt;Description=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;$Resources:osrvcore,field_KeywordsFieldDesc&quot;&lt;/span&gt; 
	&lt;span class=&quot;na&quot;&gt;Hidden=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;FALSE&quot;&lt;/span&gt; 
	&lt;span class=&quot;na&quot;&gt;Name=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;TaxKeyword&quot;&lt;/span&gt; 
	&lt;span class=&quot;na&quot;&gt;Sealed=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;TRUE&quot;&lt;/span&gt; 
	&lt;span class=&quot;na&quot;&gt;Sortable=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;FALSE&quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;FieldRef&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;ID=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{1390a86a-23da-45f0-8efe-ef36edadfb39}&quot;&lt;/span&gt;
	&lt;span class=&quot;na&quot;&gt;DisplayName=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;TaxKeywordTaxHTField&quot;&lt;/span&gt; 
	&lt;span class=&quot;na&quot;&gt;Required=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;FALSE&quot;&lt;/span&gt; 
	&lt;span class=&quot;na&quot;&gt;Hidden=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;TRUE&quot;&lt;/span&gt; 
	&lt;span class=&quot;na&quot;&gt;Name=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;TaxKeywordTaxHTField&quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;FieldRef&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;ID=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{f3b0adf9-c1a2-4b02-920d-943fba4b3611}&quot;&lt;/span&gt; 
	&lt;span class=&quot;na&quot;&gt;DisplayName=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Taxonomy Catch All Column&quot;&lt;/span&gt; 
	&lt;span class=&quot;na&quot;&gt;Required=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;FALSE&quot;&lt;/span&gt; 
	&lt;span class=&quot;na&quot;&gt;Hidden=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;TRUE&quot;&lt;/span&gt; 
	&lt;span class=&quot;na&quot;&gt;Name=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;TaxCatchAll&quot;&lt;/span&gt; 
	&lt;span class=&quot;na&quot;&gt;Sealed=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;TRUE&quot;&lt;/span&gt; 
	&lt;span class=&quot;na&quot;&gt;Sortable=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;FALSE&quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Step 3:&lt;/strong&gt; Add a &lt;em&gt;List&lt;/em&gt; to the project; add the custom content type you created previously content. Alternatively, if you already have an existing list, add these fields definitions inside the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;Fields&amp;gt;&lt;/code&gt; tag in lists &lt;em&gt;Schema.xml&lt;/em&gt; file:&lt;/p&gt;

&lt;div class=&quot;language-xml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;Field&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;Type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;TaxonomyFieldTypeMulti&apos;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;DisplayName=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;Enterprise Keywords&apos;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;StaticName=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;TaxKeyword&apos;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;Name=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;TaxKeyword&apos;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;ID=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;{23f27201-bee3-471e-b2e7-b64fd8b7ca38}&apos;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;List=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Lists/TaxonomyHiddenList&quot;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;WebId=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;~sitecollection&apos;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;ShowInViewForms=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;TRUE&apos;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;DefaultListField=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;TRUE&apos;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;Required=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;FALSE&apos;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;Hidden=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;FALSE&apos;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;ShowField=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Term$Resources:core,Language;&quot;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;Mult=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;TRUE&apos;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;Sortable=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;FALSE&apos;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;Group=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;$Resources:osrvcore,field_KeywordsGroupName&quot;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;Description=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;$Resources:osrvcore,field_KeywordsFieldDesc&quot;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;AllowDeletion=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;TRUE&apos;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;Customization&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;ArrayOfProperty&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;lt;Property&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;Name&amp;gt;&lt;/span&gt;SspId&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;Value&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;xmlns:q1=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;http://www.w3.org/2001/XMLSchema&apos;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;p4:type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;q1:string&apos;&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;xmlns:p4=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;http://www.w3.org/2001/XMLSchema-instance&apos;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;00000000-0000-0000-0000-000000000000&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Value&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;lt;/Property&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;lt;Property&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;Name&amp;gt;&lt;/span&gt;GroupId&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;lt;/Property&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;lt;Property&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;Name&amp;gt;&lt;/span&gt;TermSetId&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;Value&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;xmlns:q2=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;http://www.w3.org/2001/XMLSchema&apos;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;p4:type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;q2:string&apos;&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;xmlns:p4=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;http://www.w3.org/2001/XMLSchema-instance&apos;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;00000000-0000-0000-0000-000000000000&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Value&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;lt;/Property&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;lt;Property&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;Name&amp;gt;&lt;/span&gt;AnchorId&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;Value&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;xmlns:q3=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;http://www.w3.org/2001/XMLSchema&apos;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;p4:type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;q3:string&apos;&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;xmlns:p4=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;http://www.w3.org/2001/XMLSchema-instance&apos;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;00000000-0000-0000-0000-000000000000&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Value&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;lt;/Property&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;lt;Property&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;Name&amp;gt;&lt;/span&gt;UserCreated&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;Value&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;xmlns:q4=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;http://www.w3.org/2001/XMLSchema&apos;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;p4:type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;q4:boolean&apos;&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;xmlns:p4=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;http://www.w3.org/2001/XMLSchema-instance&apos;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;false&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Value&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;lt;/Property&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;lt;Property&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;Name&amp;gt;&lt;/span&gt;Open&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;Value&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;xmlns:q5=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;http://www.w3.org/2001/XMLSchema&apos;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;p4:type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;q5:boolean&apos;&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;xmlns:p4=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;http://www.w3.org/2001/XMLSchema-instance&apos;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;true&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Value&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;lt;/Property&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;lt;Property&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;Name&amp;gt;&lt;/span&gt;TextField&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;Value&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;xmlns:q6=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;http://www.w3.org/2001/XMLSchema&apos;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;p4:type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;q6:string&apos;&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;xmlns:p4=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;http://www.w3.org/2001/XMLSchema-instance&apos;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;{1390a86a-23da-45f0-8efe-ef36edadfb39}&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Value&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;lt;/Property&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;lt;Property&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;Name&amp;gt;&lt;/span&gt;IsPathRendered&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;Value&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;xmlns:q7=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;http://www.w3.org/2001/XMLSchema&apos;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;p4:type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;q7:boolean&apos;&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;xmlns:p4=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;http://www.w3.org/2001/XMLSchema-instance&apos;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;false&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Value&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;lt;/Property&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;lt;Property&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;Name&amp;gt;&lt;/span&gt;IsKeyword&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;Value&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;xmlns:q8=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;http://www.w3.org/2001/XMLSchema&apos;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;p4:type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;q8:boolean&apos;&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;xmlns:p4=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;http://www.w3.org/2001/XMLSchema-instance&apos;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;true&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Value&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;lt;/Property&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;lt;Property&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;Name&amp;gt;&lt;/span&gt;TargetTemplate&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;lt;/Property&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;lt;Property&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;Name&amp;gt;&lt;/span&gt;CreateValuesInEditForm&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;Value&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;xmlns:q9=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;http://www.w3.org/2001/XMLSchema&apos;&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;p4:type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;q9:boolean&apos;&lt;/span&gt;
          &lt;span class=&quot;na&quot;&gt;xmlns:p4=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&apos;http://www.w3.org/2001/XMLSchema-instance&apos;&lt;/span&gt;&lt;span class=&quot;nt&quot;&gt;&amp;gt;&lt;/span&gt;false&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Value&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;lt;/Property&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;lt;Property&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;Name&amp;gt;&lt;/span&gt;FilterAssemblyStrongName&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;lt;/Property&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;lt;Property&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;Name&amp;gt;&lt;/span&gt;FilterClassName&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;lt;/Property&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;lt;Property&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;Name&amp;gt;&lt;/span&gt;FilterMethodName&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;lt;/Property&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;lt;Property&amp;gt;&lt;/span&gt;
        &lt;span class=&quot;nt&quot;&gt;&amp;lt;Name&amp;gt;&lt;/span&gt;FilterJavascriptProperty&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;
      &lt;span class=&quot;nt&quot;&gt;&amp;lt;/Property&amp;gt;&lt;/span&gt;
    &lt;span class=&quot;nt&quot;&gt;&amp;lt;/ArrayOfProperty&amp;gt;&lt;/span&gt;
  &lt;span class=&quot;nt&quot;&gt;&amp;lt;/Customization&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Field&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;Field&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;Type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Note&quot;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;DisplayName=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;TaxKeywordTaxHTField&quot;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;StaticName=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;TaxKeywordTaxHTField&quot;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;Name=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;TaxKeywordTaxHTField&quot;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;ID=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{1390a86a-23da-45f0-8efe-ef36edadfb39}&quot;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;ShowInViewForms=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;FALSE&quot;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;Required=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;FALSE&quot;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;Hidden=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;TRUE&quot;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;CanToggleHidden=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;TRUE&quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;

&lt;span class=&quot;nt&quot;&gt;&amp;lt;Field&lt;/span&gt; &lt;span class=&quot;na&quot;&gt;Type=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;LookupMulti&quot;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;DisplayName=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Taxonomy Catch All Column&quot;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;StaticName=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;TaxCatchAll&quot;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;Name=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;TaxCatchAll&quot;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;ID=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;{f3b0adf9-c1a2-4b02-920d-943fba4b3611}&quot;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;ShowInViewForms=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;FALSE&quot;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;Required=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;FALSE&quot;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;Hidden=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;TRUE&quot;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;ShowField=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;CatchAllData&quot;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;Mult=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;TRUE&quot;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;List=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;Lists/TaxonomyHiddenList&quot;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;WebId=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;~sitecollection&quot;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;Sortable=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;FALSE&quot;&lt;/span&gt;
  &lt;span class=&quot;na&quot;&gt;AllowDeletion=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;TRUE&quot;&lt;/span&gt; 
  &lt;span class=&quot;na&quot;&gt;Sealed=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;TRUE&quot;&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;/&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;At this point, we are usually done. The columns were added to the list definition and the columns does indeed show up in the list. However, they keywords added to items in the list does not show up. What is missing is the event receiver that takes care of the keyword synchronization. We will add that now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4:&lt;/strong&gt; Add an &lt;em&gt;Event Receiver&lt;/em&gt; to the project. Make sure to select the list you just created as the event source when going through the wizard, and any events in the events list (we will replace the code generated, so it does not matter which).&lt;/p&gt;

&lt;p&gt;Aside: I like to add event receivers beneath the list they are associated with so it is clear that what list the event receiver belongs to, but anywhere inside the project is fine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5:&lt;/strong&gt; Delete the event receiver’s code file (.cs or .vb) so you are only left with the &lt;em&gt;Elements.xml&lt;/em&gt; file.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6:&lt;/strong&gt; Open the event receiver’s &lt;em&gt;Elements.xml&lt;/em&gt; file and replace whatever &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;Receiver&amp;gt;&lt;/code&gt; tags where generated with these:&lt;/p&gt;

&lt;div class=&quot;language-xml highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nt&quot;&gt;&amp;lt;Receiver&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;Name&amp;gt;&lt;/span&gt;TaxonomyItemSynchronousAddedEventReceiver&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;Synchronization&amp;gt;&lt;/span&gt;Synchronous&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Synchronization&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;Type&amp;gt;&lt;/span&gt;ItemAdding&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Type&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;SequenceNumber&amp;gt;&lt;/span&gt;10000&lt;span class=&quot;nt&quot;&gt;&amp;lt;/SequenceNumber&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;Assembly&amp;gt;&lt;/span&gt;Microsoft.SharePoint.Taxonomy, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Assembly&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;Class&amp;gt;&lt;/span&gt;Microsoft.SharePoint.Taxonomy.TaxonomyItemEventReceiver&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Class&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;Data&amp;gt;&amp;lt;/Data&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Receiver&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;Receiver&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;Name&amp;gt;&lt;/span&gt;TaxonomyItemUpdatingEventReceiver&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Name&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;Synchronization&amp;gt;&lt;/span&gt;Synchronous&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Synchronization&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;Type&amp;gt;&lt;/span&gt;ItemUpdating&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Type&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;SequenceNumber&amp;gt;&lt;/span&gt;10000&lt;span class=&quot;nt&quot;&gt;&amp;lt;/SequenceNumber&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;Assembly&amp;gt;&lt;/span&gt;Microsoft.SharePoint.Taxonomy, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Assembly&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;Class&amp;gt;&lt;/span&gt;Microsoft.SharePoint.Taxonomy.TaxonomyItemEventReceiver&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Class&amp;gt;&lt;/span&gt;
	&lt;span class=&quot;nt&quot;&gt;&amp;lt;Data&amp;gt;&amp;lt;/Data&amp;gt;&lt;/span&gt;
&lt;span class=&quot;nt&quot;&gt;&amp;lt;/Receiver&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The important thing to make sure is that the value of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ListTemplateId&lt;/code&gt; attribute on the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;Receivers ListTemplateId=&quot;xxxxx&quot;&amp;gt; ... &amp;lt;/Receivers&amp;gt;&lt;/code&gt; tag is the same as the value of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Type=&quot;xxxxx&quot;&lt;/code&gt; attribute on the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt; ListTemplate ... /&amp;gt;&lt;/code&gt; tag. Otherwise the event receivers will not attach to the right list.&lt;/p&gt;

&lt;p&gt;That is it. If you need a guide for SharePoint 2010, please take a look at this &lt;a href=&quot;http://www.metaengine.com/2012/03/SharePoint-sandbox-solution---Document-Library-with-Enterprise-Keywords&quot;&gt;blog post over at metaengine.com&lt;/a&gt;. It helped me get this working in SharePoint 2013.&lt;/p&gt;

&lt;p&gt;Hope this helps.&lt;/p&gt;
</description>
        <pubDate>Sat, 09 Mar 2013 00:00:00 +0000</pubDate>
        <link>https://egilhansen.com/2013/03/09/how-to-add-an-enterprise-keywords-column-to-a-custom-list-and-enable-keyword-synchronization-in-sharepoint-2013/</link>
        <guid isPermaLink="true">https://egilhansen.com/2013/03/09/how-to-add-an-enterprise-keywords-column-to-a-custom-list-and-enable-keyword-synchronization-in-sharepoint-2013/</guid>
        
        
      </item>
    
      <item>
        <title>Nokia, please turn my f…ing volume back up again!</title>
        <description>&lt;p&gt;With the Windows Phone 7.8 update to my Nokia Lumia 800, Nokia suddenly decided that my hearing is precious and I am not able to take care of it myself… the &lt;a href=&quot;http://www.phonearena.com/news/Windows-Phone-7.8-update-causing-volume-problems-with-the-Nokia-Lumia-800_id39451&quot;&gt;volume is now capped at half of what it was before&lt;/a&gt;.&lt;/p&gt;

&lt;!--break--&gt;

&lt;p&gt;I have been using the earbuds that came with the phone. They are quite good, they do not block out all of the sound from the surroundings, and since I mostly listen to podcasts or audiobooks when travelling around the city, I always had the volume at 30 (the maximum) to be able to hear what is being said. Now I have to use earbuds that are much more uncomfortable to hear anything over the city noise.&lt;/p&gt;

&lt;p&gt;It might be too much to ask to get both the new tile sizes and the volume I am used to, but I am going to take the chance anyway and say &lt;strong&gt;Nokia, please turn my f…ing volume back up again&lt;/strong&gt;. It is after all &lt;a href=&quot;http://forum.xda-developers.com/showthread.php?t=2052653#4&quot;&gt;just a registry setting…&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Sun, 03 Mar 2013 00:00:00 +0000</pubDate>
        <link>https://egilhansen.com/2013/03/03/nokia-please-turn-my-fing-volume-back-up-again/</link>
        <guid isPermaLink="true">https://egilhansen.com/2013/03/03/nokia-please-turn-my-fing-volume-back-up-again/</guid>
        
        
      </item>
    
  </channel>
</rss>
