从SharePoint Workflow调用控制台应用程序

时间:2012-08-08 19:07:21

标签: sharepoint sharepoint-2010 ms-word workflow

我需要从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工作流是否支持调用外部进程?可以使用任何代码建议和替代解决方案。

提前致谢

2 个答案:

答案 0 :(得分:0)

我作弊....我最后只是将文件复制到一个文件夹,并编写了一个Windows服务来监视文件夹并打印文件。不是我首选的解决方案,但随后推动你只需要完成工作。

答案 1 :(得分:0)

这里的关键是PowerShell。遗憾的是,SharePoint并没有将PS集成到工作流程中,但是有第三方工具可以。 (我们创建了一个本土产品以避免许可。)一旦你拥有PS,你就无法通过调用控制台应用程序来完成工作流程。

以下是我们如何整合PS。创建名为“系统任务”的任务列表。当工作流启动时,写入此列表的条目;该条目实际上是一个事件。该条目应携带足够的信息以对PS有用。让计划的PS作业在某个时间间隔内运行并读取/处理“系统任务”列表。它应该将条目视为要处理的消息。不同的条目将携带不同的数据:

EVENT-X Y Z

主节点EVENT-X是您的活动讯息。 YZ您的参数,参数等等。显然,您可以根据需要传递尽可能多的信息。计划的PS作业将不同的事件发送到不同的PS脚本进行处理,然后在完成后检查系统任务。