1+ window . PlugInHelper = ( ( ) => { return { Create : ( alteryx , manager , window ) => {
2+ const metaInfo = manager . metaInfo
3+ const formulaConstants = [ ]
4+
5+ const jsEvent = ( obj ) => alteryx . JsEvent ( JSON . stringify ( obj ) )
6+ const openHelpPage = ( url ) => jsEvent ( { Event : 'OpenHelpPage' , url} )
7+
8+ let callbackId = 0 ;
9+ function makeCallback ( callback ) {
10+ const callbackName = `callback${ callbackId ++ } `
11+
12+ window [ callbackName ] = ( o ) => {
13+ delete window [ callbackName ]
14+ callback ( o )
15+ }
16+
17+ return callbackName
18+ }
19+
20+ // Get Formula Constants
21+ let formulaConstantsCallback = ( ) => { }
22+ jsEvent ( { Event : 'GetFormulaConstants' , callback : makeCallback ( ( obj ) => {
23+ formulaConstants . push ( ...obj . formulaConstants . map ( ( c ) => { return { name : c . FullName , isNumeric : c . IsNumeric , value : c . Value } } ) )
24+ formulaConstants . push ( ...obj . questionConstants . map ( ( c ) => { return { name : c . FullName , isNumeric : c . IsNumeric , value : c . Value } } ) )
25+ formulaConstantsCallback ( )
26+ } ) } )
27+
28+ // Get Connections
29+ const connectionNames = Array ( metaInfo . Count ) . fill ( ) . map ( ( _ , i ) => metaInfo . Get ( i ) . ConnectionName )
30+ const connections = { }
31+ connectionNames . forEach ( ( n , i ) => {
32+ const fields = metaInfo . Get ( i ) . _GetFields ( ) . map ( ( f , j ) => { return { name : f . strName , type : f . strType , size : f . nSize , scale : f . nScale , description : f . strDescription , index : j } } )
33+ connections [ n ] = fields
34+ } )
35+
36+ // Read Input Data
37+ function getInputData ( connection , rows , callback ) {
38+ jsEvent ( {
39+ Event : 'GetInputData' ,
40+ callback : makeCallback ( callback ) ,
41+ anchorIndex : 0 ,
42+ connectionName : connection ,
43+ numRecs : rows ,
44+ offset : 0 } )
45+ }
46+
47+ function getInputDataArray ( connection , rows , callback ) {
48+ const newCallback = ( o ) => {
49+ const newObj = o . data ? o . data . map ( ( d ) => {
50+ const output = { }
51+ d . forEach ( ( v , i ) => output [ o . fields [ i ] . strName ] = v )
52+ return output
53+ } ) : { }
54+ callback ( newObj )
55+ }
56+ getInputData ( connection , rows , newCallback )
57+ }
58+
59+ // Test Expression
60+ function testExpression ( expression , callback ) {
61+ jsEvent ( {
62+ Event : 'TestExpression' ,
63+ callback : makeCallback ( callback ) ,
64+ expression,
65+ customFields : [ ]
66+ } )
67+ }
68+
69+ // Formula Preview
70+ function formulaPreview ( connection , name , type , expression , callback ) {
71+ const previewObject = [ { name, type, expression} ]
72+
73+ jsEvent ( {
74+ Event : 'FormulaPreview' ,
75+ connectionName : connection ,
76+ anchorIndex : 0 ,
77+ callback : makeCallback ( callback ) ,
78+ expressions : previewObject
79+ } )
80+
81+ }
82+
83+ return {
84+ jsEvent,
85+ openHelpPage,
86+ formulaConstants,
87+ connectionNames,
88+ connections,
89+ getInputData,
90+ getInputDataArray,
91+ setFormulaConstantsCallback : ( callback ) => formulaConstantsCallback = callback ,
92+ testExpression,
93+ formulaPreview
94+ }
95+ } } } ) ( )
0 commit comments