/// <summary> /// </summary> /// <param name="writer"></param> /// <param name="objectClass"></param> /// <param name="table"></param> /// <param name="row"></param> private static void ExportRow(XmlWriter writer, ObjectClass objectClass, IDisplayTable table, IRow row) { writer.WriteStartElement("ObjectClassRow"); if (row.HasOID) writer.WriteAttributeString(row.Table.OIDFieldName, Convert.ToString(row.OID)); foreach (FieldNameAndAlias alias in GetObjectClassFields(objectClass, table)) { int index = row.Fields.FindField(alias.name); if (index == -1) continue; writer.WriteStartElement("ObjectClassField"); writer.WriteAttributeString("name", alias.alias); object obj2 = row.get_Value(index); if ((obj2 != null) && (obj2 != DBNull.Value)) { string str = Convert.ToString(obj2).Trim(); if (row.Fields.get_Field(index).Type == esriFieldType.esriFieldTypeDate) str = Convert.ToDateTime(str).ToString("MM/dd/yyyy"); writer.WriteString(str); } else { writer.WriteString(""); } writer.WriteEndElement(); } writer.WriteEndElement(); }
/// <summary> /// Export the object class /// </summary> /// <param name="writer"></param> /// <param name="objectClass"></param> /// <param name="cursor"></param> /// <param name="table"></param> private static void ExportObjectClass(XmlWriter writer, ObjectClass objectClass, ICursor cursor, IDisplayTable table) { StartExportObjectClass(writer, objectClass, table); for (IRow row = cursor.NextRow(); row != null; row = cursor.NextRow()) ExportRow(writer, objectClass, table, row); EndExportObjectClass(writer); }
/// <summary> /// </summary> /// <param name="objectClass"></param> /// <param name="table"></param> /// <returns></returns> private static string GetDisplayTableName(ObjectClass objectClass, IDisplayTable table) { if (table is IFeatureLayer) return ((IFeatureLayer) table).Name; if (table is IStandaloneTable) return ((IStandaloneTable) table).Name; string name = objectClass.name; return name; }
/// <summary> /// return the FieldName and Alias data as an array of data objects /// </summary> /// <param name="objectClass"></param> /// <param name="displayTable"></param> /// <returns></returns> private static FieldNameAndAlias[] GetObjectClassFields(ObjectClass objectClass, IDisplayTable displayTable) { // if the fields to return are identified in the config xml file if (objectClass.Fields != null) { var aliasArray = new FieldNameAndAlias[objectClass.Fields.Length]; for (int j = 0; j < objectClass.Fields.Length; j++) { var alias = new FieldNameAndAlias { alias = (objectClass.Fields[j].alias.Length == 0 ? GetFieldAliasFromDisplayTable(displayTable, objectClass.Fields[j]) : objectClass.Fields[j].alias), name = objectClass.Fields[j].name }; // * If alias defined in xml config, use it, otherwise use the display alias..? aliasArray[j] = alias; } return aliasArray; } // otherwise return all of the fields in the table as named int fieldCount = displayTable.DisplayTable.Fields.FieldCount; var aliasArray2 = new FieldNameAndAlias[fieldCount]; for (int i = 0; i < fieldCount; i++) { var alias2 = new FieldNameAndAlias(); IField field = displayTable.DisplayTable.Fields.get_Field(i); alias2.alias = GetFieldAliasFromDisplayTable(displayTable, field.Name, field.AliasName); alias2.name = displayTable.DisplayTable.Fields.get_Field(i).Name; aliasArray2[i] = alias2; } return aliasArray2; }
/// <summary> /// </summary> /// <param name="writer"></param> /// <param name="objectClass"></param> /// <param name="table"></param> private static void StartExportObjectClass(XmlWriter writer, ObjectClass objectClass, IDisplayTable table) { try { writer.WriteStartElement("ObjectClass"); writer.WriteAttributeString("name", GetDisplayTableName(objectClass, table)); writer.WriteStartElement("ObjectClassFieldDefinition"); FieldNameAndAlias[] objectClassFields = GetObjectClassFields(objectClass, table); if (objectClassFields != null) { foreach (FieldNameAndAlias alias in objectClassFields) { writer.WriteElementString("FieldDefinition", alias.alias); } } writer.WriteEndElement(); writer.WriteStartElement("ObjectClassRows"); } catch (Exception ex) { HandleError(ex); } }
/// <summary> /// </summary> /// <param name="writer"></param> /// <param name="objectClass"></param> /// <param name="relClasses"></param> /// <param name="parentCursor"></param> private void ExportRelatedObjects(XmlWriter writer, ObjectClass objectClass, IEnumRelationshipClass relClasses, ICursor parentCursor) { IRelationshipClass class2 = relClasses.Next(); IDataset originClass = null; while (class2 != null) { originClass = (IDataset) class2.OriginClass; if (originClass.Name == objectClass.name) break; originClass = (IDataset) class2.DestinationClass; if (originClass.Name == objectClass.name) break; class2 = relClasses.Next(); } if (class2 == null) return; IDisplayTable displayTableFromDatasetName = GetDisplayTableFromDatasetName(originClass.Name); StartExportObjectClass(writer, objectClass, displayTableFromDatasetName); for (IRow row = parentCursor.NextRow(); row != null; row = parentCursor.NextRow()) { ISet objectsRelatedToObject = class2.GetObjectsRelatedToObject(row as IObject); for (var row2 = objectsRelatedToObject.Next() as IRow; row2 != null; row2 = objectsRelatedToObject.Next() as IRow) { ExportRow(writer, objectClass, displayTableFromDatasetName, row2); } } EndExportObjectClass(writer); }