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

.NET Salesforce OData 서비스 만들기 > 블로그 & Tips

본문 바로가기

ComponentOne

블로그 & Tips

.NET Salesforce OData 서비스 만들기

페이지 정보

작성자 GrapeCity 작성일 2021-08-13 14:08 조회 3,949회 댓글 0건

본문

Salesforce는 고객 관계 관리 및 분석 시스템과 같은 온라인 엔터프라이즈 시스템을 제공합니다. 외부 응용 프로그램이 해당 엔터티에 액세스할 수 있도록 웹 서비스를 제공합니다. 외부 응용 프로그램은 보고서, 분석, 데이터 동기화 또는 업데이트 목적으로 이러한 웹 서비스를 호출합니다. 그렇다면 Salesforce 데이터에 액세스하기 위해 다른 서비스가 필요한 이유는 무엇일까요?


이러한 서비스에 대한 액세스는 제어되지 않거나 무제한인 것이 아닙니다. Salesforce는 서버의 로드 균형을 맞추기 위해 스로틀링 및 요청 제한 기술을 적용합니다. 많은 외부 응용 프로그램이 이러한 서비스에 액세스할 수 있으며 제한에 도달하면 해당 요청이 거부될 수 있습니다.


이 문제는 완전히 제거되지는 않더라도 외부 응용 프로그램의 일부를 통해 Salesforce에 요청하는 서비스를 사용하여 관리할 수 있습니다. 이 서비스는 동일한 레코드 집합에 대해 Salesforce에 반복적인 요청이 이루어지지 않도록 데이터를 캐시해야 합니다. OData는 널리 사용되는 REST 기반 프로토콜이므로 이러한 서비스를 위한 자연스러운 선택입니다.


이제 Salesforce를 통해 OData 서비스가 필요한 이유를 알았으므로 ASP.NET Core 3.1에서 OData 서비스를 만드는 방법에 대해 알아보겠습니다. 또한 Microsoft Excel과 같은 외부 응용 프로그램과 WinForms 응용 프로그램에서 이 OData 피드에 액세스하는 방법도 살펴보겠습니다. 그 과정에서 ComponentOne DataConnector 라이브러리를 통해 위의 모든 작업을 손쉽게 수행할 수 있는 방법에 대해 알아보겠습니다.


OData 서비스 프로젝트 설정


사전 요구 사항

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


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

  • Token endpoint

  • API URL

  • 클라이언트 ID

  • 클라이언트 암호

  • Salesforce 사용자 이름 및 암호

  • 보안 토큰


프로젝트 설정

  • Visual Studio 2019에서 새 Web API 응용 프로그램을 만듭니다.

  • nuget.org에서 다음 NuGet 패키지를 추가합니다.

    • Microsoft.AspNetCore.OData(버전-7.5.7)

    • C1.EntityFramework.Salesforce

    • Microsoft.EntityFrameworkCore.Relational(버전-3.1.13)



Scaffold Salesforce 엔터티 모델


도구 → NuGet 패키지 관리자 → 패키지 관리자 콘솔 메뉴에서 NuGet 패키지 관리자 콘솔을 엽니다.


다음 엔터티 프레임워크 스캐폴딩 명령을 입력합니다.

Opportunity & Account 엔터티에 대한 DbContext 클래스와 모델을 생성하려면 XXXX를 필수 자격 증명으로 바꿔야 합니다.

Scaffold-DbContext "Username=xxxx;Password=xxxx;Security Token=xxxx;OAuth Client Id=xxxx; OAuth Client Secret=xxxx; OAuth Token Endpoint=https://ap16.salesforce.com/services/oauth2/token; Url=https://ap16.salesforce.com/services/data/v45.0" C1.EntityFrameworkCore.Salesforce -OutputDir “Model” -Tables Opportunity, Account


dbcontext 클래스


캐싱 활성화


연결 문자열에서 아래와 같이 Use Cache를 "true"로 설정하고 Cache ToleranceCache Location 값을 설정하여 캐싱을 활성화할 수 있습니다.


보안상의 이유로 연결 문자열은 appsetting.json 파일로 이동하고 해당 값은 구성을 사용하여 Startup.cs에서 읽어야 합니다.


"Username=user@email.com;Password= xxxx;Security Token=xxxx;OAuth Client Id=xxx; OAuth Client Secret=xxxx; OAuth Token Endpoint=https://ap16.salesforce.com/services/oauth2/token; Url=https://ap16.salesforce.com/services/data/v45.0; Use Cache=true; Cache Tolerance=500; Cache Location='C:\Temp\salesforce.db'"


이렇게 하면 동일한 레코드 세트에 대한 네트워크 왕복이 줄어들어 성능과 데이터 가용성이 향상됩니다. Salesforce에 업데이트\삽입되는 데이터는 캐시에 업데이트\추가되는 곳에서만 전체 새로고침 대신 증분 캐싱을 구성할 수 있습니다. 이렇게 하면 시간이 지남에 따라 서비스 성능이 향상됩니다.


이 기능은 연결 문자열에서 IncrementalUpdate를 "true"로 설정하고 Default Time Stamp 열을 "LastModifiedDate"로 설정하여 활성화할 수 있습니다. 자세한 내용은 문서를 참조하십시오.


EDM 모델 생성


OData는 EDM(엔터티 데이터 모델)을 사용하여 데이터 구조를 설명합니다. ASP.NET Core OData에서는 위의 유형을 기반으로 EDM 모델을 쉽게 빌드할 수 있습니다.


따라서 "Startup" 클래스의 끝에 다음 비공개 정적 메서드를 추가합니다.

public static IEdmModel GetEdmModel()  
      {  
          ODataConventionModelBuilder builder = new ODataConventionModelBuilder();  
          builder.EntitySet<Account>("Accounts");  
          builder.EntitySet<Opportunity>("Opportunities");  
          return builder.GetEdmModel();  
      }  



OData 서비스 등록


ASP.NET Core OData를 사용하려면 서비스가 등록되어야 합니다. 라이브러리는 기본 제공 의존성 주입을 통해 필요한 OData 서비스를 등록하기 위해 "AddOData()"라는 확장 메서드를 제공합니다. 따라서 "Startup" 클래스의 "ConfigureServices" 메서드에 다음 코드를 추가합니다.

public void ConfigureServices(IServiceCollection services)  
      {  
          services.AddControllers().SetCompatibilityVersion(CompatibilityVersion.Version_3_0);  
          services.AddDbContext<MainContext>();  
          services.AddOData();  
      }


OData EndPoint 등록


또한 OData endpoint을 등록하기 위해 OData 경로를 추가해야 합니다. OData 경로에 "odata" 접두사가 있는 "odata"라는 OData 경로를 추가하고 "GetEdmModel()"을 호출하여 Edm 모델을 endpoint에 바인딩합니다.


"Startup" 클래스의 "Configure()" 메서드를 다음과 같이 변경합니다.

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)  
      {  
          if (env.IsDevelopment())  
          {  
              app.UseDeveloperExceptionPage();  
          }
​
          app.UseRouting();
​
          app.UseAuthorization();
​
          app.UseEndpoints(endpoints =>  
          {  
              endpoints.MapODataRoute("odata","odata",GetEdmModel());  
          });  
      }


컨트롤러 만들기

  • 컨트롤러 폴더를 마우스 오른쪽 버튼으로 클릭하고 추가 → 새 스캐폴드 항목을 선택합니다.

  • 새 스캐폴드 항목 추가 창의 왼쪽 창에서 API를 선택하고 오른쪽 창에서 API Controller-Empty를 선택합니다.

api 컨트롤러


추가를 클릭합니다. 다음 새 항목 추가 창에서 컨트롤러 이름을 "OpportunitiesController"로 설정합니다. 그러면 프로젝트에 기회 컨트롤러가 추가됩니다.


아래 코드에서는 ODataController에서 OpportunitiesController를 상속하고 이전에 스캐폴드한 MainContext의 인스턴스를 초기화합니다.


또한 EnableQuery 특성을 사용하여 Get 메서드를 추가합니다. Get 메서드는 기회를 반환합니다. 쿼리 활성화 속성에 페이지 크기를 추가하여 페이징을 쉽게 구성할 수 있습니다.

public class OpportunitiesController : ODataController  
  {  
      MainContext ctx;
​
      public OpportunitiesController(MainContext context)  
      {  
          ctx = context;  
      }
​
      [EnableQuery]  
      public IActionResult Get()  
      {  
          return Ok(ctx.Opportunity);  
      }    
​
  }


OpportunitiesController와 유사하게 AccountsController를 추가합니다.

public class AccountsController : ODataController  
  {  
      private MainContext ctx;
​
      public AccountsController(MainContext context)  
      {  
          ctx = context;  
          System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture;  
      }
​
      [EnableQuery(PageSize=10)]  
      public IActionResult Get()  
      {  
          return Ok(ctx.Account);  
      }
​
      [ODataRoute]  
      [EnableQuery]  
      public IActionResult Get(string key)  
      {  
          return Ok(ctx.Account.FirstOrDefault(c => c.Id == key));  
      }
​
  }


OData 서비스 실행

이제 OData 서비스 프로젝트가 준비되었습니다. 응용 프로그램을 실행하고 ~/odata/opportunities로 이동하면 결과 데이터를 얻을 수 있습니다.

odata 서비스


이 데이터에 대한 쿼리를 수행하여 필터링을 적용할 수도 있습니다.

odata 쿼리



OData 클라이언트 응용 프로그램에서 Salesforce 데이터에 액세스


Microsoft Excel에서 기회 데이터 분석


Excel은 OData에 연결하여 데이터를 가져올 수 있습니다. 풍부한 분석 도구를 사용하여 Salesforce 데이터를 분석할 수 있습니다.


Excel을 열고 빈 통합 문서를 만듭니다. 데이터 탭으로 이동하여 데이터 가져오기 버튼을 클릭합니다. "기타 소스에서" 메뉴에서 "OData 피드"를 클릭합니다. OData 피드를 입력하기 위한 대화 상자가 열립니다. 생성한 서비스 URL을 입력하고 확인을 클릭합니다.


odata 창


다음 창에서 "로드"를 클릭합니다. 데이터가 Excel로 로드됩니다. 홈 탭에서 데이터 분석 버튼을 클릭하여 데이터를 분석하면 오른쪽 창에 데이터 분석(아이디어)이 표시됩니다. 피벗 표와 차트를 추가하여 기회 데이터를 분석할 수도 있습니다.


기회 excel


WinForms 응용 프로그램에서 기회 데이터 분석 


ComponentOne FlexPivot을 사용하여 WinForms 응용 프로그램의 기회 데이터를 분석할 수 있습니다.

FlexPivot 컨트롤을 Odata 피드에 바인딩하기만 하면 사용자가 데이터 분석을 시작할 수 있습니다.

FlexPivot 컨트롤을 사용하여 WinForms 응용 프로그램에서 기회 데이터를 분석하는 방법을 보여주기 위해 ~\Documents\ComponentOne Samples\ServiceComponents\DataConnector\CS\Win\DataConnectorExplorer\DataConnectorExplorer에서 사용 가능한 Data​ConnectorExplorer 응용 프로그램을 사용할 수 있습니다. 

응용 프로그램을 열고 실행하십시오. 응용 프로그램이 열리면 다음과 같이 표시됩니다.

탐색기


왼쪽 창의 드롭다운에서 OData를 선택합니다. 속성 그리드에서 값을 지우고 Url 필드에 위에서 만든 OData 피드를 입력합니다.


이는 다음과 같습니다(응용 프로그램이 사용하는 포트에 따라 다름): https://localhost:44312/odata/. 연결을 클릭합니다.


응용 프로그램은 OData 피드에서 사용 가능한 요약 표를 표시합니다.


연결됨


SQL 상자에 다음과 같이 SQL 쿼리를 입력합니다.

  • Opportunities에서 *(전체) 선택하고

  • 우측 상단 화살표 버튼 클릭하면


FlexPivot이 Opportunities 테이블의 필드로 채워집니다.

채워짐


Opportunities 데이터 분석을 시작하겠습니다.

차트 탭을 클릭합니다.


각 단계별 리드 생성 활동은 아래와 같습니다.

  • Value에서 Sales Amount필드를 선택하고, 행(Rows)에서 StageName을 선택하고, 필터(Filters)에서 LeadSource를 선택합니다. LeadSource를 마우스 오른쪽 버튼으로 클릭하고 FieldSettings를 선택합니다.

  • 모두 선택을 취소한 다음 FieldSettings 창에서 "External", "Partners", "PhoneEnquiry", "TradeShow", "Web"을 선택합니다(차트는 LeadSource를 기반으로 단계와 금액을 표시합니다).

  • 확인을 클릭합니다.


salesforce 분석



WinForms 응용 프로그램


WinForms 응용 프로그램에서 OData 피드로 작업하는 방법에는 몇 가지가 있습니다.

  1. 이 Microsoft 문서에 설명된 대로 서비스 참조 방식을 사용

  2. ComponentOne OData 데이터 커넥터 사용


ComponentOne ODataConnector의 장점은 ADO.NET 또는 EntityFrameworkCore를 사용하여 OData 피드로 작업할 수 있다는 것입니다.


다음은 ADO.NET을 사용하여 FlexGrid 컨트롤을 OData 피드에 바인딩하는 코드입니다.

private void Form1_Load(object sender, EventArgs e)  
      {  
          DataTable dt=new DataTable();  
          var connectionString="Url=[https://localhost:44312/odata/](https://localhost:44312/odata/)";  
          C1ODataConnection con = new C1ODataConnection(connectionString);  
          con.Open();  
          string sql = "select * from Accounts";  
          using (C1ODataDataAdapter da=new C1ODataDataAdapter(con,sql))  
          {  
              da.Fill(dt);  
          }  
          con.Close();  
          this.c1FlexGrid1.DataSource = dt;  
      }


odata 응용 프로그램


이제 그리드에 유형별로 그룹화된 계정 데이터가 표시됩니다.


이 블로그에서는 Salesforce를 통한 OData 피드가 외부 응용 프로그램의 경험을 향상시킬 수 있는 방법을 보여주었습니다. ComponentOne DataConnectors는 뛰어난 연결성, 성능, 쿼리 및 CRUD 기능을 제공하여 응용 프로그램을 만드는 개발자의 노력을 단순화합니다.





지금 바로 ComponentOne을 다운로드하여 직접 테스트해보세요!

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

댓글목록

등록된 댓글이 없습니다.

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

태그1

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