Hi,
i am facing the problem while generating the schematic diagram using the code.
The code throwing the "Access denied error" when trying to set the ISchematicStandardBuilderContext.InitialObjects.
Below is the code i am using.
public void GenerateSchematicsDiag(IEnumFeature pEnumFeature, IServerContext pServerContext, out string erroMsg)
{
string DiagramName = "testingSanjeev";
string SchematicDataset = "SDE.Schematicdataset";
string FolderName = "SSNJ";
ESRI.ArcGIS.Carto.IMapServer mapServer = pServerContext.ServerObject as ESRI.ArcGIS.Carto.IMapServer;
ESRI.ArcGIS.Carto.IMapServerObjects mapServerObjects = (ESRI.ArcGIS.Carto.IMapServerObjects)mapServer;
ESRI.ArcGIS.Carto.IMap pMap = mapServerObjects.get_Map(mapServer.DefaultMapName);
ISchematicDataset pSchematicDataset = null;
ISchematicDiagramClass pSchDiagramClass = null;
ISchematicDiagramClassContainer pSchDiagramClassContainer = null;
ISchematicStandardBuilderContext pSchStandardBuilderCtxt = null;
ISchematicDiagram pSchematicDiagram = null;
ISchematicWorkspace pSchWorkspace = null;
ISchematicWorkspaceFactory pSchWorkspaceFac = null;
ISchematicDiagramContainer pSchematicDiagramContainer = null;
ISchematicFolderContainer pSchematicFolderContainer = null;
ISchematicFolder pSchematicFolder = null;
try
{
if (!(DiagramName == null))
{
IFeatureLayer substflayer = (IFeatureLayer)pMap.get_Layer(1);
IFeatureClass firstfclass = substflayer.FeatureClass;
IDataset dataset = (IDataset)firstfclass;
IWorkspace pWorkSpace = dataset.Workspace;
pSchWorkspaceFac = pServerContext.CreateObject("esriSchematic.SchematicWorkspaceFactory") as ISchematicWorkspaceFactory;
pSchWorkspace = pSchWorkspaceFac.Open(pWorkSpace);
pSchematicDataset = pSchWorkspace.get_SchematicDatasetByName(SchematicDataset);
pSchematicFolderContainer = (ISchematicFolderContainer)pSchematicDataset;
pSchematicFolder = pSchematicFolderContainer.get_SchematicFolderByName(FolderName);
if ((pSchematicFolder == null))
{
pSchematicFolder = pSchematicDataset.CreateSchematicFolder(FolderName);
}
pSchematicDiagramContainer = (ISchematicDiagramContainer)pSchematicFolderContainer.get_SchematicFolderByName(FolderName);
pSchStandardBuilderCtxt = pServerContext.CreateObject("esriSchematic.SchematicStandardBuilderContext") as ISchematicStandardBuilderContext;
pEnumFeature.Next();
EnumObjectConverter eocon = new EnumObjectConverter(pEnumFeature);
pSchStandardBuilderCtxt.InitialObjects = eocon as IEnumObject; ISchematicBuilderContext ctx = pSchStandardBuilderCtxt as ISchematicBuilderContext;
IPropertySet set = pServerContext.CreateObject("esriSystem.PropertySet") as IPropertySet;
pSchDiagramClassContainer = (ISchematicDiagramClassContainer)pSchematicDataset;
string clsName = "FeederDiagram";
pSchDiagramClass = pSchDiagramClassContainer.get_SchematicDiagramClassByName(clsName);
if ((pSchDiagramClass == null))
{
return;
}
pSchematicDiagram = pSchDiagramClass.SchematicBuilder.GenerateDiagram(DiagramName, pSchematicDiagramContainer, set, ctx, null);
}
}
catch (Exception ex)
{
throw ex;
}
}
class EnumObjectConverter : IEnumObject
{
private IEnumFeature ef;
public EnumObjectConverter(IEnumFeature enumFea)
{
ef = enumFea;
ef.Reset();
}
IObject IEnumObject.Next()
{
if (ef != null)
return ef.Next() as IObject;
else
{
return null;
}
}
void IEnumObject.Reset()
{
ef.Reset();
}
}
Thanks for any help.
Sanjeev Sinha