有没有办法用QuickBooks SDK查询IEmployeePayrollInfo?

时间:2014-06-27 00:59:39

标签: vb.net quickbooks qbfc

我开始使用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完成吗?

修改

我能够正常工作,请参阅下面接受的答案。

2 个答案:

答案 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)

  1. 打开Quickbooks。
  2. 转到“编辑”菜单,然后单击“首选项”。
  3. 在“首选项”窗口中,单击左侧列表中的“集成应用程序”。
  4. 单击“公司首选项”选项卡。
  5. 选择要与QuickBooks连接的应用程序。
  6. 单击“属性”。
  7. 检查&#34;允许此应用程序访问社会保险号,客户信用卡信息和其他个人数据&#34;
  8. 员工数据现在应包含EmployeePayrollInfo。如果这不起作用,请评论。