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

Salesforce를 Entity Framework와 통합 (ComponentOne DataConnector 사용) > 블로그 & Tips

본문 바로가기

ComponentOne

블로그 & Tips

Salesforce를 Entity Framework와 통합 (ComponentOne DataConnector 사용)

페이지 정보

작성자 GrapeCity 작성일 2020-11-10 13:39 조회 6,760회 댓글 0건

본문

ComponentOne의 2020v1 릴리스에는 Microsoft Dynamics 365 및 OData와 같은 비즈니스 솔루션에 연결하는 데 사용할 수 있는 DataConnector 서비스 컴포넌트를 추가했습니다. 2020v2 릴리스에는 Salesforce 및 Kintone에 대한 지원도 추가했습니다. 이 게시물에서는 ComponentOne DataConnector를 사용하여 Salesforce를 Entity Framework와 통합하는 방법을 보여 줍니다.

Salesforce는 기업이 고객 데이터 및 관련 프로세스를 관리하는 데 도움을 주는 클라우드 기반 고객 관계 관리 플랫폼입니다.

Salesforce는 다양한 회사에서 고객 서비스 관계 개선을 위해 사용하는 자체 도구 집합을 제공합니다. 기업이 Salesforce의 데이터를 활용하고 Salesforce에서 즉시 이용할 수 없는 작업을 수행하는 데 있어 ComponentOne DataConnector 및 FlexGrid가 얼마나 유용한지 나타내는 사례에 대해 알아보겠습니다.

고객의 월별 구독 상태를 추적하고 Salesforce의 구독 레코드를 기반으로 사용자 정의 보고서를 생성해야 하는 온라인 서비스 공급자의 사례를 살펴봅니다.

다음은 구독 상태를 평가하는 데 필요할 수 있는 몇 가지 보기/보고서입니다.

  • 결제된 구독 및 결제되지 않은 구독

  • 국가별로 그룹화한 구독

  • 데이터별로 구독 정렬


Salesforce에서 데이터 쿼리

Salesforce에서 C1 DataConnector 사용에 대해 설명하기 전에 Salesforce의 기본 데이터 개체 쿼리 메커니즘에 대해 알아보겠습니다.

Salesforce는 레코드 쿼리를 위한 기본 SOQL(Salesforce 개체 쿼리 언어)을 제공합니다. 그러나 이 접근 방법에는 특정한 제한이 있습니다.

  • 해당 보고서를 생성하려면 최종 사용자가 이 구문을 학습해야 합니다.

  • 그룹화, 정렬, 필터링과 같이 단순한 작업을 위해 사용자는 매번 데이터를 쿼리해야 합니다.

Salesforce를 Entity Framework와 통합(ComponentOne DataConnector 사용)


C1 Data Connector 및 FlexGrid를 Salesforce 데이터와 함께 사용

C1 DataConnector는 Salesforce 데이터와의 연결을 관리하고 기본적인 구독 데이터를 쿼리하는 워크호스입니다. 이 데이터가 있으면 ComponentOne의 Flexgrid는 해당 레코드를 그리드에 표시하는 데 사용됩니다.

그룹화, 정렬, 필터링, 검색, 유효성 검사 등과 같은 ComponentOne FlexGrid 작업의 사용은 Salesforce에 직접 요청하지 않고 구독 데이터에서 (최종 사용자에 의해) 수행될 수 있습니다.

어떤 조합이 알맞은지 알았으므로 이제 응용 프로그램을 만들어보겠습니다!


1단계: OAuth 설정 및 사용

Salesforce에 연결하기 전에 응용 프로그램을 만들고 연결 설정을 위해 응용 프로그램의 자격 증명을 사용해야 합니다.

OAuth가 응용 프로그램을 인증할 수 있도록 응용 프로그램을 설정하는 방법을 설명하는 Salesforce 리소스로 이동하십시오.

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

  1. 토큰 끝점(https://ap16.salesforce.com/services/oauth2/token)

  2. API URL(https://ap16.salesforce.com/services/data/v45.0)

  3. 클라이언트 ID

  4. 클라이언트 암호

  5. Salesforce 사용자 이름 및 암호

  6. 보안 토큰

위 자격 증명은 대체로 Salesforce의 응용 프로그램 페이지에서 사용 가능하며, 보안 토큰은 Salesforce 계정 생성에 사용된 등록된 이메일로 전송될 수 있습니다.

아래 이미지는 OAuth 클라이언트 ID(Consumer Key) 및 OAuth 클라이언트 암호(Consumer Secret)를 보여 줍니다.

Salesforce를 Entity Framework와 통합(ComponentOne DataConnector 사용)

이제 Salesforce에 연결하는 데 필요한 정보를 확보했으므로 DataConnector를 사용할 응용 프로그램을 만들어 보겠습니다.


2단계: 프로젝트 설정

  1. Visual Studio를 열고 ASP.NET Core 웹 응용 프로그램 템플릿을 사용하여 새 프로젝트를 만듭니다.

  2. 선택했으면 다음 버튼을 클릭하고 프로젝트 이름과 위치를 입력합니다.

Salesforce를 Entity Framework와 통합(ComponentOne DataConnector 사용)

  1. 만들기를 클릭하고 웹 응용 프로그램(Model-View-Controller) 템플릿을 선택하여 MVC 템플릿으로 프로젝트를 초기화합니다.

Salesforce를 Entity Framework와 통합(ComponentOne DataConnector 사용)

  1. 프로젝트가 로드된 후 응용 프로그램에서 다음 NuGet 패키지를 추가합니다.

    • C1.DataConnector

    • C1.AdoNet.Salesforce

    • C1.EntityFrameworkCore.Salesforce

Salesforce에 기본 연결하는 데 필요한 핵심 패키지입니다.

** 또한 응용 프로그램에서 ComponentOne FlexGrid를 사용하려면 C1.AspNetCore.Mvc 패키지를 추가합니다.

Salesforce를 Entity Framework와 통합(ComponentOne DataConnector 사용)

패키지가 설치된 후에는 3단계로 이동합니다.


3단계: 모델 및 컨텍스트 클래스 만들기

Entity Framework에서는 데이터베이스에 단일 엔터티 정의를 포함한 모델 클래스를 활용하는 컨텍스트 클래스를 통해 모든 데이터가 처리됩니다. 따라서 Salesforce를 사용할 때도 모델 및 컨텍스트 클래스가 필수입니다. 해당 클래스를 쉽게 만들 수 있도록 DataConnector는 스캐폴딩도 제공합니다.

해당 클래스를 스캐폴딩하려면 Microsoft.EntityFrameworkCore.Tools NuGet 패키지가 필요합니다. 이 패키지의 2.1.0 버전을 설치하시기 바랍니다.

이 패키지를 설치한 후 도구 → NuGet 패키지 관리자 → 패키지 관리자 콘솔을 클릭하여 패키지 관리자 콘솔을 엽니다. 콘솔이 표시되면 다음 명령을 사용하여 코드를 생성합니다.

Scaffold-DbContext "Username=****;Password=****;Security Token=****;OAuth Client Id=****; OAuth Client Secret=*****; OAuth Token Endpoint=https://ap17.salesforce.com/services/oauth2/token; Url=https://ap17.salesforce.com/services/data/v42.0" C1.EntityFrameworkCore.Salesforce -OutputDir "GeneratedCode" -Tables Subscription__c


모든 자격 증명을 이에 따라 업데이트해야 합니다. 이 명령을 실행하면 Generated Code라는 새 폴더가 프로젝트에 추가됩니다. 이 폴더는 컨텍스트 및 Subscription__c 개체의 모델 클래스를 포함하게 됩니다. 이제 Linq를 사용하여 Salesforce에 저장된 데이터베이스를 쿼리합니다.

Salesforce를 Entity Framework와 통합(ComponentOne DataConnector 사용)

SubscriptionC 클래스는 이와 비슷한 모양이 됩니다. 이 클래스는 Salesforce 개체/표의 각 열에 해당하는 모든 적절한 속성을 포함하게 됩니다.

Salesforce를 Entity Framework와 통합(ComponentOne DataConnector 사용)

그리고 이것은 MainContext.cs 파일이 됩니다.

Salesforce를 Entity Framework와 통합(ComponentOne DataConnector 사용)

연결 문자열은 스캐폴더에 의해 자동으로 생성됩니다. 연결 문자열을 프로젝트의 구성 파일로 이동하는 것이 좋습니다.

MainContext 클래스에서 OnConfiguring 메서드를 확인합니다. 이 메서드에서 UseSalesforce 메서드는 Salesforce에 연결하고 해당 데이터베이스에서 작업을 수행하기 위해 제공된 연결 문자열을 사용합니다.

개체의 이름을 쉼표로 구분하는 방법을 통해 여러 개체를 제공할 수도 있습니다.

Scaffold-DbContext "Username=****;Password=****;Security Token=****;OAuth Client Id=****; OAuth Client Secret=*****; OAuth Token Endpoint=https://ap17.salesforce.com/services/oauth2/token; Url=https://ap17.salesforce.com/services/data/v42.0" C1.EntityFrameworkCore.Salesforce -OutputDir "GeneratedCode" -Tables Table1, Table2


스캐폴딩을 사용하지 않고 수동으로 해당 클래스를 만들 수도 있습니다. 자세히 알아보려면 이 문서를 읽어 보십시오.

DataConnector를 사용하여 EntityFramework의 SalesForce에 통합하는 데 필요한 단계입니다. 이 클래스를 쉽게 초기화하고 Subscription__c 개체를 사용하여 Linq를 사용한 작업을 수행할 수 있습니다.


4단계: Salesforce에서 구독 데이터 페치

아래 프로세스는 Salesforce에서 데이터를 페치하여 FlexGrid에 표시하는 방법을 설명합니다. 데이터를 페치하기 위해 SubscriptionRepo 클래스를 만들어 SubscriptionContext 클래스에 대한 추상화 계층을 제공합니다. 이 클래스를 추가한 후 다음 코드를 추가합니다.

public class SubscriptionRepo
{
    private MainContext db { get; set; }
    public SubscriptionRepo()
    {
        this.db = new MainContext();
    }
    public List<SubscriptionC> Get()
    {
        return this.db.SubscriptionC.ToList();
    }
}


SubscriptionRepo의 Get 메서드를 사용하여 Salesforce 개체에 저장된 모든 구독 레코드 목록을 페치할 수 있습니다.


5단계: FlexGrid에서 구독 데이터 표시

이제 FlexGrid 컨트롤을 추가하여 구독 데이터를 표시해 보겠습니다. HomeController.cs 클래스에는 MVC Core 템플릿에 의해 이미 생성된 Index 메서드가 있어야 합니다. 이 메서드를 사용하여 구독 목록을 컨트롤러용 모델로 반환합니다.

public IActionResult Index()
{
    var repo = new SubscriptionRepo();
    return View(repo.Get());
}


Index.cshtml 파일에서 이 모델에 바인딩된 FlexGrid 컨트롤을 추가합니다.

@using C1.Web.Mvc.Grid
@model IEnumerable<SubscriptionC>
<script type="text/javascript">
  function getError(item, prop) {
      if (prop === 'Paid' && !item[prop]) {
          return 'Subscription is not paid';
      }
  }
</script>
<p id="theSearch"></p>
<c1-flex-grid id="theGrid" auto-generate-columns="false" height="500px" is-read-only="true" selection-mode="Row">
  <c1-items-source get-error="getError" source-collection="Model"></c1-items-source>
  <c1-flex-grid-column binding="Name" header="ID" width="100"></c1-flex-grid-column>
  <c1-flex-grid-column binding="NameC" header="Company Name" width="2*"></c1-flex-grid-column>
  <c1-flex-grid-column binding="DateC" header="Date" format="MMM dd, yyyy" width="*"></c1-flex-grid-column>
  <c1-flex-grid-column binding="StreetC" header="Street" width="*"></c1-flex-grid-column>
  <c1-flex-grid-column binding="CityC" header="City" width="*"></c1-flex-grid-column>
  <c1-flex-grid-column binding="CountryC" header="Country" width="*"></c1-flex-grid-column>
  <c1-flex-grid-column binding="ZipC" header="Zip" width="50"></c1-flex-grid-column>
  <c1-flex-grid-column binding="PaidC" header="Paid" width="60"></c1-flex-grid-column>
  <c1-flex-grid-filter></c1-flex-grid-filter>
  <c1-flex-grid-group-panel id="thePanel" placeholder="Drag columns here to create groups"></c1-flex-grid-group-panel>
</c1-flex-grid>
<c1-flex-grid-search id="theSearch" grid="theGrid" placeholder="Search..."></c1-flex-grid-search>


위 코드는 검색 및 그룹화를 수행하는 데 사용할 수 있는 FlexGrid, FlexGridSearch 컨트롤 및 GroupPanel 컨트롤을 각각 추가합니다.

또한 결제되지 않은 구독에 대한 레코드를 강조하는 데 사용되는 getError 메서드도 포함합니다.

FlexGrid의 스크립트 및 스타일도 초기화합니다.

~/Shared/_Layout.cshtml 파일에서 <head> 태그의 끝에 다음 코드를 추가합니다.

<c1-styles />
<c1-scripts>
  <c1-basic-scripts />
</c1-scripts>


필요한 구성이 모두 끝났습니다. 이제 작동 중인 응용 프로그램을 살펴보겠습니다.

Salesforce를 Entity Framework와 통합(ComponentOne DataConnector 사용)


공통 작업


검색:

FlexGridSearch 컨트롤을 사용하여 FlexGrid에서 검색 작업을 수행합니다. 검색 키워드를 입력하자마자 검색이 이루어지는 것을 확인합니다.

응용 프로그램에서 다음 코드를 추가하여 FlexGridSearch 컨트롤을 추가합니다.

<c1-flex-grid-search id="theSearch" grid="theGrid" placeholder="Search..."></c1-flex-grid-search>



필터링:

FlexGridFilter 컨트롤을 사용하여 데이터를 필터링합니다. 구독이 결제된 레코드를 표시하려면 열 헤더 옆에 있는 필터 아이콘을 클릭하여 Paid 열에 필터를 적용합니다.

필터링을 사용하도록 설정하려면 <c1-flex-grid> 컨트롤 안에 다음 코드를 추가합니다.

<c1-flex-grid-filter></c1-flex-grid-filter>

그러면 그리드에서 자동으로 필터링이 사용하도록 설정됩니다.


그룹화:

특정 열별로 데이터를 그룹화하려면 GroupPanel 컨트롤을 사용합니다.

데이터를 그룹화해야 하는 열을 그룹 패널로 끌어오기만 하면 데이터가 그룹화됩니다. FlexGridFilter 컨트롤 추가와 같은 방법으로 GroupPanel 컨트롤을 <c1-flex-grid> 컨트롤 안에 추가하면 그룹 패널이 FlexGrid 위에 추가됩니다.

<c1-flex-grid-group-panel id="thePanel" placeholder="Drag columns here to create groups"></c1-flex-grid-group-panel>



정렬:

FlexGrid를 정렬하려면 열 헤더를 클릭하고 정렬을 적용하기만 하면 됩니다.




유효성 검사:

데이터 유효성을 검사하려면 getError 메서드를 사용합니다. 아래 이미지에서 구독이 결제되지 않은 레코드에 표시된 빨강 테두리를 확인합니다.

유효성 검사를 사용하도록 설정하려면 item 및 prop의 두 매개 변수를 사용하는 javascript 함수를 만듭니다.

item 매개 변수는 현재 항목이며 prop 매개 변수는 그 특정 항목의 현재 속성입니다. 현재 값에 오류가 있으면 오류 메시지를 반환하고, 그러지 않으면 0을 반환하지 않습니다.

<script type="text/javascript">
  function getError(item, prop) {
      if (prop === 'PaidC' && !item[prop]) {
          return 'Subscription is not paid';
      }
  }
</script>


메서드가 추가되면 <c1-items-source> 태그의 get-error 속성에서 이 메서드를 제공합니다.

<c1-items-source get-error="getError" source-collection="Model"></c1-items-source>


그러면 각 항목의 유효성 검사가 완료됩니다.

Salesforce를 Entity Framework와 통합(ComponentOne DataConnector 사용)


증분 캐시

일부 응용 프로그램은 성능 향상을 위해 클라이언트 측에 캐시되어야 할 많은 양의 데이터를 포함합니다. 주로 데이터 집합의 레코드 중 일부만이 업데이트되므로 전체 캐시에 업데이트가 필요하지는 않습니다.

증분 캐싱은 레코드의 타임스탬프를 사용하여 표의 레코드를 업데이트하는 방법입니다. 캐시에 있는 특정 레코드의 타임스탬프가 서버에 있는 동일한 레코드의 타임스탬프보다 작은 경우에는 캐시가 업데이트됩니다. 증분 캐싱이 작동하려면 표(또는 개체)에 타임스탬프 열이 있어야 하며, 새 레코드가 추가되거나 기존 레코드가 업데이트될 때마다 업데이트되어야 합니다.

DataConnectors에서 증분 캐싱을 구현하려면 Increment UpdateIncrement Update Column 속성을 사용합니다.

Increment Update 속성은 증분 캐싱이 사용하도록 설정되어야 하는지 여부를 설정하는 데 사용되며, Increment Update Column 속성은 레코드의 타임스탬프를 저장하는 열 이름을 설정하는 데 사용됩니다.

다음과 같이 Salesforce에 대한 연결 문자열을 업데이트합니다.

string connectionString = "Username=****;Password=****;Security Token=****;OAuth Client Id=****; OAuth Client Secret=****; OAuth Token Endpoint=https://ap16.salesforce.com/services/oauth2/token; Url=https://ap16.salesforce.com/services/data/v45.0; Incremental Update=true; Incremental Update Column=LastModifiedDate";


연결 문자열 끝에 Increment Update 및 Increment Update Column 속성이 추가되었습니다. 기본적으로 Salesforce에서 Increment Update Column은 LastModifiedDate입니다.

이제 응용 프로그램에 대해 증분 캐싱이 사용하도록 설정되었습니다.

증분 캐싱에 대해 더 자세히 알고 싶으면 여기에서 문서 링크로 이동하십시오.


결론

이 문서는 Salesforce 및 C1 DataConnectors를 시작하는 방법을 안내합니다. Salesforce에서 DataConnectors를 사용하는 방법에 대한 자세한 설명서는 이 문서 링크로 이동하십시오.

오프라인 샘플을 다운로드할 수도 있습니다. appsettings.json 파일에서 자격 증명을 업데이트했는지 확인하십시오. 또한 Subscription__c 개체는 사용자 정의 개체이며 Salesforce에는 없습니다.

Salesforce 계정에서 이 사용자 정의 개체를 만들어야 합니다. Salesforce에서 개체를 만드는 방법을 설명하는 이 리소스로 이동하십시오.

ComponentOne의 2020v2 릴리스에 새로운 기능과 컨트롤이 많이 추가되었습니다.

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

댓글목록

등록된 댓글이 없습니다.

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

태그1

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