【发布时间】:2010-05-06 05:01:00
【问题描述】:
谁能解释将MYOB集成到rails应用程序中
【问题讨论】:
标签: ruby-on-rails myob
谁能解释将MYOB集成到rails应用程序中
【问题讨论】:
标签: ruby-on-rails myob
与 MYOB 的集成并不像看起来那么简单。
为了集成到 MYOB,您必须安装 ODBC 驱动程序,安装 MYOB 应用程序并直接访问 MYOB 公司文件。
您的集成要求和目的是什么?
我们选择的解决方案是构建一个桌面应用程序,以促进网络应用程序和 MYOB 之间的集成。
希望这会有所帮助。
【讨论】:
您可以,但真正做到这一点的唯一方法是使用 MYOB ODBC 驱动程序。该驱动程序的工作方式是使用 Myobp.exe 作为 ODBC 和 .MYO 文件之间的中间人。
MYOB ODBC 驱动程序为 MYOB 提供了一个 SQL 接口,但是有一些注意事项。它不是 MYOB 的真正的 SQL 接口。您可以进出的数据与 MYOB 在程序本身中呈现的导入和导出功能紧密匹配。
为了获取数据,您可以使用 ODBC 接口编写 SQL 查询,甚至一些 SQL 类型的函数可以在这些查询中,但您可能偶尔会遇到一些让您抓狂的事情。
为了获取数据,ODBC 驱动程序使用带有前缀“Import_”的表模式,使用这些表,您可以做的只是导入数据,它们不会返回您刚刚导入的发票编号之类的内容。这也意味着您无法像使用真实 SQL 接口所期望的那样更新现有条目。
但是,如果某些字段匹配,某些数据导入将导致现有数据的更新。我在 MYOB 及其 ODBC 接口方面的经验主要处理从我编写的输入到 MYOB 的系统中获取销售订单,因此可以完成某些事情。
我确实在 Rails 中编写了这个系统的第一个版本,但是你不能在不调整它们的工作方式的情况下使用标准 Rails 模型,因为 Rails 对它期望数据库的行为非常固执己见。
最近我用 Clojure 重写了它并使用了手写查询。
对于多行插入(例如发票的行),MYOB 使用事务作为包装器来指示一张发票上应该包含哪些行。
因此,如果您想使用 Rails,最好的选择是避免使用 Rails 模型,并可能编写直接 SQL 查询并与控制器和视图进行接口。
我现在无法访问我的旧代码,但大致如下:
def create_myob_invoice( iso )
# We can assume we have the job
# Now, for each iso line, we add an invoice
latest_invoice_number = Sale.find( :first, :order => 'InvoiceNumber DESC' ).InvoiceNumber.to_i
if latest_invoice_number
# We need to wrap it all in a transaction so MYOB knows they're all the one invoice
MyobDatabase.transaction do
iso.lines.each do |line|
new_service_line = ImportServiceSale.new
# Map iso fields to MYOB service sale fields
# e.g. suff like:
new_service_line.Description = "#{line.sDescription}"
new_service_line.save
end
end
end
end
您也可以通过以下方式找到帮助:http://freelancing-gods.com/posts/talking_to_myob_with_ruby
【讨论】: