2

DynamicsCRM2011ソリューションで電子メールテンプレートを編集したい。

フォームにコンボボックスを追加して、ユーザーがメールの分類を決定できるようにします。「A」、「B」または「C」

これにより、メールゲートウェイは、アーカイブなどに関して特定のメールをどう処理するかを知ることができます。また、ヘッダーを設定すると、ユーザー(受信者)が分類を解除(分類を下げる)するのが難しくなります。これは、分類を押し込んだだけで簡単に実行できます。件名に(はい、私たちはまだコピーアンドペーストに対して脆弱であることを理解していますが、クライアントにそのことを伝えてみてください)。

メールが送信される直前に、メールアイテムを取得してメールヘッダーを追加したり、件名やその他の編集可能なフィールドなどを操作したりできるイベントがあります。

送信時にこのコードを実行するOutlookアドインを作成しましたが、基本的に、Dynamicsのどこに同様のコードを配置する必要があるかを知りたいと思います。

    private Dictionary<string, List<string>> _classifications;

    private const string ProtectiveMarkingSchemaName = "http://schemas.microsoft.com/mapi/string/{00020386-0000-0000-C000-000000000046}/X-Protective-Marking";

    private const string Version = "0.1";
    private const string Namespace = "xyz.com";


void ApplicationItemSend(object item, ref bool cancel)
    {
        // GUARD
        if (!(item is MailItem)) return;

        if (ClassificationDropDown.SelectedItem == null ||
            String.IsNullOrEmpty(ClassificationDropDown.SelectedItem.Label))
        {
            cancel = true;
            return;
        }

        // CURRENT ITEM
        var mailItem = (MailItem)Globals.ThisAddIn.Application.ActiveInspector().CurrentItem;

        // PREPARE MARKING
        var origin =
            Globals.ThisAddIn.Application.Session.CurrentUser.AddressEntry.GetExchangeUser().PrimarySmtpAddress;

        var classification = new StringBuilder();
        classification.AppendFormat("SEC={0}", ClassificationDropDown.SelectedItem.Label);
        if (DisseminationDropDown.SelectedItem != null)
        {
            if (!String.IsNullOrEmpty(DisseminationDropDown.SelectedItem.Label))
            {
                var cat = DisseminationDropDown.SelectedItem.Label;
                classification.AppendFormat(", CAVEAT={0}", cat);
            }
        }

        // FILTHY HACK
        if (mailItem.Subject == null)
        {
            mailItem.Subject = " ";
        }

        // FIND OLD MARKINGS
        var start = mailItem.Subject.IndexOf('[');
        var end = mailItem.Subject.LastIndexOf(']');
        if (end - start > 0)
            mailItem.Subject = mailItem.Subject.Remove(start, (end - start) + 1);

        // APPLY MARKING
        mailItem.Subject = String.Format("{0} [{1}]", mailItem.Subject.TrimEnd(), classification);
        mailItem.PropertyAccessor.SetProperty(
            ProtectiveMarkingSchemaName,
            String.Format("[VER={0}, NS={1}, {2}, ORIGIN={3}]", Version, Namespace, classification, origin));
    }
4

2 に答える 2

2

これは私が直接経験した分野ではありませんがemail、CRM SDKで(通常)使用されるオブジェクトは、基になる電子メールメッセージの抽象化であると言えます。

それにもかかわらず、SDKによって公開されている有用な領域があります。SDKのMicrosoftDynamicsCRMのカスタム電子メールプロバイダーと呼ばれるセクションを見てください。これは、必要な方向に何かを公開するように見えます。

電子メールプロバイダーは、MicrosoftDynamicsCRM電子メールルーターサービスと統合されたプラグイン可能なコンポーネントです。プロバイダーは、特殊な電子メール処理と電子メールプロトコルとのインターフェースを担当します。

そうは言っても、メールヘッダーを公開しているオブジェクトは表示されませんが、それほど難しくは見えませんでした。

(有用なものについては、 CRM 4.0の「Eメールプロバイダー」SDKトピックにリダイレクトされますが、これは引き続き有効でサポートされていることに注意してください)。

于 2012-08-23T16:12:01.367 に答える
2

私は現在マイクロソフトにチケットを持っていますが、彼らの最初の反応はこれができないということです。

彼らが提案する解決策は、メールゲートウェイのルールを使用してヘッダー情報を追加することです。これにより、同じヘッダー情報のみを書き込みたい場合はその問題が解決されますが、ヘッダーに変数値が必要な場合はさらに複雑になります。

私はグレッグの提案を見て、それらは私にとって良い学習演習でしたが、そこで解決策を見つけることができませんでした。

これを行うワークフローを作成することは可能ですが、CRMがメールを送信するときに行う他のすべてのジャンクを考慮する必要があります。率直に言って、ドキュメントは私が行う必要があることについて少し大雑把ですが、私の最善の推測は何かですこのような。

  • リボンエディタを使用して、元の送信ボタンを非表示にします
  • 選択肢のあるメールフォームにドロップダウンを追加します
  • ワークフローを起動するjavascriptを使用して新しい送信ボタンを追加します
  • メールでヘッダー値フィールドを探し、それをヘッダーに詰め込むワークフローを作成します
  • その後、それを送信します。

これによってアクティビティが自動的に閉じられるのか、コンテキストが保持されるのか(ケース、アカウントなどのアクティビティ)、またはこのメソッドが監査に影響するのかどうかはわかりません。おそらく、これらのことを考慮する必要があります。

于 2012-10-03T22:56:11.800 に答える