다음을 통해 공유


예측 그리드의 열 헤더 사용자 지정

Power Apps 코드 구성 요소를 사용하여 예측 그리드의 열 헤더를 사용자 지정할 수 있습니다. 예를 들어 열 이름을 번역하거나 추가 컨텍스트에 대한 도구 설명을 추가할 수 있습니다.

라이선스 및 역할 요구 사항

요구 사항 유형 반드시 필요
라이선스 Dynamics 365 Sales Premium 또는 Dynamics 365 Sales Enterprise
추가 정보: Dynamics 365 Sales 가격
보안 역할 시스템 관리자 또는 시스템 사용자 지정자
추가 정보: 미리 정의된 영업에 대한 보안 역할 정보

헤더를 사용자 지정하는 방법

예를 들어 사용자 지정을 이해해 보겠습니다. 예측 그리드의 열 이름 ForecastWon 에 대한 프랑스어 번역을 추가합니다.

  1. 이름이ColumnHeader코드 구성 요소를 만듭니다.
  2. 리소스 파일 생성 및 번역 추가
  3. 매니페스트 구현
  4. 구성 요소 논리 구현
  5. 구성 요소 빌드 및 패키징

리소스 파일 만들기 및 번역 추가

코드 구성 요소를 만들면 지정한 경로에 ColumnHeader폴더가 생성됩니다. 리소스 파일을 만들고 리소스 파일에 프랑스어 번역을 추가해 보겠습니다.

  1. ColumnHeader 폴더 아래에 strings이라는 폴더를 만듭니다.

  2. 다음 코드를 새 파일 ColumnHeader.1036.resx에 복사합니다.

    노트

    파일 이름의 숫자 1036은 프랑스어의 언어 코드입니다. 언어 코드 목록은 이 문서를 참조하세요.

    <?xml version="1.0" encoding="utf-8"?>
    <root>
    
      <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
        <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
        <xsd:element name="root" msdata:IsDataSet="true">
          <xsd:complexType>
            <xsd:choice maxOccurs="unbounded">
              <xsd:element name="metadata">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="value" type="xsd:string" minOccurs="0" />
                  </xsd:sequence>
                  <xsd:attribute name="name" use="required" type="xsd:string" />
                  <xsd:attribute name="type" type="xsd:string" />
                  <xsd:attribute name="mimetype" type="xsd:string" />
                  <xsd:attribute ref="xml:space" />
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="assembly">
                <xsd:complexType>
                  <xsd:attribute name="alias" type="xsd:string" />
                  <xsd:attribute name="name" type="xsd:string" />
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="data">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                    <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
                  </xsd:sequence>
                  <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
                  <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
                  <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
                  <xsd:attribute ref="xml:space" />
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="resheader">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                  </xsd:sequence>
                  <xsd:attribute name="name" type="xsd:string" use="required" />
                </xsd:complexType>
              </xsd:element>
            </xsd:choice>
          </xsd:complexType>
        </xsd:element>
      </xsd:schema>
      <resheader name="resmimetype">
        <value>text/microsoft-resx</value>
      </resheader>
      <resheader name="version">
        <value>2.0</value>
      </resheader>
      <resheader name="reader">
        <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
      </resheader>
      <resheader name="writer">
        <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
      </resheader>
      <data name="Forecast" xml:space="preserve">
        <value>Prévision</value>
      </data>
      <data name="Won" xml:space="preserve">
        <value>Gagné</value>
      </data>
    </root>
    

    위의 코드 샘플에서 ForecastWon에 대한 열 이름은 <data> 노드에서 각각 프랑스어 번역 PrévisionGagné로 재정의됩니다.

    노트

    name 매개변수에서 예측의 레이아웃 단계에서 구성한 정확한 열 이름을 지정합니다.

    예측 구성의 **레이아웃** 단계에 있는 열 이름의 스크린샷

    열 이름을 추가 언어로 번역하려면 번역하려는 각 언어에 대한 리소스 파일을 만듭니다. 리소스 파일 이름이 다음 명명 규칙을 사용하는지 확인하세요.

    filename.languagecode.resx  
    **Example file name for German:** ColumnHeader.1031.resx
    

매니페스트 구현

다음으로 매니페스트 파일을 수정하여 재정의하는 속성을 지정합니다. 이 예에서는 ColumnName 속성을 재정의합니다. 번역된 텍스트가 포함된 리소스 파일의 경로도 지정합니다.

  1. ControlManifest.Input.XML 파일을 엽니다.

  2. property 노드를 검색하고 있는 그대로 다음 코드로 바꿉니다.

    <property name="columnName" display-name-key="Property_Display_Key" description-key="Property_Desc_Key" of-type="SingleLine.Text" usage="bound" required="true" />

  3. <resources> 노드를 업데이트하여 프랑스어 번역이 포함된 리소스 파일의 경로를 지정합니다.

    <resources>
      <code path="index.ts" order="1"/>
      <!-- UNCOMMENT TO ADD MORE RESOURCES
      <css path="css/ColumnHeader.css" order="1" />
      -->
      <resx path="strings/ColumnHeader.1036.resx" version="1.0.0" />
    </resources>
    

    <resx path> 노드는 리소스 파일 경로를 포함합니다. 이전 코드 샘플에서는 프랑스어에 대한 리소스 파일을 추가했습니다. 다른 언어에 대한 번역이 있는 경우 해당 언어에 대한 리소스 파일 경로도 추가합니다.

구성 요소 논리 구현

index.ts 파일에 컴포넌트 로직을 구현하는 코드를 추가해 보겠습니다.

  1. index.ts 파일을 엽니다.

  2. updateView 메서드에 다음 줄을 추가합니다.

    public updateView(context: ComponentFramework.Context<IInputs>): void
        {
            // Add code to update control view
            const colName = (context.parameters.columnName && context.parameters.columnName.raw) || "";
            this._container.innerHTML = context.resources.getString(colName);
        }
    

다음 단계