2011-08-16 6 views
8

de mi investigación parece que hay básicamente 3 opciones.¿Cuál es la mejor manera de integrarse con los libros rápidos del código C#?

1: Usando COM
2: El uso de un servicio web y el conector Web
3: Uso de un componente tercera parte (y parece que hay unos cuantos)

Cada una de estas opciones presentan un problema para yo:
1: Me dijeron que no puedo usar COM
2: Esta solución me parece muy ingeniosa ya que necesito integrar desde un servicio de Windows
3: Algunas de estas soluciones son bastante caras.

Me parece que voy a tener que ir a la ruta 3 ª parte y hay dos pilotos de cabeza en mi mente:

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

Mis preguntas, querido lector, son los siguientes:

1: ¿Qué solución (com, servicio web, ¿Qué tercero) usarías?
2: ¿Por qué lo elegirías sobre las otras opciones?
3: ¿Hay alguna otra opción que me he perdido?

+1

Para un servicio de Windows, la interoperabilidad COM parece ser la mejor solución. –

+0

A pesar de que puede ser un poco desordenado, ¿qué hay de malo con el uso de COM? –

+0

@JP, lo llamaremos un requisito empresarial – iamkrillin

Respuesta

3

he decidido ir con otro producto no mencionados anteriormente llamado "Proveedor de QuickBooks ADO.NET Data" se hizo al parecer por las mismas personas que hacen que el producto integrador de QuickBooks

Las razones por las que lo eligió ...

1) tiene un componente de acceso remoto
de instalar el servidor remoto, y se puede acceder a sus datos de QuickBooks desde cualquier lugar de la red

2) el componente de acceso remoto puede funcionar como un servicio
tengo más que decir

3) proporciona una interfaz de estilo SQL para los datos de QuickBooks
4) ¿Tiene alguna almacenamiento en caché automático mágica para acelerar el acceso a los datos

+1

Si evitar el COM es un requisito difícil, odio decírtelo, pero casi todos los métodos que usa para automatizar QB romperán el requisito. La API de QB * es * COM y no importa qué abstracción use, en última instancia estará encima de una capa de COM. Dicho esto, esto no se aplica a la im/exportación de archivos IIF. – xanadont

+0

Esto me doy cuenta, el requisito era que no nos metiéramos con COM, siempre y cuando estuviese oculto todo está bien – iamkrillin

1

Si bien estoy seguro de que hay algunos casos en los que no funcionará, mi primera dirección de ataque sería el Quickbooks SDK que se encuentra en el Intuit developer center.

+0

El centro de desarrolladores de intuit es donde investigué: presentan una interfaz COM y el conector del servicio web, también enumeran una variedad de componentes de terceros. – iamkrillin

2

Utilicé el integrador QuickBooks de nSoftware en un proyecto en el que estaba. Es mucho más fácil que usar el QuickBooks SDK y el soporte es excelente. Ese producto ha existido por alrededor de 8 años.

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

+0

¿Sabe por casualidad si puede ejecutar el conector remoto como un servicio? ¿Necesitas tener la sincronización disponible todo el tiempo? Si es así, ¿cómo trabajó con el componente conector? – iamkrillin

+0

Cuando lo usé hace un tiempo, casi se sentía como abrir una conexión de base de datos. Agregaría un cliente, luego los productos, y luego la factura del cliente y luego las líneas en la factura y luego cerraría la conexión. –

7

que utiliza el SDK QuickBooks porque yo estaba desarrollando una herramienta de importación para un amigo y no tuvimos el lujo de comprar una biblioteca tercera parte.

Comencé a desarrollarlo como un servicio web, pero tuve que retroceder después de darme cuenta de que no solo tenemos que implementar el redistribuido del SDK de Quickbooks en el servidor, sino que también necesitábamos instalar QuickBooks. Y con más frecuencia que nunca, Quickbooks mostró un cuadro de diálogo, que en un servidor es malo.

Mientras ese diálogo esté abierto, Quickbooks SDK rechazará cualquier conexión.

Terminé haciéndolo como una aplicación C# Winform pura. A partir de ahí, es más bien estrecho.

En el corazón del programa fue una clase de sesión quickbook que maneja la sesión y el mensaje

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); 
    } 
} 

Después de eso, era simple cuestión de crear una sesión, crear un mensaje y añadiendo la consulta diferente .

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 
    } 
} 

Este código está lejos de ser a prueba de balas por la gran trampa de Quickbooks. El Quickbook SDK también es bastante lento.Por ejemplo, recuperar la lista de proveedores lleva aproximadamente 2 minutos para aproximadamente 1000 proveedores.

+1

Si la integración está en el mismo archivo de empresa o si el archivo ya está configurado para aceptar la integración con la firma de su aplicación, no se mostrarán los cuadros de diálogo. Siempre que el archivo esté configurado con always-allow. – xanadont

+0

Hay tantas razones por las que Quickbooks podría mostrar un cuadro de diálogo que no sea el diálogo de Aplicación Autorizada. –

0

Si usted está buscando para el código fuente o algo previamente embalados para .NET Existen conectores de Kentico, Ektron y nopCommerce para QuickBooks. Por favor revisa mi store.

Cuestiones relacionadas