C# QuickBooks 无法添加检查
C# QuickBooks Cannot add Check
我正在尝试使用 C# 添加将佣金支付从我的系统转移到 QuickBooks 的功能,除了添加检查请求之外,我已经得到了一大堆它的工作。目前,我得到这个输出
CheckAdd
ExpenseLineAddList:
element(2) - Required object is empty
End of ExpenseLineAddList
End of CheckAdd
这是代码。不幸的是,它有点长,但这正是围绕必要位的内容。
MySql.Data.MySqlClient.MySqlConnection CheckConn = new MySql.Data.MySqlClient.MySqlConnection();
MySqlCommand CheckCmd = new MySqlCommand();
CheckConn.ConnectionString = myConnectionString;
CheckConn.Open();
CheckCmd.Connection = CheckConn;
CheckCmd.CommandText = "select `companies`.`ParentCompanyName`, `DateTimeStart`, `DateTimeEnd` from `commissiontransfers` join `orders` using (`InvoiceID`) join `companies` using (`CompanyID`) where `Transfered`=0 group by `ParentCompanyName`;";
MySqlDataReader CheckReader = CheckCmd.ExecuteReader();
DataTable Checks;
using (CheckReader)
{
Checks = new System.Data.DataTable();
Checks.Load(CheckReader);
}
CheckReader.Close();
CheckReader.Dispose();
CheckConn.Close();
CheckConn.Dispose();
foreach (DataRow Check in Checks.Rows)
{
IMsgSetRequest AddCheckMsgSet = sessionManager.CreateMsgSetRequest("US", 8, 0);
AddCheckMsgSet.Attributes.OnError = ENRqOnError.roeContinue;
ICheckAdd CheckAddRq = AddCheckMsgSet.AppendCheckAddRq();
CheckAddRq.AccountRef.FullName.SetValue("Bank Account");
CheckAddRq.PayeeEntityRef.FullName.SetValue(Convert.ToString(Check["ParentCompanyName"]));
CheckAddRq.Memo.SetValue("Date Range: From " + Convert.ToDateTime(Check["DateTimeStart"]).ToString("MM/dd/yyyy") + " to " + Convert.ToDateTime(Check["DateTimeEnd"]).ToString("MM/dd/yyyy"));
CheckAddRq.IsToBePrinted.SetValue(true);
MySql.Data.MySqlClient.MySqlConnection CommissionTransferConn = new MySql.Data.MySqlClient.MySqlConnection();
MySqlCommand CommissionTransferCmd = new MySqlCommand();
CommissionTransferConn.ConnectionString = myConnectionString;
CommissionTransferConn.Open();
CommissionTransferCmd.Connection = CommissionTransferConn;
CommissionTransferCmd.CommandText = "select `CommissionTransferID`, round(`OrderCommission`-`FactoryCommission`-`ShippingCommission`, 2) `Total`, `orders`.`DateTimePaid`, `companies`.`OldQBName`, `orders`.`Customer` from `commissiontransfers` join `orders` using (`InvoiceID`) join `companies` using (`CompanyID`) where `Transfered`=0;";
MySqlDataReader CommissionTransferReader = CommissionTransferCmd.ExecuteReader();
DataTable CommissionTransfers;
using (CommissionTransferReader)
{
CommissionTransfers = new System.Data.DataTable();
CommissionTransfers.Load(CommissionTransferReader);
}
CommissionTransferReader.Close();
CommissionTransferReader.Dispose();
CommissionTransferConn.Close();
CommissionTransferConn.Dispose();
foreach (DataRow CommissionTransfer in CommissionTransfers.Rows)
{
IExpenseLineAdd ExpenseLineAdd = CheckAddRq.ExpenseLineAddList.Append();
ExpenseLineAdd = CheckAddRq.ExpenseLineAddList.Append();
ExpenseLineAdd.AccountRef.FullName.SetValue("Contract Labor:1099's");
ExpenseLineAdd.Amount.SetValue(Convert.ToDouble(CommissionTransfer["Total"]));
ExpenseLineAdd.Memo.SetValue(Convert.ToString(CommissionTransfer["Customer"]) + " - " + Convert.ToDateTime(CommissionTransfer["DateTimePaid"]).ToString("MM/dd/yyyy"));
ExpenseLineAdd.ClassRef.FullName.SetValue(Convert.ToString(CommissionTransfer["OldQBName"]));
GetFirstRow("update `commissiontransfers` set `Transfered`=1 where `CommissionTransferID`='" + CommissionTransfer["CommissionTransferID"] + "';");
}
CheckAddRq.IncludeRetElementList.Add("TxnID");
try {
IMsgSetResponse CheckResponseMsgSet = sessionManager.DoRequests(AddCheckMsgSet);
IResponse CheckResponse = CheckResponseMsgSet.ResponseList.GetAt(0);
MessageBox.Show(CheckResponse.StatusCode + ": " + CheckResponse.StatusMessage);
}
catch (Exception ex)
{
Console.WriteLine("{0} Exception caught.", ex);
}
我的 AddCheckMsgSet
变量似乎是空的,但我终究无法弄清楚为什么会这样。非常感谢任何帮助!
当然,我在这个问题上卡了三个小时,然后post这里就自己解决了。好吧,问题与这些行有关
IExpenseLineAdd ExpenseLineAdd = CheckAddRq.ExpenseLineAddList.Append();
ExpenseLineAdd = CheckAddRq.ExpenseLineAddList.Append();
我需要做的就是删除第二行,因为我已经附加了一个新的费用行,而第二个附加导致第一个请求为空。希望这对将来的人有所帮助,因为我在尝试连接到 QuickBooks 时遇到了唯一的问题。
我正在尝试使用 C# 添加将佣金支付从我的系统转移到 QuickBooks 的功能,除了添加检查请求之外,我已经得到了一大堆它的工作。目前,我得到这个输出
CheckAdd
ExpenseLineAddList:
element(2) - Required object is empty
End of ExpenseLineAddList
End of CheckAdd
这是代码。不幸的是,它有点长,但这正是围绕必要位的内容。
MySql.Data.MySqlClient.MySqlConnection CheckConn = new MySql.Data.MySqlClient.MySqlConnection();
MySqlCommand CheckCmd = new MySqlCommand();
CheckConn.ConnectionString = myConnectionString;
CheckConn.Open();
CheckCmd.Connection = CheckConn;
CheckCmd.CommandText = "select `companies`.`ParentCompanyName`, `DateTimeStart`, `DateTimeEnd` from `commissiontransfers` join `orders` using (`InvoiceID`) join `companies` using (`CompanyID`) where `Transfered`=0 group by `ParentCompanyName`;";
MySqlDataReader CheckReader = CheckCmd.ExecuteReader();
DataTable Checks;
using (CheckReader)
{
Checks = new System.Data.DataTable();
Checks.Load(CheckReader);
}
CheckReader.Close();
CheckReader.Dispose();
CheckConn.Close();
CheckConn.Dispose();
foreach (DataRow Check in Checks.Rows)
{
IMsgSetRequest AddCheckMsgSet = sessionManager.CreateMsgSetRequest("US", 8, 0);
AddCheckMsgSet.Attributes.OnError = ENRqOnError.roeContinue;
ICheckAdd CheckAddRq = AddCheckMsgSet.AppendCheckAddRq();
CheckAddRq.AccountRef.FullName.SetValue("Bank Account");
CheckAddRq.PayeeEntityRef.FullName.SetValue(Convert.ToString(Check["ParentCompanyName"]));
CheckAddRq.Memo.SetValue("Date Range: From " + Convert.ToDateTime(Check["DateTimeStart"]).ToString("MM/dd/yyyy") + " to " + Convert.ToDateTime(Check["DateTimeEnd"]).ToString("MM/dd/yyyy"));
CheckAddRq.IsToBePrinted.SetValue(true);
MySql.Data.MySqlClient.MySqlConnection CommissionTransferConn = new MySql.Data.MySqlClient.MySqlConnection();
MySqlCommand CommissionTransferCmd = new MySqlCommand();
CommissionTransferConn.ConnectionString = myConnectionString;
CommissionTransferConn.Open();
CommissionTransferCmd.Connection = CommissionTransferConn;
CommissionTransferCmd.CommandText = "select `CommissionTransferID`, round(`OrderCommission`-`FactoryCommission`-`ShippingCommission`, 2) `Total`, `orders`.`DateTimePaid`, `companies`.`OldQBName`, `orders`.`Customer` from `commissiontransfers` join `orders` using (`InvoiceID`) join `companies` using (`CompanyID`) where `Transfered`=0;";
MySqlDataReader CommissionTransferReader = CommissionTransferCmd.ExecuteReader();
DataTable CommissionTransfers;
using (CommissionTransferReader)
{
CommissionTransfers = new System.Data.DataTable();
CommissionTransfers.Load(CommissionTransferReader);
}
CommissionTransferReader.Close();
CommissionTransferReader.Dispose();
CommissionTransferConn.Close();
CommissionTransferConn.Dispose();
foreach (DataRow CommissionTransfer in CommissionTransfers.Rows)
{
IExpenseLineAdd ExpenseLineAdd = CheckAddRq.ExpenseLineAddList.Append();
ExpenseLineAdd = CheckAddRq.ExpenseLineAddList.Append();
ExpenseLineAdd.AccountRef.FullName.SetValue("Contract Labor:1099's");
ExpenseLineAdd.Amount.SetValue(Convert.ToDouble(CommissionTransfer["Total"]));
ExpenseLineAdd.Memo.SetValue(Convert.ToString(CommissionTransfer["Customer"]) + " - " + Convert.ToDateTime(CommissionTransfer["DateTimePaid"]).ToString("MM/dd/yyyy"));
ExpenseLineAdd.ClassRef.FullName.SetValue(Convert.ToString(CommissionTransfer["OldQBName"]));
GetFirstRow("update `commissiontransfers` set `Transfered`=1 where `CommissionTransferID`='" + CommissionTransfer["CommissionTransferID"] + "';");
}
CheckAddRq.IncludeRetElementList.Add("TxnID");
try {
IMsgSetResponse CheckResponseMsgSet = sessionManager.DoRequests(AddCheckMsgSet);
IResponse CheckResponse = CheckResponseMsgSet.ResponseList.GetAt(0);
MessageBox.Show(CheckResponse.StatusCode + ": " + CheckResponse.StatusMessage);
}
catch (Exception ex)
{
Console.WriteLine("{0} Exception caught.", ex);
}
我的 AddCheckMsgSet
变量似乎是空的,但我终究无法弄清楚为什么会这样。非常感谢任何帮助!
当然,我在这个问题上卡了三个小时,然后post这里就自己解决了。好吧,问题与这些行有关
IExpenseLineAdd ExpenseLineAdd = CheckAddRq.ExpenseLineAddList.Append();
ExpenseLineAdd = CheckAddRq.ExpenseLineAddList.Append();
我需要做的就是删除第二行,因为我已经附加了一个新的费用行,而第二个附加导致第一个请求为空。希望这对将来的人有所帮助,因为我在尝试连接到 QuickBooks 时遇到了唯一的问题。