コード例 #1
0
        private static (Type, StructureReferenceType) GetFieldElementType(Type type, StructureReferenceType structureReferenceType)
        {
            if (type.IsArray)
            {
                return(GetFieldElementType(type.GetElementType(), StructureReferenceType.Embedded));
            }

            if (typeof(DynamicUpdateField).IsAssignableFrom(type) ||
                typeof(BlzVectorField).IsAssignableFrom(type) ||
                typeof(BlzOptionalField).IsAssignableFrom(type))
            {
                return(GetFieldElementType(type.GenericTypeArguments[0], StructureReferenceType.Embedded));
            }

            return(type, structureReferenceType);
        }
        /// <summary>
        /// Handles the structure request type
        /// </summary>
        /// <param name="complexDataQuery">The complex data query.</param>
        /// <param name="dataReturnDetails">The data return details.</param>
        private static void HandleStructure(IComplexDataQuery complexDataQuery, DataReturnDetailsType dataReturnDetails)
        {
            var structure = new DataStructureRequestType();
            dataReturnDetails.Structure.Add(structure);
            if (!string.IsNullOrWhiteSpace(complexDataQuery.DimensionAtObservation))
            {
                structure.dimensionAtObservation = complexDataQuery.DimensionAtObservation;
            }
            else
            {
                structure.dimensionAtObservation = DimensionObject.TimeDimensionFixedId;
            }

            HandleExplicit(complexDataQuery, structure);
            structure.structureID = DefaultStructureId;
            
            if (complexDataQuery.DataStructure != null)
            {
                RefBaseType structureRefernce = new StructureRefType();
                structureRefernce.agencyID = complexDataQuery.DataStructure.AgencyId;
                structureRefernce.id = complexDataQuery.DataStructure.Id;
                structureRefernce.version = complexDataQuery.DataStructure.Version;
                var structureType = new StructureReferenceType();
                structureType.SetTypedRef(structureRefernce);
                structure.Structure = structureType;
            }
            else if (complexDataQuery.ProvisionAgreement != null)
            {
                RefBaseType provisionAgreementReference = new ProvisionAgreementRefType();
                provisionAgreementReference.id = complexDataQuery.ProvisionAgreement.Id;
                provisionAgreementReference.agencyID = complexDataQuery.ProvisionAgreement.AgencyId;
                provisionAgreementReference.version = complexDataQuery.ProvisionAgreement.Version;
                var provisionAgreementReferenceType = new ProvisionAgreementReferenceType();
                provisionAgreementReferenceType.SetTypedRef(provisionAgreementReference);
                structure.ProvisionAgrement = provisionAgreementReferenceType;
            }
        }