[mapguide-users] Modify layout with anonymous user

Kenneth Skovhede, GEOGRAF A/S ks at geograf.dk
Mon Jul 6 09:40:53 EDT 2009


Something like this would do it with MaestroAPI (untested):

            MaestroAPI.ServerConnectionI con; //Needs initialization

            //Read the current resources
            MaestroAPI.WebLayout layout = con.GetWebLayout("???.WebLayout");
            MaestroAPI.MapDefinition map = 
con.GetMapDefinition(layout.Map.ResourceId);

            //Create the temp layer
            MaestroAPI.MapLayerType layer = new 
OSGeo.MapGuide.MaestroAPI.MapLayerType();
            layer.ResourceId = "???.LayerDefinition";
            layer.Name = "Temporary layer";

            //Add it to the map
            map.Layers.Add(layer);

            //Generate a session based temporary id (will become 
Session:<sessionid>//Random Map Identifier.MapDefinition)
            string tempMapId = new MaestroAPI.ResourceIdentifier("Random 
Map Identifier", MaestroAPI.ResourceTypes.MapDefinition, con.SessionID);
           
            //Save the modified map in the session repo
            con.SaveResourceAs(map, tempMapId);

            //Modify the layout to point at the temp map
            layout.Map.ResourceId = tempMapId;

            //Generate a session based temporary id, and save the 
modified layout (will become Session:<sessionid>//Random WebLayot 
Identifier.WebLayout)
            string tempLayoutId = new 
MaestroAPI.ResourceIdentifier("Random WebLayout Identifier", 
MaestroAPI.ResourceTypes.WebLayout, con.SessionID);
            con.SaveResourceAs(layout, tempLayoutId);

            //Open the viewer with the modified weblayout, that uses the 
modified map
            Response.Redirect("/mapguide/mapviewerajax/?session=" + 
Server.UrlEncode(con.SessionID) + "&layout=" + 
Server.UrlEncode(tempLayoutId));

You can rewrite the property access with the corresponding xml changes,
and the GetResource/SaveResource with the corresponding function calls 
to the
MapGuide API, if you don't want to use Maestro.

Instead of the "Random ... Identifier" strings, you should use 
Guid.NewGuid().ToString().

Regards, Kenneth Skovhede, GEOGRAF A/S



euskalmap skrev:
> Hi,
> thanks for your information but how do you make toYou have to create a
> temporary WebLayout AND a temporary MapDefinition and then make the
> temporary WebLayout point to the temporary MapDefinition.
> Have you an example of code?
> Thnaks
>
> Kenneth Skovhede, GEOGRAF A/S wrote:
>   
>> If you save to "Library://" the data will be modified permanently.
>> Normally the "Anonymous" user is not allowed to save to "Library://".
>>
>> If you save to "Session:<sessionid>//" the changes will only be visible to
>> the current user. You must take care not to mix sessionid's.
>>
>> I think you are trying to use the WebLayout from Library, that will not 
>> work.
>> You have to create a temporary WebLayout AND a temporary MapDefinition.
>>
>> Then make the temporary WebLayout point to the temporary MapDefinition.
>> (I think your code does this)
>> Then save both WebLayout and MapDefinition in "Session:<sessionid>//".
>> When you redirect, you should point to the temporary WebLayout.
>> As you pass in the sessionId, the viewer should be able to read it 
>> correctly.
>>
>> Regards, Kenneth Skovhede, GEOGRAF A/S
>>
>>
>>
>>
>> euskalmap skrev:
>>     
>>> Hi,
>>> I refresh my post! If you have an idea !!!
>>>
>>> Sorry, I wanted to say that my c# code change the mapdefinitin in the
>>> layout
>>> for the current session;
>>> if i use administrator user, it seems to me that my repositories is
>>> modified
>>> in maestro, no and i will not ?
>>> For (Sample 1) my code is  http://patxi.mayol.free.fr/ag_default3.aspx
>>> here 
>>> For (Sample 2) my xml file is  http://patxi.mayol.free.fr/test_after.xml
>>> here 
>>> Thanks 
>>>
>>> Kenneth Skovhede, GEOGRAF A/S wrote:
>>>   
>>>       
>>>> You mention "layout resource", but the message states a MapDefinition is 
>>>> saved?
>>>> Anonymous can only save to the same session, only Administrator can save 
>>>> across
>>>> sessions.
>>>>
>>>> As for the parse error, your document is likely invalid.
>>>>
>>>> For (Sample 1), can you post the related code?
>>>> For (Sample 2), can you post a binary copy of the document you are 
>>>> trying to save?
>>>>
>>>> Regards, Kenneth Skovhede, GEOGRAF A/S
>>>>
>>>>
>>>>
>>>> euskalmap skrev:
>>>>     
>>>>         
>>>>> Hi,
>>>>> I modify, by c# script, the name of the layout resource; i use the
>>>>> MgUserInformation function with Anonymous user without password. 
>>>>> sample1 : In mapguide administrator this user have no role => so when i
>>>>> load
>>>>> the page i have this message : 
>>>>> Permission denied to resource:
>>>>> Session:98d50e40-ffff-ffff-8000-0016d44491c1_en_7F0000010AFC0AFB0AFA//Map_40312.MapDefinition 
>>>>> sample 2 : if i add the role Adminstrator and Map Author of the
>>>>> Anonymous
>>>>> user, i have this message :
>>>>> An exception occurred in DB XML component. Error: XML Indexer: Fatal
>>>>> Parse
>>>>> error in document at line, 1, char 1. Parser message: Invalid document
>>>>> structure 
>>>>>
>>>>> I understand anything ! Have you an idea ?
>>>>>
>>>>> Thanks
>>>>>   
>>>>>       
>>>>>           
>>>> _______________________________________________
>>>> mapguide-users mailing list
>>>> mapguide-users at lists.osgeo.org
>>>> http://lists.osgeo.org/mailman/listinfo/mapguide-users
>>>>
>>>>
>>>>     
>>>>         
>>>   
>>>       
>> _______________________________________________
>> mapguide-users mailing list
>> mapguide-users at lists.osgeo.org
>> http://lists.osgeo.org/mailman/listinfo/mapguide-users
>>
>>
>>     
>
>   
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.osgeo.org/pipermail/mapguide-users/attachments/20090706/e6c56e75/attachment.html


More information about the mapguide-users mailing list