.NET Salesforce OData 서비스 만들기
페이지 정보
작성자 GrapeCity
본문
관련링크
Salesforce는 고객 관계 관리 및 분석 시스템과 같은 온라인 엔터프라이즈 시스템을 제공합니다. 외부 응용 프로그램이 해당 엔터티에 액세스할 수 있도록 웹 서비스를 제공합니다. 외부 응용 프로그램은 보고서, 분석, 데이터 동기화 또는 업데이트 목적으로 이러한 웹 서비스를 호출합니다. 그렇다면 Salesforce 데이터에 액세스하기 위해 다른 서비스가 필요한 이유는 무엇일까요?
이 문제는 완전히 제거되지는 않더라도 외부 응용 프로그램의 일부를 통해 Salesforce에 요청하는 서비스를 사용하여 관리할 수 있습니다. 이 서비스는 동일한 레코드 집합에 대해 Salesforce에 반복적인 요청이 이루어지지 않도록 데이터를 캐시해야 합니다. OData는 널리 사용되는 REST 기반 프로토콜이므로 이러한 서비스를 위한 자연스러운 선택입니다.
이제 Salesforce를 통해 OData 서비스가 필요한 이유를 알았으므로 ASP.NET Core 3.1에서 OData 서비스를 만드는 방법에 대해 알아보겠습니다. 또한 Microsoft Excel과 같은 외부 응용 프로그램과 WinForms 응용 프로그램에서 이 OData 피드에 액세스하는 방법도 살펴보겠습니다. 그 과정에서 라이브러리를 통해 위의 모든 작업을 손쉽게 수행할 수 있는 방법에 대해 알아보겠습니다.
OData 서비스 프로젝트 설정
사전 요구 사항
Salesforce는 REST API에 연결하려는 외부 응용 프로그램에 대한 OAuth 인증을 지원합니다. 이 에서는 응용 프로그램이 OAuth를 지원하도록 설정하는 방법을 설명합니다.
Salesforce에 연결하려면 다음 정보가 필요합니다.
클라이언트 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 패키지 관리자 콘솔을 엽니다.
다음 엔터티 프레임워크 스캐폴딩 명령을 입력합니다.
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
캐싱 활성화
연결 문자열에서 아래와 같이 Use Cache를 "true"로 설정하고 Cache Tolerance 및 Cache Location 값을 설정하여 캐싱을 활성화할 수 있습니다.
보안상의 이유로 연결 문자열은 appsetting.json 파일로 이동하고 해당 값은 구성을 사용하여 Startup.cs에서 읽어야 합니다.
"Username=user@email;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를 선택합니다.
추가를 클릭합니다. 다음 새 항목 추가 창에서 컨트롤러 이름을 "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 클라이언트 응용 프로그램에서 Salesforce 데이터에 액세스
Microsoft Excel에서 기회 데이터 분석
Excel은 OData에 연결하여 데이터를 가져올 수 있습니다. 풍부한 분석 도구를 사용하여 Salesforce 데이터를 분석할 수 있습니다.
Excel을 열고 빈 통합 문서를 만듭니다. 데이터 탭으로 이동하여 데이터 가져오기 버튼을 클릭합니다. "기타 소스에서" 메뉴에서 "OData 피드"를 클릭합니다. OData 피드를 입력하기 위한 대화 상자가 열립니다. 생성한 서비스 URL을 입력하고 확인을 클릭합니다.
다음 창에서 "로드"를 클릭합니다. 데이터가 Excel로 로드됩니다. 홈 탭에서 데이터 분석 버튼을 클릭하여 데이터를 분석하면 오른쪽 창에 데이터 분석(아이디어)이 표시됩니다. 피벗 표와 차트를 추가하여 기회 데이터를 분석할 수도 있습니다.
WinForms 응용 프로그램에서 기회 데이터 분석
응용 프로그램을 열고 실행하십시오. 응용 프로그램이 열리면 다음과 같이 표시됩니다.
왼쪽 창의 드롭다운에서 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를 기반으로 단계와 금액을 표시합니다).
확인을 클릭합니다.
WinForms 응용 프로그램
WinForms 응용 프로그램에서 OData 피드로 작업하는 방법에는 몇 가지가 있습니다.
이 Microsoft 에 설명된 대로 서비스 참조 방식을 사용
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; }
이제 그리드에 유형별로 그룹화된 계정 데이터가 표시됩니다.
이 블로그에서는 Salesforce를 통한 OData 피드가 외부 응용 프로그램의 경험을 향상시킬 수 있는 방법을 보여주었습니다. ComponentOne DataConnectors는 뛰어난 연결성, 성능, 쿼리 및 CRUD 기능을 제공하여 응용 프로그램을 만드는 개발자의 노력을 단순화합니다.
지금 바로 ComponentOne을 다운로드하여 직접 테스트해보세요!
댓글목록
등록된 댓글이 없습니다.