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。创建一个名为 System Tasks 的任务列表。当工作流启动时,将条目写入此列表;该条目实际上是一个事件。该条目应包含对 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 回答