2011-08-16 1 views
8

dalla mia ricerca sembra che ci siano fondamentalmente 3 opzioni.Qual è il modo migliore per integrarsi con i quickbook dal codice C#?

1: Utilizzando COM
2: Utilizzando un webservice e il connettore web
3: Utilizzo di un componente di terze parti (e sembra che ci sia un bel po ')

Ognuna di queste opzioni presentano un problema per me:
1: mi è stato detto che non posso usare COM
2: Questa soluzione mi sembra molto complicata dal momento che devo integrare da un servizio Windows
3: Alcune di queste soluzioni sono piuttosto costose.

Mi sembra che sto andando ad avere per andare via 3rd party e ci sono due piloti di testa nella mia mente:

1: QODBC (http://www.qodbc.com/usa.html)
2: AccessBooks (http://www.synergration.com/AccessBooksUpdater/default.aspx)

mie domande, caro lettore, sono i seguenti:

1: quale soluzione (com, servizio web, quale terza parte) useresti?
2: Perché dovresti sceglierlo tra le altre opzioni?
3: C'è qualche altra opzione che mi è sfuggita?

+1

Per un servizio Windows, l'interoperabilità COM sembra la soluzione migliore. –

+0

Nonostante il fatto che possa essere un po 'complicato, cosa c'è di sbagliato nell'usare COM? –

+0

@JP, Lo chiameremo requisito aziendale – iamkrillin

risposta

3

ho deciso di andare con un altro prodotto di cui sopra non chiamato "Fornitore QuickBooks ADO.NET Data" è apparentemente fatta dalle stesse persone che rendono il prodotto integratore QuickBooks

Le ragioni ho scelto ...

1) ha un componente di accesso remoto
si installa il server remoto, ed è possibile accedere ai dati QuickBooks da qualsiasi punto della rete

2) la componente di accesso remoto può essere eseguito come un servizio
Nuff said

3) fornisce un'interfaccia stile SQL per i dati QuickBooks
4) fa alcune caching magica auto per accelerare l'accesso ai dati

+1

Se evitare la COM è un requisito difficile allora, odio dirlo, ma quasi tutti i metodi che utilizzi per automatizzare QB infrangeranno il requisito. L'API di QB * è * COM e indipendentemente dall'astrazione che utilizzerai sarà in cima a un livello di COM. Detto questo, questo non si applica a im/export di file IIF. – xanadont

+0

Questo mi rendo conto che il requisito era che non avessimo problemi con la COM, fintanto che era nascosta, tutto andava bene – iamkrillin

1

Mentre sono sicuro che ci sono alcuni casi in cui non funzionerà, la mia prima direzione di attacco sarebbe l'SDK Quickbooks trovato nello Intuit developer center.

+0

Il centro di sviluppo intuit è dove ho fatto la mia ricerca: presentano un'interfaccia COM e il connettore del servizio web, elencano anche una varietà di componenti di terze parti. – iamkrillin

2

Ho utilizzato l'integratore QuickBooks di nSoftware su un progetto in cui mi trovavo. È molto più semplice dell'utilizzo dell'SDK QuickBooks e il supporto è ottimo. Quel prodotto è in circolazione da circa 8 anni.

http://www.nsoftware.com/ibiz/quickbooks/

+0

Ti capita per caso di sapere se puoi eseguire il connettore remoto come servizio? Hai avuto bisogno di avere la sincronizzazione sempre disponibile? Se sì, come hai lavorato attorno al componente del connettore? – iamkrillin

+0

Quando l'ho usato qualche tempo fa, sembrava quasi di aprire una connessione al database. Aggiungere un cliente, quindi i prodotti, quindi la fattura per il cliente e quindi le righe sulla fattura e quindi chiudere la connessione. –

7

ho usato lo SDK Quickbooks perché stavo sviluppando un tool di importazione per un amico e non abbiamo avuto il lusso di acquistare una libreria di terze parti.

Ho iniziato a svilupparlo come un servizio Web, ma ho dovuto ricorrere dopo aver capito che, non solo abbiamo bisogno di distribuire la ridistribuibile dell'SDK Quickbooks sul server, ma abbiamo anche bisogno di Quickbooks per essere installato. E più spesso che mai, Quickbooks mostrava una finestra di dialogo, che su un server è pessima.

Finché la finestra di dialogo è stata aperta, Quickbooks SDK rifiuta qualsiasi connessione ad esso.

Ho finito per farlo come una pura applicazione C# Winform. Da lì, è piuttosto diretto.

Al cuore del programma è stata una classe sessione di quickbook che ha gestito la sessione e il messaggio

public static class Quickbooks 
{ 
    public static QuickbookSession CreateSession() 
    { 
     return new QuickbookSession(); 
    } 
} 

public class QuickbookSession : IDisposable 
{ 
    /// <summary> 
    /// Initializes a new instance of the <see cref="QuickbookSession"/> class. 
    /// </summary> 
    internal QuickbookSession() 
    { 
     this.SessionManager = new QBSessionManager(); 

     this.SessionManager.OpenConnection2(
      ConfigurationManager.AppSettings["QuickbooksApplicationId"], 
      ConfigurationManager.AppSettings["QuickbooksApplicationName"], 
      Utils.GetEnumValue<ENConnectionType>(ConfigurationManager.AppSettings["QuickbooksConnectionType"])); 

     var file = Quickbook.QuickbookDatabaseFilePath; 
     if (string.IsNullOrEmpty(file)) 
     { 
      file = ConfigurationManager.AppSettings["QuickbooksDatabaseLocalPath"]; 
     } 

     this.SessionManager.BeginSession(file, Utils.GetEnumValue<ENOpenMode>(ConfigurationManager.AppSettings["QuickbooksSessionOpenMode"])); 
    } 

    /// <summary> 
    /// Gets the Quickbook session manager that is owning this message. 
    /// </summary> 
    public QBSessionManager SessionManager { get; private set; } 

    public QuickbookMessage CreateMessage() 
    { 
     return new QuickbookMessage(this.SessionManager); 
    } 

    public void Dispose() 
    { 
     Dispose(true); 
     GC.SuppressFinalize(this); 
    } 

    protected virtual void Dispose(bool disposing) 
    { 
     if (disposing) 
     { 
      // get rid of managed resources 
     } 

     this.SessionManager.EndSession(); 
     this.SessionManager.CloseConnection(); 

     System.Runtime.InteropServices.Marshal.ReleaseComObject(this.SessionManager); 
    } 
} 

Dopo di che, è stato semplice questione di creazione di una sessione, la creazione di un messaggio e aggiungendo il diverso interrogazione .

using(var session = Quickbooks.CreateSession()) 
{ 
    // Check if the job already exist 
    using (var message = session.CreateMessage()) 
    { 
     var jobQuery = message.AppendCustomerQueryRq(); 
     jobQuery.ORCustomerListQuery.CustomerListFilter.ORNameFilter.NameFilter.Name.SetValue("something"); 
     jobQuery.ORCustomerListQuery.CustomerListFilter.ORNameFilter.NameFilter.MatchCriterion.SetValue(ENMatchCriterion.mcContains); 

     var result = message.Send(); 

     // do stuff here with the result 
    } 
} 

Questo codice è lungi dall'essere a prova di proiettile dalle molte insidie ​​di Quickbooks. Anche l'SDK Quickbooks è piuttosto lento.Ad esempio, il recupero dell'elenco dei fornitori richiede circa 2 minuti per circa 1000 fornitori.

+1

Se l'integrazione si trova sullo stesso file aziendale o il file è già configurato per accettare l'integrazione con la firma dell'app, le finestre di dialogo non dovrebbero essere visualizzate. Finché il file è configurato con always-allow. – xanadont

+0

Ci sono tanti motivi per cui Quickbooks potrebbe visualizzare una finestra di dialogo diversa dalla finestra di dialogo Applicazione autorizzata. –

0

Se siete alla ricerca di codice sorgente o qualcosa preconfezionati per .NET , I connettori Kentico, Ektron e nopCommerce esistono per QuickBooks. Si prega di controllare il mio store.