예제 #1
0
        public TaskExecutionMessage Execute(TaskExecutionPayload payloadObj)
        {
            IManagerBatchItem batchItem = new ManagerBatchItem();
            var status           = batchItem.BatchItemUpdateNextRunTime(payloadObj.TenantId, payloadObj.Id);
            var executionMessage = new TaskExecutionMessage();

            executionMessage.Message = TaskExecutionCode.Success;
            return(executionMessage);
        }
예제 #2
0
        public static Guid SaveEmail(Guid tenantId, Guid userId, EmailTemplate template, string emailRecipient, string name, string referenceEntity)
        {
            IManagerScheduler _schedulerManager = new ManagerScheduler();

            if (template.Body != null && !string.IsNullOrEmpty(template.Body.Value))
            {
                ISettingManager        _iSettingManager        = new SettingManager();
                IEntityResourceManager _iEntityResourceManager = new VPC.Framework.Business.EntityResourceManager.Contracts.EntityResourceManager();
                IMetadataManager       _iMetadataManager       = new VPC.Framework.Business.MetadataManager.Contracts.MetadataManager();
                IManagerBatchItem      _managerBatchItem       = new ManagerBatchItem();
                IManagerBatchType      _managerBatchType       = new ManagerBatchType();
                var emailSubType = _iMetadataManager.GetSubTypes("email");
                var sendername   = _iSettingManager.GetSenderNameByContext(tenantId, SettingContextTypeEnum.EMAIL);

                dynamic jsonObject = new JObject();
                jsonObject.Body      = template.Body.Value.Replace("'", "''");
                jsonObject.Sender    = sendername;
                jsonObject.Recipient = emailRecipient;
                jsonObject.Date      = HelperUtility.GetCurrentUTCDate();
                jsonObject.Subject   = template.Title.Value;
                var batchType = _managerBatchType.GetBatchTypeByContext(tenantId, BatchTypeContextEnum.Email);
                if (batchType != null)
                {
                    var myObj = new JObject();
                    myObj.Add("email", jsonObject);
                    //Save Email
                    var returnId = _iEntityResourceManager.SaveResult(tenantId, userId, "email", myObj, emailSubType[0].Name.ToString());
                    //Save Batch item
                    var batchItemId = Guid.NewGuid();
                    _managerBatchItem.BatchItemCreate(tenantId, (!string.IsNullOrEmpty(batchType.ItemTimeout.Value) ? Convert.ToInt32(batchType.ItemTimeout.Value) : (int?)null)
                                                      , new BatchItem
                    {
                        BatchItemId = batchItemId,
                        BatchTypeId = Guid.Parse(batchType.InternalId.Value),
                        Name        = string.Format("{0}-{1}{2}{3}", name, DateTime.UtcNow.Year, DateTime.UtcNow.Month, DateTime.UtcNow.Day),
                        Priority    = (!string.IsNullOrEmpty(batchType.Priority.Value) ? Convert.ToInt32(batchType.Priority.Value) : (int?)null),
                        RetryCount  = 0,
                        EntityId    = referenceEntity,
                        ReferenceId = returnId,
                        Status      = EmailEnum.ReadyToSend,
                        NextRunTime = Convert.ToInt32(batchType.Type.Value) == (int)BatchTypeEnum.Scheduled ? _schedulerManager.GetNextRunDateTime(tenantId, new Guid(batchType.Scheduler.InternalId.Value)) : DateTime.MinValue,
                        // NextRunTime=   CalCulateNextRunTime(tenantId,new Guid("57AAB7B8-326E-431B-890A-56D099CB429F")),
                        AuditDetails = new AuditDetail
                        {
                            CreatedBy = userId
                        }
                    });
                    return(batchItemId);
                }
            }
            return(Guid.Empty);
        }
예제 #3
0
        void IBatchTypes.OnExecute(dynamic obj)
        {
            VPC.Entities.BatchType.BatchType batchType = (VPC.Entities.BatchType.BatchType)obj[0];
            var tenantId = Guid.Parse(batchType.TenantId.Value);

            try
            {
                ISettingManager        _iSettingManager        = new SettingManager();
                IEntityResourceManager _iEntityResourceManager = new VPC.Framework.Business.EntityResourceManager.Contracts.EntityResourceManager();
                IManagerBatchItem      _managerBatchItem       = new ManagerBatchItem();

                var result = _iSettingManager.GetSettingsByContext(tenantId, SettingContextTypeEnum.EMAIL);
                if (result != null)
                {
                    EmailSenderOptions options = Newtonsoft.Json.JsonConvert.DeserializeObject <EmailSenderOptions>(result.Content);
                    //Get Batch Item
                    var allBatchItems = _managerBatchItem.GetBatchItems(tenantId, new Guid(batchType.InternalId.Value), (batchType.ItemRetryCount.Value.Length > 0 ? (int?)Int32.Parse(batchType.ItemRetryCount.Value) : (int?)null));
                    foreach (var allBatchItem in allBatchItems)
                    {
                        try
                        {
                            var queryContext = new QueryContext {
                                Fields = "Body,Sender,Recipient,Subject,Id"
                            };
                            DataTable templatedt = _queryManager.GetResultById(tenantId, "email", allBatchItem.ReferenceId, queryContext);

                            _managerBatchItem.BatchItemUpdateStartTime(tenantId, allBatchItem.BatchItemId);
                            var email = EntityMapper <Email> .Mapper(templatedt);

                            SendEmail(tenantId, allBatchItem, email.Recipient.Value, email.Subject.Value, email.Body.Value, options);

                            //Update batch History
                            _managerBatchItem.BatchHistoryCreate(tenantId, new BatchItemHistory {
                                BatchHistoryId = Guid.NewGuid(),
                                BatchItemId    = allBatchItem.BatchItemId,
                                EntityId       = allBatchItem.EntityId,
                                ReferenceId    = allBatchItem.ReferenceId,
                                Status         = EmailEnum.Send,
                                RunTime        = allBatchItem.NextRunTime
                            });
                            //Update Email Status
                            _iEntityResourceManager.UpdateSpecificField(tenantId, "email", allBatchItem.ReferenceId, "Status", ((int)EmailEnum.Send).ToString());
                        }
                        catch (System.Exception ex)
                        {
                            _log.Error("An error has occurred while sending email", ex.Message);

                            //Update batch History
                            _managerBatchItem.BatchHistoryCreate(tenantId, new BatchItemHistory {
                                BatchHistoryId = Guid.NewGuid(),
                                BatchItemId    = allBatchItem.BatchItemId,
                                EntityId       = allBatchItem.EntityId,
                                ReferenceId    = allBatchItem.ReferenceId,
                                Status         = EmailEnum.Fail,
                                RunTime        = allBatchItem.NextRunTime,
                                FailedReason   = ex.Message
                            });
                            //Update Batch item status
                            _managerBatchItem.BatchItemUpdate(tenantId, (batchType.ItemRetryCount.Value.Length > 0 ? (int?)Int32.Parse(batchType.ItemRetryCount.Value) : (int?)null),
                                                              new BatchItem {
                                BatchItemId  = allBatchItem.BatchItemId,
                                Status       = EmailEnum.Fail,
                                FailedReason = ex.Message
                            });
                            //Update Email Status
                            _iEntityResourceManager.UpdateSpecificField(tenantId, "email", allBatchItem.ReferenceId, "Status", ((int)EmailEnum.Fail).ToString());
                            throw ex;
                        }

                        //Update Batch item status
                        _managerBatchItem.BatchItemUpdateStatus(tenantId, new BatchItem {
                            Status = EmailEnum.Send, BatchItemId = allBatchItem.BatchItemId
                        });
                    }
                }
                else
                {
                    _log.Error("Email gateway not configured");
                }
            }
            catch (System.Exception ex)
            {
                _log.Error("Email send failed", ex.Message);
            }
        }