9

OpenERP の ORM モジュールのみを使用して、売上税をデータベースの account_tax テーブルにアップロードするには、Python で「スタンドアロン」スクリプトを作成する必要があります。私がやりたいのは、以下の疑似コードのようなものです。

誰かが次の詳細を教えてくれますか: 1) sys.path を設定する必要がありますか? 現在、「アカウント」モジュールをインポートすると、次のエラーが表示されます: AssertionError: The report "report.custom" already exists! 3) データベース カーソルを取得する適切な方法は何ですか。以下のコードでは、単に psycopg2 を直接呼び出してカーソルを取得しています。

このアプローチが機能しない場合は、XML ファイルを記述して OpenERP アプリケーション自体からデータをロードする以外の代替アプローチを提案できますか? このプロセスは、標準の OpenERP アプリケーションの外部で実行する必要があります。

疑似コード:

import sys
# set Python paths to access openerp modules
sys.path.append("./openerp")
sys.path.append("./openerp/addons")

# import OpenERP 
import openerp

# import the account addon modules that contains the tables 
# to be populated.
import account

# define connection string
conn_string2 = "dbname='test2' user='xyz' password='password'"

# get a db connection
conn = psycopg2.connect(conn_string2)

# conn.cursor() will return a cursor object
cursor = conn.cursor()

# and finally use the ORM to insert data into table.
4

8 に答える 8

17

Web サービス経由で実行したい場合は、 OpenERP XML-RPC Web サービスをご覧ください。

OpenERP Web サービスで動作するサンプル コード:

import xmlrpclib

username = 'admin' #the user
pwd = 'admin'      #the password of the user
dbname = 'test'    #the database

# OpenERP Common login Service proxy object 
sock_common = xmlrpclib.ServerProxy ('http://localhost:8069/xmlrpc/common')
uid = sock_common.login(dbname, username, pwd)

#replace localhost with the address of the server
# OpenERP Object manipulation service 
sock = xmlrpclib.ServerProxy('http://localhost:8069/xmlrpc/object')

partner = {
   'name': 'Fabien Pinckaers',
   'lang': 'fr_FR',
}
#calling remote ORM create method to create a record 
partner_id = sock.execute(dbname, uid, pwd, 'res.partner', 'create', partner)

より明確に、OpenERP Client lib Example Code を client lib で使用することもできます。

import openerplib

connection = openerplib.get_connection(hostname="localhost", database="test", \
    login="admin", password="admin")
user_model = connection.get_model("res.users")
ids = user_model.search([("login", "=", "admin")])
user_info = user_model.read(ids[0], ["name"])
print user_info["name"]

両方の方法が良いことがわかりますが、クライアントライブラリを使用すると、コードが少なくて理解しやすくなりますが、xmlrpc プロキシを使用すると、処理する低レベルの呼び出しが行われることを願っています。

于 2012-07-16T07:14:51.827 に答える
1

私の見解によれば、そのようなニーズのためにOpenERPが提供するサービスを利用する必要が XMLRPCあります。NETSVC

accountsOpen ERPのモジュールをインポートする必要はありません。他のモジュールがaccounts.taxオブジェクトを継承し、ビジネスニーズに応じてその動作を変更した可能性があります。

最終的に、Open ERPを使用せずにこれらのメソッドを手動で呼び出してデータをフィードすると、Web service望ましくない結果/予期しない障害/一貫性のないデータベース状態が発生する可能性があります。

于 2012-08-08T07:32:18.567 に答える
1

Erppeekを使用してデータを閲覧できますが、実際に DB にデータをアップロードできるかどうかはわかりません。個人的には XMLRPC を使用/好みます

于 2013-12-23T06:46:29.923 に答える
1

openerp の xmlrpc 呼び出しを使用しないでください。account または openerp をインポートする必要はありません。さらに、すべての orm 機能を使用できます。

于 2012-07-16T07:11:13.123 に答える
0

DB と直接やり取りしたい場合は、psycopg2をインポートして、次のようにすることができます。

conn = psycopg2.connect(dbname='dbname', user='dbuser', password='dbpassword', host='dbhost')
cur = conn.cursor()
cur.execute('select * from table where id = %d' % table_id)
cur.execute('insert into table(column1, column2) values(%d, %d)' % (value1, value2))
cur.close()
conn.close()
于 2014-05-12T02:53:39.057 に答える
-1

どうしてそんなに直そうとするの!? ローカリゼーション モジュールを作成し、 XML ファイルでデータを定義する必要があります。これは、OpenERP でこのような問題を修正する標準的な方法です。

どの国の消費税を挿入しますか? もっと説明してください。

于 2014-06-15T16:25:31.087 に答える