Limit desktop object updates

This commit is contained in:
Christian Wade 2019-12-20 19:50:04 -08:00
parent 3f5c104935
commit 0fd3375c02
18 changed files with 248 additions and 127 deletions

View File

@ -61,9 +61,8 @@
<Reference Include="Microsoft.AnalysisServices.Tabular.Json, Version=18.2.3.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL"> <Reference Include="Microsoft.AnalysisServices.Tabular.Json, Version=18.2.3.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AnalysisServices.retail.amd64.18.2.3\lib\net45\Microsoft.AnalysisServices.Tabular.Json.dll</HintPath> <HintPath>..\packages\Microsoft.AnalysisServices.retail.amd64.18.2.3\lib\net45\Microsoft.AnalysisServices.Tabular.Json.dll</HintPath>
</Reference> </Reference>
<Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion> <HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
<HintPath>..\BismNormalizer\Newtonsoft.Json.dll</HintPath>
</Reference> </Reference>
<Reference Include="Octokit, Version=0.36.0.0, Culture=neutral, processorArchitecture=MSIL"> <Reference Include="Octokit, Version=0.36.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Octokit.0.36.0\lib\net46\Octokit.dll</HintPath> <HintPath>..\packages\Octokit.0.36.0\lib\net46\Octokit.dll</HintPath>

View File

@ -8,7 +8,7 @@
<probing privatePath="x86" /> <probing privatePath="x86" />
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" /> <bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
</dependentAssembly> </dependentAssembly>
</assemblyBinding> </assemblyBinding>
</runtime> </runtime>

View File

@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers // You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")] // [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("4.0.0.7")] [assembly: AssemblyVersion("5.0.0.12")]
[assembly: AssemblyFileVersion("4.0.0.7")] [assembly: AssemblyFileVersion("5.0.0.12")]

View File

@ -5,5 +5,6 @@
<package id="CefSharp.Common" version="63.0.3" targetFramework="net461" /> <package id="CefSharp.Common" version="63.0.3" targetFramework="net461" />
<package id="CefSharp.WinForms" version="63.0.3" targetFramework="net461" /> <package id="CefSharp.WinForms" version="63.0.3" targetFramework="net461" />
<package id="Microsoft.AnalysisServices.retail.amd64" version="18.2.3" targetFramework="net472" /> <package id="Microsoft.AnalysisServices.retail.amd64" version="18.2.3" targetFramework="net472" />
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net472" />
<package id="Octokit" version="0.36.0" targetFramework="net472" /> <package id="Octokit" version="0.36.0" targetFramework="net472" />
</packages> </packages>

View File

@ -28,6 +28,12 @@
"Entry" "Entry"
{ {
"MsmKey" = "8:_0182F649532C289AB58CA84091A3EF12" "MsmKey" = "8:_0182F649532C289AB58CA84091A3EF12"
"OwnerKey" = "8:_1F23AE629378259BAD7F2BCAB42727AD"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_0182F649532C289AB58CA84091A3EF12"
"OwnerKey" = "8:_0020EC0A2900F50F0F5DCC3E7BBE4237" "OwnerKey" = "8:_0020EC0A2900F50F0F5DCC3E7BBE4237"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
} }
@ -40,12 +46,6 @@
"Entry" "Entry"
{ {
"MsmKey" = "8:_0182F649532C289AB58CA84091A3EF12" "MsmKey" = "8:_0182F649532C289AB58CA84091A3EF12"
"OwnerKey" = "8:_1F23AE629378259BAD7F2BCAB42727AD"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_0182F649532C289AB58CA84091A3EF12"
"OwnerKey" = "8:_3BA1BB04BE8689BEF79234210621C61F" "OwnerKey" = "8:_3BA1BB04BE8689BEF79234210621C61F"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
} }
@ -298,6 +298,12 @@
"Entry" "Entry"
{ {
"MsmKey" = "8:_1B2251DD757994082D5D85D7C9A38F82" "MsmKey" = "8:_1B2251DD757994082D5D85D7C9A38F82"
"OwnerKey" = "8:_1F23AE629378259BAD7F2BCAB42727AD"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_1B2251DD757994082D5D85D7C9A38F82"
"OwnerKey" = "8:_0020EC0A2900F50F0F5DCC3E7BBE4237" "OwnerKey" = "8:_0020EC0A2900F50F0F5DCC3E7BBE4237"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
} }
@ -309,12 +315,6 @@
} }
"Entry" "Entry"
{ {
"MsmKey" = "8:_1B2251DD757994082D5D85D7C9A38F82"
"OwnerKey" = "8:_1F23AE629378259BAD7F2BCAB42727AD"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_1BC4692718F94CD799480D14260E2A0D" "MsmKey" = "8:_1BC4692718F94CD799480D14260E2A0D"
"OwnerKey" = "8:_UNDEFINED" "OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
@ -532,6 +532,12 @@
"Entry" "Entry"
{ {
"MsmKey" = "8:_4126FF7CFF23C51CF812060FAEF25A8B" "MsmKey" = "8:_4126FF7CFF23C51CF812060FAEF25A8B"
"OwnerKey" = "8:_1F23AE629378259BAD7F2BCAB42727AD"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_4126FF7CFF23C51CF812060FAEF25A8B"
"OwnerKey" = "8:_0020EC0A2900F50F0F5DCC3E7BBE4237" "OwnerKey" = "8:_0020EC0A2900F50F0F5DCC3E7BBE4237"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
} }
@ -544,12 +550,6 @@
"Entry" "Entry"
{ {
"MsmKey" = "8:_4126FF7CFF23C51CF812060FAEF25A8B" "MsmKey" = "8:_4126FF7CFF23C51CF812060FAEF25A8B"
"OwnerKey" = "8:_1F23AE629378259BAD7F2BCAB42727AD"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_4126FF7CFF23C51CF812060FAEF25A8B"
"OwnerKey" = "8:_577232D49DA84949B3604BA695B35542" "OwnerKey" = "8:_577232D49DA84949B3604BA695B35542"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
} }
@ -982,6 +982,12 @@
"Entry" "Entry"
{ {
"MsmKey" = "8:_7344099411A9D2DBF4A784E3DE9EA77D" "MsmKey" = "8:_7344099411A9D2DBF4A784E3DE9EA77D"
"OwnerKey" = "8:_1F23AE629378259BAD7F2BCAB42727AD"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_7344099411A9D2DBF4A784E3DE9EA77D"
"OwnerKey" = "8:_0020EC0A2900F50F0F5DCC3E7BBE4237" "OwnerKey" = "8:_0020EC0A2900F50F0F5DCC3E7BBE4237"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
} }
@ -994,12 +1000,6 @@
"Entry" "Entry"
{ {
"MsmKey" = "8:_7344099411A9D2DBF4A784E3DE9EA77D" "MsmKey" = "8:_7344099411A9D2DBF4A784E3DE9EA77D"
"OwnerKey" = "8:_1F23AE629378259BAD7F2BCAB42727AD"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_7344099411A9D2DBF4A784E3DE9EA77D"
"OwnerKey" = "8:_577232D49DA84949B3604BA695B35542" "OwnerKey" = "8:_577232D49DA84949B3604BA695B35542"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
} }
@ -1018,6 +1018,12 @@
"Entry" "Entry"
{ {
"MsmKey" = "8:_7394A11393C98C1F559822AA8D6F2F6F" "MsmKey" = "8:_7394A11393C98C1F559822AA8D6F2F6F"
"OwnerKey" = "8:_F6EABBB09E898B70DA1090707FAF54BA"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_7394A11393C98C1F559822AA8D6F2F6F"
"OwnerKey" = "8:_D4597F707D341D192D3B307F16FBD013" "OwnerKey" = "8:_D4597F707D341D192D3B307F16FBD013"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
} }
@ -1096,6 +1102,12 @@
"Entry" "Entry"
{ {
"MsmKey" = "8:_7C49A244BD86813B688A86097B64A4BB" "MsmKey" = "8:_7C49A244BD86813B688A86097B64A4BB"
"OwnerKey" = "8:_1F23AE629378259BAD7F2BCAB42727AD"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_7C49A244BD86813B688A86097B64A4BB"
"OwnerKey" = "8:_0020EC0A2900F50F0F5DCC3E7BBE4237" "OwnerKey" = "8:_0020EC0A2900F50F0F5DCC3E7BBE4237"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
} }
@ -1107,12 +1119,6 @@
} }
"Entry" "Entry"
{ {
"MsmKey" = "8:_7C49A244BD86813B688A86097B64A4BB"
"OwnerKey" = "8:_1F23AE629378259BAD7F2BCAB42727AD"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_7C66897615D04979AA00553FFBE9F869" "MsmKey" = "8:_7C66897615D04979AA00553FFBE9F869"
"OwnerKey" = "8:_UNDEFINED" "OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
@ -1156,6 +1162,12 @@
"Entry" "Entry"
{ {
"MsmKey" = "8:_7FE319AF420BED1331D231C9E53A5979" "MsmKey" = "8:_7FE319AF420BED1331D231C9E53A5979"
"OwnerKey" = "8:_1F23AE629378259BAD7F2BCAB42727AD"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_7FE319AF420BED1331D231C9E53A5979"
"OwnerKey" = "8:_0020EC0A2900F50F0F5DCC3E7BBE4237" "OwnerKey" = "8:_0020EC0A2900F50F0F5DCC3E7BBE4237"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
} }
@ -1168,12 +1180,6 @@
"Entry" "Entry"
{ {
"MsmKey" = "8:_7FE319AF420BED1331D231C9E53A5979" "MsmKey" = "8:_7FE319AF420BED1331D231C9E53A5979"
"OwnerKey" = "8:_1F23AE629378259BAD7F2BCAB42727AD"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_7FE319AF420BED1331D231C9E53A5979"
"OwnerKey" = "8:_577232D49DA84949B3604BA695B35542" "OwnerKey" = "8:_577232D49DA84949B3604BA695B35542"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
} }
@ -1318,6 +1324,12 @@
"Entry" "Entry"
{ {
"MsmKey" = "8:_8E074FE5AC5B455E0A4D2F176BA182EC" "MsmKey" = "8:_8E074FE5AC5B455E0A4D2F176BA182EC"
"OwnerKey" = "8:_1F23AE629378259BAD7F2BCAB42727AD"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_8E074FE5AC5B455E0A4D2F176BA182EC"
"OwnerKey" = "8:_0020EC0A2900F50F0F5DCC3E7BBE4237" "OwnerKey" = "8:_0020EC0A2900F50F0F5DCC3E7BBE4237"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
} }
@ -1330,12 +1342,6 @@
"Entry" "Entry"
{ {
"MsmKey" = "8:_8E074FE5AC5B455E0A4D2F176BA182EC" "MsmKey" = "8:_8E074FE5AC5B455E0A4D2F176BA182EC"
"OwnerKey" = "8:_1F23AE629378259BAD7F2BCAB42727AD"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_8E074FE5AC5B455E0A4D2F176BA182EC"
"OwnerKey" = "8:_577232D49DA84949B3604BA695B35542" "OwnerKey" = "8:_577232D49DA84949B3604BA695B35542"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
} }
@ -1384,6 +1390,12 @@
"Entry" "Entry"
{ {
"MsmKey" = "8:_90FAC219254FDDE26D273DDEF52262FA" "MsmKey" = "8:_90FAC219254FDDE26D273DDEF52262FA"
"OwnerKey" = "8:_1F23AE629378259BAD7F2BCAB42727AD"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_90FAC219254FDDE26D273DDEF52262FA"
"OwnerKey" = "8:_0020EC0A2900F50F0F5DCC3E7BBE4237" "OwnerKey" = "8:_0020EC0A2900F50F0F5DCC3E7BBE4237"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
} }
@ -1395,18 +1407,6 @@
} }
"Entry" "Entry"
{ {
"MsmKey" = "8:_90FAC219254FDDE26D273DDEF52262FA"
"OwnerKey" = "8:_1F23AE629378259BAD7F2BCAB42727AD"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_90FAC219254FDDE26D273DDEF52262FA"
"OwnerKey" = "8:_577232D49DA84949B3604BA695B35542"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_93213405E7044D8389BE2C29A2EAFCD5" "MsmKey" = "8:_93213405E7044D8389BE2C29A2EAFCD5"
"OwnerKey" = "8:_UNDEFINED" "OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
@ -1720,6 +1720,12 @@
"Entry" "Entry"
{ {
"MsmKey" = "8:_BE16C201755759965787B7DDD5BFF7B9" "MsmKey" = "8:_BE16C201755759965787B7DDD5BFF7B9"
"OwnerKey" = "8:_1F23AE629378259BAD7F2BCAB42727AD"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_BE16C201755759965787B7DDD5BFF7B9"
"OwnerKey" = "8:_0020EC0A2900F50F0F5DCC3E7BBE4237" "OwnerKey" = "8:_0020EC0A2900F50F0F5DCC3E7BBE4237"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
} }
@ -1732,12 +1738,6 @@
"Entry" "Entry"
{ {
"MsmKey" = "8:_BE16C201755759965787B7DDD5BFF7B9" "MsmKey" = "8:_BE16C201755759965787B7DDD5BFF7B9"
"OwnerKey" = "8:_1F23AE629378259BAD7F2BCAB42727AD"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_BE16C201755759965787B7DDD5BFF7B9"
"OwnerKey" = "8:_577232D49DA84949B3604BA695B35542" "OwnerKey" = "8:_577232D49DA84949B3604BA695B35542"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
} }
@ -1792,6 +1792,12 @@
"Entry" "Entry"
{ {
"MsmKey" = "8:_C097D550A85D95BEFF69F1B452227F75" "MsmKey" = "8:_C097D550A85D95BEFF69F1B452227F75"
"OwnerKey" = "8:_1F23AE629378259BAD7F2BCAB42727AD"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_C097D550A85D95BEFF69F1B452227F75"
"OwnerKey" = "8:_0020EC0A2900F50F0F5DCC3E7BBE4237" "OwnerKey" = "8:_0020EC0A2900F50F0F5DCC3E7BBE4237"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
} }
@ -1804,12 +1810,6 @@
"Entry" "Entry"
{ {
"MsmKey" = "8:_C097D550A85D95BEFF69F1B452227F75" "MsmKey" = "8:_C097D550A85D95BEFF69F1B452227F75"
"OwnerKey" = "8:_1F23AE629378259BAD7F2BCAB42727AD"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_C097D550A85D95BEFF69F1B452227F75"
"OwnerKey" = "8:_1B2251DD757994082D5D85D7C9A38F82" "OwnerKey" = "8:_1B2251DD757994082D5D85D7C9A38F82"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
} }
@ -2176,6 +2176,12 @@
"Entry" "Entry"
{ {
"MsmKey" = "8:_E6C48E30804B563751F799BDB82D2D5F" "MsmKey" = "8:_E6C48E30804B563751F799BDB82D2D5F"
"OwnerKey" = "8:_1F23AE629378259BAD7F2BCAB42727AD"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_E6C48E30804B563751F799BDB82D2D5F"
"OwnerKey" = "8:_0020EC0A2900F50F0F5DCC3E7BBE4237" "OwnerKey" = "8:_0020EC0A2900F50F0F5DCC3E7BBE4237"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
} }
@ -2188,12 +2194,6 @@
"Entry" "Entry"
{ {
"MsmKey" = "8:_E6C48E30804B563751F799BDB82D2D5F" "MsmKey" = "8:_E6C48E30804B563751F799BDB82D2D5F"
"OwnerKey" = "8:_1F23AE629378259BAD7F2BCAB42727AD"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_E6C48E30804B563751F799BDB82D2D5F"
"OwnerKey" = "8:_7344099411A9D2DBF4A784E3DE9EA77D" "OwnerKey" = "8:_7344099411A9D2DBF4A784E3DE9EA77D"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
} }
@ -2266,6 +2266,12 @@
"Entry" "Entry"
{ {
"MsmKey" = "8:_EEEF3B4DA37D965DCA452A1E7B283C82" "MsmKey" = "8:_EEEF3B4DA37D965DCA452A1E7B283C82"
"OwnerKey" = "8:_1F23AE629378259BAD7F2BCAB42727AD"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_EEEF3B4DA37D965DCA452A1E7B283C82"
"OwnerKey" = "8:_0020EC0A2900F50F0F5DCC3E7BBE4237" "OwnerKey" = "8:_0020EC0A2900F50F0F5DCC3E7BBE4237"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
} }
@ -2277,12 +2283,6 @@
} }
"Entry" "Entry"
{ {
"MsmKey" = "8:_EEEF3B4DA37D965DCA452A1E7B283C82"
"OwnerKey" = "8:_1F23AE629378259BAD7F2BCAB42727AD"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_EF0C782C601F42DE8C7EF094FA4ED82E" "MsmKey" = "8:_EF0C782C601F42DE8C7EF094FA4ED82E"
"OwnerKey" = "8:_UNDEFINED" "OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
@ -2337,6 +2337,12 @@
} }
"Entry" "Entry"
{ {
"MsmKey" = "8:_F6EABBB09E898B70DA1090707FAF54BA"
"OwnerKey" = "8:_7936400E6C154464B76D26251125123A"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_F9DF0866DA72405E973059961807829C" "MsmKey" = "8:_F9DF0866DA72405E973059961807829C"
"OwnerKey" = "8:_UNDEFINED" "OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
@ -2464,6 +2470,12 @@
"Entry" "Entry"
{ {
"MsmKey" = "8:_UNDEFINED" "MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_1F23AE629378259BAD7F2BCAB42727AD"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_1AC259E78F48430A97FB3A4F9B9A4E7E" "OwnerKey" = "8:_1AC259E78F48430A97FB3A4F9B9A4E7E"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
} }
@ -2482,6 +2494,12 @@
"Entry" "Entry"
{ {
"MsmKey" = "8:_UNDEFINED" "MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_F6EABBB09E898B70DA1090707FAF54BA"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_505B9CD6FBF318D5810A11D52DB3B890" "OwnerKey" = "8:_505B9CD6FBF318D5810A11D52DB3B890"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
} }
@ -2500,12 +2518,6 @@
"Entry" "Entry"
{ {
"MsmKey" = "8:_UNDEFINED" "MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_1F23AE629378259BAD7F2BCAB42727AD"
"MsmSig" = "8:_UNDEFINED"
}
"Entry"
{
"MsmKey" = "8:_UNDEFINED"
"OwnerKey" = "8:_0FD8120FEC5AB531A28085D3548D2C38" "OwnerKey" = "8:_0FD8120FEC5AB531A28085D3548D2C38"
"MsmSig" = "8:_UNDEFINED" "MsmSig" = "8:_UNDEFINED"
} }
@ -2788,7 +2800,7 @@
{ {
"Name" = "8:.NET Framework" "Name" = "8:.NET Framework"
"Message" = "8:[VSDNETMSG]" "Message" = "8:[VSDNETMSG]"
"FrameworkVersion" = "8:v4.6.1 " "FrameworkVersion" = "8:v4.6.1 "
"AllowLaterVersions" = "11:FALSE" "AllowLaterVersions" = "11:FALSE"
"InstallUrl" = "8:http://go.microsoft.com/fwlink/?LinkId=671728" "InstallUrl" = "8:http://go.microsoft.com/fwlink/?LinkId=671728"
} }
@ -3737,7 +3749,7 @@
{ {
"AssemblyRegister" = "3:1" "AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE" "AssemblyIsInGAC" = "11:FALSE"
"AssemblyAsmDisplayName" = "8:BismNormalizer, Version=5.0.0.0, Culture=neutral, PublicKeyToken=aa6675aad991a644, processorArchitecture=MSIL" "AssemblyAsmDisplayName" = "8:BismNormalizer, Version=5.0.0.5, Culture=neutral, PublicKeyToken=aa6675aad991a644, processorArchitecture=MSIL"
"ScatterAssemblies" "ScatterAssemblies"
{ {
"_1F23AE629378259BAD7F2BCAB42727AD" "_1F23AE629378259BAD7F2BCAB42727AD"
@ -6486,16 +6498,16 @@
{ {
"AssemblyRegister" = "3:1" "AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE" "AssemblyIsInGAC" = "11:FALSE"
"AssemblyAsmDisplayName" = "8:Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL" "AssemblyAsmDisplayName" = "8:Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"
"ScatterAssemblies" "ScatterAssemblies"
{ {
"_90FAC219254FDDE26D273DDEF52262FA" "_90FAC219254FDDE26D273DDEF52262FA"
{ {
"Name" = "8:Newtonsoft.Json.dll" "Name" = "8:Newtonsoft.Json.DLL"
"Attributes" = "3:512" "Attributes" = "3:512"
} }
} }
"SourcePath" = "8:Newtonsoft.Json.dll" "SourcePath" = "8:Newtonsoft.Json.DLL"
"TargetName" = "8:" "TargetName" = "8:"
"Tag" = "8:" "Tag" = "8:"
"Folder" = "8:_CAD31D6A85364CAA9F9BFC2750F80458" "Folder" = "8:_CAD31D6A85364CAA9F9BFC2750F80458"
@ -8693,6 +8705,37 @@
"IsDependency" = "11:FALSE" "IsDependency" = "11:FALSE"
"IsolateTo" = "8:" "IsolateTo" = "8:"
} }
"{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_F6EABBB09E898B70DA1090707FAF54BA"
{
"AssemblyRegister" = "3:1"
"AssemblyIsInGAC" = "11:FALSE"
"AssemblyAsmDisplayName" = "8:Octokit, Version=0.36.0.0, Culture=neutral, processorArchitecture=MSIL"
"ScatterAssemblies"
{
"_F6EABBB09E898B70DA1090707FAF54BA"
{
"Name" = "8:Octokit.dll"
"Attributes" = "3:512"
}
}
"SourcePath" = "8:Octokit.dll"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_CAD31D6A85364CAA9F9BFC2750F80458"
"Condition" = "8:"
"Transitive" = "11:FALSE"
"Vital" = "11:TRUE"
"ReadOnly" = "11:FALSE"
"Hidden" = "11:FALSE"
"System" = "11:FALSE"
"Permanent" = "11:FALSE"
"SharedLegacy" = "11:FALSE"
"PackageAs" = "3:1"
"Register" = "3:1"
"Exclude" = "11:FALSE"
"IsDependency" = "11:TRUE"
"IsolateTo" = "8:"
}
"{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F9DF0866DA72405E973059961807829C" "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F9DF0866DA72405E973059961807829C"
{ {
"SourcePath" = "8:..\\AlmToolkit\\bin\\Release\\x64\\CefSharp.pdb" "SourcePath" = "8:..\\AlmToolkit\\bin\\Release\\x64\\CefSharp.pdb"
@ -9108,15 +9151,15 @@
{ {
"Name" = "8:Microsoft Visual Studio" "Name" = "8:Microsoft Visual Studio"
"ProductName" = "8:Power BI ALM Toolkit" "ProductName" = "8:Power BI ALM Toolkit"
"ProductCode" = "8:{EC58BD25-446D-4EF7-8E93-1A33098306AC}" "ProductCode" = "8:{13962090-506E-474D-8604-EB0615C440D8}"
"PackageCode" = "8:{BF09F612-86C6-4112-A1B2-9B2C5C5BC994}" "PackageCode" = "8:{4D7FD052-C740-438F-A96B-F399A9FCD682}"
"UpgradeCode" = "8:{96819CFD-6462-4AD1-ADB4-7903F30ADB92}" "UpgradeCode" = "8:{96819CFD-6462-4AD1-ADB4-7903F30ADB92}"
"AspNetVersion" = "8:4.0.30319.0" "AspNetVersion" = "8:4.0.30319.0"
"RestartWWWService" = "11:FALSE" "RestartWWWService" = "11:FALSE"
"RemovePreviousVersions" = "11:TRUE" "RemovePreviousVersions" = "11:TRUE"
"DetectNewerInstalledVersion" = "11:TRUE" "DetectNewerInstalledVersion" = "11:TRUE"
"InstallAllUsers" = "11:TRUE" "InstallAllUsers" = "11:TRUE"
"ProductVersion" = "8:4.0.1" "ProductVersion" = "8:5.0.0"
"Manufacturer" = "8:Power BI ALM Toolkit" "Manufacturer" = "8:Power BI ALM Toolkit"
"ARPHELPTELEPHONE" = "8:" "ARPHELPTELEPHONE" = "8:"
"ARPHELPLINK" = "8:" "ARPHELPLINK" = "8:"

View File

@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers // You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")] // [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("5.0.0.5")] [assembly: AssemblyVersion("5.0.0.12")]
[assembly: AssemblyFileVersion("5.0.0.5")] [assembly: AssemblyFileVersion("5.0.0.12")]

View File

@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers // You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")] // [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("5.0.0.5")] [assembly: AssemblyVersion("5.0.0.12")]
[assembly: AssemblyFileVersion("5.0.0.5")] [assembly: AssemblyFileVersion("5.0.0.12")]

View File

@ -194,8 +194,8 @@
<HintPath>..\packages\Microsoft.VisualStudio.Validation.14.1.111\lib\net45\Microsoft.VisualStudio.Validation.dll</HintPath> <HintPath>..\packages\Microsoft.VisualStudio.Validation.14.1.111\lib\net45\Microsoft.VisualStudio.Validation.dll</HintPath>
<Private>True</Private> <Private>True</Private>
</Reference> </Reference>
<Reference Include="Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL"> <Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll</HintPath> <HintPath>..\packages\Newtonsoft.Json.12.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
</Reference> </Reference>
<Reference Include="stdole, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"> <Reference Include="stdole, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<HintPath>..\packages\stdole.7.0.3302\lib\net10\stdole.dll</HintPath> <HintPath>..\packages\stdole.7.0.3302\lib\net10\stdole.dll</HintPath>

View File

@ -29,5 +29,5 @@ using System.Runtime.InteropServices;
// You can specify all the values or you can default the Build and Revision Numbers // You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below: // by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")] // [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("5.0.0.5")] [assembly: AssemblyVersion("5.0.0.12")]
[assembly: AssemblyFileVersion("5.0.0.5")] [assembly: AssemblyFileVersion("5.0.0.12")]

View File

@ -15,7 +15,7 @@ namespace BismNormalizer.TabularCompare
// Factory pattern: https://msdn.microsoft.com/en-us/library/orm-9780596527730-01-05.aspx // Factory pattern: https://msdn.microsoft.com/en-us/library/orm-9780596527730-01-05.aspx
private static int _minCompatibilityLevel = 1100; private static int _minCompatibilityLevel = 1100;
private static int _maxCompatibilityLevel = 1500; private static int _maxCompatibilityLevel = 1600;
private static List<string> _supportedDataSourceVersions = new List<string> { "PowerBI_V3" }; private static List<string> _supportedDataSourceVersions = new List<string> { "PowerBI_V3" };
/// <summary> /// <summary>
@ -136,7 +136,7 @@ namespace BismNormalizer.TabularCompare
) )
) )
{ {
throw new ConnectionException($"This combination of mixed compatibility levels is not supported.\nSource is {Convert.ToString(comparisonInfo.SourceCompatibilityLevel)} and target is {Convert.ToString(comparisonInfo.TargetCompatibilityLevel)}."); throw new ConnectionException($"This combination of mixed compatibility levels is not supported.\nSource is {Convert.ToString(comparisonInfo.SourceCompatibilityLevel)} and target is {Convert.ToString(comparisonInfo.TargetCompatibilityLevel)}.\nMin supported compatibility level is {Convert.ToString(_minCompatibilityLevel)} and max is {Convert.ToString(_maxCompatibilityLevel)}.");
} }
//Return the comparison object & offer upgrade of target if appropriate //Return the comparison object & offer upgrade of target if appropriate
@ -166,12 +166,13 @@ namespace BismNormalizer.TabularCompare
//Check if source has a higher compat level than the target and offer upgrade if appropriate. //Check if source has a higher compat level than the target and offer upgrade if appropriate.
if (comparisonInfo.SourceCompatibilityLevel > comparisonInfo.TargetCompatibilityLevel) if (comparisonInfo.SourceCompatibilityLevel > comparisonInfo.TargetCompatibilityLevel)
{ {
string message = $"Source compatibility level is { Convert.ToString(comparisonInfo.SourceCompatibilityLevel) } and target is { Convert.ToString(comparisonInfo.TargetCompatibilityLevel) }, which is not supported for comparison.\n"; string message = $"Source compatibility level { Convert.ToString(comparisonInfo.SourceCompatibilityLevel) } is higher than the target { Convert.ToString(comparisonInfo.TargetCompatibilityLevel) }, which is not supported for comparison.\n";
if (comparisonInfo.Interactive && if (comparisonInfo.Interactive &&
!comparisonInfo.ConnectionInfoTarget.UseProject && //Upgrade in SSDT not supported !comparisonInfo.ConnectionInfoTarget.UseProject && //Upgrade in SSDT not supported
!comparisonInfo.ConnectionInfoTarget.UseDesktop && //Upgrade via port number to Desktop or SSDT not supported
System.Windows.Forms.MessageBox.Show( System.Windows.Forms.MessageBox.Show(
message += $"\nDo you want to upgrade the target to {Convert.ToString(comparisonInfo.SourceCompatibilityLevel)} and allow the comparison?", comparisonInfo.AppName, System.Windows.Forms.MessageBoxButtons.YesNo, System.Windows.Forms.MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes) message + $"\nDo you want to upgrade the target to {Convert.ToString(comparisonInfo.SourceCompatibilityLevel)} and allow the comparison?", comparisonInfo.AppName, System.Windows.Forms.MessageBoxButtons.YesNo, System.Windows.Forms.MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
{ {
returnTabularComparison.TargetTabularModel.Connect(); returnTabularComparison.TargetTabularModel.Connect();
returnTabularComparison.TargetTabularModel.TomDatabase.CompatibilityLevel = comparisonInfo.SourceCompatibilityLevel; returnTabularComparison.TargetTabularModel.TomDatabase.CompatibilityLevel = comparisonInfo.SourceCompatibilityLevel;

View File

@ -892,24 +892,33 @@ namespace BismNormalizer.TabularCompare.TabularMetadata
{ {
if (comparisonObject.ComparisonObjectType == ComparisonObjectType.Role && comparisonObject.MergeAction == MergeAction.Delete) if (comparisonObject.ComparisonObjectType == ComparisonObjectType.Role && comparisonObject.MergeAction == MergeAction.Delete)
{ {
_targetTabularModel.DeleteRole(comparisonObject.TargetObjectInternalName); if (DesktopHardened(comparisonObject, ValidationMessageType.Role))
OnValidationMessage(new ValidationMessageEventArgs($"Delete role [{comparisonObject.TargetObjectName}].", ValidationMessageType.Role, ValidationMessageStatus.Informational)); {
_targetTabularModel.DeleteRole(comparisonObject.TargetObjectInternalName);
OnValidationMessage(new ValidationMessageEventArgs($"Delete role [{comparisonObject.TargetObjectName}].", ValidationMessageType.Role, ValidationMessageStatus.Informational));
}
} }
} }
foreach (ComparisonObject comparisonObject in _comparisonObjects) foreach (ComparisonObject comparisonObject in _comparisonObjects)
{ {
if (comparisonObject.ComparisonObjectType == ComparisonObjectType.Role && comparisonObject.MergeAction == MergeAction.Create) if (comparisonObject.ComparisonObjectType == ComparisonObjectType.Role && comparisonObject.MergeAction == MergeAction.Create)
{ {
_targetTabularModel.CreateRole(_sourceTabularModel.Roles.FindById(comparisonObject.SourceObjectInternalName).TomRole); if (DesktopHardened(comparisonObject, ValidationMessageType.Role))
OnValidationMessage(new ValidationMessageEventArgs($"Create role [{comparisonObject.SourceObjectName}].", ValidationMessageType.Role, ValidationMessageStatus.Informational)); {
_targetTabularModel.CreateRole(_sourceTabularModel.Roles.FindById(comparisonObject.SourceObjectInternalName).TomRole);
OnValidationMessage(new ValidationMessageEventArgs($"Create role [{comparisonObject.SourceObjectName}].", ValidationMessageType.Role, ValidationMessageStatus.Informational));
}
} }
} }
foreach (ComparisonObject comparisonObject in _comparisonObjects) foreach (ComparisonObject comparisonObject in _comparisonObjects)
{ {
if (comparisonObject.ComparisonObjectType == ComparisonObjectType.Role && comparisonObject.MergeAction == MergeAction.Update) if (comparisonObject.ComparisonObjectType == ComparisonObjectType.Role && comparisonObject.MergeAction == MergeAction.Update)
{ {
_targetTabularModel.UpdateRole(_sourceTabularModel.Roles.FindById(comparisonObject.SourceObjectInternalName), _targetTabularModel.Roles.FindById(comparisonObject.TargetObjectInternalName)); if (DesktopHardened(comparisonObject, ValidationMessageType.Role))
OnValidationMessage(new ValidationMessageEventArgs($"Update role [{comparisonObject.TargetObjectName}].", ValidationMessageType.Role, ValidationMessageStatus.Informational)); {
_targetTabularModel.UpdateRole(_sourceTabularModel.Roles.FindById(comparisonObject.SourceObjectInternalName), _targetTabularModel.Roles.FindById(comparisonObject.TargetObjectInternalName));
OnValidationMessage(new ValidationMessageEventArgs($"Update role [{comparisonObject.TargetObjectName}].", ValidationMessageType.Role, ValidationMessageStatus.Informational));
}
} }
} }
@ -1241,6 +1250,11 @@ namespace BismNormalizer.TabularCompare.TabularMetadata
{ {
if (comparisonObject.ComparisonObjectType == ComparisonObjectType.DataSource && comparisonObject.MergeAction == MergeAction.Delete) if (comparisonObject.ComparisonObjectType == ComparisonObjectType.DataSource && comparisonObject.MergeAction == MergeAction.Delete)
{ {
if (!DesktopHardened(comparisonObject, ValidationMessageType.DataSource))
{
return;
};
//Check any objects in target that depend on the DataSource are also going to be deleted //Check any objects in target that depend on the DataSource are also going to be deleted
List<string> warningObjectList = new List<string>(); List<string> warningObjectList = new List<string>();
bool toDependencies = HasBlockingToDependenciesInTarget(comparisonObject.TargetObjectName, CalcDependencyObjectType.DataSource, ref warningObjectList); bool toDependencies = HasBlockingToDependenciesInTarget(comparisonObject.TargetObjectName, CalcDependencyObjectType.DataSource, ref warningObjectList);
@ -1303,6 +1317,11 @@ namespace BismNormalizer.TabularCompare.TabularMetadata
{ {
if (comparisonObject.ComparisonObjectType == ComparisonObjectType.DataSource && comparisonObject.MergeAction == MergeAction.Create) if (comparisonObject.ComparisonObjectType == ComparisonObjectType.DataSource && comparisonObject.MergeAction == MergeAction.Create)
{ {
if (!DesktopHardened(comparisonObject, ValidationMessageType.DataSource))
{
return;
};
_targetTabularModel.CreateDataSource(_sourceTabularModel.DataSources.FindByName(comparisonObject.SourceObjectName)); _targetTabularModel.CreateDataSource(_sourceTabularModel.DataSources.FindByName(comparisonObject.SourceObjectName));
OnValidationMessage(new ValidationMessageEventArgs($"Create data source [{comparisonObject.SourceObjectName}].", ValidationMessageType.DataSource, ValidationMessageStatus.Informational)); OnValidationMessage(new ValidationMessageEventArgs($"Create data source [{comparisonObject.SourceObjectName}].", ValidationMessageType.DataSource, ValidationMessageStatus.Informational));
} }
@ -1312,6 +1331,11 @@ namespace BismNormalizer.TabularCompare.TabularMetadata
{ {
if (comparisonObject.ComparisonObjectType == ComparisonObjectType.DataSource && comparisonObject.MergeAction == MergeAction.Update) if (comparisonObject.ComparisonObjectType == ComparisonObjectType.DataSource && comparisonObject.MergeAction == MergeAction.Update)
{ {
if (!DesktopHardened(comparisonObject, ValidationMessageType.DataSource))
{
return;
};
DataSource sourceDataSource = _sourceTabularModel.DataSources.FindByName(comparisonObject.SourceObjectName); DataSource sourceDataSource = _sourceTabularModel.DataSources.FindByName(comparisonObject.SourceObjectName);
DataSource targetDataSource = _targetTabularModel.DataSources.FindByName(comparisonObject.TargetObjectName); DataSource targetDataSource = _targetTabularModel.DataSources.FindByName(comparisonObject.TargetObjectName);
@ -1335,6 +1359,11 @@ namespace BismNormalizer.TabularCompare.TabularMetadata
{ {
if (comparisonObject.ComparisonObjectType == ComparisonObjectType.Expression && comparisonObject.MergeAction == MergeAction.Delete) if (comparisonObject.ComparisonObjectType == ComparisonObjectType.Expression && comparisonObject.MergeAction == MergeAction.Delete)
{ {
if (!DesktopHardened(comparisonObject, ValidationMessageType.Expression))
{
return;
};
//Check any objects in target that depend on the expression are also going to be deleted //Check any objects in target that depend on the expression are also going to be deleted
List<string> warningObjectList = new List<string>(); List<string> warningObjectList = new List<string>();
if (!HasBlockingToDependenciesInTarget(comparisonObject.TargetObjectName, CalcDependencyObjectType.Expression, ref warningObjectList)) if (!HasBlockingToDependenciesInTarget(comparisonObject.TargetObjectName, CalcDependencyObjectType.Expression, ref warningObjectList))
@ -1358,6 +1387,11 @@ namespace BismNormalizer.TabularCompare.TabularMetadata
{ {
if (comparisonObject.ComparisonObjectType == ComparisonObjectType.Expression && comparisonObject.MergeAction == MergeAction.Create) if (comparisonObject.ComparisonObjectType == ComparisonObjectType.Expression && comparisonObject.MergeAction == MergeAction.Create)
{ {
if (!DesktopHardened(comparisonObject, ValidationMessageType.Expression))
{
return;
};
//Check any objects in source that this expression depends on are also going to be created if not already in target //Check any objects in source that this expression depends on are also going to be created if not already in target
List<string> warningObjectList = new List<string>(); List<string> warningObjectList = new List<string>();
if (!HasBlockingFromDependenciesInSource( if (!HasBlockingFromDependenciesInSource(
@ -1388,6 +1422,11 @@ namespace BismNormalizer.TabularCompare.TabularMetadata
{ {
if (comparisonObject.ComparisonObjectType == ComparisonObjectType.Expression && comparisonObject.MergeAction == MergeAction.Update) if (comparisonObject.ComparisonObjectType == ComparisonObjectType.Expression && comparisonObject.MergeAction == MergeAction.Update)
{ {
if (!DesktopHardened(comparisonObject, ValidationMessageType.Expression))
{
return;
};
//Check any objects in source that this expression depends on are also going to be created if not already in target //Check any objects in source that this expression depends on are also going to be created if not already in target
List<string> warningObjectList = new List<string>(); List<string> warningObjectList = new List<string>();
if (!HasBlockingFromDependenciesInSource( if (!HasBlockingFromDependenciesInSource(
@ -1425,6 +1464,10 @@ namespace BismNormalizer.TabularCompare.TabularMetadata
Table targetTable = _targetTabularModel.Tables.FindByName(comparisonObject.TargetObjectName); Table targetTable = _targetTabularModel.Tables.FindByName(comparisonObject.TargetObjectName);
bool isCalculationGroup = false; bool isCalculationGroup = false;
if (targetTable != null) isCalculationGroup = targetTable.IsCalculationGroup; if (targetTable != null) isCalculationGroup = targetTable.IsCalculationGroup;
if (!isCalculationGroup && !DesktopHardened(comparisonObject, ValidationMessageType.Table))
{
return;
};
_targetTabularModel.DeleteTable(comparisonObject.TargetObjectName); _targetTabularModel.DeleteTable(comparisonObject.TargetObjectName);
OnValidationMessage(new ValidationMessageEventArgs($"Delete {(isCalculationGroup ? "calculation group" : "table")} '{comparisonObject.TargetObjectName}'.", ValidationMessageType.Table, ValidationMessageStatus.Informational)); OnValidationMessage(new ValidationMessageEventArgs($"Delete {(isCalculationGroup ? "calculation group" : "table")} '{comparisonObject.TargetObjectName}'.", ValidationMessageType.Table, ValidationMessageStatus.Informational));
} }
@ -1473,6 +1516,10 @@ namespace BismNormalizer.TabularCompare.TabularMetadata
} }
else else
{ {
if (!DesktopHardened(comparisonObject, ValidationMessageType.Table))
{
return;
};
_targetTabularModel.CreateTable(sourceTable); _targetTabularModel.CreateTable(sourceTable);
OnValidationMessage(new ValidationMessageEventArgs($"Create table '{comparisonObject.SourceObjectName}'.", ValidationMessageType.Table, ValidationMessageStatus.Informational)); OnValidationMessage(new ValidationMessageEventArgs($"Create table '{comparisonObject.SourceObjectName}'.", ValidationMessageType.Table, ValidationMessageStatus.Informational));
} }
@ -1528,6 +1575,10 @@ namespace BismNormalizer.TabularCompare.TabularMetadata
} }
else else
{ {
if (!tableSource.IsCalculationGroup && !DesktopHardened(comparisonObject, ValidationMessageType.Table))
{
return;
};
_targetTabularModel.UpdateTable(tableSource, tableTarget, out string retainPartitionsMessage); _targetTabularModel.UpdateTable(tableSource, tableTarget, out string retainPartitionsMessage);
OnValidationMessage(new ValidationMessageEventArgs($"Update {(tableSource.IsCalculationGroup ? "calculation group" : "table")} '{comparisonObject.TargetObjectName}'. {retainPartitionsMessage}", ValidationMessageType.Table, ValidationMessageStatus.Informational)); OnValidationMessage(new ValidationMessageEventArgs($"Update {(tableSource.IsCalculationGroup ? "calculation group" : "table")} '{comparisonObject.TargetObjectName}'. {retainPartitionsMessage}", ValidationMessageType.Table, ValidationMessageStatus.Informational));
} }
@ -1554,6 +1605,10 @@ namespace BismNormalizer.TabularCompare.TabularMetadata
{ {
if (comparisonObject.ComparisonObjectType == ComparisonObjectType.Relationship && comparisonObject.MergeAction == MergeAction.Delete) if (comparisonObject.ComparisonObjectType == ComparisonObjectType.Relationship && comparisonObject.MergeAction == MergeAction.Delete)
{ {
if (!DesktopHardened(comparisonObject, ValidationMessageType.Relationship))
{
return;
};
foreach (Table tableTarget in _targetTabularModel.Tables) foreach (Table tableTarget in _targetTabularModel.Tables)
{ {
Relationship relationshipTarget = tableTarget.Relationships.FindByName(comparisonObject.TargetObjectName.Trim()); Relationship relationshipTarget = tableTarget.Relationships.FindByName(comparisonObject.TargetObjectName.Trim());
@ -1574,6 +1629,10 @@ namespace BismNormalizer.TabularCompare.TabularMetadata
{ {
if (comparisonObject.ComparisonObjectType == ComparisonObjectType.Relationship && comparisonObject.MergeAction == MergeAction.Create) if (comparisonObject.ComparisonObjectType == ComparisonObjectType.Relationship && comparisonObject.MergeAction == MergeAction.Create)
{ {
if (!DesktopHardened(comparisonObject, ValidationMessageType.Relationship))
{
return;
};
Table tableSource = _sourceTabularModel.Tables.FindByName(tableName); Table tableSource = _sourceTabularModel.Tables.FindByName(tableName);
Table tableTarget = _targetTabularModel.Tables.FindByName(tableName); Table tableTarget = _targetTabularModel.Tables.FindByName(tableName);
Relationship relationshipSource = tableSource.Relationships.FindByInternalName(comparisonObject.SourceObjectInternalName); Relationship relationshipSource = tableSource.Relationships.FindByInternalName(comparisonObject.SourceObjectInternalName);
@ -1595,6 +1654,10 @@ namespace BismNormalizer.TabularCompare.TabularMetadata
{ {
if (comparisonObject.ComparisonObjectType == ComparisonObjectType.Relationship && comparisonObject.MergeAction == MergeAction.Update) if (comparisonObject.ComparisonObjectType == ComparisonObjectType.Relationship && comparisonObject.MergeAction == MergeAction.Update)
{ {
if (!DesktopHardened(comparisonObject, ValidationMessageType.Relationship))
{
return;
};
Table tableSource = _sourceTabularModel.Tables.FindByName(tableName); Table tableSource = _sourceTabularModel.Tables.FindByName(tableName);
Table tableTarget = _targetTabularModel.Tables.FindByName(tableName); Table tableTarget = _targetTabularModel.Tables.FindByName(tableName);
Relationship relationshipSource = tableSource.Relationships.FindByInternalName(comparisonObject.SourceObjectInternalName); Relationship relationshipSource = tableSource.Relationships.FindByInternalName(comparisonObject.SourceObjectInternalName);
@ -1763,6 +1826,20 @@ namespace BismNormalizer.TabularCompare.TabularMetadata
#endregion #endregion
private bool DesktopHardened(ComparisonObject comparisonObject, ValidationMessageType validationMessageType)
{
if (_targetTabularModel.ConnectionInfo.UseDesktop && _targetTabularModel.ConnectionInfo.ServerMode == Microsoft.AnalysisServices.ServerMode.SharePoint)
{
//V3 hardening
OnValidationMessage(new ValidationMessageEventArgs($"Unable to {comparisonObject.MergeAction.ToString().ToLower()} {comparisonObject.ComparisonObjectType.ToString()} {comparisonObject.TargetObjectName} because target is Power BI Desktop, which does not yet support modifications for this object type.", validationMessageType, ValidationMessageStatus.Warning));
return false;
}
else
{
return true;
}
}
/// <summary> /// <summary>
/// Update target tabular model with changes defined by actions in ComparisonObject instances. /// Update target tabular model with changes defined by actions in ComparisonObject instances.
/// </summary> /// </summary>

View File

@ -41,12 +41,12 @@ namespace BismNormalizer.TabularCompare.TabularMetadata
_objectDefinition = token.ToString(Formatting.Indented); _objectDefinition = token.ToString(Formatting.Indented);
} }
//todo: remove with Giri's fix ////todo: remove with Giri's fix
//Remove return characters ////Remove return characters
if (namedMetaDataObject is Tom.NamedExpression || namedMetaDataObject is Tom.Table) //if (namedMetaDataObject is Tom.NamedExpression || namedMetaDataObject is Tom.Table)
{ //{
_objectDefinition = _objectDefinition.Replace("\\r", ""); // _objectDefinition = _objectDefinition.Replace("\\r", "");
} //}
//Order table columns //Order table columns
if (namedMetaDataObject is Tom.Table) if (namedMetaDataObject is Tom.Table)

View File

@ -95,7 +95,7 @@
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" /> <bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
</dependentAssembly> </dependentAssembly>
<dependentAssembly> <dependentAssembly>
<assemblyIdentity name="Microsoft.VisualStudio.Utilities" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <assemblyIdentity name="Microsoft.VisualStudio.Utilities" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />

View File

@ -27,7 +27,7 @@
<package id="Microsoft.VisualStudio.Utilities" version="14.3.25407" targetFramework="net461" /> <package id="Microsoft.VisualStudio.Utilities" version="14.3.25407" targetFramework="net461" />
<package id="Microsoft.VisualStudio.Validation" version="14.1.111" targetFramework="net461" /> <package id="Microsoft.VisualStudio.Validation" version="14.1.111" targetFramework="net461" />
<package id="MSBuild.Extension.Pack" version="1.8.0" targetFramework="net452" /> <package id="MSBuild.Extension.Pack" version="1.8.0" targetFramework="net452" />
<package id="Newtonsoft.Json" version="10.0.3" targetFramework="net461" /> <package id="Newtonsoft.Json" version="12.0.3" targetFramework="net472" />
<package id="stdole" version="7.0.3302" targetFramework="net472" /> <package id="stdole" version="7.0.3302" targetFramework="net472" />
<package id="System.Diagnostics.DiagnosticSource" version="4.5.0" targetFramework="net461" /> <package id="System.Diagnostics.DiagnosticSource" version="4.5.0" targetFramework="net461" />
</packages> </packages>

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<PackageManifest Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011" xmlns:d="http://schemas.microsoft.com/developer/vsx-schema-design/2011"> <PackageManifest Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vsx-schema/2011" xmlns:d="http://schemas.microsoft.com/developer/vsx-schema-design/2011">
<Metadata> <Metadata>
<Identity Id="BismNormalizer.ea2aeb43-64a6-4dee-8816-099fb44513fa" Version="5.0.0.5" Language="en-US" Publisher="BISM Normalizer" /> <Identity Id="BismNormalizer.ea2aeb43-64a6-4dee-8816-099fb44513fa" Version="5.0.0.12" Language="en-US" Publisher="BISM Normalizer" />
<DisplayName>BISM Normalizer</DisplayName> <DisplayName>BISM Normalizer</DisplayName>
<Description xml:space="preserve">BISM Normalizer manages Analysis Services tabular models</Description> <Description xml:space="preserve">BISM Normalizer manages Analysis Services tabular models</Description>
<MoreInfo>http://bism-normalizer.com/</MoreInfo> <MoreInfo>http://bism-normalizer.com/</MoreInfo>