[mapguide-users] Dynamically Modify SDF Source at runtime problem

Jackie Ng jackie.ng at aecsystems.com.au
Thu Mar 6 20:29:57 EST 2008


Session based resource ids are of the form

Session:yourlongsessionid//TheNameOfYourResource.ResourceType

If you want to be able to swap features sources of a layer on the fly, you
are better off not having that layer definition in the site repository. 

Instead you would create the layer at runtime and store the definition
inside the session repository (using a session resource id, instead of the
normal Library://.../... type resource id), then add this layer into your
map. 

Then when you would later swap the feature source of that layer for another
one, you are only modifiying the temporary layer in your session repository.

- Jackie


Bob Cassarly wrote:
> 
> I am a MapGuide 6.5 Dynamic Authoring Toolkit developer trying to rewrite
> some of my DAT code.  
> 
> What I want to do is modify the source SDF of a layer from
> FLOOR-01_Space.SDF to FLOOR-02_Space.SDF for the current session only (I
> do not want to update the MapGuide repository).  I know I am probably
> missing something very simple but all I have not been able to find a way
> to do this.  The code included below does change the SDF source file BUT
> it updates the MapGuide repository and this is something I definitely do
> not want to do.
> 
> Any help you could give me would be GREATLY appreciated!
> 
> <?php
>  require_once('../mapviewerphp/common.php');
>  require_once('../mapviewerphp/constants.php');
> 
>  $mgSessionId = ($_SERVER['REQUEST_METHOD'] == "POST")?$_POST['SESSION']:
> $_GET['SESSION'];
>  $mgMapName = ($_SERVER['REQUEST_METHOD'] == "POST")?$_POST['MAPNAME']:
> $_GET['MAPNAME'];
> 
>  try
>  {
>   // Initialize the Web Extensions and connect to the Server using
>   // the Web Extensions session identifier stored in PHP
>   // session state.
> 
>   MgInitializeWebTier ($webconfigFilePath);
>   $userInfo = new MgUserInformation($mgSessionId);
>   $siteConnection = new MgSiteConnection();
>   $siteConnection->Open($userInfo);
>   $resourceService =
> $siteConnection->CreateService(MgServiceType::ResourceService);
>   $map = new MgMap();
>   $map->Open($resourceService, $mgMapName);
> 
>   $layers = $map->GetLayers();
>   $layer = $layers->GetItem('Space');
>   $schemaClass = explode(':', $layer->GetFeatureClassName());
> 
>   $fileName = 'FLOOR-02_Space';
>   $pathAlias = 'SDF_PATH';
> 
>   //set the file name of the SDF file for the layer feature source
>   $resId = new MgResourceIdentifier($layer->GetFeatureSourceId());  
>   $byteReader = $resourceService->GetResourceContent($resId);
>   $doc = DOMDocument::loadXML($byteReader->ToString());
>   $node = $doc->getElementsByTagName('Value')->item(0);
>   $node->nodeValue = '%MG_DATA_PATH_ALIAS[' . $pathAlias . ']%/' .
> $fileName . '.sdf';
>   $sdfDataDefinition = $doc->saveXML();
>   $byteSource = new MgByteSource($sdfDataDefinition,
> strlen($sdfDataDefinition)); 
>   $byteSource->SetMimeType(MgMimeType::Xml);
>   $resourceService->SetResource($resId, $byteSource->GetReader(), null); 
> 
> 
>   //set the feature name of the layer (usually the same as the SDF file
> minus the file extension)
>   $layerDefResId = $layer->GetLayerDefinition();
>   $byteReader = $resourceService->GetResourceContent($layerDefResId);
>   $doc = DOMDocument::loadXML($byteReader->ToString());
>   $node = $doc->getElementsByTagName('FeatureName')->item(0);
>   $node->nodeValue = $schemaClass[0] . ':' . $fileName;
>   $sdfLayerDefinition = $doc->saveXML();
>   $byteSource = new MgByteSource($sdfLayerDefinition,
> strlen($sdfLayerDefinition)); 
>   $byteSource->SetMimeType(MgMimeType::Xml);
>   $resourceService->SetResource($layerDefResId, $byteSource->GetReader(),
> null); 
> 
> 
>   //save the map
>   //$map->Save($resourceService);
> 
>   echo '<br/>Class0:' . $schemaClass[0] . 'X<br/>Class1:' .
> $schemaClass[1] . '<br/>FSId:' . $layer->GetFeatureSourceId() .
> '<br/>FCName:' . $layer->GetFeatureClassName(); 
>  }
>  catch (MgLayerNotFoundException $e)
>      {
>   echo '<p>Layer not found</p>';
>  }
>    catch (MgObjectNotFoundException $e)
>  {
>   echo '<p>Layer not found</p>';
>  }
>   catch (MgException $e)
>      {
>   echo 'error';
>   echo $e->GetMessage();
>   echo $e->GetDetails();
>      }
> ?>
> 
> 
> 

-- 
View this message in context: http://www.nabble.com/Dynamically-Modify-SDF-Source-at-runtime-problem-tp15885393s16610p15885826.html
Sent from the MapGuide Users mailing list archive at Nabble.com.



More information about the mapguide-users mailing list