openlang

TypeScript에서 Dynamics CRM에 접근하기

CRM 코드가 웹 리소스 안에서 실행되다 보니 엔터티 데이터를 가져오려면

window.parent.Xrm.Page...etc

이렇게 작성해야 해요.

그런데 typescript로 작성하면 이 표현식이 컴파일되지 않아요. 지금은 Xrm.Page 앞에 window.parent를...(Xrm 타입 정의는 설치했어요) 손으로 넣고 있는데, 이러면 TypeScript를 쓰는 취지가 무색해지네요. 타입 정의든 다른 방법이든, window.parent.Xrm에 평소처럼 깔끔하게 접근할 수 있는 방법이 있을까요? 편집기는 Visual Studio를 써요

영어에서 번역원문 보기

이어지는 대화 2

서로의 근거를 따라
  1. 고유 링크

    루트 참조를 window.Xrm 객체에서 얻는 것 자체는 피할 수 없을 것 같지만, 그 접근을 감싸 두면 한 번만 하면 됩니다.

    알맞은 ts 템플릿을 설치했다면, 즉:

    Install-Package xrm.TypeScript.DefinitelyTyped

    이 정도로 간단하게 될 겁니다

    class CrmAccess {
      constructor(private context: Xrm.XrmStatic) { }
      read() {
        //stay within the typed environment
        //return this.context.Page....;
      }
    }

    그다음 아래처럼 한 번만 초기화하세요

    var crmAccess = new CrmAccess(window.Xrm);
    crmAccess.read();
    영어에서 번역원문 보기
  2. 고유 링크

    저는 typescript (/questions/tagged/typescript)에서 (<any>window.parent).Xrm.를 써서 window.parent.Xrm를 사용해도 컴파일 오류가 나지 않게 합니다. 예를 들면:

    let titleValue = (<any>window.parent).Xrm.Page.data.entity.attributes
      .get("name").getValue()
    영어에서 번역원문 보기

같은 질문의 다른 갈래

  1. Java Mail에서 이메일 주소 대신 발신자 이름을 표시하기

    Java Mail API로 메시지를 보내고 있어요. 도착한 메일의 받은편지함에는 보낸 주소가 표시돼요. 그 발신자 주소 대신 텍스트를 보여 주고 싶어요. facebook에서 오는 메일은 받은편지함에 "mailbox@faceb…

    답글 2최근 활동 java
  2. Gleam HTTP 응답 헤더에는 어떤 날짜 형식이 필요한가요?

    Date 헤더를 보내고 싶어요. 필요한 형식은 다음과 같아요: 지금까지 시도한 코드는 이거예요:

    답글 3최근 활동 gleam
  3. OpenCV C++에서 Mat 영역을 가장 빠르게 0으로 채우는 방법?

    그레이스케일 Mat 이미지의 한 영역을 0으로(또는 다른 상수 값으로) 채우는 가장 효율적인 방법은 뭔가요? 0으로 된 이미지를 만들어 copyTo()를 호출하는 게 맞을까요, 아니면 더 좋은 방법이 있나요?

    답글 3최근 활동 cpp