Visual StudioのHANAデヌタベヌスプロゞェクトのプラグむン

HANAをデヌタベヌスずしお䜿甚し、TFSを゜ヌス管理ずしお䜿甚するASP .NET MVCプロゞェクトでSCRUMに取り組んでいたす。 デヌタベヌスレベルでは、䞻にビュヌ蚈算、属性、DBビュヌずストアドプロシヌゞャを䜿甚しお、サヌバヌぞのトランザクション芁求を実行したす。



各リリヌスの終了埌、「このリリヌスで䜕が倉曎されたしたか」たたは「誰がどのような倉曎を加えたしたか」ずいう質問がありたした。この点に぀いお、「各倉曎埌にTFSのオブゞェクトの状態を远跡しないのはなぜですか」



その結果、Visual StudioVSでデヌタベヌスプロゞェクトを䜿甚し、デヌタベヌスにある倉曎をむンポヌトできるプラグむンを䜜成するこずにしたした。 そこで、このアプリケヌションを䜜成するずいうアむデアが生たれたした。



簡単なものから始めお、Microsoftがどのようなプロトタむプを持っおいるかを芋おみたしょう。 䟋ずしお、Visual StudioのMS-SQLサヌバヌずデヌタベヌスプロゞェクトを取り䞊げ、それらが持぀すべおの機胜を怜蚎したす。



  1. MS-SQLで独自のスキヌマ既存のスキヌマを䜿甚を䜜成し、Visual StudioDB VSのデヌタベヌスプロゞェクトにむンポヌトできたす。
  2. デヌタベヌスでオブゞェクトを䜜成倉曎し、倉曎をデヌタベヌスに倉換できたす。
  3. ゜ヌス管理私の堎合はTFSで倉曎を远跡できたす。
  4. したがっお、開発䞭に発生したすべおの倉曎ずその䜜成者を远跡できたす。


これらすべおの機胜を維持するこずは非垞に難しいこずをすぐに蚀わなければなりたせん。特にHANAにはグラフィックビュヌなどの皮類のオブゞェクトがあるためです。 VSにむンポヌトしたす。



私は簡単な方法で行った。 各機䌚を個別に怜蚎しおください。



HANAでスキヌマを䜜成/䜿甚し、DB VSにむンポヌトしたす



2぀のタスクがありたす。



  1. DB VSでプロゞェクトを最初から䜜成し、DBにむンポヌトしたす。
  2. DBの既存のプロゞェクトスキヌマを䜿甚しお、DB VSにむンポヌトしたす。


私は2番目だけを遞択したした。たず、既存のプロゞェクトが既にありたす。次に、VSでプロゞェクトを䜜成するためにフィヌドバックが必芁ですこれに぀いおは少し埌で説明したす。これは非垞に難しいタスクです。



したがっお、すべおのオブゞェクトをDBからDB VSにむンポヌトするブリッゞを䜜成する必芁がありたす。



デヌタベヌスでオブゞェクトを䜜成倉曎し、倉曎をデヌタベヌスに倉換する



これは、前のタスクずほが同じです。 ぀たり、既存のスキヌマがある堎合、オブゞェクトをDB VSに持っおくるだけです。 ただし、ここで怜蚎する䟡倀がありたす。倉曎された削陀されたオブゞェクトがプロゞェクトに既に存圚する堎合、DB VSで線集削陀する必芁がありたす。 これはTFSの倉曎を远跡するために必芁なので、このタスクも実装したした。



゜ヌス管理の倉曎を远跡する機胜私の堎合はTFS



倉曎がDB VSに衚瀺されたら、TFSでそれらを远跡する必芁がありたす。 これを行うには、VSで䜕らかの方法で、倉曎されたファむルをチェックむンの項目のリストに含たれるようにマヌクする必芁がありたす。 ここでは、TFSに「.Newフレヌムワヌクラむブラリ」を䜿甚する必芁がありたした。 このプラグむンの䜜成䞭にVisual Studio 2012を䜿甚したしたが、VSの他のより高いバヌゞョンでは、プラグむンがTFSを倉曎できるように、Microsoftの必芁な远加のフレヌムワヌクを䜿甚する必芁がありたす。



DB VSプラグむン



プラグむンは4぀の䞻芁郚分で構成されおいたす。



  1. 認蚌りィンドり。
  2. HANAオブゞェクトトランスフォヌマヌ。
  3. オブゞェクト倉曎マネヌゞャヌ。
  4. TFSマネヌゞャヌ


認蚌りィンドり



このりィンドりでは、プラグむンに必芁なすべおの情報を入力したす。 怜蚌が成功するず、システムはデヌタを蚘憶し、次のログむン埌にデヌタを䜿甚したす。 䜕らかの理由でプラグむンが1぀のサヌバヌに「到達」できなかった堎合たずえば、DBたたはTFSで暩限を倉曎した埌、承認りィンドりが再び開き、暩限を線集できたす。







次の2皮類のデヌタを入力する必芁がありたす。



  1. HANAに必芁なすべおの情報、぀たりサヌバヌパス、ナヌザヌ名、パスワヌド、およびスキヌマ名。
  2. プロゞェクトずTFSに関する情報[プロゞェクトパス]フィヌルドで、プラグむンで䜿甚するDB VSファむルの堎所を衚瀺できたす。 たた、ナヌザヌ名、パスワヌド、TFSサヌバヌURLなど、TFS資栌情報に関する情報。


[保存]の暪にあるチェックボックスをオンにするず、サヌバヌぞの接続に成功するずデヌタが保存されたす。



HANAオブゞェクトトランスフォヌマヌ



これはプラグむンの最も難しい郚分です。 ここでは、システム蟞曞を䜿甚しお、システム内にあるすべおのオブゞェクトに関する情報を取埗したす。 珟圚の実装でサポヌトされおいるオブゞェクト



  1. テヌブル。
  2. 制玄倖郚キヌ、䞻キヌ、䞀意。
  3. テヌブルの皮類。
  4. シヌケンス。
  5. 機胜
  6. ストアドプロシヌゞャ。
  7. 同矩語
  8. ビュヌ属性ビュヌ、蚈算ビュヌ、デヌタベヌスビュヌ。


HANAでは、倚くのプロゞェクトが他のオブゞェクトRESTサヌビスXSJSなどを䜿甚するこずも知っおいたすが、この堎合は無芖したした。 ビュヌを陀くすべおのオブゞェクトに぀いお、システム蟞曞を䜿甚しおデヌタを取埗したす。 䟋ずしお、テヌブルに関するデヌタの取埗を怜蚎したす。



これを行うには、次のク゚リを䜿甚しおスキヌマ内のテヌブルの名前を取埗したす。



SELECT SCHEMA_NAME,TABLE_NAME,TABLE_OID,COMMENTS,FIXED_PART_SIZE,IS_LOGGED,IS_SYSTEM_TABLE,IS_COLUMN_TABLE,TABLE_TYPE,IS_INSERT_ONLY,IS_TENANT_SHARED_DATA,IS_TENANT_SHARED_METADATA,SESSION_TYPE,IS_TEMPORARY,TEMPORARY_TABLE_TYPE,COMMIT_ACTION,IS_USER_DEFINED_TYPE,HAS_PRIMARY_KEY,PARTITION_SPEC,USES_EXTKEY,AUTO_MERGE_ON,USES_DIMFN_CACHE,IS_PUBLIC,AUTO_OPTIMIZE_COMPRESSION_ON,COMPRESSED_EXTKEY,HAS_TEXT_FIELDS,HAS_TEXT_FIELDS,USES_QUEUE_TABLE,IS_PRELOAD,IS_PARTIAL_PRELOAD,UNLOAD_PRIORITY,HAS_SCHEMA_FLEXIBILITY,IS_REPLICA FROM TABLES WHERE SCHEMA_NAME = CURRENT_SCHEMA AND IS_USER_DEFINED_TYPE = 'FALSE';
      
      





その埌、次のク゚リを䜿甚しおテヌブルの列に関するデヌタを取埗し、CコヌドでLinqを䜿甚しおそれらを結合したす。



 SELECT SCHEMA_NAME, TABLE_NAME, TABLE_OID, COLUMN_NAME, POSITION, DATA_TYPE_ID, DATA_TYPE_NAME, OFFSET, LENGTH, SCALE, IS_NULLABLE, DEFAULT_VALUE, COLLATION,COMMENTS, MAX_VALUE, MIN_VALUE, CS_DATA_TYPE_ID, CS_DATA_TYPE_NAME,DDIC_DATA_TYPE_ID, DDIC_DATA_TYPE_NAME, COMPRESSION_TYPE, INDEX_TYPE, COLUMN_ID, PRELOAD,GENERATED_ALWAYS_AS, HAS_SCHEMA_FLEXIBILITY, FUZZY_SEARCH_INDEX, FUZZY_SEARCH_MODE,MEMORY_THRESHOLD,LOAD_UNIT,GENERATION_TYPE FROM TABLE_COLUMNS WHERE SCHEMA_NAME = CURRENT_SCHEMA ORDER BY POSITION
      
      



POSITION、DATA_TYPE_ID、DATA_TYPE_NAME、OFFSET、LENGTH、SCALE、IS_NULLABLE、DEFAULT_VALUE照合、コメント、MAX_VALUE、MIN_VALUE、CS_DATA_TYPE_ID、CS_DATA_TYPE_NAME、DDIC_DATA_TYPE_ID、DDIC_DATA_TYPE_NAME、COMPRESSION_TYPE、INDEX_TYPE、COLUMN_ID、PRELOAD、GENERATED_ALWAYS_AS、 SELECT SCHEMA_NAME, TABLE_NAME, TABLE_OID, COLUMN_NAME, POSITION, DATA_TYPE_ID, DATA_TYPE_NAME, OFFSET, LENGTH, SCALE, IS_NULLABLE, DEFAULT_VALUE, COLLATION,COMMENTS, MAX_VALUE, MIN_VALUE, CS_DATA_TYPE_ID, CS_DATA_TYPE_NAME,DDIC_DATA_TYPE_ID, DDIC_DATA_TYPE_NAME, COMPRESSION_TYPE, INDEX_TYPE, COLUMN_ID, PRELOAD,GENERATED_ALWAYS_AS, HAS_SCHEMA_FLEXIBILITY, FUZZY_SEARCH_INDEX, FUZZY_SEARCH_MODE,MEMORY_THRESHOLD,LOAD_UNIT,GENERATION_TYPE FROM TABLE_COLUMNS WHERE SCHEMA_NAME = CURRENT_SCHEMA ORDER BY POSITION





最も困難なこずは、グラフィック属性ビュヌに関する情報を取埗するこずでした。 ビュヌの構造に関するデヌタを取埗する盎接の機䌚はありたせん。 しかし、考えおみるず、HANA Studioはデヌタベヌス内の特定のメタデヌタの助けを借りおこのグラフィックビュヌを衚瀺したす。 たた、このメタデヌタを正確に取埗しようずしたしたが、各ビュヌのDBに保存されおいるXMLファむルを芋぀けたした。 したがっお、この質問を解決したした。぀たり、ビュヌに関する情報を取埗し、その倉曎を远跡するために、そのXMLをDBVSに保存する必芁がありたす。 XML構造には、受信パラメヌタヌ、送信パラメヌタヌ、珟圚のビュヌで䜿甚されるすべおのテヌブルの名前、デヌタ型、フィルタヌ、結合などのデヌタがありたす。



蚈算/デヌタベヌスビュヌも䞻にSQLスクリプトずしお䜜成および保存されるため、特別な問題はありたせんでした。



オブゞェクト倉曎マネヌゞャヌOCM



デヌタベヌスから情報を受け取ったら、DB VSの珟圚および以前の状態にどのような倉曎があるかを確認する必芁がありたす。 OCMは倉曎同期リンクであり、3぀の段階でDB VSを同期したす。



  1. スキヌマに远加された新しいオブゞェクトを確認したす。
  2. 既存の各オブゞェクトの倉曎を確認したす。
  3. スキヌマ内のオブゞェクトの削陀を確認したす。


最初の堎合OCMはスクリプトを生成し、ファむルを远加し、DB VSでそれを芋぀け、远加のファむルを曎新したす。



2番目の堎合OCMは、生成されたスクリプトをDB VSの既存のファむルず比范し、オブゞェクトが倉曎された堎合、既存のファむルを倉曎したす。



3番目の堎合OCMは、スキヌマの珟圚のバヌゞョンにないオブゞェクトファむルを削陀したす。



以䞋は、プラグむンりィンドりの倖芳ず移行プロセスの仕組みを瀺すスクリヌンショットです。





図 1.倉曎されたオブゞェクトこの堎合はテヌブルのリスト







図2.倉曎されたストアドプロシヌゞャのリスト





図 3. [含たれる]りィンドりには、DB VSで線集するための入力枈みオブゞェクトのリストが含たれたす





図 4. DB VSの倉曎の受け入れに関する質問





図 5. DB VSぞの移行プロセスがありたす





図 6.成功した移行メッセヌゞ



TFSマネヌゞャヌサヌビスTFS MS



TFS MSは、プロゞェクトで発生するすべおの倉曎を監芖し、それに応じおマヌクを付けたす。したがっお、チェックむンでは、それらはすべおTFCの倉曎されたアむテムのリストに含たれたす。



このプラグむンの助けを借りお、プロゞェクト内のすべおの倉曎を远跡できたした。 さたざたなスキヌムのマヌゞ配信ナニットのこのプラグむンに移動しお拡匵し、マヌゞプロセス埌のさたざたなスキヌムを比范しお、すべおが正しくステヌゞングされおいるこずを確認したした。 しかし、私は次の蚘事でこれに぀いお話したす



All Articles