iBizModel 日历部件(PSSYSCALENDAR)模型体系详解
引言
iBizModel 系统日历部件模型体系是 iBizModel 架构中专门用于处理时间相关数据可视化与交互的核心组成部分。该体系基于 PSSYSCALENDAR 模型构建,提供了完整的日历功能实现框架,支持从简单的日程显示到复杂的时间轴项目管理等多种应用场景。系统日历部件不仅具备丰富的数据展示能力,还集成了强大的交互逻辑和扩展机制,是企业级应用中时间管理功能的重要基础。
🌐 在线体验
点击访问iBizAppHUB示例系统查看日历部件
更多场景
⚡ 提示:点击右侧调试工具栏,可直接查看指定视图在iBizModeling工具的配置。
模型体系架构
核心模型关系图
PSSYSCALENDAR PSSYSCALENDARITEM PSSYSCALENDARLOGIC PSSYSCALENDARITEMRV PSDATAENTITY PSDETOOLBAR PSCTRLLOGICGROUP PSSYSCSS PSDEDATASET PSDEFIELD PSDEVIEWBASE PSDELOGIC PSDEUIACTION d
模型层级结构详解
1. PSSYSCALENDAR(日历部件模型)
作为日历部件体系的根模型,PSSYSCALENDAR 定义了日历的整体框架和基础配置。其核心属性包括:
- calendarstyle:日历样式枚举,支持天(DAY)、周(WEEK)、月(MONTH)、时间轴(TIMELINE)等多种显示模式
- navviewpos:导航视图位置控制,支持右侧、下方等多种布局方式
- groupmode:数据分组模式,支持自动分组、代码表分组等高级功能
- psdeid:关联的实体模型
PSSYSCALENDAR 通过引用 PSDATAENTITY 建立数据基础,通过 PSDETOOLBAR 集成操作工具,通过 PSCTRLLOGICGROUP 附加控制逻辑,形成了完整的日历功能框架。
2. PSSYSCALENDARITEM(日历部件项模型)
作为日历数据展示的核心,PSSYSCALENDARITEM 定义了具体的数据项配置:
- beginpsdefid 和 endpsdefid:时间范围定义,支持精确的时间区间控制
- itemtype:项类型标识,支持多数据源混合显示
- psdeid:数据集所在实体
- psdedsid:数据集引用,确保数据查询的灵活性
- viewactions:操作控制集合,支持建立、编辑、删除等完整CRUD操作
每个日历项可以独立配置样式、颜色、图标等视觉属性,并支持拖拽编辑、上下文菜单等交互功能。
3. PSSYSCALENDARITEMRV(日历项引用视图模型)
该模型提供了日历项与详细视图的关联机制:
- psdeviewbaseid:关联的实体视图,支持点击日历项跳转到详细页面
- name:引用模式定义,控制视图打开方式
- viewparams:视图参数传递,支持上下文数据传递
通过引用视图机制,日历部件实现了从概览到详情的无缝导航体验。
4. PSSYSCALENDARLOGIC(日历部件逻辑模型)
逻辑模型为日历部件提供了动态行为控制:
- triggertype:触发类型,支持定时器、视图事件、部件事件等多种触发方式
- dstlogictype:目标逻辑类型,支持实体界面逻辑、系统预置逻辑、前端插件等处理目标
- timer:定时器间隔,支持周期性逻辑执行
逻辑模型使得日历部件可以根据业务规则动态调整显示内容、控制用户操作权限、实现复杂的交互流程。
关键技术特性
多数据源集成能力
PSSYSCALENDAR 支持通过多个 PSSYSCALENDARITEM 集成不同实体的数据,在同一个日历界面中显示来自多个业务模块的时间相关数据。例如,在项目管理系统可以同时显示任务计划、会议安排和资源预约。
灵活的视图配置
通过 calendarstyle 枚举,日历部件支持六种内置视图样式和用户自定义样式。每种样式都针对特定的使用场景优化:
- 天视图:适合精细的日程安排
- 周视图:平衡细节和概览
- 月视图:提供长期规划视角
- 时间轴:适合项目进度跟踪
- 复合时间轴:结合时间轴和传统日历优势
强大的交互控制
通过 PSSYSCALENDARLOGIC 和 PSSYSCALENDARITEM 的协同,日历部件支持丰富的交互功能:
- 拖拽调整时间:直接通过拖拽修改事件时间
- 上下文菜单:右键快捷操作
- 实时数据更新:定时器驱动的数据刷新
- 条件显示控制:基于业务规则的动态显示
扩展性设计
模型体系通过插件机制(pssyspfpluginid)支持功能扩展,前端样式通过 PSSYSCSS 引用支持主题定制,确保了系统的可维护性和可扩展性。
DSL 代码实现示例
基于工具返回的模型信息,以下是完整的系统日历部件 DSL 实现示例:
groovy
//iBizModelDSL建模指令,目标:构建企业级项目管理系统日历部件
def de_project = "ProjectManagement.PROJECT"
def de_task = "ProjectManagement.TASK"
def de_meeting = "ProjectManagement.MEETING"
def mod_pm = "ProjectManagement"
// 主项目日历 - 月视图,支持多数据源
pssyscalendar(
psmoduleid: mod_pm,
codename: "ProjectMainCalendar",
name: "项目主日历",
psdeid: de_project,
calendarstyle: "MONTH",
navviewpos: "RIGHT",
navviewheight: 400.0,
navviewshowmode: 0,
enableedit: 1,
busyindicator: 1,
emptytext: "暂无日程安排",
pssyscssid: "System.CalendarTheme",
quickpsdetoolbarid: "ProjectManagement.QuickToolbar",
batpsdetoolbarid: "ProjectManagement.BatchToolbar"
){
// 项目任务项
pssyscalendaritem(
itemtype: "project_task",
name: "项目任务",
psdeid: de_task,
psdedsid: de_task + ".ActiveTasks",
beginpsdefid: de_task + ".PLAN_START_DATE",
endpsdefid: de_task + ".PLAN_END_DATE",
textpsdefid: de_task + ".TASK_NAME",
colorpsdefid: de_task + ".PRIORITY_COLOR",
bkcolorpsdefid: de_task + ".STATUS_BGCOLOR",
iconpsdefid: de_task + ".TASK_ICON",
enableviewactions: 1,
viewactions: 31, // 支持建立、编辑、查看、删除、拷贝
editmode: 1,
maxsize: 1000,
psdetoolbarid: "ProjectManagement.TaskContextMenu",
psdeviewbaseid: de_task + ".TaskDetailView"
){
pssyscalendaritemrv(
name: "edit",
psdeviewbaseid: de_task + ".TaskEditView"
)
pssyscalendaritemrv(
name: "view",
psdeviewbaseid: de_task + ".TaskDetailView"
)
}
// 会议安排项
pssyscalendaritem(
itemtype: "meeting",
name: "会议安排",
psdeid: de_meeting,
psdedsid: de_meeting + ".UpcomingMeetings",
beginpsdefid: de_meeting + ".MEETING_START_TIME",
endpsdefid: de_meeting + ".MEETING_END_TIME",
textpsdefid: de_meeting + ".MEETING_TITLE",
contentpsdefid: de_meeting + ".MEETING_AGENDA",
color: "#2E7D32",
bkcolor: "#E8F5E8",
enableviewactions: 1,
viewactions: 7, // 支持建立、编辑、查看
editmode: 0,
psdeviewbaseid: de_meeting + ".MeetingDetailView"
)
}
// 项目时间轴日历 - 用于项目进度跟踪
pssyscalendar(
psmoduleid: mod_pm,
codename: "ProjectTimeline",
name: "项目时间轴",
psdeid: de_project,
calendarstyle: "TIMELINE",
groupmode: "AUTO",
grouppsdefid: de_project + ".PROJECT_PHASE",
navviewpos: "BOTTOM",
navviewheight: 300.0,
enableedit: 1
){
pssyscalendaritem(
itemtype: "timeline_task",
name: "时间轴任务",
psdeid: de_task,
psdedsid: de_task + ".TimelineTasks",
beginpsdefid: de_task + ".ACTUAL_START_DATE",
endpsdefid: de_task + ".ACTUAL_END_DATE",
textpsdefid: de_task + ".TASK_NAME",
progresspsdefid: de_task + ".PROGRESS_PERCENT",
levelpsdefid: de_task + ".TASK_LEVEL",
enableviewactions: 1,
viewactions: 15
)
}
// 个人工作台日历 - 天视图,支持快速操作
pssyscalendar(
psmoduleid: mod_pm,
codename: "PersonalWorkbench",
name: "个人工作台",
psdeid: de_task,
calendarstyle: "DAY",
navviewpos: "NONE",
enableedit: 1,
quickpsdetoolbarid: "ProjectManagement.PersonalQuickToolbar"
){
pssyscalendaritem(
itemtype: "personal_tasks",
name: "个人任务",
psdeid: de_task,
psdedsid: de_task + ".PersonalTasks",
beginpsdefid: de_task + ".PLAN_START_DATE",
endpsdefid: de_task + ".PLAN_END_DATE",
textpsdefid: de_task + ".TASK_NAME",
colorpsdefid: de_task + ".URGENCY_COLOR",
enableviewactions: 1,
viewactions: 31,
editmode: 1
)
}
模型体系优势总结
iBizModel 系统日历部件模型体系通过层次化的模型设计和丰富的配置选项,为企业级应用提供了强大的时间数据管理能力。