使用Python和Smartsheet跨系统数据视图

发表在2014年3月14日

内容数据追踪是一个命令行Python应用程序,它使用来自多个外部源的数据更新现有表(本质上是单向同步)。它使用JSON配置文件进行连接设置,以及Smartsheet和这些外部源之间的数据映射。

应用程序使用表中的查找值在外部源中搜索匹配的数据,返回与找到的匹配相关的数据。这个简单的图表演示了一个基本的csv到smartsheet的示例:

数据跟踪器映射大纲

连接断开连接的系统

这就是Data Tracker想要解决的问题。几乎每个组织都使用多种软件系统来完成工作的各个方面。在多个系统之间协调数据很快就会变得站不住脚。我们的许多客户最近联系我们,想知道我们是否可以通过使用Smartsheet帮助他们解决这个问题。

事实证明,Smartsheet界面不仅可以协调用户之间的工作,还可以协调多个系统之间的工作。它允许您在表格中最多添加100列,以跟踪各种特定于业务的信息,如类型、状态、成本、所有者等。那么,为什么不使用它来创建跨多个外部系统正在发生的情况的一目了然的视图呢?

许多这些重要的系统——如ERP系统、数据库或员工目录——位于防火墙后面,不能通过互联网访问。这个需求使我们找到了一个可以在您的组织网络内的机器上运行的解决方案,而不是作为公共Internet上的应用程序。

考虑到这一点,我们选择了一种可以很容易地从命令行调用的语言,它本质上是模块化的,以允许可扩展的体系结构,能够处理各种连接器类型,并提供了根据需要添加额外连接器的直接方法。Python被认为是一个很好的选择,原因有很多,不仅仅是因为它作为一种系统脚本语言很受欢迎。

两个主要函数包含了Data Tracker如何解决这个问题。首先,应用程序能够连接到各种不同的源来检索数据。然后,Data Tracker将该数据映射到工作表中的相关列。连接到源和映射数据的这两个功能是由一对JSON文件配置的。两个文件的来源。json和映射。Json `,可在设置目录,必须由客户配置。

来源

每个外部系统都需要在' sources.json '中有一个条目。每个源条目都包含连接和从该源提取数据所需的设置。例如,MySQL源代码可能是这样的:

{"sourceId": "pob欧宝娱乐app手机下载roductDB", "connectorClassName": "MySQLCon", "dbServer": "localhost", "dbUser": "root", "dbPassword": "root", "dbName": "dvDB", "lookupQuery": "SELECT sku,name,description,price,quantity FROM product WHERE sku = %s", "isStrict": false}

每个源需要两个设置:sourceId是您给源指定的任意名称,并且必须是唯一的;而connectorClassName是一个Python类的名称,用于连接和检索此源的数据。您将需要使用Data Tracker附带的连接器类之一,或者创建自己的连接器类。其余的设置将有所不同,通常对源是惟一的。每个源可以有任意数量的设置。

映射

Data Tracker的神奇之处在于映射。每个映射都将一个表与一个源列表配对。每个源都有一个sourceId、一个lookupMapping和一组outputmaps。lookupMapping允许您映射表中的哪一列用于查找源中的记录;outputtmaps指定记录中的哪些字段将用于更新一行中的单元格。每个映射条目都包含一个sourceKey,这是数据的来源,以及一个sheetColumn设置,这是表中数据更新的位置:

{" sourceId": 0000000000000000, "sources": [{" sourceId": "openldap", "lookupMapping": {"sourceKey": "mail", "sheetColumn": " assignignee Email"}, " outputtmaps ": [{"sourceKey": "roomNumber", "sheetColumn": " assignignee Location"}, {"sourceKey": "telephoneNumber", "sheetColumn": " assignignee Phone"}]}]}]

这种设置是非常通用的sourceKey,因为它允许我们同时支持属性名(如目录服务或API返回的属性)和数组索引(以导航任何基于数组的源,如CSV文件)。

扩展数据追踪

可以创建其他连接器来支持任何数据源,公共的或私有的。要添加一个新的连接器,在' connectors '目录中创建一个连接器Python类。连接器类应该遵循与其他连接器类相同的结构。也就是说,新类应该包括以下函数签名:

def__init__自我sourceConfig#验证sourceConfigdeffindSourceMatch自我lookupVallookupKey查询源并返回匹配记录

若要在Data Tracker应用程序中使用新源,则在' sources. properties中的匹配sourceConfig项。Json的文件将需要为类创建。每个sourceConfig节点必须具有唯一的sourceId属性,以及设置为新连接器类名称的connectorClassName属性。

有关如何安装、配置和扩展的进一步说明数据追踪,请参考项目文档

评论

评论