Hi,
I'm new to this forum. Ok, in this moment I think everybody is new to this place

.
I got a problem with adding tasks to an existing project using PSI. I use the
AddPositionType.Middle and set the "AddAfterTaskUID" to a correct value.
All works fine, if adding only a few task, but, if I try to add more tasks, say about 40, I get the queue error "TaskUnableToInsert".
if tried lots of things, like:
QueueAddToProject in small blocks (after 1,2,5,10,900 tasks added to the update dataset)
QueueAddToProject, then wait for jobdone state.
and other debugging thinks, but none of them works ...
Here is some code:
PHP Code:
public ProjectDataSet.TaskRow AddNewTask(
string taskName,
Guid addAfterTaskUid,
int taskOutlineLevel,
int taskDuration,
Task.DurationFormat taskDurationFMT)
{
// - increase and watch change count;
IncreaseChangeCount();
ProjectDataSet.TaskRow newTask = ChangesDataSet.Task.NewTaskRow();
newTask.PROJ_UID = this.ProjUid;
newTask.TASK_UID = Guid.NewGuid();
newTask.TASK_NAME = taskName;
newTask.TASK_DUR = taskDuration;
newTask.TASK_DUR_FMT = (int)taskDurationFMT;//(int)Task.DurationFormat.Day;
newTask.TASK_OUTLINE_LEVEL = taskOutlineLevel;
newTask.TASK_IS_SUMMARY = (taskDuration == 0);
// - if no addAfterTask, attach task at last position
if (addAfterTaskUid == Guid.Empty)
{
newTask.AddPosition = (short)Task.AddPositionType.Last;
}
else
{
//newTask.AddPosition = (short)Task.AddPositionType.Last;
newTask.AddPosition = (short)Task.AddPositionType.Middle;
newTask.AddAfterTaskUID = addAfterTaskUid;
}
ShowMessage((string.Format("Task \"{0}\" added", taskName)));
ChangesDataSet.Task.AddTaskRow(newTask);
return newTask;
}
PHP Code:
public void PsiUpdateProject()
{
try
{
Guid sessionUid = PsiGetSessionUid();
Guid jobUid = Guid.NewGuid();
//ServiceFactory.ProjectSvc.QueueUpdateProject(jobUid, session, this.ChangesDataSet, false);
ProjectDataSet changesAdded
= this.ChangesDataSet.GetChanges(DataRowState.Added) as ProjectDataSet;
if (changesAdded != null)
{
ServiceFactory.ProjectSvc.QueueAddToProject(
jobUid,
sessionUid,
changesAdded,
false);
ShowMessage(string.Format("project \"{0}\" updated add", this.ProjUid));
this.PsiWaitForQueue(this.ServiceFactory.QueueSystemSvc, jobUid);
}
changesAdded = null;
ProjectDataSet changesModified
= this.ChangesDataSet.GetChanges(DataRowState.Modified) as ProjectDataSet;
if (changesModified != null)
{
ServiceFactory.ProjectSvc.QueueUpdateProject(
jobUid,
sessionUid,
changesModified,
false);
ShowMessage(string.Format("project \"{0}\" updated mod", this.ProjUid));
}
changesModified = null;
ProjectDataSet changesDeleted
= this.ChangesDataSet.GetChanges(DataRowState.Deleted) as ProjectDataSet;
if (changesDeleted != null)
{
ServiceFactory.ProjectSvc.QueueUpdateProject(
jobUid,
sessionUid,
changesDeleted,
false);
ShowMessage(string.Format("project \"{0}\" updated del", this.ProjUid));
}
changesDeleted = null;
this.ChangesDataSet.AcceptChanges();
this.ChangeCount = 0;
//System.Threading.Thread.Sleep(TimeSpan.FromSeconds(4));
//this.ChangesDataSet.Task.Clear();
}
catch (Exception ex)
{
ShowMessage("QueueAddToProject failed on project." + ex.Message);
}
}
Does anybody have some problems or some answers?

