はじめに
私は、ASCONのソフトウェア、具体的にはASCON Solution Complex 2013(以下、「Complex」という)+ COMPASSからソフトウェアを実装し始めた組織で働いています。 この「複雑」を管理しています。 「複合」には3層アーキテクチャ(クライアント-アプリケーションサーバー-データベースサーバー)があります。 「Complex」の主要製品はPILOT:PLMであり、管理ユーティリティのセットもあります。 管理ユーティリティの1つは、「Pilot WorkFlow Configurator」と呼ばれます(以降、WF Configuratorと呼びます)。
![画像](https://habrastorage.org/files/807/cc9/f8b/807cc9f8b3b244ceb004e71bf484c22e.png)
図1-PILOT WorkFlowコンフィギュレーター
作業中に、WFコンフィギュレーターの主な欠点が特定されました。
- ログインのみによるフルネームによるロシア語検索はありません(ユーザーがシステムに追加される「Complex Control Center」では、ドメイン\ログインの形式でのみ、検索はまったくありません)。
- 多数のユーザー(> 1K)を使用すると、非常に遅くなりました(ユーザーの追加操作で約4分)。
ユーザーを頻繁に追加する必要があったため、このプロセスを最適化する方法を見つけ出す必要がありました。
WF configuratorには多くの機能がありますが、これまでのところ、ユーザーの追加という1つにしか興味がありませんでした。
予想される遅延をなくすために、「アプリケーションサーバー」をバイパスして、データベースを直接操作することにしました。 分析後(テーブルの内容を手動で確認する必要がありました)、いくつかのテーブル(wfActors、wfDepartments、wfRoles、wfUserRoles)が定義され、そこに必要なデータが保存されました。 その結果、ユーザーを投稿に追加する手順は、フォームのレコード(inIdUser、inIdRole、dtStart、dtEnd)を含む1つのテーブル(wfUserRoles)にのみレコードを追加する必要があるという事実になりました。
- inIdUser-ユーザーID。
- inIdRole-ロール(位置)のID。
- dtStart-開始日。
- dtEnd-終了日。
開始日/終了日のフィールドがNULLの場合、投稿内のユーザーの期間は無制限です。
アクションアルゴリズムは次のとおりです。
- ユーザーIDが
select * from wfActors where stDescription like '%' order by stDescription
でselect * from wfActors where stDescription like '%' order by stDescription
、結果はユーザーIDフィールド、ロシア語のユーザー名を持つテーブルになります。 ユーザーIDを覚えておいてください。 - どの部門にユーザー
select * from wfDepartments
を追加する必要があるかがわかります。結果は、ユニットのID、ユニットの名前、ユニットの親のIDのフィールドを持つテーブルです。 ID単位を覚えてください。 -
select * from wfRoles where inIdDepartment = id-( . )
目的のユニットselect * from wfRoles where inIdDepartment = id-( . )
の位置を見つけ、結果はid-position、id-unit、positionの名前のフィールドを持つテーブルになり、id-positionを記憶します。 - これで、ユーザーIDと位置ID(必要な単位)が得られました。残りは、
insert into wfUserRoles values (id-, id-,null,null).
テーブルinsert into wfUserRoles values (id-, id-,null,null).
へのinsert into wfUserRoles values (id-, id-,null,null).
エントリを追加するinsert into wfUserRoles values (id-, id-,null,null).
Managment StudioでこれらのSQLクエリを実行した場合でも、WF configuratorを使用した場合よりもユーザーを追加する方が高速でした。 次に、コンソールでこれらすべてのアクションを実行するPythonスクリプトが作成されました。
次のステップは、このスクリプト用のGUIを開発することです。Python用のGUIライブラリを分析した後、PySideを選択しました。
以下がホームコンピューターにインストールされました。
1)仮想マシンにインストール:
- Windows Server 2008 R2
- MSSQL Server 2008 R2;
- 「複雑な」ASCON 2013。
2)コンピューターにインストール:
- Python 3.4.1
- pypyodbcモジュール
- Pysideモジュール。
すべてがインストールされると、開発を開始できます。
QT Designerでアプリケーション用のフォームを作成し、拡張子が.uiのファイルに保存しました。
PySideにはuisideファイルから.pyファイルを作成できる優れたツールpyside-uic.exeがあります。 これを行うには、コンソールで次のコマンドを実行します:
pyside-uic.exe file.ui -o file.py
-x
引数を指定すると、このfile.pyをすぐに起動でき、Designerで描画されたフォームが表示されます。 zetcode.com/gui/pysidetutorialからの指示をすでに使用したときに、このパラメーターについて少し後で知りました 。そのため、私のコードは
pyside-uic.exe file.ui -x -o file.py
によって生成されたものとは少し異なり
pyside-uic.exe file.ui -x -o file.py
。
ここに私が得たフォームがあります:
![画像](https://habrastorage.org/files/248/d17/239/248d17239da14f50920e038bea368e86.png)
図2-My WorkFlow Configurator
pypyodbcライブラリを使用してデータベースを操作し、PySideを使用してフォームを操作しました。
3つのファイルが判明しました。
- GUIレンダリングとフォームからさまざまな機能へのイベントバインディング。
- データベースを操作するためのクラス
- フォームの初期設定が読み込まれる(および終了時に保存される)テキストファイルのみ
ユーザーをポジションに追加するには、最初に「接続」ボタンでベースに接続する必要があります(ログインとパスワードはプログラムコードに直接登録されます)、「組織構造」ツリーが表示され、ネストされた要素がある場合は要素を展開し(1クリック)、選択した要素に移動します(ダブルクリック)、位置を選択します。 ユーザーを姓で検索し([検索]ボタン)、見つかったユーザーを選択して[挿入]ボタンを押します(ツリー内の位置と検索結果フィールド内のユーザーを選択する必要があります)。
興味深い点は、この瞬間に私がこれに遭遇するまで、木の建設でした。 なんとか簡単に書きたいと思いますが、これまでのところ要素のリストを作成しています。
treeItems=[] for l in sorted(list1): parent=str(l[2]) itemId=str(l[0]) descr=str(l[1]) treeItem=QtGui.QTreeWidgetItem([descr,itemId,parent]) treeItems.append(treeItem) treeItemsFin=[] i=1 for item in treeItems: for itemj in treeItems[i:]: if item.text(1)==itemj.text(2): item.insertChild(0,itemj) i+=1 treeItemsFin.append(item) self.treeWid.insertTopLevelItems(0,treeItemsFin)
まず、通常のリスト([element-id、description、parent-id]という形式の要素)から、タイプQTreeWidgetItemのオブジェクトのリストを作成し(最初のサイクル)、このリストから、ネスティングを含むタイプQTreeWidgetItemの別の要素のリストを作成します。
これは、既に追加されたユーザーの表示を意図的に拒否しています。これは、ASCON WF configuratorの問題であり、各操作後にツリー全体が更新されるため、非常に時間がかかるためです。
将来は、選択したブランチでのみユーザーを表示する予定です。
これまでのところ、私はこのアプリケーションのみを使用していますが、他の管理者が役に立つかもしれません...管理者のコンピューターにインストールされたPython、PySide、pypyodbcは、ASCON WF configuratorとは異なり、クロスプラットフォームです。
まとめ
利点のうち、主な目標が打たれます:
+ロシア語のユーザー検索。
+速い労働時間。
短所:
-投稿がツリーのルートにある場合は表示されません(つまり、どのユニットにもない、最終化する予定です)。
-既に追加されたユーザーはツリーに表示されません(最終決定する予定です)。
-ユニット、ポジションを作成/削除する機能はありません(確定する予定です)。
-ASCON WF-configuratorにはビジネスプロセス、自動操作などの機能はありません(近い将来、これを追加する予定はありません。あまり頻繁に使用せず、正常に機能するようです)。
現時点では、これですべてです。github.comのソースコードです 。
使用されたソースのリスト
zetcode.com/gui/pysidetutorial
deptinfo-ensip.univ-poitiers.fr/ENS/pyside-docs/index.html
www.pythoncentral.io/pyside-pyqt-tutorial-using-built-in-signals-and-slots