Tôi biết chủ đề này cũ, nhưng tôi đã làm việc rất nhiều với Domino API và các đối tượng Notes LotusScript thông thường thông qua API Domino COM.
Vấn đề với Domino API là quản lý bộ nhớ qua COM là khủng khiếp (nếu sử dụng API trong C#, hoặc VB, v.v.), và nó sẽ gây rò rỉ bộ nhớ và cuối cùng gây ra toàn bộ API và ứng dụng Ghi chú sụp đổ (ngay cả khi bạn không mở ứng dụng khách, bạn sẽ không thể khởi động nó sau khi API bị treo mà không cần khởi động lại máy tính của bạn hoặc gọi "nsd -kill"). Vui vẻ.
Tôi nhận thấy rằng việc sử dụng API Notes C trong C# thông qua P/Invoke, bạn có thể quản lý tài nguyên bộ nhớ tốt hơn để API không gây rò rỉ bộ nhớ khủng khiếp và treo. Tôi đã viết một wrapper một phần trong C#, sử dụng P/Invoke, truy cập vào Notes C API từ notes.dll. Việc sử dụng nó không liên quan gì đến việc cố gắng làm việc trong môi trường Domino, nhưng để sử dụng hội đồng Ghi chú để có quyền truy cập vào các tệp NSF để trích xuất thông tin DXL trong môi trường C#. Rõ ràng, bạn sẽ cần phải có khách hàng ghi chú được cài đặt để có quyền truy cập vào notes.dll và API C. Nhưng C# của tôi wrapper của Notes C API hoạt động rất tốt và ổn định hơn so với Domino COM API được cung cấp khi bạn cài đặt ứng dụng Notes.
Các lớp mà tôi đã thực hiện trong C# (mà tôi đã chỉ cần thiết) từ API Thuyết minh C là:
NotesSession (như NotesRuntime) NotesDatabase NotesNote NotesItem NotesDXLExporter NotesNoteCollection
Cũng như một số lớp tạm thời, enums, và cấu trúc để xử lý các bản dịch từ C API vào C#.
Các lớp học mà tôi đã triển khai cho đến nay đã phục vụ các mục đích mà tôi cần từ API Notes C. Họ chắc chắn có thể được mở rộng, nhưng tôi đã không cố gắng để đóng gói toàn bộ API trong C# P/Invoke wrapper. Tôi cũng phải tạo các trình xử lý để xử lý các đối tượng nhúng OLE có thể được lưu trữ trong các tài liệu Ghi chú và nhận dữ liệu được lưu trữ từ các đối tượng OLE đó, sử dụng các đối tượng Windows IStorage. Lưu ý: Tôi có thể cung cấp một số mẫu sau này (tôi phải đổi tên không gian tên và tổng quát mã, vì lý do độc quyền), nhưng tôi đã tạo các lớp trình bao bọc C# bằng cách sử dụng "Lotus C API Notes/Domino 8.5.2 Reference "NSF được cung cấp bởi IBM/Lotus (dưới dạng NSF có thể tải xuống). Sử dụng các định nghĩa C và các tham chiếu lớp, tôi có thể dịch chúng thành C# P/Invoke calls và bọc chúng vào các lớp C# thân thiện hơn, sau đó hoạt động giống như các cuộc gọi lớp LotusScript, nhưng trong C#, và các lớp được triển khai quản lý và xử lý bộ nhớ của chúng rằng toàn bộ điều không sụp đổ sau khi bạn đã truy cập hàng trăm ngàn tài liệu từ một chương trình C#. :)
Nguồn
2016-04-09 12:31:00
Bất kỳ ý tưởng nào nếu điều này có thể được sử dụng để lấy các mục theo định dạng "gốc" như .dxl (không phải tự tạo XML)? –