[mapguide-commits] r6197 - in trunk/MgDev: Common/MdfModel Common/MdfParser Common/Schema Server/src/Services/Mapping Server/src/Services/Rendering

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Thu Nov 3 01:45:10 EDT 2011


Author: liuar
Date: 2011-11-02 22:45:10 -0700 (Wed, 02 Nov 2011)
New Revision: 6197

Modified:
   trunk/MgDev/Common/MdfModel/ProfileRenderLabelsResult.cpp
   trunk/MgDev/Common/MdfModel/ProfileRenderLabelsResult.h
   trunk/MgDev/Common/MdfModel/ProfileRenderLayerResult.cpp
   trunk/MgDev/Common/MdfModel/ProfileRenderLayerResult.h
   trunk/MgDev/Common/MdfModel/ProfileRenderMapResult.cpp
   trunk/MgDev/Common/MdfModel/ProfileRenderMapResult.h
   trunk/MgDev/Common/MdfModel/ProfileRenderWatermarkResult.cpp
   trunk/MgDev/Common/MdfModel/ProfileRenderWatermarkResult.h
   trunk/MgDev/Common/MdfParser/IOProfileRenderLabelsResult.cpp
   trunk/MgDev/Common/MdfParser/IOProfileRenderLayerResult.cpp
   trunk/MgDev/Common/MdfParser/IOProfileRenderMapResult.cpp
   trunk/MgDev/Common/MdfParser/IOProfileRenderWatermarkResult.cpp
   trunk/MgDev/Common/Schema/ProfileResult-2.4.0.xsd
   trunk/MgDev/Server/src/Services/Mapping/MappingUtil.cpp
   trunk/MgDev/Server/src/Services/Rendering/ServerRenderingService.cpp
Log:
RFC 110 Supplemental -

Error handling in Profiling API. 

Modified: trunk/MgDev/Common/MdfModel/ProfileRenderLabelsResult.cpp
===================================================================
--- trunk/MgDev/Common/MdfModel/ProfileRenderLabelsResult.cpp	2011-11-01 07:05:25 UTC (rev 6196)
+++ trunk/MgDev/Common/MdfModel/ProfileRenderLabelsResult.cpp	2011-11-03 05:45:10 UTC (rev 6197)
@@ -61,6 +61,26 @@
 }
 
 //-------------------------------------------------------------------------
+// PURPOSE: Accessor method for the Error property.
+// RETURNS: The error message which describes labels rendering failure.
+//-------------------------------------------------------------------------
+const MdfString& ProfileRenderLabelsResult::GetError() const
+{
+    return this->m_strError;
+}
+
+//-------------------------------------------------------------------------
+// PURPOSE: Accessor method to the Error property.
+// PARAMETERS:
+//      Input:
+//          pstrError - The error message which describes labels rendering failure.
+//-------------------------------------------------------------------------
+void ProfileRenderLabelsResult::SetError(const MdfString& pstrError)
+{
+    this->m_strError = pstrError;
+}
+
+//-------------------------------------------------------------------------
 // PURPOSE: For memory leak testing.
 //-------------------------------------------------------------------------
 #ifdef _WIN32

Modified: trunk/MgDev/Common/MdfModel/ProfileRenderLabelsResult.h
===================================================================
--- trunk/MgDev/Common/MdfModel/ProfileRenderLabelsResult.h	2011-11-01 07:05:25 UTC (rev 6196)
+++ trunk/MgDev/Common/MdfModel/ProfileRenderLabelsResult.h	2011-11-03 05:45:10 UTC (rev 6197)
@@ -42,6 +42,11 @@
         const double GetRenderTime() const;
         void SetRenderTime(const double& dRenderTime);
 
+        // Property: Error
+        // Error message if rendering labels failed.
+        const MdfString& GetError() const;
+        void SetError(const MdfString& pstrError);
+
 //#ifdef _WIN32
 #if _DEBUG
         // for memory leak testing
@@ -57,6 +62,7 @@
         // Data members
         // See corresponding properties for descriptions
         double m_dRenderTime;
+        MdfString m_strError;
     };
 
 END_NAMESPACE_MDFMODEL

Modified: trunk/MgDev/Common/MdfModel/ProfileRenderLayerResult.cpp
===================================================================
--- trunk/MgDev/Common/MdfModel/ProfileRenderLayerResult.cpp	2011-11-01 07:05:25 UTC (rev 6196)
+++ trunk/MgDev/Common/MdfModel/ProfileRenderLayerResult.cpp	2011-11-03 05:45:10 UTC (rev 6197)
@@ -228,6 +228,26 @@
 }
 
 //-------------------------------------------------------------------------
+// PURPOSE: Accessor method for the Error property.
+// RETURNS: The error message which describes layer rendering failure.
+//-------------------------------------------------------------------------
+const MdfString& ProfileRenderLayerResult::GetError() const
+{
+    return this->m_strError;
+}
+
+//-------------------------------------------------------------------------
+// PURPOSE: Accessor method to the Error property.
+// PARAMETERS:
+//      Input:
+//          pstrError - The error message which describes layer rendering failure.
+//-------------------------------------------------------------------------
+void ProfileRenderLayerResult::SetError(const MdfString& pstrError)
+{
+    this->m_strError = pstrError;
+}
+
+//-------------------------------------------------------------------------
 // PURPOSE: For memory leak testing.
 //-------------------------------------------------------------------------
 #ifdef _WIN32

Modified: trunk/MgDev/Common/MdfModel/ProfileRenderLayerResult.h
===================================================================
--- trunk/MgDev/Common/MdfModel/ProfileRenderLayerResult.h	2011-11-01 07:05:25 UTC (rev 6196)
+++ trunk/MgDev/Common/MdfModel/ProfileRenderLayerResult.h	2011-11-03 05:45:10 UTC (rev 6197)
@@ -81,6 +81,11 @@
         const double GetRenderTime() const;
         void SetRenderTime(const double& dRenderTime);
 
+        // Property: Error
+        // Error message if render layer failed.
+        const MdfString& GetError() const;
+        void SetError(const MdfString& pstrError);
+
 //#ifdef _WIN32
 #if _DEBUG
         // for memory leak testing
@@ -103,6 +108,7 @@
         ScaleRange* m_scaleRange;
         MdfString m_strFilter;
         double m_dRenderTime;
+        MdfString m_strError;
     };
 
     typedef MdfOwnerCollection<ProfileRenderLayerResult> ProfileRenderLayerResultCollection;

Modified: trunk/MgDev/Common/MdfModel/ProfileRenderMapResult.cpp
===================================================================
--- trunk/MgDev/Common/MdfModel/ProfileRenderMapResult.cpp	2011-11-01 07:05:25 UTC (rev 6196)
+++ trunk/MgDev/Common/MdfModel/ProfileRenderMapResult.cpp	2011-11-03 05:45:10 UTC (rev 6197)
@@ -416,6 +416,26 @@
 }
 
 //-------------------------------------------------------------------------
+// PURPOSE: Accessor method for the Error property.
+// RETURNS: The error message which describes map rendering failure.
+//-------------------------------------------------------------------------
+const MdfString& ProfileRenderMapResult::GetError() const
+{
+    return this->m_strError;
+}
+
+//-------------------------------------------------------------------------
+// PURPOSE: Accessor method to the Error property.
+// PARAMETERS:
+//      Input:
+//          pstrError - The error message which describes map rendering failure.
+//-------------------------------------------------------------------------
+void ProfileRenderMapResult::SetError(const MdfString& pstrError)
+{
+    this->m_strError = pstrError;
+}
+
+//-------------------------------------------------------------------------
 // PURPOSE: For memory leak testing.
 //-------------------------------------------------------------------------
 #ifdef _WIN32

Modified: trunk/MgDev/Common/MdfModel/ProfileRenderMapResult.h
===================================================================
--- trunk/MgDev/Common/MdfModel/ProfileRenderMapResult.h	2011-11-01 07:05:25 UTC (rev 6196)
+++ trunk/MgDev/Common/MdfModel/ProfileRenderMapResult.h	2011-11-03 05:45:10 UTC (rev 6197)
@@ -118,6 +118,11 @@
         const double GetCreateImageTime() const;
         void SetCreateImageTime(const double& dCreateImageTime);
 
+        // Property: Error
+        // Error message if rendering map failed.
+        const MdfString& GetError() const;
+        void SetError(const MdfString& pstrError);
+
 //#ifdef _WIN32
 #if _DEBUG
         // for memory leak testing
@@ -145,6 +150,7 @@
         ProfileRenderWatermarksResult* m_profileRenderWatermarksResult;
         ProfileRenderLabelsResult* m_profileRenderLabelsResult;
         double m_dCreateImageTime;
+        MdfString m_strError;
     };
 
 END_NAMESPACE_MDFMODEL

Modified: trunk/MgDev/Common/MdfModel/ProfileRenderWatermarkResult.cpp
===================================================================
--- trunk/MgDev/Common/MdfModel/ProfileRenderWatermarkResult.cpp	2011-11-01 07:05:25 UTC (rev 6196)
+++ trunk/MgDev/Common/MdfModel/ProfileRenderWatermarkResult.cpp	2011-11-03 05:45:10 UTC (rev 6197)
@@ -101,6 +101,26 @@
 }
 
 //-------------------------------------------------------------------------
+// PURPOSE: Accessor method for the Error property.
+// RETURNS: The error message which describes watermark rendering failure.
+//-------------------------------------------------------------------------
+const MdfString& ProfileRenderWatermarkResult::GetError() const
+{
+    return this->m_strError;
+}
+
+//-------------------------------------------------------------------------
+// PURPOSE: Accessor method to the Error property.
+// PARAMETERS:
+//      Input:
+//          pstrError - The error message which describes watermark rendering failure.
+//-------------------------------------------------------------------------
+void ProfileRenderWatermarkResult::SetError(const MdfString& pstrError)
+{
+    this->m_strError = pstrError;
+}
+
+//-------------------------------------------------------------------------
 // PURPOSE: For memory leak testing.
 //-------------------------------------------------------------------------
 #ifdef _WIN32

Modified: trunk/MgDev/Common/MdfModel/ProfileRenderWatermarkResult.h
===================================================================
--- trunk/MgDev/Common/MdfModel/ProfileRenderWatermarkResult.h	2011-11-01 07:05:25 UTC (rev 6196)
+++ trunk/MgDev/Common/MdfModel/ProfileRenderWatermarkResult.h	2011-11-03 05:45:10 UTC (rev 6197)
@@ -54,6 +54,11 @@
         const double GetRenderTime() const;
         void SetRenderTime(const double& dRenderTime);
 
+        // Property: Error
+        // Error message if rendering watermark failed.
+        const MdfString& GetError() const;
+        void SetError(const MdfString& pstrError);
+
 //#ifdef _WIN32
 #if _DEBUG
         // for memory leak testing
@@ -71,6 +76,7 @@
         MdfString m_strResourceId;
         MdfString m_strPositionType;
         double m_dRenderTime;
+        MdfString m_strError;
     };
 
     typedef MdfOwnerCollection<ProfileRenderWatermarkResult> ProfileRenderWatermarkResultCollection;

Modified: trunk/MgDev/Common/MdfParser/IOProfileRenderLabelsResult.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOProfileRenderLabelsResult.cpp	2011-11-01 07:05:25 UTC (rev 6196)
+++ trunk/MgDev/Common/MdfParser/IOProfileRenderLabelsResult.cpp	2011-11-03 05:45:10 UTC (rev 6197)
@@ -26,7 +26,8 @@
 CREATE_ELEMENT_MAP;
 ELEM_MAP_ENTRY(1, ProfileRenderLabelsResult);
 ELEM_MAP_ENTRY(2, RenderTime);
-ELEM_MAP_ENTRY(3, ExtendedData1);
+ELEM_MAP_ENTRY(3, Error);
+ELEM_MAP_ENTRY(4, ExtendedData1);
 
 
 IOProfileRenderLabelsResult::IOProfileRenderLabelsResult(Version& version) : SAX2ElementHandler(version)
@@ -74,6 +75,14 @@
     fd << DoubleToStr(profileRenderLabelsResult->GetRenderTime());
     fd << endStr(sRenderTime) << std::endl;
 
+    // Property: Error
+    if(!profileRenderLabelsResult->GetError().empty())
+    {
+        fd << tab.tab() << startStr(sError);
+        fd << EncodeString(profileRenderLabelsResult->GetError());
+        fd << endStr(sError) << std::endl;
+    }
+
     // Write any unknown XML / extended data
     IOUnknown::Write(fd, profileRenderLabelsResult->GetUnknownXml(), version, tab);
 

Modified: trunk/MgDev/Common/MdfParser/IOProfileRenderLayerResult.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOProfileRenderLayerResult.cpp	2011-11-01 07:05:25 UTC (rev 6196)
+++ trunk/MgDev/Common/MdfParser/IOProfileRenderLayerResult.cpp	2011-11-03 05:45:10 UTC (rev 6197)
@@ -34,7 +34,8 @@
 ELEM_MAP_ENTRY(7, ScaleRange);
 ELEM_MAP_ENTRY(8, Filter);
 ELEM_MAP_ENTRY(9, RenderTime);
-ELEM_MAP_ENTRY(10, ExtendedData1);
+ELEM_MAP_ENTRY(10, Error);
+ELEM_MAP_ENTRY(11, ExtendedData1);
 
 
 IOProfileRenderLayerResult::IOProfileRenderLayerResult(Version& version) : SAX2ElementHandler(version)
@@ -117,6 +118,14 @@
     fd << DoubleToStr(profileRenderLayerResult->GetRenderTime());
     fd << endStr(sRenderTime) << std::endl;
 
+    // Property: Error
+    if(!profileRenderLayerResult->GetError().empty())
+    {
+        fd << tab.tab() << startStr(sError);
+        fd << EncodeString(profileRenderLayerResult->GetError());
+        fd << endStr(sError) << std::endl;
+    }
+
     // Write any unknown XML / extended data
     IOUnknown::Write(fd, profileRenderLayerResult->GetUnknownXml(), version, tab);
 

Modified: trunk/MgDev/Common/MdfParser/IOProfileRenderMapResult.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOProfileRenderMapResult.cpp	2011-11-01 07:05:25 UTC (rev 6196)
+++ trunk/MgDev/Common/MdfParser/IOProfileRenderMapResult.cpp	2011-11-03 05:45:10 UTC (rev 6197)
@@ -44,7 +44,8 @@
 ELEM_MAP_ENTRY(13, ProfileRenderWatermarksResult);
 ELEM_MAP_ENTRY(14, ProfileRenderLabelsResult);
 ELEM_MAP_ENTRY(15, CreateImageTime);
-ELEM_MAP_ENTRY(16, ExtendedData1);
+ELEM_MAP_ENTRY(16, Error);
+ELEM_MAP_ENTRY(17, ExtendedData1);
 
 
 IOProfileRenderMapResult::IOProfileRenderMapResult(Version& version) : SAX2ElementHandler(version)
@@ -154,6 +155,14 @@
     fd << DoubleToStr(profileRenderMapResult->GetCreateImageTime());
     fd << endStr(sCreateImageTime) << std::endl;
 
+    // Property: Error
+    if(!profileRenderMapResult->GetError().empty())
+    {
+        fd << tab.tab() << startStr(sError);
+        fd << EncodeString(profileRenderMapResult->GetError());
+        fd << endStr(sError) << std::endl;
+    }
+
     // Write any unknown XML / extended data
     IOUnknown::Write(fd, profileRenderMapResult->GetUnknownXml(), version, tab);
 

Modified: trunk/MgDev/Common/MdfParser/IOProfileRenderWatermarkResult.cpp
===================================================================
--- trunk/MgDev/Common/MdfParser/IOProfileRenderWatermarkResult.cpp	2011-11-01 07:05:25 UTC (rev 6196)
+++ trunk/MgDev/Common/MdfParser/IOProfileRenderWatermarkResult.cpp	2011-11-03 05:45:10 UTC (rev 6197)
@@ -28,7 +28,8 @@
 ELEM_MAP_ENTRY(2, ResourceId);
 ELEM_MAP_ENTRY(3, PositionType);
 ELEM_MAP_ENTRY(4, RenderTime);
-ELEM_MAP_ENTRY(5, ExtendedData1);
+ELEM_MAP_ENTRY(5, Error);
+ELEM_MAP_ENTRY(6, ExtendedData1);
 
 
 IOProfileRenderWatermarkResult::IOProfileRenderWatermarkResult(Version& version) : SAX2ElementHandler(version)
@@ -86,6 +87,14 @@
     fd << DoubleToStr(profileRenderWatermarkResult->GetRenderTime());
     fd << endStr(sRenderTime) << std::endl;
 
+    // Property: Error
+    if(!profileRenderWatermarkResult->GetError().empty())
+    {
+        fd << tab.tab() << startStr(sError);
+        fd << EncodeString(profileRenderWatermarkResult->GetError());
+        fd << endStr(sError) << std::endl;
+    }
+
     // Write any unknown XML / extended data
     IOUnknown::Write(fd, profileRenderWatermarkResult->GetUnknownXml(), version, tab);
 

Modified: trunk/MgDev/Common/Schema/ProfileResult-2.4.0.xsd
===================================================================
--- trunk/MgDev/Common/Schema/ProfileResult-2.4.0.xsd	2011-11-01 07:05:25 UTC (rev 6196)
+++ trunk/MgDev/Common/Schema/ProfileResult-2.4.0.xsd	2011-11-03 05:45:10 UTC (rev 6197)
@@ -98,6 +98,11 @@
           <xs:documentation>The time of rendering stylized map to an image.</xs:documentation>
         </xs:annotation>
       </xs:element>
+      <xs:element name="Error" type="xs:string" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Error message if rendering map failed.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
       <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
     </xs:sequence>
   </xs:complexType>
@@ -165,6 +170,11 @@
           <xs:documentation>The time of stylizing labels in the map.</xs:documentation>
         </xs:annotation>
       </xs:element>
+      <xs:element name="Error" type="xs:string" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Error message if rendering labels failed.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
       <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
     </xs:sequence>
   </xs:complexType>
@@ -213,6 +223,11 @@
           <xs:documentation>The time of stylizing a paricular layer in the map.</xs:documentation>
         </xs:annotation>
       </xs:element>
+      <xs:element name="Error" type="xs:string" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Error message if rendering layer failed.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
       <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
     </xs:sequence>
   </xs:complexType>
@@ -236,6 +251,11 @@
           <xs:documentation>The time of stylizing a paricular watermark in the map.</xs:documentation>
         </xs:annotation>
       </xs:element>
+      <xs:element name="Error" type="xs:string" minOccurs="0">
+        <xs:annotation>
+          <xs:documentation>Error message if rendering watermark failed.</xs:documentation>
+        </xs:annotation>
+      </xs:element>
       <xs:element name="ExtendedData1" type="ExtendedDataType" minOccurs="0"/>
     </xs:sequence>
   </xs:complexType>

Modified: trunk/MgDev/Server/src/Services/Mapping/MappingUtil.cpp
===================================================================
--- trunk/MgDev/Server/src/Services/Mapping/MappingUtil.cpp	2011-11-01 07:05:25 UTC (rev 6196)
+++ trunk/MgDev/Server/src/Services/Mapping/MappingUtil.cpp	2011-11-03 05:45:10 UTC (rev 6197)
@@ -897,6 +897,25 @@
 #endif
             // TODO could throw here depending on a serverconfig setting (RFC64)
 //          throw exception;
+
+
+            if(NULL != pPRLsResult)
+            {
+                ProfileRenderLayerResultCollection* pPRLResultColl = pPRLsResult->GetProfileRenderLayerResults();
+                
+                // Get current ProfileRenderLayerResult
+                ProfileRenderLayerResult* pPRLResult = pPRLResultColl->GetAt(pPRLResultColl->GetCount()-1); //TODO: check index
+                
+                // Calculate the time spent on stylizing layer
+                double stylizeLayerTime = MgTimerUtil::GetTime() - pPRLResult->GetRenderTime();
+                pPRLResult->SetRenderTime(stylizeLayerTime);
+
+                Ptr<MgResourceIdentifier> layerid = mapLayer->GetLayerDefinition();
+                pPRLResult->SetResourceId(layerid->ToString());
+                pPRLResult->SetLayerName(mapLayer->GetName());
+
+                pPRLResult->SetError(message);
+            }
         } // if exception
     } // for all layers
 

Modified: trunk/MgDev/Server/src/Services/Rendering/ServerRenderingService.cpp
===================================================================
--- trunk/MgDev/Server/src/Services/Rendering/ServerRenderingService.cpp	2011-11-01 07:05:25 UTC (rev 6196)
+++ trunk/MgDev/Server/src/Services/Rendering/ServerRenderingService.cpp	2011-11-03 05:45:10 UTC (rev 6197)
@@ -404,8 +404,24 @@
     // call the internal helper API to do all the stylization overhead work
     ret = RenderMapInternal(map, selection, roLayers, dr.get(), width, height, width, height, scale, extent, false, options, true, pPRMResult);
 
-    MG_CATCH_AND_THROW(L"MgServerRenderingService.RenderDynamicOverlay")
+    MG_CATCH(L"MgServerRenderingService.RenderDynamicOverlay")
+    if (mgException.p)
+    {
+        if(NULL != pPRMResult)
+        {
+            MgServerManager* serverManager = MgServerManager::GetInstance();
+            STRING locale = (NULL == serverManager)? MgResources::DefaultMessageLocale : serverManager->GetDefaultMessageLocale();
 
+            Ptr<MgResourceIdentifier> mapResId = map->GetMapDefinition();
+            pPRMResult->SetResourceId(mapResId ? mapResId->ToString() : L"");
+
+            STRING message = mgException->GetExceptionMessage(locale);
+            pPRMResult->SetError(message);
+        }
+
+        MG_THROW()
+    }
+
     return ret.Detach();
 }
 
@@ -713,8 +729,23 @@
     // call the internal helper API to do all the stylization overhead work
     ret = RenderMapInternal(map, selection, NULL, dr.get(), width, height, width, height, format, scale, b, false, bKeepSelection, true, pPRMResult);
 
-    MG_CATCH_AND_THROW(L"MgServerRenderingService.RenderMap")
+    MG_CATCH(L"MgServerRenderingService.RenderMap")
+    if (mgException.p)
+    {
+        if(NULL != pPRMResult)
+        {
+            MgServerManager* serverManager = MgServerManager::GetInstance();
+            STRING locale = (NULL == serverManager)? MgResources::DefaultMessageLocale : serverManager->GetDefaultMessageLocale();
 
+            Ptr<MgResourceIdentifier> mapResId = map->GetMapDefinition();
+            pPRMResult->SetResourceId(mapResId ? mapResId->ToString() : L"");
+
+            STRING message = mgException->GetExceptionMessage(locale);
+            pPRMResult->SetError(message);
+        }
+
+        MG_THROW()
+    }
     return ret.Detach();
 }
 
@@ -1285,7 +1316,7 @@
             {
                 //if we have a valid transform, get the request geom in layer's space
                 queryGeom = SAFE_ADDREF(geometry);
-
+                STRING geomTextSource = queryGeom->ToAwkt(true);
                 if (trans)
                 {
                     //get selection geometry in layer space
@@ -1870,6 +1901,21 @@
                     {
                         failLoadedIds.Add(resourceId);
                     }
+
+                    if(NULL != pPRWsResult)
+                    {
+                        ProfileRenderWatermarkResultCollection* pPRWResultColl = pPRWsResult->GetProfileRenderWatermarkResults();
+                        ProfileRenderWatermarkResult* pPRWResult = pPRWResultColl->GetAt(pPRWResultColl->GetCount()-1); // TODO: check index
+
+                        // Calculate the time spent on stylizing watermark
+                        double stylizeWatermarkTime = MgTimerUtil::GetTime() - pPRWResult->GetRenderTime();
+                        pPRWResult->SetRenderTime(stylizeWatermarkTime);
+
+                        pPRWResult->SetResourceId(resourceId);
+
+                        STRING message = mgException->GetExceptionMessage(locale);
+                        pPRWResult->SetError(message);
+                    }
                 }
             }
         }



More information about the mapguide-commits mailing list