1

私は (以前の Hummingbird Enterprise) OpenText eDocs ドキュメント管理システムを使用しています。

http://www.opentext.com/2/global/products/products-opentext-edocs-products/products-opentext-edocs-document-management.htm

まだハミングバード 5.1.0.5 を使用しています。

このソフトウェアの API ドキュメントを確認してきましたが、一部の領域が少し曖昧です。ここまでで、プロファイル フォームを作成し、いくつかの値を設定できました。

DOCSObjects.Application docApp = null;
DOCSObjects.IProfile profile = null;
Type fType = Type.GetTypeFromProgID("DOCSObjects.Application");
docApp = (DOCSObjects.Application)Activator.CreateInstance(fType);
try { profile = docApp.CurrentLibrary.CreateProfile("DEF_PROF"); }
catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.Message); }
if (profile != null)
{
    try
    {
        profile.Columns["DOCNAME"].Value = "New PDF Document";
        profile.Columns["APP_ID"].Value = "ACROBAT";
        profile.ShowProfile(1);
        // not sure how to set a document here
        profile.SetDocument(docApp.CurrentLibrary.Name, document);
        profile.Save(); // requires a short flag, but what?
    }
    catch (Exception ex)
    {
        System.Diagnostics.Debug.WriteLine(ex.Message);
    }
}
else
{
    MessageBox.Show("Profile is null");
}

私が問題を抱えているのは、プロファイルを使用してドキュメントを保存する方法です。私はC#を使用しており、APIドキュメントとインテリセンスは単にドキュメントのオブジェクトを要求しています。それはパスを意味しますか、それとも PDF を特定の DOCSObjects タイプにロードする必要がありますか?

また、API ドキュメントは、ドキュメントを保存するときに OF_NORMAL などの定数を参照します。これは0だと思いますが、他に知っておくべきことはありますか? 値が定義されていないドキュメントで参照されている多くの定数があります。(すべての例は C++/VB です)。

誰もがこのソフトウェアを使用しているとは思えませんが、試してみようと思いました。ありがとうございました。

4

2 に答える 2

2

私が作成した API ラッパーを使用して、VB でそれを行いました。DOCSObjects の代わりに、DM API フォルダーの下にある PCDClient を使用する必要があります。

このコードは、大幅にカスタマイズされているため、すぐには機能しない可能性がありますが、いじってみると、おそらく理解できるでしょう。幸運を!

Public Sub CreateProfile(ByRef Doc As Profile)

    Try
       'SET THE STATIC META DATA
        Doc.objDoc.SetProperty("TYPE_ID", "DOCS") ' DOCUMENT TYPE IS ALWAYS DOCS
        Doc.objDoc.SetProperty("TYPIST_ID", RDIMSAPI._UserID)
        Doc.objDoc.SetProperty("APP_ID", RDIMSData.GetApp(Doc.FileToImport)) ' FILE TO IMPORT

        'CREATE THE DOCUMENT
        Doc.objDoc.Create()
        If Doc.objDoc.ErrNumber <> 0 Then
            Throw New Exception(Doc.objDoc.ErrNumber & " - " & Doc.objDoc.ErrDescription)
        End If

        'RETRIEVE THE NEW DOCUMENT PROFILE
        Dim DocNumber As Integer = Doc.objDoc.GetReturnProperty("%OBJECT_IDENTIFIER")
        Dim VersionID As Integer = Doc.objDoc.GetReturnProperty("%VERSION_ID")

        'ADD THE DOCUMENT TO THE PROFILE
        Dim objPutDoc As New PCDClient.PCDPutDoc
        objPutDoc.SetDST(RDIMSAPI._sDST)
        objPutDoc.AddSearchCriteria("%TARGET_LIBRARY", RDIMSAPI._Library)
        objPutDoc.AddSearchCriteria("%DOCUMENT_NUMBER", DocNumber)
        objPutDoc.AddSearchCriteria("%VERSION_ID", VersionID)
        objPutDoc.Execute()
        If objPutDoc.ErrNumber <> 0 Then
            Throw New Exception(Doc.objDoc.ErrNumber & " - " & Doc.objDoc.ErrDescription)
        End If
        objPutDoc.NextRow()

        'UPLOAD THE DOCUMENT
        Dim objPutStream As PCDClient.PCDPutStream = objPutDoc.GetPropertyValue("%CONTENT")
        Dim fs As FileStream = System.IO.File.OpenRead(Doc.FileToImport)
        Dim fi As FileInfo = New System.IO.FileInfo(Doc.FileToImport)
        Dim br As BinaryReader = New BinaryReader(fs)
        Dim addDocBytes As Byte() = br.ReadBytes(CInt(fs.Length))
        br.Read(addDocBytes, 0, addDocBytes.Length)
        br.Close()
        Dim bytesWritten As Integer = 0
        objPutStream.Write(addDocBytes, addDocBytes.Length, bytesWritten)
        objPutStream.SetComplete()

        'UNLOCK THE DOCUMENT
        Dim objDoc As New PCDClient.PCDDocObject
        objDoc.SetDST(RDIMSAPI._sDST)
        objDoc.SetObjectType("0_RDIMSPROF_SYS")
        objDoc.SetProperty("%TARGET_LIBRARY", RDIMSAPI._Library)
        objDoc.SetProperty("%OBJECT_IDENTIFIER", DocNumber)
        objDoc.SetProperty("%VERSION_ID", VersionID)
        objDoc.SetProperty("%STATUS", "%UNLOCK")
        objDoc.Update()
        objDoc.Fetch()
        objDoc = Nothing
        If Doc.objDoc.ErrNumber <> 0 Then
            Throw New Exception(Doc.objDoc.ErrNumber & " - " & Doc.objDoc.ErrDescription)
        End If

        'RELEASE ALL OBJECTS AND RETURN DOCUMENT NUMBER
        objPutDoc = Nothing

    Catch ex As Exception
        'IF EXCEPTION, LOG ERROR AND DISPLAY MESSAGE
        Throw New Exception("(" & Me.GetType().FullName & "." & New StackTrace(0).GetFrame(0).GetMethod.Name & ") " & ex.Message)
        Exit Sub
    End Try

End Sub
于 2011-07-23T05:40:32.240 に答える
2

あなたがまだ努力しているかどうかはわかりません。しかし、これが私のC#コードです。これはより大きなモジュールの一部であるため、すぐには機能しません。プロファイルパラメータは、たとえば「DEF_PROF」です。

これも PCDClientLib を使用します。私の理解では、これらはサーバー側のライブラリであり、サーバー上でのみ使用する必要があります。また、クライアント側のコードに既に使用しているライブラリを使用する必要があります。

// All variable prepended with an underscore are class fields etc...
// DMImportException is a custom exception, nothing special really

/// <summary>
/// Import a file into the library previously logged in to.
/// </summary>
/// <param name="profile">The name of the used profile.</param>
/// <param name="profileNameValues">A dictionary of strings containing the profile values wich should be saved for the document.</param>
/// <param name="FileName">The path and filename of the file to import.</param>
public virtual void ImportFile(string profile, Dictionary<string, string> profileNameValues, string FileName)
{
    if (!_isLoggedIn)
    {
        throw new DMImportException("Trying to import a file while not logged in into DM.");
    }

    int totalbyteswritten;
    byte[] bdata;

    bdata = file.readallbytes(filename);

    pcddocobject objdoc = new pcddocobject();
    objdoc.setproperty("%target_library", _library);
    objdoc.setdst(_dst);
    objdoc.setobjecttype(profile);

    foreach(var profilenamevaluepair in profilenamevalues)
    {
        objdoc.setproperty(profilenamevaluepair.key, profilenamevaluepair.value);
    }

    objdoc.create();

    if (objdoc.errnumber != 0)
    {
        throw new dmimportexception("error while creating a new objdoc. check the inner error.", objdoc.errnumber, objdoc.errdescription);
    }

    _docnumber = objDoc.GetReturnProperty("%OBJECT_IDENTIFIER").ToString();
    _versionID = objDoc.GetReturnProperty("%VERSION_ID").ToString();

    PCDPutDoc objPutDoc = new PCDPutDoc();

    objPutDoc.SetDST(_dst);
    objPutDoc.AddSearchCriteria("%TARGET_LIBRARY", _library);
    objPutDoc.AddSearchCriteria("%DOCUMENT_NUMBER", _docNumber);
    objPutDoc.AddSearchCriteria("%VERSION_ID", _versionID);
    objPutDoc.Execute();

    if (objPutDoc.ErrNumber != 0)
    {
        throw new DMImportException("RecentEdit Failure on Execute: Error while trying to get a handle to the newly created doc. Check the inner error.", objPutDoc.ErrNumber, objPutDoc.ErrDescription);
    }

    objPutDoc.NextRow();

    PCDPutStream objPutStream = (PCDPutStream)objPutDoc.GetPropertyValue("%CONTENT");

    objPutStream.Write((object)bdata, (int)bdata.Length, out TotalBytesWritten);

    objPutStream.SetComplete();

    objPutStream = null;
    objDoc = null;

    objDoc = new PCDDocObject();
    objDoc.SetDST(_dst);
    objDoc.SetObjectType(profile);
    objDoc.SetProperty("%TARGET_LIBRARY", _library);
    objDoc.SetProperty("%OBJECT_IDENTIFIER", _docNumber);
    objDoc.SetProperty("%VERSION_ID", _versionID);
    objDoc.SetProperty("%STATUS", "%UNLOCK");
    objDoc.Update();

    if (objDoc.ErrNumber != 0)
    {
        throw new DMImportException("Error while trying to unlock the just imported file. Check the inner error.", objDoc.ErrNumber, objDoc.ErrDescription);
    }

    objPutDoc = null;
    objDoc = null;
    return;
}

PS eDocs の新しいバージョンに更新することをお勧めします (今週末に 5.1.0.5 から 5.2.1 にアップグレードします ;-D)

- - 編集 - -

私はあなたが必要だと思います

Application.CurrentLibrary.CreateProfile("PROF_DEF").CreateVersionFromFile( /* filePath is one of the params */);

DM Extでこれを行う必要がある場合。DM API の代わりの API

于 2011-08-01T21:39:30.587 に答える