导出与从 Primavera P6 导入
dhtmlxGantt 库允许将甘特图中的数据导出到 Primavera P6。你也可以将 Primavera P6 的数据导入到 Gantt。
在线导出服务是免费的。有关许可条款,请参阅许可证和水印。
有多种导出服务可用。你可以在本地计算机上安装它们,将甘特图本地导出到 Primavera P6。请注意,导出服务不包含在 Gantt 包中, 请阅读 corresponding article 以了解每种服务的使用条款。
在线导出服务限制
在线导出服务对时间和请求大小有限制。请参阅在线导出服务的限制。
使用导出模块
要导出较大的图表、在不受在线导出服务限制的情况下导 出,或将数据保留在你的网络内,请在自己的服务器上安装导出模块。有关用于 MS Project 和 Primavera P6 的导出模块的用法,请阅读相应文章。
导出到 Primavera P6
Gantt 组件支持将链接、任务和资源导出到 Primavera P6。
要将数据从 Gantt 图导出到 Primavera P6,请执行下列操作:
- 要使用导出/导入功能,请通过 plugins 方法启用 export_api 插件:
gantt.plugins({
export_api: true
});
它允许你使用在线导出服务或本地导出模块。
如果你使用的 Gantt 版本低于 8.0,在页面上需要包含 https://export.dhtmlx.com/gantt/api.js 以启用导出功能,例如:
<script src="codebase/dhtmlxgantt.js"></script>
<script src="https://export.dhtmlx.com/gantt/api.js"></script>
- 调用 exportToPrimaveraP6() 方法以从 Gantt 图导出数据。
gantt.exportToPrimaveraP6();
该方法将向远程服务发送请求,服务要么输出一个 XML Project 文件,要么返回一个用于下载生成文件的 URL。
相关示例: Export data : MS Project, PrimaveraP6, Excel & iCal
请注意,当将数据导出到 Primavera 时,需要为项目任务的 Summary 属性返回 true,以使该功能正确工作:
gantt.exportToPrimaveraP6({
tasks: {
Summary: function (task) {
return !!gantt.hasChild(task.id);
},
CustomProperty: function (task) {
return task.custom_property;
},
SlateId: function (task) {
return task.id + "";
},
}
});
相关示例: Custom properties for WBS tasks (PrimaveraP6's Summary tasks)
导出设置
exportToPrimaveraP6() 方法接收一个对象作为参数,该对象包含若干属性(所有属性均为可选):
- name - (string) 获取到的文件名(默认为 'gantt.xml')。
gantt.exportToPrimaveraP6({
name:'custom.xml'
});
- auto_scheduling - (boolean) 指示导出项目中任务的排程模式。true 表示任务为自动排程,false 表示任务为手动排程(默认状态)。
gantt.exportToPrimaveraP6({
auto_scheduling: false
});
- skip_circular_links - (boolean) 指示是否移除循环链接(true - 将移除(默认模式),false - 不移除)。
gantt.exportToPrimaveraP6({
skip_circular_links: false
});
- project - (object) 允许为导出的 project 实体设置自定义属性
gantt.exportToPrimaveraP6({
project: {
'Author': 'I am!',
'MinutesPerDay': function () {
return gantt.config.hours_per_day * 60;
}
}
});
该对象的属性对应 Project entity 的相应属性。支持的属性列表可在 这里 找到。属性可以包含固定值或在导出调用时执行的函数。
- tasks - (object) 允许为导出的任务项设置自定义属性
gantt.exportToPrimaveraP6({
tasks: {
'StartVariance': function (task) {
if (task.startVariance)
return task.startVariance;
else
return 0;
},
'PercentWorkComplete': function (task) {
return (task.progress + 0.1);
},
'Custom': function (task) {
return 'Custom value';
},
'Custom 2': 'My Custom value'
}
});
该对象的属性对应 Task entity 的相应属性,这里是 properties 的支持列表。属性可以包含固定值或在导出调用时对每个任务执行的函数。
- data - (object) 允许设置将在导出 Gantt 图中呈现的自定义数据源。
预计在 start_date 和 end_date 属性中指定包含日期和时间的格式(%d-%m-%Y %H:%i)。
const customData = {
"data": [
{ "id": "10", "text": "Project #5", "start_date": "01-04-2025 00:00",
"duration": 3, "order": 10, "progress": 0.4, "open": true,
"end_date": "04-04-2025 00:00", "parent": 0
},
{ "id": "1", "text": "Task #67", "start_date": "02-04-2025 00:00",
"duration": 2, "order": 10, "progress": 0.6, "parent": "10",
"end_date": "04-04-2025 00:00"
},
{ "id": "2", "text": "Task #89", "start_date": "01-04-2025 00:00",
"duration": 2, "order": 20, "progress": 0.6, "parent": "10",
"end_date": "03-04-2025 00:00"
},
],
"links": [
{ "id": 1, "source": 1, "target": 2, "type": "1" },
]
}
gantt.exportToPrimaveraP6({
data: customData
});
相关示例: Gantt. Export custom data
- callback - (function) 如果你想获取用于下载生成 的 XML 的 URL,可以使用 callback 属性。它接收一个带有 url 属性的 JSON 对象:
gantt.exportToPrimaveraP6({
callback: function(res){
alert(res.url);
}
});
- resources - (array) 允许将资源列表导出到 Primavera P6 文件
gantt.exportToPrimaveraP6({
resources: [
{ "id": "1", "name": "John", "type": "work" },
{ "id": "2", "name": "Mike", "type": "work" },
{ "id": "3", "name": "Anna", "type": "work" }
]
});
可用的资源类型为 "work"、"cost"、"material"。资源分配通过任务配置的 ResourceAssignments 属性来指定:
var users = [// resources
{ key: '0', label: "N/A" },
{ key: '1', label: "John" },
{ key: '2', label: "Mike" },
{ key: '3', label: "Anna" }
];
gantt.exportToPrimaveraP6({
resources: users
.filter(function(u){
if(u.key === '0')//跳过默认选项
return false;
return true;
})
.map(function(u){
return {
id: u.key,
name: u.label,
type: "work"
};
}),
tasks: {
ResourceAssignments: function(task){
return task.user;
}
}
});
ResourceAssignments 属性可以是一个函数,接收任务对象并返回字符串/数字或字符串/数字数组:
tasks: {
ResourceAssignments: function(task){
return [task.user, task.office];
}
}
相关示例: Export Gantt with resources to Primavera P6
可以在 ResourceAssignments 属性中返回以下对象以指定 units 参数:
{
resource_id: "id",
units: "units value"
}
- resource calendars
默认情况下,每个任务都会添加一个日历。如果使用资源日历,需要在导出期间在 CalendarUID 属性中为任务指定 -1(在 tasks 对象中)。那么该任务将使用资源日历。
在导出 resource calendars 时,可以在 resources 数组的对象中指定资源日历:
gantt.exportToPrimaveraP6({
resources: [
{
id: "10",
name: "John",
type: "work",
calendar: gantt.config.resource_calendars[10]
}
]
});
- server - (string) 请求的 API 端点。可用于本地安装的导出服务。默认值为
https://export.dhtmlx.com/gantt。
gantt.exportToPrimaveraP6({
server: "https://myapp.com/myexport/gantt"
});
从 Primavera P6 导入
为了转换 XML 或 XER 文件,你需要向导出服务发送以下请求:
- 请求 URL -
https://export.dhtmlx.com/gantt - 请求方法 - POST
- 内容类型 - multipart/form-data
请求参数为:
- file - XER 或 XML Primavera P6 文件
- type - "primaveraP6-parse"
- data - (可选) 带有设置的 JSON 字符串
例如:
<form action="https://export.dhtmlx.com/gantt" method="POST"
encType="multipart/form-data">
<input type="file" name="file" />
<input type="hidden" name="type" value="primaveraP6-parse"/>
<button type="submit">Get</button>
</form>
或者,你也可以使用 client-side API,如下所示:
gantt.importFromPrimaveraP6({
data: file,
taskProperties: ["Notes", "Name"],
callback: function (project) {
if (project) {
gantt.clearAll();
if (project.config.duration_unit) {
gantt.config.duration_unit = project.config.duration_unit;
}
gantt.parse(project.data);
}
}
});
相关示例: Import Primavera P6 file
其中 file 是一个 File 的实例,应包含一个 XML 或 XER Project 文件。
gantt.importFromPrimaveraP6 需要 HTML5 File API 的支持。
响应
响应将包含以下结构的 JSON:
{
data: {},
config: {},
resources: [],
worktime: {},
calendars: []
}
- data - (object) 一个甘特图 data object。每个任务具有以下属性:id, open, parent, progress, start_date, text, resource。日期以字符串形式表示,格式为 "%Y-%m-%d %H:%i"。
- config - (object) 一个甘特图 configuration 对象,包含从项目文件中检索的设置。
- resources - (array) 一个对象数组(每个对象具有以下属性: (id: string, name: string, type: string, calendar: string))表示来自项目文件的资源列表。
- worktime - (object) 包含来自项目日历的工作时间设置的对象。它可以包含以下属性:
- id - (string | number) 可选,日历 ID
- hours - (array) 全局工作时间数组,设置任务的开始和结束时间
- dates - (array) 日期数组,可包含:
- 每周的 7 天(从 0 - 星期日,到 6 - 星期六),其中 1/true 代表工作日,0/false 代表非工作日
- 其他记录为日期
- calendars - (array) 包含用于创建新日历的日历配置对象的数组。
- calendarConfig - (object) 日历配置对象,可能包含以下属性:
- id - (string | number) 可选,日历 id
- name - (string) 日历名称
- hours - (array) 全局工作时间数组,设置任务的开始和结束时间
- dates - (array) 日期数组,可包含:
- 每周的 7 天(从 0 - 星期日,到 6 - 星期六),其中 1/true 代表工作日,0/false 代表非工作日
- 其他记录为日期
- calendarConfig - (object) 日历配置对象,可能包含以下属性: