프로젝트 내에서 추가 기능을 실행할 수 없습니다.우리는 우리 회사의 추가 기능으로 많은 스크립트를 구성했습니다.추가 기능이 응답하지만 '프로젝트' 내에서 호출될 때 스크립트가 실행되지 않습니다.이것은 addin 스크립팅을 통해 해결할 수 있는 것입니까 아니면 스크립트 자체가 프로젝트 내에 별도로 포함되어야 합니까?
스크립팅Re: 프로젝트 내에서 애드인을 실행할 수 없습니다.JMP의 각 프로젝트에는 고유한 전역 및 네임스페이스 목록이 있습니다. 이는 JMP의 비프로젝트 부분에서도 마찬가지입니다. 따라서 프로젝트 외부에서 global:a를 생성하면 어떤 프로젝트에서도 볼 수 없습니다. 그리고 Project01 내부에 global:b를 생성하면 해당 프로젝트 외부나 다른 프로젝트에서 볼 수 없습니다. 또한 프로젝트 외부에서 네임스페이스 "A"를 만들면 어떤 프로젝트에서도 볼 수 없습니다(A:symbol에서와 같이 이름으로). 그리고 프로젝트에서 네임스페이스를 생성하는 것과 유사합니다. 이는 프로젝트를 서로 격리하고 비 프로젝트와 격리하기 위해 수행됩니다. 또한 글로벌을 사용하더라도 서로 충돌하지 않고 여러 프로젝트에서 동일한 스크립트의 여러 복사본을 실행할 수 있습니다.
프로젝트 간에 또는 비프로젝트와 프로젝트 간에 통신해야 하는 경우 가장 좋은 방법은 루트 네임스페이스(::: 또는 As Root 구문)를 사용하는 것입니다. 이 네임스페이스의 기호는 실행 중인 JMP 인스턴스 전체에서 고유합니다.
따라서 Craig가 제안한 대로 루트 네임스페이스의 심볼에 네임스페이스를 할당할 수 있습니다. 그런 다음 이름 대신 As Root(myNsSym):x와 같은 기호로 해당 네임스페이스를 사용합니다.
메뉴 항목과 버튼에 대한 응답만 필요한 경우 각각이 좋은 옵션이 될 때까지 추가 기능 초기화를 지연하라는 위의 제안이 있습니다. 그러면 애드인이 처음 사용될 때 각 프로젝트에서 초기화됩니다. 그리고 전역을 사용하여 이전 초기화를 확인할 수 있습니다. 과거에 여러 추가 기능에 대해 이 작업을 수행했습니다. 하지만 이는 JMP가 시작/종료될 때 많은 작업을 수행하지 않기 때문에 시작 및 종료 스크립트가 매우 단순해야 함을 의미합니다. 메뉴에 대한 응답 이외의 것이 필요하거나 프로젝트 간에 통신해야 하는 경우에도 작동하지 않습니다. 이러한 경우 루트 네임스페이스가 가장 좋습니다.
마지막으로 Project OnOpen 스크립트 또는 Workspace Startup 스크립트를 사용하여 초기화할 수도 있습니다. 보다 https://www.jmp.com/support/help/en/16.0/index.shtml#page/jmp/write-a-project-on-open-script-2.shtml 그리고 https://www.jmp.com/support/help/en/16.0/index.shtml#page/jmp/run-startup-scripts-to-control-workspaces.shtml#ww632187 자세한 내용은 . 추가 기능에 대한 시작/종료 스크립트에서 이미 많은 작업을 수행하지 않은 경우 그 중 하나에서 추가 기능으로 Try(Get Addin("...")<<
Re: 프로젝트 내에서 애드인을 실행할 수 없습니다.잘 모르겠습니다. @aaron_andersen 정답을 알게 됩니다. 나의 빠른 테스트는 당신이 글로벌 변하기 쉬운 네임스페이스 보유; 다양한 네임스페이스 함수(및 클래스 함수)는 프로젝트 외부의 네임스페이스에 대해 보이지 않습니다. 작동할 것 같은 작업을 수행했습니다. 프로젝트 외부에서 전역을 할당합니다. 나는 :::을 사용했지만 그것은 프로젝트에서만 특별하다고 생각합니다.
:::myNameSpace = namespace("myNameSpace"); // "globalize" a namespace프로젝트 내에서 :::myNameSpace가 작동하는 것으로 보입니다.
프로젝트 OnOpen 스크립트가 언제 실행되고 어떤 컨텍스트에서 실행되는지 확실하지 않지만 솔루션의 일부일 수 있습니다. 추가 기능을 실행하여 프로젝트 범위 내에서 기능을 다시 만들 수 있습니다. (예전에 가지고 놀았는데 프로젝트를 열었을 때 창을 정리할 때 유용할 것 같았습니다. 나는 그럴 필요가 없었다.)
전역 변수를 만들지 않고 JSL 함수를 네임스페이스에서 격리된 상태로 유지하는 이유를 이해합니다. 그 일을 계속할 수 있는 방법이 있기를 바랍니다. (물론 네임스페이스 이름은 또 다른 전역 공간입니다... 그리고 저는 그것이 프로젝트가 싸우고 있는 것이라고 생각합니다.)
Re: 프로젝트 내에서 애드인을 실행할 수 없습니다.안녕 크레이그,
Lynn이 질문에 사용하는 추가 기능을 작성했습니다.변수 충돌을 피하기 위해 각 추가 기능에 대한 네임스페이스를 만들었습니다.이러한 네임스페이스는 프로젝트가 아닌 전역 범위에만 존재합니까?":::" 전역 범위 내에서 네임스페이스를 만들 수 있는 방법이 있습니까?
감사합니다.
남자
Re: 프로젝트 내에서 애드인을 실행할 수 없습니다.Craige의 아이디어는 제가 가장 먼저 살펴보는 것이기도 합니다. (만약 그것이 작동하지 않는다면, 추가 제안을 하기 위해 adin-in을 보거나 적어도 그것이 하는 일에 대해 더 많이 알아야 할 것입니다).
아아
Re: 프로젝트 내에서 애드인을 실행할 수 없습니다.나는 이것을 찾았다:
https://www.jmp.com/support/help/en/16.0/?os=win&source=application&utm_source=helpmenu&utm_medium=application#page/jmp/running-scripts-in-a-project.shtml
"JMP는 여러 프로젝트 s는 동시에 열리며, 전혀 열리지 않는 항목도 있습니다. 프로젝트.각 프로젝트 자신의 글로벌 서로 다른 변수에서 동일한 이름의 변수로 인한 충돌을 방지합니다. 프로젝트 에스. 드물게 열려 있는 모든 변수 간에 특정 변수를 공유하려는 경우 프로젝트 에스, 사용 ::: 루트 연산자입니다."
추가 기능이 프로젝트에서 사용하려는 스크립트를 로드하는 경우 :::이 필요할 수 있습니다. 나는 그것을 시도하지 않았습니다.
@aaron_andersen
Re: 프로젝트 내에서 애드인을 실행할 수 없습니다.귀하의 추가 기능은 추가 기능이 로드될 때 정의되고 나중에 추가 기능이 호출될 때 참조되는 전역 변수에 의존하는 것 같습니다.프로젝트에서 전역 컨텍스트는 다른 프로젝트 및 나머지 JMP와 다르며 추가 기능으로 정의된 항목은 프로젝트 내에서 액세스할 수 없습니다.이를 방지하기 위해 모든 메뉴 옵션을 설정하여 파일을 열거나 추가 기능이 이미 로드되었는지 확인(예: 적절한 전역 항목이 있는지 확인)하고 로드되지 않은 경우 추가 기능을 다시 로드하는 스크립트를 실행할 수 있습니다. 이렇게 하면 사용자가 프로젝트 내에서 추가 기능을 처음 호출할 때 추가 기능 네임스페이스와 변수가 로드됩니다.
추가 기능에서 전역 변수에 의존하지 않는 경우 작동하지 않는 기능에 대한 자세한 정보를 제공할 수 있습니까?
Re: Project 내에서 애드인을 실행할 수 없습니다.네임스페이스와 프로젝트 - 불행히도 여기서 논의한 것보다 훨씬 복잡합니다...
Recall Function Library 에서 함수를 사용자 정의 함수로 생성하고 JMP가 시작될 때 AddIn을 통해 로드하는 것이 좋은 생각이라고 생각했습니다. 이렇게 하면 스크립팅 인덱스를 통해 기능이 잘 문서화되고 사용자는 AddIn이나 프로젝트에 라이브러리를 포함할 필요가 없습니다. 이미 거기에 있습니다.
그런 다음 원래 네임스페이스는 JMP의 글로벌 네임스페이스에서만 생성되었으며 네임스페이스를 글로벌화해야 한다는 사실을 깨달았습니다.
:::myNameSpace = namespace("myNameSpace"); // "globalize" a namespace프로젝트에서 접근할 수 있도록 합니다.
불행히도, 저는 여기에 기록한 추가 문제에 직면했습니다.
네임스페이스와 프로젝트
Re: Project 내에서 애드인을 실행할 수 없습니다.멋진 기술이네요. 감사합니다 @Jasean :
프로젝트에서 사용할 루트 네임스페이스를 지역화합니다.
myVar = :::myNs
myVar:x // success
왜 내 문제가 2021년에 논의되지 않았나요?
JMP16 이하에서 작동하는 라이선스를 가지고 계신 분이 계시나요? 2021년에 문제가 있었는지 확인해 주실 수 있을까요?
아니면 @Jasean 의 트릭을 "기본적으로" 사용하셨나요?