AXForum  
Вернуться   AXForum > Microsoft Dynamics CRM > Dynamics CRM: Разработка
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 17.03.2009, 18:37   #1  
ppa80 is offline
ppa80
Участник
 
3 / 10 (1) +
Регистрация: 17.03.2009
Изменить область Действия
Идём Продажи -> Бизнес-Партнёры -> Действия

Нужно изменить страницу Действий так, чтобы отображались не только запланированные действия, но и все действия (в том числе закрытые).

Пока копаюсь полтора дня с Dynamics CRM, накопал следующие возможные варианты:
1) с помощью javascript я удаляю текущую страницу "Действия" при загрузке Бизнес-Партнёра, и потом через ISVConfig каким-то образом добавляю свою страницу. Но как добавить пока не совсем понимаю. Вроде как имеется готовое Представление Действий со всеми действиями, но как его подключить пока понимания нет. ( Как представления привязываются к пунктам в левой рабочей области?)
2) Просто ставить Visual Studio и править существующие apsx-формы Действий.

Эти возможности скорее корявые и наверняка есть более простой путь. Прошу помочь и подсказать как правильнее такую задачу решить? Спасибо!

Моя классификация - новичок.
Старый 17.03.2009, 22:27   #2  
Bondonello is offline
Bondonello
Kostya Afendikov
Аватар для Bondonello
MCBMSS
Лучший по профессии 2009
 
510 / 106 (5) +++++
Регистрация: 06.06.2008
Адрес: Украина
Посмотрите здесь, должно помочь. Варианты для MS CRM 4.0 и 3.0
Старый 23.03.2009, 18:00   #3  
ppa80 is offline
ppa80
Участник
 
3 / 10 (1) +
Регистрация: 17.03.2009
Цитата:
Сообщение от Bondonello Посмотреть сообщение
Посмотрите здесь, должно помочь. Варианты для MS CRM 4.0 и 3.0
Это, вроде, не совсем походит, поскольку фильтрация происходит только по датам, а не по состояниям. Если не прав, поправьте меня пожалуйста.

Пока я нашёл немного другой подход к решению проблемы - использовать расширенный поиск, где настраивается использование представления "Все действия" и ещё можно указать чтобы отображались действия только текущего пользователя как ответственного. Есть только две небольшие проблемы:
1) Пока не понял как фильтровать по текущему бизнес-партнёру (поскольку форма открывается из формы бизнес-партнёра).
2) При настраивании левого навигационного меню для бизнес-партнёра в "Продажах" через ISV Config типа

<NavBar>
<NavBarItem Icon="/_imgs/ico_18_debug.gif" Url="http://mdynamics/scg/advancedfind/advfind.aspx?etn=activitypointer&amp;QueryId=%7b6A17FCA2-A517-DE11-800C-005056AF5786%7d&amp;ViewType=4230&amp;AutoRun=True" Id="navISV1" Area="Info">
<Titles>
<Title LCID="1033" Text="Все действия" />
</Titles>
</NavBarItem>
</NavBar>
// где Url - url отчёта
после импорта isvconfig при кликании на соответствующий пункт выдаётся непонятная ошибка:

Error Description:
An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Error Details:
Exception of type 'System.Web.HttpUnhandledException' was thrown.

Full Stack:
[NullReferenceException: Object reference not set to an instance of an object.]
at Microsoft.Crm.Application.Controls.AppAreaPage.ConfigureHeader()
at Microsoft.Crm.Application.Controls.AppUIPage.OnPreRender(EventArgs e)
at System.Web.UI.Control.PreRenderRecursiveInternal()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

[HttpUnhandledException: Exception of type 'System.Web.HttpUnhandledException' was thrown.]
at System.Web.UI.Page.HandleError(Exception e)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
at System.Web.UI.Page.ProcessRequest()
at System.Web.UI.Page.ProcessRequestWithNoAssert(HttpContext context)
at System.Web.UI.Page.ProcessRequest(HttpContext context)
at ASP.scg_sfa_accts_areas_aspx.ProcessRequest(HttpContext context)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)



Other Message:

Error Number:

Source File:
Not available

Line Number:
Not available


Date: 03-23-2009

Time: 17:49:42

Server: mdynamics


Request URL:
http://mdynamics/scg/sfa/accts/areas.aspx?oId={0A241698-F7FC-DD11-800C-005056AF5786}&oType=1&security=852023&tabSet=navISV1Area


Когда отчёт открывается в броузере самостоятельно, т.е. не через навигационное меню, то всё открывается нормально (кроме п.1 разумеется ). Кто-нибудь знает куда дальше копать?
Старый 06.04.2009, 17:21   #4  
ppa80 is offline
ppa80
Участник
 
3 / 10 (1) +
Регистрация: 17.03.2009
Смотрю тема пользуется бешеной популярностью. Вобщем указанная ошибка возникала вследствии того, что при открытии этого урла dynamics crm добавляет к нему ещё какие-то параметры, но разбираться как их убрать пока не стал в следствии осознания безперспективности, потому как потом ещё нужно будет фильтровать по Account (и фильтровать на стороне клиента, поэтому идеологически это скорее неверный путь)

По ходу поисков решения проблемы наступил на все возможные грабли. Даже в базе пытался подменить запрос приписаный к указаной вшитой вьюшке.

Пробовал также используя Plugin перехватить запрос в плагине с меседжем Rollup (который описан в SDK) удалить из объекта запроса условие на статус Действия (похожие примеры находил в инете, но не для Rollup). Такой вариант тоже не сработал, поскольку реально меседж Rollup не поддерживается пока, о чём тоже никакой официальной инфы, всё на уровне слухов из форумов.

Сейчас остановился на Custom Page, который и пишу. Ребята в инете в иностранных блогах уже встречались с такой задачей и писали свои странички, но кодами не делятся за бесплатно
Старый 06.04.2009, 19:13   #5  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Lightbulb
Цитата:
Сообщение от ppa80 Посмотреть сообщение
Смотрю тема пользуется бешеной популярностью. Вобщем указанная ошибка возникала вследствии того, что при открытии этого урла dynamics crm добавляет к нему ещё какие-то параметры, но разбираться как их убрать пока не стал в следствии осознания безперспективности, потому как потом ещё нужно будет фильтровать по Account (и фильтровать на стороне клиента, поэтому идеологически это скорее неверный путь)

По ходу поисков решения проблемы наступил на все возможные грабли. Даже в базе пытался подменить запрос приписаный к указаной вшитой вьюшке.

Пробовал также используя Plugin перехватить запрос в плагине с меседжем Rollup (который описан в SDK) удалить из объекта запроса условие на статус Действия (похожие примеры находил в инете, но не для Rollup). Такой вариант тоже не сработал, поскольку реально меседж Rollup не поддерживается пока, о чём тоже никакой официальной инфы, всё на уровне слухов из форумов.

Сейчас остановился на Custom Page, который и пишу. Ребята в инете в иностранных блогах уже встречались с такой задачей и писали свои странички, но кодами не делятся за бесплатно
Попробуйте написать и повесить плагин на месадж Execute. Чтобы долго не копаться прочитайте тут, как это сделал я.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
Старый 27.04.2009, 15:56   #6  
a33ik is offline
a33ik
Чайный пьяница
Аватар для a33ik
MCP
MCBMSS
Злыдни
Соотечественники
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,243 / 896 (36) +++++++
Регистрация: 02.07.2008
Адрес: Greenville, SC
Lightbulb Дошли руки - проверил, написал, работает
Итак. Решение таково:
1. Пишется плагин на RetreiveMultiple сущности activitypointer задача которого - перехватить Query, который отправляется серверу для получения данных, изменить её, отдать серверу.
2. Задеплоить на сервер.
3. Пользоваться.

Код плагина:

Код:
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Crm.Sdk;
using Microsoft.Crm.SdkTypeProxy;
using Microsoft.Win32;

namespace TestPlugin
{
    public class ExecuteHandler : IPlugin
    {
        public ExecuteHandler(string config, string secureConfig)
        {
        }
        
        #region IPlugin Members

        public void Execute(IPluginExecutionContext context)
        {
            if (context.PrimaryEntityName == EntityName.activitypointer.ToString() && context.InputParameters.Contains("Query"))
            {
                Microsoft.Crm.Sdk.Query.QueryExpression query = (Microsoft.Crm.Sdk.Query.QueryExpression)context.InputParameters["Query"];

                if (query.LinkEntities.Count == 1)//делается для проверки, что есть фильтр по связанности
                {
                    Microsoft.Crm.Sdk.Query.LinkEntity link = (Microsoft.Crm.Sdk.Query.LinkEntity)query.LinkEntities[0];

                    if (link.LinkFromAttributeName == "activityid" && link.LinkFromEntityName == "activitypointer" && link.LinkToAttributeName == "activityid" && link.LinkToEntityName == "activityparty")//проверка на то, что связка идёт в поле regarding
                    {
                        Microsoft.Crm.Sdk.Query.ConditionExpression expr = (Microsoft.Crm.Sdk.Query.ConditionExpression)link.LinkCriteria.Conditions[0];
                        if (expr.AttributeName == "partyid" && expr.Operator == Microsoft.Crm.Sdk.Query.ConditionOperator.Equal)
                        {
                            Guid relatedEntityId = (Guid)expr.Values[0];//получаю идентификатор связанной записи

                            CrmService crmService = GetCrmService(context.OrganizationName);//потребуется для проверки то, что связанная сущность - компания - чтобы остальные цепочки такого рода не порезало

                            try
                            {
                                crmService.Retrieve(EntityName.account.ToString(), relatedEntityId, new Microsoft.Crm.Sdk.Query.AllColumns());//еслит связанная сущность - действительно компания - всё пройдёт нормально, если нет - будет экзепшен и изменение фильтра не произойдёт
                                query.Criteria.Filters.RemoveAt(0);
                            }
                            catch { }
                        }
                    }
                }
            }
        }

        #endregion

        private CrmService GetCrmService(string OrgName)
        {
            CrmAuthenticationToken token = new CrmAuthenticationToken();
            token.AuthenticationType = AuthenticationType.AD;
            token.OrganizationName = OrgName;

            CrmService crmService = new CrmService();
            crmService.UseDefaultCredentials = true;
            crmService.Url = (string)(Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\MSCRM").GetValue("ServerUrl")) + "/2007/crmservice.asmx";
            crmService.CrmAuthenticationTokenValue = token;

            return crmService;
        }

    }
}
Регистрация плагина - Выполняется регистрация сборки, регистрация шага с указанием сообщения RetreiveMultiple и Pre Stage выполнения.

Собственно всё.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством.

Подписывайтесь на мой блог, twitter и YouTube канал.
Пользуйтесь моим Ultimate Workflow Toolkit
За это сообщение автора поблагодарили: mistah (1).
Теги
c#, plugin, retrievemultiple

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Строка сервисного контракта: работает ли ограничение по срокам действия? Lazarus Dynamics CRM: Функционал 1 10.04.2009 08:04
Область по умолчанию deniska Dynamics CRM: Администрирование 1 25.03.2009 11:38
Как изменить печатную форму счета Talisman2005 Dynamics CRM: Разработка 8 09.07.2008 17:27
Завершенные действия koalex Dynamics CRM: Функционал 2 25.04.2008 10:52

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 07:38.