数据导入/导出

通过客户端界面,OpenERP的每个表单, 都有一个标准机制 从csv文件导入数据。跟使用语言翻译相同格式。

Note

Forms and Lists

在web客户端,只读模式下的单个表单视图, 你有机会使用导入和导出功能。在其它任意视图或者表单可编辑,你不能进行 导入导出。如果你使用了GTK客户端,你能从顶部菜单的 表单→导入数据 和 表单→导出数据 找到这个功能

CSV文件格式是文本格式,兼容于多数电子表格程序(如OpenOffice Calc和Microsoft Excel)并且很容易在工作表中编辑。表 单的的第一行包含了字段的名称。后面所有的行是数据,对齐在各自列。

导出数据为CSV文件

通过在演示数据中导出一个适度复杂的合作伙伴和他们的地址数据,来开始探索 OpenERP CSV文件的使用。

去 销售→地址簿→客户,取得 合作伙伴的列表,然后点击每条记录左边的复选框选择记录导出。然后看右侧列表中 其它选项 部分,点击 导出 的链接。弹出 导出数据对话框

  • Name,
  • Contact Name under the Contacts menu,
  • City under the Contacts menu.

你可以点击选择一次加入一个,也可以Ctrl+点击加入多个选择 –你加入他们的顺序就是他们显示的顺序。

如果你还不想导出数据,或者希望将来使用相同的字段,你有 选项保存这些设置。要做到这点,点击 “保存字段列表”并且输入一个名称。

然后点击 “导出”并保存结果数据为 csv 文件在可访问的任何地方 – 比如你的桌面。你能在电子表格程序或者文本编辑器中打开。

你将看到你有了一个合作伙伴列表,包括 名称和每个伙伴的联系人旁边的城市。在有多个地址的情况下,合作伙伴的名称被留 空。所以,要注意条目的顺序是很关键的,这很重要 – 不要对列表排序!

Tip

列表限制

你在客户端导出的条目的数量有个限制 – 它是你可以看到的,默认情况下,web客户端是20项,但是在GTK客户端是任意的

在你显示的条目个数上面点击,您可以改变浏览的条目数量。然后你可以选择一次固定显示的条目数量,例如,50或100,或您可以选择一次查看条目的数量不受限制。

将CSV文件导入OpenERP

通过删除所有数据并输入新的数据,使用导出的文件作为一个导入文件的模版(这里你仅仅导入新数据在演示数 据旁边,但是这原理跟空白数据库是相同的)

例如:要导入几个你指定了名字和城市联系人的合作伙伴 ,能将从导出文件创建下面的CSV文件:

示例导入业务伙伴地址
Name Contacts/Contact Name Contacts/City
Whole Globe Technologies Graham Global Athens
  Wanda World Rome
  Emerson Earth New York
Miles A Minute    

从合作伙伴列表,点击 导入 按纽,然后在 导入数据窗口 点击 浏览 搜素并打入新的data.csv文件。 Web客户端自动匹配列名,但是gtk客户端要求你点击“自动检测”按钮。你能使用默认的选项或者根据自己的喜好修改他们

你将得到对话框 显示你的已经导入2个对象,并且当你刷新屏幕列表是,你能看到新的合作伙伴和地址。

用CSV格式文件导入OpenERP复杂数据(含关联数据)

当你导入数据时,你必须克服一个问题,就是如何在 csv 平面文件表示数据库结构。 要做这一点,有两个解决方案可以用在OpenERP里:

  • 导入特殊方法结构化的CSV文件,是你能从单个文件装入几个不同的数据库表(比如,合作伙伴和合作伙伴的联系人 在一个csv文件,就像上面刚刚做的一样)
  • 导入几个CSV文件,每个对应到一个特定的数据库表,表之间有明确的连接。

Note

服务器端导入

你也能导入csv数据通过 服务器接口。文件格式是一样的,但是但列标题略有不同。当通过用户界面导入时, 它会检查列标题名称与用户 界面表单看到的名称相匹配。相反,当通过服务器导入的列标题的名称必须和字段的内部名称相匹配。

从建立csv文件头部开始。,在你感兴趣的对象上打开导入工具,选择你要导入进OpenERP数据库的字段。你必须包括那些 标记蓝色的字段,因为这些字段是必须的(除非你知道他们默认情况下会被适当的值填充),还有其它的对你重要的字段。

../../../../_images/csv_column_select.png

选择需要从CSV文件导入的字段

在你的CSV文件的第一行,使用字段名作为列名,每列增加一个字段。当导入CSV文件时,如果你的CSV文件第一行有这些 名字,OpenERP将自动匹配列名到表的字段名。当你 创建你的CSV文件,你将这么做,点击 “全部移除”按钮清除要导入的字段,然后选择浏览你要导入的文件,再点击“自动检测”按钮。

要使导入CSV数据匹配的你数据库结构,你应该在OpenERP接口区分一下几种类型的字段:many-to-many字段(在多个源和目 标之间),many-to-one fields(多个源到单一目标),和one-to-many(单一起源到多个目标)

Note

前台表

这些类型在相关联的前台表中描述 - 表的报名表格,您正在查看的项目将由一个简单的CSV文件更新。

只是因为这些关系字段出现在前台表,并不意味着相关的表上有一个反向字段 - 但也有可能。

所以在“用户”表单里没有one-to-many字段,来反应映“客户”表单many-to-one USER_ID销售员字段, 但有在“地址”表单有一个many-to-one partner_id 合作伙伴名称字段 反映到 “客户”表单的 one-to-many child_ids 合作伙伴联系人。

看看下面的截屏,找出差异

../../../../_images/csv_many2one.png

many2one字段: 业务伙伴的销售员

../../../../_images/csv_many2many.png

many2many字段: 业务伙伴分类

../../../../_images/csv_one2many.png

one2many字段: 业务伙伴联系人

CSV文件中所有其他字段 被编码为每一列中只有一个文本字符串。

many2one 字段

Many-to-one字段描述了一个关系,在数据库中前台表和其它表有个单一条目到其它表。OpenERP试图通过匹配字段值用其它 表的这个字段连接前景表中的新纪录。

Tip

字段标识

如果工作在服务器端,你能使用标识符,而不是资源的名称来连接表。要做这些,你导入第 一个文件(例如:产品),在CSV文件中具有命名为ID的列,它是包含了每个产品的唯一标识 符。这可能是一个递增的数字。

当您导入其他文件链接到第一个表,你可以使用偏好的名称作为标识符(因此,例如,当您节 省库存,您可以使用的产品ID,而不是产品名称D)。然后,你不需要任何复杂的转换,以创建 两个表之间的联系。

这大大简化了从另一个数据库导入到OpenERP。你为每个要导入的表创建连接ID列,包含第一个表的标识符

many2many 字段

Many-to-many字段负责 就像many-to-one 字段试图在表之间重建关系:通过姓名搜索或者使用标识符

单个many-to-many 字段有多个可能的值。因此,一个合作伙伴能够被授予几个关联的类别。你必须用逗号分隔不同的值。

one2many 字段

One-to-many 字段 有点不同。例如: 客户表单的联系人字段,包含了所有关联的联系人

要导入这样一个字段,你不必非要链接到另一个表中的现有条目,但是可以使用相同的文件创建和链接到几个合作伙伴。 然后,您可以通过one-to-many字段方式,指定多个值给链接到那个对象的不同字段上。每个字段必须在表的一列,该列标 题必须这种形式表达:字段 field_one-to-/field_linked-object . 刚才你导入合作伙伴的数据采取这种形式。

Note

关系字段的对称性

依赖于你数据的结构,能够更容易地 使用 one-to-many 表单或者 many-to-one表 单在关联的两个表,只要相关字段存在于关系的两端

例如,你能够:

  • 导入 一个合作伙伴用不同的联系人在单个文件(one-to-many)
  • 首先导入合作伙伴,然后联系人,用这个字段连接到合作伙伴many-to-one表单

CSV文件导入的另一示例

为了说明数据导入,你可以看到下面的另一个例子。首先导入合作伙伴类别,然后导入一些合作伙伴和他们的联系人,链 接到刚刚创建的类别。虽然您可以在建立合作伙伴的同时创建新的联系人(因为你能做one-to-many关系),但这种方式 你不能建立新的类别(因为它们使用了many-to-many关系)。你必须在单独的步骤创建新的类别。

业务伙伴分类

开始在一个CSV文件中创建合作伙伴类别:

  1. 在你的电子表格程序建立下表:
Partner categories file
  Column A Column B
Line 1 Category Name Parent Category
Line 2 Quality  
Line 3 Gold Quality
Line 4 Silver Quality
Line 5 Bronze Quality

在第一行,“My Name”和“Parent Category”是列标题 相当于“合作伙伴分类”表单的字段名。

Column A是不同的合作伙伴分类,Column B 表示了类别有个上级分类。如果:guilabel:Column B 是空白的, 表明这分类是顶层.

  1. 保存电子表格文件为CSV格式 – 逗号分割 – 命名这个文件为categories.csv。
  2. 在OpenERP,选择 销售→设置→地址簿→本地化→合作伙伴分类。
  3. 点击 “导入”(列表的右下方),弹出导入数据对话框,这里你将找到能被导入的字段列表。
  4. 在文件上点击“浏览”以导入字段,然后选择 你刚刚创建的,名为categories.csv的CSV文件。
  5. 如果你使用GTK客户端,点击 自动检测 匹配在CSV文件中的列名与合作伙伴分类的字段名匹配。
  6. 在对话框坐上点击“导入”装入你的数据。你将在新个对话框得到信息 导入4个对象。关闭这个和导入数据对话框返回原来的页面
  7. 刷新合作伙伴类别列表浏览分类树,包括了新的Quality分支,它的子分支就是你加载的新的合作伙伴

新建业务伙伴

这里是如何建立有多于一个联系人的新的合作伙伴,所以你做之前,如何将它们联系到这些新的类别。

  1. 输入下表进入你的电子表格程序
Partner data file - partners.csv
  Column A Column B Column C Column D
Line 1 Name Categories Contacts/Contact Name Salesman
Line 2 Black Advertising Silver,Gold George Black Administrator
Line 3     Jean Green  
Line 4 Tiny sprl   Fabien Pinckaers Administrator
  1. 第二行相当于建立一个新的合作伙伴,有两个已有的类别,两个联系人,并关联了一个销售员
  2. 保存这个文件,用文件名partners.csv。
  3. 在OpenERP,选择 销售→地址簿→客户,然后导入这个你刚刚保存的文件。你将得到一个信息确认你 要导入的数据,并 保存这些数据
  4. 校验你的导入的数据。应当出现一个新的合作伙伴(Black Advertising),具有有一个销售员 (Administrator),两个联系人(George Black and Jean Green)以及两个类别(Silver and Gold)。

在其它表单导出数据

OpenERP的一般导出机制, 让你更方便导出你系统内的任意数据到任何位置。 你能不受限制地导出数据,虽然你可以使用上面讨论过的 权限管理措施来限制能导出数据的人。

你能使用这个来导出你的数据到电子表格 或者进入其它系统,比如专门的财务软件包。 导出格式通常使用CSV格式,但你使用Microsoft 的COM机制,也能直接连接到Microsoft Excel。

Tip

访问数据库

开发人员还可以使用其他技术来自动访问OpenERP数据库。两个最有用的是:

  • 使用XML-RPC web service,
  • 直接访问PostgreSQL数据库。

Tip

Module Recorder

如果你要人工输入数据到OpenERP中,你将使用在本章的第一部分描述过的模块记录器。.

通过这样做,你会生成一个可以很容易地在不同的数据库重用的模块。然后,如果有一个 数据库的问题,你就能重新安装你生成的数据模块,包括你为这个系统所做的所有项目和修改。