从HP TRIM的桌面客户端获取记录的URL

时间:2011-03-15 16:43:41

标签: hp-trim

是否可以从HP的TRIM复制记录/文档的URL并将其发送给某人以便下载?

2 个答案:

答案 0 :(得分:3)

在TRIM 7之前,您是否可以本机执行此操作取决于安装了哪些TRIM功能。 要查看您是否拥有正确的内容,请在桌面上创建一个TR5文件,然后右键单击它 - “TryURL” - 复制URL (TryURL右键单击操作需要TRIM客户端的东西 - 如果你没有,请尝试在记事本中打开TR5文件,看看那里是否有超链接。)

您可以使用适用于TRIM(TIPS或TSCI)的SharePoint连接器

获得此功能

或者有一种看起来很酷的廉价第三方产品 - 来自Icognition Pty Ltd.

答案 1 :(得分:1)

有几种方法可以做这样的事情。假设您将链接发送给同一WAN上的某个人,或者让您的TRIM系统可以访问互联网的安全风险选项,我要做的是在TRIM SDK的顶部构建一个简单的Web服务。 TRIM SDK是COM(带有PIA包装器)或适当的.Net程序集(版本7. *),因此简单的ASP.Net服务非常容易。

下面是我构建的ASP.Net服务的代码,基于HP提供的代码示例(基于TRIMSDKPIA20.dll,而不是TRIM 7.0 HP.HPTRIM.SDK程序集)。您可以使用它作为创建更多RESTful的基础,但实际上,您可以使用以下URL来调用它: http://server/ViewRecord/recno=D11-001

然后,您可以在SDK上创建一个“外部链接”,一个Addin,您可以在TRIM界面中注册为右键单击选项。像“发送下载URL ...”之类的东西会激活电子邮件并生成URL,但这有点复杂。

无论如何,webservice的代码:

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using TRIMSDK;
using System.Configuration;
using Microsoft.Win32;
using System.IO;

public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string errormsg = string.Empty;

        //Response.Clear();
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Database trim = new Database();
        trim.SetAsWebService();
        trim.Id = ConfigurationSettings.AppSettings["dbid"];
        trim.WorkgroupServerName = ConfigurationSettings.AppSettings["wgserver"];
        trim.WorkgroupServerPort = Int32.Parse(ConfigurationSettings.AppSettings["wgport"]);
        trim.Connect();
        string recno = Request.QueryString["recno"];
        if (String.IsNullOrEmpty(recno))
        {
            errormsg = "No recno parameter was passed.";
        }
        else
        {
            Record rec = trim.GetRecord(recno);
            if (rec == null)
            {
                errormsg = string.Format("Could not find a record with number \"{0}\". Either it doesn't exist, or you don't have permission to view it.", recno);
            }
            else
            {
                if (!rec.IsElectronic)
                {
                    errormsg = string.Format("Record {0} does not have an electronic attachment", rec.Number);
                }
                else
                {
                    IStream s = rec.GetDocumentStream(null, false, null);

                    Response.ClearHeaders();
                    Response.AddHeader("Content-Disposition", "filename=" + rec.SuggestedFileName);
                    Response.AddHeader("Content-Length", rec.DocumentSize.ToString());
                    Response.Buffer = false;
                    Response.ContentType = GetContentType(rec.Extension);

                    uint BufferSize = 10000;
                    uint DocumentLength = (uint)rec.DocumentSize;
                    byte[] buffer = new byte[BufferSize];
                    uint bytesread;
                    uint totalread = 0;

                    Stream outstream = Response.OutputStream;

                    while (totalread < DocumentLength)
                    {
                        s.RemoteRead(out buffer[0], 10000, out bytesread);
                        if (bytesread < 10000)
                        {
                            for (uint i = 0; i < bytesread; i++)
                            {
                                outstream.WriteByte(buffer[i]);
                            }
                        }
                        else
                        {
                            outstream.Write(buffer, 0, 10000);
                        }
                        totalread += bytesread;
                    }
                    outstream.Close();
                    Response.Flush();
                    return;
                }
            }
        }
        Response.Write(errormsg);
    }

    private string GetContentType(string fileExtension)
    {
        string ct = Registry.GetValue(@"HKEY_CLASSES_ROOT\." + fileExtension.ToLower(), "Content Type", string.Empty) as string;

        if (ct.Length == 0)
        {
            ct = "application/octet-stream";
        }

        return ct;
    }
}