2

私の仕事は、Plone 3.1.2 Webサイトからコンテンツをアンロードし、コンテンツに関する情報をSQLデータベース+ファイルシステムにロードすることです。

Webサイトを再作成し、ZODBにアクセスして、オブジェクトとフォルダーの構造を再作成しました。フォルダ、ファイル、ドキュメントのプロパティを読み取ることもできます。ATDocumentの.getText()メソッドを機能させることができません。トレースバックは次のようになります。

トレースバック(最後の最後の呼び出し):

  File "C:\Users\jan\Eclipse_workspace\Plone\start.py", line 133, in ? 
    main() 
  File "C:\Users\jan\Eclipse_workspace\Plone\start.py", line 118, in main 
    print dokument.getText() 
  File "e:\Program Files\Plone 3\Data\Products\Archetypes\ClassGen.py", line 54, in generatedAccessor
  File "e:\Program Files\Plone 3\Data\Products\Archetypes\BaseObject.py", line 828, in Schema 
TypeError: ('Could not adapt', <ATDocument at /*object_path*>, <InterfaceClass Products.Archetypes.interfaces._schema.ISchema>) 

オブジェクトをインターフェースISchemaに接続することに問題があると思いますが、これまでPloneを使用したことがなく、オブジェクトモデルがわかりません。

何が間違っているか欠落している可能性があるか、どのように修正できますか、および/または次に何をすべきかについての提案はありますか?どういうわけかISchemaインターフェイスクラスをこのオブジェクトに接続する必要があると思いますが、どこから始めればよいのかわかりません。助言がありますか?

私は今2日間立ち往生していて、前進しないので、どんな助けにも大いに役立ちます。

ZCMLフォーマットやその編集方法については何も知りません。デバッグモードの後>>> print dokument.getText()、スクリプトはGeneratorクラスのメソッドにジャンプするためmakeMethod()、スクリプトは実行されないと想定しますが、.getText()代わりにこのメソッドを作成しようとします。

inspect.getmembers(dokument)メソッドを返すので、getText()私は本当に混乱しています。どのZCMLファイルがATDocumentクラスに関連している可能性があるか知っていますか?または、このテーマに関する情報はどこで探すことができますか?

私のstart.pyファイルは、次のインポート以外にはほとんど何もしません。

from ZODB.FileStorage import FileStorage
from ZODB.DB import DB
from OFS.Application import Application
from BTrees import OOBTree
from Products.CMFPlone.Portal import PloneSite

次に、ドキュメントオブジェクトにアクセスして、実行を試みます.getText()

編集213-03-2615:27(GMT):

.zcmlファイルについて私が受け取ったサイトは、Products(に抽出された\Plone 3\Data)、lib、package-includesの3つのフォルダーでした。

lib内には、「common」、「abc」、「def」の3つのサブフォルダーを含むpythonフォルダーがあります(名前はクライアントの情報を公開しないように変更されています)。これらの各サブフォルダーにはconfigure.zcmlファイルが含まれており、そのうちの1つにはoverride.zcmlファイルも含まれています。

フォルダーpackage-includesには4つのファイルがあり、それぞれ1行の長さです。次の行が含まれています。

<include package="abc" file="configure.zcml" />
<include package="def" file="overrides.zcml" />
<include package="common" file="configure.zcml" />
<include package="def" file="configure.zcml" />

これらのzcmlファイルは現在コピーされていません。これらをどこにコピーしてインポートできますか?

4

2 に答える 2

1

通常、サイトにZCMLファイルをロードするときに登録されるコンポーネント登録がありません。

代わりに実行する可能性がbin/instance run yourscript.pyあり、面倒なサイトとZCMLの読み込みがすべてZopeに残ります。

確実に実行できるようになったら、ローカルコンポーネントマネージャーとセキュリティマネージャーを設定するスクリプトでサイトにアクセスできます。

from zope.app.component.hooks import setSite
from Testing.makerequest import makerequest
from AccessControl.SecurityManagement import newSecurityManager

site_id = 'Plone'     # adjust to match your Plone site object id.
admin_user = 'admin'  # usually 'admin', probably won't need adjusting
app = makerequest(app)
site = app[site_id]
setSite(site)
user = app.acl_users.getUser(admin_user).__of__(site.acl_users)
newSecurityManager(None, user)

# `site` is your Plone site, now correctly set up

このスクリプトをどこかに保存し、次のコマンドで実行します。

bin/instance run path/to/yourscript.py
于 2013-03-26T17:49:54.937 に答える
0

あなたがあなたの仕事を始める方法は良いものではありません。フレームワークを設定せずにAPIを使用しようとしています。可能ですが、フレームワークをよく知っている必要があります(永続的なサイトマネージャーをロードします...)

'ブラウザビュー'を追加し、それを呼び出してコンテンツをエクスポートする必要があります。

あなたはそれをすることができます:

  • 独自のアドオンを作成してインストールします
  • インストールされているアドオンを変更します(結局のところ、一時的な作業です)

browserviewとploneに関するドキュメントはhttp://developer.plone.orgにあります。

申し訳ありませんが、Plone用に開発する必要がある場合は、これらすべてについて少し読む必要があります。

于 2013-03-26T17:55:38.563 に答える