0

我的Dynamics CRM中有一个Silverlight 4控件。Silverlight 4等待ASync

我希望根据它是否有多个发货日期来创造多个机会。用户在机会创造表单的底部有一个简单的表单,其中包含产品信息,日期和收入。这将创建原始副本,并使用用户在控件中输入的备用信息。

目前,只要用户等待一段时间才能完成呼叫,它就会创建机会;理想情况下,我希望表单在创建所有新机会后自动关闭。这里是相关的代码;任何人都可以帮助我解决我需要添加的内容,让CRM等待所有内容的创建。

 //OpportunitySet contains all necessary information to create multiple records, 
     //data is valid(it will create information if enough time is given. 
     _context.BeginSaveChanges(OnCreateOpportunityComplete, _context.OpportunitySet); 
     xrm.Page.data.entity.attributes.get("new_haschildren").setValue(true); 
     xrm.Page.data.entity.save("saveandclose"); 

     private void OnCreateOpportunityComplete(IAsyncResult result) 
     { 
      try 
      { 
      _context.EndSaveChanges(result); 
      Opportunity createdOpportunity = result.AsyncState as Opportunity; 
      //result.AsyncWaitHandle.WaitOne(); 
      MessagePanel.Children.Add(new TextBlock() 
      { 
       Text = String.Format("Created a new Opportunity named \"{0}\"\n\twith OpportunityId = \"{1}\".", 
        createdOpportunity.Name, createdOpportunity.OpportunityId) 
      }); 

      BeginRetrieveOpportunity(createdOpportunity.OpportunityId); 
      OnRetrieveOpportunityComplete(result); 
      } 
      catch (SystemException se) 
      { 
      _syncContext.Send(new SendOrPostCallback(showErrorDetails), se); 
      } 
     } 

任何帮助真的不胜感激。

回答

1

您可以将xrm save & close方法作为最后一行在您的完整方法内执行。

+0

这是我主要方法的最后一行;我已经尝试了一些东西,需要更多时间才能实现,但似乎没有任何工作。 –

+0

如果你有没有使用异步方法将xrm方法作为最后一行放入main中,则必须在异步调用的最后一个完整方法内。你也可以做一系列的异步调用(模拟一个同步行为,例如完成第一个异步,你调用第二个异步并继续) –

+0

我刚刚尝试过,表单从未关闭;我在OnCreateOpportunityComplete中放置了一个断点,即使创建了记录也没有发生任何断点。 –