我开始使用QuickBooks SDK,到目前为止我能够查询Employees没有问题,如下所示:
_sessionManager.OpenConnection("", "<software>")
_sessionManager.BeginSession("", ENOpenMode.omDontCare)
Dim requestSet As IMsgSetRequest = GetLatestMsgSetRequest(_sessionManager)
' Initialize the message set request object
requestSet.Attributes.OnError = ENRqOnError.roeStop
Dim empQuery As IEmployeeQuery = requestSet.AppendEmployeeQueryRq()
' Do the request and get the response message set object
Dim responseSet As IMsgSetResponse = _sessionManager.DoRequests(requestSet)
Dim response As IResponse = responseSet.ResponseList.GetAt(0)
Dim empRetList As IEmployeeRetList = response.Detail
....
_sessionManager.EndSession()
_sessionManager.CloseConnection()
这将为我提供一份我可以迭代的员工列表。这适用于基本员工数据,例如姓名,出生日期等,但有一个EmployeePayrollInfo
属性似乎不会与IEmployeeQuery
一起返回。
我看到有一个接口IEmployeePayrollInfo
,但我还没有弄清楚是否有办法查询它。我看到有报告相关的工资单信息查询,但我试图直接查询EmployeePayrollInfo
,以检索休假信息。这可以通过QBFC完成吗?
修改
我能够正常工作,请参阅下面接受的答案。
答案 0 :(得分:1)
对于搜索相同功能的任何人,我能够找到的唯一信息似乎表明Intuit已出于安全原因从QuickBooks SDK中明确排除了此功能。我们最终要解决的问题是在QuickBooks中创建一个自定义报告,其中包含我们需要的所有信息,将其导出为CSV文件,然后在我们的软件中相应地导入。同样的最终结果,但比我们原先希望的步骤多了几步。希望Intuit会改变他们的想法,将其从SDK中排除。
<强>更新强>
我终于能够查询EmployeePayrollInfo
,需要的是将“EmployeePayrollInfo”添加到查询本身,如下所示:
empQuery.IncludeRetElementList.Add("EmployeePayrollInfo")
所以现在代码看起来像这样:
Dim sessionManager As New QBSessionManager
sessionManager.OpenConnection2("", "<software>", ENConnectionType.ctLocalQBD)
sessionManager.BeginSession("", ENOpenMode.omDontCare)
Dim requestSet As IMsgSetRequest = sessionManager.CreateMsgSetRequest("US", 12, 0)
requestSet.Attributes.OnError = ENRqOnError.roeStop
Dim empQuery As IEmployeeQuery = requestSet.AppendEmployeeQueryRq()
empQuery.IncludeRetElementList.Add("EmployeePayrollInfo") ' this line did the trick!
Dim responseSet As IMsgSetResponse = sessionManager.DoRequests(requestSet)
Dim response As IResponse = responseSet.ResponseList.GetAt(0)
Dim empRetList As IEmployeeRetList = response.Detail
If empRetList.Count > 0 Then
For i As Integer = 0 To empRetList.Count - 1
Dim emp As IEmployeeRet = empRetList.GetAt(i)
If emp IsNot Nothing Then
' do something with the queried data
End If
Next
End If
sessionManager.EndSession()
sessionManager.CloseConnection()
答案 1 :(得分:1)
员工数据现在应包含EmployeePayrollInfo
。如果这不起作用,请评论。