Filemaker:值形式相关 table

Filemaker: values form related table

我有 2 个 table,DATAIMAGES,在基于 item_number 的关系中。 DATA 中的每条记录都收集了 IMAGES 中的 3 条记录。

例如,item_number 010050 的记录链接到 IMAGES 中的这些记录:

在 DATA 的相应记录中,我有以下字段:

我的目标是将 DATA 中的字段设置为:

我试过了:

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::ItemNumberImages::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>