From 02adc2c6b6d79c08cb61994998bc6152547bdb88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Magnus=20Gether=20S=C3=B8rensen?= Date: Mon, 9 Sep 2024 10:52:41 +0200 Subject: [PATCH] Add file block upload handlers and fix formatting issues Modified `DataHelper` to include "fileattachment" in default entities. Updated `Core.cs` with several formatting fixes and conditional compilation directives. Added new request handlers for file block uploads in `XrmMockupShared.projitems` and implemented `CommitFileBlocksUploadRequestHandler`, `InitializeFileBlocksUploadRequestHandler`, and `UploadBlockRequestHandler`. --- src/MetadataShared/DataHelper.cs | 2 +- src/XrmMockupShared/Core.cs | 28 ++++++++++------- .../CommitFileBlocksUploadRequestHandler.cs | 25 +++++++++++++++ ...nitializeFileBlocksUploadRequestHandler.cs | 31 +++++++++++++++++++ .../Requests/UploadBlockRequestHandler.cs | 25 +++++++++++++++ src/XrmMockupShared/XrmMockupShared.projitems | 3 ++ 6 files changed, 102 insertions(+), 12 deletions(-) create mode 100644 src/XrmMockupShared/Requests/CommitFileBlocksUploadRequestHandler.cs create mode 100644 src/XrmMockupShared/Requests/InitializeFileBlocksUploadRequestHandler.cs create mode 100644 src/XrmMockupShared/Requests/UploadBlockRequestHandler.cs diff --git a/src/MetadataShared/DataHelper.cs b/src/MetadataShared/DataHelper.cs index cf85470d..34e8dba8 100644 --- a/src/MetadataShared/DataHelper.cs +++ b/src/MetadataShared/DataHelper.cs @@ -36,7 +36,7 @@ public DataHelper(IOrganizationService service, string entitiesString, string so this.EntityLogicalNames = GetLogicalNames(AssemblyGetter.GetAssembliesInBuildPath()); // Add default entities - var defaultEntities = new string[] { "businessunit", "systemuser", "transactioncurrency", "role", "systemuserroles", "team", "teamroles", "activitypointer", "roletemplate" }; + var defaultEntities = new string[] { "businessunit", "systemuser", "transactioncurrency", "role", "systemuserroles", "team", "teamroles", "activitypointer", "roletemplate", "fileattachment" }; foreach (var logicalName in defaultEntities) { this.EntityLogicalNames.Add(logicalName); diff --git a/src/XrmMockupShared/Core.cs b/src/XrmMockupShared/Core.cs index 3bb36351..234c095e 100644 --- a/src/XrmMockupShared/Core.cs +++ b/src/XrmMockupShared/Core.cs @@ -112,7 +112,7 @@ public Core(XrmMockupSettings Settings, MetadataSkeleton metadata, List this.db = new XrmDb(metadata.EntityMetadata, GetOnlineProxy()); this.snapshots = new Dictionary(); - this.security = new Security(this, metadata, SecurityRoles,db); + this.security = new Security(this, metadata, SecurityRoles, db); this.TracingServiceFactory = settings.TracingServiceFactory ?? new TracingServiceFactory(); this.ServiceFactory = new MockupServiceProviderAndFactory(this); @@ -131,7 +131,7 @@ public Core(XrmMockupSettings Settings, MetadataSkeleton metadata, List this.RequestHandlers = GetRequestHandlers(db); InitializeDB(); this.security.InitializeSecurityRoles(db); - + #if !(XRM_MOCKUP_2011 || XRM_MOCKUP_2013) this.orgDetail = settings.OrganizationDetail; #endif @@ -216,8 +216,8 @@ private void InitializeDB() new CalculateRollupFieldRequestHandler(this, db, metadata, security), #endif #if !(XRM_MOCKUP_2011) - new AddUserToRecordTeamRequestHandler(this, db, metadata, security), - new RemoveUserFromRecordTeamRequestHandler(this, db, metadata, security), + new AddUserToRecordTeamRequestHandler(this, db, metadata, security), + new RemoveUserFromRecordTeamRequestHandler(this, db, metadata, security), #endif #if !(XRM_MOCKUP_2011 || XRM_MOCKUP_2013) @@ -227,10 +227,16 @@ private void InitializeDB() #if !(XRM_MOCKUP_2011 || XRM_MOCKUP_2013 || XRM_MOCKUP_2015) new UpsertRequestHandler(this, db, metadata, security), #endif - new RetrieveAttributeRequestHandler(this, db, metadata, security), - new WhoAmIRequestHandler(this, db, metadata, security), - new RetrievePrincipalAccessRequestHandler(this, db, metadata, security), - new RetrieveMetadataChangesRequestHandler(this, db, metadata, security) + new RetrieveAttributeRequestHandler(this, db, metadata, security), + new WhoAmIRequestHandler(this, db, metadata, security), + new RetrievePrincipalAccessRequestHandler(this, db, metadata, security), + new RetrieveMetadataChangesRequestHandler(this, db, metadata, security), + +#if !(XRM_MOCKUP_2011 || XRM_MOCKUP_2013 || XRM_MOCKUP_2015 || XRM_MOCKUP_2016) + new InitializeFileBlocksUploadRequestHandler(this, db, metadata, security), + new UploadBlockRequestHandler(this, db, metadata, security), + new CommitFileBlocksUploadRequestHandler(this, db, metadata, security), +#endif }; internal void EnableProxyTypes(Assembly assembly) @@ -963,7 +969,7 @@ private OrganizationResponse ExecuteAction(OrganizationRequest request) return resp; } -#region EntityImage helpers + #region EntityImage helpers private Tuple GetEntityInfo(OrganizationRequest request) { @@ -1037,7 +1043,7 @@ private EntityReference GetBusinessUnit(EntityReference owner) { return Utility.GetBusinessUnit(db, owner); } -#endregion + #endregion internal void DisabelRegisteredPlugins(bool include) { @@ -1138,7 +1144,7 @@ internal EntityMetadata GetEntityMetadata(string entityLogicalName) return metadata.EntityMetadata[entityLogicalName]; } - #if !(XRM_MOCKUP_2011 || XRM_MOCKUP_2013) +#if !(XRM_MOCKUP_2011 || XRM_MOCKUP_2013) internal void ExecuteCalculatedFields(DbRow row) { var attributes = row.Metadata.Attributes.Where( diff --git a/src/XrmMockupShared/Requests/CommitFileBlocksUploadRequestHandler.cs b/src/XrmMockupShared/Requests/CommitFileBlocksUploadRequestHandler.cs new file mode 100644 index 00000000..f43dbfb7 --- /dev/null +++ b/src/XrmMockupShared/Requests/CommitFileBlocksUploadRequestHandler.cs @@ -0,0 +1,25 @@ +#if !(XRM_MOCKUP_2011 || XRM_MOCKUP_2013 || XRM_MOCKUP_2015 || XRM_MOCKUP_2016) + +using Microsoft.Xrm.Sdk; +using Microsoft.Crm.Sdk.Messages; +using DG.Tools.XrmMockup.Database; +using System; +using System.Linq; + +namespace DG.Tools.XrmMockup +{ + internal class CommitFileBlocksUploadRequestHandler : RequestHandler { + internal CommitFileBlocksUploadRequestHandler(Core core, XrmDb db, MetadataSkeleton metadata, Security security) : base(core, db, metadata, security, "CommitFileBlocksUpload") {} + + internal override OrganizationResponse Execute(OrganizationRequest orgRequest, EntityReference userRef) { + var request = MakeRequest(orgRequest); + + // Document store not implemented in database yet + + var resp = new UploadBlockResponse(); + return resp; + } + } +} + +#endif \ No newline at end of file diff --git a/src/XrmMockupShared/Requests/InitializeFileBlocksUploadRequestHandler.cs b/src/XrmMockupShared/Requests/InitializeFileBlocksUploadRequestHandler.cs new file mode 100644 index 00000000..bfe8eb2b --- /dev/null +++ b/src/XrmMockupShared/Requests/InitializeFileBlocksUploadRequestHandler.cs @@ -0,0 +1,31 @@ +#if !(XRM_MOCKUP_2011 || XRM_MOCKUP_2013 || XRM_MOCKUP_2015 || XRM_MOCKUP_2016) + +using Microsoft.Xrm.Sdk; +using Microsoft.Crm.Sdk.Messages; +using DG.Tools.XrmMockup.Database; +using System; +using System.Linq; + +namespace DG.Tools.XrmMockup +{ + internal class InitializeFileBlocksUploadRequestHandler : RequestHandler { + internal InitializeFileBlocksUploadRequestHandler(Core core, XrmDb db, MetadataSkeleton metadata, Security security) : base(core, db, metadata, security, "InitializeFileBlocksUpload") {} + + internal override OrganizationResponse Execute(OrganizationRequest orgRequest, EntityReference userRef) { + var request = MakeRequest(orgRequest); + + var fileAttachment = new Entity("fileattachment"); + fileAttachment["filename"] = request.FileName; + fileAttachment["regardingfieldname"] = request.FileAttributeName; + fileAttachment["objectid"] = request.Target; + db.Add(fileAttachment); + + + var resp = new InitializeFileBlocksUploadResponse(); + resp.Results["FileContinuationToken"] = Guid.NewGuid().ToString(); + return resp; + } + } +} + +#endif \ No newline at end of file diff --git a/src/XrmMockupShared/Requests/UploadBlockRequestHandler.cs b/src/XrmMockupShared/Requests/UploadBlockRequestHandler.cs new file mode 100644 index 00000000..c1bf7f5e --- /dev/null +++ b/src/XrmMockupShared/Requests/UploadBlockRequestHandler.cs @@ -0,0 +1,25 @@ +#if !(XRM_MOCKUP_2011 || XRM_MOCKUP_2013 || XRM_MOCKUP_2015 || XRM_MOCKUP_2016) + +using Microsoft.Xrm.Sdk; +using Microsoft.Crm.Sdk.Messages; +using DG.Tools.XrmMockup.Database; +using System; +using System.Linq; + +namespace DG.Tools.XrmMockup +{ + internal class UploadBlockRequestHandler : RequestHandler { + internal UploadBlockRequestHandler(Core core, XrmDb db, MetadataSkeleton metadata, Security security) : base(core, db, metadata, security, "UploadBlock") {} + + internal override OrganizationResponse Execute(OrganizationRequest orgRequest, EntityReference userRef) { + var request = MakeRequest(orgRequest); + + // Document store not implemented in database yet + + var resp = new UploadBlockResponse(); + return resp; + } + } +} + +#endif \ No newline at end of file diff --git a/src/XrmMockupShared/XrmMockupShared.projitems b/src/XrmMockupShared/XrmMockupShared.projitems index b1e4ac4d..0ec8998a 100644 --- a/src/XrmMockupShared/XrmMockupShared.projitems +++ b/src/XrmMockupShared/XrmMockupShared.projitems @@ -14,6 +14,9 @@ + + +