1

連絡先をマーケティング リストに追加するワークフローを構築しようとしています。

すべて問題ないように見えますが、コードの実行が終了し、マーケティング リストに移動すると、連絡先がリストにありません。

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

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

        [Input("Inserimento")]
        public InArgument<bool> inserimento { get; set; }

        bool action = false;
        private static IOrganizationService myService = null;
        private static Log_Entity log = new Log_Entity(string.Empty, myService);
        protected override void Execute(CodeActivityContext executionContext)
        {
            try
            {
                ITracingService tracingService = executionContext.GetExtension<ITracingService>();

                // Create the context
                IWorkflowContext context = executionContext.GetExtension<IWorkflowContext>();

                IOrganizationServiceFactory serviceFactory = executionContext.GetExtension<IOrganizationServiceFactory>();

                // Create the Organiztion service
                IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);
                myService = service;
                log.WriteLog("");
                // Get the target entity from the context
                Entity target = (Entity)context.InputParameters["Target"];


                Guid contactiId = contact.Get<EntityReference>(executionContext).Id;
                Guid ListId = MList.Get<EntityReference>(executionContext).Id;
                bool insert = inserimento.Get<bool>(executionContext);


                // Prepare DataContext by using AutoGenerated cs file
                XrmDataContext datacontext = new XrmDataContext(service);

                var MyContact = (from c in datacontext.ContactSet where c.ContactId == contactiId select c.Id).ToArray();
                var MyList = (from l in datacontext.ListSet where l.Id == ListId select l).ToList().FirstOrDefault();
                // tutti i membri della lista di marketing
                var members = (from m in datacontext.ListMemberSet where m.ListId.Id == MyList.ListId select m.EntityId.Id).ToArray();




                foreach (Guid id in members)
                    if (MyContact.FirstOrDefault() == id)
                        action = true;



                if (insert && !action)
                {

                    AddListMembersListRequest AddMemberRequest = new AddListMembersListRequest();

                    AddMemberRequest.ListId = ListId;
                    AddMemberRequest.MemberIds = MyContact;
                    // Use AddListMembersListReponse to get information about the request execution 

                    AddListMembersListResponse AddMemberResponse = service.Execute(AddMemberRequest) as AddListMembersListResponse;
                    //service.Update(MyList);

                }
                else if (!insert && action)
                {

                    RemoveMemberListRequest RemoveMemberRequest = new RemoveMemberListRequest();
                    RemoveMemberRequest.ListId = ListId;
                    RemoveMemberRequest.EntityId = MyContact.FirstOrDefault();
                    // Use AddListMembersListReponse to get information about the request execution 
                    RemoveMemberListResponse RemoveMemberResponse = service.Execute(RemoveMemberRequest) as RemoveMemberListResponse;
                   // service.Update(MyList);

                }

            }
            catch (Exception ex)
            {
                log.WriteLog(ex.Message);

            }

        }
    }
4

1 に答える 1

1

設定した後に値を消去していませんAddMemberRequest.MemberIdsか?

編集:わかりました、今回は見つけたと思います。あなたpublic InArgument<bool> inserimento { get; set; }はおそらく犯人です。

この場合、ワークフロー アクティビティは、これがこのワークフローへの呼び出しの上流で定義されることを想定しています。静的に設定されている可能性が非常に高く、Insert インスタンスと Remove インスタンスの両方で変更されることはありません。これが true の場合、Insert の場合は本質的にハード コードされているためelse if (!insert && action)、Remove の場合は True に評価され、Insert の場合はif (insert && !action)False に評価されます。

コードは Remove に対して機能するため、 が機能していると想定するのが妥当bool actionです。したがって、他の bool 変数を調べることから始めます。

見逃した場合はお知らせください。(または、私が正しければ、緑色のチェックマークは気にしません。)

于 2013-03-12T15:22:13.407 に答える