Filemaker:值形式相关 table
Filemaker: values form related table
我有 2 个 table,DATA
和 IMAGES
,在基于 item_number
的关系中。
DATA
中的每条记录都收集了 IMAGES
中的 3 条记录。
例如,item_number
010050 的记录链接到 IMAGES
中的这些记录:
- 010050.eps
- 010050_table.tif
- 010050_drawing.png
在 DATA 的相应记录中,我有以下字段:
main
table
drawing
我的目标是将 DATA 中的字段设置为:
- 010050.eps => 主要
- 010050_table.tif => table
- 010050_drawing.png => 绘图
我试过了:
ExecuteSQL("SELECT filename FROM images WHERE filename = ?"; ""; ""; "010050_drawing")
谁能给我点提示?
老实说,除非发生的事情比你描述的要多,否则你太难了。
如果每个 DATA 记录总是恰好有 3 个 IMAGE 记录,特别是如果您想将每个图像直接关联到特定类型,则不需要 IMAGE table。一个更简单的解决方案是将 3 个容器字段添加到您的 DATA table(例如,main_image、table_image、drawing_image)。您不需要 SQL 或门户网站,也不必担心将相关图像链接到它们的类型。
OTOH,如果您确实需要一个单独的 table,请考虑硬连接三个专用的 1:1 关系,每个图像类型一个。为此,在 DATA 中添加 3 个特殊键字段:(main_image_id 等)并为每个图像类型创建一个关系,每个字段都在这些字段之一和主图像之间。然后,每当您创建一条 DATA 记录和 3 个相关的 IMAGE 记录时,将匹配图像的键放入匹配的 DATA::xxx_image_id 字段中。这样,您就会拥有一个干净的 1:1 关系,并且每个相关图像都将锁定为其类型。
感谢您的回复
我需要这些字段中图像的值才能将其导出到 XML 和 InDesign(到 table 单元格)。
问题是我知道文件名,即 item_number 后跟 _drawing 或 _table,但不知道正手的扩展名(许多文件和来自不同来源)
因此文件格式不同。
我现在的解决方案是:
- 将所有图像导入相关(item_number,他也是文件名的一部分)FMP table
- 我计算了该文件是 table、绘图还是插图,并将这些值放在字段 'kind' 中:
Case (
PatternCount ( filename ; "_drawing." ) ;
"drawing" ;
PatternCount ( filename ; "_table." ) ;
"table" ;
Length ( filename )=10 ;
"main" ;
""
)
- 然后我在每个字段中进行了查询,主要 - table - 绘图。下图是'table'字段中的计算。
ExecuteSQL("
SELECT path_xml
FROM images
WHERE item_number = ? and kind = ?";
"";""; item_number ; "table"); ""
)
也许有点笨拙,但现在可以了。
I couldn't figure out how I can do that in xslt.
举个简单的例子,假设您从 Data
table 导出,导出中只包含两个字段:Data::ItemNumber
和 Images::FileName
。您的原始导出将如下所示(显示两条记录):
XML
<?xml version="1.0" encoding="UTF-8"?>
<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
<ERRORCODE>0</ERRORCODE>
<PRODUCT BUILD="" NAME="FileMaker" VERSION=""/>
<DATABASE DATEFORMAT="" LAYOUT="" NAME="" RECORDS="" TIMEFORMAT=""/>
<METADATA>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="ItemNumber" TYPE="NUMBER"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Images::FileName" TYPE="NUMBER"/>
</METADATA>
<RESULTSET FOUND="2">
<ROW MODID="0" RECORDID="1">
<COL>
<DATA>010050</DATA>
</COL>
<COL>
<DATA>010050.eps</DATA>
<DATA>010050_table.tif</DATA>
<DATA>010050_drawing.png</DATA>
</COL>
</ROW>
<ROW MODID="0" RECORDID="2">
<COL>
<DATA>2345</DATA>
</COL>
<COL>
<DATA>2345_extra.gif</DATA>
<DATA>2345_table.gif</DATA>
<DATA>2345_drawing.jpg</DATA>
<DATA>2345.tiff</DATA>
</COL>
</ROW>
</RESULTSET>
</FMPXMLRESULT>
注意第二条记录中的不同顺序以及额外的图像。
应用以下样式表后:
XSLT
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fmp="http://www.filemaker.com/fmpxmlresult"
exclude-result-prefixes="fmp">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<root>
<xsl:for-each select="fmp:FMPXMLRESULT/fmp:RESULTSET/fmp:ROW">
<xsl:variable name="item-no" select="fmp:COL[1]/fmp:DATA"/>
<item>
<number>
<xsl:value-of select="$item-no"/>
</number>
<main>
<xsl:value-of select="fmp:COL[2]/fmp:DATA[starts-with(., concat($item-no, '.'))]"/>
</main>
<table>
<xsl:value-of select="fmp:COL[2]/fmp:DATA[starts-with(., concat($item-no, '_table.'))]"/>
</table>
<drawing>
<xsl:value-of select="fmp:COL[2]/fmp:DATA[starts-with(., concat($item-no, '_drawing.'))]"/>
</drawing>
</item>
</xsl:for-each>
</root>
</xsl:template>
</xsl:stylesheet>
您将获得:
结果
<?xml version="1.0" encoding="UTF-8"?>
<root>
<item>
<number>010050</number>
<main>010050.eps</main>
<table>010050_table.tif</table>
<drawing>010050_drawing.png</drawing>
</item>
<item>
<number>2345</number>
<main>2345.tiff</main>
<table>2345_table.gif</table>
<drawing>2345_drawing.jpg</drawing>
</item>
</root>
我有 2 个 table,DATA
和 IMAGES
,在基于 item_number
的关系中。
DATA
中的每条记录都收集了 IMAGES
中的 3 条记录。
例如,item_number
010050 的记录链接到 IMAGES
中的这些记录:
- 010050.eps
- 010050_table.tif
- 010050_drawing.png
在 DATA 的相应记录中,我有以下字段:
main
table
drawing
我的目标是将 DATA 中的字段设置为:
- 010050.eps => 主要
- 010050_table.tif => table
- 010050_drawing.png => 绘图
我试过了:
ExecuteSQL("SELECT filename FROM images WHERE filename = ?"; ""; ""; "010050_drawing")
谁能给我点提示?
老实说,除非发生的事情比你描述的要多,否则你太难了。
如果每个 DATA 记录总是恰好有 3 个 IMAGE 记录,特别是如果您想将每个图像直接关联到特定类型,则不需要 IMAGE table。一个更简单的解决方案是将 3 个容器字段添加到您的 DATA table(例如,main_image、table_image、drawing_image)。您不需要 SQL 或门户网站,也不必担心将相关图像链接到它们的类型。
OTOH,如果您确实需要一个单独的 table,请考虑硬连接三个专用的 1:1 关系,每个图像类型一个。为此,在 DATA 中添加 3 个特殊键字段:(main_image_id 等)并为每个图像类型创建一个关系,每个字段都在这些字段之一和主图像之间。然后,每当您创建一条 DATA 记录和 3 个相关的 IMAGE 记录时,将匹配图像的键放入匹配的 DATA::xxx_image_id 字段中。这样,您就会拥有一个干净的 1:1 关系,并且每个相关图像都将锁定为其类型。
感谢您的回复
我需要这些字段中图像的值才能将其导出到 XML 和 InDesign(到 table 单元格)。
问题是我知道文件名,即 item_number 后跟 _drawing 或 _table,但不知道正手的扩展名(许多文件和来自不同来源)
因此文件格式不同。
我现在的解决方案是:
- 将所有图像导入相关(item_number,他也是文件名的一部分)FMP table
- 我计算了该文件是 table、绘图还是插图,并将这些值放在字段 'kind' 中:
Case (
PatternCount ( filename ; "_drawing." ) ;
"drawing" ;
PatternCount ( filename ; "_table." ) ;
"table" ;
Length ( filename )=10 ;
"main" ;
""
)
- 然后我在每个字段中进行了查询,主要 - table - 绘图。下图是'table'字段中的计算。
ExecuteSQL("
SELECT path_xml
FROM images
WHERE item_number = ? and kind = ?";
"";""; item_number ; "table"); ""
)
也许有点笨拙,但现在可以了。
I couldn't figure out how I can do that in xslt.
举个简单的例子,假设您从 Data
table 导出,导出中只包含两个字段:Data::ItemNumber
和 Images::FileName
。您的原始导出将如下所示(显示两条记录):
XML
<?xml version="1.0" encoding="UTF-8"?>
<FMPXMLRESULT xmlns="http://www.filemaker.com/fmpxmlresult">
<ERRORCODE>0</ERRORCODE>
<PRODUCT BUILD="" NAME="FileMaker" VERSION=""/>
<DATABASE DATEFORMAT="" LAYOUT="" NAME="" RECORDS="" TIMEFORMAT=""/>
<METADATA>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="ItemNumber" TYPE="NUMBER"/>
<FIELD EMPTYOK="YES" MAXREPEAT="1" NAME="Images::FileName" TYPE="NUMBER"/>
</METADATA>
<RESULTSET FOUND="2">
<ROW MODID="0" RECORDID="1">
<COL>
<DATA>010050</DATA>
</COL>
<COL>
<DATA>010050.eps</DATA>
<DATA>010050_table.tif</DATA>
<DATA>010050_drawing.png</DATA>
</COL>
</ROW>
<ROW MODID="0" RECORDID="2">
<COL>
<DATA>2345</DATA>
</COL>
<COL>
<DATA>2345_extra.gif</DATA>
<DATA>2345_table.gif</DATA>
<DATA>2345_drawing.jpg</DATA>
<DATA>2345.tiff</DATA>
</COL>
</ROW>
</RESULTSET>
</FMPXMLRESULT>
注意第二条记录中的不同顺序以及额外的图像。
应用以下样式表后:
XSLT
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fmp="http://www.filemaker.com/fmpxmlresult"
exclude-result-prefixes="fmp">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<root>
<xsl:for-each select="fmp:FMPXMLRESULT/fmp:RESULTSET/fmp:ROW">
<xsl:variable name="item-no" select="fmp:COL[1]/fmp:DATA"/>
<item>
<number>
<xsl:value-of select="$item-no"/>
</number>
<main>
<xsl:value-of select="fmp:COL[2]/fmp:DATA[starts-with(., concat($item-no, '.'))]"/>
</main>
<table>
<xsl:value-of select="fmp:COL[2]/fmp:DATA[starts-with(., concat($item-no, '_table.'))]"/>
</table>
<drawing>
<xsl:value-of select="fmp:COL[2]/fmp:DATA[starts-with(., concat($item-no, '_drawing.'))]"/>
</drawing>
</item>
</xsl:for-each>
</root>
</xsl:template>
</xsl:stylesheet>
您将获得:
结果
<?xml version="1.0" encoding="UTF-8"?>
<root>
<item>
<number>010050</number>
<main>010050.eps</main>
<table>010050_table.tif</table>
<drawing>010050_drawing.png</drawing>
</item>
<item>
<number>2345</number>
<main>2345.tiff</main>
<table>2345_table.gif</table>
<drawing>2345_drawing.jpg</drawing>
</item>
</root>