├── .gitattributes ├── .gitignore ├── BDK.XrmToolBox ├── BDK.XrmToolBox.RecycleBin │ ├── BDK.XrmToolBox.RecycleBin.csproj │ ├── FetchXml.Designer.cs │ ├── FetchXml.resx │ ├── Model │ │ ├── AuditItem.cs │ │ └── DeletedField.cs │ ├── Plugin.cs │ ├── PluginControl.Designer.cs │ ├── PluginControl.cs │ ├── PluginControl.resx │ ├── Properties │ │ ├── AssemblyInfo.cs │ │ ├── DataSources │ │ │ ├── BDK.XrmToolBox.RecycleBin.Model.AuditItem.datasource │ │ │ └── BDK.XrmToolBox.RecycleBin.Model.DeletedField.datasource │ │ ├── Resources.Designer.cs │ │ └── Resources.resx │ ├── Resources │ │ ├── Delete.gif │ │ ├── Refresh.gif │ │ └── StepEnabled.gif │ ├── app.config │ └── packages.config ├── BDK.XrmToolBox.StorageCleaner │ ├── BDK.XrmToolBox.StorageCleaner.csproj │ ├── Plugin.cs │ ├── PluginControl.Designer.cs │ ├── PluginControl.cs │ ├── PluginControl.resx │ ├── Properties │ │ ├── AssemblyInfo.cs │ │ ├── Resources.Designer.cs │ │ └── Resources.resx │ ├── Resources │ │ ├── Delete.gif │ │ ├── PluginProfile.gif │ │ └── Refresh.gif │ ├── Settings.Designer.cs │ ├── Settings.resx │ ├── app.config │ └── packages.config ├── BDK.XrmToolBox.UserAuditViewer │ ├── BDK.XrmToolBox.UserAuditViewer.csproj │ ├── Common.cs │ ├── InactiveUsers.Designer.cs │ ├── InactiveUsers.cs │ ├── InactiveUsers.resx │ ├── Model │ │ ├── AuditLog.cs │ │ └── CRMUser.cs │ ├── Plugin.cs │ ├── PluginControl.Designer.cs │ ├── PluginControl.cs │ ├── PluginControl.resx │ ├── Properties │ │ ├── AssemblyInfo.cs │ │ ├── DataSources │ │ │ ├── BDK.XrmToolBox.UserManagement.Model.AuditTransaction.datasource │ │ │ ├── BDK.XrmToolBox.UserManagement.Model.AuditUserLogin.datasource │ │ │ ├── BDK.XrmToolBox.UserManagement.Model.CRMUser.datasource │ │ │ └── BDK.XrmToolBox.UserManagement.Model.LoginLog.datasource │ │ ├── Resources.Designer.cs │ │ └── Resources.resx │ ├── Readme.MD │ ├── Resources │ │ ├── AssemblySelected.gif │ │ ├── Delete.gif │ │ ├── Organization.gif │ │ └── UninstallProfiler.gif │ ├── Settings.Designer.cs │ ├── Settings.resx │ ├── ShowInactiveUsers.Designer.cs │ ├── ShowInactiveUsers.cs │ ├── ShowInactiveUsers.resx │ ├── app.config │ └── packages.config ├── BDK.XrmToolBox.sln ├── DeepakProfilePic.jpg └── References │ ├── DocumentFormat.OpenXml.dll │ ├── McTools.Xrm.Connection.dll │ ├── Microsoft.Crm.Sdk.Proxy.dll │ ├── Microsoft.Xrm.Sdk.dll │ ├── XrmToolBox.Extensibility.dll │ └── XrmToolBox.exe ├── LICENSE ├── README.md └── _config.yml /.gitattributes: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Set default behavior to automatically normalize line endings. 3 | ############################################################################### 4 | * text=auto 5 | 6 | ############################################################################### 7 | # Set default behavior for command prompt diff. 8 | # 9 | # This is need for earlier builds of msysgit that does not have it on by 10 | # default for csharp files. 11 | # Note: This is only used by command line 12 | ############################################################################### 13 | #*.cs diff=csharp 14 | 15 | ############################################################################### 16 | # Set the merge driver for project and solution files 17 | # 18 | # Merging from the command prompt will add diff markers to the files if there 19 | # are conflicts (Merging from VS is not affected by the settings below, in VS 20 | # the diff markers are never inserted). Diff markers may cause the following 21 | # file extensions to fail to load in VS. An alternative would be to treat 22 | # these files as binary and thus will always conflict and require user 23 | # intervention with every merge. To do so, just uncomment the entries below 24 | ############################################################################### 25 | #*.sln merge=binary 26 | #*.csproj merge=binary 27 | #*.vbproj merge=binary 28 | #*.vcxproj merge=binary 29 | #*.vcproj merge=binary 30 | #*.dbproj merge=binary 31 | #*.fsproj merge=binary 32 | #*.lsproj merge=binary 33 | #*.wixproj merge=binary 34 | #*.modelproj merge=binary 35 | #*.sqlproj merge=binary 36 | #*.wwaproj merge=binary 37 | 38 | ############################################################################### 39 | # behavior for image files 40 | # 41 | # image files are treated as binary by default. 42 | ############################################################################### 43 | #*.jpg binary 44 | #*.png binary 45 | #*.gif binary 46 | 47 | ############################################################################### 48 | # diff behavior for common document formats 49 | # 50 | # Convert binary document formats to text before diffing them. This feature 51 | # is only available from the command line. Turn it on by uncommenting the 52 | # entries below. 53 | ############################################################################### 54 | #*.doc diff=astextplain 55 | #*.DOC diff=astextplain 56 | #*.docx diff=astextplain 57 | #*.DOCX diff=astextplain 58 | #*.dot diff=astextplain 59 | #*.DOT diff=astextplain 60 | #*.pdf diff=astextplain 61 | #*.PDF diff=astextplain 62 | #*.rtf diff=astextplain 63 | #*.RTF diff=astextplain 64 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | 4 | # User-specific files 5 | *.suo 6 | *.user 7 | *.userosscache 8 | *.sln.docstates 9 | 10 | # User-specific files (MonoDevelop/Xamarin Studio) 11 | *.userprefs 12 | 13 | # Build results 14 | [Dd]ebug/ 15 | [Dd]ebugPublic/ 16 | [Rr]elease/ 17 | [Rr]eleases/ 18 | [Xx]64/ 19 | [Xx]86/ 20 | [Bb]uild/ 21 | bld/ 22 | [Bb]in/ 23 | [Oo]bj/ 24 | 25 | # Visual Studio 2015 cache/options directory 26 | .vs/ 27 | # Uncomment if you have tasks that create the project's static files in wwwroot 28 | #wwwroot/ 29 | 30 | # MSTest test Results 31 | [Tt]est[Rr]esult*/ 32 | [Bb]uild[Ll]og.* 33 | 34 | # NUNIT 35 | *.VisualState.xml 36 | TestResult.xml 37 | 38 | # Build Results of an ATL Project 39 | [Dd]ebugPS/ 40 | [Rr]eleasePS/ 41 | dlldata.c 42 | 43 | # DNX 44 | project.lock.json 45 | artifacts/ 46 | 47 | *_i.c 48 | *_p.c 49 | *_i.h 50 | *.ilk 51 | *.meta 52 | *.obj 53 | *.pch 54 | *.pdb 55 | *.pgc 56 | *.pgd 57 | *.rsp 58 | *.sbr 59 | *.tlb 60 | *.tli 61 | *.tlh 62 | *.tmp 63 | *.tmp_proj 64 | *.log 65 | *.vspscc 66 | *.vssscc 67 | .builds 68 | *.pidb 69 | *.svclog 70 | *.scc 71 | 72 | # Chutzpah Test files 73 | _Chutzpah* 74 | 75 | # Visual C++ cache files 76 | ipch/ 77 | *.aps 78 | *.ncb 79 | *.opendb 80 | *.opensdf 81 | *.sdf 82 | *.cachefile 83 | *.VC.db 84 | 85 | # Visual Studio profiler 86 | *.psess 87 | *.vsp 88 | *.vspx 89 | *.sap 90 | 91 | # TFS 2012 Local Workspace 92 | $tf/ 93 | 94 | # Guidance Automation Toolkit 95 | *.gpState 96 | 97 | # ReSharper is a .NET coding add-in 98 | _ReSharper*/ 99 | *.[Rr]e[Ss]harper 100 | *.DotSettings.user 101 | 102 | # JustCode is a .NET coding add-in 103 | .JustCode 104 | 105 | # TeamCity is a build add-in 106 | _TeamCity* 107 | 108 | # DotCover is a Code Coverage Tool 109 | *.dotCover 110 | 111 | # NCrunch 112 | _NCrunch_* 113 | .*crunch*.local.xml 114 | nCrunchTemp_* 115 | 116 | # MightyMoose 117 | *.mm.* 118 | AutoTest.Net/ 119 | 120 | # Web workbench (sass) 121 | .sass-cache/ 122 | 123 | # Installshield output folder 124 | [Ee]xpress/ 125 | 126 | # DocProject is a documentation generator add-in 127 | DocProject/buildhelp/ 128 | DocProject/Help/*.HxT 129 | DocProject/Help/*.HxC 130 | DocProject/Help/*.hhc 131 | DocProject/Help/*.hhk 132 | DocProject/Help/*.hhp 133 | DocProject/Help/Html2 134 | DocProject/Help/html 135 | 136 | # Click-Once directory 137 | publish/ 138 | 139 | # Publish Web Output 140 | *.[Pp]ublish.xml 141 | *.azurePubxml 142 | 143 | # TODO: Un-comment the next line if you do not want to checkin 144 | # your web deploy settings because they may include unencrypted 145 | # passwords 146 | #*.pubxml 147 | *.publishproj 148 | 149 | # NuGet Packages 150 | *.nupkg 151 | # The packages folder can be ignored because of Package Restore 152 | **/packages/* 153 | # except build/, which is used as an MSBuild target. 154 | !**/packages/build/ 155 | # Uncomment if necessary however generally it will be regenerated when needed 156 | #!**/packages/repositories.config 157 | # NuGet v3's project.json files produces more ignoreable files 158 | *.nuget.props 159 | *.nuget.targets 160 | 161 | # Microsoft Azure Build Output 162 | csx/ 163 | *.build.csdef 164 | 165 | # Microsoft Azure Emulator 166 | ecf/ 167 | rcf/ 168 | 169 | # Windows Store app package directory 170 | AppPackages/ 171 | BundleArtifacts/ 172 | 173 | # Visual Studio cache files 174 | # files ending in .cache can be ignored 175 | *.[Cc]ache 176 | # but keep track of directories ending in .cache 177 | !*.[Cc]ache/ 178 | 179 | # Others 180 | ClientBin/ 181 | [Ss]tyle[Cc]op.* 182 | ~$* 183 | *~ 184 | *.dbmdl 185 | *.dbproj.schemaview 186 | *.pfx 187 | *.publishsettings 188 | node_modules/ 189 | orleans.codegen.cs 190 | 191 | # RIA/Silverlight projects 192 | Generated_Code/ 193 | 194 | # Backup & report files from converting an old project file 195 | # to a newer Visual Studio version. Backup files are not needed, 196 | # because we have git ;-) 197 | _UpgradeReport_Files/ 198 | Backup*/ 199 | UpgradeLog*.XML 200 | UpgradeLog*.htm 201 | 202 | # SQL Server files 203 | *.mdf 204 | *.ldf 205 | 206 | # Business Intelligence projects 207 | *.rdl.data 208 | *.bim.layout 209 | *.bim_*.settings 210 | 211 | # Microsoft Fakes 212 | FakesAssemblies/ 213 | 214 | # GhostDoc plugin setting file 215 | *.GhostDoc.xml 216 | 217 | # Node.js Tools for Visual Studio 218 | .ntvs_analysis.dat 219 | 220 | # Visual Studio 6 build log 221 | *.plg 222 | 223 | # Visual Studio 6 workspace options file 224 | *.opt 225 | 226 | # Visual Studio LightSwitch build output 227 | **/*.HTMLClient/GeneratedArtifacts 228 | **/*.DesktopClient/GeneratedArtifacts 229 | **/*.DesktopClient/ModelManifest.xml 230 | **/*.Server/GeneratedArtifacts 231 | **/*.Server/ModelManifest.xml 232 | _Pvt_Extensions 233 | 234 | # LightSwitch generated files 235 | GeneratedArtifacts/ 236 | ModelManifest.xml 237 | 238 | # Paket dependency manager 239 | .paket/paket.exe 240 | 241 | # FAKE - F# Make 242 | .fake/ 243 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.RecycleBin/FetchXml.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace BDK.XrmToolBox.RecycleBin { 12 | using System; 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class FetchXml { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal FetchXml() { 33 | } 34 | 35 | /// 36 | /// Returns the cached ResourceManager instance used by this class. 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("BDK.XrmToolBox.RecycleBin.FetchXml", typeof(FetchXml).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// Overrides the current thread's CurrentUICulture property for all 51 | /// resource lookups using this strongly typed resource class. 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | 63 | /// 64 | /// Looks up a localized string similar to <fetch> 65 | /// <entity name="audit" > 66 | /// <attribute name="objecttypecodename" /> 67 | /// <attribute name="regardingobjectid" /> 68 | /// <attribute name="regardingobjectidname" /> 69 | /// <attribute name="createdon" /> 70 | /// <attribute name="userid" /> 71 | /// <attribute name="objectid" /> 72 | /// <attribute name="auditid" /> 73 | /// <filter type="and" > 74 | /// <condition attribute="operation" operator="eq" value="3" /> 75 | /// <condition attribute="createdon" operator="ge" value="{0}" /> 76 | /// <condition attribute="createdon" o [rest of string was truncated]";. 77 | /// 78 | internal static string DeleteAuditLogsByUser { 79 | get { 80 | return ResourceManager.GetString("DeleteAuditLogsByUser", resourceCulture); 81 | } 82 | } 83 | 84 | /// 85 | /// Looks up a localized string similar to <fetch> 86 | /// <entity name="audit" > 87 | /// <attribute name="objecttypecodename" /> 88 | /// <attribute name="regardingobjectid" /> 89 | /// <attribute name="regardingobjectidname" /> 90 | /// <attribute name="createdon" /> 91 | /// <attribute name="userid" /> 92 | /// <attribute name="objectid" /> 93 | /// <attribute name="auditid" /> 94 | /// <attribute name="objecttypecode" /> 95 | /// <attribute name="actionname" /> 96 | /// <attribute name="action" /> 97 | /// <attribute name="objectidname" /> 98 | /// <filter type="and" > 99 | /// <condition attribute [rest of string was truncated]";. 100 | /// 101 | internal static string DeletedAuditLogs { 102 | get { 103 | return ResourceManager.GetString("DeletedAuditLogs", resourceCulture); 104 | } 105 | } 106 | 107 | /// 108 | /// Looks up a localized string similar to <fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false" > 109 | /// <entity name="systemuser" > 110 | /// <attribute name="fullname" /> 111 | /// <attribute name="systemuserid" /> 112 | /// <filter type="and" > 113 | /// <condition attribute="isdisabled" operator="eq" value="0" /> 114 | /// <condition attribute="accessmode" operator="eq" value="0" /> 115 | /// </filter> 116 | /// <order attribute="fullname" /> 117 | /// </entity> 118 | ///</fetch>. 119 | /// 120 | internal static string LicencedUsers { 121 | get { 122 | return ResourceManager.GetString("LicencedUsers", resourceCulture); 123 | } 124 | } 125 | } 126 | } 127 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.RecycleBin/FetchXml.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | <fetch> 122 | <entity name="audit" > 123 | <attribute name="objecttypecodename" /> 124 | <attribute name="regardingobjectid" /> 125 | <attribute name="regardingobjectidname" /> 126 | <attribute name="createdon" /> 127 | <attribute name="userid" /> 128 | <attribute name="objectid" /> 129 | <attribute name="auditid" /> 130 | <filter type="and" > 131 | <condition attribute="operation" operator="eq" value="3" /> 132 | <condition attribute="createdon" operator="ge" value="{0}" /> 133 | <condition attribute="createdon" operator="lt" value="{1}" /> 134 | <condition attribute="objecttypecode" operator="eq" value="{2}" /> 135 | <condition attribute="userid" operator="eq" value="{3}" /> 136 | </filter> 137 | </entity> 138 | </fetch> 139 | 140 | 141 | <fetch> 142 | <entity name="audit" > 143 | <attribute name="objecttypecodename" /> 144 | <attribute name="regardingobjectid" /> 145 | <attribute name="regardingobjectidname" /> 146 | <attribute name="createdon" /> 147 | <attribute name="userid" /> 148 | <attribute name="objectid" /> 149 | <attribute name="auditid" /> 150 | <attribute name="objecttypecode" /> 151 | <attribute name="actionname" /> 152 | <attribute name="action" /> 153 | <attribute name="objectidname" /> 154 | <filter type="and" > 155 | <condition attribute="operation" operator="eq" value="3" /> 156 | <condition attribute="createdon" operator="ge" value="{0}" /> 157 | <condition attribute="createdon" operator="lt" value="{1}" /> 158 | <condition attribute="objecttypecode" operator="eq" value="{2}" /> 159 | </filter> 160 | </entity> 161 | </fetch> 162 | 163 | 164 | <fetch version="1.0" output-format="xml-platform" mapping="logical" distinct="false" > 165 | <entity name="systemuser" > 166 | <attribute name="fullname" /> 167 | <attribute name="systemuserid" /> 168 | <filter type="and" > 169 | <condition attribute="isdisabled" operator="eq" value="0" /> 170 | <condition attribute="accessmode" operator="eq" value="0" /> 171 | </filter> 172 | <order attribute="fullname" /> 173 | </entity> 174 | </fetch> 175 | 176 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.RecycleBin/Model/AuditItem.cs: -------------------------------------------------------------------------------- 1 | /* 2 | MIT License 3 | 4 | Copyright (c) 2019 Tech Quantum 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | */ 24 | 25 | namespace BDK.XrmToolBox.RecycleBin.Model 26 | { 27 | using Microsoft.Crm.Sdk.Messages; 28 | using Microsoft.Xrm.Sdk.Metadata; 29 | using System; 30 | 31 | /// 32 | /// Instance of audit item entry 33 | /// 34 | internal class AuditItem 35 | { 36 | /// 37 | /// Gets or sets the audit identifier. 38 | /// 39 | /// 40 | /// The audit identifier. 41 | /// 42 | public Guid AuditId { get; set; } 43 | 44 | /// 45 | /// Gets or sets the record identifier. 46 | /// 47 | /// 48 | /// The record identifier. 49 | /// 50 | public Guid RecordId { get; set; } 51 | 52 | /// 53 | /// Gets or sets the name. 54 | /// 55 | /// 56 | /// The name. 57 | /// 58 | public string Name { get; set; } 59 | 60 | /// 61 | /// Gets or sets the entity. 62 | /// 63 | /// 64 | /// The entity. 65 | /// 66 | public string Entity { get; set; } 67 | 68 | /// 69 | /// Gets or sets the metadata. 70 | /// 71 | /// 72 | /// The metadata. 73 | /// 74 | public EntityMetadata Metadata { get; set; } 75 | 76 | /// 77 | /// Gets or sets the deletion date. 78 | /// 79 | /// 80 | /// The deletion date. 81 | /// 82 | public DateTime DeletionDate { get; set; } 83 | 84 | /// 85 | /// Gets or sets the deleted by date in string format. 86 | /// 87 | /// 88 | /// The deleted by. 89 | /// 90 | public string DeletedBy { get; set; } 91 | 92 | /// 93 | /// Gets or sets the audit detail. 94 | /// 95 | /// 96 | /// The audit detail. 97 | /// 98 | public AttributeAuditDetail AuditDetail { get; set; } 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.RecycleBin/Model/DeletedField.cs: -------------------------------------------------------------------------------- 1 | /* 2 | MIT License 3 | 4 | Copyright (c) 2019 Tech Quantum 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | */ 24 | 25 | namespace BDK.XrmToolBox.RecycleBin.Model 26 | { 27 | /// 28 | /// Class for deleted field tracking 29 | /// 30 | internal class DeletedField 31 | { 32 | /// 33 | /// Gets or sets the name of the field. 34 | /// 35 | /// 36 | /// The name of the field. 37 | /// 38 | public string FieldName { get; set; } 39 | 40 | /// 41 | /// Gets or sets the value. 42 | /// 43 | /// 44 | /// The value. 45 | /// 46 | public object Value { get; set; } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.RecycleBin/PluginControl.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 17, 17 122 | 123 | 124 | True 125 | 126 | 127 | 122, 17 128 | 129 | 130 | 532, 17 131 | 132 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.RecycleBin/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("Recycle Bin")] 9 | [assembly: AssemblyDescription("Review and restore the deleted records for entities with auditing enabled")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("Deepak Battini")] 12 | [assembly: AssemblyProduct("BDK.XrmToolBox.RecycleBin")] 13 | [assembly: AssemblyCopyright("Copyright © 2016")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("8d2c8bfc-9031-4a03-8e65-540cd27c5b7d")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.2023.11.0")] 36 | [assembly: AssemblyFileVersion("1.2021.11.0")] 37 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.RecycleBin/Properties/DataSources/BDK.XrmToolBox.RecycleBin.Model.AuditItem.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | BDK.XrmToolBox.RecycleBin.Model.AuditItem, BDK.XrmToolBox.RecycleBin, Version=1.2016.11.1, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.RecycleBin/Properties/DataSources/BDK.XrmToolBox.RecycleBin.Model.DeletedField.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | BDK.XrmToolBox.RecycleBin.Model.DeletedField, BDK.XrmToolBox.RecycleBin, Version=1.2016.11.1, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.RecycleBin/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace BDK.XrmToolBox.RecycleBin.Properties { 12 | using System; 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// Returns the cached ResourceManager instance used by this class. 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("BDK.XrmToolBox.RecycleBin.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// Overrides the current thread's CurrentUICulture property for all 51 | /// resource lookups using this strongly typed resource class. 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | 63 | /// 64 | /// Looks up a localized resource of type System.Drawing.Bitmap. 65 | /// 66 | internal static System.Drawing.Bitmap Delete { 67 | get { 68 | object obj = ResourceManager.GetObject("Delete", resourceCulture); 69 | return ((System.Drawing.Bitmap)(obj)); 70 | } 71 | } 72 | 73 | /// 74 | /// Looks up a localized resource of type System.Drawing.Bitmap. 75 | /// 76 | internal static System.Drawing.Bitmap Refresh { 77 | get { 78 | object obj = ResourceManager.GetObject("Refresh", resourceCulture); 79 | return ((System.Drawing.Bitmap)(obj)); 80 | } 81 | } 82 | 83 | /// 84 | /// Looks up a localized resource of type System.Drawing.Bitmap. 85 | /// 86 | internal static System.Drawing.Bitmap StepEnabled { 87 | get { 88 | object obj = ResourceManager.GetObject("StepEnabled", resourceCulture); 89 | return ((System.Drawing.Bitmap)(obj)); 90 | } 91 | } 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.RecycleBin/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | ..\Resources\Refresh.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 123 | 124 | 125 | ..\Resources\Delete.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 126 | 127 | 128 | ..\Resources\StepEnabled.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 129 | 130 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.RecycleBin/Resources/Delete.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deepakkumar1984/XrmToolBoxPlugins/5400548b7fdda47faa2e676ba08c3573a6a275e1/BDK.XrmToolBox/BDK.XrmToolBox.RecycleBin/Resources/Delete.gif -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.RecycleBin/Resources/Refresh.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deepakkumar1984/XrmToolBoxPlugins/5400548b7fdda47faa2e676ba08c3573a6a275e1/BDK.XrmToolBox/BDK.XrmToolBox.RecycleBin/Resources/Refresh.gif -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.RecycleBin/Resources/StepEnabled.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deepakkumar1984/XrmToolBoxPlugins/5400548b7fdda47faa2e676ba08c3573a6a275e1/BDK.XrmToolBox/BDK.XrmToolBox.RecycleBin/Resources/StepEnabled.gif -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.RecycleBin/app.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.RecycleBin/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.StorageCleaner/PluginControl.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 17, 17 122 | 123 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.StorageCleaner/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("Reduce Storage Space Usage")] 9 | [assembly: AssemblyDescription("Check and manage storage usage and clean-up")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("Deepak Battini")] 12 | [assembly: AssemblyProduct("BDK.XrmToolBox.StorageCleaner")] 13 | [assembly: AssemblyCopyright("Copyright © 2016")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("0d801ae5-c241-4c37-8649-c71ca8f95409")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.2023.11.0")] 36 | [assembly: AssemblyFileVersion("1.2023.11.0")] 37 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.StorageCleaner/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace BDK.XrmToolBox.StorageCleaner.Properties { 12 | using System; 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// Returns the cached ResourceManager instance used by this class. 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("BDK.XrmToolBox.StorageCleaner.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// Overrides the current thread's CurrentUICulture property for all 51 | /// resource lookups using this strongly typed resource class. 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | 63 | /// 64 | /// Looks up a localized resource of type System.Drawing.Bitmap. 65 | /// 66 | internal static System.Drawing.Bitmap Delete { 67 | get { 68 | object obj = ResourceManager.GetObject("Delete", resourceCulture); 69 | return ((System.Drawing.Bitmap)(obj)); 70 | } 71 | } 72 | 73 | /// 74 | /// Looks up a localized resource of type System.Drawing.Bitmap. 75 | /// 76 | internal static System.Drawing.Bitmap PluginProfile { 77 | get { 78 | object obj = ResourceManager.GetObject("PluginProfile", resourceCulture); 79 | return ((System.Drawing.Bitmap)(obj)); 80 | } 81 | } 82 | 83 | /// 84 | /// Looks up a localized resource of type System.Drawing.Bitmap. 85 | /// 86 | internal static System.Drawing.Bitmap Refresh { 87 | get { 88 | object obj = ResourceManager.GetObject("Refresh", resourceCulture); 89 | return ((System.Drawing.Bitmap)(obj)); 90 | } 91 | } 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.StorageCleaner/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | ..\Resources\Refresh.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 123 | 124 | 125 | ..\Resources\Delete.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 126 | 127 | 128 | ..\Resources\PluginProfile.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 129 | 130 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.StorageCleaner/Resources/Delete.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deepakkumar1984/XrmToolBoxPlugins/5400548b7fdda47faa2e676ba08c3573a6a275e1/BDK.XrmToolBox/BDK.XrmToolBox.StorageCleaner/Resources/Delete.gif -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.StorageCleaner/Resources/PluginProfile.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deepakkumar1984/XrmToolBoxPlugins/5400548b7fdda47faa2e676ba08c3573a6a275e1/BDK.XrmToolBox/BDK.XrmToolBox.StorageCleaner/Resources/PluginProfile.gif -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.StorageCleaner/Resources/Refresh.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deepakkumar1984/XrmToolBoxPlugins/5400548b7fdda47faa2e676ba08c3573a6a275e1/BDK.XrmToolBox/BDK.XrmToolBox.StorageCleaner/Resources/Refresh.gif -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.StorageCleaner/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace BDK.XrmToolBox.StorageCleaner { 12 | using System; 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Settings { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Settings() { 33 | } 34 | 35 | /// 36 | /// Returns the cached ResourceManager instance used by this class. 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("BDK.XrmToolBox.StorageCleaner.Settings", typeof(Settings).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// Overrides the current thread's CurrentUICulture property for all 51 | /// resource lookups using this strongly typed resource class. 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | 63 | /// 64 | /// Looks up a localized string similar to <fetch version="1.0" {1}> 65 | /// <entity name="audit" > 66 | /// <attribute name="auditid" /> 67 | /// <filter> 68 | /// <condition attribute="createdon" operator="olderthan-x-months" value="{0}" /> 69 | /// </filter> 70 | /// </entity> 71 | ///</fetch>. 72 | /// 73 | internal static string FetchXml_Audit { 74 | get { 75 | return ResourceManager.GetString("FetchXml_Audit", resourceCulture); 76 | } 77 | } 78 | 79 | /// 80 | /// Looks up a localized string similar to <fetch version="1.0" {1}> 81 | /// <entity name="asyncoperation" > 82 | /// <attribute name="asyncoperationid" /> 83 | /// <filter type="and" > 84 | /// <condition attribute="operationtype" operator="eq" value="13" /> 85 | /// <condition attribute="statuscode" operator="eq" value="30" /> 86 | /// <condition attribute="completedon" operator="olderthan-x-months" value="{0}" /> 87 | /// </filter> 88 | /// </entity> 89 | ///</fetch>. 90 | /// 91 | internal static string FetchXml_BulkDelete { 92 | get { 93 | return ResourceManager.GetString("FetchXml_BulkDelete", resourceCulture); 94 | } 95 | } 96 | 97 | /// 98 | /// Looks up a localized string similar to <fetch version="1.0" {1}> 99 | /// <entity name="asyncoperation" > 100 | /// <attribute name="asyncoperationid" /> 101 | /// <filter type="and" > 102 | /// <condition attribute="operationtype" operator="in" > 103 | /// <value>2</value> 104 | /// <value>10</value> 105 | /// </condition> 106 | /// <condition attribute="statuscode" operator="eq" value="30" /> 107 | /// <condition attribute="completedon" operator="olderthan-x-months" value="{0}" /> 108 | /// </filter> 109 | /// </entity> 110 | ///</fetch>. 111 | /// 112 | internal static string FetchXml_BulkEmailAndWorkflow { 113 | get { 114 | return ResourceManager.GetString("FetchXml_BulkEmailAndWorkflow", resourceCulture); 115 | } 116 | } 117 | 118 | /// 119 | /// Looks up a localized string similar to <fetch version="1.0" {1} > 120 | /// <entity name="asyncoperation" > 121 | /// <attribute name="asyncoperationid" /> 122 | /// <filter type="and" > 123 | /// <condition attribute="operationtype" operator="eq" value="5" /> 124 | /// <condition attribute="statuscode" operator="eq" value="30" /> 125 | /// <condition attribute="completedon" operator="olderthan-x-months" value="{0}" /> 126 | /// </filter> 127 | /// </entity> 128 | ///</fetch>. 129 | /// 130 | internal static string FetchXml_BulkImport { 131 | get { 132 | return ResourceManager.GetString("FetchXml_BulkImport", resourceCulture); 133 | } 134 | } 135 | 136 | /// 137 | /// Looks up a localized string similar to <fetch version="1.0" {2}> 138 | /// <entity name="email" > 139 | /// <attribute name="activityid" /> 140 | /// <filter type="and" > 141 | /// <condition attribute="createdon" value="{0}" operator="olderthan-x-months" /> 142 | /// </filter> 143 | /// <link-entity name="activitymimeattachment" from="objectid" to="activityid" alias="ac" > 144 | /// <filter type="and" > 145 | /// <condition attribute="filesize" operator="gt" value="{1}" /> 146 | /// </filter> 147 | /// </link-entity> 148 | /// </entity> 149 | ///</fetch>. 150 | /// 151 | internal static string FetchXml_EmailWithAttachements { 152 | get { 153 | return ResourceManager.GetString("FetchXml_EmailWithAttachements", resourceCulture); 154 | } 155 | } 156 | 157 | /// 158 | /// Looks up a localized string similar to <fetch version="1.0" {2} > 159 | /// <entity name="annotation" > 160 | /// <attribute name="annotationid" /> 161 | /// <filter type="and" > 162 | /// <condition attribute="filesize" operator="gt" value="{1}" /> 163 | /// <condition attribute="createdon" operator="olderthan-x-months" value="{0}" /> 164 | /// </filter> 165 | /// </entity> 166 | ///</fetch>. 167 | /// 168 | internal static string FetchXml_NotesWithAttachments { 169 | get { 170 | return ResourceManager.GetString("FetchXml_NotesWithAttachments", resourceCulture); 171 | } 172 | } 173 | 174 | /// 175 | /// Looks up a localized string similar to <fetch version="1.0" {1} > 176 | /// <entity name="asyncoperation" > 177 | /// <attribute name="asyncoperationid"/> 178 | /// <filter type="and" > 179 | /// <condition attribute="operationtype" operator="in" > 180 | /// <value>10</value> 181 | /// </condition> 182 | /// <condition attribute="statuscode" operator="eq" value="10" /> 183 | /// <condition attribute="completedon" operator="olderthan-x-months" value="{0}" /> 184 | /// </filter> 185 | /// </entity> 186 | ///</fetch>. 187 | /// 188 | internal static string FetchXml_SuspendedWorkflow { 189 | get { 190 | return ResourceManager.GetString("FetchXml_SuspendedWorkflow", resourceCulture); 191 | } 192 | } 193 | } 194 | } 195 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.StorageCleaner/Settings.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | <fetch version="1.0" {1}> 122 | <entity name="audit" > 123 | <attribute name="auditid" /> 124 | <filter> 125 | <condition attribute="createdon" operator="olderthan-x-months" value="{0}" /> 126 | </filter> 127 | </entity> 128 | </fetch> 129 | 130 | 131 | <fetch version="1.0" {1}> 132 | <entity name="asyncoperation" > 133 | <attribute name="asyncoperationid" /> 134 | <filter type="and" > 135 | <condition attribute="operationtype" operator="eq" value="13" /> 136 | <condition attribute="statuscode" operator="eq" value="30" /> 137 | <condition attribute="completedon" operator="olderthan-x-months" value="{0}" /> 138 | </filter> 139 | </entity> 140 | </fetch> 141 | 142 | 143 | <fetch version="1.0" {1}> 144 | <entity name="asyncoperation" > 145 | <attribute name="asyncoperationid" /> 146 | <filter type="and" > 147 | <condition attribute="operationtype" operator="in" > 148 | <value>2</value> 149 | <value>10</value> 150 | </condition> 151 | <condition attribute="statuscode" operator="eq" value="30" /> 152 | <condition attribute="completedon" operator="olderthan-x-months" value="{0}" /> 153 | </filter> 154 | </entity> 155 | </fetch> 156 | \ 157 | 158 | 159 | <fetch version="1.0" {1} > 160 | <entity name="asyncoperation" > 161 | <attribute name="asyncoperationid" /> 162 | <filter type="and" > 163 | <condition attribute="operationtype" operator="eq" value="5" /> 164 | <condition attribute="statuscode" operator="eq" value="30" /> 165 | <condition attribute="completedon" operator="olderthan-x-months" value="{0}" /> 166 | </filter> 167 | </entity> 168 | </fetch> 169 | 170 | 171 | <fetch version="1.0" {2}> 172 | <entity name="email" > 173 | <attribute name="activityid" /> 174 | <filter type="and" > 175 | <condition attribute="createdon" value="{0}" operator="olderthan-x-months" /> 176 | </filter> 177 | <link-entity name="activitymimeattachment" from="objectid" to="activityid" alias="ac" > 178 | <filter type="and" > 179 | <condition attribute="filesize" operator="gt" value="{1}" /> 180 | </filter> 181 | </link-entity> 182 | </entity> 183 | </fetch> 184 | 185 | 186 | <fetch version="1.0" {2} > 187 | <entity name="annotation" > 188 | <attribute name="annotationid" /> 189 | <filter type="and" > 190 | <condition attribute="filesize" operator="gt" value="{1}" /> 191 | <condition attribute="createdon" operator="olderthan-x-months" value="{0}" /> 192 | </filter> 193 | </entity> 194 | </fetch> 195 | 196 | 197 | <fetch version="1.0" {1} > 198 | <entity name="asyncoperation" > 199 | <attribute name="asyncoperationid"/> 200 | <filter type="and" > 201 | <condition attribute="operationtype" operator="in" > 202 | <value>10</value> 203 | </condition> 204 | <condition attribute="statuscode" operator="eq" value="10" /> 205 | <condition attribute="completedon" operator="olderthan-x-months" value="{0}" /> 206 | </filter> 207 | </entity> 208 | </fetch> 209 | 210 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.StorageCleaner/app.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.StorageCleaner/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.UserAuditViewer/InactiveUsers.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace BDK.XrmToolBox.UserAuditViewer 2 | { 3 | partial class InactiveUsers 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.showInactiveUsers1 = new BDK.XrmToolBox.UserAuditViewer.ShowInactiveUsers(); 32 | this.SuspendLayout(); 33 | // 34 | // showInactiveUsers1 35 | // 36 | this.showInactiveUsers1.ConnectionDetail = null; 37 | this.showInactiveUsers1.Location = new System.Drawing.Point(2, 9); 38 | this.showInactiveUsers1.Name = "showInactiveUsers1"; 39 | this.showInactiveUsers1.OrgService = null; 40 | this.showInactiveUsers1.Size = new System.Drawing.Size(846, 493); 41 | this.showInactiveUsers1.TabIndex = 0; 42 | // 43 | // InactiveUsers 44 | // 45 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 46 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 47 | this.ClientSize = new System.Drawing.Size(881, 510); 48 | this.Controls.Add(this.showInactiveUsers1); 49 | this.Name = "InactiveUsers"; 50 | this.Text = "Show In-Active Users"; 51 | this.ResumeLayout(false); 52 | 53 | } 54 | 55 | #endregion 56 | 57 | private ShowInactiveUsers showInactiveUsers1; 58 | } 59 | } -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.UserAuditViewer/InactiveUsers.cs: -------------------------------------------------------------------------------- 1 | /* 2 | MIT License 3 | 4 | Copyright (c) 2019 Tech Quantum 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | */ 24 | 25 | 26 | namespace BDK.XrmToolBox.UserAuditViewer 27 | { 28 | using System.Windows.Forms; 29 | using Microsoft.Xrm.Sdk; 30 | 31 | /// 32 | /// Inactive user list form 33 | /// 34 | /// 35 | public partial class InactiveUsers : Form 36 | { 37 | /// 38 | /// Initializes a new instance of the class. 39 | /// 40 | public InactiveUsers() 41 | { 42 | InitializeComponent(); 43 | } 44 | 45 | /// 46 | /// Initializes a new instance of the class. 47 | /// 48 | /// The service. 49 | public InactiveUsers(IOrganizationService service) 50 | { 51 | InitializeComponent(); 52 | this.showInactiveUsers1.OrgService = service; 53 | } 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.UserAuditViewer/InactiveUsers.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.UserAuditViewer/Model/AuditLog.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace BDK.XrmToolBox.UserAuditViewer.Model 8 | { 9 | public class AuditUserLogin 10 | { 11 | public string Id { get; set; } 12 | 13 | public string Name { get; set; } 14 | 15 | public string LoginDate { get; set; } 16 | 17 | public string LoginTime { get; set; } 18 | 19 | public DateTime LoginDateTime { get; set; } 20 | } 21 | 22 | public class AuditTransaction 23 | { 24 | public string Id { get; set; } 25 | 26 | public string EntityName { get; set; } 27 | 28 | public string Record { get; set; } 29 | 30 | public string Date { get; set; } 31 | 32 | public string Operation { get; set; } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.UserAuditViewer/Model/CRMUser.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace BDK.XrmToolBox.UserAuditViewer.Model 8 | { 9 | public class CRMUser 10 | { 11 | public string Id { get; set; } 12 | 13 | public string Name { get; set; } 14 | 15 | public string Username { get; set; } 16 | 17 | public string Title { get; set; } 18 | 19 | public string PrimaryEmail { get; set; } 20 | 21 | public string BusinessUnit { get; set; } 22 | 23 | public DateTime LastLoggedIn { get; set; } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.UserAuditViewer/PluginControl.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 17, 17 122 | 123 | 124 | 122, 17 125 | 126 | 127 | 122, 17 128 | 129 | 130 | 301, 17 131 | 132 | 133 | 301, 17 134 | 135 | 136 | 514, 17 137 | 138 | 139 | 514, 17 140 | 141 | 142 | 735, 17 143 | 144 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.UserAuditViewer/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("User Login Audit")] 9 | [assembly: AssemblyDescription("User Login Audit for XRMToolBox")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("Deepak Battini")] 12 | [assembly: AssemblyProduct("BDK.XrmToolBox.UserAuditViewer")] 13 | [assembly: AssemblyCopyright("Copyright © 2016")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("2573ed2c-8eb7-4bc8-b17f-20ab255802ad")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("2.2023.11.0")] 36 | [assembly: AssemblyFileVersion("2.2023.11.0")] 37 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.UserAuditViewer/Properties/DataSources/BDK.XrmToolBox.UserManagement.Model.AuditTransaction.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | BDK.XrmToolBox.UserAuditViewer.Model.AuditTransaction, BDK.XrmToolBox.UserAuditViewer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.UserAuditViewer/Properties/DataSources/BDK.XrmToolBox.UserManagement.Model.AuditUserLogin.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | BDK.XrmToolBox.UserAuditViewer.Model.AuditUserLogin, BDK.XrmToolBox.UserAuditViewer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.UserAuditViewer/Properties/DataSources/BDK.XrmToolBox.UserManagement.Model.CRMUser.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | BDK.XrmToolBox.UserAuditViewer.Model.CRMUser, BDK.XrmToolBox.UserAuditViewer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.UserAuditViewer/Properties/DataSources/BDK.XrmToolBox.UserManagement.Model.LoginLog.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | BDK.XrmToolBox.UserAuditViewer.Model.LoginLog, BDK.XrmToolBox.UserAuditViewer, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.UserAuditViewer/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace BDK.XrmToolBox.UserAuditViewer.Properties { 12 | using System; 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// Returns the cached ResourceManager instance used by this class. 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("BDK.XrmToolBox.UserAuditViewer.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// Overrides the current thread's CurrentUICulture property for all 51 | /// resource lookups using this strongly typed resource class. 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | 63 | /// 64 | /// Looks up a localized resource of type System.Drawing.Bitmap. 65 | /// 66 | internal static System.Drawing.Bitmap AssemblySelected { 67 | get { 68 | object obj = ResourceManager.GetObject("AssemblySelected", resourceCulture); 69 | return ((System.Drawing.Bitmap)(obj)); 70 | } 71 | } 72 | 73 | /// 74 | /// Looks up a localized resource of type System.Drawing.Bitmap. 75 | /// 76 | internal static System.Drawing.Bitmap Delete { 77 | get { 78 | object obj = ResourceManager.GetObject("Delete", resourceCulture); 79 | return ((System.Drawing.Bitmap)(obj)); 80 | } 81 | } 82 | 83 | /// 84 | /// Looks up a localized resource of type System.Drawing.Bitmap. 85 | /// 86 | internal static System.Drawing.Bitmap Organization { 87 | get { 88 | object obj = ResourceManager.GetObject("Organization", resourceCulture); 89 | return ((System.Drawing.Bitmap)(obj)); 90 | } 91 | } 92 | 93 | /// 94 | /// Looks up a localized resource of type System.Drawing.Bitmap. 95 | /// 96 | internal static System.Drawing.Bitmap UninstallProfiler { 97 | get { 98 | object obj = ResourceManager.GetObject("UninstallProfiler", resourceCulture); 99 | return ((System.Drawing.Bitmap)(obj)); 100 | } 101 | } 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.UserAuditViewer/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | ..\Resources\Delete.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 123 | 124 | 125 | ..\Resources\AssemblySelected.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 126 | 127 | 128 | ..\Resources\UninstallProfiler.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 129 | 130 | 131 | ..\Resources\Organization.gif;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 132 | 133 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.UserAuditViewer/Readme.MD: -------------------------------------------------------------------------------- 1 | ## Created and Managed By: [Deepak Kumar Batini](https://au.linkedin.com/in/bdeepakkumar) 2 | 3 | # Purpose of User Audit Viewer 4 | 5 | * View the login history of the user. 6 | * View what all the transaction activity performed by the user 7 | * View the inactive user list who haven't logged in CRM from past 1/3/6/12 months 8 | * Ability to export the audit data and inactive user list for reporting purpose 9 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.UserAuditViewer/Resources/AssemblySelected.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deepakkumar1984/XrmToolBoxPlugins/5400548b7fdda47faa2e676ba08c3573a6a275e1/BDK.XrmToolBox/BDK.XrmToolBox.UserAuditViewer/Resources/AssemblySelected.gif -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.UserAuditViewer/Resources/Delete.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deepakkumar1984/XrmToolBoxPlugins/5400548b7fdda47faa2e676ba08c3573a6a275e1/BDK.XrmToolBox/BDK.XrmToolBox.UserAuditViewer/Resources/Delete.gif -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.UserAuditViewer/Resources/Organization.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deepakkumar1984/XrmToolBoxPlugins/5400548b7fdda47faa2e676ba08c3573a6a275e1/BDK.XrmToolBox/BDK.XrmToolBox.UserAuditViewer/Resources/Organization.gif -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.UserAuditViewer/Resources/UninstallProfiler.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deepakkumar1984/XrmToolBoxPlugins/5400548b7fdda47faa2e676ba08c3573a6a275e1/BDK.XrmToolBox/BDK.XrmToolBox.UserAuditViewer/Resources/UninstallProfiler.gif -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.UserAuditViewer/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace BDK.XrmToolBox.UserAuditViewer { 12 | using System; 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Settings { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Settings() { 33 | } 34 | 35 | /// 36 | /// Returns the cached ResourceManager instance used by this class. 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("BDK.XrmToolBox.UserAuditViewer.Settings", typeof(Settings).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// Overrides the current thread's CurrentUICulture property for all 51 | /// resource lookups using this strongly typed resource class. 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | 63 | /// 64 | /// Looks up a localized string similar to <fetch> 65 | /// <entity name="systemuser" > 66 | /// <all-attributes/> 67 | /// <filter type="and" > 68 | /// <condition attribute="isdisabled" operator="eq" value="0" /> 69 | /// <condition attribute="accessmode" operator="eq" value="0" /> 70 | /// </filter> 71 | /// </entity> 72 | ///</fetch>. 73 | /// 74 | internal static string FetchXml_EnabledUsers { 75 | get { 76 | return ResourceManager.GetString("FetchXml_EnabledUsers", resourceCulture); 77 | } 78 | } 79 | 80 | /// 81 | /// Looks up a localized string similar to <fetch count="1" > 82 | /// <entity name="audit" > 83 | /// <attribute name="createdon" /> 84 | /// <filter> 85 | /// <condition attribute="operation" operator="eq" value="4" /> 86 | /// <condition attribute="objectid" operator="eq" value="{0}" /> 87 | /// </filter> 88 | /// <order attribute="createdon" descending="true" /> 89 | /// </entity> 90 | ///</fetch>. 91 | /// 92 | internal static string FetchXml_LastLoginCheck { 93 | get { 94 | return ResourceManager.GetString("FetchXml_LastLoginCheck", resourceCulture); 95 | } 96 | } 97 | 98 | /// 99 | /// Looks up a localized string similar to <fetch count="50" page="{1}" paging-cookie="{2}" returntotalrecordcount="true" > 100 | /// <entity name="audit" > 101 | /// <all-attributes/> 102 | /// <filter> 103 | /// <condition attribute="operation" operator="eq" value="4" /> 104 | /// <condition attribute="objectid" operator="eq" value="{0}" /> 105 | /// <condition attribute="createdon" operator="ge" value="{3}" /> 106 | /// <condition attribute="createdon" operator="le" value="{4}" /> 107 | /// 108 | /// </filter> 109 | /// <order attribute="createdon" descending="true" /> 110 | /// </entity> 111 | ///</fetch>. 112 | /// 113 | internal static string FetchXml_UserLogin { 114 | get { 115 | return ResourceManager.GetString("FetchXml_UserLogin", resourceCulture); 116 | } 117 | } 118 | 119 | /// 120 | /// Looks up a localized string similar to <fetch count="50" page="{1}" paging-cookie="{2}" returntotalrecordcount="true"> 121 | /// <entity name="audit" > 122 | /// <all-attributes/> 123 | /// <filter> 124 | /// <condition attribute="operation" operator="neq" value="4" /> 125 | /// <condition attribute="userid" operator="eq" value="{0}" /> 126 | /// <condition attribute="createdon" operator="ge" value="{3}" /> 127 | /// <condition attribute="createdon" operator="le" value="{4}" /> 128 | /// 129 | /// </filter> 130 | /// <order attribute="createdon" descending="true" /> 131 | /// </entity> 132 | ///</fetch>. 133 | /// 134 | internal static string FetchXml_UserTransactions { 135 | get { 136 | return ResourceManager.GetString("FetchXml_UserTransactions", resourceCulture); 137 | } 138 | } 139 | 140 | /// 141 | /// Looks up a localized string similar to <fetch> 142 | /// <entity name="savedquery" > 143 | /// <attribute name="name" /> 144 | /// <attribute name="savedqueryid" /> 145 | /// <attribute name="isdefault" /> 146 | /// <filter type="and" > 147 | /// <condition attribute="returnedtypecode" operator="eq" value="8" /> 148 | /// <condition attribute="querytype" operator="eq" value="0" /> 149 | /// </filter> 150 | /// </entity> 151 | ///</fetch>. 152 | /// 153 | internal static string FetchXml_UserViews { 154 | get { 155 | return ResourceManager.GetString("FetchXml_UserViews", resourceCulture); 156 | } 157 | } 158 | } 159 | } 160 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.UserAuditViewer/Settings.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | <fetch> 122 | <entity name="systemuser" > 123 | <all-attributes/> 124 | <filter type="and" > 125 | <condition attribute="isdisabled" operator="eq" value="0" /> 126 | <condition attribute="accessmode" operator="eq" value="0" /> 127 | </filter> 128 | </entity> 129 | </fetch> 130 | 131 | 132 | <fetch count="1" > 133 | <entity name="audit" > 134 | <attribute name="createdon" /> 135 | <filter> 136 | <condition attribute="operation" operator="eq" value="4" /> 137 | <condition attribute="objectid" operator="eq" value="{0}" /> 138 | </filter> 139 | <order attribute="createdon" descending="true" /> 140 | </entity> 141 | </fetch> 142 | 143 | 144 | <fetch count="50" page="{1}" paging-cookie="{2}" returntotalrecordcount="true" > 145 | <entity name="audit" > 146 | <all-attributes/> 147 | <filter> 148 | <condition attribute="operation" operator="eq" value="4" /> 149 | <condition attribute="objectid" operator="eq" value="{0}" /> 150 | <condition attribute="createdon" operator="ge" value="{3}" /> 151 | <condition attribute="createdon" operator="le" value="{4}" /> 152 | 153 | </filter> 154 | <order attribute="createdon" descending="true" /> 155 | </entity> 156 | </fetch> 157 | 158 | 159 | <fetch count="50" page="{1}" paging-cookie="{2}" returntotalrecordcount="true"> 160 | <entity name="audit" > 161 | <all-attributes/> 162 | <filter> 163 | <condition attribute="operation" operator="neq" value="4" /> 164 | <condition attribute="userid" operator="eq" value="{0}" /> 165 | <condition attribute="createdon" operator="ge" value="{3}" /> 166 | <condition attribute="createdon" operator="le" value="{4}" /> 167 | 168 | </filter> 169 | <order attribute="createdon" descending="true" /> 170 | </entity> 171 | </fetch> 172 | 173 | 174 | <fetch> 175 | <entity name="savedquery" > 176 | <attribute name="name" /> 177 | <attribute name="savedqueryid" /> 178 | <attribute name="isdefault" /> 179 | <filter type="and" > 180 | <condition attribute="returnedtypecode" operator="eq" value="8" /> 181 | <condition attribute="querytype" operator="eq" value="0" /> 182 | </filter> 183 | </entity> 184 | </fetch> 185 | 186 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.UserAuditViewer/ShowInactiveUsers.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace BDK.XrmToolBox.UserAuditViewer 2 | { 3 | partial class ShowInactiveUsers 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Component Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.components = new System.ComponentModel.Container(); 32 | this.GridUsers = new System.Windows.Forms.DataGridView(); 33 | this.label1 = new System.Windows.Forms.Label(); 34 | this.ddlFilter = new System.Windows.Forms.ComboBox(); 35 | this.btnExport = new System.Windows.Forms.Button(); 36 | this.saveFile = new System.Windows.Forms.SaveFileDialog(); 37 | this.cRMUserBindingSource = new System.Windows.Forms.BindingSource(this.components); 38 | this.nameDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); 39 | this.usernameDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); 40 | this.titleDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); 41 | this.primaryEmailDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); 42 | this.businessUnitDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); 43 | this.lastLoggedInDataGridViewTextBoxColumn = new System.Windows.Forms.DataGridViewTextBoxColumn(); 44 | ((System.ComponentModel.ISupportInitialize)(this.GridUsers)).BeginInit(); 45 | ((System.ComponentModel.ISupportInitialize)(this.cRMUserBindingSource)).BeginInit(); 46 | this.SuspendLayout(); 47 | // 48 | // GridUsers 49 | // 50 | this.GridUsers.AllowUserToAddRows = false; 51 | this.GridUsers.AllowUserToDeleteRows = false; 52 | this.GridUsers.AutoGenerateColumns = false; 53 | this.GridUsers.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.Fill; 54 | this.GridUsers.AutoSizeRowsMode = System.Windows.Forms.DataGridViewAutoSizeRowsMode.DisplayedCells; 55 | this.GridUsers.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize; 56 | this.GridUsers.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] { 57 | this.nameDataGridViewTextBoxColumn, 58 | this.usernameDataGridViewTextBoxColumn, 59 | this.titleDataGridViewTextBoxColumn, 60 | this.primaryEmailDataGridViewTextBoxColumn, 61 | this.businessUnitDataGridViewTextBoxColumn, 62 | this.lastLoggedInDataGridViewTextBoxColumn}); 63 | this.GridUsers.DataSource = this.cRMUserBindingSource; 64 | this.GridUsers.Location = new System.Drawing.Point(59, 88); 65 | this.GridUsers.Name = "GridUsers"; 66 | this.GridUsers.ReadOnly = true; 67 | this.GridUsers.Size = new System.Drawing.Size(728, 360); 68 | this.GridUsers.TabIndex = 5; 69 | // 70 | // label1 71 | // 72 | this.label1.AutoSize = true; 73 | this.label1.Font = new System.Drawing.Font("Microsoft Sans Serif", 10F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0))); 74 | this.label1.Location = new System.Drawing.Point(58, 40); 75 | this.label1.Name = "label1"; 76 | this.label1.Size = new System.Drawing.Size(169, 17); 77 | this.label1.TabIndex = 4; 78 | this.label1.Text = "Show users inactive from:"; 79 | // 80 | // ddlFilter 81 | // 82 | this.ddlFilter.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; 83 | this.ddlFilter.FormattingEnabled = true; 84 | this.ddlFilter.Items.AddRange(new object[] { 85 | "Past 1 month", 86 | "Past 3 months", 87 | "Past 6 months", 88 | "Past 12 months"}); 89 | this.ddlFilter.Location = new System.Drawing.Point(233, 40); 90 | this.ddlFilter.Name = "ddlFilter"; 91 | this.ddlFilter.Size = new System.Drawing.Size(267, 21); 92 | this.ddlFilter.TabIndex = 3; 93 | this.ddlFilter.SelectedIndexChanged += new System.EventHandler(this.ddlFilter_SelectedIndexChanged); 94 | // 95 | // btnExport 96 | // 97 | this.btnExport.Image = global::BDK.XrmToolBox.UserAuditViewer.Properties.Resources.UninstallProfiler; 98 | this.btnExport.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft; 99 | this.btnExport.Location = new System.Drawing.Point(671, 38); 100 | this.btnExport.Name = "btnExport"; 101 | this.btnExport.Size = new System.Drawing.Size(116, 23); 102 | this.btnExport.TabIndex = 6; 103 | this.btnExport.Text = "Export to Excel"; 104 | this.btnExport.UseVisualStyleBackColor = true; 105 | this.btnExport.Click += new System.EventHandler(this.btnExport_Click); 106 | // 107 | // saveFile 108 | // 109 | this.saveFile.Filter = "Excel files (*.xls)|*.xlsx"; 110 | // 111 | // cRMUserBindingSource 112 | // 113 | this.cRMUserBindingSource.DataSource = typeof(BDK.XrmToolBox.UserAuditViewer.Model.CRMUser); 114 | // 115 | // nameDataGridViewTextBoxColumn 116 | // 117 | this.nameDataGridViewTextBoxColumn.DataPropertyName = "Name"; 118 | this.nameDataGridViewTextBoxColumn.HeaderText = "Name"; 119 | this.nameDataGridViewTextBoxColumn.Name = "nameDataGridViewTextBoxColumn"; 120 | this.nameDataGridViewTextBoxColumn.ReadOnly = true; 121 | // 122 | // usernameDataGridViewTextBoxColumn 123 | // 124 | this.usernameDataGridViewTextBoxColumn.DataPropertyName = "Username"; 125 | this.usernameDataGridViewTextBoxColumn.HeaderText = "Username"; 126 | this.usernameDataGridViewTextBoxColumn.Name = "usernameDataGridViewTextBoxColumn"; 127 | this.usernameDataGridViewTextBoxColumn.ReadOnly = true; 128 | // 129 | // titleDataGridViewTextBoxColumn 130 | // 131 | this.titleDataGridViewTextBoxColumn.DataPropertyName = "Title"; 132 | this.titleDataGridViewTextBoxColumn.HeaderText = "Title"; 133 | this.titleDataGridViewTextBoxColumn.Name = "titleDataGridViewTextBoxColumn"; 134 | this.titleDataGridViewTextBoxColumn.ReadOnly = true; 135 | // 136 | // primaryEmailDataGridViewTextBoxColumn 137 | // 138 | this.primaryEmailDataGridViewTextBoxColumn.DataPropertyName = "PrimaryEmail"; 139 | this.primaryEmailDataGridViewTextBoxColumn.HeaderText = "Email"; 140 | this.primaryEmailDataGridViewTextBoxColumn.Name = "primaryEmailDataGridViewTextBoxColumn"; 141 | this.primaryEmailDataGridViewTextBoxColumn.ReadOnly = true; 142 | // 143 | // businessUnitDataGridViewTextBoxColumn 144 | // 145 | this.businessUnitDataGridViewTextBoxColumn.DataPropertyName = "BusinessUnit"; 146 | this.businessUnitDataGridViewTextBoxColumn.HeaderText = "Business Unit"; 147 | this.businessUnitDataGridViewTextBoxColumn.Name = "businessUnitDataGridViewTextBoxColumn"; 148 | this.businessUnitDataGridViewTextBoxColumn.ReadOnly = true; 149 | // 150 | // lastLoggedInDataGridViewTextBoxColumn 151 | // 152 | this.lastLoggedInDataGridViewTextBoxColumn.DataPropertyName = "LastLoggedIn"; 153 | this.lastLoggedInDataGridViewTextBoxColumn.HeaderText = "Last Log In"; 154 | this.lastLoggedInDataGridViewTextBoxColumn.Name = "lastLoggedInDataGridViewTextBoxColumn"; 155 | this.lastLoggedInDataGridViewTextBoxColumn.ReadOnly = true; 156 | // 157 | // ShowInactiveUsers 158 | // 159 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 160 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 161 | this.Controls.Add(this.btnExport); 162 | this.Controls.Add(this.GridUsers); 163 | this.Controls.Add(this.label1); 164 | this.Controls.Add(this.ddlFilter); 165 | this.Name = "ShowInactiveUsers"; 166 | this.Size = new System.Drawing.Size(846, 493); 167 | ((System.ComponentModel.ISupportInitialize)(this.GridUsers)).EndInit(); 168 | ((System.ComponentModel.ISupportInitialize)(this.cRMUserBindingSource)).EndInit(); 169 | this.ResumeLayout(false); 170 | this.PerformLayout(); 171 | 172 | } 173 | 174 | #endregion 175 | 176 | private System.Windows.Forms.DataGridView GridUsers; 177 | private System.Windows.Forms.BindingSource cRMUserBindingSource; 178 | private System.Windows.Forms.Label label1; 179 | private System.Windows.Forms.ComboBox ddlFilter; 180 | private System.Windows.Forms.Button btnExport; 181 | private System.Windows.Forms.SaveFileDialog saveFile; 182 | private System.Windows.Forms.DataGridViewTextBoxColumn nameDataGridViewTextBoxColumn; 183 | private System.Windows.Forms.DataGridViewTextBoxColumn usernameDataGridViewTextBoxColumn; 184 | private System.Windows.Forms.DataGridViewTextBoxColumn titleDataGridViewTextBoxColumn; 185 | private System.Windows.Forms.DataGridViewTextBoxColumn primaryEmailDataGridViewTextBoxColumn; 186 | private System.Windows.Forms.DataGridViewTextBoxColumn businessUnitDataGridViewTextBoxColumn; 187 | private System.Windows.Forms.DataGridViewTextBoxColumn lastLoggedInDataGridViewTextBoxColumn; 188 | } 189 | } 190 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.UserAuditViewer/ShowInactiveUsers.cs: -------------------------------------------------------------------------------- 1 | /* 2 | MIT License 3 | 4 | Copyright (c) 2019 Tech Quantum 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | */ 24 | 25 | 26 | namespace BDK.XrmToolBox.UserAuditViewer 27 | { 28 | using System; 29 | using System.Collections.Generic; 30 | using System.Data; 31 | using System.Linq; 32 | using System.Threading.Tasks; 33 | using System.Windows.Forms; 34 | using Microsoft.Xrm.Sdk; 35 | using Microsoft.Xrm.Sdk.Query; 36 | using BDK.XrmToolBox.UserAuditViewer.Model; 37 | using DocumentFormat.OpenXml.Packaging; 38 | using global::XrmToolBox.Extensibility; 39 | 40 | /// 41 | /// Shaoe inactive users list 42 | /// 43 | /// 44 | public partial class ShowInactiveUsers : PluginControlBase 45 | { 46 | /// 47 | /// Gets or sets the org service. 48 | /// 49 | /// 50 | /// The org service. 51 | /// 52 | public IOrganizationService OrgService { get; set; } 53 | 54 | /// 55 | /// Initializes a new instance of the class. 56 | /// 57 | public ShowInactiveUsers() 58 | { 59 | InitializeComponent(); 60 | } 61 | 62 | /// 63 | /// Handles the SelectedIndexChanged event of the ddlFilter control. 64 | /// 65 | /// The source of the event. 66 | /// The instance containing the event data. 67 | private void ddlFilter_SelectedIndexChanged(object sender, EventArgs e) 68 | { 69 | var ddlFilterSelectedIndex = ddlFilter.SelectedIndex; 70 | WorkAsync(new WorkAsyncInfo 71 | { 72 | Message = "Retrieving inactive users based on login history...", 73 | Work = (w, ev) => 74 | { 75 | FetchExpression query = new FetchExpression(Settings.FetchXml_EnabledUsers); 76 | 77 | EntityCollection entitites = OrgService.RetrieveMultiple(query); 78 | List data = new List(); 79 | foreach (var item in entitites.Entities) 80 | { 81 | data.Add(new Model.CRMUser() 82 | { 83 | Username = item.Attributes.ContainsKey("domainname") ? item.Attributes["domainname"].ToString() : string.Empty, 84 | Name = item.Attributes.ContainsKey("fullname") ? item.Attributes["fullname"].ToString() : string.Empty, 85 | Id = item.Id.ToString(), 86 | BusinessUnit = item.Attributes.ContainsKey("businessunitid") ? ((EntityReference)item.Attributes["businessunitid"]).Name : string.Empty, 87 | Title = item.Attributes.ContainsKey("title") ? item.Attributes["title"].ToString() : string.Empty, 88 | PrimaryEmail = item.Attributes.ContainsKey("internalemailaddress") ? item.Attributes["internalemailaddress"].ToString() : string.Empty, 89 | }); 90 | } 91 | 92 | List finalData = new List(); 93 | DateTime filterDate = DateTime.Now; 94 | if (ddlFilterSelectedIndex == 0) 95 | { 96 | filterDate = filterDate.AddMonths(-1); 97 | } 98 | else if (ddlFilterSelectedIndex == 1) 99 | { 100 | filterDate = filterDate.AddMonths(-3); 101 | } 102 | else if (ddlFilterSelectedIndex == 2) 103 | { 104 | filterDate = filterDate.AddMonths(-6); 105 | } 106 | else if (ddlFilterSelectedIndex == 3) 107 | { 108 | filterDate = filterDate.AddMonths(-12); 109 | } 110 | 111 | Parallel.ForEach(data, (item) => 112 | { 113 | FetchExpression query1 = new FetchExpression(string.Format(Settings.FetchXml_LastLoginCheck, item.Id)); 114 | EntityCollection entitites1 = OrgService.RetrieveMultiple(query1); 115 | if (entitites1.Entities.Count > 0) 116 | { 117 | DateTime createdOn = (DateTime)entitites1.Entities[0]["createdon"]; 118 | if (createdOn < filterDate) 119 | { 120 | item.LastLoggedIn = createdOn; 121 | finalData.Add(item); 122 | } 123 | } 124 | }); 125 | 126 | ev.Result = finalData.OrderBy(x=>(x.Name)).ToList(); 127 | }, 128 | ProgressChanged = ev => 129 | { 130 | // If progress has to be notified to user, use the following method: 131 | SetWorkingMessage("Message to display"); 132 | }, 133 | PostWorkCallBack = ev => 134 | { 135 | List result = (List)ev.Result; 136 | GridUsers.DataSource = result; 137 | }, 138 | AsyncArgument = null, 139 | IsCancelable = true, 140 | MessageWidth = 340, 141 | MessageHeight = 150 142 | }); 143 | } 144 | 145 | /// 146 | /// Handles the Click event of the btnExport control. 147 | /// 148 | /// The source of the event. 149 | /// The instance containing the event data. 150 | private void btnExport_Click(object sender, EventArgs e) 151 | { 152 | DataSet ds = GetDataset(GridUsers); 153 | DialogResult dialogResult = saveFile.ShowDialog(); 154 | if (dialogResult.ToString() == "OK") 155 | { 156 | ExportDataSet(ds, saveFile.FileName); 157 | } 158 | } 159 | 160 | /// 161 | /// Exports the data set. 162 | /// 163 | /// The ds. 164 | /// The destination. 165 | private void ExportDataSet(DataSet ds, string destination) 166 | { 167 | using (var workbook = SpreadsheetDocument.Create(destination, DocumentFormat.OpenXml.SpreadsheetDocumentType.Workbook)) 168 | { 169 | var workbookPart = workbook.AddWorkbookPart(); 170 | 171 | workbook.WorkbookPart.Workbook = new DocumentFormat.OpenXml.Spreadsheet.Workbook(); 172 | 173 | workbook.WorkbookPart.Workbook.Sheets = new DocumentFormat.OpenXml.Spreadsheet.Sheets(); 174 | 175 | foreach (System.Data.DataTable table in ds.Tables) 176 | { 177 | 178 | var sheetPart = workbook.WorkbookPart.AddNewPart(); 179 | var sheetData = new DocumentFormat.OpenXml.Spreadsheet.SheetData(); 180 | sheetPart.Worksheet = new DocumentFormat.OpenXml.Spreadsheet.Worksheet(sheetData); 181 | 182 | DocumentFormat.OpenXml.Spreadsheet.Sheets sheets = workbook.WorkbookPart.Workbook.GetFirstChild(); 183 | string relationshipId = workbook.WorkbookPart.GetIdOfPart(sheetPart); 184 | 185 | uint sheetId = 1; 186 | if (sheets.Elements().Count() > 0) 187 | { 188 | sheetId = 189 | sheets.Elements().Select(s => s.SheetId.Value).Max() + 1; 190 | } 191 | 192 | DocumentFormat.OpenXml.Spreadsheet.Sheet sheet = new DocumentFormat.OpenXml.Spreadsheet.Sheet() { Id = relationshipId, SheetId = sheetId, Name = table.TableName }; 193 | sheets.Append(sheet); 194 | 195 | DocumentFormat.OpenXml.Spreadsheet.Row headerRow = new DocumentFormat.OpenXml.Spreadsheet.Row(); 196 | 197 | List columns = new List(); 198 | foreach (System.Data.DataColumn column in table.Columns) 199 | { 200 | columns.Add(column.ColumnName); 201 | 202 | DocumentFormat.OpenXml.Spreadsheet.Cell cell = new DocumentFormat.OpenXml.Spreadsheet.Cell(); 203 | cell.DataType = DocumentFormat.OpenXml.Spreadsheet.CellValues.String; 204 | cell.CellValue = new DocumentFormat.OpenXml.Spreadsheet.CellValue(column.ColumnName); 205 | headerRow.AppendChild(cell); 206 | } 207 | 208 | 209 | sheetData.AppendChild(headerRow); 210 | 211 | foreach (System.Data.DataRow dsrow in table.Rows) 212 | { 213 | DocumentFormat.OpenXml.Spreadsheet.Row newRow = new DocumentFormat.OpenXml.Spreadsheet.Row(); 214 | foreach (String col in columns) 215 | { 216 | DocumentFormat.OpenXml.Spreadsheet.Cell cell = new DocumentFormat.OpenXml.Spreadsheet.Cell(); 217 | cell.DataType = DocumentFormat.OpenXml.Spreadsheet.CellValues.String; 218 | cell.CellValue = new DocumentFormat.OpenXml.Spreadsheet.CellValue(dsrow[col].ToString()); // 219 | newRow.AppendChild(cell); 220 | } 221 | 222 | sheetData.AppendChild(newRow); 223 | } 224 | 225 | } 226 | } 227 | } 228 | 229 | /// 230 | /// Gets the dataset. 231 | /// 232 | /// The grid view. 233 | /// 234 | private DataSet GetDataset(DataGridView gridView) 235 | { 236 | DataSet ds = new DataSet(); 237 | DataTable dt = new DataTable(); 238 | 239 | // add the columns to the datatable 240 | if (gridView.Columns != null) 241 | { 242 | 243 | for (int i = 0; i < gridView.Columns.Count; i++) 244 | { 245 | dt.Columns.Add(gridView.Columns[i].DataPropertyName); 246 | } 247 | } 248 | 249 | // add each of the data rows to the table 250 | foreach (DataGridViewRow row in gridView.Rows) 251 | { 252 | DataRow dr; 253 | dr = dt.NewRow(); 254 | 255 | for (int i = 0; i < row.Cells.Count; i++) 256 | { 257 | dr[i] = row.Cells[i].Value; 258 | } 259 | 260 | dt.Rows.Add(dr); 261 | } 262 | 263 | ds.Tables.Add(dt); 264 | return ds; 265 | } 266 | } 267 | } 268 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.UserAuditViewer/ShowInactiveUsers.resx: -------------------------------------------------------------------------------- 1 |  2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 17, 17 122 | 123 | 124 | 829, 17 125 | 126 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.UserAuditViewer/app.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.UserAuditViewer/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/BDK.XrmToolBox.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 14 4 | VisualStudioVersion = 14.0.25420.1 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BDK.XrmToolBox.UserAuditViewer", "BDK.XrmToolBox.UserAuditViewer\BDK.XrmToolBox.UserAuditViewer.csproj", "{2573ED2C-8EB7-4BC8-B17F-20AB255802AD}" 7 | EndProject 8 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BDK.XrmToolBox.StorageCleaner", "BDK.XrmToolBox.StorageCleaner\BDK.XrmToolBox.StorageCleaner.csproj", "{0D801AE5-C241-4C37-8649-C71CA8F95409}" 9 | EndProject 10 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BDK.XrmToolBox.RecycleBin", "BDK.XrmToolBox.RecycleBin\BDK.XrmToolBox.RecycleBin.csproj", "{8D2C8BFC-9031-4A03-8E65-540CD27C5B7D}" 11 | EndProject 12 | Global 13 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 14 | Debug|Any CPU = Debug|Any CPU 15 | Release|Any CPU = Release|Any CPU 16 | EndGlobalSection 17 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 18 | {2573ED2C-8EB7-4BC8-B17F-20AB255802AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 19 | {2573ED2C-8EB7-4BC8-B17F-20AB255802AD}.Debug|Any CPU.Build.0 = Debug|Any CPU 20 | {2573ED2C-8EB7-4BC8-B17F-20AB255802AD}.Release|Any CPU.ActiveCfg = Release|Any CPU 21 | {2573ED2C-8EB7-4BC8-B17F-20AB255802AD}.Release|Any CPU.Build.0 = Release|Any CPU 22 | {0D801AE5-C241-4C37-8649-C71CA8F95409}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 23 | {0D801AE5-C241-4C37-8649-C71CA8F95409}.Debug|Any CPU.Build.0 = Debug|Any CPU 24 | {0D801AE5-C241-4C37-8649-C71CA8F95409}.Release|Any CPU.ActiveCfg = Release|Any CPU 25 | {0D801AE5-C241-4C37-8649-C71CA8F95409}.Release|Any CPU.Build.0 = Release|Any CPU 26 | {8D2C8BFC-9031-4A03-8E65-540CD27C5B7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 27 | {8D2C8BFC-9031-4A03-8E65-540CD27C5B7D}.Debug|Any CPU.Build.0 = Debug|Any CPU 28 | {8D2C8BFC-9031-4A03-8E65-540CD27C5B7D}.Release|Any CPU.ActiveCfg = Release|Any CPU 29 | {8D2C8BFC-9031-4A03-8E65-540CD27C5B7D}.Release|Any CPU.Build.0 = Release|Any CPU 30 | EndGlobalSection 31 | GlobalSection(SolutionProperties) = preSolution 32 | HideSolutionNode = FALSE 33 | EndGlobalSection 34 | EndGlobal 35 | -------------------------------------------------------------------------------- /BDK.XrmToolBox/DeepakProfilePic.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deepakkumar1984/XrmToolBoxPlugins/5400548b7fdda47faa2e676ba08c3573a6a275e1/BDK.XrmToolBox/DeepakProfilePic.jpg -------------------------------------------------------------------------------- /BDK.XrmToolBox/References/DocumentFormat.OpenXml.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deepakkumar1984/XrmToolBoxPlugins/5400548b7fdda47faa2e676ba08c3573a6a275e1/BDK.XrmToolBox/References/DocumentFormat.OpenXml.dll -------------------------------------------------------------------------------- /BDK.XrmToolBox/References/McTools.Xrm.Connection.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deepakkumar1984/XrmToolBoxPlugins/5400548b7fdda47faa2e676ba08c3573a6a275e1/BDK.XrmToolBox/References/McTools.Xrm.Connection.dll -------------------------------------------------------------------------------- /BDK.XrmToolBox/References/Microsoft.Crm.Sdk.Proxy.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deepakkumar1984/XrmToolBoxPlugins/5400548b7fdda47faa2e676ba08c3573a6a275e1/BDK.XrmToolBox/References/Microsoft.Crm.Sdk.Proxy.dll -------------------------------------------------------------------------------- /BDK.XrmToolBox/References/Microsoft.Xrm.Sdk.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deepakkumar1984/XrmToolBoxPlugins/5400548b7fdda47faa2e676ba08c3573a6a275e1/BDK.XrmToolBox/References/Microsoft.Xrm.Sdk.dll -------------------------------------------------------------------------------- /BDK.XrmToolBox/References/XrmToolBox.Extensibility.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deepakkumar1984/XrmToolBoxPlugins/5400548b7fdda47faa2e676ba08c3573a6a275e1/BDK.XrmToolBox/References/XrmToolBox.Extensibility.dll -------------------------------------------------------------------------------- /BDK.XrmToolBox/References/XrmToolBox.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/deepakkumar1984/XrmToolBoxPlugins/5400548b7fdda47faa2e676ba08c3573a6a275e1/BDK.XrmToolBox/References/XrmToolBox.exe -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Tech Quantum 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # This is not maintained anymore, if you need the issue to be fixed please contact me deepakkumar1984@gmail.com for price quote. Thanks 2 | 3 | 4 | 5 | # XrmToolBox plugins 6 | 7 | Following are the plugin being offered from this repo: 8 | 9 | ## Recycle Bin 10 | The purpose of this plugin is to restore any deleted record across the CRM entities which have audit enabled. 11 | The pre-requisite is to have Auditing enabled globally and enabled per entity as well. The plugin will check and load only the entities which have audit enabled 12 | 13 | 14 | ## User Audit Viewer 15 | Audit is a very useful data to get insign of user activities. This plugin makes use of the data to give you some info of user activities for a specific date range 16 | You can get the list of users who haven't used CRM from past 1/3/6 months and free up licenses 17 | Ability to export the data to an excel 18 | 19 | ## Storage cleanup 20 | With space being used up quickly, this plugin gives an insight of most data usage across admin related entities which can be cleanup up to get some free space. 21 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-leap-day --------------------------------------------------------------------------------