答案是肯定的!
你需要...
fmWorkMate
[让您的 FileMaker 工作]
fmWorkMate 是来自 www.mrwatson.de(我在过去 10 年左右编写的)的 FileMaker 开发人员的免费 Power Toolbox。
我自己使用 fmWorkMate 来做你正在做的事情!在我的情况下,我正在同步 FileMaker 解决方案的表和嵌入式 ESS 表之间的字段,但过程是相同的……制作一个字段/位代码……然后自动生成(“相乘”)其余部分。 :-)
那么,怎么做?
首先下载并安装 fmWorkMate - 这实际上是该过程中最棘手的部分,因为最新版本尚未发布(一旦发布,我将更正此问题)
- 如果您使用 Mac OS downloads page 下载 fmWorkMate Bundle
- 如果您使用 Windows,则需要从 downloads page 下载旧的 Windows 版本
- 如果您有任何其他问题,或有任何问题,请联系我,我会(最终)或(至少)将工具拿出来给您
这里有几个例子来说明如何使用 fmWorkMate 做你想做的事:
[编辑:
我刚刚重新阅读了您的问题,并意识到我在这里的第一个答案并没有直接回答您的问题,而是展示了如何将字段 A 和 B 替换为字段 C 和 D。
这些示例仍然很有用且具有说明性,并且这些技术相互依赖 => 所以我在下面添加了示例 4 作为您问题的完整答案。
/编辑]
示例 1:从您的两个带有 A 和 B 的按钮中,创建两个带有 C 和 D 的相似按钮
理论上:
- 从 FileMaker 中复制您的按钮 (
CMD+C / ctrl+c)
- 使用 fmCheckMate 将 FileMaker 对象转换为可编辑的 XML
- 打开 fmCheckMate
- 打开 fmWorkMate
- 选择 fmCheckMate 工具(或按
CMD+2 / ctrl+2)
- 按下按钮
[Convert Clipboard FM ⭤ XML]
- 或按
CMD+2 / ctrl+2
- 或按
CMD+OPT+C/ctrl+alt+c)
- 如果您没有自动更改为 XML 编辑器视图...
- 按编辑按钮(或
CMD+3 / ctrl+3)切换到XML-Edit视图
- 或将 fmCheckMate 设置为 始终 切换到 xml 编辑器:
-
fmCheckMate > Settings... > XML editor > Small editor)
- 根据需要在 XML 中查找和替换文本
- 将字段
A 替换为字段 C
- 单击
[F]ind 字段(或按CMD+F / ctrl+F)
- 单击
[R]eplace 字段(或按TAB 或CMD+SHIFT+F / ctrl+shift+F)
- 替换所有匹配项:
- 按
CMD+OPT+A/ctrl+alt+A
- 或(在较新版本的 fmCheckMate 上)按
[R] 按钮
- 或(在旧版本的 fmCheckMate 上)按住
ALT 并按下 [R] 按钮
- 将字段
B 替换为字段 D
- 转换回 FileMaker 对象
- 按 [-> FM] 按钮(或按
CMD+OPT+V / ctrl+alt+V)
- 粘贴到 FileMaker (
CMD+V / ctrl+V)
瞧!
(或者更确切地说 - 哎呀 - 我们破坏了它吗?)
实践:
对于您给出的特定示例 - 仅使用一个字母的字段名称 A 和 B - 以上将破坏 XML 并且不起作用 - 因为搜索和替换是整个 XML,而字母 A 和 B 出现在整个 XML 的各个位置,替换它们将使 XML 不可读。
但是,您将实际替换的 99.9% 的字段名称将是非常独特的,而且事实证明这很少会成为问题。
例如,如果您的字段被命名为 Previous value 和 Current value,并且您想将它们更改为 Previous event 和 Current event,那完全没有问题。
但是请注意,仅仅用event 替换value 也会(可能)破坏XML,因为value 也是(很可能)XML 属性的名称。一般来说:避免使用像name、id、Layout、.
这样的单字搜索词
[编辑:当然,表名DataA 和DataB 可以正常工作,因为它们是唯一的/与 XML 标记和元素名称不冲突。]
示例 2:多个字段乘以一段代码
假设您有一个包含 10 个要同步的字段的列表:
CustomerName
Company
Street
HouseNumber
City
ZIP
Country
Item
Quantity
UnitPrice
我们如何在很短的时间内为这 10 个字段生成代码?
- 为您的第一个字段编写代码
- 乘以你的代码
怎么做?
首先准备fmTextMultiplier:
- 启动 fmTextMultiplier
- 打开 fmWorkMate
- 选择 fmTextMultiplier 工具
- 如有必要,请按
[New] (CMD+2 / ctrl+2) 获取空记录
- 将您的字段列表粘贴到空白的替换字段中
- 按下按钮
[Don't duplicate original]
=> fmTextMultiplier 已准备就绪 :-)
然后
- 为字段 1 创建一些代码 - 例如名为
CustomerName 的字段
- 乘以代码
- 从 FileMaker 中复制代码 (
CMD+C / ctrl+c)
- 将 XML 粘贴到 fmTextMultiplier
- 单击 fmTextMultiplier 文本字段
- 选择
Edit > Paste FileMaker Clipboard -> XML(或按CMD+ALT+V/ctrl+alt+V)
- 点击
[Multiply Text x Values](或按CMD+5/ctrl+5)
- 点击
[-> FM](或按CMD+6/ctrl+6)
- 将代码粘贴回 FileMaker
- 根据需要检查并调整您的代码
最好的是,同样的方法适用于字段定义、布局字段、按钮、脚本步骤、脚本等等!
一旦您设置了 fmTextMultiplier,您就可以使用相同的乘法器函数将字段周围的所有不同代码位相乘。 :D
示例 3:生成一系列字段
假设您正在构建一个日历并需要一系列字段来保存日期:
Day 1
Day 2
Day 3
Day 4
Day 5
Day 6
Day 7
Day 8
Day 9
Day 10
Day 11
Day 12
Day 13
Day 14
Day 15
Day 16
Day 17
Day 18
Day 19
Day 20
Day 21
Day 22
Day 23
Day 24
Day 25
Day 26
Day 27
Day 28
Day 29
Day 30
Day 31
Day 32
Day 33
Day 34
Day 35
Day 36
Day 37
Day 38
Day 39
Day 40
Day 41
Day 42
哎呀,这将是一项艰巨的工作!
不!
我们将使用 fmTextSeries 自动生成系列,并使用 fmTextMultiplier 来乘以 Day 1 代码。
-
使用 fmTextSeries 生成您需要的字段名称列表(系列)
- 开始一个新的 fmTextSeries
- 打开 fmWorkMate
- 选择 fmTextSeries 工具
- 如有必要,请按
New
- 在对话框中输入以下值并按
OK
-
Text: Day 1
-
Times: 42
-
Ìncrement: 1
- => 系列已经在您的剪贴板上,可以粘贴了!
-
准备 fmTextMultiplier
- 返回 fmWorkMate(通过标准的“返回”导航):
- 点击 mrwatson 徽标
- 或按
CMD+1/ctrl+1
- 开始一个新的 fmTextMultiplier
- 选择 fmTextMultiplier 工具
- 按
New 开始新的乘法
- 将生成的字段名称粘贴到替换字段中
- 选择
[Don't duplicate original]
-
将您的代码与上面的示例 2 相乘
并为任何其他此类字段重复 - 或者实际上对于您需要的任何代码(例如第 1 天事件摘要字段、日历重置脚本、日历选择器布局......)
示例 4:Set Field[ DataA::field ; DataB::field ] 的改变方向
所以,...
- 您有一个脚本步骤(或带有脚本步骤的按钮 - 甚至多个按钮/步骤)将“字段 A”设置为“字段 B”(或者,在您的情况下,将表
DataA 中的字段设置为DataB 中的一个字段)...
- 你想改变方向吗?
简单!使用 fmCheckMate XSLT 转换来交换源和目标字段!
怎么做?
除了 fmWorkMate 和 fmCheckMate(见上文),您还需要 fmCheckMate XSLT 库:
将 fmCheckMate XSLT 文件夹复制到文档文件夹后:
- 复制按钮(或脚本步骤)
- 使用 fmCheckMate 转换为 XML(见上文)
- 按
[T]ransform 按钮
- 如果这是第一次使用 fmCheckMate-XSLT,则加载库
- 注意:在某些(旧?)版本的库 + 工具中,您可能会在此处看到加载错误 - 这些可以忽略,因为它们是由一些格式错误的 XSLT 文件引起的,与此处的进一步过程无关。
- 查找并执行所需的转换
- 在列表视图中
- 浏览或查找
Swap Set Field Target And Value 函数
- 点击函数名执行函数
- 注意:
- 单击其他字段过滤列表,因此您可以减少列表以浏览
- 单击
Change 仅显示更改功能
- 单击
Script step 仅显示更改脚本步骤函数
- 单击标题对列进行排序
- 或在树视图中
- 点击
[Change]
- 点击
[Change > Script steps]
- 点击
[Change > Script steps > Swap]
- 点击
[Change > Script steps > Swap > Set]
- ...
- 点击
[Change > Script steps > Swap > Set > … > … > Value]
- 您可以使用
[View] 按钮更改视图
- 将 XML 转换回 FM
- 粘贴到 FileMaker 中
哈哈!方向已经神奇地改变了!
示例 5:使用两个单独的字段列表相乘的代码
您并没有直接提出这个问题,但是这个例子可以让您不必再问另一个问题。
如果您的 FileMaker-fields 和 sql-fields 名称略有不同,fmTextMultiplier 也可以处理。
假设您有这些 FileMaker 字段(在您的 DataA 表中)
CustomerName
Company
Street
HouseNumber
City
ZIP
Country
Item
Quantity
UnitPrice
还有这些 sql 字段:
customer_name
company
street
house_number
city
zip
country
item
quantity
unit_price
在您的布局中,您有两个标签相邻的字段:
CustomerName [CustomerName] customer_name [customer_name]
您可以使用 fmTextMultiplier 通过使用两列来将它们相乘:
首先,您需要由制表符(或其他)分隔的两列
CustomerName customer_name
Company company
Street street
HouseNumber house_number
City city
ZIP zip
Country country
Item item
Quantity quantity
UnitPrice unit_price
像这样设置 fmTextMultiplier:
- 启动 fmTextMultiplier
- Opn fmWorkMate
- 选择 fmTextMultiplier 工具
- 按
[New] 开始一个全新的乘法
- 将上述文本粘贴到替换字段中
- 将
Split Values @ char/text字段设置为{{TAB}}(或您选择的分隔符)
- 选择
[Don't duplicate original]
然后您可以通过四个简单的步骤将代码相乘
- 在 FileMaker 中复制代码
- 在 fmTextMultiplier 中相乘 - 如上所述
- 将其粘贴到文本字段中
- 点击字段
- 选择
Edit > Paste FileMaker-Clipboard -> XML
- 点击
[Multiply Text x Values]
- 点击
[-> FM]
- 将代码粘贴回 FileMaker
- 组织布局中的相乘对象
好的,所以第 4 步并不是那么容易,因为所有相乘的布局对象最终都堆积在一个大堆中,拆分起来真的很痛苦 - 如果您从 4 个单独的布局对象开始,那是。
另一方面,如果你...
然后你就可以了
- 将一堆对象粘贴到 FileMaker 中
- 在原始对象组的顶部水平和垂直对齐它们
- 单击某处以取消选择新对象
- 点击顶部对象
- 将其在布局中向下移动到正确的位置
- 您可以计算位置 = orig_top + height_between_rows * (total_number_of_rows-1)
- 选择所有对象 - 包括原始对象
- 选择
Arrange > Distribute > Vertically
等等……所有的行都在正确的位置!
示例 6 - fmTextConverter
还有一个工具可以对文本进行多次转换,fmTextConverter。
因此,如果您有一些对 FileMaker 字段进行操作的代码,并且您希望相同的代码对您的 sql 字段执行相同的操作,您可以简单地
设置 fmTextConverter
- 打开 fmWorkMate
- 打开 fmTextConverter
- 按
[New]创建新文本转换
- 将 FileMaker 字段名称粘贴到搜索字段中
- 将 sql-field-names 粘贴到 Replace 字段中
然后
- 从 FileMaker 中复制代码
- 使用 fmTextConverter 进行转换
- 将代码作为 XML 粘贴到文本字段中
Edit > Paste FileMaker Clipboard -> XML
- 按
[Convert text now]
- 按
[-> FM]
- 将其粘贴回 FileMaker
注意:如果您的一个字段名称是另一个字段名称的子字符串,那么如果先转换子字符串,则替换将出错。
fmTextConverter 突出了这个问题并提供了一个排序按钮,它将较长的字符串排序到顶部,确保永远不会先转换子字符串!
还要注意,fmWorkMate 针对高效的批处理工作进行了高度优化 - 有很多键盘快捷键和设置可以提高重复工作的效率。
最后……
希望对你有用。
请告知我下一个版本的 fmWorkMate 作为开源软件 a.s.a.p. 发布!
快乐的文件制作 - 和文本乘法和文本转换(更不用说文本差异和日志分析和语法着色......和......和......)
嗬嗬嗬!圣诞快乐!
沃森先生