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