다음을 통해 공유


ECMA2Host용 SAP ECC 7.51 웹 서비스 커넥터 템플릿 작성

이 가이드에서는 SAP ECC 사용자를 관리하기 위해 ECMA(웹 서비스 확장성 연결 관리 에이전트) 커넥터에 대한 템플릿을 만드는 프로세스를 안내합니다.

제한 사항 및 가정

이 템플릿은 사용자를 관리하는 방법을 보여 줍니다. ECMA2Host는 현재 다중값 참조를 지원하지 않으므로 로컬 활동 그룹, 역할 및 프로필과 같은 다른 개체 형식은 이 가이드에서 다루지 않습니다. 암호 작업도 이 가이드의 범위를 벗어납니다.

이 가이드에서는 노출된 BAPI 함수를 호출하는 데 사용되는 SAP 내에서 서비스 계정을 만드는 방법을 다루지 않습니다. 미리 만들어진 데모 계정 Developer이 사용된다고 가정하며, 이 계정은 이 글에 언급된 BAPI에 권한을 부여하는 프로필 RFC_ALL을 갖추고 있습니다.

웹 서비스 구성 도구는 기본적으로 SAP에 노출되는 WSP 정책 및 엔드포인트당 여러 바인딩 기능을 지원하지 않습니다. 정책 없이 SOAP 1.1만 있는 올인원 문서 스타일 바인딩이 있는 WSDL이 예상됩니다.

이 템플릿에 사용되는 SAP ECC BAPI 함수:

  • BAPI_USER_GETLIST - 이 시스템에 연결된 모든 사용자 목록을 가져옵니다.
  • BAPI_USER_GETDETAIL - 특정 사용자의 세부 정보를 가져옵니다.
  • BAPI_USER_CREATE1 - 사용자를 만듭니다.
  • BAPI_USER_DELETE - 사용자를 삭제합니다.
  • BAPI_USER_CHANGE - 사용자를 업데이트합니다.

이 가이드의 모든 SAP 사용자 속성은 단일 값 속성으로 처리됩니다.

사용되는 프로그래밍 언어는 Visual Basic입니다.

웹 서비스 엔드포인트 정의 및 스키마 만들기

가져오기 및 내보내기 워크플로를 디자인하려면 템플릿을 만들고 SOAP 인터페이스를 통해 노출된 SAP BAPI 함수를 사용하여 엔드포인트를 정의해야 합니다. 그런 다음 ECMA2 개체의 스키마를 만들고 해당 속성을 이 템플릿에서 사용할 수 있습니다.

  1. "C:\Program Files\Microsoft ECMA2Host\Web Service Configuration Tool" 폴더에서 웹 서비스 구성 도구 wsconfigTool.exe 시작합니다.
  2. File-New 메뉴에서 새 SOAP 프로젝트 만들기를 선택합니다.

SOAP 프로젝트 만들기 스크린샷

  1. SOAP 프로젝트를 선택하고 새 웹 서비스 추가를 선택합니다.

새 웹 서비스 추가 스크린샷

  1. 웹 서비스 이름을 SAPECC로 지정하고, 게시된 WSDL을 다운로드하는 URL을 제공하고, SAPECC를 네임스페이스로 입력합니다. 웹 서비스 이름을 사용하면 템플릿에서 이 웹 서비스를 다른 사용자와 구분할 수 있습니다. 네임스페이스는 클래스를 생성하는 데 사용되는 Microsoft .NET 네임스페이스의 이름을 정의합니다. SAP 관리자가 달리 지시하지 않는 한 기본 인증 모드를 선택합니다. 다음을 선택합니다.

웹 서비스 이름을 지정하는 스크린샷

  1. SAP ECC 엔드포인트에 연결할 자격 증명을 제공합니다. 다음을 선택합니다.
  2. 엔드포인트 및 작업 페이지에서 BAPI가 표시되는지 확인하고 마침을 선택합니다.

참고

둘 이상의 엔드포인트가 표시되면 SOAP 1.2 및 SOAP 1.1 바인딩을 모두 사용할 수 있습니다. 이로 인해 커넥터가 실패합니다. SOAMANAGER에서 바인딩 정의를 수정하고 하나만 유지합니다. 그런 다음 웹 서비스를 다시 추가합니다.

BAPI의 스크린샷.

  1. 프로젝트를 C:\Program Files\Microsoft ECMA2Host\Service\ECMA 폴더에 저장합니다.
  2. 개체 유형 탭에서 선택하고 사용자 개체 형식을 추가하도록 선택합니다. 확인을 선택합니다.
  3. 개체 유형 탭을 확장하고 사용자 유형 정의를 선택합니다.

개체 형식의 스크린샷

  1. 스키마에 다음 특성을 추가하고 userName을 앵커로 선택합니다.

특성을 추가하는 스크린샷

  1. 프로젝트를 저장합니다.
이름 유형 앵커
도시 문자열
회사 문자열
부서 string
이메일 string
만료 시간 문자열
이름 string
lastName 문자열
중간 이름 string
전화번호 문자열
직함 문자열
userName string 확인됨

전체 가져오기 워크플로 만들기

가져오기 워크플로는 ECMA2Host에서 선택 사항이지만 기존 SAP 사용자를 ECMA2Host 메모리 내 캐시로 가져오고 프로비전하는 동안 중복된 사용자가 생성되지 않도록 할 수 있습니다.

가져오기 워크플로를 만들지 않으면 커넥터가 내보내기 전용 모드로 작동하여 ECMA2Host가 기존 사용자에 대해서도 항상 사용자 만들기 작업을 실행하게 됩니다. 이로 인해 내보내기 워크플로에서 중복을 처리하지 않는 한 표준 SAP BAPI를 사용할 때 오류가 발생하거나 중복될 수 있습니다.

SAP ECC는 마지막 읽기 이후 변경 내용을 읽기 위한 기본 제공 메커니즘을 제공하지 않습니다.

따라서 전체 가져오기 워크플로만 구현하고 있습니다. 성능상의 이유로 델타 가져오기를 구현해야 하는 경우 SAP 관리자에게 BAPI 목록을 확인하고 SOAP 웹 서비스로 게시하도록 합니다. 그런 다음 설명된 대로 다음 접근 방식과 이전에 성공한 실행의 타임스탬프를 포함하는 customData 속성을 사용하여 Delta Import 워크플로를 구현합니다.

SAP ECC는 여러 BAPI 함수를 제공하여 해당 속성이 있는 사용자 목록을 가져옵니다.

  • BAPI_USER_GETLIST - 이 시스템에 연결된 모든 사용자 목록을 가져옵니다.
  • BAPI_USER_GETDETAIL - 특정 사용자의 세부 정보를 가져옵니다.

이러한 두 개의 BAPI만 이 템플릿의 SAP ECC에서 기존 사용자를 검색하는 데 사용됩니다.

  1. 개체 유형 -> 사용자 -> 가져오기 -> 전체 가져오기 워크플로로 이동하고, 오른쪽의 도구 상자에서 시퀀스 작업을 워크플로 디자이너 창으로 끌어다 놓습니다.
  2. 왼쪽 아래에서 변수 단추를 찾아서 선택하여 이 시퀀스 내에 정의된 변수 목록을 확장합니다.
  3. 다음 변수를 추가합니다. SAP WSDL에서 생성된 변수 유형을 선택하려면 '형식 찾아보기'를 선택한 후, generated을 확장하고 SAPECC 네임스페이스를 확장합니다.
이름 변수 유형 범위 기본값
selRangeTable SAPECC. TABLE_OF_BAPIUSSRGE 순서 새 TABLE_OF_BAPIUSSRGE {.item = new BAPIUSSRGE(){new BAPIUSSRGE}}
getListRetTable SAPECC. TABLE_OF_BAPIRET2 시퀀스 새 TABLE_OF_BAPIRET2
페이지 크기 Int32 순서 200
반환된 크기 Int32 시퀀스
사용자 테이블 SAPECC. TABLE_OF_BAPIUSNAME 순서 new TABLE_OF_BAPIUSNAME()

전체 가져오기 작업 워크플로의 스크린샷

  1. 도구 상자에서 시퀀스 작업 내에서 네 개의 할당 활동을 끌어서 놓고 다음 값을 설정합니다.
selRangeTable.item(0).PARAMETER = "USERNAME" 
selRangeTable.item(0).SIGN = "I" selRangeTable.item(0).OPTION = "GT" selRangeTable.item(0).LOW = ""   

이러한 매개 변수는 BAPI_USER_GETLIST 함수를 호출하고 페이지 매김을 구현하는 데 사용됩니다.

전체 가져오기 워크플로의 스크린샷.

  1. 페이지 매김을 구현하려면 도구 상자에서 마지막 할당 작업 후 시퀀스 작업 내에 DoWhile 작업을 끌어서 놓습니다.
  2. 오른쪽 창에서 속성 탭으로 전환하고 DoWhile에 대해 이 조건을 입력합니다.
  • 주기: returnedSize = pageSize

반환된 크기 화면의 스크린샷.

  1. 변수를 선택하고 기본값이 0인 DoWhile 주기 내에 int32 형식의 currentPageNumber 속성을 추가합니다.

Dowhile 화면의 스크린샷

  1. 선택적 단계: 델타 가져오기 워크플로우를 구현하려는 경우, 도구 상자에서 DoWhile 사이클 이후 시퀀스 활동 내에 할당 활동을 끌어서 놓습니다. 다음 값을 설정합니다.
  • customData(schemaType.Name + "_lastImportTime") = DateTimeOffset.UtcNow.Ticks.ToString() 이렇게 하면 마지막 전체 가져오기 실행의 날짜와 시간이 저장되고 이 타임스탬프는 나중에 Delta Import 워크플로에서 사용할 수 있습니다.

customdata 화면의 스크린샷.

  1. 도구 상자에서 시퀀스 액티비티를 드래그 앤 드롭하여 DoWhile 액티비티 안에 넣습니다. 해당 시퀀스 작업 내에서 WebServiceCall 작업을 끌어서 놓고 SAPECC 서비스 이름, ZSAPCONNECTORWS 엔드포인트 및 BAPI_USER_GETLIST 작업을 선택합니다.

dowhile 시퀀스의 스크린샷.

  1. 웹 서비스 호출에 매개변수를 정의하려면 '인수' 버튼을 선택하십시오.
이름 방향 유형
MAX_ROWS In Int32 페이지 크기
MAX_ROWSSpecified 안에 불리언
반품 들어옴/나감 TABLE_OF_BAPIRET2 getListRetTable
SELECTION_EXP 들어옴/나감 TABLE_OF_BAPIUSSEXP
선택 범위 입/출력 테이블 TABLE_OF_BAPIUSSRGE (해당 테이블 이름은 그대로 사용됩니다) selRangeTable
사용자 목록 들어감/나감 TABLE_OF_BAPIUSNAME 사용자표
WITH_USERNAME 안에 문자열
ROWS Int32 반환된 크기
  1. 확인을 선택합니다. 경고 표시가 사라집니다. usersTable 변수에 저장된 사용자 목록입니다. SAP는 단일 응답에서 전체 사용자 목록을 반환하지 않으므로 페이지를 전환하는 동안 페이지 매김을 구현하고 이 함수를 여러 번 호출해야 합니다. 그런 다음 가져온 모든 사용자에 대해 별도의 호출을 통해 해당 사용자의 세부 정보를 가져와야 합니다. 즉, 사용자가 1,000명, 페이지 크기가 200인 환경의 경우 웹 서비스 커넥터는 사용자 목록을 검색하기 위해 5번의 호출과 1,000건의 개별 호출을 통해 사용자의 세부 정보를 검색합니다. 성능을 향상시키려면 SAP 팀에 속성과 함께 모든 용도를 나열하는 사용자 지정 BAPI 프로그램을 개발하도록 요청합니다. 이렇게 하면 1,000개의 개별 호출을 수행하고 SOAP WS 엔드포인트를 통해 해당 BAPI 함수를 노출할 필요가 없습니다.
  2. 도구 상자에서 IF 액티비티를 드래그하여 WebServiceCall 액티비티 다음에 DoWhile 액티비티 안에 놓습니다. 비어있지 않은 응답과 오류가 없는지 확인하려면 다음 조건을 지정합니다. IsNothing(getListRetTable.item) OrElse getListRetTable.item.Count(Function(errItem) errItem.TYPE.Equals("E") = True) = 0
  3. 도구 상자에서 Throw 액티비티를 IF 활동의 Else 분기에 끌어서 놓아 가져오기 실패 시 에러를 발생시키도록 합니다. 속성 탭으로 전환하고 Throw 작업의 Exception 속성에 대해 다음 식을 입력합니다. New Exception(getListRetTable.item.First(Function(retItem) retItem.TYPE.Equals("E")).MESSAGE)

예외 속성의 스크린샷

  1. 가져온 사용자 목록을 처리하려면 도구 상자에서 ForEachWithBodyFactory 활동을 IF 활동의 Then 분기로 끌어서 놓습니다. 속성 탭으로 전환한 후 SAPECC.BAPIUSNAME을 TypeArgument로 선택합니다. ... 버튼을 선택한 후, 값 속성에 이 식을 입력하세요: if(usersTable.item,Enumerable.Empty(of BAPIUSNAME)())

IF 활동의 스크린샷.

  1. 도구 상자에서 시퀀스 액티비티를 ForEach 액티비티 내에 끌어서 놓습니다. 이 시퀀스 작업 창이 활성 상태이면 변수 단추를 선택하고 다음 변수를 정의합니다.
이름 변수 유형 범위 기본값
회사 SAPECC.BAPIUSCOMP 순서 new BAPIUSCOMP()
주소 SAPECC. BAPIADDR3 시퀀스 new BAPIADDR3()
기본값 SAPECC. BAPIDEFAUL 순서 new BAPIDEFAUL()
로그인 데이터 SAPECC.BAPILOGOND 시퀀스 new BAPILOGOND()
getDetailRetTable SAPECC. TABLE_OF_BAPIRET2 순서 new TABLE_OF_BAPIRET2()

IF 활동은 다음과 같이 보입니다.

foreach가 있는 IF 활동의 스크린샷.

  1. CreateCSEntryChangeScope 작업을 시퀀스 작업 내에서 끌어서 놓습니다. DN 속성에서 schemaType.Name & 항목에 USERNAME을 입력합니다. CreateAnchorAttribute AnchorValue 필드에 item.username을 입력합니다.

CreateCSEntryChangeScope의 스크린샷.

  1. 각 사용자의 세부 정보를 검색하려면 도구 상자에서 CreateAnchorAttribute 작업 바로 전에 시퀀스 작업 내에 WebServiceCall 작업을 끌어서 놓습니다. SAPECC 서비스 이름, ZSAPCONNECTORWS 엔드포인트 및 BAPI_USER_GET_DETAIL 작업을 선택합니다. 웹 서비스 호출에 매개변수를 정의하려면 '인수' 버튼을 선택하십시오.
이름 방향 유형 가치
돌아가기 입/출 TABLE_OF_BAPIRET2 getDetailRetTable
USERNAME 안에 문자열 아이템.사용자이름
주소 밖으로 BAPIADDR3 주소
회사 외부 BAPIUSCOMP 회사
기본값 BAPIUSDEFAUL 기본값
로그온데이터 밖에 BAPILOGOND 로그온 데이터
사용자이름_포함 In 문자열
ROWS 밖에 Int32 반환된크기
  1. 확인을 선택합니다. 경고 표시가 사라집니다. 사용자의 세부 정보는 위에 나열된 변수에 저장됩니다. IF 활동은 다음과 같습니다.

매개 변수의 스크린샷

  1. BAPI_USER_GET_DETAIL 작업의 결과를 확인하려면 도구 상자에서 IF 활동을 끌어서 놓고 WebServiceCall과 CreateAnchorAttribute 작업 간에 시퀀스 작업 내에 배치합니다. 다음 조건을 입력합니다. IsNothing(getDetailRetTable.item) OrElse getDetailRetTable.item.Count(Function(errItem) errItem.TYPE.Equals("E") = True) = 0

누락된 사용자 세부 정보는 치명적인 이벤트로 취급해서는 안 하므로 이 오류를 나타내고 다른 사용자의 처리를 계속하려고 합니다. 시퀀스 활동을 IF 활동의 Else 분기 안으로 끌어다 놓습니다. 새 시퀀스 작업 내에 로그 작업을 추가합니다. 속성 탭으로 전환하고 Level 속성을 High, Tag to Trace로 변경합니다. LogText 속성에 다음을 입력합니다. string.Join("\n", getDetailRetTable.item.Select (Function(item) item.MESSAGE ))

  1. 시퀀스 활동을 If 활동의 Then 분기로 끌어서 놓습니다. 기존 CreateAnchorAttribute 활동을 IF 활동의 Then 분기 내에 있는 시퀀스 활동으로 끌어다 놓습니다. 이제 ForEach 작업은 다음과 같습니다.

ForEach의 스크린샷.

  1. 도시, 회사, 부서, 전자 메일과 같은 사용자의 각 속성에 대해 CreateAnchorAttribute 작업 후에 IF 작업을 추가하고, Not string.IsNullOrEmpty(address.city)와 같은 조건을 입력하여 비어 있지 않은 값을 확인한 다음 그 IF 작업의 Then 분기에 CreateAttributeChange 작업을 추가합니다.

CreateAttributeChange의 스크린샷.

예: 이 매핑 테이블을 사용하여 모든 사용자 속성에 대해 CreateAttributeChange 작업을 추가합니다.

ECMA 사용자 속성 SAP 속성
도시 주소.도시
부서 주소.부서
회사 회사.회사
이메일 주소.이메일
이름 주소.이름
lastName 주소.성
중간 이름 주소.미들네임
직책 address.function
만료 시간 logonData.GLTGB
전화번호 주소. TEL1_NUMBR
  1. 마지막으로 마지막 CreateAttributeChange 작업 후에 SetImportStatusCode 작업을 추가합니다. Then 분기에서 ErrorCode를 성공으로 설정합니다. 다른 SetImportStatus 코드 작업을 Else 분기에 추가하고 ErrorCode를 ImportErrorCustomContinueRun으로 설정합니다.

SetImportStatusCode의 스크린샷.

  1. ForEach 활동 내의 시퀀스 활동을 접어 DoWhile 루프가 다음과 같이 보이도록 합니다.

DoWhile 주기의 스크린샷.

  1. 다음 사용자를 검색하기 위해 selRangeTable.item(0).LOW 속성을 업데이트하십시오. DoWhile 내에서 Sequence 활동 안으로 IF 활동을 끌어다 놓습니다. 기존의 IF 활동 뒤에 그것을 배치하세요. returnedSize>0을 조건으로 입력합니다. IF 활동의 Then 분기에 작업 할당을 추가하고, selRangeTable.item(0).LOWusersTable.item(returnedSize-1).username으로 설정하십시오.

DoWhile 최종 스크린샷.

전체 가져오기 워크플로의 정의를 완료했습니다.

내보내기 추가 워크플로 만들기

SAP ECC에서 사용자를 만들려면 BAPI_USER_CREATE1 프로그램을 호출하고 계정 이름 및 초기 암호를 포함한 모든 매개 변수를 제공할 수 있습니다. SAP 쪽에서 계정 이름을 생성해야 하는 경우 SAP 관리자에게 문의하고 새로 만든 사용자 계정의 userName 속성을 반환하는 사용자 지정 BAPI 함수를 사용합니다.

이 가이드에서는 라이선스, 로컬 또는 전역 활동 그룹, 시스템 또는 프로필 할당을 보여 주지 않습니다. SAP 관리자에게 문의하고 이에 따라 이 워크플로를 수정합니다.

내보내기 워크플로에서 페이지 매김을 구현할 필요가 없습니다. 워크플로 컨텍스트 내에서 사용할 수 있는 개체는 objectToExport 하나뿐입니다.

  1. 개체 유형 -> 사용자 -> 내보내기 -> 워크플로 추가로 이동한 다음, 오른쪽 도구 상자에서 시퀀스 활동을 워크플로 디자이너 창에 끌어다 놓습니다.
  2. 왼쪽 아래에서 변수 단추를 찾아서 선택하여 이 시퀀스 내에 정의된 변수 목록을 확장합니다.
  3. 다음 변수를 추가합니다. SAP WSDL에서 생성된 변수 형식을 선택하려면 '형식 찾아보기'를 선택하고, generated을 확장하여 SAPECC 네임스페이스를 확장하십시오. 그러면 BAPI_USER_CREATE1 프로그램에서 사용하는 데이터 구조가 초기화됩니다.
이름 변수 유형 범위 기본값
주소 SAPECC. BAPIADDR3 시퀀스 new BAPIADDR3()
userName 문자열 순서
비밀번호 SAPECC. BAPIPWD 순서 new BAPIPWD()
회사 SAPECC.BAPIUSCOMP 시퀀스 new BAPIUSCOMP()
기본값 SAPECC. BAPIDEFAUL 순서 new BAPIDEFAUL()
로그온데이터 SAPECC.BAPILOGOND 순서 new BAPILOGOND()
bapiret2Table SAPECC. TABLE_OF_BAPIRET2 순서 new TABLE_OF_BAPIRET2()

내보내기 추가 워크플로의 스크린샷.

  1. userName 속성을 변경할 수 없는 ID, 앵커로 정의했으므로 내보내기 개체의 앵커 컬렉션에서 userName 값을 추출해야 합니다. ForEachWithBodyFactory 작업을 도구 상자에서 시퀀스 작업으로 끌어서 놓습니다. 항목 변수 이름을 앵커로 바꾸고, 속성으로 전환하고, TypeArgument를 Microsoft.MetadirectoryServices.AnchorAttribute선택합니다. 값 필드에 objectToExport.AnchorAttributes입력합니다.

내보내기 추가 시퀀스의 스크린샷

  1. userName 앵커의 문자열 값을 추출하려면 ForEach 작업 내에서 Switch 작업을 끌어서 놓습니다. 팝업 창에서 스위치의 Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AnchorAttributeNameWrapper 유형을 선택합니다. 다음의 식 값으로 New AnchorAttributeNameWrapper(anchor.Name)를 입력하세요.
  2. 스위치 작업의 새 사례 영역 추가를 선택합니다. userName을 사례 값으로 입력합니다. 할당 작업을 userName 케이스 본문으로 끌어 놓고 anchor.Value.ToString()을 userName 변수에 할당하세요.

새 사례의 스크린샷.

  1. 내보낸 개체 앵커 속성에서 userName 값을 추출했으므로 다른 SAP 사용자 세부 정보가 포함된 회사, 기본값, 주소, 로그온 데이터와 같은 다른 구조를 채워야 합니다. 이 작업은 특성 변경의 컬렉션을 순환하여 수행합니다.
  2. ForEach 작업을 축소하고 기존 ForEach 작업 이후 시퀀스 작업 내에 다른 ForEachWithBothFactory 작업을 끌어서 놓습니다. 항목 변수 이름을 attributeChange바꾸고, 속성으로 전환하고, TypeArgument를 Microsoft.MetadirectoryServices.AttributeChange선택합니다. 값 필드에 objectToExport.AttributeChanges입력합니다.

새 시퀀스의 스크린샷

  1. Switch 액티비티를 ForEach 액티비티의 본문으로 드래그 앤 드롭하세요.
  2. 팝업 메뉴에서 Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AttributeNameWrapper 선택하고 확인을 선택합니다.
  3. 다음 식을 입력하세요: 새 AttributeNameWrapper(attributeChange.Name). 스키마에 정의되고 속성에 할당되지 않은 처리되지 않은 특성에 대한 Switch 작업의 오른쪽 위 모서리에 경고 아이콘이 표시됩니다.
  4. Switch 작업의 새 사례 영역 추가를 선택하고 city사례 값을 입력합니다.
  5. Assign 작업을 이 사례 본문 영역으로 드래그 앤 드롭하세요. attributeChange.ValueChanges(0).Value.ToString()을 address.city에 할당합니다.

새 내보내기 추가 워크플로의 스크린샷

  1. 누락된 다른 사례 및 할당을 추가합니다. 이 매핑 테이블을 가이드로 사용합니다.
케이스 양도
도시 address.city = attributeChange.ValueChanges(0)Value.ToString()
회사 company.company = attributeChange.ValueChanges(0)Value.ToString()
부서 address.department = attributeChange.ValueChanges(0)Value.ToString()
이메일 address.e_mail = attributeChange.ValueChanges(0)Value.ToString()
만료 시간 logOnData.GLTGB = attributeChange.ValueChanges(0)Value.ToString()
이름 address.firstname = attributeChange.ValueChanges(0)Value.ToString()
lastName address.lastname = attributeChange.ValueChanges(0)Value.ToString()
중간 이름 address.middlename = attributeChange.ValueChanges(0)Value.ToString()
전화번호 주소. TEL1_Numbr = attributeChange.ValueChanges(0)Value.ToString()
직함 address.function = attributeChange.ValueChanges(0)Value.ToString()
비밀번호_내보내기 암호.BAPIPWD1 = attributeChange.ValueChanges(0)Value.ToString()

여기서 export_password 항상 스키마에 정의되고 생성되는 사용자의 초기 암호를 전달하는 데 사용할 수 있는 특수한 가상 특성입니다.

사례 스크린샷.

  1. ForEach 작업을 축소하고 IF 활동을 두 번째 ForEach 작업 이후 시퀀스 작업으로 끌어서 놓아 사용자 속성의 유효성을 검사한 후 사용자 만들기 요청을 제출합니다. 사용자 이름, 성, 초기 암호 등 비어있지 않은 값이 3개 이상 필요합니다. 다음 조건을 입력합니다. (String.IsNullOrEmpty(address.lastname) = False ) AND (String.IsNullOrEmpty(userName) = False) AND (String.IsNullOrEmpty(password.BAPIPWD1) = False)
  2. IF 활동의 Else 분기에서, 누락된 항목에 따라 다른 오류를 던지기 위해 IF 활동을 하나 더 추가합니다. 조건 값인 String.IsNullOrEmpty(userName)를 입력합니다. 두 번째 IF 활동의 두 분기로 CreateCSEntryChangeResult 활동을 끌어서 놓으신 후, ExportErrorMissingAnchorComponentExportErrorMissingProvisioningAttribute의 오류 코드를 설정하세요.

두 번째 IF 활동의 스크린샷.

  1. 첫 번째 IF 액티비티의 빈 Then 브랜치에 시퀀스 액티비티를 끌어서 놓습니다. 시퀀스 작업 내에서 WebSeviceCall 작업을 끌어서 놓습니다. SAPECC 서비스 이름, ZSAPCONNECTORWS 엔드포인트 및 BAPI_USER_CREATE1 작업을 선택합니다. 웹 서비스 호출에 매개변수를 정의하려면 '인수' 버튼을 선택하십시오.
이름 방향 유형
주소 안에 BAPIADDR3 주소
회사 안에 BAPIUSCOMP 회사
기본값 안에 BAPIDEFAUL 기본값
로그온데이터 안에 BAPILOGOND 로그온 데이터
비밀번호 안에 BAPIPWD 비밀번호
반환 입출력 TABLE_OF_BAPIRET2 bapiret2Table
자체 등록 문자열 "X"
USERNAME 에서 문자열 userName
  1. 확인을 선택합니다. 경고 표시가 사라집니다.

매개 변수 뒤의 워크플로 스크린샷

  1. 사용자 요청 결과 만들기를 처리하려면 WebServiceCall 작업 이후 시퀀스 작업 내에서 IF 작업을 끌어서 놓습니다. 다음 조건을 입력합니다. IsNothing (bapiret2Table.item) OrElse bapiret2Table.item.Count(Function(errItem) errItem.TYPE.Equals("E") = True) <> 0
  2. 오류가 발생하지 않으면 내보내기 작업이 성공적으로 완료된 것으로 가정하고 성공 상태의 CSEntryChangeResult를 만들어 이 개체의 성공적인 내보내기를 나타내려고 합니다. CreateCSEntryChangeResult 작업을 IF 활동의 Else 분기로 끌어서 놓고 성공 오류 코드를 선택합니다.
  3. 선택 사항: 웹 서비스 호출에서 생성된 사용자 계정 이름을 반환하는 경우 내보낸 개체의 앵커 값을 업데이트해야 합니다. 이렇게 하려면 CreateAttrubuteChange 활동을 CreateCSEntryChangeResult 활동 안으로 끌어서 놓고 사용자 이름 추가를 선택합니다. 그런 다음 CreateValueChange 활동을 CreateAttributeChange 활동 내에 끌어 놓고, 웹 서비스 호출 활동에서 채워진 변수 이름을 입력합니다. 이 가이드에서는 내보내기 시 업데이트되지 않는 userName 변수를 사용합니다.

업데이트된 시퀀스 흐름의 스크린샷.

  1. 내보내기 추가 워크플로의 마지막 단계는 내보내기 오류를 처리하고 기록하는 것입니다. 시퀀스 작업을 IF 활동의 빈 Then 분기로 끌어다 놓습니다.
  2. 로그 액티비티를 시퀀스 액티비티에 끌어서 놓습니다. 속성 탭으로 전환하고 LogText 값으로 bapiret2Table.item.First(Function(retItem) retItem.TYPE.Equals("E")).MESSAGE를 입력합니다. 높은 로깅 수준 및 추적 태그를 유지합니다. 자세한 정보 추적을 사용하도록 설정하면 오류 메시지가 ConnectorsLog 또는 ECMA2Host 이벤트 로그에 기록됩니다.
  3. 로그 작업 이후에 시퀀스 작업 안에 스위치 작업을 끌어서 놓습니다. 팝업 창에서 스위치 값의 문자열 형식을 선택합니다. 다음 식을 입력합니다. bapiret2Table.item.First(Function(retItem) retItem.TYPE.Equals("E")).NUMBER
  4. 기본 시나리오를 선택하고 CreateCSEntryChangeResult 액티비티를 이 시나리오의 본문으로 끌어서 놓습니다. ExportErrorInvalidProvisioningAttributeValue 오류 코드를 선택합니다.

워크플로에 대한 새 업데이트의 스크린샷

  1. 새 사례 추가 영역에서 선택하고 사례 값 224를 입력합니다. 이 사례의 본문에 CreateCSEntryChangeResult 활동을 끌어서 놓습니다. 오류 코드를 선택합니다 ExportErrorCustomContinueRun .

워크플로에 대한 최종 업데이트의 스크린샷

내보내기 추가 워크플로의 정의를 완료했습니다.

삭제 내보내기 워크플로 만들기

SAP ECC에서 사용자를 삭제하려면 BAPI_USER_DELETE 프로그램을 호출하고 연결된 시스템에서 삭제할 계정 이름을 제공할 수 있습니다. 이 시나리오가 필수인지 확인하려면 SAP 관리자에게 문의하세요. 대부분의 경우 SAP ECC 계정은 삭제되지 않지만 기록 레코드를 유지하기 위해 만료되도록 설정됩니다.

이 가이드에서는 SAP 공통 사용자 관리 시스템, 연결된 시스템에서 사용자 프로비전 해제, 라이선스 해지 등과 관련된 시나리오를 다루지 않습니다.

내보내기 워크플로에서 페이지 매김을 구현할 필요가 없습니다. 워크플로 컨텍스트 내에서 사용할 수 있는 개체는 objectToExport 하나뿐입니다.

  1. 개체 유형 -> 사용자 -> 내보내기 -> 워크플로 삭제로 내비게이트하고, 오른쪽의 도구 상자에서 시퀀스 활동을 워크플로 디자이너 창으로 끌어서 놓습니다.
  2. 왼쪽 아래에서 변수 단추를 찾아서 선택하여 이 시퀀스 내에 정의된 변수 목록을 확장합니다.
  3. 다음 변수를 추가합니다. SAP WSDL에서 생성된 변수 형식을 선택하려면 '형식 찾아보기'를 선택하고 generated를 확장한 다음, SAPECC 네임스페이스를 확장합니다. 그러면 BAPI_USER_DELETE 프로그램에서 사용하는 데이터 구조가 초기화됩니다.
이름 변수 유형 범위 기본값
userName 문자열 순서
bapiret2Table SAPECC. TABLE_OF_BAPIRET2 시퀀스 new TABLE_OF_BAPIRET2()
  1. userName 속성을 변경할 수 없는 ID, 앵커로 정의했으므로 내보내기 개체의 앵커 컬렉션에서 userName 값을 추출해야 합니다. ForEachWithBodyFactory 작업을 도구 상자에서 시퀀스 작업으로 끌어서 놓습니다. 항목 변수 이름을 앵커로 바꾸고, 속성으로 전환하고, TypeArgument를 Microsoft.MetadirectoryServices.AnchorAttribute선택합니다. 값 필드에 objectToExport.AnchorAttributes입력합니다.

삭제 작업 내보내기 워크플로의 스크린샷

  1. userName 앵커의 문자열 값을 추출하려면 ForEach 작업 내에서 Switch 작업을 끌어서 놓습니다. 팝업 창에서 스위치의 Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AnchorAttributeNameWrapper 유형을 선택합니다. 표현식 값 입력: 새로운 AnchorAttributeNameWrapper(anchor.Name). 스위치 작업의 새 사례 영역 추가를 선택합니다. userName을 사례 값으로 입력합니다. 할당 작업을 userName 케이스의 본문으로 끌어서 놓고 anchor.Value.ToString()를 userName 변수에 할당합니다.
  2. ForEach 작업 후 시퀀스 작업 내에서 WebSeviceCall 작업을 끌어서 놓습니다. SAPECC 서비스 이름, ZSAPCONNECTORWS 엔드포인트 및 BAPI_USER_DELETE 작업을 선택합니다. 웹 서비스 호출에 매개변수를 정의하려면 '인수' 버튼을 선택하십시오.
이름 방향 유형
반환 들어오기/나가기 TABLE_OF_BAPIRET2 바피렛2테이블
USERNAME 안에 문자열 userName
  1. 확인을 선택합니다. 경고 표시가 사라집니다.

업데이트된 삭제 작업 워크플로의 스크린샷

  1. 사용자 요청 삭제 결과를 처리하려면 WebServiceCall 작업 이후 시퀀스 작업 내에서 IF 작업을 끌어서 놓습니다. 다음 조건을 입력합니다. If(bapiRet2Table.item, Enumerable.Empty(Of BAPIRET2)()).Count(Function(errItem) errItem.TYPE.Equals("E") = True) <> 0
  2. 오류가 없으면 삭제 작업이 성공적으로 완료된 것으로 가정하고 성공 상태로 만들어 CSEntryChangeResult 이 개체의 내보내기를 성공적으로 나타내려고 합니다. IF 활동의 Else 분기로 CreateCSEntryChangeResult 활동을 드래그 앤 드롭한 후 성공 코드(오류 코드를 선택합니다.

삭제 내보내기 워크플로의 스크린샷.

  1. 삭제 내보내기 워크플로의 마지막 단계는 내보내기 오류를 처리하고 기록하는 것입니다. 시퀀스 액티비티를 IF 액티비티의 Then 조건의 빈 부분에 끌어다 놓습니다.
  2. 로그 액티비티를 시퀀스 액티비티에 끌어서 놓습니다. 속성 탭으로 전환하고 다음의 bapiRetTable.item.First(Function(retItem) retItem.TYPE.Equals("E")= True).MESSAGELogText 값을 입력합니다. 높은 로깅 수준 및 추적 태그를 유지합니다. 자세한 정보 추적을 사용하도록 설정하면 오류 메시지가 ConnectorsLog 또는 ECMA2Host 이벤트 로그에 기록됩니다.
  3. 로그 작업 후 시퀀스 작업 내에서 스위치 작업을 끌어서 놓습니다. 팝업 창에서 스위치 값의 문자열 형식을 선택합니다. 다음 식을 입력합니다. bapiret2Table.item.First(Function(retItem) retItem.TYPE.Equals("E")).NUMBER
  4. 기본 시나리오를 선택하고 CreateCSEntryChangeResult 액티비티를 이 시나리오의 본문으로 끌어서 놓습니다. ExportErrorSyntaxViolation 오류 코드를 선택합니다.

삭제 작업 워크플로 내보내기 업데이트 스크린샷

  1. 새 사례 추가 영역에서 선택하고 사례 값 124를 입력합니다. 이 사례의 본문으로 CreateCSEntryChangeResult 활동을 드래그 앤 드롭하세요. 오류 코드를 선택합니다 ExportErrorCustomContinueRun .

최종 내보내기 삭제 작업 워크플로의 스크린샷

삭제 내보내기 워크플로의 정의를 완료했습니다.

교체 내보내기 워크플로우 만들기

SAP ECC에서 사용자를 업데이트하려면, BAPI_USER_CHANGE 프로그램을 호출하고 변경되지 않는 매개변수를 포함하여 계정 이름 및 모든 사용자 세부 정보를 제공할 수 있습니다. 모든 사용자 속성을 제공할 때 ECMA2 내보내기 모드를 Replace라고 합니다. 반면 AttributeUpdate의 내보내기 모드는 변경 중인 특성만 제공하므로 일부 사용자 속성을 빈 값으로 덮어쓸 수 있습니다. 따라서 웹서비스 커넥터는 항상 '객체 교체' 내보내기 모드를 사용하며 '내보내기 유형: 교체'에 대해 커넥터가 구성되어야 합니다.

내보내기 바꾸기 워크플로는 내보내기 추가 워크플로와 거의 동일합니다. 유일한 차이점은 BAPI_USER_CHANGE 프로그램에 addressX 또는 companyX와 같은 추가 매개 변수를 지정해야 한다는 것입니다. addressX 끝에 있는 X는 주소 구조에 변경 내용이 포함되어 있음을 나타냅니다.

  1. 개체 유형 -> 사용자 -> 내보내기 -> 바꾸기 워크플로로 이동하고, 오른쪽의 도구 상자에서 시퀀스 활동을 워크플로 디자이너 창으로 끌어다 놓습니다.
  2. 왼쪽 아래에서 변수 단추를 찾아서 선택하여 이 시퀀스 내에 정의된 변수 목록을 확장합니다.
  3. 다음 변수를 추가합니다. SAP WSDL에서 생성된 변수 형식을 선택하려면 '형식 찾아보기'를 선택한 후, generated를 확장하고 그 다음 SAPECC 네임스페이스를 확장합니다. 그러면 BAPI_USER_CHANGE 프로그램에서 사용하는 데이터 구조가 초기화됩니다.
이름 변수 유형 범위 기본값
userName 문자열 시퀀스
bapiret2Table SAPECC. TABLE_OF_BAPIRET2 순서 new TABLE_OF_BAPIRET2()
addressX SAPECC. BAPIADDR3X 순서 new BAPIADDR3X()
주소 SAPECC. BAPIADDR3 순서 new BAPIADDR3()
컴퍼니엑스 SAPECC. BAPIUSCOMX 순서 new BAPIUSCOMX()
회사 SAPECC.BAPIUSCOMP 시퀀스 new BAPIUSCOMP()
defaultsX SAPECC. BAPIDEFAX 순서 new BAPIDEFAX()
기본값 SAPECC. BAPIDEFAUL 순서 new BAPIDEFAUL()
logOnDataX SAPECC. BAPILOGONX 순서 new BAPILOGONX()
로그인 데이터 SAPECC. BAPILOGOND 순서 new BAPILOGOND()

귀하의 내보내기 바꾸기 워크플로는 다음과 같습니다.

바꾸기 작업 워크플로의 시작 스크린샷

  1. userName 속성을 변경할 수 없는 ID, 앵커로 정의했으므로 내보내기 개체의 앵커 컬렉션에서 userName 값을 추출해야 합니다. ForEachWithBodyFactory 작업을 도구 상자에서 시퀀스 작업으로 끌어서 놓습니다. 항목 변수 이름을 앵커로 바꾸고, 속성으로 전환하고, TypeArgument를 Microsoft.MetadirectoryServices.AnchorAttribute선택합니다. 값 필드에 objectToExport.AnchorAttributes입력합니다.

작업 워크플로를 바꿀 업데이트의 스크린샷.

  1. userName 앵커의 문자열 값을 추출하려면 ForEach 작업 내에서 Switch 작업을 끌어서 놓습니다. 팝업 창에서 스위치의 Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AnchorAttributeNameWrapper 유형을 선택합니다. 새 AnchorAttributeNameWrapper(anchor.Name)의 식 값을 입력합니다. 스위치 작업의 새 사례 영역 추가를 선택합니다. userName을 사례 값으로 입력합니다. 할당 활동을 userName case 본문으로 끌어서 놓고 userName 변수에 anchor.Value.ToString()를 할당합니다. 당신의 내보내기 교체 워크플로는 다음과 같습니다.

작업 워크플로를 바꿀 다른 업데이트의 스크린샷.

  1. 내보낸 개체 앵커 속성에서 userName 값을 추출했으므로 다른 SAP 사용자 세부 정보가 포함된 회사, 기본값, 주소, 로그온 데이터와 같은 다른 구조를 채워야 합니다. 스키마에 정의된 모든 특성의 컬렉션을 순환하여 이 작업을 수행합니다.
  2. ForEach 작업을 축소하고 기존 ForEach 작업 이후 시퀀스 작업 내에 다른 ForEachWithBothFactory 작업을 끌어서 놓습니다. 항목 변수 이름을 schemaAttr바꾸고, 속성으로 전환하고, TypeArgument를 Microsoft.MetadirectoryServices.SchemaAttribute선택합니다. 값 필드에 schemaType.Attributes입력합니다.

작업 순서 바꾸기 작업의 스크린샷.

  1. 시퀀스 액티비티를 ForEach 액티비티의 본문에 끌어다 놓으세요. 왼쪽 아래에서 변수 단추를 찾아서 선택하여 이 시퀀스 내에 정의된 변수 목록을 확장합니다. 문자열 형식의 xValue 변수를 추가합니다. 할당 작업 액티비티를 시퀀스 액티비티에 끌어서 놓습니다. xValue에 다음 식으로 할당합니다: If(objectToExport.AttributeChanges.Contains(schemaAttr.Name), objectToExport.AttributeChanges(schemaAttr.Name).ValueChanges(0).Value.ToString(), String.Empty) 이 속성의 내보내기를 위해 준비된 변경 내용을 추출하거나 빈 문자열로 초기화합니다. 내보내기 대체 워크플로는 다음과 같습니다.

바꾸기 시퀀스 업데이트 스크린샷

  1. 할당 작업 후 스위치 작업을 끌어서 놓습니다. 팝업 메뉴에서 Microsoft.IdentityManagement.MA.WebServices.Activities.Extensions.AttributeNameWrapper 선택하고 확인을 선택합니다. 다음 식을 입력합니다. 새로 만들기 AttributeNameWrapper(schemaAttr.Name). 스키마에 정의되고 속성에 할당되지 않은 처리되지 않은 특성에 대한 Switch 작업의 오른쪽 위 모서리에 경고 아이콘이 표시됩니다. Switch 작업의 새 사례 영역 추가를 선택하고 city사례 값을 입력합니다. 시퀀스 활동을 이 케이스의 본문 영역으로 끌어서 놓습니다. 사례의 본문에 할당 작업을 드래그 앤 드롭하여 넣습니다. addressX.city에 "X" 값을 할당합니다. 이 사례의 본문에 다른 할당 작업을 끌어서 놓으세요. address.city에 xValue를 할당합니다. 내보내기 바꾸기 워크플로우는 다음과 같습니다.

끌어서 놓기 스위치 작업의 스크린샷.

10. 누락된 다른 사례 및 할당을 추가합니다. 이 매핑 테이블을 가이드로 사용합니다.

사례 양도
도시 addressX.city = "X" address.city = xValue
회사 companyX.company = "X" company.company = xValue
부서 address.departmentX = "X" address.department = xValue
이메일 addressX.e_mail = "X" address.e_mail = xValue
만료시간 logOnDataX.GLTGB = "X" logOnData.GLTGB = xValue
이름 addressX.firstname = "X" address.firstname = xValue
lastName addressX.lastname = "X" address.lastname = xValue
중간 이름 addressX.middlename = "X" address.middlename = xValue
전화번호 addressX.TEL1_Numbr = "X" 주소입니다. TEL1_Numbr = xValue
직책 addressX.function = "X" address.function = xValue

내보내기 및 바꾸기 워크플로는 다음과 같은 구성입니다.

두 번째 끌어서 놓기 스위치 작업의 스크린샷

  1. BAPI_USER_CHANGE 프로그램을 호출하기 전에 비어있지 않은 사용자 이름을 확인해야 합니다. ForEach 작업을 모두 축소하고 두 번째 ForEach 작업 후에 IF 활동을 끌어서 놓습니다. 다음 조건을 입력합니다. String.IsNullOrEmpty(userName ) = False

  2. 사용자 이름이 비어 있으면 작업이 실패했음을 나타내려고 합니다. IF 활동의 Else 분기로 CreateCSEntryChangeResult 활동을 드래그하여 놓고 ExportErrorCustomContinueRun 오류 코드를 선택합니다. 바꾸기 내보내기 워크플로는 다음과 같습니다. CreateCSEntryChangeResult 작업의 스크린샷.

  3. 첫 번째 IF 활동의 빈 Then 분기에 Sequence 활동을 드래그 앤드 드롭하세요. 시퀀스 작업 내에서 WebSeviceCall 작업을 끌어서 놓습니다. SAPECC 서비스 이름, ZSAPCONNECTORWS 엔드포인트 및 BAPI_USER_CHANGE 작업을 선택합니다. 웹 서비스 호출에 매개변수를 정의하려면 '인수' 버튼을 선택하십시오.

이름 방향 유형
주소 안에 BAPIADDR3 주소
ADDRESSX 안에 BAPIADDR3X 주소X
회사 에서 BAPIUSCOMP 회사
COMPANYX 안에 BAPIUSCOMX 회사
기본값 안에 BAPIDEFAUL 기본값
DEFAULTSX 안에 BAPIDEFAX defaultsX
LOGONDATA 안에 BAPILOGOND 로그온 데이터
LOGONDATAX 안에 BAPILOGONX logOnDataX
반환 입/출력 TABLE_OF_BAPIRET2 bapiret2Table
USERNAME 안에 문자열 userName
  1. 확인을 선택합니다. 경고 표시가 사라집니다. 내보내기 바꾸기 워크플로는 다음과 같습니다.

BAPI_USER_CHANGE 작업의 스크린샷

  1. 변경 사용자 요청 결과를 처리하려면 WebServiceCall 작업 후 시퀀스 작업 내에서 IF 작업을 끌어서 놓습니다. 다음 조건을 입력합니다. Not IsNothing(bapiret2Table.item) AndAlso bapiret2Table.item.Count(Function(errItem) errItem.TYPE.Equals("E") = True) <> 0
  2. 오류가 없으면 내보내기 작업이 성공적으로 완료된 것으로 가정하고 성공 상태로 만들어 CSEntryChangeResult 이 개체의 내보내기를 성공적으로 표시하려고 합니다. CreateCSEntryChangeResult 활동을 IF 활동의 Else 분기로 끌어 놓고, 성공 코드 선택을 합니다.
  3. 시퀀스 활동을 IF 활동의 Then 분기 안으로 끌어다 놓으세요. 로그 텍스트 값 string.Join("\n",bapiret2Table.item.Where(Function(retItem) retItem.TYPE.Equals("E")).Select(Function(r) r.MESSAGE)) 및 오류 태그로 로그 활동을 추가합니다. 로그 작업 ExportErrorCustomContinueRun 오류 코드가 있는 후에 CreateCSEntryChangeResult 활동을 추가합니다. 내보내기 변경 워크플로우는 다음과 같습니다.

최종 내보내기 바꾸기 워크플로의 스크린샷

"내보내기 바꾸기 워크플로의 정의를 완료했습니다."

다음 단계는 이 템플릿을 사용하여 ECMA2Host Webservice 커넥터를 구성하는 것입니다.

다음 단계