C1 데이터 커넥터를 통해 Salesforce 데이터를 QuickBooks으로 가져오기
페이지 정보
작성자 GrapeCity
본문
관련링크
및 를 사용하여 QuickBooks Online으로 가져오는 방법을 살펴봅니다.
ComponentOne Studio 사용해 보기
ComponentOne Studio Enterprise 최신 버전 다운로드
Salesforce에서 연락처를 가져온 다음 QuickBooks Online에 고객으로 가져오려면 다음 단계를 수행해야 합니다.
데이터 크기 및 서비스 요청 제한 파악
Salesforce에 대한 인증
Salesforce 데이터의 스키마
Salesforce에서 데이터 가져오기
Salesforce 데이터를 QuickBooks Online 데이터에 매핑
QuickBooks Online에 대한 인증
QuickBooks Online에 데이터 삽입
이제 각 단계를 자세히 살펴보겠습니다.
데이터 크기 및 서비스 요청 제한
Salesforce 및 QuickBooks 시스템은 온라인으로 제공되므로 결과 크기와 부하 균형 호출 수에 특정 제한이 있습니다. 이 와 에서는 버전에 따른 제한과 제한 초과 시 오류에 대해 자세히 설명합니다.
Salesforce에 대한 인증
Salesforce는 REST API에 연결하려는 외부 응용 프로그램에 대한 OAuth 인증을 지원합니다. 이 에서는 응용 프로그램이 OAuth를 지원하도록 설정하는 방법을 설명합니다.
Salesforce에 연결하려면 다음 정보가 필요합니다.
토큰 끝점
API URL
클라이언트 ID
클라이언트 암호
Salesforce 사용자 이름 및 암호
보안 토큰
Salesforce 데이터의 스키마
데이터를 가져올 엔터티의 스키마는 Salesforce에 있습니다. 또는 Salesforce용 ComponentOne ADO.NET 데이터 커넥터의 에서 스키마 정보를 가져올 수 있습니다.
이 블로그에서는 설명을 위해 연락처 데이터가 필요합니다. 다음 필드가 필요합니다.
Title
Salutation
FirstName
LastName
Id(AccountName 및 AccountNumber를 가져오기 위한 pk)
Email
Phone
MobilePhone
Fax
MailingStreet
MailingCity
MailingState
MailingPostalCode
MailingCountry
MailingLatitude
MailingLongitude
다음은 Salesforce에 따라 위 필드에 필요한 스키마입니다.
열 이름 | 데이터 유형 | 크기 | Null 가능 | 생성 가능 | 업데이트 가능 |
---|---|---|---|---|---|
AccountId | System.String | 18 | TRUE | TRUE | TRUE |
LastName | System.String | 80 | FALSE | TRUE | TRUE |
FirstName | System.String | 40 | TRUE | TRUE | TRUE |
Salutation | System.String | 40 | TRUE | TRUE | TRUE |
MailingStreet | System.String | 255 | TRUE | TRUE | TRUE |
MailingCity | System.String | 40 | TRUE | TRUE | TRUE |
MailingState | System.String | 80 | TRUE | TRUE | TRUE |
MailingPostalCode | System.String | 20 | TRUE | TRUE | TRUE |
MailingCountry | System.String | 80 | TRUE | TRUE | TRUE |
MailingLatitude | System.String | 0 | TRUE | TRUE | TRUE |
MailingLongitude | System.String | 0 | TRUE | TRUE | TRUE |
Phone | System.String | 40 | TRUE | TRUE | TRUE |
Fax | System.String | 40 | TRUE | TRUE | TRUE |
MobilePhone | System.String | 40 | TRUE | TRUE | TRUE |
System.String | 80 | TRUE | TRUE | TRUE | |
Title | System.String | 128 | TRUE | TRUE | TRUE |
설명 | System.String | 32000 | TRUE | TRUE | TRUE |
Salesforce에서 데이터 가져오기
공급자에서 작업하기 위한 첫 단계는 Salesforce에 대한 연결을 설정하는 것입니다.
DataConnector 서비스 라이브러리는 ADO.NET DbConnection 클래스와 동일한 C1SalesforceConnection 클래스를 제공합니다. 이 클래스는 연결 개체를 만들고 연결 문자열을 클래스 생성자에 매개 변수로 전달하여 데이터 소스에 대한 연결을 설정하는 데 사용됩니다. 연결 문자열은 C1SalesforceConnectionStringBuilder 클래스를 사용하여 미리 정의하거나 생성할 수 있습니다.
연결 개체를 초기화한 후 Open() 메서드로 열어 연결을 시작합니다. 그런 다음, CreateCommand() 메서드로 명령 개체를 만듭니다. DbConnection 및 DbCommand 개체로 작업할 때처럼 command.CommandText 및 command.ExecuteReader()를 사용하여 결과 평가를 위해 DataReader 개체를 얻는 SQL 명령을 설정합니다.
이 경우에는 DataTable에 결과를 저장할 것이므로 DataReader가 가장 적합합니다. 전체 코드는 아래와 같습니다.
static class SalesforceSettings { public const string OAuthTokenEndpoint = @"https://ap17.salesforce.com/services/oauth2/token"; public const string Url = @"https://ap17.salesforce.com/services/data/v42.0"; public const string ClientId = @"xxx"; public const string ClientSecret = @"xxx"; public const string Username = @"xxx"; public const string Password = @"xxx"; public const string SecurityToken = @"xxx"; } static DataTable GetContactsFromSalesforce() { string sql = @"select c.FirstName, c.LastName, c.Salutation, c.Title, c.Email, c.Phone, c.MobilePhone, c.Fax, c.MailingStreet, c.MailingCity, c.MailingState, c.MailingPostalCode, c.MailingCountry, c.MailingLatitude, c.MailingLongitude, c.Description, a.Name as AccountName, a.AccountNumber From Contact c left join Account a on c.AccountId = a.Id"; string salesforceConnection = string.Format("Username={0};Password={1};Security Token={2};OAuth Client Id={3}; OAuth Client Secret={4}; OAuth Token Endpoint={5}; Url={6}", SalesforceSettings.Username, SalesforceSettings.Password, SalesforceSettings.SecurityToken, SalesforceSettings.ClientId, SalesforceSettings.ClientSecret, SalesforceSettings.OAuthTokenEndpoint, SalesforceSettings.Url); using (var con = new C1SalesforceConnection(salesforceConnection)) { con.Open(); var command = con.CreateCommand(); command.CommandText = sql; var contactsReader = command.ExecuteReader(); var dataTable = new DataTable(); dataTable.Load(contactsReader); return dataTable; } }
Salesforce 데이터를 QuickBooks Online 데이터에 매핑
다음 표를 사용하여 QuickBooks Online 고객과 Salesforce 연락처 간에 필드를 매핑합니다.
QBO 고객 | Salesforce 연락처 |
---|---|
Title | Title |
Suffix | Salutation |
GivenName | FirstName |
FamilyName | LastName |
CompanyName | Account.Id(AccountName에 연결) |
PrimaryEmailAddr_Address | |
PrimaryPhone_FreeFormNumber | Phone |
Mobile_FreeFormNumber | MobilePhone |
Fax_FreeFormNumber | Fax |
BillAddr_City | MailingCity |
BillAddr_CountrySubDivisionCode | MailingState |
BillAddr_PostalCode | MailingPostalCode |
BillAddr_Country | MailingCountry |
MailingLatitude | |
BillAddr_Long | MailingLongitude |
메모 | 설명 |
QuickBooks Online에 대한 인증
공급자에서 작업하기 위한 첫 단계는 QuickBooks Online 데이터에 대한 연결을 설정하는 것입니다.
DataConnector 서비스 라이브러리는 ADO.NET DbConnection 클래스와 마찬가지로 C1QuickBooksOnlineConnection 클래스를 제공합니다.
이 클래스는 연결 개체를 만들고 연결 문자열을 클래스 생성자에 매개 변수로 전달하여 데이터 소스에 대한 연결을 설정하는 데 사용됩니다. 연결 문자열은 C1QuickBooksOnlineConnectionStringBuilder 클래스를 사용하여 미리 정의하거나 생성할 수 있습니다.
OAuthAccessToken, OAuthRefreshToken의 값은 브라우저를 사용하여 에 따라 생성해야 합니다.
아래 샘플 코드 조각에서는 연결 문자열을 생성하고 연결 개체를 만드는 방법을 보여줍니다.
static class QBOSettings { public static string OAuthAccessToken = @"xxx"; public static string OAuthRefreshToken = @"xxx"; public const string OAuthClientId = @"xxx"; public const string OAuthClientSecret = @"xxx"; public static string CompanyId = "xxx"; public const string MinorVersion = "xxx"; public static string ConnectionString => $"Company Id={CompanyId};Use SandBox=true;OAuth Client Secret={OAuthClientSecret};OAuth Client Id={OAuthClientId};" + $"OAuth Access Token={OAuthAccessToken};OAuth Refresh Token={OAuthRefreshToken}; OAuth Token Endpoint=;Minor Version={MinorVersion}"; } using (var conn = new C1QuickBooksOnlineConnection(QBOSettings.ConnectionString)) { conn.OAuthTokenRefreshed += OnOAuthTokenRefreshed; conn.Open(); …… }
QuickBooks Online에 데이터 삽입
GetContactsFromSalesforce 메서드에서 반환된 DataTable과 C1QuickBooksOnlineDataAdapter를 사용하여 데이터를 QuickBooks Online에 대량 삽입합니다.
C1QuickBooksOnlineDataAdapter는 DbDataAdapter를 상속하므로 DbDataAdapter의 일반 기능을 모두 제공합니다.
C1QuickBooksOnlineDataAdapter dataAdapter = new C1QuickBooksOnlineDataAdapter(); var insertCmd = "Insert Into Customers(Title, GivenName, FamilyName, CompanyName, PrimaryPhone_FreeFormNumber," + "Mobile_FreeFormNumber, Fax_FreeFormNumber, BillAddr_City, BillAddr_CountrySubDivisionCode, BillAddr_PostalCode, BillAddr_Country, BillAddr_Lat," + "BillAddr_Long, Notes) VALUES (@p1, @p2, @p3, @p4, @p6, @p7, @p8, @p9, @p10, @p11, @p12, @p13, @p14, @p15)"; dataAdapter.InsertCommand = new C1QuickBooksOnlineCommand(conn, insertCmd); dataAdapter.InsertCommand.Parameters.Add("@p1", DbType.String, "Salutation"); dataAdapter.InsertCommand.Parameters.Add("@p2", DbType.String, "FirstName"); dataAdapter.InsertCommand.Parameters.Add("@p3", DbType.String, "LastName"); dataAdapter.InsertCommand.Parameters.Add("@p4", DbType.String, "AccountName"); dataAdapter.InsertCommand.Parameters.Add("@p6", DbType.String, "Phone"); dataAdapter.InsertCommand.Parameters.Add("@p7", DbType.String, "MobilePhone"); dataAdapter.InsertCommand.Parameters.Add("@p8", DbType.String, "Fax"); dataAdapter.InsertCommand.Parameters.Add("@p9", DbType.String, "MailingCity"); dataAdapter.InsertCommand.Parameters.Add("@p10", DbType.String, "MailingState"); dataAdapter.InsertCommand.Parameters.Add("@p11", DbType.String, "MailingPostalCode"); dataAdapter.InsertCommand.Parameters.Add("@p12", DbType.String, "MailingCountry"); dataAdapter.InsertCommand.Parameters.Add("@p13", DbType.String, "MailingLatitude"); dataAdapter.InsertCommand.Parameters.Add("@p14", DbType.String, "MailingLongitude"); dataAdapter.InsertCommand.Parameters.Add("@p15", DbType.String, "Description"); dataAdapter.InsertCommand.UpdatedRowSource = UpdateRowSource.None; //Need to change row state to added for bulk insert to work dataTable.TableName = "Customers"; foreach (DataRow curRow in dataTable.Rows) { curRow.SetAdded(); } dataAdapter.UpdateBatchSize = 100; int rowAffected = dataAdapter.Update(dataTable);
모두 끝났습니다. ComponentOne Salesforce와 QuickBooks Online ADO.NET 데이터 커넥터를 사용하면 일반적인 데이터 플랫폼 간에 데이터를 쉽게 조작할 수 있습니다.
더 많은 데이터 커넥터 데모를 보려면 또는
댓글목록
등록된 댓글이 없습니다.