简介:SmarTeam 是一款强大的 PLM 系统,二次开发可扩展其功能。本课程将重点讲解如何使用 Visual C++ 6.0 进行 SmarTeam 二次开发,并以 Plan Management 为例,带领学员构建一个完整的项目计划管理系统。通过课程,学员将掌握 COM 接口的使用、DLL 创建、组件注册、调试技巧等,并深入了解 Plan Management 在 SmarTeam 中的应用,包括任务管理、资源分配、报表分析和工作流集成。
1. SmarTeam 二次开发基础
SmarTeam 二次开发是基于 SmarTeam COM 接口进行的,因此了解 COM 接口的概念和原理至关重要。COM 接口是一种跨语言、跨平台的二进制接口,它定义了一组对象可以调用的方法和属性。SmarTeam COM 接口体系结构庞大且复杂,但可以将其划分为几个主要模块,包括基础接口、数据访问接口、业务逻辑接口和管理接口。这些模块提供了丰富的功能,使开发人员能够访问 SmarTeam 的各种功能,例如数据管理、流程自动化和报告生成。
2.2 SmarTeam COM 接口概览
2.2.1 COM 接口的概念和原理
COM(组件对象模型)是一种由微软开发的二进制软件接口标准,用于定义和实现软件组件之间的通信。COM 接口是 COM 的基本构建块,它定义了组件可以公开的一组方法和属性。
COM 接口使用一种称为接口定义语言(IDL)来定义。IDL 文件包含接口的名称、方法签名和属性定义。一旦 IDL 文件被编译,它就会生成一个头文件(.h)和一个类型库(.tlb)。头文件包含接口的声明,而类型库则包含有关接口的元数据信息。
2.2.2 SmarTeam COM 接口体系结构
SmarTeam 公开了一组丰富的 COM 接口,用于访问其功能。这些接口被组织成一个分层的体系结构,如下所示:
- 基础接口: 这些接口提供了 SmarTeam 的基本功能,例如对象管理、事务管理和错误处理。
- 业务对象接口: 这些接口表示 SmarTeam 中的业务对象,例如项目、文档和任务。
- 服务接口: 这些接口提供了特定服务,例如搜索、报表生成和工作流管理。
SmarTeam COM 接口体系结构是一个分层结构,每个层次都依赖于下层的接口。例如,业务对象接口依赖于基础接口,而服务接口依赖于业务对象接口。
代码块:获取 SmarTeam 基础接口
// 创建 SmarTeam 基础接口
ISmartPtr<ISmartSession> session;
HRESULT hr = CoCreateInstance(CLSID_SmartSession, NULL, CLSCTX_INPROC_SERVER, IID_ISmartSession, (void**)&session);
if (FAILED(hr))
{
// 处理错误
}
逻辑分析:
该代码块使用 CoCreateInstance
函数创建 ISmartSession
接口的实例。 ISmartSession
是 SmarTeam 的基础接口,它提供了对 SmarTeam 会话的访问。如果 CoCreateInstance
函数成功,它将返回 S_OK
,否则它将返回一个错误代码。
3. COM 接口调用和 DLL 创建
3.1 COM 接口的调用方法
COM 接口的调用方法主要有两种:使用 ATL 创建 COM 对象和使用 MFC 创建 COM 对象。
3.1.1 使用 ATL 创建 COM 对象
ATL(Active Template Library)是微软提供的一个用于创建 COM 对象的模板库。使用 ATL 创建 COM 对象可以简化 COM 对象的开发过程,提高开发效率。
步骤:
- 创建一个 ATL 工程。
- 在工程中添加一个 COM 对象类。
- 实现 COM 对象的接口。
- 编译工程。
3.1.2 使用 MFC 创建 COM 对象
MFC(Microsoft Foundation Classes)是微软提供的一个用于创建 Windows 应用程序的类库。MFC 也支持 COM 对象的创建。
步骤:
- 创建一个 MFC 工程。
- 在工程中添加一个 COM 对象类。
- 实现 COM 对象的接口。
- 编译工程。
3.2 DLL 的创建和部署
DLL(Dynamic Link Library)是一种动态链接库,它包含了可由其他程序调用的代码和数据。SmarTeam DLL 是 SmarTeam 二次开发中常用的组件,它可以封装特定的功能,方便其他程序调用。
3.2.1 DLL 的基本结构和原理
DLL 的基本结构包括:
- 导出函数表: 包含 DLL 中所有导出函数的地址。
- 代码段: 包含 DLL 的代码。
- 数据段: 包含 DLL 的数据。
DLL 的工作原理如下:
- 当一个程序调用 DLL 中的函数时,操作系统会加载 DLL 到内存。
- 操作系统会查找导出函数表,找到要调用的函数的地址。
- 操作系统会将控制权转移到该函数。
- 函数执行完毕后,控制权会返回到调用程序。
3.2.2 SmarTeam DLL 的创建和注册
创建 SmarTeam DLL:
- 使用 Visual C++ 创建一个 DLL 工程。
- 在工程中添加 SmarTeam SDK 中的必要头文件和库文件。
- 实现 SmarTeam COM 接口。
- 编译工程。
注册 SmarTeam DLL:
- 打开命令提示符。
- 导航到 DLL 所在的目录。
- 执行以下命令:
regsvr32 <DLL 名>.dll
例如:
regsvr32 MySmarTeamDLL.dll
注册成功后,DLL 中的 COM 对象就可以被其他程序调用了。
4. SmarTeam 组件注册与调试
4.1 SmarTeam 组件的注册机制
4.1.1 注册表中 SmarTeam 组件的信息
SmarTeam 组件的注册信息存储在 Windows 注册表中,具体路径为:
HKEY_CLASSES_ROOT\CLSID\{Component GUID}
其中, {Component GUID}
为组件的全局唯一标识符 (GUID)。注册表中存储的信息包括:
- 组件的名称和描述
- 组件的类型库信息
- 组件的 ProgID
- 组件的 InProcServer32 项,指定组件的 DLL 路径和线程模型
4.1.2 SmarTeam 组件的注册和注销
SmarTeam 组件的注册和注销可以通过以下方式进行:
- 注册:
- 使用
regsvr32
命令,例如:regsvr32 /s "C:\path\to\component.dll"
-
使用 SmarTeam SDK 中的
ISTComponentManager
接口,例如:cpp ISTComponentManager* pComponentManager; pComponentManager->RegisterComponent(componentGUID);
-
注销:
- 使用
regsvr32
命令,例如:regsvr32 /u "C:\path\to\component.dll"
- 使用 SmarTeam SDK 中的
ISTComponentManager
接口,例如:cpp ISTComponentManager* pComponentManager; pComponentManager->UnregisterComponent(componentGUID);
4.2 SmarTeam 组件的调试技巧
4.2.1 使用 Visual Studio 调试 SmarTeam 组件
Visual Studio 提供了调试 SmarTeam 组件的功能,具体步骤如下:
- 在 Visual Studio 中打开组件的项目。
- 在“调试”菜单中选择“附加到进程”。
- 在“附加到进程”对话框中,选择 SmarTeam 进程(例如,
smarteam.exe
)。 - 单击“附加”按钮。
4.2.2 使用 SmarTeam 调试工具调试组件
SmarTeam 提供了专门的调试工具,称为 SmarTeam Debugger,可以用来调试 SmarTeam 组件。具体步骤如下:
- 启动 SmarTeam Debugger。
- 在“文件”菜单中选择“打开”。
- 选择要调试的组件的 DLL 文件。
- 单击“调试”按钮。
5. Plan Management 在 SmarTeam 中的应用
5.1 Plan Management 的概念和功能
5.1.1 Plan Management 的基本概念
Plan Management 是 SmarTeam 中用于管理项目计划和进度跟踪的模块。它提供了创建、修改和管理项目计划所需的功能,包括任务、资源和进度信息。
5.1.2 Plan Management 的主要功能
Plan Management 的主要功能包括:
- 任务管理: 创建、修改和删除任务,设置任务属性(如名称、描述、优先级和截止日期),以及管理任务之间的依赖关系。
- 资源管理: 创建、修改和删除资源(如人员、设备和材料),以及管理资源的分配和可用性。
- 进度跟踪: 记录和更新任务的进度信息,生成进度报告,并分析项目进度。
- 甘特图: 提供项目计划的甘特图视图,直观地显示任务之间的关系和进度。
5.2 Plan Management 的二次开发接口
5.2.1 Plan Management COM 接口体系结构
Plan Management 的二次开发接口基于 COM(组件对象模型)。它提供了一系列 COM 接口,允许开发者使用编程语言(如 C++ 或 VB)访问和操作 Plan Management 功能。
Plan Management COM 接口体系结构主要包括以下接口:
- IPlanMgr: 管理项目计划的根接口。
- ITask: 表示项目任务的接口。
- IResource: 表示项目资源的接口。
- IProgress: 表示项目进度信息的接口。
5.2.2 Plan Management 接口的调用示例
下面是一个使用 C++ 调用 Plan Management 接口的示例代码:
// 创建 Plan Management 对象
IPlanMgrPtr planMgr = GetPlanMgrPtr();
// 创建一个新任务
ITaskPtr task = planMgr->CreateTask();
task->SetName("Task 1");
task->SetDescription("This is task 1.");
// 将任务添加到项目计划中
planMgr->AddTask(task);
// 获取任务的进度信息
IProgressPtr progress = task->GetProgress();
double percentComplete = progress->GetPercentComplete();
通过调用 Plan Management COM 接口,开发者可以扩展 SmarTeam 的功能,创建定制的项目管理应用程序。
6. 任务管理、资源分配和进度跟踪
6.1 任务管理的二次开发
6.1.1 任务的创建、修改和删除
SmarTeam 中的任务管理功能提供了对任务的创建、修改和删除操作。通过二次开发,可以定制这些操作以满足特定的业务需求。
创建任务
// 创建一个任务对象
ITaskPtr task = ITaskPtr(CLSID_Task);
// 设置任务属性
task->SetName(L"任务名称");
task->SetDescription(L"任务描述");
// 保存任务
task->Save();
修改任务
// 获取任务对象
ITaskPtr task = ITaskPtr(CLSID_Task, taskID);
// 修改任务属性
task->SetName(L"修改后的任务名称");
// 保存任务
task->Save();
删除任务
// 获取任务对象
ITaskPtr task = ITaskPtr(CLSID_Task, taskID);
// 删除任务
task->Delete();
6.1.2 任务的查询和过滤
SmarTeam 提供了丰富的查询和过滤功能,可以根据不同的条件查找任务。
查询任务
// 创建查询对象
IQueryPtr query = IQueryPtr(CLSID_Query);
// 设置查询条件
query->SetFilter(L"Name LIKE '任务%'");
// 执行查询
IQueryResultsPtr results = query->Execute();
// 遍历查询结果
for (int i = 0; i < results->GetCount(); i++)
{
ITaskPtr task = results->GetItem(i);
// ...
}
过滤任务
// 创建任务集合对象
ITaskCollectionPtr tasks = ITaskCollectionPtr(CLSID_TaskCollection);
// 设置过滤条件
tasks->SetFilter(L"Name LIKE '任务%'");
// 遍历过滤后的任务集合
for (int i = 0; i < tasks->GetCount(); i++)
{
ITaskPtr task = tasks->GetItem(i);
// ...
}
6.2 资源分配的二次开发
6.2.1 资源的创建、修改和删除
SmarTeam 中的资源分配功能允许将资源分配给任务。通过二次开发,可以定制资源的创建、修改和删除操作。
创建资源
// 创建一个资源对象
IResourcePtr resource = IResourcePtr(CLSID_Resource);
// 设置资源属性
resource->SetName(L"资源名称");
resource->SetType(L"资源类型");
// 保存资源
resource->Save();
修改资源
// 获取资源对象
IResourcePtr resource = IResourcePtr(CLSID_Resource, resourceID);
// 修改资源属性
resource->SetName(L"修改后的资源名称");
// 保存资源
resource->Save();
删除资源
// 获取资源对象
IResourcePtr resource = IResourcePtr(CLSID_Resource, resourceID);
// 删除资源
resource->Delete();
6.2.2 资源的分配和释放
SmarTeam 提供了对资源分配和释放的二次开发支持。
分配资源
// 获取任务对象
ITaskPtr task = ITaskPtr(CLSID_Task, taskID);
// 获取资源对象
IResourcePtr resource = IResourcePtr(CLSID_Resource, resourceID);
// 分配资源
task->AssignResource(resource);
释放资源
// 获取任务对象
ITaskPtr task = ITaskPtr(CLSID_Task, taskID);
// 获取资源对象
IResourcePtr resource = IResourcePtr(CLSID_Resource, resourceID);
// 释放资源
task->ReleaseResource(resource);
6.3 进度跟踪的二次开发
6.3.1 进度信息的获取和更新
SmarTeam 提供了对任务进度信息的获取和更新功能。通过二次开发,可以定制这些操作以满足特定的需求。
获取进度信息
// 获取任务对象
ITaskPtr task = ITaskPtr(CLSID_Task, taskID);
// 获取进度信息
double progress = task->GetProgress();
更新进度信息
// 获取任务对象
ITaskPtr task = ITaskPtr(CLSID_Task, taskID);
// 更新进度信息
task->SetProgress(0.5);
6.3.2 进度报告的生成和分析
SmarTeam 提供了生成和分析进度报告的功能。通过二次开发,可以定制这些功能以满足特定的需求。
生成进度报告
// 创建进度报告对象
IProgressReportPtr report = IProgressReportPtr(CLSID_ProgressReport);
// 设置进度报告参数
report->SetStartDate(startDate);
report->SetEndDate(endDate);
// 生成进度报告
report->Generate();
分析进度报告
// 获取进度报告对象
IProgressReportPtr report = IProgressReportPtr(CLSID_ProgressReport, reportID);
// 分析进度报告
double averageProgress = report->GetAverageProgress();
7. 报表生成和分析
7.1 SmarTeam 报表系统的介绍
7.1.1 报表系统的基本概念
SmarTeam 的报表系统是一个强大的工具,可用于生成和分析各种报告。这些报告可以帮助用户跟踪项目进度、识别趋势并做出明智的决策。报表系统基于 Microsoft SQL Server Reporting Services(SSRS),它提供了一个直观的用户界面和丰富的功能集。
7.1.2 报表系统的架构和功能
SmarTeam 报表系统由以下组件组成:
- 报表服务器: 托管报表定义和数据的服务器。
- 报表管理器: 用于管理和部署报表的 Web 应用程序。
- 报表查看器: 用于查看和交互报表的 Web 应用程序。
报表系统提供以下功能:
- 创建和修改报表: 用户可以使用报表生成器创建和修改报表。报表生成器提供了一个拖放界面,使创建复杂报表变得容易。
- 部署报表: 报表可以部署到报表服务器,以便其他用户可以访问它们。
- 查看和交互报表: 用户可以使用报表查看器查看和交互报表。报表查看器提供各种功能,例如缩放、筛选和导出。
- 计划报表: 报表可以计划在特定时间或事件发生时自动生成和发送。
- 安全性: 报表系统提供基于角色的安全性,允许管理员控制用户对报表的访问。
7.2 报表二次开发的接口
7.2.1 报表 COM 接口体系结构
SmarTeam 提供了一组 COM 接口,用于访问和操作报表系统。这些接口组织在以下命名空间中:
- SmarTeam.Reporting: 包含用于管理报表定义和数据的接口。
- SmarTeam.Reporting.Data: 包含用于访问报表数据的接口。
- SmarTeam.Reporting.Viewer: 包含用于查看和交互报表的接口。
7.2.2 报表接口的调用示例
以下代码示例演示如何使用 SmarTeam.Reporting 命名空间中的接口创建报表:
using SmarTeam.Reporting;
// 创建报表定义管理器
IReportDefinitionManager reportDefinitionManager = new ReportDefinitionManager();
// 创建新的报表定义
IReportDefinition reportDefinition = reportDefinitionManager.CreateNew();
// 设置报表名称和描述
reportDefinition.Name = "My Report";
reportDefinition.Description = "This is my custom report.";
// 保存报表定义
reportDefinitionManager.Save(reportDefinition);
简介:SmarTeam 是一款强大的 PLM 系统,二次开发可扩展其功能。本课程将重点讲解如何使用 Visual C++ 6.0 进行 SmarTeam 二次开发,并以 Plan Management 为例,带领学员构建一个完整的项目计划管理系统。通过课程,学员将掌握 COM 接口的使用、DLL 创建、组件注册、调试技巧等,并深入了解 Plan Management 在 SmarTeam 中的应用,包括任务管理、资源分配、报表分析和工作流集成。