private void SetState(Entity target, RecordStateAndStatus sourceStateAndStatus, Entity currentStateAndStatusEntity = null)
        {
            // Don't update state when it's not available
            if (sourceStateAndStatus.State == null)
            {
                return;
            }

            if (currentStateAndStatusEntity != null)
            {
                var currentStateAndStatus = RemoveStateAndStatus(currentStateAndStatusEntity);

                // If the entity has no state: return
                if (currentStateAndStatus.State == null || (sourceStateAndStatus.State.Value == currentStateAndStatus.State.Value && sourceStateAndStatus.Status.Value == currentStateAndStatus.Status.Value))
                {
                    return;
                }
            }


            SetStateRequest setState = new SetStateRequest()
            {
                EntityMoniker = target.ToEntityReference(),
                State         = sourceStateAndStatus.State,
                Status        = sourceStateAndStatus.Status
            };

            targetService.Execute(setState);
        }
        private RecordStateAndStatus RemoveStateAndStatus(Entity record)
        {
            var recordStateAndStatus = new RecordStateAndStatus
            {
                State  = record.GetAttributeValue <OptionSetValue>("statecode"),
                Status = record.GetAttributeValue <OptionSetValue>("statuscode")
            };

            record.Attributes.Remove("statecode");
            record.Attributes.Remove("statuscode");

            return(recordStateAndStatus);
        }