ThinkGeo.com    |     Documentation    |     Premium Support

Features are lost when exiting track edit mode

I have an issue that I beleive has to do with the TrackShapeFinished event. Basically I have an overlay and layer that contains some features. You can click on an existing feature to edit it or you can create new features using buttons very similar to the draw & edit shapes sample page. I have created an example of the problem I am seeing using the draw and edit shapes page. It is attached as draweditshapes.aspx.zip.


This does not include all of what I am doing, but you will see some strange results and I thought you shoudl see this. Create a few new shapes and save them. Then click on a shape to edit it. Click the shape again to actually move and resize. While the shape is in edit/track mode (moveable, rotatable), save again. Then create more shapes and try saving again. The edited shapes will not save to green and a few seconds after saving, all the featires dissapear. 


This is not exactly what I am seeing, but I wanted to point out this issue. I am also using the trackshapefinished event to check for existing features in the editoverlay, then remove these (and warn the user, which is not included) and allow editing of just the one fetaure at a time. This is demonstrated in draweditshapes(2).zip. For this example, please create a new shape and save it. Then create another new shape and save again. You will have 2 green shapes. Then click one to edit it. It will move the featire from the cboverlay to the editoverlay as intended. Click the chape again to edit/move the shape. Then click save again. On the first click, the btnupdate postback code is not executed. The TrackShapeFinished is executed, but if you look at the cblayer at the beginning of this sub there are no features in it. Then a few seconds after this, they go away on the map. Please let me know how to get through this ASAP. I have wasted a lot of time already trying to figure it out.


Thanks



1891-DrawEditShapes.aspx.zip (3.49 KB)
1892-DrawEditShapes.aspx_(2).zip (3.56 KB)

This topic has been unanswered for almost 3 days now. What is up? Please help!



Sorry for the delay. A developer from the web team has been assigned to your case and will work on that right after lunch. You should have a concrete answer on your problem at the latest tomorrow morning.

David, 
  
 We had someone work on that, but he failed. I’m working on that now, and give you result as soon as possible. 
  
 thanks, 
  
 Johnny

Hi, David


Sorry for delay response. The problem is caused by the transaction of FeatureSource; please refer to code in the attachment.


Thanks,


Khalil



1899-DrawEditShapes.zip (3.53 KB)

You overlooked the fact that you removed the Map1.TrackShapeFinished event entirely from your updated code. As mentioned in my original post, this appears to be the problem. I was told to use this event to allow editing of only one feature at a time. This allows the user to provide a name, desc. etc in an edit panel for each feature when clicked or created. When a user clicks a shape, they can rename or modify the shape itself. This does not work if you can have more than 1 feature in edit mode at a time. Without this TrackShapeFinished event, I lose this functionality. You simply deleted the event. If you put the event back in, the error still occurs. 


Basically, I want the TrackShapeFinished event to fire when you create a new shape/feature. I do not need this to fire when you hit the submit button (or any other button) when the edit overlay shape is in track edit mode (repositioning). This appears to be the issue, that the TrackShapeFinsihed event fires when you click any postback button when in the track edit mode. I need to get this working ASAP or move onto another solution. I have spent almost my full 60 days working on trying to get Map Suite Web to do what we need and I beginning to think it is not the right solution for us. 



Ok, we are working right now on the solution according to your requirements.  
 Is there anything else you could not get Map Suite Web to work correctly for your needs?

I think that is the only deal breaker issue at this time. We are getting close.



Hi, David 
  
 Sorry for that. Yes, the issue exists. We have added this issue to work list and we will fix it as soon as possible.  
 The TrackShapeFinished event will be fired when you hit the submit button or other asp buttons while the EditOverlay is still in edit mode, but the postback event for submit button will not fire. The problem maybe is caused by that the map control is placed in the update panel. Please don’t put the map control into update panel and it works well but it stays in synchronous mode. Also, you could trigger submit postback event or others while not in the edit mode. 
  
 Thanks, 
 Khalil   


David, 



Is it a temporary solution you can live with for now or do you need the bug fix now before you proceed any further? Let us know how things are going for you. Thank you.



No I'm sorry that will not work for our needs. Please let me know if this is fixed. Thanks anyhow



David, 
  
 Sorry for that. If we have fixed this bug, we should let you know first. 
  
 Thanks, 
 Khalil 
  
  


So aside from the postback occurring without firing the button_clicked event on the first click, why do the features in the cblayer all go away? I understand that the fact that the user has to click the button twice is a bug, but all of the features just dissapearing is the major issue. Why is this happening? We may be able to work around the other bug temporarily if we can figure that part out.



Hi, David



First off, this doesn't appear to be related to MapSuite Web Edtion at all, you'd probably find more help at the ASP.NET forums.

Second, this bug is caused by that submit button doesn't work with an UpdatePanel well, you can't do what you want with an UpdatePanel. Here is a workaround for you temporarily, please refer to the code in the attachment.



Thanks,

Khalil



1912-DrawEditShapes.zip (3.59 KB)

I don't understand the ASP.NET issue that is causing all of the features in the cblayer to disappear. I don't see anything occurring in the server side code causing this or in the expeosed javascript. If you could please explain why the features just go away, I could look into this. Please help me understand the issue here so I can take this further as suggested  if needed.


In my project, no tiggers are used in the update panel. Please help. Thank you



Hi, David


Ok, I'll explain for you about this problem. For example, Suppose you have 2 green shapes, and then click one to edit it; it will move  the feature from the cboverlay to the editoverlay as intended. Click the shape again to edit or move this shape, and then you click save again, this bug occurs. So please set a breakpoint at the first statement of Page_Load function before you click the save button, you could see that "Page.IsPostBack" property is false and the map will be initialized again, which means the InMemoryFeatureLayer will be constructed and added to LayerOverlay again.  Because the "IsPostBack" property is false, so any postback event won't be raised. And then the Page_Load function will be exectued once again which is fired by "TrackShapeFinishedEvent" and "IsPostBack" is true, so this event will be fired and the submit event for save button will not be fired.


The workaround for you temporarily I  have posted in the last reply; Don't use the default submit behavior, but the ImageButton uses the default submit behavior by default and user can't change that, so you could use the asp submit button and set the "UseSubmitBehavior" property false to avoid it.


Hope it help you.


Thanks,


Khalil






I understand the event firing sequence. The code posted does handle the clicking of the submit button, however I think you are not seeing the entire problem. If you click anywhere on the map while a shape in the edit layer is in track mode, the load event is also fired and the cblayer object is destroyed. 


Put a breakpoint on the page load event and click on the map instead of the submit button. The page load is fired with postback false and the cblayer is nothing, prior to the page load event. This is the problem. Why is the cblayer destroyed here? 


This is not just related to the submit button or update panel, but appears to be within the map itself. This seems to be a major bug.


PLEASE HELP. I really need this to work. Thank you



David, the page load event is fired twice when you click the map. The click event on map has the same behavior as the submit button. The first one is not post back event, but it will call the constructor of map, and it will be initialized again using the code within “Not Page.IsPostBack”,  and it  won’t enter the LoadViewState section but it will get into the SavaViewState section and store its state. The second one is post back event, and it will first off enter the LoadViewState section, that’s mean it will load the state which is stored on the last request(post back or not post back), but the latest state whose CustomOverlay contains nothing and the features stored in cblayer has been cleared in the Page_Load event of the first none post back event. 
 The problem is maybe caused by confliction of post back event.  
 I have added this issue to our target work list, and we will address it if we have enough time. 
  
 Thanks, 
 Khalil

So let's be clear on what the bug is exactly and I do hope that you get it fixed. As far as I can tell, the TrackShapeFinished event is completely unusable if you plan on using track/edit mode to edit or move the shape. If you add a handler for this event, the page is reloaded (postback=false) before the event is fired when exiting track mode. The cause of this is unknown at this point.


If you remove the handler for the TrackShapeFinished event, this page reload does not occur. I have done this and verified, but please try removing the TrackShapeFinished handler in the sample and rerunning the scenario to confirm.    


An easy way to work around this would be to use a session variable to bypass the page initialization code on this call to the page_load  when exiting track mode. This is what I did in the attached sample. However, when the page is not reloaded and the objects are not all recreated, we get a javascript error instead of losing all of our layers. I see now that the layer and the map itself are destroyed before the page reload so I don't think there is any way to make this work using session variables. 


I have put together a way to work around all of this in case anyone is interested in a solution that only allows editing of one feature at a time. I will post this later this evening.


I have to say I am really disappointed with the support process on this one. We began with a 72 hour period with no response. Then we got a few 'solutions' that pretty much ignored the issue. Then I was told this is an ASP.NET issue and has nothing to do with the map control. Then finally the end result is 'yes, there is a bug and we might fix it if we get around to it'. This is not the type of company we want to be relying on for our solutions in a production environment. If we do not purchase it would be due to the lack of support. Otherwise we love the product.   


 



1953-DrawEditShapes.aspx.designer.zip (3.74 KB)

David, 
  
 Sorry for the delay, we are working on a big release of all our products, very sorry for the inconvenient. I think Khalil has given the reason why the issue happens when the DoPostback and Submit are raised at the same time. From your description, i guess you also have the idea yet. 
  
 I have a quick view of the sample you attached and very glad to see that you have a workaround yet.  We will try whether there are some other workaround for you and let you know later. 
  
 Thanks, 
  
 Johnny.