上一节教程我们介绍了处理接收事件的标准流程。本节教程,我们将根据该流程具体介绍管理“客户支持请求”这类集合的程序。
客户支持请求是一种由您的客户发出的接收事件(邮件,电话或者传真等等)指派的集合,它在ERP5中非常重要,因为它使您可以非常有效地处理您与公司内部人员,客户以及供应商之间的交流,这家帮助您巩固公司的客户关系。
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/init_test_environment">init</span> | ||
openAndWait | ${base_url}/Zuite_setUpIncomingEventTest | |
verifyTextPresent | Init Ok | |
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities </span> | ||
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/login_as_functional_test_user">Login As Functional Test User</span> |
根据上一教程所学,下图是接收事件的标准流程:声明已接收,定义事件接收人,创建跟进集合以及交付事件。
现在我们就来详细介绍如何实践该流程以处理客户支持请求。
该教程是基于一个情景来帮助您理解如何管理客户支持请求以及该类型集合的角色。
Z Company是一间电力供应商,它是一个使用ERP5系统的VIFIB客户。John Scott Doh是Z Company的市场经理。从今年开始,和其他公司部门一起,他开始采用ERP5来管理市场部们,特别是运用ERP5 CRM来操作客户业务。刚开始使用ERP5系统时,他在进行系统配置时遇到一些困难,于是他向ERP5支持团队发送邮件已寻求帮助。当ERP5支持团队一名员工接受到该邮件,他就在ERP5中创建了一个新的接收事件,从而咨询VIFIB公司中谁可以处理John Doh的请求。
现在请根据该情景,结合您所学的接收事件的标准处理流程,来看看通过ERP5来管理客户支持请求集合都有那些步骤。
在ERP5 CRM中,为了更好地管理客户关系,一旦我们收到来自客户的一封邮件,一通电话或者一个传真,我们就需要从支持请求发送人的人文件中建立一个新的接收事件,从而通告组织我们收到来自客户的信息。这样,所有来自客户的支持请求都会被系统及时记录下来,然后被指派给特定人员进行处理。
本例中,我们将首先创建一个新的接收事件已通知客户支持部门我们收到来自John Doh的支持请求邮件。由于John Doh是事件发送人,我们将从John Doh的人文件中直接建立这个新的接收事件,从而使该事件在ERP5中直接和John Doh连接。
要直接从支持请求发送人John Doh的人文件中建立新事件, 首先需要进入ERP5中John Doh的人文件。请在ERP5主页中点击“浏览”标签,然后点击“人”模块。
selectAndWait | //select[@name="select_module"] | Persons |
我们看到ERP5存储的人文件总结表,点击John Doh一栏以打开他的人文件。
<tal:block tal:content="structure python: here.Zuite_generateListboxBrowsing(listbox_selection=(['title', 'ZUITE-TEST-INCOMING-EVENT-PERSON-SUPERVISOR'],), enter_object=True)"/> | ||
verifyText | //div[@id="breadcrumb"]/a[2] | Persons |
verifyText | //div[@id="breadcrumb"]/a[3] | ZUITE-TEST-INCOMING-EVENT-PERSON-SUPERVISOR |
进入John Doh的人文件后,点击事件标签已到达John Doh的事件列表。
clickAndWait | link=Events |
如图所示,John Doh的事件列表是空白的,即,VIFIB至今还未于John Doh有过任何交流。
verifyText | //span[@class="listbox-current-page-total-number"] | 0 records |
由于我们接收的邮件信息是来自客户John Doh的支持请求,现在就让我们创建一个与John Doh相连接的新事件来记录该信息。请打开“操作”菜单并选择“创建新事件”。
selectAndWait | //select[@name="select_action"] | Create New Event |
根据前面教程“在活动集合中建立事件”,当新事件建立时,您可以首先设置一些基本信息,例如事件标题,类型和方向等。和前面教程的唯一不同在于设置事件方向为“进”,因为现在您要创建的是一个进入组织的事件,以告知大家您接收到一封邮件,然后您会将邮件输入到ERP5系统从而指派具体人员进行操作。
现在您可以将接收的来自客户John Doh的邮件复制并拷贝到“信息”区域,当然您也可以在之后事件编辑页面进行该操作。
在此教程中,请勾选保持“草拟”状态。接下来,我们将看到如何手工操作来声明事件已接收。
完成以上操作后,请点击“创建新事件”按钮。
select | //select[@name="field_your_portal_type"] | Mail Message |
type | //input[@name="field_your_title"] | ZUITE-TEST-INCOMING-EVENT-EVENT-001 |
select | //select[@name="field_your_resource"] | Test Functional Incoming Service |
click | //input[@name="field_your_direction" and @value="incoming"] | |
click | //input[@name="field_your_keep_draft"] | |
clickAndWait | //button[@id="dialog_submit_button"] |
正如红框所示,新事件已被创建,当前为“草拟”状态。蓝框区域是发送人与接收人区域,它们已被自动填写。这项自动操作根据以下规则:发送人是John Doh,因为接收事件是通过他的人文件创建的。这就告知大家我们从某处接收到客户John Doh的邮件。接收人是许晶晶,因为是该ERP5用户建立了该接收事件。但是,这项信息可以在之后被更改,如果我们需要将该接收事件指派给另一位组织成员进行处理。
verifyText | //div[@id="transition_message"] | New event created. |
verifyText | //label[normalize-space(text())='State']/../div | Draft |
现在,请请将您从客户John Doh接收到的邮件复制并粘帖到红框区域:文本格式。该区域目的在于告知您的组织成员您接收的邮件信息,这也就是该新建接收事件的内容。如果您在前面的步骤已经完成此项操作拿着里您只需进行查看,有需要的话再进行编辑。最后,请务必保存您的数据输入。
type | //textarea[@name="field_my_text_content"] | ZUITE-TEST-EVENT-CONTENT this is the content of our event. |
clickAndWait | //button[@name="Base_edit:method"] |
现在您已经草拟了新接收事件的必要信息,就需要向ERP5确认您已接收这封来自客户的邮件,该操作将是事件的状态变为“已接收”。
请打开“操作”菜单并选择“声明已接收”。
selectAndWait | //select[@name="select_action"] | Declare as Received |
clickAndWait | //button[@id="dialog_submit_button"] |
如图所示,当我们声明事件已接收后,新建事件的状态就从“草拟”转变为“已接收”,这就是ERP5系统接收事件的第一个状态,正如图左方接收事件流程所示。
storeValue | //textarea[@name="field_my_destination_title_list"] | user_title |
verifyText | //label[normalize-space(text())='State']/../div | Received |
clickAndWait | //button[@name="Base_edit:method"] |
现在就要定义谁应该处理这个事件--一名为John Doh提供问题答复的ERP5支持团队的成员。
本例中,我们指派组织员工徐英杰来处理该事件。首先,更改“接收人”条目人员姓名。本例中,将许晶晶(系统默认设置的事件接收人)更改为徐英杰。然后,请保存该项改动。
该步骤目的在于指示徐英杰会接受这个来自客户的邮件,并将负责对其进行处理。因此,我们“接收”该事件之后,它将会以“待交付的已接收事件”出现在徐英杰的ERP5系统的工作列表上,这我们将会在下面的介绍中看到。以这种方式,员工徐英杰就会知道他需要负责处理一个新建的接收事件。
根据接收事件的标准流程,如果事件可以简单处理,我们就从该接收事件的“操作”菜单直接创建答复,如图蓝框选项所示。当如果接收事件需要以复杂方式处理,就会需要一个包含许多相关事件的集合来处理,正如本例中客户支持请求,因此我们就需要从接收事件的“操作”菜单中创建跟进集合,如图红框所示。
接下来就需要将该事件指派给一个集合。如果您还记得,一个集合可以是一项活动,一次销售机会,一个客户支持请求,一次会议等。本例中,该客户在其邮件中提出支持请求,因此很显然,我们就应该创建一个客户支持请求集合。请打开“操作”菜单并选择“创建跟进集合”选项。
selectAndWait | //select[@name="select_action"] | Create Follow-up Ticket |
现在您需要设置事件指派到的集合的信息。在第一个条目,请输入集合标题。该标题将会在事件文件的“跟进”条目中显示。然后,请选择集合类型。本例中,我们选择“客户支持请求”,将来我们就可以在ERP5“模块”菜单中的“客户支持请求”模块中轻松找到该集合。创建之后,该集合就可以接收许多不同的相关事件,例如来自ERP5支持部门员工对客户的答复,以及客户John Doh进一步的问题。当您完成信息输入后,请点击“创建跟进集合”。
type | //input[@name="field_your_follow_up_ticket_title"] | ZUITE-TEST-INCOMING-EVENT-TICKET-TITLE-001 |
select | //select[@name="field_your_follow_up_ticket_type"] | Support Request |
clickAndWait | //button[@id="dialog_submit_button"] |
如图左上方显示,该接收事件的跟进集合已被创建。您可以看见该集合已经被显示在该事件页面的“跟进”条目中。
跟进事件的创建是为了包含ERP5支持部门与客户之间相互发送的与发起事件相关的所有事件。在所有事件页面中,我们可以通过点击“跟进”条目右方的飞机图标轻松到达该集合。
verifyValue | //input[@name="field_my_default_follow_up_title"] | ZUITE-TEST-INCOMING-EVENT-TICKET-TITLE-001 |
clickAndWait | //input[@name="field_my_default_follow_up_title"]/../a |
|
verifyText | //div[@id="breadcrumb"]/a[2] | Support Requests |
storeLocation | support_request | |
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities </span> | ||
openAndWait | ${base_url}/Base_clearCache | |
assertTextPresent | Cleared. |
现在我们通过接收事件的“跟进”条目进入到该事件的跟进集合--刚刚建立的客户支持请求集合。如图红框所示,您可以在这里定义该集合的运行经理,负责人以及操作人,因此他们就可以通过各自ERP5系统的工作列表获悉他们将对该集合负责。
如图蓝框所示,您已经可以看到建立该客户支持请求集合的事件已经被显示在该集合的事件列表中。从现在开始,发生在集合操作人与客户之间的每项交流都会被作为事件收集在该集合文件中,并被清晰地显示在该集合的事件列表中。
现在我们可以返回接收事件并介绍如何向客户John Doe的问题提供答复。
openAndWait | ${support_request} | |
type | //input[@name="subfield_field_my_start_date_year"] | 2011 |
type | //input[@name="subfield_field_my_start_date_month"] | 01 |
type | //input[@name="subfield_field_my_start_date_day"] | 12 |
type | //input[@name="subfield_field_my_stop_date_year"] | 2012 |
type | //input[@name="subfield_field_my_stop_date_month"] | 01 |
type | //input[@name="subfield_field_my_stop_date_day"] | 02 |
type | //input[@name="field_my_quantity"] | 10.0 |
select | //select[@name="field_my_quantity_unit"] | Time/Day |
type | //input[@name="field_my_price"] | 20.00 |
select | //select[@name="field_my_price_currency"] | EUR |
clickAndWait | //button[@name="Base_edit:method"] |
现在该接收事件已接收,接收人已被定义,跟进集合已被创建,于是就轮到“接收人”--应该为客户提供支持的人来进行操作了。接下来所有发生在事件接收人--ERP5支持部门员工以及支持请求提出客户之间的所有交流都将被记录在我们刚刚创建的客户支持请求集合中。
为了进行该部分操作,我们会通过切换用户来理解用户如何获悉他们有新的事件需要处理。
请点击ERP5主页“我的菜单”中注销。注销之后,我们已徐英杰为用户登入ERP5系统,从而帮助您理解接收事件如何显示在用户的工作列表中。
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/login_as_functional_another_test_user">Login As Another Functional Test User</span> | ||
openAndWait | ${base_url}/view | |
selectAndWait | //select[@name="select_module"] | Events |
英杰现在已经登入系统,当打开他的工作列表(“我的菜单”),他看见有1项“待交付的已接收事件”需要处理。请点击该栏。
现在我们通过工作列表进入到待交付的已接收事件列表。所有被声明“已接收”并且被指派给具体“接收人”都被显示在该列表中。为了获悉谁将对哪些具体事件负责,每位用户都需要在接收人条目中输入自己的名字,然后他就可以点击以他为接收人的事件一栏从而进入该事件页面。
本例中,我们看到通过英杰的工作列表进入到待交付的已接收事件列表中仅有1项事件(通常有会有更多接收人,因此就有有更多项事件)。这项事件正式以徐英杰为接收人,因此他就可以点击该栏来处理该事件。
verifyText | //div[@id="breadcrumb"]/a[2] | Events |
<tal:block tal:content="structure python: here.Zuite_generateListboxBrowsing(listbox_selection=(['title', 'ZUITE-TEST-INCOMING-EVENT-EVENT-001'],), enter_object=True)"/> |
该事件的状态已经从“已接收”转变为“已交付”,说明已经有人声明对其负责。
交付操作是处理接收事件的最后步骤,接收人告知所有人它将负责处理该事件。
verifyText | //label[normalize-space(text())='State']/../div | Submitted |
verifyValue | //input[@name="field_my_title"] | ZUITE-TEST-INCOMING-EVENT-TICKET-TITLE-001 |
现在就需要对客户进行答复。虽然我们为该接收事件专门建立了一个跟进集合来整合所有与该发起事件相关的交流,但它和不需要建立跟进集合的简单事件一样,可以通过该事件页面的“操作”菜单来建立对客户的答复。唯一的区别是,所有由该发起事件创建的事件都会通过“发起事件”条目联系到该事件,并被记录在我们刚刚创建的跟进集合中。
请点击事件页面的“操作”菜单中“创建答复”选项来创建对客户John Doh的答复。
clickAndWait | link=ZUITE-TEST-INCOMING-EVENT-EVENT-001 | |
verifyValue | //input[@name="field_my_title"] | ZUITE-TEST-INCOMING-EVENT-EVENT-001 |
selectAndWait | //select[@name="select_action"] | Create Response |
现在我们进入到答复事件的编辑页面。首先请在“信息”区域编辑您的答复,然后查看该页面的其他信息,例如标题,日期等。当您确认所有信息都被正确填写后,点击“创建答复”,然后该答复将被直接发送给客户,并被系统自动已“已发送”状态创建为一个新的发出事件。
注意:您必须非常谨慎地点击“创建答复”,因为这项操作之后,您的信息将被直接发送给您的客户,而无法再被修改。
type | //textarea[@name="field_your_response_event_text_content"] | Some response |
clickAndWait | //button[@id="dialog_submit_button"] |
现在我们返回到发起事件--来自John Doh的邮件信息事件。如图显示“答复已创建”,这就说明这项请求信息已经被答复了。
您还可以进入已发给客户的答复事件以查看详细信息,只需点击该事件的“相关事件”标签。
storeAttribute | //div[@id="breadcrumb"]/a[3]@href | waitack |
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities </span> | ||
openAndWait | ${waitack} |
经过对来自John Doh的支持请求信息这项发起事件“声明已接收”,“交付”直至“创建答复”,现在我们进入了相关事件页面。
由于我们刚刚对来自John Doh的发起事件创建答复,在该“相关事件”页面的事件列表中仅有一项事件,即我们希望查看的答复邮件。点击该事件一栏以大开该事件文件。
clickAndWait | link=Related Events | |
verifyText | //span[@class="listbox-current-page-total-number"] | 1 records |
clickAndWait | link=Re: ZUITE-TEST-INCOMING-EVENT-EVENT-001 |
现在我们就进入了由对发起事件“创建答复”这项操作自动建立的新事件。当前事件状态是“已发送”,这表明包含答复的邮件事件已经被发送给客户John Doh的邮箱。
verifyText | //label[normalize-space(text())='State']/../div | Sent |
select | //select[@name="field_my_resource"] | Test Functional Incoming Service |
type | //input[@name="field_my_source_title"] | ${user_title} |
clickAndWait | //button[@name="Base_edit:method"] | |
selectAndWait | //select[@name="select_action"] | Deliver |
clickAndWait | //button[@id="dialog_submit_button"] | |
verifyText | //label[normalize-space(text())='State']/../div | Delivered |
与客户沟通之后,我们会不时需要查找相关事件,因此我们就可以运用发起事件的跟进集合,它就是被创建用来集合所有与该客户的发起事件相关的事件。
如果您还记得该集合是一个客户支持请求集合,您就可以通过点击ERP5主页的“浏览”标签,然后打开“客户支持请求”模块来进入客户支持请求文件列表。
selectAndWait | //select[@name="select_module"] | Events |
verifyText | //div[@id="breadcrumb"]/a[2] | Events |
红框所示就是我们将接收事件指派给的客户支持请求集合。点击该栏已打开该客户支持请求集合文件。
clickAndWait | //button[@name="Folder_show:method"] | |
type | //tr[@class='listbox-search-line']/th[@class="listbox-table-filter-cell"]/input[@name='listbox_title'] | %ZUITE-TEST-INCOMING-EVENT-EVENT-001 |
clickAndWait | //input[@name="Base_doSelect:method"] | |
verifyText | //span[@class="listbox-current-page-total-number"] | 2 records |
我们首先看到该集合中没有非常具体的信息,因此您现在就可以来填写它们。实际上,我们刚才只是建立了该集合但还没对它进行编辑。您可以查阅教程“建立活动集合来回顾哪些区域有哪些功能(活动集合和客户支持请求集合非常相似)。
红框区域显示所有存储在该集合的相关事件。如图所示,有三项事件被显示在该集合的事件列表:第一条是为告知组织成员而建立的来自John Doh的接收事件。该事件处于“已交付”状态,因为用户徐英杰已经交付该事件。第二和第三条是事件接收人徐英杰为客户John Doh进行答复而创建的事件。它们处于“已发送”状态,因为这些事件已经被成功发送给客户。
从现在开始,该客户支持请求集合就可被用来收集客户John Doh发来的更多的关于系统配置的问题。如果您需要在该客户支持请求集合中创建新的事件,只需打开该集合页面的“操作”菜单并选择“创建新事件”,那么该事件就会被创建并自动添加到该集合,如同前面教程“在活动集合中建立事件”所介绍的。
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/login_as_manager">Login As Manager</span> | ||
openAndWait | ${base_url}/view | |
selectAndWait | //select[@name="select_module"] | Support Requests |
<tal:block tal:content="structure python: here.Zuite_generateListboxBrowsing(listbox_selection=(['title', 'ZUITE-TEST-INCOMING-EVENT-TICKET-TITLE-001'],), enter_object=True)"/> | ||
verifyText | //span[@class="listbox-current-page-total-number"] | 2 records |
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/login_as_manager">Login As Manager</span> | ||
openAndWait | ${base_url}/Zuite_tearDownIncomingEventTest | |
verifyTextPresent | Clean Ok | |
<span metal:use-macro="container/Zuite_viewTestMacroLibrary/macros/wait_for_activities"> Wait for activities </span> |
For more information, please contact Jean-Paul, CEO of Nexedi (+33 629 02 44 25).