/// <summary>
        /// Creates the destination field.
        /// </summary>
        /// <param name="field">The field.</param>
        /// <param name="owner">The owner.</param>
        /// <returns>The <see cref="DestinationField"/>.</returns>
        /// <exception cref="System.ArgumentException">Invalid destination field.</exception>
        private DestinationField CreateDestinationField(FieldInfo field, ExpressionObjectBase owner)
        {
            if (!CanBeDestinationField(field))
                throw new ArgumentException("Invalid destination field.");

            var dataType = GetNodeDataType(field);

            var result = new DestinationField(owner)
                         {
                             DataType = dataType,
                             Name = field.Name,
                             ConnectorIn = { DataType = dataType, Name = field.Name },
                             SystemName = field.SystemName,
                             SetName = SourceFieldSetNames.Item,
                             SubfieldsRetriever = GetDestinationFieldsRetriever(field)
                         };

            return result;
        }
        /// <summary>
        /// Creates the generic destination field.
        /// </summary>
        /// <param name="field">The field.</param>
        /// <param name="owner">The owner.</param>
        /// <returns>DestinationField.</returns>
        private static DestinationField CreateGenericDestinationField(FieldEdit field, ExpressionObjectBase owner)
        {
            var dataType = DestinationNodeFactory.GetDataType(GetType(field));

            var df = new DestinationField(owner)
            {
                DataType = dataType,
                Name = field.Name,
                IsKeyVisible = true,
                IsKeyEnabled = CanBeKeyField(field),
                ConnectorIn = { DataType = dataType, Name = field.Name },
                SystemName = field.SystemName,
                SetName = SourceFieldSetNames.Item
            };

            return df;
        }
        /// <summary>
        /// Creates the file destination field.
        /// </summary>
        /// <param name="field">The field.</param>
        /// <param name="owner">The owner.</param>
        /// <returns>DestinationField.</returns>
        private static DestinationField CreateFileDestinationField(FieldEdit field, ExpressionObjectBase owner)
        {
            var dataType = DestinationNodeFactory.GetDataType(typeof(string));

            var df = new DestinationField(owner)
            {
                DataType = dataType,
                Name = field.Name,
                ConnectorIn = { DataType = dataType, Name = field.Name },
                SystemName = field.SystemName,
                SetName = SourceFieldSetNames.Item,
                IsKeyVisible = true,
                IsKeyEnabled = false
            };

            return df;
        }
        /// <summary>
        /// Creates the cross reference source field.
        /// </summary>
        /// <param name="field">The field.</param>
        /// <param name="owner">The owner.</param>
        /// <returns>SourceField.</returns>
        private static SourceField CreateCrossReferenceSourceField(FieldInfo field, string processName, ExpressionObjectBase owner)
        {
            var dataType = field.ColumnType == ColumnTypes.Reference
                               ? NodeDataType.CrossReference
                               : NodeDataType.List;

            var sf = new SourceField(owner)
            {
                DataType = dataType,
                Name = field.Name,
                ConnectorOut = { DataType = dataType, Name = field.Name },
                SystemName = field.SystemName,
                SetName = SourceFieldSetNames.DataTriggerSourceItem,
                SubfieldsRetriever = new CrossReferenceSubfieldsRetriever(field, CanBeSourceField, CreateSourceField)
            };

            if (dataType == NodeDataType.CrossReference)
            {
                PublishedProcessInfo.BeginGetProcessInfoByCrossReferenceField(processName, field.SystemName, true,
                    result =>
                    {
                        if (result.Error == null &&
                            result.Object != null)
                        {
                            sf.AdditionalInfo = new CrossReferenceFieldInfo(result.Object.SystemName);
                        }
                    });
            }

            return sf;
        }
        private static DestinationField CreateDestinationField(FieldInfo field, ExpressionObjectBase owner)
        {
            switch (field.ColumnType)
            {
                case ColumnTypes.Integer:
                case ColumnTypes.String:
                case ColumnTypes.Numeric:
                case ColumnTypes.Double:
                case ColumnTypes.Boolean:
                case ColumnTypes.DateTime:
                case ColumnTypes.SampleType:
                case ColumnTypes.Reference:
                case ColumnTypes.Result:
                case ColumnTypes.Sample:
                case ColumnTypes.Checklist:
                    {
                        var dataType = GetDataType(field);
                        var df = new DestinationField(owner)
                                     {
                                         DataType = dataType,
                                         Name = field.Name,
                                         ConnectorIn = { DataType = dataType, Name = field.Name },
                                         SetName = SourceFieldSetNames.DataTriggerDestinationItem,
                                         InnerName = field.SystemName,
                                         SystemName = field.SystemName
                                     };

                        return df;
                    }

                default:
                    throw new ArgumentException("Field type not supported.", "field");
            }
        }
        /// <summary>
        /// Creates the generic source field.
        /// </summary>
        /// <param name="field">The field.</param>
        /// <param name="owner">The owner.</param>
        /// <returns>SourceField.</returns>
        private static SourceField CreateSourceFieldFromDataVariable(DataVariableEdit field, ExpressionObjectBase owner)
        {
            var dataType = GetDataType(field);

            var sf = new SourceField(owner)
                {
                    DataType = dataType,
                    Name = field.VariableName,
                    ConnectorOut = { DataType = dataType, Name = field.VariableName },
                    SetName = SourceFieldSetNames.DataTriggerSourceItem,
                    InnerName = field.VariableSystemName,
                    SystemName = field.VariableSystemName
                };

            return sf;
        }
        /// <summary>
        /// Creates the source field.
        /// </summary>
        /// <param name="field">The field.</param>
        /// <param name="owner">The owner.</param>
        /// <returns>SourceField.</returns>
        /// <exception cref="System.ArgumentException">Field type not supported.;field</exception>
        private static SourceField CreateSourceField(FieldInfo field, string processName, ExpressionObjectBase owner)
        {
            switch (field.FieldType.ColumnType)
            {
                case ColumnTypes.Integer:
                case ColumnTypes.String:
                case ColumnTypes.Numeric:
                case ColumnTypes.Double:
                case ColumnTypes.Boolean:
                case ColumnTypes.DateTime:
                case ColumnTypes.AutoNumber:
                case ColumnTypes.SampleType:
                case ColumnTypes.Label:
                    return CreateGenericSourceField(field, owner);

                case ColumnTypes.Reference:
                case ColumnTypes.MultiReference:
                    return CreateCrossReferenceSourceField(field, processName, owner);

                case ColumnTypes.File:
                    return CreateFileSourceField(field, owner);

                default:
                    throw new ArgumentException("Field type not supported.", "field");
            }
        }
        /// <summary>
        /// Creates the source field.
        /// </summary>
        /// <param name="parameter">The parameter.</param>
        /// <param name="owner">The owner.</param>
        /// <returns>The SourceField.</returns>
        /// <exception cref="System.InvalidOperationException">Parameter type not found.</exception>
        private SourceField CreateSourceField(ServiceMethodParameterEdit parameter, ExpressionObjectBase owner)
        {
            if (ServicePrimitiveTypes.GetTypes().Any(t => t.Guid == parameter.TypeGuid))
                return CreatePrimitiveSourceField(parameter, owner);

            if (_knownTypes.Any(t => t.Guid == parameter.TypeGuid))
                return CreateComplexSourceField(parameter, owner);

            throw new InvalidOperationException("Parameter type not found.");
        }
        /// <summary>
        /// Creates the destination field.
        /// </summary>
        /// <param name="field">The field.</param>
        /// <param name="owner">The owner.</param>
        /// <returns>The DestinationField.</returns>
        /// <exception cref="System.InvalidOperationException">Invalid destination field.</exception>
        private DestinationField CreateDestinationField(FieldInfo field, ExpressionObjectBase owner)
        {
            if (!CanBeDestinationField(field))
                throw new InvalidOperationException("Invalid destination field.");

            var dataType = GetNodeDataType(field);

            var result = new DestinationField(owner)
                             {
                                 DataType = dataType,
                                 Name = field.Name,
                                 IsKeyVisible = true,
                                 IsKeyEnabled = CanBeKeyField(field),
                                 ConnectorIn = { DataType = dataType, Name = field.Name },
                                 SystemName = field.SystemName,
                                 SetName = SourceFieldSetNames.Item,
                                 SubfieldsRetriever = GetDestinationFieldsRetriever(field)
                             };

            result.ConnectorIn.Validator = CreateConnectionValidator(result);

            return result;
        }
 private IEnumerable<IExpressionField> GetSubfields(ExpressionObjectBase owner)
 {
     if (_fieldSelector(this))
         yield return _fieldFactory(this, owner);
 }
 /// <summary>
 /// Creates the expression fields.
 /// </summary>
 /// <param name="fields">The fields.</param>
 /// <param name="owner">The owner.</param>
 /// <returns>IEnumerable{IExpressionField}.</returns>
 private IEnumerable<IExpressionField> CreateExpressionFields(IEnumerable<FieldInfo> fields, ExpressionObjectBase owner)
 {
     return fields.Where(_fieldsFilter).Select(f => _expressionFieldFactory(f, owner));
 }
        private DestinationField CreateDestinationField(IServiceExposedTypeFieldEdit field, ExpressionObjectBase owner)
        {
            var dataType = GetDataType(field);
            var subfieldsRetriever = GetSubfieldsRetriever(field);
            var result = new DestinationField(owner)
                             {
                                 DataType = dataType,
                                 Name = field.Name,
                                 ConnectorIn = { DataType = dataType, Name = field.Name },
                                 InnerName = field.Name,
                                 SystemName = field.Name,
                                 SubfieldsRetriever = subfieldsRetriever
                             };

            return result;
        }
        private SourceField CreateSourceField(FieldEdit field, ExpressionObjectBase owner)
        {
            var dataType = GetNodeDataType(field);
            var result = new SourceField(owner)
                             {
                                 Name = field.Name,
                                 DataType = dataType,
                                 ConnectorOut = { DataType = dataType, Name = field.Name },
                                 SetName = SourceFieldSetNames.IntegrationServiceResultItem,
                                 InnerName = field.SystemName,
                                 SystemName = field.SystemName,
                                 SubfieldsRetriever = GetSubfieldsRetriever(field)
                             };

            return result;
        }
            /// <summary>
            /// Creates the field.
            /// </summary>
            /// <param name="name">The field name.</param>
            /// <param name="type">The field type.</param>
            /// <param name="owner">The owner.</param>
            /// <returns>The <see cref="DestinationField"/>.</returns>
            private DestinationField CreateField(string name, NodeDataType type, ExpressionObjectBase owner)
            {
                var field = new DestinationField(owner)
                            {
                                DataType = type,
                                Name = name,
                                IsKeyVisible = false,
                                IsKeyEnabled = false,
                                ConnectorIn = { DataType = type, Name = name },
                                SystemName = name,
                                SetName = SourceFieldSetNames.Item
                            };

                return field;
            }
        /// <summary>
        /// Creates the destination field.
        /// </summary>
        /// <param name="field">The field.</param>
        /// <param name="processName">The process name.</param>
        /// <param name="owner">The owner.</param>
        /// <returns>The DestinationField.</returns>
        /// <exception cref="System.InvalidOperationException">Invalid destination field.</exception>
        private DestinationField CreateDestinationField(FieldInfo field, string processName, ExpressionObjectBase owner)
        {
            if (!CanBeDestinationField(field))
                throw new InvalidOperationException("Invalid destination field.");

            var dataType = GetDataType(field);
            if (field.ColumnType == ColumnTypes.Sample)
                dataType = NodeDataType.Sample;

            var df = new DestinationField(owner)
                         {
                             DataType = dataType,
                             Name = field.Name,
                             ConnectorIn = { DataType = dataType, Name = field.Name, Validator = ConnectionValidator },
                             SetName = SourceFieldSetNames.DataTriggerDestinationItem,
                             InnerName = field.SystemName,
                             SystemName = field.SystemName,
                             IsKeyEnabled = KeyFieldsEnabled && CanBeKeyField(field),
                             IsKeyVisible = KeyFieldsEnabled && CanBeKeyField(field),
                             IsRequired = field.IsRequired,
                             SubfieldsRetriever = GetDestinationFieldsRetriever(field)
                         };

            if (dataType == NodeDataType.CrossReference)
            {
                PublishedProcessInfo.BeginGetProcessInfoByCrossReferenceField(
                    processName,
                    field.SystemName,
                    true,
                    result =>
                        {
                            if (result.Error == null && result.Object != null)
                            {
                                df.AdditionalInfo = new CrossReferenceFieldInfo(result.Object.SystemName);
                            }
                        });
            }

            return df;
        }
            /// <summary>
            /// Creates the source field.
            /// </summary>
            /// <param name="field">The field.</param>
            /// <param name="owner">The owner.</param>
            /// <returns>The SourceField.</returns>
            /// <exception cref="System.InvalidOperationException">Field type not found.</exception>
            private SourceField CreateSourceField(ServiceExposedTypeFieldEdit field, ExpressionObjectBase owner)
            {
                if (ServicePrimitiveTypes.GetTypes().Any(t => t.Guid == field.TypeGuid))
                    return CreatePrimitiveSourceField(field, owner);

                if (_knownTypes.Any(t => t.Guid == field.TypeGuid))
                    return CreateComplexSourceField(field, owner);

                throw new InvalidOperationException("Field type not found.");
            }
Ejemplo n.º 17
0
 /// <summary>
 /// Initializes a new instance of the <see cref="ConnectorOut"/> class.
 /// </summary>
 /// <param name="owner">The owner.</param>
 public ConnectorOut(ExpressionObjectBase owner)
     : base(owner)
 {
 }
            /// <summary>
            /// Creates the primitive source field.
            /// </summary>
            /// <param name="field">The field.</param>
            /// <param name="owner">The owner.</param>
            /// <returns>The SourceField.</returns>
            private SourceField CreatePrimitiveSourceField(ServiceExposedTypeFieldEdit field, ExpressionObjectBase owner)
            {
                var type = ServicePrimitiveTypes.FindByGuid(field.TypeGuid);
                var dataType = field.AllowMultiple
                                   ? NodeDataType.Array
                                   : SourceNodeFactory.GetDataType(type.Type);
                var subfieldsRetriever = field.AllowMultiple ? new ArraySubfieldsRetriever(type) : null;

                if (ReferenceEquals(type, ServicePrimitiveTypes.Byte))
                {
                    dataType = NodeDataType.ByteArray;
                    subfieldsRetriever = null;
                }

                var result = new SourceField(owner)
                                 {
                                     DataType = dataType,
                                     Name = field.Name,
                                     ConnectorOut = { DataType = dataType, Name = field.Name },
                                     SetName = SourceFieldSetNames.IntegrationServiceSourceItem,
                                     InnerName = field.Name,
                                     SystemName = field.Name,
                                     SubfieldsRetriever = subfieldsRetriever
                                 };

                return result;
            }
        /// <summary>
        /// Creates the cross reference source field.
        /// </summary>
        /// <param name="field">The field.</param>
        /// <param name="owner">The owner.</param>
        /// <returns>SourceField.</returns>
        private static SourceField CreateCrossReferenceSourceField(FieldEdit field, ExpressionObjectBase owner)
        {
            var dataType = field.IsSingleCrossReference()
                               ? NodeDataType.CrossReference
                               : NodeDataType.List;

            var requiredStep = (CrossRefRequiredStepEdit)field.StepList.FirstOrDefault(s => s is CrossRefRequiredStepEdit);

            IExpressionFieldsRetriever subfieldsRetriever = null;

            if (requiredStep != null && requiredStep.CrossRefProcessId.HasValue)
            {
                subfieldsRetriever = new CrossReferenceSubfieldsRetriever(requiredStep.CrossRefProcessId.Value, CanBeSourceField, CreateSourceField);
            }

            var sf = new SourceField(owner)
                {
                    DataType = dataType,
                    Name = field.Name,
                    ConnectorOut = { DataType = dataType, Name = field.Name },
                    SystemName = field.SystemName,
                    SetName = SourceFieldSetNames.DataTriggerSourceItem,
                    SubfieldsRetriever = subfieldsRetriever
                };

            return sf;
        }
            /// <summary>
            /// Creates the complex source field.
            /// </summary>
            /// <param name="field">The field.</param>
            /// <param name="owner">The owner.</param>
            /// <returns>The SourceField.</returns>
            private SourceField CreateComplexSourceField(ServiceExposedTypeFieldEdit field, ExpressionObjectBase owner)
            {
                var type = _knownTypes.First(t => t.Guid == field.TypeGuid);
                var dataType = field.AllowMultiple ? NodeDataType.Array : NodeDataType.Entity;
                var result = new SourceField(owner)
                    {
                        DataType = dataType,
                        Name = field.Name,
                        ConnectorOut = { DataType = dataType, Name = field.Name },
                        SystemName = field.Name,
                        SetName = SourceFieldSetNames.IntegrationServiceSourceItem,
                        SubfieldsRetriever = new ComplexTypeSubfieldsRetriever(type, _knownTypes)
                    };

                return result;
            }
        /// <summary>
        /// Creates the generic source field.
        /// </summary>
        /// <param name="field">The field.</param>
        /// <param name="owner">The owner.</param>
        /// <returns>SourceField.</returns>
        private static SourceField CreateGenericSourceField(FieldInfo field, ExpressionObjectBase owner)
        {
            var dataType = SourceNodeFactory.GetDataType(GetType(field));

            var sf = new SourceField(owner)
            {
                DataType = dataType,
                Name = field.Name,
                ConnectorOut = { DataType = dataType, Name = field.Name },
                SetName = SourceFieldSetNames.DataTriggerSourceItem,
                InnerName = field.SystemName,
                SystemName = field.SystemName
            };

            return sf;
        }
 private IEnumerable<DestinationField> CreateSampleFields(ExpressionObjectBase owner)
 {
     yield return CreateField("Label", GetSamplePropertyName(s => s.Label), NodeDataType.String, owner);
     yield return CreateField("Alphanumeric Value", GetSamplePropertyName(s => s.SampleAlphanumeric), NodeDataType.String, owner);
     yield return CreateField("Numeric Value", GetSamplePropertyName(s => s.SampleNumeric), NodeDataType.Double, owner);
     yield return CreateField("Boolean Value", GetSamplePropertyName(s => s.SampleBoolean), NodeDataType.Boolean, owner);
 }
        /// <summary>
        /// Creates the file source field.
        /// </summary>
        /// <param name="field">The field.</param>
        /// <param name="owner">The owner.</param>
        /// <returns>SourceField.</returns>
        private static SourceField CreateFileSourceField(FieldInfo field, ExpressionObjectBase owner)
        {
            const NodeDataType DataType = NodeDataType.File;

            var sf = new SourceField(owner)
            {
                DataType = DataType,
                Name = field.Name,
                ConnectorOut = { DataType = DataType, Name = field.Name },
                SystemName = field.SystemName,
                SetName = SourceFieldSetNames.DataTriggerSourceItem,
                SubfieldsRetriever = new FileSubfieldsRetriever(SourceFieldSetNames.DataTriggerSourceItem)
            };

            return sf;
        }
            private DestinationField CreateField(string name, string systemName, NodeDataType type, ExpressionObjectBase owner)
            {
                var field = new DestinationField(owner)
                                {
                                    DataType = type,
                                    Name = name,
                                    IsKey = false,
                                    IsKeyVisible = true,
                                    IsKeyEnabled = true,
                                    ConnectorIn = { DataType = type, Name = name },
                                    SystemName = systemName,
                                    SetName = SourceFieldSetNames.Item
                                };

                field.ConnectorIn.Validator = _connectionValidatorFactory(field);

                return field;
            }
        /// <summary>
        /// Creates the destination field.
        /// </summary>
        /// <param name="field">The field.</param>
        /// <param name="owner">The owner.</param>
        /// <returns>DestinationField.</returns>
        private static DestinationField CreateDestinationField(FieldEdit field, ExpressionObjectBase owner)
        {
            var columnType = GetColumnType(field);

            switch (columnType)
            {
                case ColumnTypes.Reference:
                case ColumnTypes.MultiReference:
                    return CreateCrossReferenceDestinationField(field, owner);

                case ColumnTypes.File:
                    return CreateFileDestinationField(field, owner);

                case ColumnTypes.Integer:
                case ColumnTypes.String:
                case ColumnTypes.Numeric:
                case ColumnTypes.Boolean:
                case ColumnTypes.DateTime:
                    return CreateGenericDestinationField(field, owner);
            }

            return null;
        }
        /// <summary>
        /// Creates the source field.
        /// </summary>
        /// <param name="field">The field.</param>
        /// <param name="owner">The owner.</param>
        /// <returns>SourceField.</returns>
        private SourceField CreateSourceField(FieldInfo field, ExpressionObjectBase owner)
        {
            var dataType = GetNodeDataType(field.ColumnType);
            var result = new SourceField(owner)
                             {
                                 DataType = dataType,
                                 Name = field.Name,
                                 ConnectorOut = { DataType = dataType, Name = field.Name },
                                 SetName = SourceFieldSetNames.Item,
                                 InnerName = field.SystemName,
                                 SystemName = field.SystemName,
                                 SubfieldsRetriever = GetSubfieldsRetriever(field)
                             };

            return result;
        }
        /// <summary>
        /// Creates the cross reference destination field.
        /// </summary>
        /// <param name="field">The field.</param>
        /// <param name="owner">The owner.</param>
        /// <returns>DestinationField.</returns>
        private static DestinationField CreateCrossReferenceDestinationField(FieldEdit field, ExpressionObjectBase owner)
        {
            var isSingleRef = field.IsSingleCrossReference();

            var df = new DestinationField(owner)
            {
                DataType = NodeDataType.CrossReference,
                Name = field.Name,
                ConnectorIn = { DataType = NodeDataType.CrossReference, Name = field.Name },
                SystemName = field.SystemName,
                SetName = SourceFieldSetNames.Item,
                IsKeyVisible = true,
                IsKeyEnabled = isSingleRef,
                SubfieldsRetriever = new CrossReferenceSubfieldsRetriever(field)
            };

            return df;
        }
        /// <summary>
        /// Creates the source field.
        /// </summary>
        /// <param name="field">The field.</param>
        /// <param name="owner">The owner.</param>
        /// <returns>The SourceField.</returns>
        private static SourceField CreateSourceField(FieldEdit field, ExpressionObjectBase owner)
        {
            var dataType = GetDataType(field);
            var systemName = field.SystemName;
            if (dataType == NodeDataType.List)
                systemName = systemName + "List";

            var sf = new SourceField(owner)
                         {
                             DataType = dataType,
                             Name = field.Name,
                             ConnectorOut = { DataType = dataType, Name = field.Name },
                             SetName = SourceFieldSetNames.DataTriggerSourceItem,
                             InnerName = systemName,
                             SystemName = systemName,
                             SubfieldsRetriever = GetSourceFieldsRetriever(field)
                         };

            if (dataType == NodeDataType.CrossReference)
            {
                var crossRefStep = (CrossRefRequiredStepEdit)field.StepList.FirstOrDefault(x => x is CrossRefRequiredStepEdit);
                if (crossRefStep != null)
                    sf.AdditionalInfo = new CrossReferenceFieldInfo(crossRefStep.CrossRefProcess.SystemName);
            }

            return sf;
        }
        /// <summary>
        /// Creates the source field.
        /// </summary>
        /// <param name="field">The field.</param>
        /// <param name="owner">The owner.</param>
        /// <returns>SourceField.</returns>
        private static SourceField CreateSourceField(ProviderFieldEdit field, ExpressionObjectBase owner)
        {
            var dataType = SourceNodeFactory.GetDataType(GetType(field.Type));

            var result = new SourceField(owner)
            {
                DataType = dataType,
                Name = field.Name,
                ConnectorOut = { DataType = dataType, Name = field.Name },
                SetName = SourceFieldSetNames.ESyncSourceItem,
                SystemName = field.SystemName,
                ObjectName = "providerItem"
            };

            return result;
        }
        private SourceField CreateSourceField(
            IWebServiceTypeFieldDescription field,
            IWebMethodCallResultField resultField,
            ExpressionObjectBase owner)
        {
            var dataType = GetNodeDataType(field.FieldType);
            var retriever = GetSubfieldsRetriever(field.FieldType, resultField != null ? resultField.Fields : null);
            var name = field.Name;
            var fullName = field.Name;

            if (!field.DeclaringType.IsArray)
            {
                name = field.DeclaringType.DisplayName + "." + name;
                fullName = field.DeclaringType.Name + Constants.WebMethodCallResultDeclaringTypeSeparator + fullName;
            }
            
            var result = new SourceField(owner)
                         {
                             DataType = dataType,
                             Name = name,
                             ConnectorOut = { DataType = dataType, Name = name },
                             InnerName = fullName,
                             SystemName = fullName,
                             SubfieldsRetriever = retriever,
                             SetName = SourceFieldSetNames.IntegrationWebMethodCallResultItem
                         };

            return result;
        }