2010년 4월 13일 화요일

[Biztalk] BizTalk BPA와 MessageBox Viewer

BizTalk Best Practice Analyzer 1.2 와 MessageBox Viewer 10.15 새버전이 나왔습니다.

http://www.microsoft.com/downloads/details.aspx?FamilyID=93D432FE-1370-4B6D-AAA8-A0C43C30F5AB&displaylang=en

http://blogs.technet.com/jpierauc/pages/msgboxviewer.aspx

[Biztalk] Orchestration에서 Message의 특정 Element값 수정하기

!ns0:Root xmlns:ns0="http://TestXpath.Schema1">
!Record>
!AAA>AAA_0!/AAA>
!AAA>AAA_1!/AAA>
!AAA>AAA_2!/AAA>
!Count>Count_0!/Count>
!Count>Count_1!/Count>
!Count>Count_2!/Count>
!/Record>
!Record>
!AAA>AAA_0!/AAA>
!AAA>AAA_1!/AAA>
!AAA>AAA_2!/AAA>
!Count>Count_0!/Count>
!Count>Count_1!/Count>
!Count>Count_2!/Count>
!/Record>
!Record>
!AAA>AAA_0!/AAA>
!AAA>AAA_1!/AAA>
!AAA>AAA_2!/AAA>
!Count>Count_0!/Count>
!Count>Count_1!/Count>
!Count>Count_2!/Count>
!/Record>
!/ns0:Root>

보시다시피 Record가 반복이고 AAA나 Count 또한 반복이 됩니다.
이 경우 AAA는 Record 가 반복이므로 Distinguished Field로 올리지 못합니다.
처리하기 위하여 xpath라는 구문을 사용합니다.
xpath(Test_Msg2,"//Record[1]/AAA[2]/text()")="SUCC";
xpath(Test_Msg2,"//Record[1]/AAA[3]/text()")=(System.Int32)xpath(Test_Msg,"count(//Record)");
Message Assignment Shape안에서 위 구문을 입력하면 첫번째 Record의 두번째 AAA에 SUCC값을 넣을 수 있구요.
또한 첫번째 Record의 3번째 AAA에 Record의 개수를 넣을 수도 있습니다.
처리 결과는 다음과 같습니다.
!?xml version="1.0" encoding="utf-8"?>
!ns0:Root xmlns:ns0="http://TestXpath.Schema1">
!Record>
!AAA>AAA_0!/AAA>!AAA>SUCC!/AAA>!AAA>3!/AAA>!Count>Count_0!/Count>!Count>Count_1!/Count>!Count>Count_2!/Count>
!/Record>
!Record>
!AAA>AAA_0!/AAA>!AAA>AAA_1!/AAA>!AAA>AAA_2!/AAA>!Count>Count_0!/Count>!Count>Count_1!/Count>!Count>Count_2!/Count>
!/Record>
!Record>
!AAA>AAA_0!/AAA>!AAA>AAA_1!/AAA>!AAA>AAA_2!/AAA>!Count>Count_0!/Count>!Count>Count_1!/Count>!Count>Count_2!/Count>
!/Record>
!/ns0:Root>
반복되는 Record라고 하더라도 Distinguished Field와 동일한 기능을 사용할 수도 있다는 얘기지요.
xpath에 대한 내용은 다음 사이트를 보시면 좀 더 아실 수 있습니다.
http://msdn.microsoft.com/ko-kr/library/ms256086(VS.80).aspx

인포패스 양식에서 보조데이터 코드로부터 이름(값) 가져오기


콤보박스에 연결된 보조데이터에서 코드 및 코드값(이름)가져오는 방법을 알아낸 것 같군요.
XPATH를 잘 쓰면 되겠다 싶었는데, 알고 보니 그걸 인포패스에서 지원을 해줍니다.
그동안 코드노드 혹은 이름노드 한곳에만 값을 넣었고, 필요할 때 다른 하나를 가져오지 못했는데 할 수 있게 되었습니다.
정광원선생은 아래 방식을 사용해서 아까 얘기했던 IO값 및 Account값을 가져와서 수정하는 것에 적용해주기 바랍니다.
1. 규칙을 사용하면 아래 그림처럼 설정해주면 되고,
2. 코딩으로 할 때는 빨간상자6번에 있는 XPATH 값을 아래 코딩에서처럼 사용하면 됩니다.
String code = XHelper.OutputNodeData(원본데이터코드노드, “원본데이터코드노드의Xpath”, “”);
String value = XHelper.OutputNodeData(보조데이터반복노드, string.Format(“보조데이터이름노드의Xpath[../PV_MASTERCODE = ‘{0}’]”,code), “값이 없는 경우 기본값”);
XHelper.InputNodeData(targetValueNode, “코드밸류입력할본문노드XPATH”, value);
예를 들어 다음과 같은 XPATH 가 있으면

//*[local-name()=’AccountName’][../*[local-name()=’AccountCode’ and text()=’101010’]
해석은 다음과 같습니다.
AccountCode값이 ‘101010’인 AccountName 노드를 가져와라…

[javascript] nodeType

element(nodeType = 1) : li,p,a,body
Text(nodeType = 3) : 문서안의 모든 texttype
Document(nodeType = 9) : 문서의 루트 엘리먼트

2010년 4월 2일 금요일

인포패스에 있는 전송버튼을 TaskPane에서 javascript로 호출하는 방법

인포패스에 있는 전송버튼을 TaskPane에서 javascript로 호출하는 방법
window.external.Window.Xdocument.Submit();
그냥 뒤에 Submit만 호출하면 되더군요
장점은 속도가 빨라 진다더군요

원문 : http://www.infopathdev.com/forums/p/2351/9617.aspx#9617