通过psi创建新任务时,请帮助设置Parent [英] Please help with setting Parent when creating new task via psi

查看:110
本文介绍了通过psi创建新任务时,请帮助设置Parent的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我可以向项目添加任务,但我无法将父任务值设为"take"。 添加任务后,它总是将根(最顶层的任务)作为父任务。


任何人都可以告诉我如何让任务父级获得我需要的值吗? 以下是显示添加任务的代码片段。


谢谢,


//创建taskrow并设置TASK_PARENT_UID


 


// clear readonly flag


for int j = 0; j< taskRow.Table .Columns.Count;
j ++)


    &nb属;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;
{taskRow.Table.Columns [j] .ReadOnly = false ; }


 


  taskRow.PROJ_UID = ProjID;


  taskRow.TASK_UID = TaskID; // new guid


               


 


taskRow.TASK_PARENT_UID  
= ParentID;


taskRow .TASK_NAME = Name.DataValue;


 


taskRow [" TASK_START_DATE" ] =!StartDate.DataValue.HasValue? ( object )系统。 DBNull .Value
:( object )StartDate.DataValue.Value;


 


taskRow [" TASK_STOP_DATE" ] =!StopDate.DataValue.HasValue? ( object )系统。 DBNull .Value
:( 对象)StopDate.DataValue.Value;


taskRow.TASK_DUR_FMT =(的 INT )PSLib的任务. DurationFormat .Day;
// DurFmt.DataValue;


taskRow [" TASK_DUR" ] =!TaskDur.DataValue .HalValue? ( object )系统。 DBNull .Value
:( object )TaskDur.DataValue.Value;


<跨度风格="">&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP;&NBSP ;


 


……


//创建仅包含上面创建的新行的数据集


 


<跨度风格=" 字体家庭:索拉;字体大小:9.5pt "> ProjectWebSvc的 ProjectDataSet UpdateTasksDS =
new ProjectWebSvc。 ProjectDataSet ();


           
UpdateTasksDS.Task.Merge((ProjectWebSvc的 ProjectDataSet 。的 TaskDataTable .ProjectDS.Task,
true );


UpdateTasksDS =(ProjectWebSvc。 ProjectDataSet )UpdateTasksDS.GetChanges(System.Data的的DataRowState .Added);


 


 


//使用ProjTool中的框架更新SDK通过发送上面创建的数据集


Guid sessionGuid =
Guid .NewGuid();


Project.CheckOutProject(专案编号,sessionGuid,
"签出用于任务更新" );


程序 。AddToProject(tasksToAddDS,projectServer,sessionGuid,
false );


程序 .CheckInProject(projectServer,projectID,sessionGuid,
true "在任务更新"之后签入,
false


父级的值是正确的在调用之前做更新。

解决方案

不幸的是,您无法在现有项目的中间插入任务并更改TASK_UID顺序,或TASK_PARENT_UID,使用公共P​​SI方法.AddToProject总是在最后插入任务.QueueUpdateProject可以更改现有任务的TASK_OUTLINE_LEVEL
,但是读取TASK_UID和TASK_PARENT_UID字段(以及许多其他字段) - 仅在现有项目的ProjectDataSet中。


原因是因为Project Server 2010中的计划引擎存在限制;它并不完全复制Proj Pro中的计划引擎功能,所以有限制关于你可以使用公共P​​SI做什么,这将涉及
调度更改。


您可以使用ProjTool查看ProjectDataSet的Task表中的只读字段。您必须更改的字段显示为灰色。 PWA使用私有方法(在WinProj和PWA服务中)插入任务,更改任务父级,并重新安排
项目。


- Jim


I am able to add a task to a project, but I am unable to get the parent task value to "take".  After the task is added, it always has the root (top most task) as the parent.

Can anyone tell me how to get the task parent to the value I need?  The following are code snippets showing the addition of the task.

Thank you,

//creating the taskrow and setting the TASK_PARENT_UID

 

//clear readonly flag

for (int j = 0; j < taskRow.Table.Columns.Count; j++)

                { taskRow.Table.Columns[j].ReadOnly = false; }

 

 taskRow.PROJ_UID = ProjID;

 taskRow.TASK_UID = TaskID; //new guid

               

 

taskRow.TASK_PARENT_UID  = ParentID;

taskRow.TASK_NAME = Name.DataValue;

 

taskRow["TASK_START_DATE"] = !StartDate.DataValue.HasValue ? (object)System.DBNull.Value : (object)StartDate.DataValue.Value;

 

taskRow["TASK_STOP_DATE"] = !StopDate.DataValue.HasValue ? (object)System.DBNull.Value : (object)StopDate.DataValue.Value;

taskRow.TASK_DUR_FMT = (int) PSLib.Task.DurationFormat.Day; // DurFmt.DataValue;

taskRow["TASK_DUR"] = !TaskDur.DataValue.HasValue ? (object)System.DBNull.Value : (object)TaskDur.DataValue.Value;

               

 

……

// creating a Dataset with only the new row created above

 

ProjectWebSvc.ProjectDataSet UpdateTasksDS = new ProjectWebSvc.ProjectDataSet();

            UpdateTasksDS.Task.Merge((ProjectWebSvc.ProjectDataSet.TaskDataTable)this.ProjectDS.Task, true);

UpdateTasksDS = (ProjectWebSvc.ProjectDataSet) UpdateTasksDS.GetChanges(System.Data.DataRowState.Added);

 

 

// update using framework in ProjTool from SDK by sending the dataset created above

Guid sessionGuid = Guid.NewGuid();

Project.CheckOutProject(projectID, sessionGuid, "Checked out for Task update");

Program.AddToProject(tasksToAddDS, projectServer, sessionGuid, false);

Program.CheckInProject(projectServer, projectID, sessionGuid, true, "Checked in after Task update", false

Value of parent is correct right before call to do update.

解决方案

Unfortunately, you cannot insert a task in the middle of an existing project and change the TASK_UID order, or the TASK_PARENT_UID, by using public PSI methods. AddToProject always inserts a task at the end. QueueUpdateProject can change the TASK_OUTLINE_LEVEL of an existing task, but the TASK_UID and TASK_PARENT_UID fields (and a number of other fields) are read-only in the ProjectDataSet of an existing project.

The reason is bacause there are limitations in the scheduling engine in Project Server 2010; it does not exactly duplicate the scheduling engine functionality in Proj Pro, so there are restrictions on what you can do with the public PSIs that would involve scheduling changes.

You can use ProjTool to see the read-only fields in the Task table of a ProjectDataSet. The fields you would have to change are greyed out. PWA uses private methods (in the WinProj and PWA services) to insert tasks, change the task parent, and reschedule the project.

--Jim


这篇关于通过psi创建新任务时,请帮助设置Parent的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆