gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 14:33:15 25 4
gpt4 key购买 nike

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

This is an example of the WBS of PSA for Dynamics

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

最佳答案

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

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

  • msdyn_/Common/Models/ProjectTask.js
  • msdyn_/Project/WBS/Scripts/ViewModelTask​​Factory.js
  • msdyn_/Project/WBS/Scripts/WBSView.js
  • msdyn_/Project/WBS/View/ViewTaskInitializer.js

2.- 由于这些是 PSA 性能的关键文件,将其导出为非托管解决方案。为了有某种备份文件,以防万一。

3.- 对资源 msdyn_/Common/Models/ProjectTask.js 的修改:

这是实体和我们的 View 模型之间的数据映射的地方。如果要显示的字段是 ProjectTask 实体的自定义字段,则必须将其值分配给函数中创建的 JS 变量
ProjectTask(entity) 和原型(prototype)“initFromFetchXmlResponse”,像这样:

this.myVariableField=entity.fieldAttribute; //this in projectTask(entity)
this.myVariableField=fetchXmlEntity.fieldAttribute; //this initFromFetchXmlResponse

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

4.- 资源 msdyn_/Project/WBS/Scripts/ViewModelTask​​Factory.js 的变化:

此文件包含创建 viewModelTask​​ 的函数,它是某种填充有任务值的行。对于我们想要添加到 WBS 的每一列,我们必须在“createDefaultViewModelTask​​”和“createViewModelTask​​FromProjectTask”函数中插入一些行。

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: ''
}

关于第二个函数上的列添加,可以这样:

             {
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;
}

}

关于javascript - 为 Microsoft Dynamics 365 定制项目服务自动化 (PSA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50833115/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com