internal void CreateFolder(EntityReference application) { TracingService.Trace($"In CreateFolder with Entity Type {application.LogicalName} and Entity Id {application.Id}"); var applicationEntity = Query.RetrieveDataForEntityRef(Service, new[] { defra_application.Fields.defra_name, defra_application.Fields.defra_permitnumber, defra_application.Fields.defra_applicationnumber }, application); TracingService.Trace($"Permit Number = {applicationEntity[defra_application.Fields.defra_permitnumber]}; Application Number = {applicationEntity[defra_application.Fields.defra_applicationnumber]}"); var request = new DocumentRelayRequest { ApplicationContentType = Config[$"{SharePointSecureConfigurationKeys.ApplicationFolderContentType}"], ApplicationNo = SharePointFilters.FilterPath(applicationEntity.GetAttributeValue <string>(defra_application.Fields.defra_applicationnumber)), FileBody = string.Empty, FileDescription = string.Empty, FileName = string.Empty, ListName = Config[$"{SharePointSecureConfigurationKeys.PermitListName}"], PermitContentType = Config[$"{SharePointSecureConfigurationKeys.PermitFolderContentType}"], PermitNo = SharePointFilters.FilterPath(applicationEntity.GetAttributeValue <string>(defra_application.Fields.defra_permitnumber)), Customer = string.Empty, SiteDetails = string.Empty, PermitDetails = string.Empty }; var stringContent = JsonConvert.SerializeObject(request); TracingService.Trace($"Data Sent to Logic App URL {Config[$"{SharePointSecureConfigurationKeys.DocumentRelayLogicAppUrl}"]}"); SendRequest(Config[$"{SharePointSecureConfigurationKeys.DocumentRelayLogicAppUrl}"], stringContent); }
private void AddInsertFileParametersToRequest(DocumentRelayRequest request, Entity queryRecord) { TracingService.Trace("In AddInsertFileParametersToRequest()"); TracingService.Trace("Logical Name: {0}", queryRecord.LogicalName); var permitNo = GetPermitNumber(queryRecord); var applicationNo = GetApplicationNumber(queryRecord); var fileName = GetFileName(queryRecord); var body = GetBody(queryRecord); var subject = GetSubject(queryRecord); var crmId = GetCrmId(queryRecord); var caseNo = GetCaseFolderName(queryRecord); var regarding = GetRegarding(queryRecord); request.ApplicationContentType = Config[$"{SharePointSecureConfigurationKeys.ApplicationFolderContentType}"]; request.ApplicationNo = applicationNo; request.FileBody = body; request.FileDescription = subject; request.FileName = fileName; request.ListName = Config[$"{SharePointSecureConfigurationKeys.PermitListName}"]; request.PermitContentType = Config[$"{SharePointSecureConfigurationKeys.PermitFolderContentType}"]; request.PermitNo = permitNo; request.Customer = string.Empty; // Not currently set by Document relay, enhancement request.SiteDetails = string.Empty; // Not currently set by Document relay, enhancement request.PermitDetails = string.Empty; // Not currently set by Document relay, enhancement request.CrmId = crmId; request.CaseNo = caseNo; request.EmailRegarding = regarding; AddEmailParametersToRequest(request, queryRecord); TracingService.Trace(string.Format("Requests: {0}", request)); }
private void UploadAttachment(Guid recordId) { var request = new DocumentRelayRequest(); // Email attachment has been created. Query CRM to get the email attachment data var attachmentData = ReturnAttachmentData(recordId); if (attachmentData == null) { throw new InvalidPluginExecutionException("No attachment data record returned from query"); } var regardingObjectId = GetRegardingObjectId(attachmentData); if (regardingObjectId != null && (regardingObjectId.LogicalName == Application.EntityLogicalName || regardingObjectId.LogicalName == Case.EntityLogicalName)) { var direction = (bool)(attachmentData.GetAttributeValue <AliasedValue>($"email.{Email.Fields.DirectionCode}")).Value; var statusCode = (OptionSetValue)(attachmentData.GetAttributeValue <AliasedValue>($"email.{Email.Fields.StatusCode}")).Value; if (direction && statusCode.Value != 3) { //Outgoing email, do not send the attachment on create TracingService.Trace("Aborted creating attachment for outgoing email attachment that is not sent"); return; } AddInsertFileParametersToRequest(request, attachmentData); // Check there is a file to upload if (request.HasBody()) { var resultBody = SendRequest(Config[SharePointSecureConfigurationKeys.DocumentRelayLogicAppUrl], JsonConvert.SerializeObject(request)); if (resultBody != null) { TracingService.Trace("Returned from LogicApp OK"); // Get the response object DocumentRelayResponse response = JsonConvert.DeserializeObject <DocumentRelayResponse>(resultBody); TracingService.Trace($"Returned from LogicApp OK, doc url is: {response.link}"); // Create document record CreateApplicationDocument(attachmentData, request.FileDescription, request.FileName, response.link); // Delete Attachment Service.Delete(attachmentData.LogicalName, attachmentData.Id); } } else { TracingService.Trace("No file body found for Attachment. Logic app not called."); } } else { TracingService.Trace("Only attachments for emails regarding Applications, RFIs or Schedule 5s are currently sent to SharePoint"); } }
private void UploadAnnotation(Guid recordId) { var request = new DocumentRelayRequest(); // Creation of of an Annotation record on a Application or Case. var annotationData = ReturnAnnotationData(recordId); if (annotationData == null) { throw new InvalidPluginExecutionException("No annotation data record returned from query"); } // Check that Note is regarding an application or a case if (IsRegardingValidForNote(annotationData)) { AddInsertFileParametersToRequest(request, annotationData); // Check there is a file to upload if (request.HasBody()) { var resultBody = SendRequest(Config[$"{SharePointSecureConfigurationKeys.DocumentRelayLogicAppUrl}"], JsonConvert.SerializeObject(request)); if (resultBody == null) { TracingService.Trace("Returned from LogicApp, no resultBody"); return; } // Get the response object DocumentRelayResponse response = JsonConvert.DeserializeObject <DocumentRelayResponse>(resultBody); TracingService.Trace($"Returned from LogicApp OK, doc url is: {response.link}"); // Create document record CreateApplicationDocument(annotationData, request.FileDescription, request.FileName, response.link); // Blank Note Document annotationData[Annotation.Fields.NoteText] = "File has been uploaded to SharePoint."; annotationData[Annotation.Fields.DocumentBody] = string.Empty; Service.Update(annotationData); } else { TracingService.Trace("No file body found for Note. Logic app not called."); } } }
private void AddEmailParametersToRequest(DocumentRelayRequest request, Entity queryRecord) { TracingService.Trace("Adding Email Parameters to Request"); request.EmailTo = string.Empty; request.EmailFrom = string.Empty; // Set Email stuff when we have an email if (queryRecord.LogicalName == Email.EntityLogicalName || queryRecord.LogicalName == ActivityMimeAttachment.EntityLogicalName) { if (queryRecord.Contains(Email.Fields.Sender)) { request.EmailFrom = queryRecord.GetAttributeValue <string>(Email.Fields.Sender); } if (queryRecord.Contains(Email.Fields.ToRecipients)) { request.EmailTo = queryRecord.GetAttributeValue <string>(Email.Fields.ToRecipients); } if (queryRecord.Contains($"email.{Email.Fields.Sender}")) { request.EmailFrom = ((string)((AliasedValue)queryRecord.Attributes[$"email.{Email.Fields.Sender}"]).Value); } if (queryRecord.Contains($"email.{Email.Fields.ToRecipients}")) { request.EmailTo = ((string)((AliasedValue)queryRecord.Attributes[$"email.{Email.Fields.ToRecipients}"]).Value); } if (queryRecord.Contains(Email.Fields.Subject)) { // For an email, this is just the filename again request.EmailLink = GetFileName(queryRecord); } else if (queryRecord.Contains($"email.{Email.Fields.Subject}")) { // Annotation needs the filename created for the email from subject and created on date request.EmailLink = CreateEmailFileNameForAttachment(queryRecord); } } // Max size of 250 in SharePoint request.EmailFrom = request.EmailFrom.TruncateIfNeeded(250); request.EmailTo = request.EmailTo.TruncateIfNeeded(250); }
private void UploadEmail(Guid recordId) { var request = new DocumentRelayRequest(); // Processing an email record. Need the information so we can upload the email to SharePoint var emailData = ReturnEmailData(recordId); if (emailData == null) { throw new InvalidPluginExecutionException("No email data record returned from query"); } var regardingObjectId = GetRegardingObjectId(emailData); if (regardingObjectId != null && (regardingObjectId.LogicalName == Application.EntityLogicalName || regardingObjectId.LogicalName == Case.EntityLogicalName)) { var direction = emailData.GetAttributeValue <bool>(Email.Fields.DirectionCode); var statusCode = emailData.GetAttributeValue <OptionSetValue>(Email.Fields.StatusCode); if (direction && statusCode.Value != 3) { //Outgoing email, do not send the email on create TracingService.Trace("Aborted creating email for outgoing email that is not sent"); return; } AddInsertFileParametersToRequest(request, emailData); var resultBody = SendRequest(Config[$"{SharePointSecureConfigurationKeys.DocumentRelayLogicAppUrl}"], JsonConvert.SerializeObject(request)); if (resultBody != null) { TracingService.Trace("Returned from LogicApp OK"); if (emailData != null) { // Set uploaded to SharePoint flag! emailData[Email.Fields.defra_uploadedtosharepoint] = true; Service.Update(emailData); } } } else { TracingService.Trace("Only emails regarding Applications, RFIs or Schedule 5s are sent to SharePoint"); } }