.NetおよびNavision 5.0-永遠の友情

プロット。


そして、こんにちは。
Ms Dynamics Navのようなものを導入しているオフィスで働いている間、私は1つの問題に直面しなければなりませんでした。
問題の本質はこれです:
システムを翻訳会社に導入すると、ソースファイルの名前の名前は既に翻訳されたファイルの名前と完全に一致する必要があるとの要件が定められていたため、ファイルの名前に厳しい問題がありました。 これらすべてにより、顧客はMS SQLデータベースにファイルを書き込む必要がありました。 NavikはUnicodeから遠く離れているため、すべての組み込みファイル関数は名前を歪め、ウムラウト、x、およびヨーロッパのアルファベットの他の要素を削除しました。
この問題を解決するために、タスクは正しい名前のファイルをデータベースに書き込むdllを作成することでした。 そして、オンデマンドで、これらのファイルをデータベースからファイルシステムに返します。 これらすべてにより、大きなファイルのダウンロードに問題があったため、MS SQLでFILESTREAMのようなものを使用するという強い意思決定が再び行われました。

解決策


第1章


問題の本質が明らかになったことを心から願っています。 それでは解決策に進みましょう。
あなたの謙虚な使用人がC#を最もよく処理するので、私はそれをそれに書くことにしました。 このようなことは一度もやったことがないので、たくさんの資料を掘り下げる必要がありました。
最初のステップは、モバイルに接続せずに上記のアクティビティを実行する一連の関数を作成することでした。
次のステップは、Comライブラリを利用可能にすることです。 つまり、AssemblyInfo.csファイルに[assembly:ComVisible(true)]を登録します。

それに応じて、それをregasmシステムに登録します。
Regasm d:/Classlibraryfornav.dll / codebase / tlb

第二章


ここで、これらすべてを書き込むテーブルを準備する必要があります。
まず、ナビゲーションでテーブルを作成し、MS SQLで編集してFILESTREAMに接続します。
最初は、テーブルは次のようになります。
画像
しかし、その後、EsquelでFILESTREAMサーバーをオンにします。

FILESTREAMを有効にするには:

1. SQL Server構成マネージャーを実行し、[FILESTREAM]タブのSQL Serverのプロパティに3つすべてのチェックマークを付けます。 その後、次のクエリを実行します。

EXEC sp_configure filestream_access_level, 2
RECONFIGURE


2.次に、ファイルグループを追加し、ファイルストレージを指定する必要があります。

ALTER database currentDb
ADD FILEGROUP Uploads
CONTAINS FILESTREAM
GO

ALTER database currentDb
ADD FILE
(
NAME= 'Upload',
FILENAME = 'C:\Users\Administrator\Upload'
)
TO FILEGROUP Uploads
GO


さて、プレート自体を少し修正します。
次の3つのコマンドを実行します。
a。 ALTER TABLE ***。Dbo。*** ADD [Id] [uniqueidentifier] ROWGUIDCOL NOT NULL UNIQUE-FILESTREAMに必要
b。 ALTER TABLE ***。Dbo。*** UploadFiles VARBINARY(MAX)FILESTREAMを追加-実際、彼自身
c。 ALTER TABLE ***。Dbo。*** ADD FileFullName NVARCHAR(MAX)-Navikが認識しにくいフィールドですが、多言語表示に必要です。

つまり、2つのフィールドが複製されていることがわかります。
Id = NavId-1つはナビゲート用、もう1つはFILESTREAM用
FileName!= FullFileName-最初のファイルには、ナビゲーターで表示できるように、ASCIIに変換されたパスを持つファイルの名前が含まれています。 また、Navizhnでは使用できませんが、完全なファイル名を保存するために必要なFullFileNameフィールド。

第三章


次のステップでは、dll-kuをNavikに接続します。 つまり、Codeunitでは、オートメーションタイプの変数を作成し、サブタイプでは、登録したライブラリと、作成した特定のクラスを見つけます。 私にとってはこうなった: 画像

さらにコードですでに:

CREATE( "Var");
"Var" .PutToDataBase( 'Order'、 'Material'、 'Project'、TRUE);

Ps
アラビア語、たとえば言語を使用している場合、質問は何らかの方法でNavikに表示されます。 これに対処するには、アラビア語を使用する必要があり、プログラム全体をこの言語に切り替えます。

Source: https://habr.com/ru/post/J90156/


All Articles