본문 바로가기

Tech

Power Automate에서 SharePoint 컬럼을 못 찾는 현상, Title칼럼 삭제 불가 현상

오늘 하루종일 Power Automate에서 SharePoint 컬럼을 못 찾아서 삽질했다.
SharePoint 목록에는 분명 컬럼이 있다.
화면에서도 보인다.
데이터도 들어있다.
그런데 Power Automate에서 워크플로우를 만들려고 하면 해당 컬럼이 안 보이거나, 식으로 접근해도 값을 못 가져온다....
 
결론부터 말하면, 원인은 SharePoint 컬럼의 표시 이름(Display Name) 과 내부 이름(Internal Name) 이 다르기 때문이었다.
 

문제 상황

SharePoint 목록에 '승인 상태' 라는 칼럼이 있다고 하자.
사람이 SharePoint 화면에서 보는 컬럼 이름은 승인 상태다.
그래서 Power Automate에서도 당연히 이렇게 접근하면 될 줄 알았다.
triggerOutputs()?['body/승인 상태']
 
또는 동적 콘텐츠 목록에서 승인 상태를 찾으면 될 줄 알았다.
그런데 안 나온다.
값도 못 가져온다.
컬럼이 없는 것처럼 동작한다.
 

원인

SharePoint 컬럼에는 이름이 두 개 있다.
표시 이름(Display Name): 사람이 화면에서 보는 이름
내부 이름(Internal Name): SharePoint와 Power Automate가 실제로 참조하는 이름
 
문제는 Power Automate, REST API, OData Filter Query, JSON 출력 등에서는 주로 내부 이름을 사용한다는 점이다.
특히 컬럼 이름에 다음 요소가 들어가면 내부 이름이 이상하게 바뀔 수 있다.
 
한글
공백
특수문자
괄호
하이픈
슬래시
기타 비영문 문자
 
예를 들어 SharePoint에서 컬럼을 처음 만들 때 이름을 '승인 상태'로 만들었다면 
SharePoint 내부에서는 _xC2B9__xC778__x0020__xC0C1__xD0DC_  이런 이름으로 저장될 수 있다.
처음 보면 거의 암호문이다.
하지만 이건 SharePoint가 한글과 공백을 Unicode 코드 형태로 인코딩한 것이다.
 
즉, Power Automate에서 실제로 접근해야 하는 이름은 화면에 보이는 승인 상태가 아니라 이런 내부 이름일 수 있다.
triggerOutputs()?['body/_xC2B9__xC778__x0020__xC0C1__xD0DC_']
 

더 빡치는 포인트: 이름을 바꿔도 내부 이름은 안 바뀐다

SharePoint에서 컬럼 이름을 나중에 바꿔도 내부 이름은 그대로 남는다.
그래서 승인 상태를 Approval Status로 변경했다.
그러면 SharePoint 화면에서는 Approval Status로 보인다.
하지만 내부 이름은 여전히 처음 생성 당시 기준으로 남아있다.
그래서 Power Automate에서는 Approval Status로 접근하면 안 되고, 내부 이름으로 접근해야 한다.

내부 이름 확인 방법

가장 쉬운 방법은 SharePoint 컬럼 설정 URL을 보는 것이다.

  1. SharePoint 목록 또는 라이브러리로 이동
  2. 오른쪽 위 설정 클릭
  3. List settings 또는 Library settings 이동
  4. Columns 영역에서 문제의 컬럼 클릭
  5. 브라우저 주소창에서 Field= 뒤 값을 확인

예를 들어 URL 끝에 이런 값이 있다면:
Field=_xC2B9__xC778__x0020__xC0C1__xD0DC_ 이 값이 바로 내부 이름이다.

Power Automate에서는 이 이름을 써야 한다.
 

해결 방법

이미 만들어진 컬럼이라면 내부 이름을 먼저 확인하고, Power Automate 식에서 그 내부 이름을 사용한다.
가장 현실적인 해결은 다음 순서다.

  1. SharePoint에서 컬럼 설정 페이지로 이동
  2. URL의 Field= 값을 확인
  3. Power Automate에서 해당 내부 이름으로 식 작성
  4. 동적 콘텐츠에 안 보이면 Expression으로 직접 입력

앞으로 안 당하는 방법

SharePoint 컬럼을 만들 때 처음부터 한글이나 공백이 들어간 이름으로 만들지 않는 게 좋다.
처음 생성할 때는 영어와 숫자로 짧게 만든다.
그 다음 표시 이름만 한글로 바꾼다.
그러면 사용자는 SharePoint 화면에서 승인 상태를 보지만, Power Automate에서는 깔끔하게 영어이름으로 사용할 수 있다.
 

이미 망한 컬럼은?

이미 내부 이름이 이상하게 만들어졌다면 내부 이름 자체를 바꾸는 건 어렵다고 보는 게 낫다.
정리하고 싶다면 다음 방식이 안전하다.

  1. 새 컬럼을 영어 내부명으로 생성
    예: ApprovalStatus
  2. 표시 이름을 한글로 변경
    예: 승인 상태
  3. 기존 컬럼 데이터를 새 컬럼으로 복사
  4. Power Automate에서 새 컬럼 사용
  5. 기존 컬럼은 숨기거나 삭제
  6.  

기본으로 생기는 Title 컬럼도 함정이다

SharePoint List를 처음 만들면 기본으로 Title 컬럼이 무조건 생긴다.
이 컬럼은 일반 컬럼이 아니라 SharePoint 목록의 기본 항목 제목 컬럼이다. 그래서 다른 컬럼처럼 마음대로 삭제하거나 타입을 바꾸기 어렵다.
더 중요한 점은, 이 Title 컬럼도 이름을 바꿔도 내부 이름은 계속 Title이라는 것이다
 
만약 칼럼명을 업무명으로 변경해도  Power Automate에서는 업무명이 아니라 Title이다.
여기서 헷갈리면 또 한참 헤맨다.

Title 컬럼은 삭제할 수 있나?

일반적으로 SharePoint List의 기본 Title 컬럼은 삭제할 수 없다고 보는 게 맞다.
대신 실무에서는 보통 이렇게 처리한다.
1. Title 컬럼을 대표 제목 용도로 사용한다
2. Title 컬럼을 보기에서 숨긴다
3. 새 컬럼을 만들어 실제 업무용 컬럼으로 사용한다
 

Title 컬럼 관련 추천 방식

내 기준으로는 이렇게 정리하는 게 제일 덜 헷갈린다.

  1. Title 컬럼 = 대표 제목으로 쓸 거면 그냥 쓴다
  2. Title 컬럼을 쓸 때 = Power Automate에서는 무조건 Title로 접근한다
  3. 업무상 중요한 새 컬럼 = 처음부터 영어 내부명으로 만든다
  4. 한글 컬럼명 = 나중에 표시 이름으로만 바꾼다

SharePoint는 친절한 척하면서 내부적으로는 계속 옛 이름을 기억하고 있다.
그리고 Power Automate는 그 옛 이름을 기준으로 움직인다....^^
 진짜 밤티같음

 
진짜 Microsoft는 사용할수록, 파면 팔수록 사용자 친화적이지 못하고.. 지멋대로 돌아간다..^^
M365를 굳이 써야하는 환경이 아니라면 절대 안쓸것 같아 나는.....
 
참고: 
Microsoft SharePoint naming guidelines
Field element DisplayName 설명

반응형