En esta ocasión comentare acerca de un error que me estaba sucediendo cuando trataba de accesar el ResourcePlan de un proyecto y les daré una posible solución para evitarlo. Espero seguir posteando algunos de los casos que me han sucedido y como los he podido solucionar, por ejemplo, Project Server 2010 An Unknown Error Has Ocurred.
Problema
Básicamente, lo que intentaba hacer era leer el ResourcePlan de un proyecto, este proyecto podría no existir o tenía un ResourcePlan con mucha información. Dado que el error que estaba recibiendo era un Timeout llegue a la conclusión que estaba tratando de regresar demasiados datos y obviamente que la solución sería reducir la cantidad.
_ResourcePlanDataSet = Program._ResourcePlanService.ReadResourcePlan(string.Empty,
_WorkingProjectUID,
_StartIntervalDate,
_EndIntervalDate,
(short)PSLib.ResourcePlan.TimeScale.Months,
true,
false);
Error
PSClientError output:
GeneralUnhandledExceptionException: System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
Solución
Como mencione, mi objetivo con el siguiente código es reducir o filtrar la información de retorno usando filtros para enviárselo al ReadResourcePlan.
El filtro usa solamente la tabla PlanResources y hace uso de las siguiente columnas:
- RES_UIDColumn
- PROJ_UIDColumn
- ASSN_UIDColumn
- ASSN_BOOKING_TYPEColumn
PSLib.Filter _cfFilter = new PSLib.Filter();
_cfFilter.FilterTableName = _ResourcePlanDataSet.PlanResources.TableName;_cfFilter.Fields.Add(new PSLib.Filter.Field(_ResourcePlanDataSet.PlanResources.TableName, _ResourcePlanDataSet.PlanResources.RES_UIDColumn.ColumnName));
_cfFilter.Fields.Add(new PSLib.Filter.Field(_ResourcePlanDataSet.PlanResources.TableName, _ResourcePlanDataSet.PlanResources.PROJ_UIDColumn.ColumnName));
_cfFilter.Fields.Add(new PSLib.Filter.Field(_ResourcePlanDataSet.PlanResources.TableName, _ResourcePlanDataSet.PlanResources.ASSN_UIDColumn.ColumnName));
_cfFilter.Fields.Add(new PSLib.Filter.Field(_ResourcePlanDataSet.PlanResources.TableName, _ResourcePlanDataSet.PlanResources.RES_NAMEColumn.ColumnName));
_cfFilter.Fields.Add(new PSLib.Filter.Field(_ResourcePlanDataSet.PlanResources.TableName, _ResourcePlanDataSet.PlanResources.ASSN_BOOKING_TYPEColumn.ColumnName));PSLib.Filter.FieldOperator foEqualProjectUID = new PSLib.Filter.FieldOperator(PSLib.Filter.FieldOperationType.Equal, _ResourcePlanDataSet.PlanResources.PROJ_UIDColumn.ColumnName, _WorkingProjectUID);
PSLib.Filter.LogicalOperator lo = new PSLib.Filter.LogicalOperator(PSLib.Filter.LogicalOperationType.And, foEqualProjectUID);
_cfFilter.Criteria = lo;_ResourcePlanDataSet = Program._ResourcePlanService.ReadResourcePlan(_cfFilter.GetXml(),
_WorkingProjectUID,
_StartIntervalDate,
_EndIntervalDate,
(short)PSLib.ResourcePlan.TimeScale.Months,
true,
false);
Después de aplicar este filtro ya no volví a recibir el error, espero que les sea de utilidad.
Me puedes contactar por medio de correo jhpe@hotmail.com o por LinkedIn y Google+.