簡體   English   中英

CRM Dynamics插件代碼問題2015

[英]CRM Dynamics plugin code issue 2015

我正在嘗試為Microsoft CRM Dynamics 2015(版本7.0.2)創建一個插件,但無法正常工作。 該插件將在創建案例后運行,並將嘗試從帳戶中恢復合同信息。

我有以下代碼,它不起作用(合同信息未保存在案例/事件中)。

編輯

我更新了代碼,但現在失敗了,但是在系統作業上或使用插件注冊工具進行調試時,並沒有給出明確的錯誤。

系統作業錯誤消息:System.ServiceModel.QuotaExceededException:Microsoft Dynamics CRM遇到錯誤。 管理員或支持者的參考編號:#1C10449A

使用Visual Studio和插件注冊工具進行調試一直很順利,直到嘗試調用Update方法為止為止,在該方法中該事件不存在,但是由於它是同步插件,因此未創建該事件(這是獲取日志的唯一方法)能夠調試我發現的東西)。

public class CaseContractFill : IPlugin
{
    Contract checkForContract(Guid accountId, IOrganizationService service)
    {

        QueryExpression accountContractQuery = new QueryExpression
        {
            EntityName = Contract.EntityLogicalName,
            ColumnSet = new ColumnSet(true),
            Criteria = new FilterExpression
            {
                Conditions = 
                {
                    new ConditionExpression 
                    {
                        AttributeName = "accountid",
                        Operator = ConditionOperator.Equal,
                        Values = { accountId }
                    }
                }
            }
        };

        DataCollection<Entity> accountContracts = service.RetrieveMultiple(accountContractQuery).Entities;

        //Check if account has a contract and return it
        if (accountContracts.Count > 0)
        {
            return (Contract)accountContracts[0];
        }

        //Retrieves account
        Account account = (Account)service.Retrieve(Account.EntityLogicalName, accountId, new ColumnSet(true));

        //Check if account has a parent and call this method again with that parent
        if (account.ParentAccountId != null)
        {
            checkForContract(account.ParentAccountId.Id, service);
        }

        //If no Contract and/or no Parent returns null
        return null;

    }

    ContractDetail checkForContractLine(Guid contractId, IOrganizationService service)
    {
        QueryExpression accountContractQuery = new QueryExpression
        {
            EntityName = ContractDetail.EntityLogicalName,
            ColumnSet = new ColumnSet(true),
            Criteria = new FilterExpression
            {
                Conditions = 
                {
                    new ConditionExpression 
                    {
                        AttributeName = "contractid",
                        Operator = ConditionOperator.Equal,
                        Values = { contractId }
                    }
                }
            }
        };

        DataCollection<Entity> contractLines = service.RetrieveMultiple(accountContractQuery).Entities;

        return (ContractDetail)contractLines[0];
    }

    public void Execute(IServiceProvider serviceProvider)
    {
        ITracingService tracer = (ITracingService)serviceProvider.GetService(typeof(ITracingService));
        IPluginExecutionContext context = (IPluginExecutionContext)serviceProvider.GetService(typeof(IPluginExecutionContext));
        IOrganizationServiceFactory factory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
        IOrganizationService service = factory.CreateOrganizationService(context.UserId);

        try
        {
            Entity entity = (Entity)context.InputParameters["Target"];                
            Incident incident = (Incident)entity.ToEntity<Incident>();

            Contract contract = checkForContract(incident.CustomerId.Id, service);

            if (contract != null)
            {
                incident.ContractId = contract.ToEntityReference();

                ContractDetail contractLine = checkForContractLine(contract.Id, service);
                incident.ContractDetailId = contractLine.ToEntityReference();

                service.Update(incident);
            }
        }
        catch (Exception e)
        {
            throw new InvalidPluginExecutionException(e.Message);
        }
    }
}

錯誤分配了“ ContractId”。

if (contract != null)
{
  incident.ContractId = contract.ToEntityReference();
  service.Update(incident);
}

當您通過IOrganizationService.Retrieve獲取實體時, account.contract_customer_accounts將為空,就像所有其他關系一樣。

您可以單獨調用該服務以使用RetrieveMultiple獲取相關合同,也可以考慮使用OrganizationServiceContext

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM