处理多个表的工作流程

时间:2016-10-07 21:50:01

标签: vba ms-access

在重新设计CRM时,我们需要模块化我们的工作流程。由于我们处理的各种活动和活动,我需要创建一个与各种案例项具有一对多关系的主案例。但是,每个案例项都需要有自己的关联数据。

我当前的设计涉及一组表格:

  • Case_Calls
  • Case_Emails
  • 等...

我们总共有十几个不同的项目。

我正在尝试找出一种组织表单以适应这些不同工作流程的好方法。理想的工作流程可能涉及在给定交互期间向案例添加多个项目,因此我需要一种理智的方式来在同一表单中处理它们。

最初,所有内容都是文本模板化的,并添加到单个“长文本”字段中。这使得过滤数据或运行报告非常困难,因此对我们来说并不是很有用。

下一次迭代涉及一个选项卡控件,每个案例项都有一个不同的选项卡。然而,这会导致行为问题,并且它不能优雅地处理我正在寻找的不同项目类型的数量;其中附加标签导致需要水平滚动,只会让所有人生气。

所以现在我不知所措。如何才能最好地设计易用性?

编辑:正如所建议的,这里是当前(破碎)迭代的一些截图:

在每个选项卡包含子表单的意义上它都被破坏了,但不能保证在创建子表单记录之前创建一个Case。也没有直接的方法来强制执行仅限创建的工作流程。

3 个答案:

答案 0 :(得分:3)

要修复未链接的记录问题,您需要在子窗体的属性中设置链接主字段和链接子字段。在下面的屏幕截图中,我的链接字段是SUBSCRIBER_ID,你的是Case ID(或者实际的varname是什么)。

enter image description here

编辑:提问者已经执行了上述操作,因此该步骤已涵盖

您可以在“新呼叫”按钮中为空案例ID添加VBA检查(或者创建新的呼叫/电子邮件记录)。像这样:

If IsNull(Me.Case_ID) Then
    MsgBox "Before adding a call you need to create a Case ID, please do so first"
    Me.Undo
Else
    [Whatever the button really does]
End If

根据您放置代码的位置,您可能不需要Me.Undo。如果它点击按钮你可能不会。如果您在呼叫/电子邮件ID更新之前,您可能会这样做。

关于滚动,您可以,而不是显示整个选项卡式子窗体框,为每种类型的数据提供一个按钮,当按下按钮时,该按钮会弹出一个表单,仅显示该数据。因此,对于通话,您可以在重叠窗口中弹出类似于您在上一屏幕截图底部显示的内容,而不显示标签。您需要弹出窗体上的“关闭”按钮才能返回主窗体。

答案 1 :(得分:3)

你不会解决这个问题:

无法保证在创建子表单记录之前创建案例

他们必须在创建相关子项之前创建案例标题行。是否通过选项卡,按钮或甚至子类型列表打开相关子表单并不重要,它们在功能上是相同的。

如果他们真的想要创建一个没有案例的孩子,你可以创建一个孤儿院'案件行,并让他们在那里添加,但他们会要求一种方法将孩子从孤儿院搬到他们应该首先选择的案件。

如果这是您的问题:creating a record in subform does not enforce a record in the main form. 你可以禁用或隐藏子表单,直到选择父案例记录?您在什么条件下获得分配给case 0的子表单中的新行? Case 0是否存在?如果是这样,那就是你的孤儿院。

答案 2 :(得分:3)

也许你应该完全忘记你的旧系统并重新思考。

您能想到的当前情景:

您的员工正在接听案件的电话或备注,目前他们正在用纸张,Excel或您的应用程序将其写下来!他们肯定会注意到哪个地方打电话,什么时候打电话? 这是你的关键点!

作为开发人员,您必须确保用户遵循正确的流程,或者您必须准备不同的方案。

实际上,如果案件记录不存在,将不会有任何关于“案件”的电子邮件。遵循此规则,您的应用不应允许在没有有效案例记录的情况下发送电子邮件/记笔记。

如果在收到笔记/电子邮件时无法提供案例详细信息,您仍必须使用您拥有的任何可用数据创建“案例”记录。例如谁采取了行动?什么日期时间?使用此数据,您可以插入案例记录,然后允许您的员工继续添加备注,电子邮件。

让我们假设:

  • 所有子表单都包含有效的链接主子值
  • 您正在打开案例表单以添加新记录:
docmd.OpenForm "your_case_form",acNormal,,,acFormAdd

在“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

上面的代码将输入用户名和当前时间戳,自动生成案例记录(假设您的案例表没有任何“非空”字段且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

重点是,您需要确保在允许子记录之前创建父记录。