パイロット:WorkFlow-configuratorを作成しています。 開始する

はじめに



私は、ASCONのソフトウェア、具体的にはASCON Solution Complex 2013(以下、「Complex」という)+ COMPASSからソフトウェアを実装し始めた組織で働いています。 この「複雑」を管理しています。 「複合」には3層アーキテクチャ(クライアント-アプリケーションサーバー-データベースサーバー)があります。 「Complex」の主要製品はPILOT:PLMであり、管理ユーティリティのセットもあります。 管理ユーティリティの1つは、「Pilot WorkFlow Configurator」と呼ばれます(以降、WF Configuratorと呼びます)。



画像

図1-PILOT WorkFlowコンフィギュレーター



作業中に、WFコンフィギュレーターの主な欠点が特定されました。



ユーザーを頻繁に追加する必要があったため、このプロセスを最適化する方法を見つけ出す必要がありました。



WF configuratorには多くの機能がありますが、これまでのところ、ユーザーの追加という1つにしか興味がありませんでした。



予想される遅延をなくすために、「アプリケーションサーバー」をバイパスして、データベースを直接操作することにしました。 分析後(テーブルの内容を手動で確認する必要がありました)、いくつかのテーブル(wfActors、wfDepartments、wfRoles、wfUserRoles)が定義され、そこに必要なデータが保存されました。 その結果、ユーザーを投稿に追加する手順は、フォームのレコード(inIdUser、inIdRole、dtStart、dtEnd)を含む1つのテーブル(wfUserRoles)にのみレコードを追加する必要があるという事実になりました。



  1. inIdUser-ユーザーID。
  2. inIdRole-ロール(位置)のID。
  3. dtStart-開始日。
  4. dtEnd-終了日。


開始日/終了日のフィールドがNULLの場合、投稿内のユーザーの期間は無制限です。



アクションアルゴリズムは次のとおりです。



  1. ユーザーIDがselect * from wfActors where stDescription like '%' order by stDescription



    select * from wfActors where stDescription like '%' order by stDescription



    、結果はユーザーIDフィールド、ロシア語のユーザー名を持つテーブルになります。 ユーザーIDを覚えておいてください。
  2. どの部門にユーザーselect * from wfDepartments



    を追加する必要があるかがわかります。結果は、ユニットのID、ユニットの名前、ユニットの親のIDのフィールドを持つテーブルです。 ID単位を覚えてください。
  3. select * from wfRoles where inIdDepartment = id-( . )



    目的のユニットselect * from wfRoles where inIdDepartment = id-( . )



    の位置を見つけ、結果はid-position、id-unit、positionの名前のフィールドを持つテーブルになり、id-positionを記憶します。
  4. これで、ユーザー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)仮想マシンにインストール:





2)コンピューターにインストール:





すべてがインストールされると、開発を開始できます。



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







ここに私が得たフォームがあります:



画像

図2-My WorkFlow Configurator



pypyodbcライブラリを使用してデータベースを操作し、PySideを使用してフォームを操作しました。



3つのファイルが判明しました。



  1. GUIレンダリングとフォームからさまざまな機能へのイベントバインディング。
  2. データベースを操作するためのクラス
  3. フォームの初期設定が読み込まれる(および終了時に保存される)テキストファイルのみ


ユーザーをポジションに追加するには、最初に「接続」ボタンでベースに接続する必要があります(ログインとパスワードはプログラムコードに直接登録されます)、「組織構造」ツリーが表示され、ネストされた要素がある場合は要素を展開し(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



All Articles