C#Adventure 2021 – 전력 자동화에 C# 코드 사용

이 글은 2021년 강림절에 대한 나의 공헌이다.


Power Automatic은 preview에서 흐르는 물에 C# 코드를 추가할 수 있는 훌륭한 기능을 가지고 있습니다.이것은 사용자 정의 연결기를 사용해야 하기 때문에 허가증을 가진 사용자에게만 한정됩니다.또 다른 제한이 있으니, 나는 뒤에서 토론할 것이다.하지만 이것은 단지 시작일 뿐이다.
네, 알고 있습니다. 만약 당신이 C#를 사용하고 싶다면, 왜 논리 프로그램이나Azure 함수를 사용하지 않습니까?이것은 전혀 상관없다.그런데 이거 멋있는데 왜 안 멋있지?Power Automation에서 사용자 정의 커넥터를 만드는 방법을 배우고 있습니다.나는 그 문장에서 코드 라벨을 무시했지만, 지금은 그것으로 돌아갈 때가 되었다.

사용자 정의 커넥터 설정


우리는 이전과 유사한 과정을 따라 새로운 사용자 정의 연결기를 만들 것입니다.더 많은 세부 사항은 이전 문장을 참조하시오.하지만 Data=>Custom connectors 메뉴 옵션에서 "New Custom connector"를 선택합니다.공백에서 만들기 옵션을 선택합니다.
그것의 이름을 짓고 필요에 따라 다른 옵션을 추가합니다.한 가지는 호스트 이름을 제공해야 한다는 것이다.만약 당신의 유일한 목적이 C# 코드를 실행할 수 있다면, 당신이 여기에 무엇을 입력하는 것은 중요하지 않다. 왜냐하면 당신은 실제로 어느 곳에서도 전화를 하지 않기 때문이다.그것은 반드시 유효한 도메인 이름이어야 한다.보안을 인증 없음으로 설정한 다음 정의로 이동합니다.
이전의 블로그 글에서 우리는 사용자 인터페이스를 이용하여 단점을 추가했다.이번에는 Swagger 편집기를 사용하여 끝점을 정의하는 방법을 보여 드리겠습니다.오른쪽 상단에 '흔들림 편집기' 라는 전환이 있다.그것을 열면 다음과 같은 화면을 볼 수 있습니다.
flow-custom-code-swagger-editor
흐르는 사용자 정의 코드 흔들림 편집기
이 오류는 우리가 아직 어떤 조작도 정의하지 않았기 때문이다."경로"부분에서 사용자 정의 코드 함수에 단점을 추가할 것입니다.다음과 같습니다.
paths:
  /:
    post:
      responses:
        default:
          description: default
          schema: {type: string}
      summary: Convert Fahrenheit To Celsius
      operationId: TempFarToCel
      parameters:
      - name: ftemp
        in: body
        required: true
        schema: {type: string}
      description: Converts Fahrenheit to Celsius
블록은 문자열 매개 변수를 적용하고 문자열 응답을 반환하는 ConvertFahrenheitTocelsius라는 끝점을 정의합니다.(예, 온도가 숫자인 것은 알지만 HttpContent로 문자열을 전달하는 것이 더 쉽습니다.)우리는 나머지 흔들림 코드를 보존할 수 있다.

코드 작성


밑에서 버튼을 클릭하여 코드 절차에 들어갑니다.시작 프로그램으로 사용할 예시 코드를 상자에서 볼 수 있습니다.이 상자에서 코드를 직접 편집하거나 가장 좋아하는 C# 편집기에서 코드를 작성한 다음 상자에 최종 코드를 붙여넣거나 코드 파일을 업로드할 수 있습니다.
약간의 제한이 있다.ScriptBase에서 상속된 Script라는 클래스에 코드를 배치해야 합니다.코드는 ExecuteAsync라는 비동기식 작업 방법을 구현해야 합니다.코드 크기는 1MB를 초과할 수 없습니다.너의 코드는 반드시 5초 안에 실행해야 한다.현재 지원되는 이름 공간 목록은 다음과 같습니다.
  • 시스템;
  • 시스템.수집하다
  • 시스템.수장하다.통용
  • 시스템.진단학
  • 시스템.목위일;
  • 시스템.이오.압축;
  • 시스템.링크
  • 시스템.순액
  • 시스템.그물Http;
  • 시스템.그물Http.제목
  • 시스템.그물안전
  • 시스템.보안인증
  • 시스템.보안암호학
  • 시스템.텍스트
  • 시스템.문자일반적인 표현;
  • 시스템.실을 꿰다
  • 시스템.실을 꿰다.작업
  • 시스템.그물 모양의 물건;
  • 시스템.Xml;
  • 시스템.Xml.링크
  • 시스템.그림 그리기
  • 시스템.그림을 그리다.드로잉 2D
  • 시스템.그림을 그리다.닮다
  • 마이크로소프트.확장로그인 중,
  • Newtonsoft.Json;
  • Newtonsoft.Json.링크
  • 필요한 함수를 포함하여 필요한 내용을 스크립트 클래스에 쓸 수 있습니다.예를 들면 다음과 같은 코드만 입력하면 간단합니다.
    public class Script : ScriptBase
    {
        public override async Task<HttpResponseMessage> ExecuteAsync()
        {
            HttpResponseMessage response;
            var content = await this.Context.Request.Content.ReadAsStringAsync().ConfigureAwait(false);
            var far = Convert.ToDouble(content);
            var cel = (far - 32) * 5 / 9;
            response = new HttpResponseMessage(HttpStatusCode.OK);
            response.Content = new StringContent(cel.ToString());
            return response;
        }
    }
    
    Microsoft Docs site 에서 스크립트 클래스와 스크립트 클래스를 어떻게 만드는지에 대한 더 많은 정보를 찾을 수 있습니다.
    마지막 두 가지는 코드를 열어야 합니다.편집기의 오른쪽 상단 모서리는 [코드 활성화]라는 전환입니다.이거 열어봐.코드 편집기의 아래와 위에는 드롭다운 목록이 있습니다.이 밑에 있는 목록에서 이 코드가 실행되는 단점을 선택할 수 있습니다.단점을 선택하지 않으면, 코드는 사용자 정의 연결기의 모든 단점을 대상으로 실행됩니다.선택한 모든 단점에 대해 기억하십시오.코드 파일이 이 단점에 대한 호출을 덮어씁니다.따라서 코드 호출 단점 자체가 아니면 오프라인 호출이 발생하지 않습니다.또 하나: 사용자 정의 연결기마다 스크립트 파일이 하나씩만 있습니다.여러 개의 스크립트 파일을 만들 수 없습니다. (즉, 단점마다 다른 스크립트를 사용합니다.)
    우리의 시범에 있어서, 이것은 결코 중요하지 않다. 왜냐하면 우리는 단지 하나의 단점만 있기 때문이다.단, 여러 개의 노드에서 사용자 정의 코드를 지원하려면, 노드마다 다른 기능이 있을 수 있습니다.코드가 정의한 모든 단점을 처리할 수 있도록 하기만 하면 됩니다.이를 실현하는 방법은 ExecuteAsync 엔트리 점에서 OperationId를 확인하는 것입니다.그리고 OperationId에 따라 하나하나에 적당한 응답을 한다.예:
    public override async Task<HttpResponseMessage> ExecuteAsync()
    {
        // Check if the operation ID matches what is specified in the OpenAPI definition of the connector
        if (this.Context.OperationId == "TempFarToCel")
        {
            return await this.HandleTempFarToCel().ConfigureAwait(false);
        } else if (this.Context.OperationId == "TempCelToFar) 
        {
            return await this.HandleTempCelToFar().ConfigureAwait(false);
        }
    
        // Handle an invalid operation ID
        HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.BadRequest);
        response.Content = CreateJsonContent($"Unknown operation ID '{this.Context.OperationId}'");
        return response;
    }
    
    private async Task<HttpResponseMessage> HandleTempFarToCel(){ 
        //code here
    }
    
    private async Task<HttpResponseMessage> HandleTempCelToFar(){ 
        //code here
    }
    
    만약 당신이 서로 다른 문서 사이에서 직책을 나누는 것에 열중한다면, 이것은 당신을 좀 화나게 할 수도 있다.
    코드를 추가한 후 계속해서 테스트 옵션을 클릭한 다음 '연결기 만들기' 를 누르십시오.이렇게 하면 커넥터가 생성되고 C# 스크립트가 컴파일됩니다.일단 완성되면 너는 너의 단점을 테스트할 수 있다.이전과 마찬가지로 사용자 정의 연결기를 처음 구축하려면 먼저 새 연결을 만들어야 합니다.위 상자에 있는 "새 연결"을 누르십시오.이전에 이 연결기에 연결을 만들었다면 테스트할 연결을 선택하면 됩니다.완성되면 지금 테스트를 진행할 수 있습니다.프레젠테이션에 대해 상자에 화씨 온도를 입력한 다음 "테스트 조작"을 누르겠습니다.
    flow-custom-code-final-test
    흐름 사용자 정의 코드 최종 테스트
    현재 우리의 절차에서 이 점을 실현하는 것은 매우 간단하다.너는 나의 컴퓨터를 어떻게 조작하는지 볼 수 있다.C# 코드는 사용자 정의 커넥터에서 작업을 스트리밍할 때 실행되고 응답을 반환합니다.

    결론


    Power Automation 의 경우 매우 멋진 기능일 수 있습니다.이러한 제한, 특히 모든 사용자 정의 연결기 (단점이 아닌) 에 스크립트 파일만 허용하면, 이 과정이 너무 큰 내용을 실현하지 못하게 할 것이다.하지만 사실 더 깊이 있는 것을 원한다면 논리 응용이나Azure 기능을 사용하는 것이 좋다.
    그럼에도 불구하고 이 기능은 마음에 드는 점이 많다.Power Automatic이 아직 갖추지 못한 기능을 추가할 수 있는 작고 빠른 기능에는 좋은 추가 기능이다.그러니 계속해서 C 코드를 당신의 절차에 추가하세요!
    이 게시물C# Advent 2021 – Using C# Code in Power Automate은 처음Barret Codes에 실렸다.

    좋은 웹페이지 즐겨찾기