private void LockAutoNumberRecord(us_autonumber autoNumber)
            {
                var lockingUpdate = new us_autonumber()
                {
                    Id         = autoNumber.Id,
                    us_preview = "Lock"
                };

                OrgSvc.Update(lockingUpdate);
            }
            public override void ExecutePlugin()
            {
                Trace("Plugin Start");
                var triggerEvent = PluginCtx.MessageName;

                Trace("Has us_opportunitytype " + Target.Contains("us_opportunitytype").ToString());

                var opportunutytype = Target.GetAttributeValue <OptionSetValue>("us_opportunitytype");

                if (opportunutytype == null)
                {
                    return;
                }

                Trace("opportunutytype " + opportunutytype.Value.ToString());
                us_autonumber autoNumber = GetTargetAutoNumberRecord(opportunutytype.Value);

                LockAutoNumberRecord(autoNumber);

                var targetAttribute = autoNumber.us_field_name;

                Trace("targetAttribute " + targetAttribute.ToString());

                if (PluginCtx.MessageName == PluginMessage.Update && !Target.Contains(targetAttribute))
                {
                    return;  // Continue, if this is an Update event and the target does not contain the trigger value
                }
                else if (Target.Contains(targetAttribute) && !string.IsNullOrWhiteSpace(Target.GetAttributeValue <string>(targetAttribute)))
                {
                    return;  // Continue so we don't overwrite a manual value
                }
                else if (triggerEvent == PluginMessage.Update && PreImage.Contains(targetAttribute) && !string.IsNullOrWhiteSpace(PreImage.GetAttributeValue <string>(targetAttribute)))
                {
                    return;  // Continue, so we don't overwrite an existing value
                }

                var numDigits = autoNumber.us_digits;

                Trace("numDigit " + numDigits);
                var prefix  = string.Empty;
                var postfix = string.Empty;

                if (autoNumber.Contains(EntityMetadata <us_autonumber> .AttributeName(a => a.us_prefix)))
                {
                    prefix = ReplacePredefined(autoNumber.us_prefix);
                }
                if (autoNumber.Contains(EntityMetadata <us_autonumber> .AttributeName(a => a.us_postfix)))
                {
                    postfix = ReplacePredefined(autoNumber.us_postfix);
                }

                Trace("autoNumber.us_next_number.Value " + autoNumber.us_next_number);
                //Trace("autoNumber.us_next_number.Value " + autoNumber.us_next_number);
                var number = numDigits == 0 ? "" : autoNumber.us_next_number.Value.ToString("D" + numDigits);

                Trace("Number " + number.ToString());

                Target[targetAttribute] = $"{prefix}{number}{postfix}";

                var updatedAutoNumber = new us_autonumber()
                {
                    Id             = autoNumber.Id,
                    us_next_number = autoNumber.us_next_number + 1,
                    us_preview     = Target[targetAttribute].ToString()
                };

                OrgSvc.Update(updatedAutoNumber);
            }