cniSqlCreateModifyablePathExpression

경로 인수에 지정된 경로를 나타내는 수정 가능한 SqlPathExpression 오브젝트를 작성합니다. 수정 가능하다는 것은 탐색할 때 존재하지 않는 경로 요소가 작성된다는 뜻입니다. 이 함수는 경로를 탐색하는 함수의 입력으로 사용되는 PathExpression 오브젝트(즉, cniSqlNavigatePath 제품군)로 포인터를 돌려보냅니다. 표현식 작성과 관련된 오버헤드가 있으므로 같은 경로 표현식이 모든 메시지에 사용될 경우 이 함수를 한 번 호출해야 하며 리턴한 CciSqlPathExpression*은 각 메시지의 cniSqlNavigate 호출에 사용해야 합니다. 작성되지 않은 다른 스레드에서 CciSqlPathExpression*을 사용할 수 있습니다.

구문

CciSqlPathExpression* cniSqlCreateModifiablePathExpression( 
	int*           returnCode,
  CciNode*           nodeObject,
  CciChar*           dataSourceName,
	CciChar* path);

매개변수

returnCode(출력)
널(null) 포인터 입력은 사용자 정의 노드가 오류를 처리하지 않음을 의미합니다. 이 호출 실행 중 전달된 모든 예외는 플로우의 다음 업스트림 노드에 다시 전달됩니다. 입력이 널(null)이 아닌 경우, 출력은 호출 성공 상태를 의미합니다. 실행 중 예외가 발생할 경우, *returnCode는 출력에 CCI_EXCEPTION으로 설정됩니다. cciGetLastExceptionData 호출은 예외에 대한 세부사항을 제공합니다. 올바르지 않은 nodeObject 매개변수가 전달되면 returnCode가 CCI_INV_NODE_OBJECT로 설정됩니다. 널(NULL) 또는 빈 문자열과 같은 올바르지 않은 경로 매개변수가 전달되면 returnCode가 CCI_INV_ESQL_PATH_EXPR로 설정됩니다.
nodeObject(입력)
ESQL 경로 표현식이 소유할 메시지 플로우 처리 노드를 지정합니다. 이 포인터는 cniCreateNodeContext 구현 함수로 전달됩니다. 이 매개변수는 널(NULL)이 될 수 없습니다.
dataSourceName(입력)
명령문에서 외부 데이터베이스를 참조할 경우에 사용할 ODBC 데이터 소스 이름. 이 매개변수는 널(NULL)이 될 수 있습니다.
path(입력)
CciChars의 널(NULL) 종료 문자열 포인터. 로컬 ESQL 변수, ESQL 참조 변수, 사용자 정의 함수, ESQL 네임스페이스 상수 등을 선언할 수 없어서 포함할 수 없다는 점을 제외하고 ESQL 필드 참조 구문 다이어그램에 정의된 대로 작성할 ESQL 경로 표현식을 지정합니다. 이 매개변수는 널(NULL)이 될 수 없습니다.

리턴 값

성공할 경우 SQLPathExpression 오브젝트의 주소가 리턴됩니다. 오류가 발생하면 CCI_NULL_ADDR이 리턴되고 리턴 코드 매개변수가 오류의 원인을 표시합니다. SQLPathExpression이 더 이상 필요하지 않은 경우(일반적으로 노드가 삭제될 때) cniSqlDeletePathExpression을 호출하여 삭제해야 합니다.

다음 코드를 Transform 노드 샘플에 추가하면 하나의 함수 호출로 요소 및 필요한 모든 상위 요소를 쉽게 작성할 수 있습니다.

_Transform_createNodeContext 함수에 CciSQLPathExpression을 작성합니다.

 {
        CciChar ucsPathExpressionString[32];
        char*   mbPathExpressionString =
                           "OutputRoot.XML.Request.A.B.C.D.E";
        /* convert our path string to unicode*/
        cciMbsToUcs(NULL,
            mbPathExpressionString,
            ucsPathExpressionString,
            32,
            BIP_DEF_COMP_CCSID);
        
        p->pathExpression =
                     cniSqlCreateModifiablePathExpression(
                                 NULL,
                                 nodeObject,
                                 NULL,/*we do not reference Database*/
                                 ucsPathExpressionString);
    }

그런 다음 나중에 _Transform_evaluate 함수에서 이 CciSqlPathExpression을 사용할 수 있습니다.

{
      CciElement* newElement = 
               cniSqlNavigatePath(
                     NULL,
                    ((NODE_CONTEXT_ST *)context)->pathExpression,
                     message,
                                                  destinationList,
                                                  exceptionList,
                     outMsg,
                     NULL,/*we do not reference OutputLocalEnvironment*/
                     NULL/*we do not reference OutputLExceptionList*/);
}

그러므로 입력 메시지 PluginSample.change.xml로 전달하면

<Request
type="change">
  <CustomerAccount>01234567</CustomerAccount>
  <CustomerPhone>555-0000</CustomerPhone>
</Request>

다음과 같은 출력 메시지가 표시됩니다.

<Request
type="modify">
  <CustomerAccount>01234567</CustomerAccount>
  <CustomerPhone>555-0000</CustomerPhone>
  <A>
    <B>
      	<C>
        <D/>
      	</C>
    </B>
  </A>
</Request>
cniCreateElementAsLastChild 등과 반대로 이 방법을 사용하면 다음과 같은 장점이 있습니다.
  • 보다 동적인 경로 – 전개할 때 노드 속성에 따라 경로 문자열을 판별할 수 있습니다(cniSetAttribute 구현 함수에서 CciSqlPathExpression을 작성할 수 있음).
  • 요소를 탐색하고 작성하는 동안 여러 개가 아니라 하나의 함수를 호출함. 이러한 점은 대상 요소가 트리 구조 내의 깊은 곳에 있을 때 더 잘 나타납니다.
주의사항 | 등록상표 | 다운로드 | 라이브러리 | 지원 | 피드백
Copyright IBM Corporation 1999, 2006 마지막 갱신 날짜: 2006/08/21
as08032_