0

SharePoint ワークフローから Word ドキュメントを開き、特定のプリンター トレイに印刷する必要があります。最初に Word.Interop を使用して Word アプリ インスタンスを作成しようとしましたが、doc オブジェクトは常に null を返しました。これは WordInterop のサポートされた使用法ではないことを読みました。だから今、私は代替品を探しています

Word ドキュメント、プリンター名、およびトレイ番号をパラメーターとして受け入れる単純なコンソール アプリを作成しました。コンソール アプリはコマンド プロンプトでうまく機能しますが、SharePoint ワークフロー CodeActivity からの呼び出しに問題があります。

string urlWord = GetwordDocument(printType);

System.Diagnostics.Process prcs = new System.Diagnostics.Process();
prcs.StartInfo.FileName = @"c:\DocxPrint2Tray.exe";
prcs.StartInfo.Arguments = String.Format(" \"{0}\" \"{1}\" \"{2}\" ",urlWord,  printerName, printerTray);
prcs.StartInfo.UseShellExecute = false;
prcs.StartInfo.RedirectStandardOutput = true;
prcs.Start();

string prcsOut = prcs.StandardOutput.ReadToEnd();
prcs.WaitForExit();

コードがprcs.StandardOutput.ReadToEnd()行でハングしているように見えます。SharePoint ワークフローは外部プロセスの呼び出しをサポートしていますか? コードの提案と代替ソリューションを受け入れます。

前もって感謝します

4

2 に答える 2

0

ここで重要なのは PowerShell です。残念ながら、SharePoint は PS をワークフローに統合していませんが、統合しているサードパーティ ツールがあります。(ライセンスを避けるために自社開発のものを作成しました。) PS を自由に使用できるようになれば、コンソール アプリの呼び出しを含むワークフローから実行できないことはほとんどありません。

PS を統合する方法は次のとおりです。システム タスクと呼ばれるタスク リストを作成します。ワークフローが開始されると、このリストにエントリが書き込まれます。そのエントリは実質的にイベントです。エントリには、PS に役立つ十分な情報が含まれている必要があります。一定の間隔でスケジュールされた PS ジョブを実行し、システム タスク リストを読み取り/処理します。エントリを処理対象のメッセージとして扱う必要があります。エントリが異なれば、データも異なります。

EVENT-X Y Z

リード ノードEVENT-Xはイベント メッセージです。 YそしてZあなたの引数、パラメータ、何でも。明らかに、必要なだけ多くの情報を中継できます。スケジュールされた PS ジョブは、処理のためにさまざまなイベントをさまざまな PS スクリプトにディスパッチし、完了したらシステム タスクをチェックオフします。

于 2015-04-14T11:55:17.897 に答える
0

私はだましました....最終的にファイルをフォルダーにコピーし、フォルダーを監視してファイルを印刷するWindowsサービスを作成しました。私の好みの解決策ではありませんが、仕事を終わらせる必要があるだけです。

于 2012-08-10T21:18:22.480 に答える