1

アップデート:

この問題はRedemption 5.2で修正されました。

以前は、DASL 形式で指定された「文字列」名前空間の名前付き MAPI プロパティは、常に文字列型 (PT_UNICODE または PT_STRING8) であると想定されていました。

PT_LONG (=3) のように、プロパティ タイプを明示的に指定できるようになりました。 http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/MyIntegerUserProperty/0x00000003


私はRedemption 5.1 (および Outlook 2010/64) を使用しており、非常に面倒なケースに遭遇しました:

byte[]のオブジェクトをプロパティに書き込もうとすると、としてPT_MV_LONGではなくプロパティとして書き込まれPT_BINARYます。

これは、次のいずれかを使用した場合に発生しますRDOProp.Fields

RDOItem rdoItem = GetRDOItem();
// note this is typed PT_BINARY
string dasl = "http://schemas.microsoft.com/mapi/string/{312FD430-D997-418A-8E1F-8D224FE69F5D}/MyProp/0x00000102";
byte[] data = GetSomeData();
rdoItem.Fields[dasl] = data;

...または使用する場合RDOUtils.HrSetOneProp:

// this also sets MyProp, but does so as PT_MV_LONG, not PT_BINARY
RDOUtils utils = CreateUtils();
var mapiObject = rdoItem.MAPIOBJECT;
var propTag = utils.GetIDsFromNames(mapiObject,
    "{312FD430-D997-418A-8E1F-8D224FE69F5D}",
    "MyProp");
utils.HrSetOneProp(mapiObject, propTag, encoded);

上記のコードはコンパイルされませんが、型は正しいです。


アップデート:

上記のように文字列プロパティを使用すると、Redemption は「MyProp」ではなく「MyProp/0x00000102」プロパティを作成します。

4

2 に答える 2

1

最初のスニペットは私にはまったく問題ないように見えます。次のスクリプトを OutlookSpy から実行しても問題はありませんでした (OutlookSpy ツールバーの [スクリプト エディター] ボタンをクリックし、スクリプトを貼り付けて、[実行] をクリックします)。新しく追加されたプロパティを表示するには、メッセージの選択を解除して再度選択する必要がある場合があります。2 番目のスニペットでは、プロパティ タイプ (PT_BINARY) が設定されていません。

dasl = "http://schemas.microsoft.com/mapi/string/{312FD430-D997-418A-8E1F-8D224FE69F5D}/MyProp/0x00000102"
薄暗い data(2)
data(0) = 0
data(1) = 1
data(2) = 2
セット セッション = CreateObject("Redemption.RDOSession")
Session.MAPIOBJECT = Application.Session.MAPIOBJECT
セット msg = Session.GetMessageFromID(Application.ActiveExplorer.Selection(1).EntryID)
Msg.Fields(dasl) = データ
Msg.Save

于 2011-11-19T00:35:05.207 に答える
0

アップデート:

この問題はRedemption 5.2で修正されました。

以前は、DASL 形式で指定された「文字列」名前空間の名前付き MAPI プロパティは、常に文字列型 (PT_UNICODE または PT_STRING8) であると想定されていました。

PT_LONG (=3) のように、プロパティ タイプを明示的に指定できるようになりました。 http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/MyIntegerUserProperty/0x00000003


ええと、私は自分の質問をしてからそれに答えるなんてばかげていると思いませんか...とにかく、ここで何が起こっているようです:

Redemption (5.1.0.0) は、少なくとも次のコンテキストでは、フォーム内のプロパティを理解していないようですRDOItem.Fields:

http://schemas.microsoft.com/mapi/string/{312FD430-D997-418A-8E1F-8D224FE69F5D}/MyProp/0x00000102

プロパティの名前空間の後のすべてをプロパティ名として取得しますMyProp/0x00000102。この場合、ヒントは、面白い名前のプロパティを作成していたことです。名前(タグではなく)を指定し、 Redemptionでこの方法で入力できるかどうかはまだわかりません(ポインターがいいでしょう...)

少し面倒ですが、以下は機能します。

RDOUtils utils = CreateUtils();
var mapiObject = rdoItem.MAPIOBJECT;
var propTag = utils.GetIDsFromNames(mapiObject,
    "{312FD430-D997-418A-8E1F-8D224FE69F5D}",
    "MyProp");
propTag = ((propTag >> 16) << 16) | 0x0102; // add proptype
utils.HrSetOneProp(mapiObject, propTag, byteArray);
于 2011-11-19T00:43:05.223 に答える