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); }
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); }
//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); } }