c# - 如何使用 QBFC13 和 C# 获取一个月的所有发票并将其全部保存为 PDF?

标签 c# pdf quickbooks qbxml qbfc

我正在制作一个应用程序,获取一个月的所有发票,然后将每张发票保存为 PDF,我从未使用 QuickBooks 进行过开发,所以我对此知之甚少。有人能给我任何执行此操作或类似操作的源代码供我构建吗?我发现了几个链接,我认为它们为我指明了正确的方向,但我不能 100% 确定:

How can I get the invoices that has been paid on an specific date from QuickBooks to .NET app?

https://intuitdeveloper.lc.intuit.com/questions/1382278-sample-net-code-for-quickbooks-api-oauth-call-to-create-an-invoice-and-pdf-or-any-api-call-if-no-invoice

https://intuitdeveloper.lc.intuit.com/questions/1060982-quickbooks-online-api-invoice-pdf-download

我正在使用 C# .NET 和 QBFC13Lib。

编辑:

我已使用此代码来获取链接问题中的所有发票。

bool sessionBegun = false;
        bool connectionOpen = false;
        QBSessionManager sessionManager = null;

        try
        {
            //Create the session Manager object
            sessionManager = new QBSessionManager();

            //Create the message set request object to hold our request
            IMsgSetRequest requestMsgSet = sessionManager.CreateMsgSetRequest("US", 13, 0);
            requestMsgSet.Attributes.OnError = ENRqOnError.roeContinue;

            //Connect to QuickBooks and begin a session
            sessionManager.OpenConnection("", "GenerateInvoicePDFs");
            connectionOpen = true;
            sessionManager.BeginSession("", ENOpenMode.omDontCare);
            sessionBegun = true;

            IInvoiceQuery invoiceQueryRq = requestMsgSet.AppendInvoiceQueryRq();

            invoiceQueryRq.IncludeLineItems.SetValue(true);

            //Send the request and get the response from QuickBooks
            IMsgSetResponse responseMsgSet = sessionManager.DoRequests(requestMsgSet);
            IResponse response = responseMsgSet.ResponseList.GetAt(0);
            IInvoiceRetList invoiceRetList = (IInvoiceRetList)response.Detail;

            var invoices = new List<Invoice>();

            if (invoiceRetList != null)
            {
                for (int i = 0; i < invoiceRetList.Count; i++)
                {
                    IInvoiceRet invoiceRet = invoiceRetList.GetAt(i);

                    var invoice = new Invoice
                    {
                        QuickBooksID = invoiceRet.TxnID.GetValue(),
                        EditSequence = invoiceRet.EditSequence.GetValue()
                    };
                }
            }
        }
        catch
        {

        }

我收到一个错误,指出发票不是一种类型。

最佳答案

SDK 在查询对象上提供过滤器,使您能够查询数据子集。您可以根据交易日期过滤发票:

// get all invoices for the month of august 2016
invoiceQueryRq.ORInvoiceQuery.InvoiceFilter.ORDateRangeFilter.TxnDateRangeFilter.ORTxnDateRangeFilter.TxnDateFilter.FromTxnDate.SetValue(new DateTime(2016, 8, 1));
invoiceQueryRq.ORInvoiceQuery.InvoiceFilter.ORDateRangeFilter.TxnDateRangeFilter.ORTxnDateRangeFilter.TxnDateFilter.ToTxnDate.SetValue(new DateTime(2016, 8, 31));

或者,您可以查询给定日期范围内修改过的发票:

// all invoices modified in the month of August 2016
invoiceQueryRq.ORInvoiceQuery.InvoiceFilter.ORDateRangeFilter.ModifiedDateRangeFilter.FromModifiedDate.SetValue(new DateTime(2016, 8, 1));
invoiceQueryRq.ORInvoiceQuery.InvoiceFilter.ORDateRangeFilter.ModifiedDateRangeFilter.ToModifiedDate.SetValue(new DateTime(2016, 8, 31));

在您使用的代码中,当您调用 BeginSession 时,第一个参数为 Blank。虽然这通过获取当前打开的公司文件来实现,但建议明确提供要查询的公司文件的文件路径。

完成查询后请务必进行清理:

if (requestMsgSet != null)
{
    Marshal.FinalReleaseComObject(requestMsgSet);
}
if (invoiceQueryRq != null)
{
    Marshal.FinalReleaseComObject(invoiceQueryRq);
}
sessionMgr.EndSession();
sessionMgr.CloseConnection();

无论如何,我建议您仔细阅读 SDK 开发人员指南,以了解您的代码实际上在做什么。

更新:

您问题的第二部分已得到解答here .

关于c# - 如何使用 QBFC13 和 C# 获取一个月的所有发票并将其全部保存为 PDF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39126386/

相关文章:

c# - 为什么 e.Row.Cells[2].Text 在 GridView1_RowDataBound 事件中总是显示 ""或 null

c# - 是否可以从 .eml 文件将法语字符读入 C# 字符串?

c# - 通过 C# 在 QuickBooks 中创建新项目

java - 始终为同一客户创建 QuickBooks Online Java SDK 发票

php - Quickbooks Online API - 设置 docNumber 默认自动增量

c# - 处理嵌套属性值

c# - 单元测试方法的有效输入

c# - 如何在 MonoTouch 上生成 XML?

python - 我想用 python 抓取一个印地语(印度语言)pdf 文件

pdf - 将PDF转换为图像后如何获得可读文本(带抗锯齿的文本)?