由于我意识到您的问题通常是关于如何创建自定义模块,请允许我添加另一个答案。从 C# 控制台应用程序开始。
添加所需的程序集
自定义模块需要以下程序集。它们都位于 KC 的二进制文件夹中(默认情况下C:\Program Files (x86)\Kofax\CaptureSS\ServLib\Bin
位于服务器上)。
设置部分
添加一个新的User Control
和Windows Form
设置。这纯粹是可选的 - CM 甚至可能没有设置表单,但我建议无论如何添加它。用户控件是最重要的部分,这里 - 它将在 KC Administration 中添加菜单条目,并初始化表单本身:
[InterfaceType(ComInterfaceType.InterfaceIsIDispatch)]
public interface ISetupForm
{
[DispId(1)]
AdminApplication Application { set; }
[DispId(2)]
void ActionEvent(int EventNumber, object Argument, out int Cancel);
}
[ClassInterface(ClassInterfaceType.None)]
[ProgId("Quipu.KC.CM.Setup")]
public class SetupUserControl : UserControl, ISetupForm
{
private AdminApplication adminApplication;
public AdminApplication Application
{
set
{
value.AddMenu("Quipu.KC.CM.Setup", "Quipu.KC.CM - Setup", "BatchClass");
adminApplication = value;
}
}
public void ActionEvent(int EventNumber, object Argument, out int Cancel)
{
Cancel = 0;
if ((KfxOcxEvent)EventNumber == KfxOcxEvent.KfxOcxEventMenuClicked && (string)Argument == "Quipu.KC.CM.Setup")
{
SetupForm form = new SetupForm();
form.ShowDialog(adminApplication.ActiveBatchClass);
}
}
}
运行时部分
由于我从控制台应用程序开始,我可以继续将所有逻辑放入Program.cs
. 请注意,这仅用于演示目的,我建议稍后添加特定的类和表单。下面的示例登录 Kofax Capture,获取下一个可用批次,然后仅输出其名称。
class Program
{
static void Main(string[] args)
{
AppDomain.CurrentDomain.AssemblyResolve += (sender, eventArgs) => KcAssemblyResolver.Resolve(eventArgs);
Run(args);
return;
}
static void Run(string[] args)
{
// start processing here
// todo encapsulate this to a separate class!
// login to KC
var login = new Login();
login.EnableSecurityBoost = true;
login.Login();
login.ApplicationName = "Quipu.KC.CM";
login.Version = "1.0";
login.ValidateUser("Quipu.KC.CM.exe", false, "", "");
var session = login.RuntimeSession;
// todo add timer-based polling here (note: mutex!)
var activeBatch = session.NextBatchGet(login.ProcessID);
Console.WriteLine(activeBatch.Name);
activeBatch.BatchClose(
KfxDbState.KfxDbBatchReady,
KfxDbQueue.KfxDbQueueNext,
0,
"");
session.Dispose();
login.Logout();
}
}
注册、COM 可见性等
注册自定义模块是通过AEX 文件完成RegAsm.exe
的,最好是借助 AEX 文件。这是一个示例 - 请参阅文档以获取更多详细信息和所有可用设置。
[Modules]
Minimal CM
[Minimal CM]
RuntimeProgram=Quipu/CM/Quipu.KC.CM/Quipu.KC.CM.exe
ModuleID=Quipu.KC.CM.exe
Description=Minimal Template for a Custom Module in C#
Version=1.0
SupportsTableFields=True
SupportsNonImageFiles=True
SetupProgram=Minimal CM Setup
[Setup Programs]
Minimal CM Setup
[Minimal CM Setup]
Visible=0
OCXFile=Quipu/CM/Quipu.KC.CM/Quipu.KC.CM.exe
ProgID=Quipu.KC.CM.Setup
最后但并非最不重要的一点是,确保您的程序集是 COM 可见的:
我将整个代码放在了GitHub 上,请随时 fork。希望能帮助到你。