! 제품 버전을 정확하게 입력해 주세요.
제품 버전이 정확하게 기재되어 있지 않은 경우,
최신 버전을 기준으로 안내 드리므로
더욱 빠르고 명확한 안내를 위해
제품 버전을 정확하게 입력해 주세요!

Salesforce에서 SQL Server로 데이터 가져오기 > 블로그 & Tips

본문 바로가기

ComponentOne

블로그 & Tips

Salesforce에서 SQL Server로 데이터 가져오기

페이지 정보

작성자 GrapeCity 작성일 2021-04-09 17:04 조회 4,349회 댓글 0건

본문

외부 응용 프로그램, 보고 또는 분석과 같이 사용자가 Salesforce에서 SQL Server로 데이터를 가져오려 하는 경우가 많습니다. 이 블로그에서는 ComponentOne Salesforce ADO.NET 데이터 커넥터를 사용해 Salesforce에서 데이터를 가져와 SQL Server로 푸시하는 방법에 대해 알아보겠습니다.

Salesforce에서 SQL Server로 데이터를 가져와 삽입하려면 다음과 같은 단계를 거쳐야 합니다.

  • Salesforce에 대한 인증

  • 데이터 및 서비스 요청 제한

  • 데이터의 스키마

  • 위 스키마에 부합하는 관련 테이블을 SQL Server에 생성

  • Salesforce에서 데이터를 가져와 SQL Serve 테이블에 저장

이제 각 단계를 자세히 살펴보겠습니다.


인증

Salesforce는 REST API에 연결하려는 외부 응용 프로그램에 대한 OAuth 인증을 지원합니다. 이 문서에서는 응용 프로그램이 OAuth를 지원하도록 설정하는 방법을 설명합니다.

Salesforce에 연결하려면 다음 정보가 필요합니다.

  • 토큰 EndPoint

  • API URL

  • 클라이언트 ID

  • 클라이언트 암호

  • Salesforce 사용자 이름 및 암호

  • 보안 토큰


데이터 크기 및 서비스 요청 제한

Salesforce 시스템은 온라인으로 제공되므로 결과 크기와 부하 균형 호출 수에 특정 제한이 있습니다. 이 문서에서는 버전에 따른 제한과 제한 초과 시 오류에 대해 자세히 설명합니다.


데이터의 스키마

데이터를 가져올 엔터티의 스키마는 여기 Salesforce에 있습니다. 또는 Salesforce용 ComponentOne ADO.NET 데이터 커넥터의 연결 개체에서 스키마 정보를 가져올 수 있습니다.

이 블로그의 목적상 주문 데이터는 국가별로 지난 몇 년 동안의 데이터가 필요합니다. 이 보고서에는 다음 필드가 필수적입니다.

  • 대금 청구 주/도

  • 대금 청구 주소

  • 대금 청구 구/군/시

  • 대금 청구 우편 번호

  • 대금 청구 국가

  • 합계 금액

  • 유효일


다음은 Salesforce에 따라 위 필드에 배정된 스키마입니다.

차트


SQL Server에서 테이블 만들기

SQL Server에서 테이블을 만드는 데 필요한 데이터의 스키마에 따라 데이터는 Salesforce에서 가져온 후 아래 테이블로 푸시됩니다.

CREATE TABLE [dbo].[OrderReport]
(  

[BillingStreet] VARCHAR(MAX) NULL,
[BillingCity] VARCHAR(50) NULL,
[BillingState] VARCHAR(MAX) NULL,
[BillingCountry] VARCHAR(MAX) NULL,
[BillingPostalCode] VARCHAR(50) NULL,
[EffectiveDate] DATETIME NULL,
[TotalAmount] DECIMAL NULL  

)



Salesforce에서 데이터를 가져와 SQL Server에 저장

그다음에는 .NET Core 콘솔 응용 프로그램을 만들고 NuGet에서 다음 패키지를 추가합니다.

  • AdoNet.Salesforce

  • Data.SqlClient

첫 번째 라이브러리는 Salesforce에서 데이터를 가져오는 데 도움이 되고, 두 번째 라이브러리에는 데이터를 SQL Server에 대량 복사할 수 있게 해주는 SqlBulkCopy 클래스가 있습니다.

이제 C1.AdoNet.Salesforce 클래스를 사용해 Salesforce에서 주문 데이터를 가져와야 합니다. 이것은 잘 알려진 ADO.NET 클래스와 유사합니다.

private void SalesforceToSqlServer()

{

  //Read OAuth credentials from config
  var config = this.config.Value;  
  string connectionString = string.Format("Username={0};Password={1};Security Token={2};OAuth Client Id={3}; OAuth Client Secret={4}; OAuth Token Endpoint={5}; Url={6}; Use Pool = false; Max Page Size = 200; Use cache = false;",

  config.Username, config.Password, config.SecurityToken, config.ClientId, config.ClientSecret, config.OAuthTokenEndpoint, config.Url); using (C1SalesforceConnection con = new C1SalesforceConnection(connectionString))  
{

  con.Open();

  var cmd = con.CreateCommand();

  //Query to select data from salesforce server.

  cmd.CommandText = "Select BillingStreet,BillingCity,BillingState,BillingCountry,BillingPostalCode,EffectiveDate,TotalAmount from [Order]"; var reader = cmd.ExecuteReader();  

  //Copy data to SQL Server OrderReport table

// The GetConnectionString() function gets the SQL Server connection string 
  SqlBulkCopy bc = new SqlBulkCopy(GetConnectionString());  
    bc.DestinationTableName = "OrderReport"; 
    try  
    {
      bc.WriteToServer(reader);
    }

    catch (Exception ex)

    {

      //log error

    }

  }

}


SQL Server 업데이트

쿼리를 삽입 쿼리로 변경하고, 쿼리에 타임스탬프 매개 변수인 “LastModifiedDate”를 추가하고, 이 매개 변수를 구성에 저장하여 Salesforce 데이터로 SQL Server를 주기적으로 업데이트하는 서비스로 예시를 변환할 수 있습니다. 이 서비스는 타임스탬프 뒤에 추가되는 데이터를 지속적으로 가져오고 매번 삽입 후 LastModifiedDate를 구성으로 업데이트합니다. 그날의 요청이나 데이터 한도를 초과한 경우 고려할 사항이 또 있어야 하며, 추가 요청은 규정된 시간이 지난 후에 이루어져야 합니다.

데이터 가져오기

데스크톱 DataConnector 탐색기를 다운로드하여 작동하는 모습을 확인하십시오.


  • 페이스북으로 공유
  • 트위터로  공유
  • 링크 복사
  • 카카오톡으로 보내기

댓글목록

등록된 댓글이 없습니다.

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기

태그1

인기글

더보기
  • 인기 게시물이 없습니다.
메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
이메일 : sales-kor@mescius.com | 전화 : 1670-0583 | 경기도 과천시 과천대로 7길 33, 디테크타워 B동 1107호 메시어스(주) 대표자 : 허경명 | 사업자등록번호 : 123-84-00981 | 통신판매업신고번호 : 2013-경기안양-00331 ⓒ 2024 MESCIUS inc. All rights reserved.