void IRunNowActivity.OnRunNow(IRunState context, ActivityInputs inputs)
        {
            var res = (IEntity)inputs[GetArgumentKey("updateFieldActivityResourceArgument")];

            IEntity entityToUpdate = null;

            try
            {
                if (res != null)
                {
                    entityToUpdate = res.AsWritable();
                }
            }
            catch
            {
                // ignore
            }

            if (entityToUpdate == null)
            {
                throw new WorkflowRunException_Internal("Input resource argument must be a resource", null);
            }

            var activityAs = ActivityInstance.Cast <EntityWithArgsAndExits>();

            Action <IEntity> updateAction = (e) => UpdateArgsHelper.UpdateEntityFromArgs(activityAs, inputs, e);

            PerformUpdate(entityToUpdate, updateAction);
        }
Пример #2
0
        void IRunNowActivity.OnRunNow(IRunState context, ActivityInputs inputs)
        {
            var ResourceTypeToCreateKey = GetArgumentKey("createActivityResourceArgument");
            var CreatedResourceKey      = GetArgumentKey("createActivityCreatedResource");

            IEntity newEntity = null;

            var resTypeRef = (IEntity)inputs[ResourceTypeToCreateKey];
            var resType    = resTypeRef?.As <EntityType>();

            if (resType == null)
            {
                throw new WorkflowRunException_Internal("Input resource argument must be a type.", null);
            }

            var activityAs = ActivityInstance.Cast <EntityWithArgsAndExits>();
            Action <IEntity> updateAction = (e) => UpdateArgsHelper.UpdateEntityFromArgs(activityAs, inputs, e);


            DatabaseContext.RunWithRetry(() =>
            {
                newEntity = PerformCreate(resType, updateAction);
            });

            context.SetArgValue(ActivityInstance, CreatedResourceKey, newEntity);
        }
Пример #3
0
        //private const string ClonedNameFormat = "{0} (clone)";

        void IRunNowActivity.OnRunNow(IRunState context, ActivityInputs inputs)
        {
            using (Profiler.MeasureAndSuppress("CloneImplementation.OnRunNow"))
            {
                var resourceKey   = GetArgumentKey("resourceToCloneArgument");
                var definitionKey = GetArgumentKey("newDefinitionCloneArgument");
                var clonedKey     = GetArgumentKey("clonedResourceArgument");

                var resId    = (IEntity)inputs[resourceKey];
                var resource = resId.As <Resource>();

                IEntity clone = null;

                EntityType cloneType = null;


                object definitionObj;
                if (inputs.TryGetValue(definitionKey, out definitionObj))
                {
                    if (definitionObj != null)
                    {
                        cloneType = ((IEntity)definitionObj).As <EntityType>();
                    }
                }

                try
                {
                    using (CustomContext.SetContext(context.EffectiveSecurityContext))
                    {
                        using (var ctx = DatabaseContext.GetContext(true))
                        {
                            var activityAs = ActivityInstance.Cast <EntityWithArgsAndExits>();

                            Action <IEntity> updateAction = c => UpdateArgsHelper.UpdateEntityFromArgs(activityAs, inputs, c);

                            clone = CreateClone(resource, cloneType, updateAction);

                            clone.Save();

                            ctx.CommitTransaction();
                        }
                    };
                }
                catch (DuplicateKeyException ex)
                {
                    throw new WorkflowRunException("The Clone item failed during saving: " + ex.Message, ex);
                }
                catch (ValidationException ex)
                {
                    throw new WorkflowRunException("The Cloned item failed validation during saving: " + ex.Message, ex);
                }

                context.SetArgValue(ActivityInstance, clonedKey, clone);
            }
        }