protected override void Execute()
        {
            var isCompleted = JosephMSmsService.ProcessBulkSmsSending(TargetId);

            ActivityThisType.IsCompleted.Set(ExecutionContext, isCompleted);
        }
Example #2
0
        private void SendAndComplete()
        {
            //if send and complete set the set state to complete
            if (IsMessage(PluginMessage.Create, PluginMessage.Update) && IsStage(PluginStage.PostEvent) && IsMode(PluginMode.Synchronous))
            {
                if (BooleanChangingToTrue(Fields.jmcg_sms_.jmcg_sendandcomplete))
                {
                    XrmService.SetState(TargetType, TargetId, OptionSets.SMS.ActivityStatus.Completed);
                }
            }
            //if send and complete set true and setting state to complete
            //then send the sms
            if (IsMessage(PluginMessage.SetStateDynamicEntity) &&
                IsStage(PluginStage.PostEvent) &&
                IsMode(PluginMode.Synchronous) &&
                SetStateState == OptionSets.SMS.ActivityStatus.Completed)
            {
                var sms = XrmService.Retrieve(Entities.jmcg_sms, TargetId, new[] { Fields.jmcg_sms_.jmcg_sendandcomplete, Fields.jmcg_sms_.to, Fields.jmcg_sms_.description });
                if (sms.GetBoolean(Fields.jmcg_sms_.jmcg_sendandcomplete))
                {
                    var to = sms.GetActivityParties(Fields.jmcg_sms_.to);
                    if (Context.ParentContext != null &&
                        Context.ParentContext.InputParameters.Contains("Target") &&
                        Context.ParentContext.InputParameters["Target"] is Entity parentContextTarget &&
                        parentContextTarget.Contains(Fields.jmcg_sms_.to))
                    {
                        to = parentContextTarget.GetActivityParties(Fields.jmcg_sms_.to);
                    }
                    if (to.Count() == 0)
                    {
                        throw new InvalidPluginExecutionException($"The {GetFieldLabel(Fields.jmcg_sms_.to)} Recipient Is Required");
                    }
                    if (to.Count() != 1)
                    {
                        throw new InvalidPluginExecutionException($"Only 1 Recipient Is Implemented. Ensure Only 1 Contact Is Entered In The {GetFieldLabel(Fields.jmcg_sms_.to)} Field");
                    }
                    var recipientParty = to.First();
                    var recipient      = recipientParty.GetField(Fields.activityparty_.partyid) as EntityReference;
                    if (recipient == null || recipient.LogicalName != Entities.contact)
                    {
                        throw new InvalidPluginExecutionException($"The {GetFieldLabel(Fields.jmcg_sms_.to)} Recipient Must Be A {XrmService.GetEntityDisplayName(Entities.contact)}");
                    }
                    var mobileNumber = (string)XrmService.LookupField(recipient.LogicalName, recipient.Id, Fields.contact_.mobilephone);
                    if (string.IsNullOrWhiteSpace(mobileNumber))
                    {
                        throw new InvalidPluginExecutionException($"The Recipients {XrmService.GetFieldLabel(Fields.contact_.mobilephone, Entities.contact)} Is Empty");
                    }
                    var smsContent = sms.GetStringField(Fields.jmcg_sms_.description);
                    if (string.IsNullOrWhiteSpace(smsContent))
                    {
                        throw new InvalidPluginExecutionException($"{GetFieldLabel(Fields.jmcg_sms_.description)} Is Empty");
                    }

                    var cleanMobileNumber = string.Empty;
                    foreach (var character in mobileNumber)
                    {
                        if (char.IsNumber(character) || character == '+')
                        {
                            cleanMobileNumber = cleanMobileNumber + character;
                        }
                    }

                    if (JosephMSmsSettings.ActuallySendSms)
                    {
                        JosephMSmsService.SendSms(cleanMobileNumber, smsContent, JosephMSmsSettings.SmsSource);
                    }
                }
            }
        }