private static void SetAppInfoAndDataType(IPluglet pluglet, XmlSchemaElement element) { X12BaseDataType dataType = pluglet.DataType; if (dataType != null && !string.IsNullOrEmpty(dataType.Name)) { XmlSchemaAppInfo appInfo = new XmlSchemaAppInfo(); XmlDocument doc = new XmlDocument(); XmlElement elem = doc.CreateElement("STD_Info"); elem.SetAttribute("DataType", dataType.Name); if (!string.IsNullOrEmpty(pluglet.DEStandard)) { elem.SetAttribute("Name", pluglet.DEStandard); } if (!string.IsNullOrEmpty(pluglet.DENumber)) { elem.SetAttribute("Number", pluglet.DENumber); } if (dataType.MaxLength > 0) { elem.SetAttribute("MaximumLength", dataType.MaxLength.ToString()); } XmlNode[] nodeArray = new XmlNode[1] { elem }; appInfo.Markup = nodeArray; if (element.Annotation != null) { element.Annotation.Items.Add(appInfo); } else { XmlSchemaAnnotation annotation = new XmlSchemaAnnotation(); annotation.Items.Add(appInfo); element.Annotation = annotation; } if (string.Equals(dataType.Name, X12DataTypeFactory.IDNew_DataTypeName, StringComparison.OrdinalIgnoreCase)) { PopulateEnumerationValues(pluglet.DataType as X12_IdDataType, element); } } }
public static X12BaseDataType CreateX12DataTypeFromXmlSchema2(XmlSchemaElement element, bool bDesignTime) { string dataTypeName; X12BaseDataType dataType = null; XmlSchemaSimpleTypeRestriction restriction = null; int minL, maxL; minL = maxL = -1; Dictionary <string, string> sortedList = null; if (element.ElementType is XmlSchemaSimpleType) { XmlSchemaSimpleType sType = (XmlSchemaSimpleType)element.ElementType; XmlQualifiedName name = sType.QualifiedName; dataTypeName = sType.Name; restriction = sType.Content as XmlSchemaSimpleTypeRestriction; if (restriction != null) { dataTypeName = name.Name != null && name.Name.StartsWith(ID_DataTypeName, StringComparison.Ordinal) ? ID_DataTypeName : restriction.BaseTypeName.Name; sortedList = DataTypeHelper.RetrieveFacets(restriction, out minL, out maxL); } //Console.WriteLine("Element name = " + element.Name + " SimpleType name = " + dataTypeName); } else { XmlSchemaDatatype dType = (XmlSchemaDatatype)element.ElementType; dataTypeName = dType.ValueType.ToString(); //Console.WriteLine("Element name = " + element.Name + " DataType name = " + dType.ValueType); } switch (dataTypeName.ToUpper()) { case R_DataTypeName: dataType = new X12_RDataType(R_DataTypeName, minL, maxL); break; case "STRING": case "SYSTEM.STRING": case EFACT_A_DataTypeName: case EFACT_AN_DataTypeName: case AN_DataTypeName: dataType = new X12_AnDataType(AN_DataTypeName, minL, maxL); break; case ID_DataTypeName: dataType = new X12_IdDataType(ID_DataTypeName, sortedList); break; case Date_DataTypeName: dataType = new X12_DtDataType(Date_DataTypeName, minL, maxL); break; case Time_DataTypeName: dataType = new X12_TmDataType(Time_DataTypeName, minL, maxL); break; case EFACT_N_DataTypeName: case N_DataTypeName: dataType = X12_NDataType.GetDataTypeWithPrecision(0, minL, maxL); break; default: if (dataTypeName.Length == 6 && dataTypeName.StartsWith("X12_N", StringComparison.Ordinal) && dataTypeName[5] >= '0' && dataTypeName[5] <= '9') { dataType = X12_NDataType.GetDataTypeWithPrecision(dataTypeName[5] - '0', minL, maxL); } else { //throw new Exception(string.Format("{0} data type is not supported", dataTypeName)); dataType = new X12_AnDataType(AN_DataTypeName, -1, -1); } break; } return(dataType); }