在重新设计我们的CRM时,我们需要模块化我们的工作流程.由于我们处理的各种活动和活动,我需要创建一个与各种案例项具有一对多关系的主案例.但是,每个案例项都需要有自己的关联数据.
我当前的设计涉及一组表:
我们总共有十几个不同的项目.
我正试图找出一种好方法来组织我的表单以适应这些不同的工作流程.理想的工作流程可能涉及在给定交互期间向案例添加多个项目,因此我需要一种理智的方式来在同一表单中处理它们.
最初,所有内容都是文本模板化的,并添加到单个"长文本"字段中.这使得过滤数据或运行报告非常困难,因此对我们来说并不是很有用.
下一次迭代涉及一个选项卡控件,每个案例项都有一个不同的选项卡.然而,这会导致行为问题,并且它不能优雅地处理我正在寻找的不同项目类型的数量; 其中附加标签导致需要水平滚动,只是让每个人都生气.
所以现在我不知所措.如何才能最好地设计易用性?
编辑:正如所建议的,这里是当前(破碎)迭代的一些截图:

它在每个选项卡包含子表单的意义上被打破,但不能保证在创建子表单记录之前创建一个Case.也没有直接的方法来以这种方式强制创建纯工作流程.
也许你应该完全忘记你的旧系统并进行新的思考。
我能想到的你当前的场景:
您的员工正在接听案例的电话或做笔记,他们目前正在将其记录在纸上、Excel 或您的应用程序上!他们肯定会在某个地方记下谁打来电话以及什么时间打来的?这就是你的要点!
作为开发人员,您必须确保用户遵循正确的流程,否则您必须准备不同的场景。
实际上,如果案例记录不存在,则不会有任何有关“案例”的电子邮件。通过遵循此规则,您的应用程序不应允许在没有有效案例记录的情况下发送电子邮件/做笔记。
如果在收到注释/电子邮件时案例详细信息不可用,您仍然必须使用您拥有的任何可用数据创建“案例”记录。例如谁行动了?什么日期时间?有了这些数据,您可以插入案例记录,然后允许您的员工继续添加注释、电子邮件。
让我们假设:
docmd.OpenForm "your_case_form",acNormal,,,acFormAdd
Run Code Online (Sandbox Code Playgroud)
在“your_case_form”form_load 事件中,您可以检查表单是否已准备好输入新详细信息。像这样的东西。
Private Sub Form_Load()
if( Me.NewRecord) then
me.txt_added_by.value = your_way_of_username
me.txt_added_date.value = now()
END IF
End Sub
Run Code Online (Sandbox Code Playgroud)
上面的代码将输入用户名和当前时间戳,自动生成案例记录(假设您的案例表没有任何“非空”字段并且 ID 是自动编号)
然后,您的员工可以移动到任何子表单,这将自动触发案例表的保存操作,您就拥有了案例记录!
在插入子表单之前,您还可以检查父/案例记录是否可用。
if (nz(me.parent!txt_case_id.value,0) =0) then
'case id not found..
'you can advise the user to enter anything on the case section to create a record or you can use SQL to insert a record
'or you could cancel the insert, move/set focus to parent form. add datetime / username to create record
end if
Run Code Online (Sandbox Code Playgroud)
关键是,您需要确保在允许子记录之前创建父记录。