2011-08-16 28 views
8

từ nghiên cứu của tôi có vẻ như về cơ bản có 3 tùy chọn.Cách tốt nhất để tích hợp với sách nhanh từ mã C# là gì?

1: Sử dụng COM
2: Sử dụng Một Webservice và kết nối web
3: Sử dụng một thành phần bên thứ 3 (và dường như có khá một vài)

Mỗi một lựa chọn trình bày một vấn đề đối với Tôi:
1: Tôi đã nói rằng tôi không thể sử dụng COM
2: Giải pháp này có vẻ rất ho với tôi vì tôi cần tích hợp từ dịch vụ cửa sổ
3: Một số giải pháp này khá tốn kém.

tôi trông giống như tôi sẽ phải đi con đường bên thứ 3 và có hai người chạy phía trước trong tâm trí tôi:

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

câu hỏi của tôi, em yêu người đọc, được như sau:

1: Những giải pháp (com, dịch vụ web, bên thứ 3) bạn sẽ sử dụng?
2: Tại sao bạn chọn nó trên các tùy chọn khác?
3: Có tùy chọn nào khác mà tôi đã bỏ lỡ không?

+1

Đối với dịch vụ cửa sổ, COM interop có vẻ như là giải pháp tốt nhất trong số đó. –

+0

Mặc dù thực tế rằng nó có thể là một chút lộn xộn, có gì sai khi sử dụng COM? –

+0

@JP, Chúng tôi sẽ gọi đó là yêu cầu kinh doanh – iamkrillin

Trả lời

3

Tôi đã quyết định đi với một sản phẩm khác không được đề cập ở trên được gọi là "Nhà cung cấp QuickBooks ADO.NET Data" nó được rõ ràng được thực hiện bởi các folks cùng một người làm cho sản phẩm tích hợp QuickBooks

Những lý do tôi đã chọn nó ...

1) Nó có một thành phần truy cập từ xa
bạn cài đặt máy chủ từ xa, và bạn có thể truy cập dữ liệu QuickBooks của bạn từ bất cứ nơi nào trên mạng của bạn

2) các thành phần truy cập từ xa có thể chạy như một dịch vụ
Nuff nói

3) Cung cấp một giao diện kiểu SQL để các dữ liệu QuickBooks
4) Có một số tự động ma thuật bộ nhớ đệm để tăng tốc độ truy cập dữ liệu

+1

Nếu tránh COM là một yêu cầu khó khăn thì tôi ghét phải nói với bạn, nhưng gần như mọi phương pháp bạn sử dụng để tự động hóa QB sẽ phá vỡ yêu cầu. API của QB * là * COM và không có vấn đề gì trừu tượng bạn sử dụng nó cuối cùng sẽ được trên đầu trang của một lớp COM. Điều đó nói rằng, điều này không áp dụng cho im/xuất khẩu các tập tin IIF. – xanadont

+0

Điều này tôi nhận ra, yêu cầu là chúng tôi đã không lộn xộn với COM miễn là nó đã được ẩn tất cả là tốt – iamkrillin

1

Mặc dù tôi chắc chắn có một số trường hợp trong đó nó sẽ không hoạt động, hướng tấn công đầu tiên của tôi sẽ là SDK Quickbooks được tìm thấy tại số Intuit developer center.

+0

Trung tâm phát triển intuit là nơi tôi thực hiện nghiên cứu của mình: họ trình bày giao diện COM và trình kết nối dịch vụ web, họ cũng liệt kê một loạt các thành phần của bên thứ 3. – iamkrillin

2

Tôi đã sử dụng trình tích hợp QuickBooks từ nSoftware trên dự án mà tôi đang sử dụng. Đó là cách dễ dàng hơn bằng cách sử dụng QuickBooks SDK và hỗ trợ là rất tốt. Sản phẩm đó đã tồn tại khoảng 8 năm.

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

+0

Bạn có vô tình biết được nếu bạn có thể chạy đầu nối từ xa như một dịch vụ? Bạn có cần đồng bộ hóa mọi lúc không? Nếu vậy, làm thế nào bạn làm việc xung quanh thành phần kết nối? – iamkrillin

+0

Khi tôi sử dụng nó một thời gian trước, nó gần như cảm thấy như mở một kết nối cơ sở dữ liệu. Bạn sẽ thêm một khách hàng, sau đó các sản phẩm, và sau đó hóa đơn cho khách hàng và sau đó các dòng trên hóa đơn và sau đó đóng kết nối. –

7

tôi đã sử dụng Quickbooks SDK bởi vì tôi đã phát triển một công cụ nhập khẩu đối với một người bạn và chúng tôi không có sự sang trọng của việc mua một thư viện của bên thứ 3.

Tôi bắt đầu phát triển nó như một dịch vụ web, nhưng tôi phải quay lại sau khi nhận ra điều đó, chúng tôi không chỉ cần triển khai Redbooks của Quickbooks SDK trên máy chủ mà còn cần cài đặt Quickbooks. Và thường xuyên hơn bao giờ hết, Quickbooks hiển thị một hộp thoại, mà trên một máy chủ là xấu.

Khi hộp thoại đó được mở, Quickbooks SDK sẽ từ chối mọi kết nối với nó.

Tôi đã kết thúc hoạt động như một ứng dụng C# Winform thuần túy. Từ đó, nó khá thẳng thắn.

Tại trung tâm của chương trình là một lớp phiên quickbook rằng xử lý phiên và thông điệp

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

Sau đó, nó rất đơn giản là vấn đề của việc tạo ra một phiên, tạo một thông điệp và phụ truy vấn khác nhau .

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

Mã này cách xa bằng chứng đạn từ nhiều lỗ hổng của Quickbooks. Quickbooks SDK cũng khá chậm.Ví dụ, lấy danh sách nhà cung cấp mất khoảng 2 phút cho khoảng 1000 nhà cung cấp.

+1

Nếu tích hợp nằm trên cùng một tệp công ty hoặc tệp đã được định cấu hình để chấp nhận tích hợp với chữ ký của ứng dụng, thì hộp thoại sẽ không được hiển thị. Miễn là tệp được định cấu hình với luôn cho phép. – xanadont

+0

Có rất nhiều lý do tại sao Quickbooks có thể hiển thị hộp thoại khác với hộp thoại Ứng dụng được ủy quyền. –

0

Nếu bạn đang tìm kiếm mã nguồn hoặc một cái gì đó được đóng gói sẵn cho .NET , Kentico, Ektron và kết nối nopCommerce tồn tại cho QuickBooks. Vui lòng xem store của tôi.

Các vấn đề liên quan