---
title: "解决复杂功能的快速方案"
date: "2011-06-27"
tags: 
  - "data-integration"
  - "data-mapping"
  - "mapforce"
  - "version-2011"
description: Altova MapForce 2011 通过允许用户图形化地组合函数，从而简化了复杂的数据映射过程。它支持分步测试，以确保数据转换的准确性。
---
Status: #blog

Tags:  #data-integration #data-mapping #mapforce #version-2011

Categories: [Altova](/blog/zh/category/altova.md) 
# 解决复杂功能的快速方案

某些数据转换需要经过多个步骤，以满足当前复杂的数据通信需求。 [Altova MapForce 2011](https://www.altova.com/zh/mapforce.html) 允许您通过图形化方式将各种数学、逻辑、字符串和其他[专业函数](https://www.altova.com/zh/mapforce/data-processing-functions.html)组合起来，构建复杂的“数据公式”，从而获得所需的结果。 如果您正在进行一项大型、复杂的地图制作，或者您第一次使用某个不熟悉的函数，或者当您的函数产生一个需要进一步处理的中间结果时，在构建过程中，每完成一个步骤就进行测试，会对您的工作非常有帮助。 您可以 [简单的文本文件](https://www.altova.com/zh/mapforce/flat-file-mapping.html) 作为一种临时手段，用于查看您正在编写的函数的功能输出。 假设我们想要为现有的输出文件与对应关系添加一个日期和时间戳，以记录数据生成的时间。 现在，我们可以轻松地在一个新的映射中测试 MapForce 的“现在”功能，该功能只需将数据连接到一个文本文件即可。 

[![与文本文件相关的函数](https://lh4.ggpht.com/-NecSm6arE0g/Tf-MKZyrP4I/AAAAAAAAAZM/DyO5RHvbDpU/technote27_1_thumb%25255B2%25255D.png?imgmax=800 "A function connected to a text file")](http://lh3.ggpht.com/-nlHcCbcvjFc/Tf-MJ9mMqQI/AAAAAAAAAZI/lFddbb7blzc/s1600-h/technote27_1%25255B4%25255D.png)

点击映射窗口底部的“输出”按钮，即可看到即时结果： 

[![`now` 函数的输出结果](https://lh3.ggpht.com/-d_iemv_ykrc/Tf-MLG7DA1I/AAAAAAAAAZU/tPounch7Ofc/technote27_2_thumb%25255B2%25255D.png?imgmax=800 "Output of the now function")](http://lh5.ggpht.com/-_I-NteTD0tE/Tf-MK-qeWAI/AAAAAAAAAZQ/byuCmyEmvrA/s1600-h/technote27_2%25255B4%25255D.png) 

好的，这样可以，但也许使用输出文件的用户希望看到一个格式更美观的版本。我们可以利用各种日期时间函数和字符串函数，构建一个复杂的函数，最终使我们的映射结果呈现如下： 

[![一个复杂的函数，用于生成字符串](https://lh3.ggpht.com/-zuEPfPxnuLY/Tf-MMIRLZKI/AAAAAAAAAZc/zj0xQr561RU/technote27_3_thumb%25255B2%25255D.png?imgmax=800 "Complicated function to produce a string")](http://lh6.ggpht.com/-429i3ML-88k/Tf-MLsxsfjI/AAAAAAAAAZY/n5PU6-z0sjs/s1600-h/technote27_3%25255B4%25255D.png) 

或者，我们可以直接使用 `format-dateTime` 转换函数，并结合一个字符串常量来定义格式 

[![使用 `format-dateTime` 函数进行自定义输出](https://lh3.ggpht.com/-It_hoxtBz5I/Tf-MM0Jw2oI/AAAAAAAAAZk/bsKoKQGZkNc/technote27_4_thumb%25255B2%25255D.png?imgmax=800 "Using the format-dateTime function for customized output")](http://lh5.ggpht.com/-aHLThUl46bI/Tf-MMWQUnkI/AAAAAAAAAZg/oVQM37fNsAg/s1600-h/technote27_4%25255B4%25255D.png) 

在工作过程中，我们可以随时按下“输出”按钮，直到我们对结果感到满意，结果应该类似于以下所示： 

[![自定义日期和时间格式字符串](https://lh4.ggpht.com/-94YVgt5hGAc/Tf-MNzI5DaI/AAAAAAAAAZs/f1hokVgdvBo/technote27_5_thumb%25255B2%25255D.png?imgmax=800 "Custom string for date and time")](http://lh3.ggpht.com/-mOgE_ufw_ds/Tf-MNTQyQvI/AAAAAAAAAZo/gMCh3pkDtSI/s1600-h/technote27_5%25255B4%25255D.png) 

如果您不是每天都使用日期和时间数据类型，那么第一次尝试编写格式字符串，使其产生您想要的结果，可能会比较困难！经过几次尝试、修改，以及参考了 MapForce 的帮助文档，我们最终开发出以下格式，并将其存储在与格式化日期和时间转换函数中的格式输入连接的字符串常量中： 

[![用于定义日期和时间格式的字符串](https://lh4.ggpht.com/-vJlxfpnWDLE/Tf-MOqGOehI/AAAAAAAAAZ0/5kU5pfLXnjI/technote27_6_thumb%25255B2%25255D.png?imgmax=800 "String to define format for dateTime")](http://lh6.ggpht.com/-HT699QUkXRg/Tf-MOSslQNI/AAAAAAAAAZw/qAjirhgmTKw/s1600-h/technote27_6%25255B4%25255D.png)

到目前为止，我们使用的是一个文本文件，该文件被定义为一种基本的CSV文件，只包含一个字段。但是，您可以打开该文件的“属性”对话框，添加字段，或者创建更定制化的输出文件。

[![简单文本文件的属性设置](https://lh6.ggpht.com/-uU2CKqIDYDQ/Tf-MPvuAgYI/AAAAAAAAAZ8/SzheowFYP3w/technote27_7_thumb%25255B3%25255D.png?imgmax=800 "Properties settings for a simple text file")](http://lh4.ggpht.com/-qZ5CeImVIuI/Tf-MPNq4zRI/AAAAAAAAAZ4/lfbmBTAuC_g/s1600-h/technote27_7%25255B5%25255D.png) 

使用文本文件作为输出目标的一个优点是，它不会对函数结果进行类型检查，因此，使用文本文件作为目标可以让你检查和验证任何函数的输出。在下面的截图中，我们创建了一个数学函数，并在文本文件目标中添加了第二个字段，用于映射结果。 

[![包含两个目标字段的文本文件](https://lh4.ggpht.com/-bkqK8zHzSGc/Tf-MQXFDV8I/AAAAAAAAAaE/lXmO7FFVIVE/technote27_8_thumb%25255B2%25255D.png?imgmax=800 "Text file with two target fields")](http://lh5.ggpht.com/-i2GuUy7xGa4/Tf-MP0AmpQI/AAAAAAAAAaA/DoEDCUBTPRw/s1600-h/technote27_8%25255B4%25255D.png)

现在输出结果是一个单行、以逗号分隔的字符串，格式如下：

[![两个字段，存储在一个简单的文本文件中](https://lh6.ggpht.com/-pZMEjI9YzCA/Tf-MRRwlbrI/AAAAAAAAAaM/H61gauIPrpw/technote27_9_thumb%25255B2%25255D.png?imgmax=800 "Two fields in a simple text file")](http://lh3.ggpht.com/-4qI-JEQq6KU/Tf-MREv_AEI/AAAAAAAAAaI/TlRYz1Ucn_o/s1600-h/technote27_9%25255B4%25255D.png) 

如果我们的最终目标是一个数据库字段或一个XML元素，并且该字段或元素的数据类型是整数，那么我们可以立即看到这个数学函数没有产生预期的数据类型。当你在测试映射中完善了你的函数后，你可以直接选择、复制并粘贴它到你的更大范围的映射中。然后，你可以将该函数的输出连接到你的最终目标。在下面的屏幕截图所示的例子中，我们的`dateTime`格式化函数被映射到一个XML模式中的元素，该元素被定义为字符串类型。

[![将函数复制并粘贴到更大的映射关系中](https://lh4.ggpht.com/-yWufMDEjtr4/Tf-MSSrvKUI/AAAAAAAAAaU/jy-aqhTO4vI/technote27_10_thumb%25255B2%25255D.png?imgmax=800 "Function pasted into larger mapping")](http://lh3.ggpht.com/-V7xU_lpVjpA/Tf-MR4WsmXI/AAAAAAAAAaQ/hfRmKCiFRFM/s1600-h/technote27_10%25255B4%25255D.png) 

如果这是一个您将来可能需要再次使用的功能，您可以将其转换为用户自定义函数，并将其保存在您的库中，以便方便重复使用。 

[![Altova MapForce 函数菜单](https://lh6.ggpht.com/-Qx5nsgVq1MA/Tf-MS30X-JI/AAAAAAAAAac/_IyIHiUGYWE/technote27_11_thumb%25255B5%25255D.png?imgmax=800 "Altova MapForce Function menu")](http://lh6.ggpht.com/-sL7Qf6AitKg/Tf-MSuQoegI/AAAAAAAAAaY/Yz14z0P3Uvo/s1600-h/technote27_11%25255B9%25255D.png) 

您甚至可以使用一个文本文件作为临时目标，以便在更大的映射关系中构建和测试复杂的函数。在这种情况下，您的映射关系包含多个可能的输出。位于每个输出文件右上角的“眼睛”按钮用于选择要在“输出”窗口中显示的输出文件。

[![将文本文件作为更大范围映射中的一个临时目标](https://lh6.ggpht.com/-ROHTGmMGhCc/Tf-MUbPViPI/AAAAAAAAAak/1OdyEKLbGvY/technote27_12_thumb%25255B2%25255D.png?imgmax=800 "Text file as a temporary target")](http://lh3.ggpht.com/-JEuO0O-O1d8/Tf-MTy-EOVI/AAAAAAAAAag/q10Mjah9tBQ/s1600-h/technote27_12%25255B4%25255D.png) 

当您选择文本文件作为输出预览时，MapForce 的执行引擎不会处理整个映射关系，只会处理与该文本文件相关的函数。这在您只想查看函数的结果，而您的整个映射关系需要处理大量数据时，或者您不想冒着将无效数据写入数据库的风险时，可以节省大量时间。在许多其他情况下，这同样适用。
**亲自体验一下，将 MapForce 应用于您自己的数据映射项目是多么简单！**
[**下载免费的 30 天试用版**](https://www.altova.com/zh/download/mapforce/data_mapping_enterprise.html)
**的 MapForce。**
