フィールド名を key として、1レコード分のデータを json として取得。

除外フィールド:計算,集計,オブジェクト,グローバル

FileMaker Pro 18 以降

 

フィールドが繰り返しの場合、JSON 配列になります。

戻り値 例:

{"Field01":"Value01","Field02":["Repetition01","Repetition02","Repetition03"]}

function(関数):
Sample input(入力例):
Sample output(出力例):
formula(式):

Let (
[
¢query = "select  
'[\"'||TableName ||'::'||FieldName||'\"'
,''||''||FieldReps||']'
FROM FILEMAKER_FIELDS
WHERE 
TableName ='{TableName}'
AND
FieldClass = 'Normal'
AND
FieldType NOT LIKE 'global%' /*除外 グローバルフィールド*/
AND
FieldType <> 'binary' /*除外 オブジェクトフィールド*/

"
;¢query=Substitute ( ¢query ; "{TableName}" ; TableName )
;¢FieldNames = ExecuteSQL ( ¢query ; "," ; "" )
]; 

While ( 
	[ 
		¢json=""
		;¢MAX = ValueCount ( ¢FieldNames )
		;¢n= 1 
	] ; 
	¢n <= ¢MAX ; 
	[
		¢Array=GetValue ( ¢FieldNames ; ¢n )
		;¢FieldName=JSONGetElement(¢Array;0)
		;¢FieldReps=JSONGetElement(¢Array;1)
		;¢key = GetValue ( Substitute ( ¢FieldName ; "::" ; ¶ ) ; 2 )      

		;¢json = If(¢FieldReps=1;
					JSONSetElement ( ¢json ; ¢key ; GetField ( ¢FieldName ) ; JSONString)
				;
					JSONSetElement ( ¢json ; ¢key ; 
						While ( 
							[
							¢RepsData=""
							;¢i = 1
							;¢index=0
							]; 
							¢i<=¢FieldReps; 
							[
							¢RepsData=JSONSetElement (¢RepsData ; "[" &¢index & "]" ; GetField ( ¢FieldName & "["&¢i &"]" ) ;JSONString)
							;¢i =¢i+ 1
							;¢index=¢index+1
							]; 
							¢RepsData
							)
						; JSONArray)
				)//if

		;¢n=¢n+1
	] ;
	¢json
)

)