将服务行业资源管理与 Microsoft Dynamics GP 集成





0/5 (0投票)
在企业资源规划和调度方面,现成的 CRM 和 ERP 解决方案缺乏直观自然的 the user interface(用户界面),无法有效管理现场服务和相关业务运营的这一关键方面——本文介绍了一种使用 Microsoft Dynamics GP 的策略……
引言
Microsoft Dynamics GP 是面向中型企业的领先的业务管理软件解决方案,为会计、财务管理、分销、采购、库存控制、制造、项目会计、工资单和人力资源提供强大的功能。但是,Dynamics GP 并未 readily available(现成可用)资源管理和物流以及服务调度和计划,更不用说用于 visually planning(直观计划)和 scheduling resources(调度资源)的 natural user interface(自然用户界面)了。PureLogic 选择 DBI Technologies 的 Solution Schedule .NET 和 Studio Controls .NET 组件来提供这一 essential functionality(基本功能)。
背景
PureLogic,作为一家拥有长期在 Microsoft Dynamics GP 平台开发和交付定制及打包解决方案的记录的 Microsoft 合作伙伴,面临着满足服务行业需求——特别是以现场服务为中心、visual planning and scheduling solution(直观计划和调度解决方案)的需求。经过 extensive debate and research(广泛的辩论和研究),PureLogic 选择使用与 Microsoft 创建 Dynamics GP 相同的 Dexterity 开发系统将他们的 eService/360 产品嵌入到 Dynamics GP 中,并 along with(以及)DBI Technologies 的 Solution Schedule .NET 和 Studio Controls .NET 组件,以实现 essential natural user interface and visual scheduling functionality(必不可少的自然用户界面和可视化调度功能)。
如何实现
“我们知道我们想要为客户提供的 the interface and functionality(界面和功能)的类型……” PureLogic 的产品开发总监 Jeffery Southworth 说。“……并且很高兴 Microsoft 的 Visual Studio Tools (VST) for Dynamics GP 可用,帮助我们充分利用 DBI 的 .NET 组件。DBI 不仅拥有我们所需的 Resource Scheduling and Dispatch(资源调度和分派)方面的 exactly what we needed(正是我们所需要的),我们还发现他们拥有一套 comprehensive collection(全面的集合)数据、演示和 general UI design controls(通用 UI 设计控件)。在评估和 stress testing(压力测试)了他们的 commercial controls(商业控件)以及进行了几次电话往来后,我们开始将 DBI 的 Solution Schedule .NET 和 Studio Controls .NET 组件 incorporated into our project(集成到我们的项目中)。”
“我对我们 implement these controls(实现这些控件)的速度非常满意。”Jeffery 继续说道。“我们充分利用了 DBI 的 custom component services(定制组件服务),这 really jump-started our development process(真正地启动了我们的开发过程)。他们的 consulting team(咨询团队)非常了解他们的业务,他们当然了解,因为他们 years building commercial scheduling and UI / Data software(多年来一直在构建商业调度和 UI/数据软件)。在承诺我们的 approach(方法)后三周内,我们就拥有了一个 fully functional drag and drop Service Dispatch and Scheduling application(功能齐全的拖放式服务调度和计划应用程序),包括与我们的 Service Order Processing module(服务订单处理模块)的双向集成。我们 amazed(惊讶)于我们能够如此快速地满足这一 complex requirement(复杂的要求),同时 still keep it intuitive and easy to use for our customers(仍然保持对客户来说直观且易于使用)。”
DBI Technologies 的 dbiList、dbiDate 和 dbiSchedule controls(控件)提供了一种 efficient way(高效的方式)来 present scheduled and unscheduled service orders(呈现已安排和未安排的服务订单)供调度员进行 sorting, selecting, scheduling, and unscheduling(排序、选择、安排和取消安排)。
要安排订单,调度员使用 DBI Calendar control(日历控件)选择计划日期,然后将未安排的订单从 dbiList 拖放到 eligible Team Resource(合格团队资源)的 available start time(可用开始时间)。然后,调度员可以通过 simply resizing the timebar with the mouse(简单地用鼠标调整时间条大小)来 increase or decrease the time period allocated to the order(增加或减少分配给订单的时间段)。使用 Microsoft VST for Dynamics GP,我们能够 easily include the following code(轻松地包含以下代码)在 `dbiSchedule` 控件的 `AfterTimeBarDrop()` 事件中,以更新 Dynamics GP 数据库中 underlying service order record(底层服务订单记录)上的 Team Resource(团队资源)、Arrival Date/Time(到达日期/时间)和 Departure Date/Time(离开日期/时间)。
//
Private Sub DbiSchedule1_AfterTimeBarDrop(sender As System.Object, _
e As Dbi.WinControl.Schedule.AfterTimeBarDropEventArgs) Handles DbiSchedule1.AfterTimeBarDrop
'Update team and arrival/departure date/time values
SmServiceTrxHdrOpenTable.Key = 1
SmServiceTrxHdrOpenTable.SmDocumentNumber.Value = e.TimeBarItem.Tag
iTableError1 = SmServiceTrxHdrOpenTable.Change() 'Passive lock
If iTableError1 = TableError.NoError Then
EService360.Tables.SmServiceTrxHdrOpen.SmTeamItemNumber.Value = _
e.ScheduleItem.Tag 'Team Item Number
EService360.Tables.SmServiceTrxHdrOpen.SmScheduledArrivalDate.Value = e.TimeBarItem.Start
EService360.Tables.SmServiceTrxHdrOpen.SmScheduledArrivalTime.Value = e.TimeBarItem.Start
EService360.Tables.SmServiceTrxHdrOpen.SmScheduledDepartureDate.Value = e.TimeBarItem.End
EService360.Tables.SmServiceTrxHdrOpen.SmScheduledDepartureTime.Value = e.TimeBarItem.End
iTableError1 = EService360.Tables.SmServiceTrxHdrOpen.Save()
If iTableError1 = TableError.NoError Then
Me.lstScheduledOrders.Items.Add(Me.lstUnscheduledOrders.SelectedItems(0).Text)
Me.lstUnscheduledOrders.Items.Remove_
(Me.lstUnscheduledOrders.SelectedItems(0)) 'Selected item
Select Case Me.lstScheduledOrders.SortColumn
Case 0 'Order Number
Me.lstScheduledOrders.Sort(0)
Case 1 'Name
Me.lstScheduledOrders.Sort(1)
Case 2 'Address
Me.lstScheduledOrders.Sort(2)
End Select
sTimeBarTip = e.TimeBarItem.Text
Else
Dynamics.Forms.SyVisualStudioHelper.Functions.DexError.Invoke_
("Error " + Str(iTableError1) +
": Unable to save record in SM Service Trx Header Open table.")
Exit Sub
End If
Else
Dynamics.Forms.SyVisualStudioHelper.Functions.DexError.Invoke_
("Error " + Str(iTableError1) +
": Unable to lock record in SM Service Trx Header Open table.")
Exit Sub
End If
End Sub
//
//
var i = 0;
...
要取消订单,调度员 simply selects an order(只需选择一个订单) from the Scheduled Service Order dbiList 并将其拖到 Unscheduled Service Order dbiList。然后,我们能够在 dbiList 的 `lstUnscheduledOrders_DropList()` 事件中 include the following code(包含以下代码),以从 dbiSchedule 中移除时间条,以及从 Dynamics GP 数据库中 underlying service order(底层服务订单)移除 Team Resource(团队资源)、Arrival Date/Time(到达日期/时间)和 Departure Date/Time(离开日期/时间)。
//
'Update arrival/departure date/time values
EService360.Tables.SmServiceTrxHdrOpen.SmTeamItemNumber.Clear() 'Team Item Number
EService360.Tables.SmServiceTrxHdrOpen.SmScheduledArrivalDate.Clear()
EService360.Tables.SmServiceTrxHdrOpen.SmScheduledArrivalTime.Clear()
EService360.Tables.SmServiceTrxHdrOpen.SmScheduledDepartureDate.Clear()
EService360.Tables.SmServiceTrxHdrOpen.SmScheduledDepartureTime.Clear()
iTableError1 = EService360.Tables.SmServiceTrxHdrOpen.Save()
If iTableError1 = TableError.NoError Then
'Add the new node into the list
Me.lstUnscheduledOrders.Items.Add(Me.lstScheduledOrders.SelectedItems(0).Text)
Me.lstUnscheduledOrders.Tag = Me.lstScheduledOrders.Tag
Select Case Me.lstUnscheduledOrders.SortColumn
Case 0 'Order Number
Me.lstUnscheduledOrders.Sort(0)
Case 1 'Name
Me.lstUnscheduledOrders.Sort(1)
Case 2 'Address
Me.lstUnscheduledOrders.Sort(2)
End Select
'Select unscheduled order
For Each oNodeItem In Me.lstUnscheduledOrders.Items
If oNodeItem.GetCellText(0) = Me.lstScheduledOrders.Tag Then
oNodeItem.Selected = True
Me.lstUnscheduledOrders.EnsureVisible_(oNodeItem) 'ensure the selected item
'is visible in the control's viewing area
Exit For
End If
Next
'Remove timebar from schedule
Dim bExitAll As Boolean
For iTeamItem As Integer = 0 To Me.DbiSchedule1.Items.Count - 1
For iTimeBarItem As Integer = 0 To _
Me.DbiSchedule1.Items(iTeamItem).TimeBars.Count - 1
If Me.DbiSchedule1.Items(iTeamItem).TimeBars_
(iTimeBarItem).Tag = Me.lstUnscheduledOrders.Tag Then
Me.DbiSchedule1.Items(iTeamItem).TimeBars(iTimeBarItem).End =
Me.DbiSchedule1.Items(iTeamItem).TimeBars_
(iTimeBarItem).Start 'Workaround to clear RulerSelectColor
Me.DbiSchedule1.Items(iTeamItem).TimeBars.Remove_
(Me.DbiSchedule1.Items(iTeamItem).TimeBars(iTimeBarItem))
Me.DbiScheduleObject1.Start = Me.DbiDate1.Date.AddHours_
(Me.cboScheduleStartTime.SelectedIndex)
Me.DbiScheduleObject1.End = Me.DbiDate1.Date.AddDays(1)
bExitAll = True
Exit For
End If
Next
If bExitAll = True Then
Exit For
End If
Next
'Remove the original dbiNodeItem from the source dbiList control
Me.lstScheduledOrders.Items.Remove_
(Me.lstScheduledOrders.SelectedItems(0)) 'First selected item
'Unselect all timebar items
For iTimeBarSelected As Integer = 0 To DbiSchedule1.SelectedTimeBars.Count - 1
DbiSchedule1.SelectedTimeBars(iTimeBarSelected).IsSelected = False
Next
//
//
And finally(最后),为了在 Service Dispatch and Scheduling application(服务调度和计划应用程序)和我们的 Service Order Processing module(服务订单处理模块)之间创建 seamless bidirectional integration(无缝双向集成),我们added the following code(添加了以下代码)到 dbiSchedule 控件的 `TimeBarDoubleClick()` 事件中,该事件会自动打开 Service Transaction Entry window(服务交易录入窗口)并显示下面的 Service Order(服务订单)。
//
Private Sub DbiSchedule1_TimeBarDoubleClick(sender As System.Object, _
e As Dbi.WinControl.Schedule.TimeBarDoubleClickEventArgs) _
Handles DbiSchedule1.TimeBarDoubleClick
If cboBranch.SelectedIndex >= 0 Then
If EService360.Forms.SmServiceTrxEntry.SmServiceTrxEntry.SmBranchId.Value = _
cboBranch.SelectedItem And
EService360.Forms.SmServiceTrxEntry.SmServiceTrxEntry.SmDocumentType.Value = 2 And
EService360.Forms.SmServiceTrxEntry.SmServiceTrxEntry.SmDocumentNumber.Value = _
e.TimeBarItem.Tag And
EService360.Forms.SmServiceTrxEntry.SmServiceTrxEntry.DisplayExistingRecord.Value = _
True Then 'User is displaying this record
EService360.Forms.SmServiceTrxEntry.Open() ' bring to front
Else
EService360.Forms.SmServiceTrxEntry.SmServiceTrxEntry.ClearButton.RunValidate()
EService360.Forms.SmServiceTrxEntry.SmServiceTrxEntry.SmBranchId.Value = _
cboBranch.SelectedItem
EService360.Forms.SmServiceTrxEntry.SmServiceTrxEntry.SmBranchId.RunValidate()
EService360.Forms.SmServiceTrxEntry.SmServiceTrxEntry.SmDocumentType.Value = 2
EService360.Forms.SmServiceTrxEntry.SmServiceTrxEntry.SmDocumentNumber.Value = _
e.TimeBarItem.Tag
EService360.Forms.SmServiceTrxEntry.SmServiceTrxEntry.DisplayExistingRecord.RunValidate()
EService360.Forms.SmServiceTrxEntry.SmServiceTrxEntry.SmCustomerName.Focus()
EService360.Forms.SmServiceTrxEntry.Open() ' bring to front
End If
End If
End Sub
//
//
反之亦然,当用户单击 Dynamics GP 中的 Service Transaction Entry window(服务交易录入窗口)上的上述高亮按钮时,trigger logic(触发逻辑)会自动打开 Service Dispatch and Scheduling window(服务调度和计划窗口)并高亮显示选定的 Service Order(服务订单)。
关于作者
- PureLogic Incorporated - www.mypurelogic.com
- DBI Technologies Inc. - www.dbi-tech.com