QuickBooks SDKを見る気がない場合は、自分自身に大きな不利益をもたらしています。
実行しようとしていることを実装する最も簡単な方法は、SDKとWebコネクタを使用することです。ウィキには、QuickBooksWebConnectorの基本的な概要があります。これは特に、オンラインWebサイトからQuickBooks for Windowsにデータを移動することを目的としています(あなたがやろうとしているのと同じように)。基本的な考え方は、Webサイトをポーリングして、実行することを要求し、XML要求をフィードして、実行すること(顧客の追加、請求書の追加など)を行うことができるということです。
基本的なプロトコルは次のようになります。
//WebコネクタはSOAPサービスにWebコネクタの認証を要求します=>SOAPサーバー:ユーザー名「xyz」とパスワード「bla」で認証(認証)認証が成功すると、SOAPサーバーはチケット値を返し、プロセスは続行されます
//Webコネクタは何かをするように要求しますWebコネクタ=>SOAPサーバー:ちょっとSOAPサーバー、あなたは私に何をする必要がありますか?(sendRequestXML)SOAPサーバーはqbXML要求を生成して返します
// Web Connectorはその要求をQuickBooksに中継し、QuickBooks Web Connector => QuickBooksから応答を受信します:ちょっとQuickBooks、SOAPサーバーがこの要求をくれました。処理していただけますか?QuickBooksはリクエストを処理し、Webコネクタにレスポンスを返します
// WebコネクタはQuickBooksからの応答をSOAPサーバーに中継しますWebコネクタ=>SOAPサーバー:やあSOAPサーバー、これがQuickBooksからの最後のリクエストに対する応答です(receiveResponseXML)SOAPサーバーは応答を処理し、エラーを処理して何でもします応答SOAPサーバーは完了したパーセンテージを返します。100%未満の場合、このプロセスは続行されます...
//プロセスが最初からやり直し、WebコネクタがSOAPサーバーに次の要求を要求します...Webコネクタ=>SOAPサーバー:SOAPサーバーねえ、他に何をする必要がありますか?(sendRequestXML)SOAPサーバーはqbXML要求を生成して返します
...などなど..。
QuickBooks SDKをダウンロードすると(申し訳ありませんが!)、要求したものがいくつか含まれていることがわかります。具体的には、このディレクトリにドロップするサンプルコードがあります。
C:\Program Files (x86)\Intuit\IDN\QBSDK12.0\samples\qbdt\c-sharp\qbXML\WCWebService
これは、そのサンプルコードの内容をクリーンアップして削除したバージョンです。
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Web;
using System.Web.Services;
using System.IO;
using System.Security.Cryptography;
using Microsoft.Win32;
using System.Xml;
using System.Text.RegularExpressions;
namespace WCWebService
{
/// <summary>
/// Web Service Namespace="http://developer.intuit.com/"
/// Web Service Name="WCWebService"
/// Web Service Description="Sample WebService in ASP.NET to
/// demonstrate QuickBooks WebConnector"
/// </summary>
[WebService(
Namespace="http://developer.intuit.com/",
Name="WCWebService",
Description="Sample WebService in ASP.NET to demonstrate " +
"QuickBooks WebConnector")]
// Important Note:
// You should keep the namespace as http://developer.intuit.com/ for all web
// services that communicates with QuickBooks Web Connector.
public class WCWebService : System.Web.Services.WebService
{
...
#region WebMethods
[WebMethod]
/// <summary>
/// WebMethod - authenticate()
/// To verify username and password for the web connector that is trying to connect
/// Signature: public string[] authenticate(string strUserName, string strPassword)
///
/// IN:
/// string strUserName
/// string strPassword
///
/// OUT:
/// string[] authReturn
/// Possible values:
/// string[0] = ticket
/// string[1]
/// - empty string = use current company file
/// - "none" = no further request/no further action required
/// - "nvu" = not valid user
/// - any other string value = use this company file
/// </summary>
public string[] authenticate(string strUserName, string strPassword)
{
string[] authReturn = new string[2];
// Code below uses a random GUID to use as session ticket
// An example of a GUID is {85B41BEE-5CD9-427a-A61B-83964F1EB426}
authReturn[0]= System.Guid.NewGuid().ToString();
// For simplicity of sample, a hardcoded username/password is used.
// In real world, you should handle authentication in using a standard way.
// For example, you could validate the username/password against an LDAP
// or a directory server
string pwd="password";
if (strUserName.Trim().Equals("username") && strPassword.Trim().Equals(pwd))
{
// An empty string for authReturn[1] means asking QBWebConnector
// to connect to the company file that is currently openned in QB
authReturn[1]="";
}
else
{
authReturn[1]="nvu";
}
// You could also return "none" to indicate there is no work to do
// or a company filename in the format C:\full\path\to\company.qbw
// based on your program logic and requirements.
return authReturn;
}
[ WebMethod(Description="This web method facilitates web service to send request XML to QuickBooks via QBWebConnector",EnableSession=true) ]
/// <summary>
/// WebMethod - sendRequestXML()
/// Signature: public string sendRequestXML(string ticket, string strHCPResponse, string strCompanyFileName,
/// string Country, int qbXMLMajorVers, int qbXMLMinorVers)
///
/// IN:
/// int qbXMLMajorVers
/// int qbXMLMinorVers
/// string ticket
/// string strHCPResponse
/// string strCompanyFileName
/// string Country
/// int qbXMLMajorVers
/// int qbXMLMinorVers
///
/// OUT:
/// string request
/// Possible values:
/// - “any_string” = Request XML for QBWebConnector to process
/// - "" = No more request XML
/// </summary>
public string sendRequestXML(string ticket, string strHCPResponse, string strCompanyFileName,
string qbXMLCountry, int qbXMLMajorVers, int qbXMLMinorVers)
{
... build some qbXML request here and return it ...
return request;
}
[ WebMethod(Description="This web method facilitates web service to receive response XML from QuickBooks via QBWebConnector",EnableSession=true) ]
/// <summary>
/// WebMethod - receiveResponseXML()
/// Signature: public int receiveResponseXML(string ticket, string response, string hresult, string message)
///
/// IN:
/// string ticket
/// string response
/// string hresult
/// string message
///
/// OUT:
/// int retVal
/// Greater than zero = There are more request to send
/// 100 = Done. no more request to send
/// Less than zero = Custom Error codes
/// </summary>
public int receiveResponseXML(string ticket, string response, string hresult, string message)
{
... process the response from QuickBooks here, and return an integer ...
return retVal;
}
#endregion
} // class: WCWebService
} // namespace: WCWebService
QuickBooks SDKには、実装の詳細を説明した98ページのWebコネクタドキュメントPDFと、役立つ可能性のある600ページの一般的なQuickBooksSDKドキュメントも含まれています。