1

メンバーをマーケティング リストに挿入するワークフローを作成しました。しかし、プロセスが完了すると、マーケティング リストのメンバー カウンターが常に = N -1 であることがわかります。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Crm.Sdk.Messages;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Workflow;
using System.Activities;

using System.IO;

namespace ContactToMarketingList
{
    public class ContactToMList : CodeActivity
    {
        [RequiredArgument]
        [Input("Contatto")]
        [ReferenceTarget("contact")]
        public InArgument<EntityReference> Contact { get; set; }

        [RequiredArgument]
        [Input("Marketing List")]
        [ReferenceTarget("list")]
        public InArgument<EntityReference> MList { get; set; }

        [RequiredArgument]
        [Input("Inserimento")]
        public InArgument<bool> Inserimento { get; set; }
        private static string _separatore = "\r\n";
        private static Log_Entity log = null; 


        protected override void Execute(CodeActivityContext executionContext)
        {
            //Entity myList = new Entity();
            //myList.LogicalName = "list"; 
            string _logs = string.Empty; 
            //string fileName = "c:\\temp\\" + DateTime.Now.ToString("HH:mm:ss.ffff");
            //if (!File.Exists(fileName))
            //    File.WriteAllText(fileName, string.Empty); 

            IExecutionContext context = executionContext.GetExtension<IExecutionContext>();
            IOrganizationServiceFactory serviceFactory = executionContext.GetExtension<IOrganizationServiceFactory>();
            IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
            ITracingService tracer = executionContext.GetExtension<ITracingService>(); 

            if(log== null)
            log = new Log_Entity(service); 

            try
            {
                EntityReference contactiId = Contact.Get<EntityReference>(executionContext);
                log.addLogs(ref _logs, "ContactiId:::" + contactiId.Id.ToString()); 
                EntityReference listId = MList.Get<EntityReference>(executionContext);
                log.addLogs(ref _logs, "ListId:::" + listId.Id.ToString());
                Boolean inserimento = Inserimento.Get(executionContext);
                log.addLogs(ref _logs, "Boolean:::" + inserimento.ToString().ToUpper());
                XrmDataContext datacontext = new XrmDataContext(service);


                var members = (from m in datacontext.ListMemberSet where m.ListId.Id == MList.Get<EntityReference>(executionContext).Id select m.EntityId.Id).ToArray();

                Boolean _action = false;
                foreach (Guid id in members)
                    if (Contact.Get<EntityReference>(executionContext).Id == id)
                        _action = true;

                log.addLogs(ref _logs, "L'utente è già nella lista?" + _action.ToString().ToUpper()); 

                if (Inserimento.Get(executionContext) && !_action)
                {
                    log.addLogs(ref _logs, "Add to marketing List - Inizio"); 
                   // File.AppendAllText(fileName, "Inserimento.Get(executionContext) && !_action"); 
                    AddMemberListRequest AddMemberRequest = new AddMemberListRequest();

                    AddMemberRequest.ListId = MList.Get<EntityReference>(executionContext).Id;
                    AddMemberRequest.EntityId = Contact.Get<EntityReference>(executionContext).Id;
                    AddMemberListResponse AddMemberResponse = service.Execute(AddMemberRequest) as AddMemberListResponse;
                    log.addLogs(ref _logs, "Add to marketing List - Fine"); 

                }
                else if (!Inserimento.Get(executionContext) && _action)
                {
                    log.addLogs(ref _logs, "Remove from  marketing List - Inizio"); 

                    RemoveMemberListRequest RemoveMemberRequest = new RemoveMemberListRequest();
                    RemoveMemberRequest.ListId = MList.Get<EntityReference>(executionContext).Id;
                    RemoveMemberRequest.EntityId = Contact.Get<EntityReference>(executionContext).Id;                   
                    RemoveMemberListResponse RemoveMemberResponse = service.Execute(RemoveMemberRequest) as RemoveMemberListResponse;
                    log.addLogs(ref _logs, "Remove from  marketing List - Fine"); 

                }
                else
                {
                    log.addLogs(ref _logs, Inserimento.Get(executionContext) == true ? "L'utente è già presente nella Lista di Marketing." + _separatore : "L'utente non è presente nella Lista di Marketing." + _separatore); 
                }

                log.WriteLog( _logs);
                var MyList = (from l in datacontext.ListSet where l.Id == listId.Id select l).ToList().FirstOrDefault();
                service.Update(MyList); 

            }
            catch(Exception ex)
            {
                if (log == null)               
                    new Log_Entity(service).WriteLog( _logs, ex.Message); 
                else                
                    log.WriteLog( _logs, ex.Message);               
            } 

        }

    }
}

私のログでは、Service.Update() を呼び出すたびに、次のメッセージが見つかりました。

EntityState は、null、Created (Create メッセージの場合)、または Changed (Update メッセージの場合) に設定する必要があります。

4

1 に答える 1

0

操作後にプラグインを登録します (または、適切だと思われる場合は非同期でも構いません)。

于 2013-03-23T00:09:14.570 に答える