Hi Julien,

this appears to be a bug in mapguide. I ran into the same problem and discussed it with the core developers and they agree that the resulting feature reader does not contain the ids of the inserted features.

I do not know of a work around at this time. Actually, I just thought of one. Add an attribute to your sdf file called 'uniqueid'. Create a unique value (uuid perhaps) and use it as the value of that attribute when you insert the new feature. Then, after you insert it, you can select it using a filter than selects only that record. Then you can get the id.

Cheers

Paul

On 3-Oct-07, at 8:09 AM, julienltr wrote:


Hi,

I have a SDF file with three attributes :
- Id Int32 Autogenerated
- Name String
- Data Geometry

When a I want to add new value I insert a string for "Name" and a geometry
for "Data".
Id is an integer auto-generated.
My question is how to know which Id was generated?

In the documentation, I find this in MgFeatureService::UpdateFeatures:
"Returns an MgPropertyCollection object. Each property in the collection corresponds to a command in the MgFeatureCommandCollection argument. The property name is the index of the command in the feature command collection.
If the command is of type MgInsertFeatures, the property type is an
MgPropertyType::Feature, and its value is a MgFeatureReader object. The
feature reader object contains the set of properties inserted into the
datastore by the insert command."

My problem is that I can't read into this feature reader?
I get an MgNullReferenceException whereas the feature reader isn't null!
But I don't think I can find the id inside this reader...

Here's my code in C# (not to hard to understand ;))

// new values (name & data)
MgPropertyCollection propertyValues = new MgPropertyCollection();
propertyValues.Add(new MgStringProperty("Name", DateTime.Now.ToString()));
propertyValues.Add(new MgGeometryProperty("Data", byteReader));

// insert new values
MgFeatureCommandCollection commands = new MgFeatureCommandCollection ();
commands.Add(new MgInsertFeatures(ClassName, propertyValues));
MgPropertyCollection propertyCollection =
featureService.UpdateFeatures(featureSourceId, commands, false);

// read the result
for (i = 0; i < propertyCollection.Count; i++)
{
        // if MgInsertFeatures, PropertyType == MgPropertyType.Feature
if (propertyCollection.GetItem(i).PropertyType == MgPropertyType.Feature)
        {
                MgFeatureProperty featureProperty =
(MgFeatureProperty)propertyCollection.GetItem(i);
                MgFeatureReader featureReader = featureProperty.GetValue();
        for (int j = 0; j < featureReader.GetPropertyCount(); j++)
                // GetPropertyCount() throw an MgNullReferenceException
        {
string propertyName = featureReader.GetPropertyName (j); object propertyValue = Tools.GetProperty(featureReader, propertyName);
// own function to do GetString or GetInt32, etc.
                }
        }
}
--
View this message in context: http://www.nabble.com/How-to-get-an- auto-generated-Id-after-InsertFeature---tf4561407s16610.html#a13017599
Sent from the MapGuide Users mailing list archive at Nabble.com.

_______________________________________________
mapguide-users mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/mapguide-users

+-----------------------------------------------------------------+
|Paul Spencer                          [EMAIL PROTECTED]    |
+-----------------------------------------------------------------+
|Chief Technology Officer                                         |
|DM Solutions Group Inc                http://www.dmsolutions.ca/ |
+-----------------------------------------------------------------+





_______________________________________________
mapguide-users mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/mapguide-users

Reply via email to