26.02.2014, 14:52 | #1 |
Участник
|
CRM Money to Decimal C#
Добрый день!
Подскажите как в СРМ привести Money to Decimal. Не работает! Цитата:
decimal aggregate2 = Convert.ToDecimal(((AliasedValue)c.Attributes["totalamount_sum"]).Value);
или decimal aggregate2 = (decimal)Convert.ToDecimal(((AliasedValue)c.Attributes["totalamount_sum"]).Value); |
|
26.02.2014, 15:00 | #2 |
Участник
|
totalamount_sum
это правильное название поля без префикса? или totalamount это он и есть? c.Attributes["totalamount_sum"] возвращает объект? |
|
26.02.2014, 15:12 | #3 |
Участник
|
Цитата:
Вот метод, который должен возвращать Цитата:
private static decimal FetchResult(Guid quantity, IOrganizationService service)
{ string value_sum = @"<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false' aggregate='true'> <entity name='new_insurance_policy'> <attribute name='erpc_payment' alias='totalamount_sum' aggregate='sum'/> <filter type='and'> <condition attribute='new_contact' operator='eq' value='{0}' /> </filter> </entity> </fetch>"; decimal TotalValue = 0; value_sum = string.Format(value_sum, quantity); EntityCollection value_sum_result = (EntityCollection)service.RetrieveMultiple(new FetchExpression(value_sum)); foreach (var c in value_sum_result.Entities) { decimal aggregate2 = (decimal)Convert.ToDecimal(((AliasedValue)c.Attributes["totalamount_sum"]).Value); TotalValue = aggregate2; } return TotalValue; } |
|
26.02.2014, 15:15 | #4 |
Участник
|
У меня еще проблема, не могу присоединиться к процессу, то есть плагин не получается отдебажить.
Следую таким шагам 1) Построил решение 3) Скопировал .pdb в C:\Program Files\Microsoft Dynamics CRM\Server\bin\assembly 2) Restart IIS 3) Запустил откладку Debbuging 5) Connect to the Microsoft.Crm.Sandbox.HostService.exe. И ничего не происходит( НЕ знаю в чем может быть проблема |
|
26.02.2014, 15:24 | #5 |
Участник
|
Вот ошибка
Цитата:
PackageSalamandraCrm.CountChildSum.CalculateTotalSum: System.InvalidCastException: Не удалось привести тип объекта "Microsoft.Xrm.Sdk.Money" к типу "System.IConvertible".</Message> |
|
26.02.2014, 15:29 | #6 |
Участник
|
decimal aggregate2 = (decimal)Convert.ToDecimal(((AliasedValue)c.Attributes["totalamount_sum"]).Value);
1 нет проверки, что там значение есть 2 не пробовал использовать алиас для такой работы. что то мне кажется, что не будет он так работать. может ошибаюсь. (AliasedValue) это Money? Ваш плагин в Sandbox зарегистрирован? если нет, то w3wp Вам нужен Последний раз редактировалось g.Naukovych; 26.02.2014 в 15:34. |
|
26.02.2014, 15:32 | #7 |
Участник
|
|
|
26.02.2014, 15:58 | #8 |
Чайный пьяница
|
Если у вас аггрегация по полю типа Money, то и результат будет Money. Примерно так:
Код: decimal aggregate2 = ((Money)c.GetAttributeValue<AliasedValue>("totalamount_sum").Value).Value;
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
|
За это сообщение автора поблагодарили: Ion (1). |
26.02.2014, 16:14 | #9 |
Участник
|
Цитата:
Сообщение от a33ik
Если у вас аггрегация по полю типа Money, то и результат будет Money. Примерно так:
Код: decimal aggregate2 = ((Money)c.GetAttributeValue<AliasedValue>("totalamount_sum").Value).Value; Относительно откладки - не понимаю почему VS никак не реагирует на процесс Microsoft.Crm.Sandbox.HostService.exe. Копирую в парку Assambley file pdb, потом рестуртую ИИС, и запускаю откладку, при этом присоединяюсь к процессу Microsoft.Crm.Sandbox.HostService.exe. Сейчас СРМ никак не реагирует, раньше работало(( |
|
26.02.2014, 16:32 | #10 |
Чайный пьяница
|
Цитата:
Сообщение от Ion
Относительно откладки - не понимаю почему VS никак не реагирует на процесс Microsoft.Crm.Sandbox.HostService.exe.
Копирую в парку Assambley file pdb, потом рестуртую ИИС, и запускаю откладку, при этом присоединяюсь к процессу Microsoft.Crm.Sandbox.HostService.exe. Сейчас СРМ никак не реагирует, раньше работало((
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
27.02.2014, 12:41 | #11 |
Участник
|
Странную ошибку выдает плагин, что сущность контакт не найдена.
Я создав почти два идентичных плагина. Они суммируют суммы из дочерних записей и результат пишут в Контакт. На в тестовой среде все ок, но после переноса на боевую среду такая ситуация: "один плагин отрабатывает без проблем на сущности А, второй на сущности Б пишет ошибку, хотя они обновляют одну и туже сущность Контакт". Цитата:
The entity with a name = 'contact1' was not found in the MetadataCache.
Цитата:
Unhandled Exception: System.ServiceModel.FaultException`1[[Microsoft.Xrm.Sdk.OrganizationServiceFault,
Microsoft.Xrm.Sdk, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]]: The entity with a name = 'contact1' was not found in the MetadataCache.Detail: <OrganizationServiceFault xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/xrm/2011/Contracts"> <ErrorCode>-2147220891</ErrorCode> <ErrorDetails xmlns:d2p1="http://schemas.datacontract.org/2004/07/System.Collections.Generic"> <KeyValuePairOfstringanyType> <d2p1:key>CallStack</d2p1:key> <d2p1:value xmlns:d4p1="http://www.w3.org/2001/XMLSchema" i:type="d4p1:string"> в Microsoft.Crm.Extensibility.VersionedPluginProxyStepBase.Execute(PipelineExecutionContext context) в Microsoft.Crm.Extensibility.Pipeline.Execute(PipelineExecutionContext context) в Microsoft.Crm.Extensibility.MessageProcessor.Execute(PipelineExecutionContext context) в Microsoft.Crm.Extensibility.InternalMessageDispatcher.Execute(PipelineExecutionContext context) в Microsoft.Crm.Extensibility.ExternalMessageDispatcher.ExecuteInternal(IInProcessOrganizationServiceFactory serviceFactory, IPlatformMessageDispatcherFactory dispatcherFactory, String messageName, String requestName, Int32 primaryObjectTypeCode, Int32 secondaryObjectTypeCode, ParameterCollection fields, CorrelationToken correlationToken, CallerOriginToken originToken, UserAuth userAuth, Guid callerId, Guid transactionContextId, Int32 invocationSource, Nullable`1 requestId, Version endpointVersion) в Microsoft.Crm.Extensibility.OrganizationSdkServiceInternal.ExecuteRequest(OrganizationRequest request, CorrelationToken correlationToken, CallerOriginToken callerOriginToken, WebServiceType serviceType, UserAuth userAuth, Guid targetUserId, Boolean traceRequest, OrganizationContext context, Boolean returnResponse) в Microsoft.Crm.Extensibility.OrganizationSdkServiceInternal.ExecuteRequest(OrganizationRequest request, CorrelationToken correlationToken, CallerOriginToken callerOriginToken, WebServiceType serviceType) в Microsoft.Crm.Extensibility.OrganizationSdkServiceInternal.Execute(OrganizationRequest request, CorrelationToken correlationToken, CallerOriginToken callerOriginToken, WebServiceType serviceType)</d2p1:value> </KeyValuePairOfstringanyType> <KeyValuePairOfstringanyType> <d2p1:key>OperationStatus</d2p1:key> <d2p1:value xmlns:d4p1="http://www.w3.org/2001/XMLSchema" i:type="d4p1:string">0</d2p1:value> </KeyValuePairOfstringanyType> </ErrorDetails> <Message>The entity with a name = 'contact1' was not found in the MetadataCache.</Message> <Timestamp>2014-02-27T08:24:01.6682837Z</Timestamp> <InnerFault i:nil="true" /> <TraceText> [AdvancedUpdater: AdvancedUpdater.CPlugin] [5b2421e9-c305-e211-9afb-00155d001525: AdvancedUpdater.CPlugin: Update of any Entity] </TraceText> </OrganizationServiceFault> Последний раз редактировалось Ion; 27.02.2014 в 12:45. |
|
27.02.2014, 14:33 | #12 |
Чайный пьяница
|
Полный код покажите, пожалуйста.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
27.02.2014, 14:50 | #13 |
Участник
|
Спасибо! Все починили
|
|
04.03.2014, 22:38 | #14 |
Moderator
|
Во первых, рекомендую почитать раздел по отладке плагинов в SDK. Sandbox сервис будет безжалостно валить "зависшие" в отладчике процессы, если вы не запретите ему это делать. Так же рекомендую подход, который сам активно использую: http://www.axforum.info/forums/blog.php?b=329
Что касается самого кода по работе с агрегатами, рекомендую не писать такие вот портянки преобразований. Если в результате агрегации получится NULL, система не вернет и сам AliasedValue: http://www.axforum.info/forums/blog.php?b=417
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
|
|