我需要在PSA为每个项目实体实施的工作分解结构(WBS)中添加一个自定义列。它显示了具有一些默认列的项目任务,以及Microsoft Project外观(和功能)。
此工具的问题是您无法从中打开任何任务。所以,我想插入一个允许用户这样做的列。怎么这么难?
答案 0 :(得分:2)
嗯,我找到的唯一方法是改变PSA的JS库。 这非常危险,因为将来执行的任何更新都可能使您的解决方案崩溃。 但是,由于我找不到解释如何执行我需要的文档或解决方法,因此我决定同时向您介绍我遇到的问题和解决方案。
1.-使用PSA的JS库创建一个解决方案,我们必须使用Add Existing按钮进行更改。这些是组件:
2.-由于这些是PSA性能的关键文件,因此将其导出为非托管解决方案。为了获得某种备份文件,以防万一。
3.-对资源的修改 msdyn_ / Common / Models / ProjectTask.js :
这是实体与视图模型之间的数据映射的位置。如果要显示的字段是ProjectTask实体的自定义字段,则必须将其值分配给在函数中创建的JS变量
ProjectTask(实体)和原型" initFromFetchXmlResponse",像这样:
this.myVariableField=entity.fieldAttribute; //this in projectTask(entity)
this.myVariableField=fetchXmlEntity.fieldAttribute; //this initFromFetchXmlResponse
我只想创建一个指向该任务的链接,因此对我来说没有必要。
4.-对资源的更改 msdyn_ / Project / WBS / Scripts / ViewModelTaskFactory.js :
此文件包含创建viewModelTask的函数,这是一种用任务值填充的行。对于我们想要添加到WBS的每一列,我们必须在" createDefaultViewModelTask"中添加一些行。和" createViewModelTaskFromProjectTask"功能
viewModelTask.myDefaultValueInColumn="";//createDefaultViewModelTask
viewModelTask.myActualValueInColumn=projectTask.Attribute;//createViewModelTaskFromProjectTask
5.-对资源的更改 msdyn_ / Project / WBS / View / ViewTaskInitializer.js : 这是列本身的定义。我们必须在ViewTaskInitializer函数和" defineTask"中添加一些代码。字段声明:
ViewTaskInitializer.taskNameColumn = 'taskAttributeName';//ViewTaskInitializer
{ name: ViewTaskInitializer.taskNameColumn, type: 'string' }//defineTask
6.-资源的变化 msdyn_ / Project / WBS / Scripts / WBSView.js : 在这个JS上找到了执行实际" row-painting"的文件。特征。我们需要更改函数" gridConfiguration",并将我们的列添加到" this.Ext.create"方法。 对于gridConfiguration,我们将在该系列中添加此数组:
{
id: ViewTaskInitializer_1.default.OurColumnName,
label: ''
}
关于第二个函数的列添加,可能是这样的:
{
header: 'OurColumnHeader',
align: 'center',
dataIndex: ViewTaskInitializer_1.default.OurColumnName,
width: 800,
sortable: true,
resizable: true,
readOnly: false,
renderer: function (value, record) {
//here is the code which returns the value
// you can access the current task is trying to paint like this:
var task=record.record.data;
}
}