1

使用済みおよび残りの「ユニット」の量を計算する、かなり単純なプラグインを作成しようとしています。私は2つのカスタムエンティティとを持っていますbc_learninglicencesbc_llbalanceプラグインは作成時に起動しbc_llbalance、もう1つは更新用です。

bc_llbalance: Contains
    bc_learninglicense (Look up field on bc_learninglicences / bc_name)
    bc_units (units that are used by this record)

bc_learninglicences: Contains 
    bc_name
    bc_unitsquantity (This is set to the total qty of units)
    bc_unitsused (this needs to inherit the sum of "bc_units" on "bc_llbalance")
    bc_unitsremaining ( simply bc_unitsquantity - bc_unitsused )

bc_unitsusedさて、合計を継承する方法を理解しようとしていたので、明らかに終了していないコードを含めました...このコードはエラーなしでビルドされます。ただし、CRMエラー:

プラグインからの予期しない例外(実行):LearningLicenses.LearningLicenses:System.IO.FileNotFoundException:ファイルまたはアセンブリを読み込めませんでした'Microsoft.Xrm.Client、Version = 5.0.9690.2165

システムがまもなく稼働する予定であるため、これを構築する期限は短いですが、理解できないこのエラーで先に進むことはできません...

私はこのプロジェクトの時間枠に遅れているので、エラーの助けかコード/解決策のどちらかがこの時点で高く評価されます。

ps私はCRM2011の開発に不慣れで、数週間/プロジェクトの経験がほとんどありません。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xrm.Sdk;
using Microsoft.Xrm.Sdk.Query;
using Microsoft.Xrm.Sdk.Messages;
using System.Text.RegularExpressions;
using System.ServiceModel;

namespace LearningLicenses
{
    public class LearningLicenses : IPlugin
    {

        public void Execute(IServiceProvider serviceProvider)
        {
            try
            {

                // Obtain the execution context from the service provider.
                Microsoft.Xrm.Sdk.IPluginExecutionContext context = (Microsoft.Xrm.Sdk.IPluginExecutionContext)
                    serviceProvider.GetService(typeof(Microsoft.Xrm.Sdk.IPluginExecutionContext));

                //Extract the tracing service for use in debugging sandboxed plug-ins.
                ITracingService tracingService =
                    (ITracingService)serviceProvider.GetService(typeof(ITracingService));

                if (context.InputParameters.Contains("Target") &&
                        context.InputParameters["Target"] is Entity)
                 {

                     // Obtain the target entity from the input parmameters.
                     Entity entity = (Entity)context.InputParameters["Target"];

                IOrganizationServiceFactory serviceFactory = (IOrganizationServiceFactory)serviceProvider.GetService(typeof(IOrganizationServiceFactory));
                IOrganizationService service = serviceFactory.CreateOrganizationService(context.UserId);

                EntityReference a = (EntityReference)entity.Attributes["bc_learninglicense"];// ((EntityReference)targetEntity.Attributes["bc_learninglicense"]).Id;


                if (entity.LogicalName == "bc_llbalance")
                        try
                        {  

                            //fetchxml to get the sum total of estimatedvalue
                            string value_sum = string.Format(@"         
                    <fetch distinct='false' mapping='logical' aggregate='true'> 
                        <entity name='bc_llbalance'>
                            <attribute name='bc_units' alias='units_sum' aggregate='sum' />
                               <filter type='and'>
                                <condition attribute='bc_learninglicense' operator='eq' value='{0}' uiname='' 
                               </filter>
                        </entity>
                    </fetch>", a.Id);

                            FetchExpression fetch = new FetchExpression(value_sum);
                            EntityCollection value_sum_result = service.RetrieveMultiple(fetch);
                            var TotalValue = "";
                            // decimal TotalValue = 0;
                            foreach (var c in value_sum_result.Entities)
                            {
                                TotalValue = ((string)((AliasedValue)c["value_sum"]).Value);
                            }

                            Entity llc = new Entity("bc_learninglicences");
                            llc.Id = a.Id;
                            llc.Attributes.Add("bc_unitsused", TotalValue);

                            service.Update(llc);

                        }
                        catch (FaultException ex)
                        {
                            throw new InvalidPluginExecutionException("An error occurred in the plug-in.", ex);
                        }
                }

            }
            catch (FaultException ex)
            {
                throw new InvalidPluginExecutionException("An error occurred in the plug-in.", ex);
            }
        }
    }
 }



THE ERROR : 

Unhandled Exception: System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault, Microsoft.Xrm.Sdk, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]: Unexpected exception from plug-in (Execute): LearningLicenses.LearningLicenses: System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.Xrm.Client, Version=5.0.9690.2165, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.Detail: 
<OrganizationServiceFault xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/xrm/2011/Contracts">
  <ErrorCode>-2147220956</ErrorCode>
  <ErrorDetails xmlns:d2p1="http://schemas.datacontract.org/2004/07/System.Collections.Generic" />
  <Message>Unexpected exception from plug-in (Execute): LearningLicenses.LearningLicenses: System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.Xrm.Client, Version=5.0.9690.2165, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.</Message>
  <Timestamp>2013-01-22T10:09:22.0275105Z</Timestamp>
  <InnerFault i:nil="true" />
  <TraceText>

[LearningLicenses: LearningLicenses.LearningLicenses]
[c1b35170-c563-e211-8c6d-b499bafd5e5b: LearningLicenses.LearningLicenses: Create of bc_llbalance]


</TraceText>
</OrganizationServiceFault>
4

2 に答える 2

1

Microsoft.Xrm.ClientはCRMによって使用されないため、GACまたはCRMサーバーのどこにも存在しません。これは、それを必要とするすべてのクライアントアプリケーションで再配布されることを目的としています。

プラグインアセンブリで参照する必要はまったくないので、削除して、コードで参照されているかどうかを確認します。含まれている場合は、そのアセンブリを使用しない同等のコードに置き換えることができるはずです。

于 2013-01-22T11:29:39.740 に答える
0

これを回避するには2つの方法があります。まず、SDKがGACで利用可能であることを確認する必要がありますが、プラグインが必要とするすべての依存関係を取り込むために、内部でILMergeを使用します。

于 2013-01-22T10:49:40.757 に答える