private DestinationFieldList CreateDestinationItem(ProcessInfo process, string uniqueName, string name) { var destination = new DestinationFieldList { ExpressionName = name, UniqueName = uniqueName }; AddStateFields(process, destination); AddVersionFields(process, destination); AddLastModifiedOnField(destination); foreach (var field in process.GetAllFields().Where(x => x.SystemName != Constants.IdColumnName && CanBeDestinationField(x))) { var destinationField = CreateDestinationField(field, process.SystemName, destination); destination.Fields.Add(destinationField); } return destination; }
/// <summary> /// Loads the expression items. /// </summary> /// <param name="process">The process.</param> /// <param name="dataSources">The data sources.</param> /// <param name="sourceDataProcess">The source data process.</param> /// <param name="destinationListField">The destination list field.</param> /// <param name="destinationProcess">The destination process.</param> /// <param name="fieldMapping">The field mapping.</param> private async void LoadExpressionItems( IProcessEdit process, IEnumerable<DataTriggerMappingDataSourceRetriever> dataSources, ProcessInfo sourceDataProcess, FieldInfo destinationListField, ProcessInfo destinationProcess, DataTriggerFieldMappingEdit fieldMapping) { WindowManager.Value.ShowStatus(new Status { IsBusy = true }); var expressions = new List<IExpressionObjectBase>(); var newExpressions = new List<IExpressionObjectBase>(); var syncContext = new NotifyClientAction( () => { ExpressionDesigner.LoadFromExpressionObjects(expressions); WindowManager.Value.ShowStatus(new Status()); }); syncContext.OperationStarted(); if (fieldMapping.ModificationType == DataTriggerModificationType.Link || fieldMapping.ModificationType == DataTriggerModificationType.Unlink) { var objectName = string.Format("sourceData.GetSourceItem(\"{0}\")", DataTriggerFieldMappingExpressionNames.SourceDataProcess); newExpressions.Add(CreateSourceItem(sourceDataProcess, DataTriggerFieldMappingExpressionNames.SourceDataProcess, sourceDataProcess.Name, objectName)); } else { foreach (var dataSource in dataSources) { var name = string.Format(CultureInfo.InvariantCulture, "{0} (source)", dataSource.SourceFieldName); var objectName = string.Format("sourceData.GetSourceItem(\"{0}\")", dataSource.SourceName); newExpressions.Add(CreateSourceItem(dataSource.SourceProcess, dataSource.SourceName, name, objectName)); } newExpressions.Add( CreateSourceItem( destinationProcess, DataTriggerFieldMappingExpressionNames.ModifiedItem, string.Format("{0} (old)", destinationListField.Name), ModifiedItemObjectName)); } newExpressions.Add(CreateUserInfoSourceItem(DataTriggerFieldMappingExpressionNames.UserInfo)); try { var systemParameters = await CreateSystemParametersItemAsync(DataTriggerFieldMappingExpressionNames.SystemParameters); if (systemParameters != null) { newExpressions.Add(systemParameters); } } catch (DataPortalException) { } newExpressions.Add(CreateDestinationItem(destinationProcess, DataTriggerFieldMappingExpressionNames.DestinationItem, destinationListField.Name)); UpdatePositions(newExpressions); if (!string.IsNullOrWhiteSpace(fieldMapping.Expression)) { try { var expressionsContainer = Serializer.Deserialize(fieldMapping.Expression); expressions.AddRange(expressionsContainer.Expressions); } catch { // Do nothing, new expressions will be used. } } UpdateStateList(process); UpdateStoredExpressions(expressions, newExpressions, syncContext); syncContext.OperationCompleted(); }
private SourceFieldList CreateSourceItem( ProcessInfo process, string uniqueName, string name, string objectName) { var source = new SourceFieldList { ExpressionName = name, UniqueName = uniqueName }; AddIdFields(process, source, objectName, SourceFieldSetNames.DataTriggerSourceItem); AddStateFields(process, source, objectName, SourceFieldSetNames.DataTriggerSourceItem); AddVersionFields(process, source, objectName, SourceFieldSetNames.DataTriggerSourceItem); AddLastModifiedOnField(source, objectName, SourceFieldSetNames.DataTriggerSourceItem); foreach (var field in process.GetAllFields().Where(CanBeSourceField)) { var sourceField = CreateSourceField(field, process.SystemName, source); sourceField.ObjectName = objectName; source.Fields.Add(sourceField); } return source; }
/// <summary> /// Loads the expression items. /// </summary> /// <param name="sourceProcess">The source process.</param> /// <param name="destinationProcess">The destination process.</param> /// <param name="trigger">The trigger.</param> private async void LoadExpressionItems( IProcessEdit sourceProcess, ProcessInfo destinationProcess, ProcessDataTriggerEdit trigger) { WindowManager.Value.ShowStatus(new Status { IsBusy = true }); var expressions = new List<IExpressionObjectBase>(); var newExpressions = new List<IExpressionObjectBase>(); var syncContext = new NotifyClientAction( () => { ExpressionDesigner.LoadFromExpressionObjects(expressions); IsSaveable = IsTestable(); WindowManager.Value.ShowStatus(new Status()); }); syncContext.OperationStarted(); newExpressions.Add( CreateSourceItem( sourceProcess, DataTriggerMappingExpressionNames.SourceItem, string.Format("{0} (source)", sourceProcess.Name), SourceItemObjectName)); if (trigger.ModificationType != DataTriggerModificationType.Self) newExpressions.Add( CreateSourceItem( destinationProcess, DataTriggerMappingExpressionNames.SourceToModifyItem, string.Format("{0} (old)", destinationProcess.Name), ModifiedItemObjectName)); newExpressions.Add(CreateUserInfoSourceItem(DataTriggerMappingExpressionNames.UserInfo)); try { var systemParameters = await CreateSystemParametersItemAsync(DataTriggerMappingExpressionNames.SystemParameters); if (systemParameters != null) { newExpressions.Add(systemParameters); } } catch (DataPortalException) { } newExpressions.Add(CreateDestinationItem(destinationProcess, DataTriggerMappingExpressionNames.DestinationItem, destinationProcess.Name)); UpdatePositions(newExpressions); if (!string.IsNullOrWhiteSpace(trigger.ModificationMapping)) { try { var expressionsContainer = Serializer.Deserialize(trigger.ModificationMapping); expressions.AddRange(expressionsContainer.Expressions); } catch { // Do nothing, new expressions will be used. } } UpdateStateList(sourceProcess); UpdateStoredExpressions(expressions, newExpressions, syncContext); syncContext.OperationCompleted(); }