모든 Platform 객체의 목록?By 변수를 사용하여 JSL을 통해 플랫폼을 생성하는 경우 반환 값은 생성된 모든 스크립트 가능한 개체의 목록입니다.
대화 상자를 열기 위해 플랫폼 명령을 사용하고 나중에 사용자가 확인을 클릭한 후 생성된 모든 스크립트 가능한 개체 목록을 가져오는 빠르고 강력한 방법은 무엇입니까?
같은 것
(current report() << xpath("//OutlineBox")) << get scriptable object()... 의미가 있는 OutlneBoxes의 영리한 사전 선택 - 개별 사례에 맞게 조정할 필요가 없는 보편적인 사전 선택.
Names Default to Here(1);
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
New Window("test",V List Box(
dist1=Distribution (by( :age ))), // return value: list of the scriptable objects
dist2 = Distribution(
Continuous Distribution(Column( :height )),
By( :age )
));자동화 및 스크립팅Re: 모든 Platform 객체의 목록이요?나는 다양한 플랫폼을 테스트하고 강력한 XPath를 결정하는 것이 하나의 옵션이 될 것이라고 생각합니다.
Re: 모든 Platform 객체의 목록이요?노력 중 
누군가가 이미 5년 전에 이 작업을 수행하여 직접 솔루션을 제공할 수 있기를 바랐습니다.
Re: 모든 Platform 객체의 목록이요?디스플레이 상자 목록에 "중복 삭제"가 있습니까?
다음을 통한 표준 접근 방식
associative array () << get keys
작동하지 않는 것 같습니다.
Re: 모든 Platform 객체의 목록이요?서로 다른 개체를 참조하므로 모든 개요 상자를 얻으면 실제로 중복되지 않을 것이라고 확신할 수 있습니다.
By 변수를 사용하여 생성된 몇 가지 다른 플랫폼을 살펴보면 공통점을 발견할 가능성이 높습니다.
분포:

일방 통행:

그래프 빌더(By 변수를 사용하여 생성하는 경우는 좀 더 드뭅니다):

HeadBox, ListBox 및 OutlineBox(Graph Builder에서 올바른 표시 상자는 OwnerBox라고 생각함)가 있고 특정 순서가 있습니다. 또한 OutlineBox/OwnerBox에는 helpKey 속성이 있습니다.
Re: 모든 Platform 객체의 목록이요?그래서:
(current report() << xpath("//OutlineBox[@helpKey]"))Re: 모든 Platform 객체의 목록이요?나는 그 XPath를 사용하면 적어도 때로는 너무 많은 참조를 얻게 될 것이라고 생각합니다. 내가 시도할 것은 ListBox 내부에 helpKey 속성이 있는 아웃라인박스의 첫 번째 레벨에 액세스하는 것입니다. 이것이 각 JMP 플랫폼에서 작동할지는 확실하지 않지만 이것이 출발점이기를 바랍니다.
obs = (current report() << xpath("//ListBox//OutlineBox[@helpKey and not(ancestor::OutlineBox[@helpKey])]")) << get scriptable object();
Re: 모든 Platform 객체의 목록이요?고마워요, 작동해요 
하지만 불행하게도 속도가 매우 느립니다.
따라서 모든 항목을 가져온 다음 상위 항목과 helpKey *)를 요청하는 것이 더 나을 수도 있습니다.
*) 아직 작동하지 않습니다 ...
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
New Window( "test",
Outline Box( "main", Life Distribution( Perspective( Compare Groups ), Y( :weight ), Grouping( :sex ), By( :age ) ) )
);
t0 = HP Time();
list1 = Current Report() << xpath( "//OutlineBox[@helpKey]" );
Show( (HP Time() - t0) / 1000000 );
t0 = HP Time();
list2 = Current Report() << xpath( "//ListBox//OutlineBox[@helpKey and not(ancestor::OutlineBox[@helpKey])]" );
Show( (HP Time() - t0) / 1000000 );
t0 = HP Time();
firstResults = Current Report() << xpath( "//OutlineBox[@helpKey]" );
list3 = {};
For Each( {item, idx}, firstResults[{1, 2}],
found = Regex( (item << parent) << get xml(), "\A.*helpKey" ); //unfortunately not restricted to first line like should be !??!?!
If( Is Empty( item << parent ) | Is Missing( found ),
Insert Into( list3, item )
);
);
Show( (HP Time() - t0) / 1000000 );
(HP 시간() - t0) / 1000000 = 0.048218; // 제한 없음
(HP 시간() - t0) / 1000000 = 7.204071; // Xpath 올인원
(HP 시간() - t0) / 1000000 = 0.152291; // 수동 사후 선택
Re: 모든 Platform 객체의 목록이요?두 번째 XPath를 최적화할 가능성이 높습니다. 몇 가지 제안
//ListBox/*/OutlineBox[@helpKey and not(ancestor::OutlineBox[@helpKey])]
또는
//OutlineBox[@helpKey and not(ancestor::OutlineBox[@helpKey])]
Re: 모든 Platform 객체의 목록이요?로컬 데이터 필터 제거(클래스 이름: 데이터 필터[] - 그리고 아니야 "아웃라인박스" 
collectedOutlineBoxObjects = (Current Report() << xpath( "//OutlineBox[@helpKey and not(ancestor::OutlineBox[@helpKey])]" )) << get scriptable object() ;
ListOfPlatFormObjects={};
For Each({item},collectedOutlineBoxObjects, If(item << class name =="OutlineBox", Insert Into(ListOfPlatFormObjects, item)));
Re: 모든 Platform 객체의 목록이요?데이터 필터에는 helpKey와 같은 특정 값이 있으므로 순수 XPath를 사용할 가능성이 높습니다(적어도 매우 빠른 확인을 기반으로 함).
//OutlineBox[@helpKey and not(@helpKey = 'Data Filter') and not(ancestor::OutlineBox[@helpKey])]
어쩌면 하나만 가질 수도 있습니다.
//OutlineBox[@helpKey and not(ancestor::OutlineBox[@helpKey] or @helpKey = 'Data Filter')]