Javascript 为Microsoft Dynamics 365定制项目服务自动化(PSA)

Javascript 为Microsoft Dynamics 365定制项目服务自动化(PSA),javascript,microsoft-dynamics,dynamics-365,Javascript,Microsoft Dynamics,Dynamics 365,我需要在PSA为每个项目实体实现的工作分解结构(WBS)中添加一个自定义列。它显示带有一些默认列的项目任务,具有Microsoft project外观(和功能) 此工具的问题是无法从中打开任何任务。因此,我想插入一列,允许用户这样做。这有多困难?好吧,我找到的唯一方法就是改变PSA的JS库。 这是非常危险的,因为将来执行的任何更新都可能使您的解决方案崩溃。 然而,由于我找不到解释如何执行所需操作的文档或变通方法,我决定同时向您介绍我遇到的问题和解决方案 1.-使用PSA的JS库创建解决方案,我

我需要在PSA为每个项目实体实现的工作分解结构(WBS)中添加一个自定义列。它显示带有一些默认列的项目任务,具有Microsoft project外观(和功能)


此工具的问题是无法从中打开任何任务。因此,我想插入一列,允许用户这样做。这有多困难?

好吧,我找到的唯一方法就是改变PSA的JS库。 这是非常危险的,因为将来执行的任何更新都可能使您的解决方案崩溃。 然而,由于我找不到解释如何执行所需操作的文档或变通方法,我决定同时向您介绍我遇到的问题和解决方案

1.-使用PSA的JS库创建解决方案,我们必须使用添加现有按钮进行更改。这些是组件

  • msdyn\u/Common/Models/ProjectTask.js
  • msdyn/Project/WBS/Scripts/viewmodelstaskfactory.js
  • msdyn/Project/WBS/Scripts/WBSView.js
  • msdyn/Project/WBS/View/ViewTaskInitializer.js
2.-由于这些文件是PSA性能的关键文件,请将其导出为非托管解决方案。为了有某种备份文件,以防万一

3.-对资源的修改msdyn\u/Common/Models/ProjectTask.js

这里是实体和视图模型之间的数据映射位置。如果要显示的字段是ProjectTask实体的自定义字段,则必须将其值分配给函数中创建的JS变量
ProjectTask(实体)和原型“initFromFetchXmlResponse”,如下所示:

this.myVariableField=entity.fieldAttribute; //this in projectTask(entity)
this.myVariableField=fetchXmlEntity.fieldAttribute; //this initFromFetchXmlResponse
             {
                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;
                          }

            }
我只是想创建一个到任务的链接,因此这对我来说没有必要

4.-资源的更改msdyn\Project/WBS/Scripts/viewmodelstaskfactory.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上有执行实际“行绘制”功能的文件。我们需要更改函数“gridConfiguration”,并将列添加到“this.Ext.create”方法中。 对于gridConfiguration,我们将在系列中添加此阵列:

            {
              id: ViewTaskInitializer_1.default.OurColumnName,
              label: ''
            }
关于第二个函数上的列添加,可以如下所示:

this.myVariableField=entity.fieldAttribute; //this in projectTask(entity)
this.myVariableField=fetchXmlEntity.fieldAttribute; //this initFromFetchXmlResponse
             {
                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;
                          }

            }